diff --git a/.github/workflows/dev-release.yml b/.github/workflows/dev-release.yml new file mode 100644 index 000000000..51f2eb636 --- /dev/null +++ b/.github/workflows/dev-release.yml @@ -0,0 +1,188 @@ +name: Dev Prerelease + +# Publishes the dev channel that install.mulgadc.com already serves. setup.sh has +# understood INSTALL_SPINIFEX_CHANNEL=dev since it was written and the install +# Worker resolves that channel to the newest GitHub prerelease, but nothing has +# ever produced one -- so /download/dev/amd64 returned 404. This is the producer. +# +# A separate workflow rather than conditionals in release.yml, because a dev build +# is a different artifact and not a release with flags off: amd64 only, no ISO, no +# AMI refresh, no bare-metal gate, and nothing that touches a self-hosted runner. +on: + push: + branches: [dev] + # Nothing here changes the binary, and a prerelease per docs commit would + # churn the channel our contacts are installing from. + paths-ignore: + - "docs/**" + - "**/*.md" + workflow_dispatch: + +permissions: + contents: write + +# Supersede rather than queue: on a run of merges to dev only the newest commit is +# worth publishing, and the older build would land after it and become the channel. +concurrency: + group: dev-release + cancel-in-progress: true + +jobs: + prerelease: + runs-on: ubuntu-26.04 + steps: + # Full history and tags, because the tag name is git describe and a shallow + # clone has no tag to describe against. + - name: Checkout Spinifex + uses: actions/checkout@v7 + with: + path: spinifex + fetch-depth: 0 + + # dev, not each repository's default branch, which is what release.yml takes. + # A dev build of spinifex against main of the others is a pairing nobody runs. + - name: Checkout Predastore + uses: actions/checkout@v7 + with: + repository: mulgadc/predastore + ref: dev + path: predastore + + - name: Checkout Viperblock + uses: actions/checkout@v7 + with: + repository: mulgadc/viperblock + ref: dev + path: viperblock + + - name: Checkout Northstar + uses: actions/checkout@v7 + with: + repository: mulgadc/northstar + ref: dev + path: northstar + + - name: Checkout Bluebottle + uses: actions/checkout@v7 + with: + repository: mulgadc/bluebottle + ref: dev + path: bluebottle + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + + - name: Set up Go + uses: actions/setup-go@v7 + with: + go-version-file: spinifex/go.mod + + # The tag carries the describe string so the commit is recoverable from the + # version alone, and the -dev suffix is what release.yml's own convention + # already treats as a prerelease. VERSION must equal the tag: the install + # Worker derives the asset name from the tag it resolves. + - name: Resolve the version + id: version + working-directory: spinifex + run: | + set -euo pipefail + # Describing against a dev tag would nest it, growing the name every release. + TAG="$(git describe --tags --always --exclude '*-dev')-dev" + case "$TAG" in + v*) ;; + *) echo "::error::git describe gave '$TAG', which is not a v-prefixed version"; exit 1 ;; + esac + if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then + echo "::notice::$TAG already published; nothing to do" + echo "exists=true" >> "$GITHUB_OUTPUT" + fi + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "Publishing $TAG" + env: + GH_TOKEN: ${{ github.token }} + + - name: Build microVM artifacts (lb-agent + kernel + initramfs) + if: steps.version.outputs.exists != 'true' + run: cd spinifex && make build-microvm-image + + - name: Build amd64 Tarball + if: steps.version.outputs.exists != 'true' + env: + VERSION: ${{ steps.version.outputs.tag }} + run: cd spinifex && make distro-amd64 VERSION="$VERSION" + + # --prerelease on create, never a later promote step. release.yml sets it in + # a job that runs after its verification gates, which leaves a window where + # the release is not flagged; GitHub's releases/latest excludes prereleases + # only, so in that window a dev build is what every customer curl installs. + - name: Publish the prerelease + if: steps.version.outputs.exists != 'true' + working-directory: spinifex + env: + GH_TOKEN: ${{ github.token }} + TAG: ${{ steps.version.outputs.tag }} + run: | + set -euo pipefail + # A file, not an inline string: the notes are Markdown, and leading + # whitespace from indenting a shell literal turns them into code blocks. + cat > "$RUNNER_TEMP/notes.md" < stale.txt + while read -r tag; do + [ -n "$tag" ] || continue + echo "deleting $tag" + gh release delete "$tag" --repo "$GITHUB_REPOSITORY" --yes --cleanup-tag + done < stale.txt diff --git a/.github/workflows/e2e-baremetal.yml b/.github/workflows/e2e-baremetal.yml index f4280bfbb..36925c480 100644 --- a/.github/workflows/e2e-baremetal.yml +++ b/.github/workflows/e2e-baremetal.yml @@ -123,7 +123,7 @@ jobs: INSTALLER_BIN="${RUNNER_TEMP}/bm-bins/spinifex-installer" \ SPINIFEX_SRC="${GITHUB_WORKSPACE}" \ VIPERBLOCK_SRC="${RUNNER_TEMP}/bm-bins/viperblock" \ - VERSION="$(cd "$GITHUB_WORKSPACE" && git describe --tags --always 2>/dev/null || echo dev)" + VERSION="$(cd "$GITHUB_WORKSPACE" && git describe --tags --always --exclude '*-dev' 2>/dev/null || echo dev)" - name: Write ePDU credentials run: | diff --git a/.github/workflows/e2e-cloudvendor-nightly.yml b/.github/workflows/e2e-cloudvendor-nightly.yml new file mode 100644 index 000000000..ffae5814b --- /dev/null +++ b/.github/workflows/e2e-cloudvendor-nightly.yml @@ -0,0 +1,287 @@ +name: E2E Cloud Vendor Nightly + +# Dispatched by the same Cloudflare Worker that drives e2e-nightly.yml, once per +# ref, rather than by a `schedule:` here. GitHub registers a schedule only from +# the default branch, so a cron in this file could never run `dev` and a feature +# branch as separate nightlies, and it would always execute the default branch's +# copy of this file -- leaving a fix to the workflow itself untestable until it +# had already shipped. A dispatch takes both the file and the source from its ref. +on: + workflow_dispatch: + inputs: + topologies: + description: "Space-separated topologies (blank = vm-single vm-multi bm vm-single-principal). One name runs one topology." + required: false + workbooks: + description: "Space-separated workbooks (blank = the driver's default list)" + required: false + source: + description: "tree (build this ref) or release (the published installer)" + required: false + default: tree + channel: + description: "With source=release: latest, or dev for the newest prerelease" + required: false + default: latest + keep_on_fail: + description: "Leave a failed topology up to inspect. It keeps billing." + required: false + type: boolean + default: false + auth: + description: "How nodes reach the OCI API: instance_principal (needs the tenancy dynamic group) or api_key (needs the credential hook). The vm-single-principal topology always uses instance_principal." + required: false + default: instance_principal + type: choice + options: [instance_principal, api_key] + no_external_pool: + description: "Form without the OCI allocator. Skips every workbook needing a public address. Not applied to vm-single-principal." + required: false + type: boolean + default: false + runner: + description: "Runner label (blank = the OCI_E2E_RUNNER variable, else ubuntu-26.04)" + required: false + +permissions: + contents: read + +# Every topology is built in one OCI compartment under one set of resource names, +# so two runs at once would each see the other's instances and the sweep in +# e2e-oci.sh could destroy a cluster the other run was still testing. Queue the +# second rather than cancelling it: a dispatch is usually a verification run. +concurrency: + group: e2e-oci + cancel-in-progress: false + +jobs: + oci: + # Hosted by default: this job only drives Terraform and SSH, and the work + # happens on OCI, so nothing here needs a hypervisor. Overridable because the + # argument for a per-provider self-hosted runner is control, not capacity -- + # a dedicated label keeps a two-hour cloud wait off the hypervisor labels and + # lifts the six-hour cap a hosted job carries. + runs-on: ${{ inputs.runner || vars.OCI_E2E_RUNNER || 'ubuntu-26.04' }} + # Three topologies including a bare-metal build, each with its own install, + # formation and workbook pass. The sweep still runs if this fires. + timeout-minutes: 300 + steps: + # Set here rather than in a job-level env block: the runner context is not + # available at job level, only from a step onwards, and a workflow that + # references it there is rejected as invalid before any job starts. + # + # Outside github.workspace on purpose. The checkout wipes untracked files, so + # on a persistent runner it would delete the Terraform state of a killed run + # before the next sweep could read it, leaving instances nothing can find. + - name: Put the Terraform state outside the checkout + run: echo "OCI_STATE_ROOT=$RUNNER_WORKSPACE/oci-state" >> "$GITHUB_ENV" + + - uses: actions/checkout@v7 + with: + path: spinifex + + - uses: actions/create-github-app-token@v3 + id: app-token + with: + client-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + # mulga alone. It is the only private repository of the six, and the + # five that build-install-artifacts.sh clones are public, so the builder + # needs no credential and this token is not widened to reach them. + repositories: mulga + + # build-install-artifacts.sh lives in mulga. The workbooks and their driver + # are in spinifex, so only the one directory is needed here. + - uses: actions/checkout@v7 + with: + repository: mulgadc/mulga + path: mulga + token: ${{ steps.app-token.outputs.token }} + sparse-checkout: scripts/tofu-cluster + + - uses: hashicorp/setup-terraform@v4 + with: + terraform_wrapper: false + + # Written to the runner's own filesystem and nowhere else. The OCI API + # credential is not here at all: it reaches Terraform as OCI_PRIVATE_KEY in + # the environment, so no key file is ever created. + - name: Install the throwaway SSH key + env: + OCI_E2E_SSH_PRIVATE_KEY: ${{ secrets.OCI_E2E_SSH_PRIVATE_KEY }} + OCI_E2E_SSH_PUBLIC_KEY: ${{ secrets.OCI_E2E_SSH_PUBLIC_KEY }} + run: | + set -euo pipefail + mkdir -p ~/.ssh + printf '%s\n' "$OCI_E2E_SSH_PRIVATE_KEY" > ~/.ssh/oci-spx + printf '%s\n' "$OCI_E2E_SSH_PUBLIC_KEY" > ~/.ssh/oci-spx.pub + chmod 600 ~/.ssh/oci-spx + ssh-keygen -y -f ~/.ssh/oci-spx > /dev/null + + - name: Run the OCI topologies + working-directory: spinifex/scripts/terraform/oci-spx + env: + OCI_TENANCY_OCID: ${{ secrets.OCI_TENANCY_OCID }} + OCI_USER_OCID: ${{ secrets.OCI_USER_OCID }} + OCI_FINGERPRINT: ${{ secrets.OCI_FINGERPRINT }} + OCI_PRIVATE_KEY: ${{ secrets.OCI_PRIVATE_KEY }} + OCI_REGION: ${{ vars.OCI_REGION || 'ap-sydney-1' }} + TF_VAR_compartment_ocid: ${{ secrets.OCI_COMPARTMENT_OCID }} + MULGA_ROOT: ${{ github.workspace }}/mulga + SPX_REF: ${{ github.ref_name }} + OCI_TOPOLOGIES: ${{ inputs.topologies }} + OCI_SOURCE: ${{ inputs.source }} + OCI_CHANNEL: ${{ inputs.channel }} + # Independent of the pool, deliberately. These were one switch, which made + # the combination we actually need -- an API key with the allocator running + # -- impossible to ask for, so public-IP allocation went untested. + OCI_INSTANCE_PRINCIPAL: ${{ inputs.auth == 'api_key' && '0' || '1' }} + # Skipping the pool records the allocator and every public-address workbook + # as SKIPPED, so a green run with this set is not a claim about guest + # networking. It exists for a formation-only check, not as a way past a + # missing credential. + OCI_NO_EXTERNAL_POOL: ${{ inputs.no_external_pool && '1' || '0' }} + # Only an API-key run needs one: an instance principal is the node's own + # certificate, so there is nothing to hand over. Unset is not an error, and + # the allocator gate then fails rather than passing a node that cannot + # authenticate. + OCI_CREDENTIAL_HOOK: ${{ inputs.auth == 'api_key' && vars.OCI_CREDENTIAL_HOOK || '' }} + # vm-single-principal builds in its own tenancy. The dynamic group it needs + # is a tenancy-root resource, and the shared test tenancy grants us only + # compartment rights, so that topology can never pass there however correct + # the code is. Unset skips it rather than spending a provision to fail. + OCI_PRINCIPAL_TENANCY_OCID: ${{ secrets.OCI_PRINCIPAL_TENANCY_OCID }} + OCI_PRINCIPAL_USER_OCID: ${{ secrets.OCI_PRINCIPAL_USER_OCID }} + OCI_PRINCIPAL_FINGERPRINT: ${{ secrets.OCI_PRINCIPAL_FINGERPRINT }} + OCI_PRINCIPAL_PRIVATE_KEY: ${{ secrets.OCI_PRINCIPAL_PRIVATE_KEY }} + OCI_PRINCIPAL_COMPARTMENT_OCID: ${{ secrets.OCI_PRINCIPAL_COMPARTMENT_OCID }} + OCI_PRINCIPAL_REGION: ${{ vars.OCI_PRINCIPAL_REGION }} + # Service limits are per tenancy, so the shape the other topologies use + # can have zero quota in this one. Ours has no E6 cores at all, and the + # apply then fails before anything about the principal is exercised. + OCI_PRINCIPAL_SHAPE: ${{ vars.OCI_PRINCIPAL_SHAPE }} + OCI_ARTIFACT_DIR: ${{ runner.temp }}/e2e-oci + OCI_KEEP_ON_FAIL: ${{ inputs.keep_on_fail && '1' || '0' }} + # Through the environment, never interpolated into the script below: a + # dispatch input is attacker-controlled text as far as the shell is + # concerned, and a quote in it would otherwise end the string. + WORKBOOKS_INPUT: ${{ inputs.workbooks }} + run: | + set -uo pipefail + # WORKBOOKS is exported only when the dispatch named some: the harness + # distinguishes unset (the driver's default list) from empty (run none). + if [ -n "$WORKBOOKS_INPUT" ]; then export WORKBOOKS="$WORKBOOKS_INPUT"; fi + ./e2e-oci.sh 2>&1 | tee "$RUNNER_TEMP/e2e-oci.log" + exit "${PIPESTATUS[0]}" + + # Before the sweep, which destroys the state the tables are read from, and + # always(): a run whose verdict is a failure is exactly the one somebody + # wants a table for. The successful path writes the same tables itself, so + # this step is for the run that did not get there. + # + # The markdown lives in the script rather than here. A heredoc in a YAML + # string is the one place in this repository nothing can lint or run. + - name: Publish the result tables + if: always() + working-directory: spinifex/scripts/terraform/oci-spx + env: + OCI_REGION: ${{ vars.OCI_REGION || 'ap-sydney-1' }} + OCI_ARTIFACT_DIR: ${{ runner.temp }}/e2e-oci + OCI_TOPOLOGIES: ${{ inputs.topologies }} + OCI_SOURCE: ${{ inputs.source }} + OCI_CHANNEL: ${{ inputs.channel }} + SPX_REF: ${{ github.ref_name }} + # The same two the run step passes. The header states what was and was not + # tested, so a summary rendered without them would claim more than the run. + OCI_INSTANCE_PRINCIPAL: ${{ inputs.auth == 'api_key' && '0' || '1' }} + OCI_NO_EXTERNAL_POOL: ${{ inputs.no_external_pool && '1' || '0' }} + run: ./e2e-oci.sh --summary-only + + # The sweep below deletes the per-topology state directories, so anything + # still only in one of them at that point is unrecoverable -- and a failing + # workbook writes its assertion output to exactly there. Copying into the + # artifact directory first is what makes a failure diagnosable by whoever + # reads the run page, rather than only on the runner that produced it. + - name: Collect the per-topology logs + if: always() + run: | + set -uo pipefail + dest="$RUNNER_TEMP/e2e-oci" + mkdir -p "$dest" + # The topologies this run drove, taken from the per-topology log the + # harness writes rather than from the dispatch input: a run that names + # none gets the harness's own default, and reading that back here would + # mean a second copy of the list to disagree with the first. A state + # directory left by an earlier run is then not collected, so the artifact + # cannot show a topology this run never attempted. + topologies="" + for log in "$dest"/*.log; do + [ -f "$log" ] || continue + name="${log##*/}"; name="${name%.log}" + [ -d "$OCI_STATE_ROOT/.validate-$name" ] && topologies="$topologies $name" + done + echo "collecting:${topologies:- nothing}" + for topology in $topologies; do + for file in "$OCI_STATE_ROOT/.validate-$topology"/*.log \ + "$OCI_STATE_ROOT/.validate-$topology"/*.txt \ + "$OCI_STATE_ROOT/.validate-$topology"/*.tsv; do + [ -f "$file" ] || continue + # The hook handles a private key and the one thing known about an + # operator's executable is that it is not ours to publish. + case "${file##*/}" in credential-hook.log) continue ;; esac + cp -- "$file" "$dest/$topology-${file##*/}" + done + done + ls -l "$dest" + + # always(), and before the artifact upload: an OCI bare-metal host left + # running by a cancelled or timed-out job is the most expensive way this + # workflow can fail. The sweep works from the Terraform state files, so it + # can only destroy what this run created. + - name: Sweep anything left behind + if: always() && !inputs.keep_on_fail + working-directory: spinifex/scripts/terraform/oci-spx + env: + OCI_TENANCY_OCID: ${{ secrets.OCI_TENANCY_OCID }} + OCI_USER_OCID: ${{ secrets.OCI_USER_OCID }} + OCI_FINGERPRINT: ${{ secrets.OCI_FINGERPRINT }} + OCI_PRIVATE_KEY: ${{ secrets.OCI_PRIVATE_KEY }} + OCI_REGION: ${{ vars.OCI_REGION || 'ap-sydney-1' }} + TF_VAR_compartment_ocid: ${{ secrets.OCI_COMPARTMENT_OCID }} + # The sweep destroys by state file, so it needs whichever tenancy each + # topology built in. Without these a leftover principal deployment is + # swept against a tenancy that never held it and reported clean. + OCI_PRINCIPAL_TENANCY_OCID: ${{ secrets.OCI_PRINCIPAL_TENANCY_OCID }} + OCI_PRINCIPAL_USER_OCID: ${{ secrets.OCI_PRINCIPAL_USER_OCID }} + OCI_PRINCIPAL_FINGERPRINT: ${{ secrets.OCI_PRINCIPAL_FINGERPRINT }} + OCI_PRINCIPAL_PRIVATE_KEY: ${{ secrets.OCI_PRINCIPAL_PRIVATE_KEY }} + OCI_PRINCIPAL_COMPARTMENT_OCID: ${{ secrets.OCI_PRINCIPAL_COMPARTMENT_OCID }} + OCI_PRINCIPAL_REGION: ${{ vars.OCI_PRINCIPAL_REGION }} + OCI_ARTIFACT_DIR: ${{ runner.temp }}/e2e-oci-sweep + run: ./e2e-oci.sh --sweep-only + + # Explicit, not left to the runner's own cleanup: a hosted runner is + # discarded after the job, but a self-hosted one keeps $HOME, so the key + # would outlive the run that needed it and sit there between nightlies. + - name: Remove the throwaway SSH key + if: always() + run: rm -f ~/.ssh/oci-spx ~/.ssh/oci-spx.pub + + # Named extensions rather than a directory glob: the artifact directory also + # holds the distro tarball and the test archive, which are hundreds of + # megabytes and reproducible from the ref. Everything here is a file the + # collect step above chose, so terraform.tfstate cannot reach an artifact. + - name: Upload the run + if: always() + uses: actions/upload-artifact@v7 + with: + name: e2e-oci-${{ github.run_id }} + path: | + ${{ runner.temp }}/e2e-oci.log + ${{ runner.temp }}/e2e-oci/*.log + ${{ runner.temp }}/e2e-oci/verdict.txt + ${{ runner.temp }}/e2e-oci/summary.md + ${{ runner.temp }}/e2e-oci/*.txt + ${{ runner.temp }}/e2e-oci/*.tsv + ${{ runner.temp }}/e2e-oci-sweep/*.log + retention-days: 14 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 311ced8f9..44e8781fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,7 +46,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v7 with: - go-version: "1.27.0" + go-version-file: spinifex/go.mod - name: Build microVM artifacts (lb-agent + kernel + initramfs) run: cd spinifex && make build-microvm-image diff --git a/.golangci.yml b/.golangci.yml index 8f251f11d..b5a2d717b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,8 @@ version: "2" +run: + allow-serial-runners: true + issues: max-same-issues: 10 @@ -142,14 +145,10 @@ linters: staticcheck: checks: - all - - -ST1000 # package comment - -ST1003 # naming conventions (Id→ID etc.) — too noisy to retrofit - -ST1012 # error var naming — errname covers this + error type suffixes - -ST1013 # HTTP status constants — usestdlibvars is broader - -ST1016 # receiver name consistency (too noisy to retrofit) - - -ST1020 # godoc on exported types — not enforcing yet - - -ST1021 # godoc on exported type groups — not enforcing yet - - -ST1022 # godoc on exported vars/consts — not enforcing yet - -SA4006 # value overwritten — ineffassign catches strictly more of these - -SA9005 # marshaling structs with no exported fields — intended {} for empty API-response types diff --git a/Makefile b/Makefile index 3f31188d3..0becb2218 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ build-ui: cd spinifex/runtime/roles/spinifexui/frontend && pnpm build # GO commands -VERSION ?= $(shell git describe --tags --always --dirty) +VERSION ?= $(shell git describe --tags --always --dirty --exclude '*-dev') COMMIT ?= $(shell git rev-parse --short HEAD) LDFLAGS := -s -w -X github.com/mulgadc/spinifex/spinifex/operator/cli.Version=$(VERSION) -X github.com/mulgadc/spinifex/spinifex/operator/cli.Commit=$(COMMIT) @@ -167,7 +167,7 @@ preflight: # reason: between them they install the software, wire OVN, erase the state and # remove the install, so a shellcheck warning in one is an outage or a wrong # deletion, not a style note. -NODE_SCRIPTS := scripts/setup.sh scripts/setup-ovn.sh scripts/node-reset.sh scripts/uninstall-spx.sh +NODE_SCRIPTS := scripts/setup.sh scripts/setup-ovn.sh scripts/install-node.sh scripts/smoke-test.sh scripts/node-reset.sh scripts/uninstall-spx.sh test-build-scripts: @echo -e "\n....Running build/scripts/**/*_test.sh...." @@ -262,6 +262,17 @@ test-cover: $(_Q)LOG_IGNORE=1 go test $(GOTESTFLAGS) -timeout 180s -coverprofile=$(COVERPROFILE) -covermode=atomic ./spinifex/... ./cmd/... ./internal/... $(_COVQ) @scripts/check-coverage.sh $(COVERPROFILE) $(QUIET) +# Refresh the README coverage badge. Measured as awesome-go documents +# (-coverpkg=./... over ./...), with cmd/ entrypoints left out of the total. +coverage-badge: + @echo -e "\n....Measuring whole-module coverage for the README badge...." + LOG_IGNORE=1 go test $(GOTESTFLAGS) -timeout 600s -covermode=atomic -coverpkg=./... -coverprofile=coverage-badge.out ./... + @grep -v '/cmd/' coverage-badge.out > coverage-badge-nocmd.out + @pct=$$(go tool cover -func=coverage-badge-nocmd.out | tail -1 | awk '{print $$NF}' | tr -d '%'); \ + color=$$(awk -v p="$$pct" 'BEGIN { print (p >= 80) ? "brightgreen" : (p >= 70) ? "yellow" : "red" }'); \ + sed -i -E "s|badge/coverage-[0-9.]+%25-[a-z]+|badge/coverage-$${pct}%25-$${color}|" README.md; \ + echo "Coverage $${pct}% ($${color}); README badge updated" + # Run unit tests with race detector test-race: @echo -e "\n....Running tests with race detector for $(GO_PROJECT_NAME)...." @@ -464,7 +475,7 @@ distro-arm64: distro-clean: rm -rf dist/ -.PHONY: test-package-check build build-ui build-installer build-lb-agent build-ecs-agent build-system-image build-eks-node-image import-eks-node-image publish-eks-node-image build-ecs-node-image import-ecs-node-image build-rds-postgres-image import-rds-postgres-image build-rds-mariadb-image import-rds-mariadb-image build-microvm-image install-microvm go_build preflight test test-cover test-race diff-coverage bench fuzz test-actions test-images test-build-scripts test-harness test-integration generate-aws-model-coverage aws-model-coverage test-segscan-oracle manifest-check manifest-lint manifest-lint-update \ +.PHONY: test-package-check build build-ui build-installer build-lb-agent build-ecs-agent build-system-image build-eks-node-image import-eks-node-image publish-eks-node-image build-ecs-node-image import-ecs-node-image build-rds-postgres-image import-rds-postgres-image build-rds-mariadb-image import-rds-mariadb-image build-microvm-image install-microvm go_build preflight test test-cover coverage-badge test-race diff-coverage bench fuzz test-actions test-images test-build-scripts test-harness test-integration generate-aws-model-coverage aws-model-coverage test-segscan-oracle manifest-check manifest-lint manifest-lint-update \ deploy reinstall clean \ install-system install-go install-aws quickinstall \ lint fix govulncheck nilaway \ diff --git a/README.md b/README.md index 90c4bcd25..779fb5d0e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@

Go + Go Reference + Coverage License mulgadc.com docs.mulgadc.com diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md index d85ab41f5..a98d42437 100644 --- a/docs/COMMANDS.md +++ b/docs/COMMANDS.md @@ -166,7 +166,7 @@ Operational commands for inspecting cluster state. These fan out NATS requests t | Command | Flags | Description | |---------|-------|-------------| -| `spx admin images import` | `--name`, `--file`, `--distro`, `--version`, `--arch`, `--platform`, `--boot-mode` (bios/uefi/uefi-preferred), `--tag`, `--force`, `--skip-verify`, `--checksum`, `--ami-name` (override the registered `DescribeImages` name, which otherwise defaults to `ami-{distro}-{version}-{arch}`; used for locally-built appliances such as `--ami-name spinifex-eks-node`), `--tmp-dir` (default: `/tmp`) | Catalog imports (`--name`) download the image, fetch the catalog `Checksum` URL, verify the SHA-256/SHA-512 digest, and inherit `BootMode` from the catalog entry. `--boot-mode` overrides the catalog value when set. Mismatch fails closed; the cached file is left on disk and `--force` re-downloads. `--file` imports require an explicit `--boot-mode` because there is no catalog metadata to inherit from, and are verified only when `--checksum ` is passed. `--checksum` takes the sums file the image was published with (`SHA256SUMS`, `SHA512SUMS`, `.sha256`/`.sha512`, coreutils, BSD or bare-digest format), looks up the entry for the image's basename, and infers sha256 or sha512 from the digest length. A mismatch exits 1 before anything is written to storage and leaves the file in place. `--checksum` proves only that the image matches the sums file supplied with it, not that either is authentic; verify the sums file's vendor signature separately. `--checksum` is refused without `--file` or with `--skip-verify`. A `--file` import without `--checksum` prints `Importing without checksum validation` to stderr and proceeds; `--name --file` does not fall back to the catalog digest. Every import records the source artifact's digest on the AMI with who verified it (`operator`, `catalog` or `unverified`, the unverified cases hashed as sha256), prints it on success, and shows it in `spx admin images describe`. The digest is of the file as supplied, not of the stored volume. `--skip-verify` bypasses verification for catalog imports and prints a warning to stderr; use only for debugging or when upstream mirrors are confirmed-broken. Import never modifies the image: the bytes written to storage are the bytes that were verified. A guest that needs to trust the deployment CA for in-guest SDK-over-TLS calls fetches it at runtime from `http://169.254.169.254/spinifex/ca.pem` (see the IMDS section), so a CA rotation reaches guests without re-importing anything. | +| `spx admin images import` | `--name`, `--file`, `--distro`, `--version`, `--arch`, `--platform`, `--boot-mode` (bios/uefi/uefi-preferred), `--tag`, `--force`, `--skip-verify`, `--checksum`, `--ami-name` (override the registered `DescribeImages` name, which otherwise defaults to `ami-{distro}-{version}-{arch}`; used for locally-built appliances such as `--ami-name spinifex-eks-node`), `--tmp-dir` (default: `/images`) | Catalog imports (`--name`) download the image, fetch the catalog `Checksum` URL, verify the SHA-256/SHA-512 digest, and inherit `BootMode` from the catalog entry. `--boot-mode` overrides the catalog value when set. Mismatch fails closed; the cached file is left on disk and `--force` re-downloads. `--file` imports require an explicit `--boot-mode` because there is no catalog metadata to inherit from, and are verified only when `--checksum ` is passed. `--checksum` takes the sums file the image was published with (`SHA256SUMS`, `SHA512SUMS`, `.sha256`/`.sha512`, coreutils, BSD or bare-digest format), looks up the entry for the image's basename, and infers sha256 or sha512 from the digest length. A mismatch exits 1 before anything is written to storage and leaves the file in place. `--checksum` proves only that the image matches the sums file supplied with it, not that either is authentic; verify the sums file's vendor signature separately. `--checksum` is refused without `--file` or with `--skip-verify`. A `--file` import without `--checksum` prints `Importing without checksum validation` to stderr and proceeds; `--name --file` does not fall back to the catalog digest. Every import records the source artifact's digest on the AMI with who verified it (`operator`, `catalog` or `unverified`, the unverified cases hashed as sha256), prints it on success, and shows it in `spx admin images describe`. The digest is of the file as supplied, not of the stored volume. `--skip-verify` bypasses verification for catalog imports and prints a warning to stderr; use only for debugging or when upstream mirrors are confirmed-broken. Import never modifies the image: the bytes written to storage are the bytes that were verified. Compressed and qcow2 images are extracted into a hidden `.import-*` scratch directory under `--tmp-dir`, which is removed when the import succeeds or fails, so the catalog directory keeps only the downloaded source (for `--name`) and the AMI manifest. Point `--tmp-dir` at a disk-backed filesystem with room for the full raw image, never at a tmpfs such as `/tmp`. A guest that needs to trust the deployment CA for in-guest SDK-over-TLS calls fetches it at runtime from `http://169.254.169.254/spinifex/ca.pem` (see the IMDS section), so a CA rotation reaches guests without re-importing anything. | | `spx admin images list` | — | Lists available OS images that can be imported or downloaded | | `spx admin images describe` | `--image-id` (required) | Read-only. Prints the AMI's name, owner, creation date, boot mode and architecture, then its source digest: algorithm and value, verification (`operator` with the sums file name, `catalog` with the sums URL, or `unverified`), and the source file name. AMIs imported before digest recording print `Source digest: not recorded`. The digest is not exposed through `DescribeImages`. | | `spx admin images promote` | `--image-id` (required), `--yes` | Reads `ami-/config.json`, validates the AMI is account-owned, then rewrites `ImageOwnerAlias` to `"system"` in-place. No block data is copied. The change takes effect immediately — the AMI becomes visible to all accounts via `DescribeImages`. Prompts for confirmation (skipped with `--yes`). Already-system AMIs are refused. | diff --git a/docs/admin/setting-up-your-cluster/README.md b/docs/admin/setting-up-your-cluster/README.md index 3df98e4b7..eb285d501 100644 --- a/docs/admin/setting-up-your-cluster/README.md +++ b/docs/admin/setting-up-your-cluster/README.md @@ -71,6 +71,12 @@ ubuntu-26.04-x86_64 | ubuntu | 26.04 | x86_64 | uefi spx admin images import --name ubuntu-26.04-x86_64 ``` +Verify the import and note the AMI ID: + +```bash +AMI_ID=$(aws ec2 describe-images --query 'Images[0].ImageId' --output text) +``` + ### Option B: Import a local image file ```bash @@ -95,12 +101,12 @@ for img in spinifex-rds-postgres spinifex-rds-mariadb spinifex-ecs-node spinifex done ``` -| Image | Serves | Contents | -| --- | --- | --- | -| `spinifex-rds-postgres` | RDS, `--engine postgres` | Alpine 3.24.1 + PostgreSQL 18 + `rds-init` | -| `spinifex-rds-mariadb` | RDS, `--engine mariadb` | Alpine 3.24.1 + MariaDB 11.8 + `rds-init` | -| `spinifex-ecs-node` | ECS container instances | Alpine 3.21.7 + containerd + ecs-agent | -| `spinifex-eks-node` | EKS control plane and nodegroups | Alpine 3.21.7 + K3s v1.32.5 + eks-token-webhook | +| Image | Serves | Contents | +| ----------------------- | -------------------------------- | ----------------------------------------------- | +| `spinifex-rds-postgres` | RDS, `--engine postgres` | Alpine 3.24.1 + PostgreSQL 18 + `rds-init` | +| `spinifex-rds-mariadb` | RDS, `--engine mariadb` | Alpine 3.24.1 + MariaDB 11.8 + `rds-init` | +| `spinifex-ecs-node` | ECS container instances | Alpine 3.21.7 + containerd + ecs-agent | +| `spinifex-eks-node` | EKS control plane and nodegroups | Alpine 3.21.7 + K3s v1.32.5 + eks-token-webhook | All four boot **BIOS**, unlike the distro images, which boot UEFI. That is a property of how they are built and nothing you need to pass. @@ -168,7 +174,7 @@ aws ec2 attach-internet-gateway \ ### Create a Subnet -Create the subnet your instances will launch into. The routing and public-IP steps below are what make it a *public* subnet. +Create the subnet your instances will launch into. The routing and public-IP steps below are what make it a _public_ subnet. ```bash SUBNET_ID=$(aws ec2 create-subnet \ @@ -349,17 +355,17 @@ https://YOUR_NODE_IP:3000 On first load, your browser will show a TLS warning — Spinifex generates a self-signed certificate at install time. This is expected. -1. Accept the warning to reach the login page (exact wording varies by browser — e.g. Chrome: *Advanced → Proceed to ...*, Firefox: *Advanced → Accept the Risk and Continue*). +1. Accept the warning to reach the login page (exact wording varies by browser — e.g. Chrome: _Advanced → Proceed to ..._, Firefox: _Advanced → Accept the Risk and Continue_). 2. On the login page, click **Download Certificate** and save `spinifex-ca.pem` to your machine. 3. Install the certificate as a **trusted root** on your workstation, following the steps for your platform below. 4. Restart your browser and reload `https://YOUR_NODE_IP:3000`. The padlock should now show a valid certificate. Step 3, by platform: -- **macOS:** open `spinifex-ca.pem` in Keychain Access → *System* keychain → set *Trust* to **Always Trust**. +- **macOS:** open `spinifex-ca.pem` in Keychain Access → _System_ keychain → set _Trust_ to **Always Trust**. - **Linux:** `sudo cp spinifex-ca.pem /usr/local/share/ca-certificates/spinifex-ca.crt && sudo update-ca-certificates` -- **Windows:** double-click the file → *Install Certificate* → *Local Machine* → *Trusted Root Certification Authorities*. -- **Browser-only (Firefox):** *Settings → Privacy & Security → Certificates → View Certificates → Authorities → Import* and tick *Trust this CA to identify websites*. +- **Windows:** double-click the file → _Install Certificate_ → _Local Machine_ → _Trusted Root Certification Authorities_. +- **Browser-only (Firefox):** _Settings → Privacy & Security → Certificates → View Certificates → Authorities → Import_ and tick _Trust this CA to identify websites_. > **Why this is required:** the UI logs in by reading your AWS credentials through a trusted TLS channel. Browsers refuse to send credentials over an untrusted connection, so the certificate must be installed as trusted — temporary "Proceed anyway" exceptions won't work for login. diff --git a/docs/containers/eks/README.md b/docs/containers/eks/README.md index d8bbb06b8..ceef08c9a 100644 --- a/docs/containers/eks/README.md +++ b/docs/containers/eks/README.md @@ -55,7 +55,7 @@ Authentication uses **EKS access entries** (the API authentication mode) — IAM **Spinifex specifics** -- **Auth mode is API-only.** `authentication_mode` must be `API`; the legacy `CONFIG_MAP` and `API_AND_CONFIG_MAP` modes are rejected. Grant access with access entries, not an `aws-auth` ConfigMap. +- **Access entries are the only auth path.** `authentication_mode` accepts `API` (the default when unset) and `API_AND_CONFIG_MAP`; bare `CONFIG_MAP` is rejected. Spinifex has no `aws-auth` ConfigMap path, so `API_AND_CONFIG_MAP` behaves as `API`: grant access with access entries. - **Security groups are auto-managed.** Spinifex creates the cluster and node-group security groups deterministically (e.g. `eks-cluster--nodegroup-sg`); `vpc_config.security_group_ids` is ignored. To expose a workload you add an ingress rule to the auto-managed node-group SG. - **The worker image is fixed.** Node groups always boot Spinifex's `eks-node` image. `ami_type` is recorded but does not select the image, and the image must be registered on the cluster before you create a node group. - **Default Kubernetes version is `1.32`.** @@ -262,7 +262,7 @@ The workbooks form a ladder. **eks-quickstart** is a NodePort demo; **eks-https- **Workload unreachable from outside the cluster.** The node-group security group only allows intra-cluster traffic by default. Add an ingress rule for your NodePort to `eks-cluster--nodegroup-sg`, as shown in the CLI tab. -**`create-cluster` rejected with an authentication-mode error.** `authentication_mode` must be `API`. Remove any `CONFIG_MAP` / `API_AND_CONFIG_MAP` setting and grant access with access entries instead. +**`create-cluster` rejected with an authentication-mode error.** `CONFIG_MAP` is the one mode Spinifex rejects, because it has no `aws-auth` ConfigMap path. Set `authentication_mode` to `API` or `API_AND_CONFIG_MAP`, or leave it unset, and grant access with access entries. **Addon install fails.** Only addons bundled into the registered `eks-node` image install successfully. If you pin an addon version in Terraform, leave `addon_version` unset so Spinifex selects the catalog default. diff --git a/docs/coverage/README.md b/docs/coverage/README.md index e75c5e02d..d6acf04ad 100644 --- a/docs/coverage/README.md +++ b/docs/coverage/README.md @@ -17,18 +17,18 @@ tags: ## Overview -The platform serves **397 operations** across the AWS APIs below. Every page names the operations its service implements from the pinned model, generated from the dispatch tables on each build rather than written by hand. +The platform serves **392 operations** across the AWS APIs below. Every page names the operations its service implements from the pinned model, generated from the dispatch tables on each build rather than written by hand. | Service | Operations | |---|---:| | [ACM](/coverage/acm) | 9 | | [EC2](/coverage/ec2) | 127 | -| [ECR](/coverage/ecr) | 22 | +| [ECR](/coverage/ecr) | 23 | | [ECS](/coverage/ecs) | 31 | -| [EKS](/coverage/eks) | 36 | +| [EKS](/coverage/eks) | 27 | | [ELBv2](/coverage/elbv2) | 36 | -| [IAM](/coverage/iam) | 79 | -| [RDS](/coverage/rds) | 26 | +| [IAM](/coverage/iam) | 81 | +| [RDS](/coverage/rds) | 27 | | [S3](/coverage/s3) | 26 | | [STS](/coverage/sts) | 5 | -| **Total** | **397** | +| **Total** | **392** | diff --git a/docs/coverage/coverage.json b/docs/coverage/coverage.json index 66cc6d13d..7c1e76f83 100644 --- a/docs/coverage/coverage.json +++ b/docs/coverage/coverage.json @@ -1983,6 +1983,7 @@ "DeleteRepository", "DeleteRepositoryPolicy", "DescribeImages", + "DescribeRegistry", "DescribeRepositories", "GetAuthorizationToken", "GetLifecyclePolicy", @@ -2002,7 +2003,6 @@ "stubbed": [ "BatchCheckLayerAvailability", "CompleteLayerUpload", - "DescribeRegistry", "GetDownloadUrlForLayer", "GetRegistryPolicy", "InitiateLayerUpload", @@ -2348,7 +2348,6 @@ ], "registered": [ "AssociateAccessPolicy", - "AssociateIdentityProviderConfig", "CreateAccessEntry", "CreateAddon", "CreateCluster", @@ -2361,36 +2360,27 @@ "DescribeAddon", "DescribeAddonVersions", "DescribeCluster", - "DescribeIdentityProviderConfig", "DescribeNodegroup", - "DescribeUpdate", "DisassociateAccessPolicy", - "DisassociateIdentityProviderConfig", "GetRecoveryDirective", "ListAccessEntries", "ListAccessPolicies", "ListAddons", "ListAssociatedAccessPolicies", "ListClusters", - "ListIdentityProviderConfigs", "ListInternalAddons", "ListNodegroups", "ListTagsForResource", - "ListUpdates", "PublishInternal", "TagResource", "UntagResource", "UpdateAccessEntry", "UpdateAddon", - "UpdateClusterConfig", - "UpdateClusterVersion", "UpdateNodegroupConfig", - "UpdateNodegroupVersion", "WebhookTokenReview" ], "implemented": [ "AssociateAccessPolicy", - "AssociateIdentityProviderConfig", "CreateAccessEntry", "CreateAddon", "CreateCluster", @@ -2403,34 +2393,27 @@ "DescribeAddon", "DescribeAddonVersions", "DescribeCluster", - "DescribeIdentityProviderConfig", "DescribeNodegroup", - "DescribeUpdate", "DisassociateAccessPolicy", - "DisassociateIdentityProviderConfig", "ListAccessEntries", "ListAccessPolicies", "ListAddons", "ListAssociatedAccessPolicies", "ListClusters", - "ListIdentityProviderConfigs", "ListNodegroups", "ListTagsForResource", - "ListUpdates", "TagResource", "UntagResource", "UpdateAccessEntry", "UpdateAddon", - "UpdateClusterConfig", - "UpdateClusterVersion", - "UpdateNodegroupConfig", - "UpdateNodegroupVersion" + "UpdateNodegroupConfig" ], "stubbed": [], "unsupported": [], "missing": [ "ActivateCertificateAuthority", "AssociateEncryptionConfig", + "AssociateIdentityProviderConfig", "CancelUpdate", "CreateCapability", "CreateCertificateAuthority", @@ -2449,19 +2432,27 @@ "DescribeClusterVersions", "DescribeEksAnywhereSubscription", "DescribeFargateProfile", + "DescribeIdentityProviderConfig", "DescribeInsight", "DescribeInsightsRefresh", "DescribePodIdentityAssociation", + "DescribeUpdate", + "DisassociateIdentityProviderConfig", "ListCapabilities", "ListCertificateAuthorities", "ListEksAnywhereSubscriptions", "ListFargateProfiles", + "ListIdentityProviderConfigs", "ListInsights", "ListPodIdentityAssociations", + "ListUpdates", "RegisterCluster", "StartInsightsRefresh", "UpdateCapability", + "UpdateClusterConfig", + "UpdateClusterVersion", "UpdateEksAnywhereSubscription", + "UpdateNodegroupVersion", "UpdatePodIdentityAssociation" ], "extra": [ @@ -2862,6 +2853,7 @@ "GetUser", "GetUserPolicy", "ListAccessKeys", + "ListAccountAliases", "ListAttachedGroupPolicies", "ListAttachedRolePolicies", "ListAttachedUserPolicies", @@ -2901,7 +2893,8 @@ "UntagUser", "UpdateAccessKey", "UpdateAssumeRolePolicy", - "UpdateRole" + "UpdateRole", + "UpdateRoleDescription" ], "implemented": [ "AddRoleToInstanceProfile", @@ -2943,6 +2936,7 @@ "GetUser", "GetUserPolicy", "ListAccessKeys", + "ListAccountAliases", "ListAttachedGroupPolicies", "ListAttachedRolePolicies", "ListAttachedUserPolicies", @@ -2982,7 +2976,8 @@ "UntagUser", "UpdateAccessKey", "UpdateAssumeRolePolicy", - "UpdateRole" + "UpdateRole", + "UpdateRoleDescription" ], "stubbed": [], "unsupported": [], @@ -3042,7 +3037,6 @@ "GetServiceLastAccessedDetails", "GetServiceLastAccessedDetailsWithEntities", "GetServiceLinkedRoleDeletionStatus", - "ListAccountAliases", "ListDelegationRequests", "ListMFADeviceTags", "ListMFADevices", @@ -3078,7 +3072,6 @@ "UpdateGroup", "UpdateLoginProfile", "UpdateOpenIDConnectProviderThumbprint", - "UpdateRoleDescription", "UpdateSAMLProvider", "UpdateSSHPublicKey", "UpdateServerCertificate", @@ -3297,6 +3290,7 @@ "ModifyDBCluster", "ModifyDBInstance", "ModifyDBParameterGroup", + "ModifyDBSubnetGroup", "ModifyOptionGroup", "PollDBCommands", "PromoteReadReplica", @@ -3331,6 +3325,7 @@ "ListTagsForResource", "ModifyDBInstance", "ModifyDBParameterGroup", + "ModifyDBSubnetGroup", "RebootDBInstance", "RemoveTagsFromResource", "RestoreDBInstanceFromDBSnapshot", @@ -3448,7 +3443,6 @@ "ModifyDBShardGroup", "ModifyDBSnapshot", "ModifyDBSnapshotAttribute", - "ModifyDBSubnetGroup", "ModifyEventSubscription", "ModifyGlobalCluster", "ModifyIntegration", diff --git a/docs/coverage/ecr/README.md b/docs/coverage/ecr/README.md index 0e5642494..eadbf73f3 100644 --- a/docs/coverage/ecr/README.md +++ b/docs/coverage/ecr/README.md @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **22 operations** in the ECR `2015-09-21` API model. +Spinifex implements **23 operations** in the ECR `2015-09-21` API model. ### Two endpoints, one registry @@ -26,7 +26,7 @@ Repository metadata is served over the AWS API on the gateway endpoint. Image da The split explains the stubs below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. -Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. +Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. `DescribeRegistry` reports this as a replication configuration with no rules. ### Operations @@ -39,6 +39,7 @@ Registry replication is a stub for the same kind of reason: a deployment is a si | `DeleteRepository` | | `DeleteRepositoryPolicy` | | `DescribeImages` | +| `DescribeRegistry` | | `DescribeRepositories` | | `GetAuthorizationToken` | | `GetLifecyclePolicy` | diff --git a/docs/coverage/ecr/intro.md b/docs/coverage/ecr/intro.md index 420d0453e..55e361ac1 100644 --- a/docs/coverage/ecr/intro.md +++ b/docs/coverage/ecr/intro.md @@ -4,4 +4,4 @@ Repository metadata is served over the AWS API on the gateway endpoint. Image da The split explains the stubs below. The layer-transfer operations — `BatchCheckLayerAvailability`, `InitiateLayerUpload`, `UploadLayerPart`, `CompleteLayerUpload` and `GetDownloadUrlForLayer` — are registered stubs because the `/v2/` endpoint carries that traffic instead. A client using `docker` or any OCI-compatible tool never calls them. -Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. +Registry replication is a stub for the same kind of reason: a deployment is a single registry, with no cross-region peer to replicate to. `DescribeRegistry` reports this as a replication configuration with no rules. diff --git a/docs/coverage/eks/README.md b/docs/coverage/eks/README.md index 8c27d1201..a2364648d 100644 --- a/docs/coverage/eks/README.md +++ b/docs/coverage/eks/README.md @@ -18,14 +18,13 @@ tags: ## Overview -Spinifex implements **36 operations** in the EKS `2017-11-01` API model. +Spinifex implements **27 operations** in the EKS `2017-11-01` API model. ### Operations | Operation | |---| | `AssociateAccessPolicy` | -| `AssociateIdentityProviderConfig` | | `CreateAccessEntry` | | `CreateAddon` | | `CreateCluster` | @@ -38,25 +37,17 @@ Spinifex implements **36 operations** in the EKS `2017-11-01` API model. | `DescribeAddon` | | `DescribeAddonVersions` | | `DescribeCluster` | -| `DescribeIdentityProviderConfig` | | `DescribeNodegroup` | -| `DescribeUpdate` | | `DisassociateAccessPolicy` | -| `DisassociateIdentityProviderConfig` | | `ListAccessEntries` | | `ListAccessPolicies` | | `ListAddons` | | `ListAssociatedAccessPolicies` | | `ListClusters` | -| `ListIdentityProviderConfigs` | | `ListNodegroups` | | `ListTagsForResource` | -| `ListUpdates` | | `TagResource` | | `UntagResource` | | `UpdateAccessEntry` | | `UpdateAddon` | -| `UpdateClusterConfig` | -| `UpdateClusterVersion` | | `UpdateNodegroupConfig` | -| `UpdateNodegroupVersion` | diff --git a/docs/coverage/iam/README.md b/docs/coverage/iam/README.md index b761003fc..db41f8b5c 100644 --- a/docs/coverage/iam/README.md +++ b/docs/coverage/iam/README.md @@ -18,7 +18,7 @@ tags: ## Overview -Spinifex implements **79 operations** in the IAM `2010-05-08` API model. +Spinifex implements **81 operations** in the IAM `2010-05-08` API model. ### Scope @@ -67,6 +67,7 @@ All IAM operations are account-scoped. The root user of an account bypasses poli | `GetUser` | | `GetUserPolicy` | | `ListAccessKeys` | +| `ListAccountAliases` | | `ListAttachedGroupPolicies` | | `ListAttachedRolePolicies` | | `ListAttachedUserPolicies` | @@ -107,3 +108,4 @@ All IAM operations are account-scoped. The root user of an account bypasses poli | `UpdateAccessKey` | | `UpdateAssumeRolePolicy` | | `UpdateRole` | +| `UpdateRoleDescription` | diff --git a/docs/coverage/internal-report.md b/docs/coverage/internal-report.md index e14858596..010219672 100644 --- a/docs/coverage/internal-report.md +++ b/docs/coverage/internal-report.md @@ -762,7 +762,7 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, ## ecr -`2015-09-21` — 22 of 58 modelled operations implemented (37.9%), 11 stubbed, 0 not applicable, 3 registered outside the pinned model. +`2015-09-21` — 23 of 58 modelled operations implemented (39.7%), 10 stubbed, 0 not applicable, 3 registered outside the pinned model. ### Not implemented @@ -793,7 +793,6 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, - `BatchCheckLayerAvailability` - `CompleteLayerUpload` -- `DescribeRegistry` - `GetDownloadUrlForLayer` - `GetRegistryPolicy` - `InitiateLayerUpload` @@ -882,12 +881,13 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, ## eks -`2017-11-01` — 36 of 70 modelled operations implemented (51.4%), 0 stubbed, 0 not applicable, 4 registered outside the pinned model. +`2017-11-01` — 27 of 70 modelled operations implemented (38.6%), 0 stubbed, 0 not applicable, 4 registered outside the pinned model. ### Not implemented - `ActivateCertificateAuthority` - `AssociateEncryptionConfig` +- `AssociateIdentityProviderConfig` - `CancelUpdate` - `CreateCapability` - `CreateCertificateAuthority` @@ -906,19 +906,27 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, - `DescribeClusterVersions` - `DescribeEksAnywhereSubscription` - `DescribeFargateProfile` +- `DescribeIdentityProviderConfig` - `DescribeInsight` - `DescribeInsightsRefresh` - `DescribePodIdentityAssociation` +- `DescribeUpdate` +- `DisassociateIdentityProviderConfig` - `ListCapabilities` - `ListCertificateAuthorities` - `ListEksAnywhereSubscriptions` - `ListFargateProfiles` +- `ListIdentityProviderConfigs` - `ListInsights` - `ListPodIdentityAssociations` +- `ListUpdates` - `RegisterCluster` - `StartInsightsRefresh` - `UpdateCapability` +- `UpdateClusterConfig` +- `UpdateClusterVersion` - `UpdateEksAnywhereSubscription` +- `UpdateNodegroupVersion` - `UpdatePodIdentityAssociation` ### Registered outside the pinned model @@ -957,7 +965,7 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, ## iam -`2010-05-08` — 79 of 180 modelled operations implemented (43.9%), 0 stubbed, 19 not applicable, 0 registered outside the pinned model. +`2010-05-08` — 81 of 180 modelled operations implemented (45.0%), 0 stubbed, 19 not applicable, 0 registered outside the pinned model. ### Not implemented @@ -1006,7 +1014,6 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, - `GetServerCertificate` - `GetServiceLastAccessedDetails` - `GetServiceLastAccessedDetailsWithEntities` -- `ListAccountAliases` - `ListDelegationRequests` - `ListMFADeviceTags` - `ListMFADevices` @@ -1038,7 +1045,6 @@ spot-price: On owned hardware there is no spot-to-on-demand price differential, - `UpdateGroup` - `UpdateLoginProfile` - `UpdateOpenIDConnectProviderThumbprint` -- `UpdateRoleDescription` - `UpdateSAMLProvider` - `UpdateServerCertificate` - `UpdateUser` @@ -1079,7 +1085,7 @@ signing-certificates: X.509 signing certificates are an EC2-Classic SOAP credent ## rds -`2014-10-31` — 26 of 164 modelled operations implemented (15.9%), 0 stubbed, 4 not applicable, 5 registered outside the pinned model. +`2014-10-31` — 27 of 164 modelled operations implemented (16.5%), 0 stubbed, 4 not applicable, 5 registered outside the pinned model. ### Not implemented @@ -1178,7 +1184,6 @@ signing-certificates: X.509 signing certificates are an EC2-Classic SOAP credent - `ModifyDBShardGroup` - `ModifyDBSnapshot` - `ModifyDBSnapshotAttribute` -- `ModifyDBSubnetGroup` - `ModifyEventSubscription` - `ModifyGlobalCluster` - `ModifyIntegration` diff --git a/docs/coverage/rds/README.md b/docs/coverage/rds/README.md index 656fc5b17..befbe3c4d 100644 --- a/docs/coverage/rds/README.md +++ b/docs/coverage/rds/README.md @@ -19,7 +19,7 @@ tags: ## Overview -Spinifex implements **26 operations** in the RDS `2014-10-31` API model. +Spinifex implements **27 operations** in the RDS `2014-10-31` API model. ### Engines @@ -95,6 +95,7 @@ A parameter whose omission would create a false safety, security or availability | `ListTagsForResource` | | `ModifyDBInstance` | | `ModifyDBParameterGroup` | +| `ModifyDBSubnetGroup` | | `RebootDBInstance` | | `RemoveTagsFromResource` | | `RestoreDBInstanceFromDBSnapshot` | diff --git a/docs/install/install-multi-node/README.md b/docs/install/install-multi-node/README.md index c42d5bdb6..c5eadd682 100644 --- a/docs/install/install-multi-node/README.md +++ b/docs/install/install-multi-node/README.md @@ -213,6 +213,13 @@ Choose one method and apply it to **every** server in the cluster. curl -fsSL https://install.mulgadc.com | bash ``` +This installs the latest release. To try the newest development build instead, set `INSTALL_SPINIFEX_CHANNEL=dev` on **every** node — a cluster must not mix versions. It carries unreleased work and has not been through release testing. + +```bash +curl -fsSL https://install.mulgadc.com -o /tmp/spx-install.sh +sudo INSTALL_SPINIFEX_CHANNEL=dev bash /tmp/spx-install.sh +``` + **Option B — bare metal, from the ISO.** Boot each server from the Spinifex ISO and follow [Bootable USB Install](/docs/install-usb). This installs the operating system, partitions the disks, and configures the hostname and network interfaces alongside Spinifex. The ISO installer does not form a cluster — that is what the remaining steps do. Complete this step on all three servers before continuing. Step 4 requires every node to be installed, reachable, and available at the same time. diff --git a/docs/install/install/README.md b/docs/install/install/README.md index b7741752a..dc6322adb 100644 --- a/docs/install/install/README.md +++ b/docs/install/install/README.md @@ -75,6 +75,13 @@ curl -fsSL https://install.mulgadc.com | bash The installer downloads the Spinifex binary and bootstraps all dependencies (QEMU, OVN/OVS, AWS CLI). +This installs the latest release. To try the newest development build instead, set the channel — it carries unreleased work and has not been through release testing, so use it to evaluate a fix or a new feature rather than for anything you depend on. + +```bash +curl -fsSL https://install.mulgadc.com -o /tmp/spx-install.sh +sudo INSTALL_SPINIFEX_CHANNEL=dev bash /tmp/spx-install.sh +``` + ## Step 2. Setup OVN Networking If your WAN interface is already a bridge (e.g. `br-wan`), setup-ovn.sh auto-detects it: diff --git a/docs/oci-integration/README.md b/docs/oci-integration/README.md index f50281d48..bb683f481 100644 --- a/docs/oci-integration/README.md +++ b/docs/oci-integration/README.md @@ -1,8 +1,8 @@ --- -title: "Spinifex on Oracle Cloud" +title: "Oracle Cloud Infrastructure (OCI)" seoTitle: "Run Spinifex on Oracle Cloud Infrastructure — Spinifex Docs" -description: "Deploy Spinifex on OCI end to end with Terraform, single node or three, and give guests real public addresses through OCI's own API." -category: "Install" +description: "Deploy Spinifex on Oracle Cloud Infrastructure end to end with Terraform, on one node or three, and give guests real public addresses through OCI's own API." +category: "Cloud Install" tags: - install - oci @@ -10,10 +10,10 @@ tags: - terraform - cluster resources: + - title: "OCI Architecture and Operations" + url: "/docs/oci-architecture" - title: "Multi-Node Install" url: "/docs/install-multi-node" - - title: "VPC Networking" - url: "/docs/vpc-networking" - title: "Host Firewall" url: "/docs/host-firewall" - title: "Spinifex Repository" @@ -22,780 +22,593 @@ resources: # Running Spinifex on Oracle Cloud Infrastructure -> Run the AWS surface — EC2, EBS, S3, VPC — inside your own OCI tenancy, with guests that get real, publicly reachable addresses through OCI's API. +> Run the AWS surface (EC2, EBS, S3, VPC) inside your own OCI tenancy, with guests that get real, publicly reachable addresses through OCI's API. ## Table of Contents - [Overview](#overview) -- [Support status](#support-status) - - [What happens when a node fails](#what-happens-when-a-node-fails) -- [Why run Spinifex on OCI](#why-run-spinifex-on-oci) -- [What OCI changes](#what-oci-changes) -- [How it fits together](#how-it-fits-together) - [Prerequisites](#prerequisites) -- [Deploying](#deploying) - - [Step 1. Set your Terraform inputs](#step-1-set-your-terraform-inputs) - - [Step 2. Build the infrastructure](#step-2-build-the-infrastructure) - - [Step 3. Install Spinifex and set up OVN](#step-3-install-spinifex-and-set-up-ovn) - - [Step 4. Form the cluster](#step-4-form-the-cluster) - - [Step 5. Configure Spinifex for OCI, start and verify](#step-5-configure-spinifex-for-oci-start-and-verify) - - [Step 6. Set up your cluster](#step-6-set-up-your-cluster) - - [Step 7. Run your existing Terraform against the cluster](#step-7-run-your-existing-terraform-against-the-cluster) - - [Step 8. Oracle Linux as a guest image](#step-8-oracle-linux-as-a-guest-image) -- [Verify end to end](#verify-end-to-end) +- [1. Clone the Spinifex repository](#1-clone-the-spinifex-repository) +- [2. OCI Credentials for Spinifex](#2-oci-credentials-for-spinifex) + - [2.1 Instance principal (preferred)](#21-instance-principal-preferred) + - [2.2 OCI IAM user with scoped permissions](#22-oci-iam-user-with-scoped-permissions) +- [3. Choose deployment method](#3-choose-deployment-method) +- [4. Write your Terraform inputs](#4-write-your-terraform-inputs) +- [5. Deploy](#5-deploy) +- [6. Check it worked](#6-check-it-worked) +- [7. Set up your cluster](#7-set-up-your-cluster) +- [Harden it before production](#harden-it-before-production) +- [Next steps](#next-steps) +- [Removing the deployment](#removing-the-deployment) - [Troubleshooting](#troubleshooting) -- [Limits in this version](#limits-in-this-version) --- ## Overview -Spinifex is an open-source infrastructure platform that brings core AWS services to bare-metal, edge and on-prem environments. A node runs the Spinifex daemon and CLI, QEMU/KVM for guests, OVN/Open vSwitch for VPC networking, [Predastore](https://github.com/mulgadc/predastore) for S3-compatible object storage and [Viperblock](https://github.com/mulgadc/viperblock) for EBS-compatible block storage — and serves them all behind a SigV4 endpoint that the ordinary AWS SDKs and CLI talk to unmodified. +Spinifex is an open-source infrastructure platform that brings core AWS services to bare-metal, edge, and on-prem environments. It serves the EC2, EBS, S3, VPC, IAM and STS APIs over a SigV4 endpoint of your own, so the AWS CLI, the AWS SDKs and the AWS Terraform provider all work against it unmodified. Nothing a tenant has written has to be rewritten to run on it. -This guide runs that same stack on Oracle Cloud Infrastructure. Everything in [Single-Node Install](/docs/install) and [Multi-Node Install](/docs/install-multi-node) still applies: one node is a working install, three is the minimum for a cluster that can lose a node, and formation, storage and OVN behave exactly as they do on hardware you own. What changes is the layer underneath — an OCI VCN is not an Ethernet segment, so the external datapath is wired differently, and public addresses come from OCI's API rather than from a range you write in a config file. +This guide installs Spinifex on Oracle Cloud Infrastructure, on one instance or three, with guests that get real public addresses from OCI's own pool. The install is the same product you would put on your own servers, so [Single-Node Install](/docs/install) and [Multi-Node Install](/docs/install-multi-node) describe the same formation, storage and networking. What differs here is the layer underneath, because a VCN is not an Ethernet segment and public addresses come from an API rather than a range you choose. -**Read this guide end to end and you have a working cluster.** [Deploying](#deploying) is one sequence of eight steps, from an empty compartment to a node that can launch an instance with a publicly reachable address, and then to the Oracle Linux guest image to put on it. It builds the infrastructure with Terraform, then installs and forms Spinifex the same way [Single-Node Install](/docs/install) and [Multi-Node Install](/docs/install-multi-node) do — those steps are inlined here, so you do not need to read three documents at once. The only choice to make is one node or three, and it is one line in Step 1. +**Why run it on OCI:** -Every command and every output below was run against a live OCI tenancy, on both paths. +- **Cost.** OCI prices compute and block storage below the large US clouds, and one Spinifex node serves a tenant's whole fleet as QEMU guests on hardware you are billed for once. +- **Egress.** Oracle's outbound-transfer allowance and per-GB rate are far cheaper than the majors, and guest-to-guest traffic rides the private plane, where it is not billed as internet egress at all. +- **Portability.** Your tenants code against Spinifex, not against OCI, so the same workloads move to your own rack or an edge site later as a deployment decision rather than a rewrite. +- **Real public addresses.** Spinifex registers each guest's address with OCI, so a guest is reachable on the internet rather than hidden behind a shared NAT. -## Support status +**What gets installed**, on every node: -**What is written here was proven on one shape, in one region, on one guest OS.** Three nodes of `VM.Standard.E6.Flex` in `ap-sydney-1`, Ubuntu hosts, routed NAT, OCI reserved public IPs over secondary private IPs, with a single-node pass of the same guide beside it. Nothing about the integration is region-specific or shape-specific by design, but nothing else has been run, so treat another region, a bare-metal shape or a different host image as untested rather than unsupported — and record the shape, region, fault domains, quotas, kernel and `spx version` when you reproduce it, because that is the only way a later difference can be attributed. +- Spinifex daemon and CLI +- QEMU/KVM for guests +- OVN and Open vSwitch for VPC networking +- [Predastore](https://github.com/mulgadc/predastore), S3-compatible object storage +- [Viperblock](https://github.com/mulgadc/viperblock), EBS-compatible block storage +- The OCI public-address allocator, which is the one component specific to this platform -**OCI is not in the nightly test matrix.** The routed-NAT datapath this integration depends on is guarded nightly, on three nodes, on our own hardware — the behaviour is covered, the cloud underneath it is not. So an OCI-specific regression would be found by the next person to run this guide rather than by CI. That is a real gap and it is tracked; it is not a reason to avoid the integration, but it is a reason not to read "proven" as "continuously proven". +Nodes run **Ubuntu 26.04**, resolved at plan time as the newest Canonical platform image for your shape and region. Oracle Linux support as the host OS to run Spinifex is under active development. -### What happens when a node fails +**Terraform does the whole deployment:** the VCN, the block volumes, both VNICs per node, the Spinifex install, the cluster formation and the allocator. Six steps below, one command, about ten minutes for a single node. -A three-node cluster recovers a guest from a node that has stopped heartbeating, onto a survivor, with no operator action. There is no setting for it: an instance whose host is gone is down either way, and the only thing a switch could buy is leaving it down. It is inert below three nodes, because a single node has nowhere to move a guest to. - -The cluster is deliberately slow to believe a node has gone. A daemon takes no recovery action until it has seen every peer live or five minutes have passed, so a coordinated restart does not look like three simultaneous host failures; a node has to be seen stale across two passes fifteen seconds apart; and the guest's volume lease has to lapse before anything else may open it. Expect a recovery to take minutes, not seconds. - -| Condition | What the cluster does | What you see | -| --- | --- | --- | -| A node stops heartbeating and a survivor can reach its own object store | A survivor claims the instance and relaunches it | The same instance ID, the same volume and the same private address on a new host. `DescribeInstanceStatus` reports the move, as it would on EC2 | -| The volume is still leased by the node that had it | Retries every 15–90 seconds until the lease lapses | Recovery takes about a lease TTL longer. The guest never runs in two places | -| A survivor's own object store is not answering | That node stands down and lets the others try | If the object store is broken everywhere, nothing moves and nothing claims to have moved. An instance that no node could have run stays where it is | -| No survivor has capacity | Each survivor tries in its own order, with backoff | After the attempt budget the instance is stopped carrying `Server.InsufficientInstanceCapacity`, one `StartInstances` from running | -| Anything else — a torn volume, an OCI API denial, a launch that will not finish | Retries with doubling backoff, bounded at twelve attempts, roughly an hour and a half | The instance is stopped carrying `Server.HostRecoveryFailed` and the last error. It is never left looping with nothing visible to you | -| A planned whole-cluster restart | The settle window suppresses recovery while nodes return | Guests are not migrated out from under a deploy | - -**The public address follows the guest, and it keeps its identity while it does.** An OCI public address is a reserved public IP object that OCI 1:1-NATs onto a secondary private IP on a VNIC, and the guest only ever sees the private half. Recovery moves the private half between VNICs in the same subnet — one OCI call, server-side, keeping the OCID — so the reserved public IP is never released, never reallocated and never renumbered. The customer's address is the same address before and after. What does change is which node OCI delivers it to, and each node claims its own guests' addresses on a fifteen-second pass, so there is a window after the guest is running in which it is not yet reachable on its public address. Private VPC addresses have no such window: they are node-independent. - -**What this is not.** A fenced guest is stopped locally, and the volume lease is what stops it — it is not a write barrier the storage backend enforces. A node that loses contact with the cluster gives its volume up on a clock it can evaluate without reaching anything, which bounds the exposure to one renewal interval rather than to the lease TTL, and a survivor does not open the volume until the lease has lapsed. But a write the losing node had already issued is not refused by the object store, and the failure to stop the local writer is reported rather than corrected. So the guarantee is "one running guest, and a bounded, logged window" — not "a second writer is impossible". If your workload cannot tolerate that, it wants a replicated datastore rather than a recovered instance. - -## Why run Spinifex on OCI - -**Lower cost for the same shape of workload.** OCI's compute and block storage are priced well below the large US clouds for equivalent OCPU and IOPS, and Spinifex turns one large instance into a whole EC2/EBS/S3 surface — so a tenant's twenty small instances are twenty QEMU guests on hardware you are billed for once, not twenty billable cloud instances. - -**Egress stops being the line item that decides the architecture.** Oracle publishes a large monthly outbound-transfer allowance per tenancy and a per-GB rate beyond it that is roughly an order of magnitude below the majors — check the current pricing page rather than a number in a document, but the gap is the reason this integration exists. Traffic *between* guests never leaves the host or, on a cluster, never leaves the VCN: it is Geneve over the private plane, which is not billed as internet egress at all. - -**Portability — the workload stops being AWS-shaped and starts being yours.** The API your tenants code against is Spinifex's, so the same Terraform, the same SDK calls and the same AMIs run on OCI today, on bare metal in your own rack tomorrow, and at an edge site after that. Moving off AWS becomes a deployment decision rather than a rewrite, and moving *again* costs nothing extra. - -**You keep the parts of OCI that are worth keeping.** Bare-metal shapes, fault domains, block volumes with a chosen performance tier, and real public addresses out of OCI's own pool. Spinifex does not hide the cloud underneath it — it registers each guest's address with OCI so that guest is genuinely reachable on the internet, not behind a shared NAT. - -## What OCI changes - -> [!IMPORTANT] -> **Read this section before you provision anything.** OCI enforces addressing inside its virtual network in a way that makes one of Spinifex's three external modes unusable, and the choice is baked in at `spx admin init`. Getting it wrong produces a cluster that looks entirely healthy and drops every guest packet. - -Three properties of an OCI virtual network shape everything below. - -**OCI enforces the source IP per VNIC.** A packet leaving the instance with a source address that is not a registered private-IP object on that VNIC is dropped by the hypervisor. Measured, not inferred: from the same NIC with the same MAC, `ping -I 8.8.8.8` gets 0% loss and `ping -I 8.8.8.8` gets 100%. So an external address pool cannot be a range you write in a config file — **every address has to be registered with OCI before it works**, and registering it is exactly what this integration does. - -> Pinging the VCN router (`10.200.0.1`) proves nothing. It answers from any source address at ~0.08 ms because the hypervisor replies locally. Always test egress past the subnet. - -**A VNIC accepts one MAC; it does not learn MACs.** Every inbound frame arrives addressed to the VNIC's own MAC, whatever address the packet is for. Spinifex's default external datapath advertises each address by ARPing from a per-VPC router MAC onto a shared L2 segment, which needs a segment that learns MACs. OCI has none. Enforcement sits in the hypervisor on VM shapes and in the SmartNIC on bare metal, so there is no guest-side workaround. - -**A public IP is a second object, and it never appears on the wire.** An OCI public address is a RESERVED public IP that OCI 1:1-NATs upstream onto a **secondary private IP** on the VNIC. The instance only ever sees the private half. Spinifex handles this internally — AWS-facing APIs report the public address, the datapath uses the private one — but it explains why `ip addr` on the host never shows a customer's public IP, and why that is correct rather than a fault. - -### The consequence: routed mode is mandatory - -| External mode | What goes on the uplink | On OCI | -| --- | --- | --- | -| `pool` (`UplinkModePhysical`, `UplinkModeVeth`) | Per-VPC gateway MAC plus a per-rule external MAC, ARPed onto the segment | **Does not work.** Egress is dropped (wrong source MAC); ingress never reaches OVN (the frame is addressed to the VNIC MAC, which no router port owns). | -| `nat` (`UplinkModeRouted`) | Nothing. The host forwards over an RFC 6598 transit veth and sets no external MAC | **Works.** One MAC identity, and registered source addresses. | - -Spinifex **refuses** `source = "oci"` on a pool unless the node is in `nat` mode, and the refusal names this reason. See [VPC Networking → External modes](/docs/vpc-networking) for what each mode does off OCI. - -### Sizing - -**Bare metal is the recommendation.** `BM.Standard.E2.64` or similar gives you the hardware directly — no nested virtualisation, full NIC performance, and no hypervisor between your guests and the wire. - -| | Minimum | Recommended | -| --- | --- | --- | -| **Shape** | `VM.Standard.E6.Flex` | Bare metal, e.g. `BM.Standard.E2.64` | -| **OCPU** | 8 (16 vCPU) | 32+ | -| **RAM** | 32 GB | 128 GB+ | -| **Data volume** | 256 GiB block volume | 1 TB+ NVMe-backed | -| **VNICs** | 2 | 2 | -| **Nodes** | 1 | 3 — see [Cluster sizing](/docs/install-multi-node#cluster-sizing) | - -**Verify nested virtualisation before anything else on a VM shape.** Oracle's nested-KVM guidance names `VM.Standard3.Flex` (Intel) and `VM.Standard.E5.Flex` (AMD), and states Ampere shapes do not support it. `VM.Standard.E6.Flex` is **not** in that list but was measured working on 2026-09-24 (EPYC 9J45, `/dev/kvm` present, `svm` on all threads, `kvm_amd nested=1`). Treat an unlisted shape as unproven until you have checked: - -```bash -# If /dev/kvm is absent, stop — change shape, do not continue. -ls -l /dev/kvm -grep -oE 'vmx|svm' /proc/cpuinfo | sort -u -cat /sys/module/kvm_amd/parameters/nested 2>/dev/null \ - || cat /sys/module/kvm_intel/parameters/nested -``` - -**OCI has no Debian image.** Ubuntu LTS is the tested path — Ubuntu 26.04 LTS on kernel `7.0.0-1009-oracle` is what this integration was built and proven against. Anything in the tooling that assumes Debian is a known gap, not a supported configuration. - ---- - -## How it fits together - -### Single node — the whole AWS surface inside one OCI instance - -One bare-metal instance runs the control plane and every tenant guest. Customers reach the AWS APIs on the node's own address; their instances reach the internet through addresses registered on the node's second VNIC. - -

- Single node on OCI — the instance inside the VCN public subnet, both VNICs, br-wan, the routed-NAT transit veth, the control plane, tenant VPCs and the iSCSI data volume -

- -Two things in that picture are the whole integration. The guest's private address (`10.0.1.4`) never leaves the host — OVN and the host route both hold it. The address OCI delivers to is a **secondary private IP registered on VNIC 1**, appearing on `br-wan`, and the customer's public address (`150.230.13.131`) is a reserved public IP that OCI 1:1-NATs onto it upstream. `describe-instances` reports the public one; every datapath object holds the private one, which is why the two never appear together on the host. - -The third is storage. Every guest disk, every S3 object and the JetStream state all live under `/var/lib/spinifex`, which is an **OCI block volume attached over iSCSI**, not the boot disk. Size it for the guests you intend to run; a boot volume that quietly ends up carrying the stack is the most common way an install on OCI fails later rather than immediately. - -### Three nodes — the same surface, distributed - -Each node registers the addresses for **its own** guests on **its own** second VNIC, and the allocator runs per node, so nothing has to know another node's OCIDs. When a guest moves — a stop/start that lands elsewhere, or a host failure — the node it lands on claims the address's private half from the old VNIC through a single OCI call. The OCID and the public half are untouched, so the customer's address never changes. - -

- Three nodes on OCI — three instances inside the VCN public subnet, one per fault domain, each with its own VNICs, addresses and iSCSI volume, joined east-west by Geneve, NATS, predastore and the OVN raft -

- -The overlay, the object shards and the OVN databases all cross **VNIC 0**, inside the VCN. Size that plane, not the external one: guest-to-guest traffic between nodes is Geneve over the VCN, and it is the link every distributed layer shares. - -> [!NOTE] -> **The Spinifex region is your own naming and has nothing to do with the OCI region.** `ap-southeast-2` in `spinifex.toml` beside `ap-sydney-1` in OCI is correct and expected. Do not read one as evidence about the other. - ---- +What sits underneath is in [Architecture and Operations](../oci-architecture/README.md), which also carries the IAM policy, the quotas, every variable and the troubleshooting. ## Prerequisites -Both paths need the same three things: an OCI compartment you can write to, an API key for Spinifex to allocate addresses with, and enough quota to hand out the addresses you plan to use. +| | | +| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **An OCI compartment OCID** | This deploys into a compartment that already exists. Creating one needs tenancy-root rights the API user must not have | +| **OCI credentials in `~/.oci/config`** | For Terraform, to build the infrastructure. `oci setup config` writes one, or write it by hand | +| **A runtime credential for the nodes** | Separate from the above, and the subject of step 2: either an instance principal or a scoped API key. Without one a node comes up healthy and still cannot give any guest a public address | +| **Terraform or OpenTofu, `git`, Python 3** | On your workstation. The Python helper is standard library only, so there is nothing to `pip install` | -### Credentials — v1 uses an operator-provisioned API key +Check two quotas before you start, because both refuse at apply time rather than at plan time. **Reserved public IPs** are capped at 50 per region across the whole tenancy, and the **compute limit for your shape** starts at zero for bare metal on many new tenancies. [Quotas](../oci-architecture/README.md#quotas) has the commands. -**Instance principal is the better design and is not what v1 uses.** The instance certificate is served at `/opc/v2/identity/cert.pem` and the Go SDK can authenticate as the instance with no key material on disk — but it still needs a dynamic group and a policy authorising it, and on the reference tenancy it authenticated without being authorised for anything. **v1 requires an operator-provisioned API key**, deliberately, to keep the setup a single documented path. +For the workstation (Linux, MacOS, Windows [WSL]) that will be used to deploy Spinifex on OCI the following prerequisites are required. -```bash -# On your workstation, not the node. -openssl genrsa -out ~/.oci/oci_api_key.pem 2048 -chmod 600 ~/.oci/oci_api_key.pem -openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem -openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem \ - | openssl md5 -c # this is the fingerprint +### OCI CLI tool + +Ensure the `oci` CLI tool is pre-installed. Follow the install guide at: [https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm) + +Once installed configure your OCI credentials (~/.oci/config) which will be used in later steps in the installation tutorial. + +`oci setup config` + +That writes a `[DEFAULT]` profile, which every command below reads with no flag. **If your config holds named profiles instead, name the one to use once:** + +```sh +export OCI_CLI_PROFILE=my-profile ``` -Upload the public key to the user under **Identity → Users → API Keys**, and record the user OCID, the fingerprint and the tenancy OCID. +Spinifex's Terraform helper reads the same variable, so this one export covers the CLI commands here and the deployment in step 5. -### The IAM policy +### OCI Compartment -Spinifex calls exactly nine operations. Grant no more than these: +Now set `$CID` to the compartment you are deploying into. It is used throughout this guide and again as `compartment_ocid` in step 4, so set it once and keep the same shell. -| Operation | Why | -| --- | --- | -| `CreatePrivateIp` | Register the secondary private IP the datapath carries | -| `DeletePrivateIp` | Release it | -| `GetPrivateIp` | Poll for `AVAILABLE` after an asynchronous assign | -| `ListPrivateIps` | The startup reconcile, and the affinity pass that moves an address between nodes | -| `UpdatePrivateIp` | Reassign a private IP to this node's VNIC when a guest moves here | -| `CreatePublicIp` | Create the RESERVED public IP | -| `DeletePublicIp` | Release it | -| `GetPublicIp` / `GetPublicIpByPrivateIpId` | Poll lifecycle state, and reconcile a private IP back to its public half | -| `UpdatePublicIp` | Attach and detach the public IP from a private IP | +Which OCID to use depends on how your tenancy is laid out. -The matching policy, scoped to the one compartment Spinifex allocates in: +**A tenancy with compartments in it.** List compartments in OCI and pick one where to deploy Spinifex. The OCID is in the `id` column: + +```sh +oci iam compartment list --compartment-id-in-subtree true --access-level ACCESSIBLE --all \ + --query 'data[?"lifecycle-state"==`ACTIVE`].{name:name,id:id}' --output table +``` + +**A tenancy with nothing but the root.** The command above will return nothing, which is correct rather than broken: it lists the children of your tenancy and never the tenancy itself. To deploy into the root by using the tenancy OCID, which is the `tenancy=` line of your `~/.oci/config`, or ask the CLI for it: + +```sh +oci iam availability-domain list --query 'data[0]."compartment-id"' --raw-output +``` + +Next, specify your tenancy as `CID`: + +```sh +export CID="ocid1.compartment.oc1..xxx" +``` + +Confirm the credential and the compartment together: + +```sh +oci compute shape list --compartment-id $CID +``` + +Expected output to confirm API key and compartment works as expected: + +```json +{ + "data": [ + { + "baseline-ocpu-utilizations": null, + "billing-type": "PAID", + ... + } + ] +} +``` + +### Install Terraform / OpenTofu + +The next prerequisite is to install Terraform or OpenTofu to deploy the Spinifex stack on OCI. + +- Terraform - [https://developer.hashicorp.com/terraform/install](https://developer.hashicorp.com/terraform/install) +- OpenTofu - [https://opentofu.org/docs/intro/install/](https://opentofu.org/docs/intro/install/) + +The deployment scripts of Spinifex will automatically detect to use Terraform or OpenTofu depending what is setup in your environment. + +## Instructions + +## 1. Clone the Spinifex repository + +To begin the deployment of Spinifex on OCI deploy the repository: + +```bash +git clone https://github.com/mulgadc/spinifex.git +cd spinifex/scripts/terraform/oci-spx +``` + +> [!NOTE] +> **To deploy the development branch instead of the release**, add `git switch dev` before the `cd`, and pass `--channel dev` in step 5. The two choose different things: the branch chooses the Terraform and the deploy driver, and `--channel` chooses which Spinifex build lands on the nodes. Use the release for anything you intend to keep. + +Then make a new SSH keypair the deploy installs on every Spinifex node which you can login with: + +```bash +ssh-keygen -t ed25519 -f ~/.ssh/oci-spx -N '' -C spinifex-oci +``` + +Terraform reads your OCI credential from `~/.oci/config` which is a prerequisites step above, taking the tenancy, the user, the fingerprint, the key and **the region** from the profile. A config holding a single `[DEFAULT]` profile, which is what `oci setup config` writes, needs nothing further. + +Optionally with more than one profile you can define one using the environment variable `OCI_CLI_PROFILE` + +```bash +export OCI_CLI_PROFILE=customprofile +``` + +## 2. OCI Credentials for Spinifex + +Spinifex calls the OCI API at runtime to register each guest's public address, so every node needs a credential that can manage private and public IPs in your compartment. + +There are two ways to provide OCI API access to Spinifex, and they differ in who has to authorise them rather than in what Spinifex is allowed to do. Both grant [the same four permissions](../oci-architecture/README.md#the-iam-policy). + +| | [2.1 Instance principal](#21-instance-principal-preferred) | [2.2 OCI IAM user](#22-oci-iam-user-with-scoped-permissions) | +| ------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | +| **Key material** | None. Each node authenticates as itself | A private key on every node, at `/etc/spinifex/oci/` | +| **Who can set up** | A tenancy admin, once per tenancy | Anyone with identity rights in the tenancy | +| **Rotation** | Nothing to rotate | Yours to rotate and redistribute | +| **What you set** | `export SPX_PRINCIPAL=adopt`, read by step 4 | Nothing extra; step 5 installs the key for you | + +**Use 2.1 if you are a tenancy admin.** It is the better of the two because there is no key to leak, rotate or forget about, and a replaced node needs no handoff. Use 2.2 when your compartment was allocated to you inside someone else's tenancy, which is the common case and the reason 2.2 exists at all. + +Both routes below need `$CID` from the prerequisites step, so confirm it is still set in this shell: + +```bash +echo "${CID:?set it as shown under OCI CLI tool}" +``` + +Do one of the two authentication methods below, not both, then continue to step 3. + +### 2.1 Instance principal (preferred) + +Each node authenticates with the certificate its own metadata service serves at `/opc/v2/identity/cert.pem`, so no key is written anywhere. Authorising that takes a dynamic group and a policy, and **both are tenancy-root resources** — a compartment-scoped user cannot create them, and the attempt fails with `404-NotAuthorizedOrNotFound` on `CreateDynamicGroup`, which reads like a misconfiguration and is not one. + +Create them once, with a tenancy-admin OCI profile, then set one variable: + +```bash +./setup-identity.sh --dry-run # always first +./setup-identity.sh + +export SPX_PRINCIPAL=adopt +``` + +**That is all of it.** Step 4 writes `SPX_PRINCIPAL` into your Terraform inputs and step 5 reads it back from there, so neither step needs anything extra from you. Keep the same shell for both, as with `$CID`. + +The dynamic group matches on the compartment, so it covers every node you build there and needs no update when a node is replaced. Its Terraform state goes in `.identity/`, separate from the deployment's — keep that directory, as it is the only record of what was created. + +Only `setup-identity.sh` needs tenancy-admin rights. Every deployment afterwards runs as your ordinary compartment user. + +To remove the group and policy again, `./setup-identity.sh --destroy`. Every node configured for `adopt` loses its credential the moment you do. + +### 2.2 OCI IAM user with scoped permissions + +This route creates a dedicated OCI user holding only the three permissions Spinifex needs, and installs its key on each node. It needs identity rights in the tenancy but no tenancy-root rights, so it works in an allocated compartment. + +Skip this section if you have enabled the instance principal authentication path. + +#### Generate the key + +```bash +openssl genrsa -out ~/.oci/oci_api_key_spx.pem 2048 +chmod 600 ~/.oci/oci_api_key_spx.pem +openssl rsa -pubout -in ~/.oci/oci_api_key_spx.pem -out ~/.oci/oci_api_key_spx_public.pem +openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key_spx.pem | openssl md5 -c +``` + +The last command prints the **fingerprint**, which is how OCI names a key everywhere it refers to one. Keep it; you need it in the config file at the end of this step. + +#### Create a user and a group for it + +Both of these are identity resources, so they are created in the tenancy rather than in your compartment. This step requires the prerequisite `oci` CLI tool to be installed and configured with an API scope that includes creating new user accounts and groups. + +Replace `admin@yourdomain.com` with your administrator email which will be linked to the new OCI user account. + +```bash +export ADMIN_EMAIL=admin@yourdomain.com + +USER_OCID=$(oci iam user create --name spinifex-allocator \ + --email $ADMIN_EMAIL \ + --description "Spinifex external-address allocator" \ + --query 'data.id' --raw-output) + +GROUP_OCID=$(oci iam group create --name SpinifexOperators \ + --description "May manage the private and public IPs behind Spinifex external addresses" \ + --query 'data.id' --raw-output) + +oci iam group add-user --group-id "$GROUP_OCID" --user-id "$USER_OCID" +``` + +On success the output will include: + +```json +{ + "data": { + "compartment-id": "ocid1.tenancy.oc1..xxx", + "group-id": "ocid1.group.oc1..xxx", + "id": "ocid1.groupmembership.oc1..axxx", + "inactive-status": null, + "lifecycle-state": "ACTIVE", + "time-created": "2026-10-05T19:39:48.478000+00:00", + "user-id": "ocid1.user.oc1..xxx" + } +} +``` + +An email will be sent to the designated `$ADMIN_EMAIL` defined, you are required to click the "Activate Your Account" link to fully activate the new account in OCI. + +> [!NOTE] +> **If these fail with `NotAuthorizedOrNotFound`, you do not have identity rights in the tenancy**, which is normal when someone allocated you a compartment inside theirs. Ask whoever owns the tenancy to grant you the required permissions. + +#### Grant the group its four permissions + +Spinifex calls [ten operations](../oci-architecture/README.md#the-iam-policy), and these four statements are what authorise them. This attaches the policy to `$CID`, the compartment you are deploying into. + +```bash +oci iam policy create --compartment-id "$CID" --name SpinifexOperators \ + --description "Spinifex external-address allocation" \ + --statements '[ + "Allow group SpinifexOperators to use vnics in compartment id '"$CID"'", + "Allow group SpinifexOperators to manage private-ips in compartment id '"$CID"'", + "Allow group SpinifexOperators to manage public-ips in compartment id '"$CID"'", + "Allow group SpinifexOperators to use subnets in compartment id '"$CID"'" + ]' +``` + +> [!NOTE] +> **If this fails with `NotAuthorizedOrNotFound`, confirm `$CID` is the compartment you are deploying into.** It is a `ocid1.compartment.oc1..` OCID, or your tenancy OCID if you deploy into the root compartment. An identity-domain OCID is a different resource and will not work here. + +#### Upload the public key to that user + +```bash +oci iam user api-key upload --user-id "$USER_OCID" \ + --key-file ~/.oci/oci_api_key_spx_public.pem +``` + +This will output: + +```json +{ + "data": { + "fingerprint": "xxx", + "inactive-status": null, + "key-id": "ocid1.tenancy.oc1..xxx", + "key-value": "-----BEGIN PUBLIC KEY-----xxxx-----END PUBLIC KEY-----", + "lifecycle-state": "ACTIVE", + "time-created": "2026-10-05T19:51:58.843000+00:00", + "user-id": "ocid1.user.oc1..axxx" + }, + "etag": "xxx" +} +``` + +#### Write the profile and prove it works + +The Spinifex nodes authenticate with an OCI SDK config under the profile name `spinifex`. Write that profile on your workstation first, because it is both what the nodes get and the only way to test the credential before a deployment depends on it: + +```ini +# ~/.oci/config +[spinifex] +user= +fingerprint= +tenancy= +region= +key_file=~/.oci/oci_api_key_spx.pem +``` + +Then confirm the key, the user, the group and the policy all line up. This call needs exactly the `public-ips` grant above, so it fails in the same way a node would: + +```bash +oci network public-ip list --compartment-id "$CID" --scope REGION --all --profile spinifex +``` + +An empty response is a pass, because the permission is what is being tested rather than the contents. `NotAuthorizedOrNotFound` means the policy is not in force: check that the statements name the compartment by `compartment id`, and that the user is actually in the group. + +**Do this before step 5.** confirm the new OCI account can correctly authenticate and issue the required API calls for Spinifex to function correctly once installed. + +> [!WARNING] +> **Do not set `OCI_CLI_PROFILE=spinifex`.** That variable chooses the profile **Terraform** builds the infrastructure with, and this one cannot: creating a VCN, a subnet and instances is far outside the three grants above, so the apply fails on the first resource. The nodes find the `spinifex` profile by name without being told. + +#### Validate deployment + +Prior to running the Terraform scripts to deploy Spinifex, verify the OCI configuration and environment is correctly setup: + +```bash +./spx-oci-config.sh --dry-run ~/.ssh/oci-spx +``` + +Expected output: ```text -Allow group SpinifexOperators to manage private-ips in compartment -Allow group SpinifexOperators to manage public-ips in compartment -Allow group SpinifexOperators to read vnics in compartment -Allow group SpinifexOperators to read subnets in compartment -Allow group SpinifexOperators to read vcns in compartment +[spx-oci-config] credential: the [spinifex] profile in ~/.oci/config +[spx-oci-config] user: ocid1.user.oc1..aaaa... +[spx-oci-config] fingerprint: a1:b2:... +[spx-oci-config] region: ap-sydney-1 +[spx-oci-config] would write /etc/spinifex/oci/config and /etc/spinifex/oci/oci_api_key.pem as 0640 root:spinifex on: (no hosts given) ``` -**Scope it to a compartment, not the tenancy.** `manage public-ips` at tenancy level lets a compromised node consume the whole regional reserved-public-IP quota. +Step 5 runs this script for real, over SSH, once the nodes are formed. Those two files are what the allocator authenticates with, and the `spinifex` profile name in the second one is what it looks for. -**Do not grant `manage instances` or `manage vnics`.** Spinifex never creates, attaches or deletes a VNIC — it only adds addresses to a VNIC that already exists. A grant that allows VNIC lifecycle is strictly more than the integration can use. +**The `credential:` line is the one to check.** It has to name the `[spinifex]` profile. If instead it prints two `WARNING:` lines about falling back to "the credential Terraform builds with", the profile was not found and your nodes would get your full-access credential rather than the scoped one you just made. -### Quotas to check before you size a deployment +## 3. Choose deployment method -Two limits bound how many public addresses a deployment can hand out, and they do not scale the same way: +Choose how to deploy Spinifex on OCI, either as a single node, or at minimum a three node cluster for added resiliency and redundancy. -| Quota | Default | Scope | Notes | -| --- | --- | --- | --- | -| **Reserved public IPs** | 50 | Per region, whole tenancy | Shared by every node, so it does **not** grow with node count. This is the wall you hit first. | -| **Secondary private IPs per VNIC** | 64 | Per VNIC, so per node | Not raisable. Three nodes gives you 192 — this is the limit that does scale. | +| | Single node | Three nodes | +| ------------------------------ | -------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| **`node_count`** | `1` | `3` | +| **Survives losing a node** | No | Yes. NATS keeps quorum, predastore RS(2,1) keeps the data readable, the OVN raft keeps a leader | +| **Public addresses available** | 64 | 192, three VNICs' worth, still bounded by the regional quota | +| **Fault domains** | One | Three, one per node, chosen by Terraform | +| **Use it for** | Evaluation, a lab, an edge site with one box | Production. Multi-node resiliency | -A raise on the first is a support request, not a setting: Console → Governance & Administration → Limits, Quotas and Usage → "Request a service limit increase". Cite the exact limit name from `oci limits definition list`, not a name from documentation. +## 4. Write your Terraform inputs + +The next step is to define a `terraform.auto.tfvars` configuration file with your desired deployment method for Spinifex on OCI. + +Recommended compute shapes for a VM deployment: + +- `VM.Standard.E6.Flex` - Higher performance, 5th Gen AMD EPYC processor +- `VM.Standard.E5.Flex` - Base-line performance, 4th Gen AMD EPYC processor + +Recommended bare metal shapes, preferred for large-scale production workloads: + +- `BM.Standard.E5.192` - 192 OCPU / 2304 GB RAM. Higher performance, 4th Gen AMD EPYC processor +- `BM.Standard3.64` - 64 OCPU / 1024 GB RAM. Baseline, Intel Xeon Platinum 8358 +- `BM.Standard.E2.64` - 64 OCPU / 512 GB RAM. Legacy, 1st Gen AMD EPYC processor ```bash -oci limits definition list --service-name vcn --compartment-id -oci limits value list --service-name vcn --compartment-id -oci limits resource-availability get --service-name vcn \ - --limit-name --compartment-id -``` +cat > terraform.auto.tfvars < /var/lib/spinifex ext4 defaults,_netdev,nofail 0 2 -``` - -`_netdev` is what orders the mount after the network, and therefore after `iscsid` has a session. `nofail` is what keeps a missing volume from wedging the boot. Mounting `/var/lib/spinifex` *itself* rather than somewhere else and symlinking is deliberate: viperblock, predastore and JetStream all land on the volume with no configuration pointing anywhere unusual. - ---- - -## Step 1. Set your Terraform inputs - -Prerequisites: Terraform, Python 3, OCI credentials in `~/.oci/config`, and an SSH public key. The Python helper builds and uses the configuration's own `.venv`. - -```bash -cd scripts/terraform/oci-spx -cat > terraform.auto.tfvars <<'EOF' -compartment_ocid = "ocid1.compartment.oc1..aaaa..." -deployment_name = "spinifex" - -# Shape and size. Bare metal is preferred; a flex VM is what the quota allows. -compute_shape = "VM.Standard.E6.Flex" -compute_ocpus = 8 # OCI counts an OCPU as a full core -compute_memory_in_gbs = 32 - -# 1 for a single node, 3 for a cluster. This is the only line that chooses. -node_count = 3 +# 1 for a single node, 3 required for a cluster. +node_count = 1 # The block volume behind /var/lib/spinifex, attached over iSCSI. -data_volume_size_in_gbs = 256 -data_volume_vpus_per_gb = 120 # 120 = Ultra High Performance +data_volume_size_in_gbs = 256 +data_volume_vpus_per_gb = 120 # 120 = Ultra High Performance -node_client_cidr_allow_list = ["203.0.113.10/32"] +# Firewall. A list, so it can hold several ranges. Read the note below before +# narrowing it. +node_client_cidr_allow_list = ["0.0.0.0/0"] EOF ``` -The variables worth knowing, all of which have defaults that build a working single node: +The heredoc delimiter is unquoted, which is what lets `$CID` expand from the variable you exported in step 2. Check the file rather than assume, because a literal `$CID` in there fails at plan time with an unhelpful message about an invalid OCID: -| Variable | Default | What it decides | -| --- | --- | --- | -| `compartment_ocid` | — | **Required.** An OCID, not a name: this deploys into a compartment that already exists, because creating one needs tenancy-root rights the API user must not have | -| `deployment_name` | `spinifex` | Prefixes every resource and becomes the VCN `dns_label`, so 1–15 lowercase alphanumerics starting with a letter | -| `node_count` | `1` | Nodes, 1–25. `1` for a single node, `3` for a cluster. Each gets its own volume, its own second VNIC and its own fault domain | -| `compute_shape` | `VM.Standard.E6.Flex` | **`BM.*` for bare metal, `VM.*.Flex` for a VM.** A fixed bare-metal shape carries its own size, so `shape_config` is emitted only when the name contains `Flex` — set a BM shape and the two sizing variables below are ignored rather than rejected | -| `compute_ocpus` | `8` | OCPUs on a flex shape. Validated at ≥ 8 (16 vCPU), the minimum recommended for a node | -| `compute_memory_in_gbs` | `32` | GiB on a flex shape. Validated at ≥ 32 | -| `data_volume_size_in_gbs` | `256` | Size of each node's data volume. This is where guest disks, S3 objects and JetStream live — size it for the guests, not for the control plane | -| `data_volume_vpus_per_gb` | `120` | Performance tier, 0–120 VPUs/GB. 120 is Ultra High Performance; 10 is Balanced. Higher is more IOPS and more cost | -| `data_mountpoint` | `/var/lib/spinifex` | Where cloud-init mounts it. Change only if you know why | -| `vcn_cidr` | `10.200.0.0/22` | VCN address space. A `/22` leaves room for the secondary private IPs Spinifex registers per node | -| `public_subnet_cidr` | `10.200.0.0/23` | The subnet every node sits in, **on both VNICs**. Nodes serve the UI, the S3 gate and the AWS gateway directly, so they cannot live in a private subnet | -| `node_client_cidr_allow_list` | `["0.0.0.0/0"]` | Who may reach SSH and the service ports from the internet. **Change this** | -| `node_service_ports` | `[3000, 8443, 9999]` | Console, predastore gate, AWS gateway. SSH is opened separately | -| `ubuntu_version` | `26.04` | Canonical platform image version. The newest image for the shape and region is resolved at plan time rather than pinned to a regional OCID | -| `wan_bridge_name` | `br-wan` | The Linux bridge built over the second VNIC | -| `wan_bridge_mtu` | `9000` | The OCI VCN carries 9000 | +```bash +grep compartment_ocid terraform.auto.tfvars +``` -> [!WARNING] -> **`node_client_cidr_allow_list` defaults to `0.0.0.0/0`.** Nodes sit in a public subnet with public addresses because they serve the UI, the S3 gate and the AWS gateway directly — there is no bastion. Restrict this before any real use. +**This file is what decides the deployment.** `compute_ocpus` and `compute_memory_in_gbs` size a VM flex shape and are ignored on a fixed bare-metal one, which comes at one fixed size with all available OCPU/memory. + +[Every Terraform variable](../oci-architecture/README.md#every-terraform-variable) has the full list. > [!NOTE] -> **Bare metal changes nothing else in this document.** Set `compute_shape = "BM.Standard.E2.64"` and the same config builds it: the two flex sizing variables stop applying, the shape's own CPU and memory take over, and every other step — the volume, the second VNIC, `br-wan`, the install — is identical. Nested virtualisation stops being a question, because there is no nesting. +> **Leave `node_client_cidr_allow_list` at its `0.0.0.0/0` default for now.** It is an OCI security-list rule covering the whole public subnet, and your guests' public addresses cross it too, so narrowing it to your own address cuts internet access to every guest rather than just to the node. [Harden it before production](#harden-it-before-production) locks the node down in the layer that can tell the two apart. -## Step 2. Build the infrastructure +## 5. Deploy + +Choose the deployment method below: + +- `vm-single` - Single node instance (best for testing/development) +- `vm-multi` - A recommended 3-node cluster (production) +- `bm` - Bare metal for larger scale production use. ```bash -KEY=~/.ssh/oci-spx.pub -python3 scripts/oci_env.py --ssh-public-key-path "$KEY" -- terraform init -python3 scripts/oci_env.py --ssh-public-key-path "$KEY" -- terraform plan -out=oci-spx.tfplan +export TOPOLOGY=vm-single ``` -Read the saved plan, then apply **that exact plan** rather than re-planning: +Next deploy Spinifex on OCI: ```bash -python3 scripts/oci_env.py --ssh-public-key-path "$KEY" -- terraform apply oci-spx.tfplan +./validate-topology.sh \ + --topology "$TOPOLOGY" \ + --credential-hook ./spx-oci-config.sh \ + --skip-workload \ + --keep ``` -**The apply ends with the addresses you need for every remaining step.** With `node_count = 3` it prints twenty-two resources and this: +The same command covers both credential routes. It reads `instance_principal` from the tfvars you wrote in step 4, so an instance-principal deployment needs no extra argument and `--credential-hook` is simply ignored. + +One command builds the infrastructure, installs Spinifex, forms the cluster, configures OCI public addressing and verifies that the address allocator came up. + +| Argument | What to pass | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--topology` | `vm-single` for one VM, `vm-multi` for three, `bm` for one bare-metal host. Required, with no default, so a command cannot be aimed at the wrong one by omission. It supplies a shape and a node count only where your tfvars is silent | +| `--channel` | Nothing, normally. It defaults to `latest`, the published release. Pass `dev` to install the newest pre-release instead, or `--version ` to pin an exact build | +| `--credential-hook` | `./spx-oci-config.sh`, which installs the step 2.2 credential on every node. Not used when your tfvars set `instance_principal`, because there is then no key to install | +| `--skip-workload` | Stop once the cluster is verified. Drop it and the driver also runs the published Terraform workbooks on the node, which launches real guests on public addresses and tears each one down again | +| `--keep` | **This is what makes it a deployment rather than a test.** Without it the driver destroys everything at the end, which is right for CI and testing a deployment | + +**Your `terraform.auto.tfvars` outranks the topology**, so `--topology bm` with `compute_shape = "BM.Standard.E5.192"` in that file deploys on that shape. + +Add `--dry-run` to print the plan and change nothing. + +> [!NOTE] +> **If `--channel dev` fails to download, pass a tag instead.** `dev` is the one channel that resolves through an unauthenticated GitHub API call, so it can be rate-limited by Github. Take the newest tag from the [releases page](https://github.com/mulgadc/spinifex/releases) and swap `--channel dev` for `--version `, which resolves by redirect and cannot trip the same limit. A tag is also what to use for a repeatable deployment, where you want the build pinned rather than current. + +## 6. Check it worked + +The stages print as they finish, and all of these have to appear: ```text -Apply complete! Resources: 22 added, 0 changed, 0 destroyed. +[validate-vm-single] building +[validate-vm-single] VM.Standard.E5.Flex, 1 node(s), oci_auth from a key file +[validate-vm-single] waiting for cloud-init on each node +[validate-vm-single] installing Spinifex on each node +[validate-vm-single] initializing the single node +[validate-vm-single] running the credential hook +[validate-vm-single] credential hook ok +[validate-vm-single] configuring the IMDS remap and the external pool +[validate-vm-single] checking the allocator came up +[validate-vm-single] 150.230.13.131 allocator ready +[validate-vm-single] cluster membership +[validate-vm-single] --skip-workload: stopping before the workbook +[validate-vm-single] --keep: leaving the infrastructure up, no verdict recorded +[validate-vm-single] ssh in with: ssh -i ~/.ssh/oci-spx ubuntu@public.ip +[validate-vm-single] destroy it with: ./validate-topology.sh --topology vm-single --destroy-only +``` -Outputs: +**`allocator ready` is the line to look for.** Every line above it also prints on a node that cannot allocate a public address, and that failure stays silent until a guest asks for one. -compartment_name = "mulgadc" -compartment_ocid = "ocid1.compartment.oc1..aaaaaaaa6nkk...ztta" -hosts_file = < [!WARNING] -> Never commit the state file, a plan file, or key material. `.gitignore` covers `terraform.tfstate*`, `*.tfplan`, `*.auto.tfvars`, `terraform.tfvars` and `*.pem`. - -## Step 3. Install Spinifex and set up OVN - -Spinifex installs the same way here as anywhere else. Run this **on every node**: +Fetch your generated AWS credentials via SSH and login to the console using your new Spinifex account. ```bash -curl -fsSL https://install.mulgadc.com | bash -``` - -That puts the binary, the systemd units and the helper scripts in place and starts nothing. Then wire OVN, which is where the single-node and multi-node paths differ. - -Two flags are the same on every node and on both paths, and both are decisions you cannot change afterwards without re-doing this step: - -- **`--management` is load bearing.** Omitting it takes the compute-node branch, which stops *and disables* `ovn-central` — silently, leaving a node with no record of what it was meant to be. -- **`--nat-uplink`, not `--wan-bridge=br-wan`.** The two are mutually exclusive, and only `--nat-uplink` creates the `spx-nat` transit veth that routed mode runs on. `--wan-bridge` takes the veth-to-`br-ext` branch and deletes `spx-nat` on the way, after which `host.Routed.EnsureUplinkPort` refuses with *"not on OVS — run setup-ovn.sh --nat-uplink"*. - -**That does not make `br-wan` redundant.** It is still doing two jobs, neither of which involves OVS: - -1. It **names the VNIC** for the OCI allocator. `oci_vnic_iface = "br-wan"` in Step 6's pool config is resolved to a VNIC OCID **by MAC**, on the node it runs on — which is what lets one identical config file be correct on all three nodes. -2. It **holds the addresses.** Every external address Spinifex registers becomes a secondary private IP on that VNIC, appears on `br-wan`, and gets its own source-routing rule into table 200. The guests' own traffic reaches it through `spx-nat` and the host's `spinifex-nat-egress` masquerade. - -So a correct OCI node has `br-wan` as a **Linux** bridge with no OVS port at all, and `br-ext` as an OVS bridge whose ports are `spx-nat-ovs` and the patch to `br-int`. That asymmetry is the design, not a half-finished install. - -> If you suspect an OVS problem on this host, read `ovs-vsctl --columns=name,error list Interface` and the vswitchd log. **Never trust `ovs-vsctl`'s exit status** — it exits 0 even when the datapath rejected the device. - -### Single node - -```bash -sudo /usr/local/share/spinifex/setup-ovn.sh --management --nat-uplink -``` - -### Three nodes - -Servers 1 to 3 run a clustered **OVN database**, so VPC networking survives losing any one of them. **Node 1 creates the cluster and must finish first**; nodes 2 and 3 then join it. `--recreate-db` appears in all three because `ovn-central` starts a standalone database when the package installs, and a clustered one can only be created from scratch. - -Every address below is a **private** IP from the Terraform `nodes` output. - -```bash -# Run on every node, with the values from your own apply. -export SPINIFEX_NODE1=10.200.1.249 -export SPINIFEX_NODE2=10.200.0.201 -export SPINIFEX_NODE3=10.200.1.79 -export SPINIFEX_OVN_REMOTE=tcp:$SPINIFEX_NODE1:6642,tcp:$SPINIFEX_NODE2:6642,tcp:$SPINIFEX_NODE3:6642 -``` - -`--ovn-remote` is the whole member list, and **it is the same on all three nodes** — do not trim it to the peers. It is what `ovn-northd` dials, and an OVSDB RAFT follower does not forward writes: it answers *not cluster leader, trying another server*. A northd pointed at one member therefore works only while it happens to share a node with the database leader, and stops translating Northbound intent into Southbound flows the moment leadership moves. Nothing about that is visible from `systemctl` — every service stays `active` — and the symptom appears much later as a `terraform apply` hung on `aws_internet_gateway.igw: Still creating...` forever. - -**Node 1 — create the cluster:** - -```bash -sudo /usr/local/share/spinifex/setup-ovn.sh \ - --management --nat-uplink \ - --db-cluster-local-addr=$SPINIFEX_NODE1 \ - --ovn-remote=$SPINIFEX_OVN_REMOTE \ - --recreate-db \ - --encap-ip=$SPINIFEX_NODE1 -``` - -**Nodes 2 and 3 — join it,** after node 1 reports `=== OVN compute node setup complete ===`: - -```bash -# on node 2 -sudo /usr/local/share/spinifex/setup-ovn.sh \ - --management --nat-uplink \ - --db-cluster-local-addr=$SPINIFEX_NODE2 \ - --db-cluster-remote-addr=$SPINIFEX_NODE1 \ - --ovn-remote=$SPINIFEX_OVN_REMOTE \ - --recreate-db \ - --encap-ip=$SPINIFEX_NODE2 - -# on node 3 -sudo /usr/local/share/spinifex/setup-ovn.sh \ - --management --nat-uplink \ - --db-cluster-local-addr=$SPINIFEX_NODE3 \ - --db-cluster-remote-addr=$SPINIFEX_NODE1 \ - --ovn-remote=$SPINIFEX_OVN_REMOTE \ - --recreate-db \ - --encap-ip=$SPINIFEX_NODE3 -``` - -Each run ends with its own verification block. Node 1 reports `chassis count: 1`; nodes 2 and 3 report `0`, because a chassis is registered by `ovn-controller` a moment later and the script checks immediately. That is not a failure — confirm the real answer from node 1 once all three are done: - -```bash -sudo ovn-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound -sudo ovn-sbctl show -``` - -```text -Name: OVN_Northbound -Cluster ID: 7c7d (7c7d6d29-8243-4f82-8b4e-2848dbd5942e) -Server ID: 5d95 (5d952726-6ab5-4188-8eb9-b70acf37c374) -Address: tcp:10.200.1.249:6643 -Status: cluster member -Role: leader -Term: 1 -``` - -`Status: cluster member` with one leader, and a `Chassis` entry in `ovn-sbctl show` for each of the three. If `cluster/status` says the database is standalone, `--db-cluster-local-addr` did not reach it — re-run that node. - -Then confirm northd is actually translating, which `cluster/status` cannot tell you. Run this on any node: - -```bash -echo "NB $(sudo ovn-nbctl --no-leader-only get NB_Global . nb_cfg) / SB $(sudo ovn-sbctl --no-leader-only get SB_Global . nb_cfg)" -``` - -The two numbers must be equal, or within one of each other on a busy cluster. A gap that does not close within a few seconds means the active `ovn-northd` cannot write to the Northbound leader, and `/var/log/ovn/ovn-northd.log` will be looping on `clustered database server is not cluster leader; trying another server`. The fix is the `--ovn-remote` list above. - -## Step 4. Form the cluster - -Everything here is Spinifex's own formation, unchanged from bare metal except for two flags that OCI requires: - -- **`--external-mode=nat` is mandatory.** See [the consequence](#the-consequence-routed-mode-is-mandatory). `pool` mode produces a cluster that passes every health check and drops every guest packet. -- **`--ipsec=false`:** `openvswitch-ipsec` is masked on the OCI Ubuntu image while `spx admin init` defaults the flag to true. A cluster formed with it on will not bring its overlay up. - -Both are read from node 1 only. Joining nodes inherit the external mode, the transit pool and the IPsec posture, so they are chosen once. - -### Single node - -```bash -sudo spx admin init --node node1 --nodes 1 \ - --region ap-southeast-2 --az ap-southeast-2a \ - --external-mode=nat --ipsec=false -``` - -It finishes in a few seconds: - -```text -📡 External networking: nat (routed; no public pool configured yet) - Transit: 100.127.0.0/24 via spx-nat-host (host masquerades out any uplink) -✅ Created: spinifex.toml -🔧 Configuring AWS credentials... Profile: spinifex -✅ Host DNS: spx3.net + compute.internal -> 10.200.0.252:53 (northstar) -🎉 Spinifex initialization complete! - Advertise IP: 10.200.0.252 -``` - -"no public pool configured yet" is expected — the OCI pool is Step 6. - -### Three nodes - -Init and join run **concurrently**: init blocks until every node has joined. Start node 1, take the token from its output, then run both joins while it is still waiting. - -`--force` is in every command so the sequence is identical whichever way you installed. On a node Terraform just built there is nothing to lose either way; on a node that has been in service, joining discards its master key and orphans every volume sealed under it, and `--force` is the confirmation for that. - -**Node 1 — initialize:** - -```bash -sudo spx admin init --force \ - --node node1 --nodes 3 \ - --bind $SPINIFEX_NODE1 --cluster-bind $SPINIFEX_NODE1 \ - --port 4432 --region ap-southeast-2 --az ap-southeast-2a \ - --external-mode=nat --ipsec=false -``` - -It generates the keys and the CA, then stops and waits, printing the token: - -```text -📡 Formation server started on 10.200.1.249:4432 - Waiting for 2 more node(s) to join... - Token expires in 30m0s - - Other nodes should run: - sudo spx admin join --host 10.200.1.249:4432 --token spx_join_YHRL6y_yVP0E8Tc1 --node --bind -``` - -Take the **token** from that output, but run the commands below rather than the line it prints — they add `--force` and `--cluster-bind`. - -**Nodes 2 and 3 — join,** while init is still waiting: - -```bash -# on node 2 -sudo spx admin join --force \ - --node node2 --bind $SPINIFEX_NODE2 --cluster-bind $SPINIFEX_NODE2 \ - --host $SPINIFEX_NODE1:4432 --token \ - --region ap-southeast-2 --az ap-southeast-2a - -# on node 3 -sudo spx admin join --force \ - --node node3 --bind $SPINIFEX_NODE3 --cluster-bind $SPINIFEX_NODE3 \ - --host $SPINIFEX_NODE1:4432 --token \ - --region ap-southeast-2 --az ap-southeast-2a -``` - -Each join answers with the membership it now sees: - -```text -🎉 Node successfully joined cluster! - Cluster: spinifex (3 nodes) - Bind: 10.200.0.201 Advertise: 10.200.0.201 Loopback: 127.0.0.1 - Nodes: - - node2 (bind=10.200.0.201 advertise=10.200.0.201) - - node3 (bind=10.200.1.79 advertise=10.200.1.79) - - node1 (bind=10.200.1.249 advertise=10.200.1.249) -``` - -and node 1 unblocks: - -```text -🎉 Cluster formation complete! - Cluster: spinifex (3 nodes) - Region: ap-southeast-2 -``` - -Confirm the joiners inherited the OCI-critical settings before going on — this is cheap and catches a node that formed against the wrong leader: - -```bash -sudo grep -E 'external_mode|ipsec_enabled' /etc/spinifex/spinifex.toml -``` - -```text -ipsec_enabled = false -external_mode = "nat" -``` - -The join token expires 30 minutes after init; `--token-ttl 2h` if provisioning is slower than that. - -## Step 5. Configure Spinifex for OCI, start and verify - -**This is the step that is genuinely OCI-specific**, and it is identical on one node or three. Do all of it on **every** node before starting anything. - -### Discover the OCIDs - -```bash -# Instance, compartment and both VNICs, straight from the instance metadata. -curl -sH 'Authorization: Bearer Oracle' http://169.254.169.254/opc/v2/instance/ \ - | python3 -c 'import json,sys; d=json.load(sys.stdin); print("compartment:", d["compartmentId"]); print("instance:", d["id"])' - -curl -sH 'Authorization: Bearer Oracle' http://169.254.169.254/opc/v2/vnics/ \ - | python3 -c 'import json,sys -for v in json.load(sys.stdin): - print(v["macAddr"], v["vnicId"], v["subnetCidrBlock"], v.get("privateIp"))' -``` - -```text -compartment: ocid1.compartment.oc1..aaaaaaaa6nkk...ztta -instance: ocid1.instance.oc1.ap-sydney-1.anzxsljr6eq5...tkxdq - -02:00:17:01:9C:22 ocid1.vnic.oc1.ap-sydney-1.abzxsljrnat7...y6vw5q 10.200.0.0/23 10.200.0.252 -02:00:17:04:1A:57 ocid1.vnic.oc1.ap-sydney-1.abzxsljrjd7z...czgvua 10.200.0.0/23 10.200.1.233 -``` - -**You only need the compartment OCID for the config below** — the VNIC is resolved at runtime. Match a VNIC by MAC against `ip -br link show br-wan` if you want to confirm which is which; Oracle's VNIC ordering is not a documented contract, so "the second one" is not a selector. - -### Install the credentials on the node - -**The daemon cannot read `~/.oci/`.** Its systemd unit sets `ProtectHome=yes`, so a config under any home directory is invisible to it however the permissions read. Credentials go under `/etc/spinifex/`, on every node: - -```bash -sudo install -d -o root -g spinifex -m 0750 /etc/spinifex/oci -sudo install -o root -g spinifex -m 0640 ~/.oci/oci_api_key.pem /etc/spinifex/oci/oci_api_key.pem -sudo tee /etc/spinifex/oci/config >/dev/null <<'EOF' +ubuntu@spinifexnode01:~$ cat ~/.aws/credentials [spinifex] -user=ocid1.user.oc1..aaaa... -fingerprint=aa:bb:cc:... -key_file=/etc/spinifex/oci/oci_api_key.pem -tenancy=ocid1.tenancy.oc1..aaaa... -region=ap-sydney-1 -EOF -sudo chown root:spinifex /etc/spinifex/oci/config -sudo chmod 0640 /etc/spinifex/oci/config +aws_access_key_id = XXXX +aws_secret_access_key = XXXX ``` -```text -drwxr-x--- 2 root spinifex 4096 Sep 26 03:48 . --rw-r----- 1 root spinifex 303 Sep 26 03:48 config --rw-r----- 1 root spinifex 1715 Sep 26 03:48 oci_api_key.pem -``` +

+ Spinifex Web UI +

-The profile name — `spinifex` here — is what `oci_config_profile` names below. Keep a copy at `~/.oci/config` too if you want the `oci` CLI on the node; that is a different consumer and it is not on any Spinifex code path. -### Configure the OCI pool and the IMDS remap +**Congratulations! Spinifex is installed.** -Both go in `/etc/spinifex/spinifex.toml`, on every node, with the **same text on each** — nothing here is per-node: +## 7. Set up your cluster -```toml -[network] -external_mode = "nat" -imds_host_meta_ip = "169.254.42.254" -imds_host_dns_ip = "169.254.42.253" +Spinifex is running, but it holds nothing yet — no machine images, no networks, no instances. -# Leave the nat-transit pool init wrote exactly as it is, and add this one. -[[network.external_pools]] -name = "oci-public" -source = "oci" -oci_compartment_id = "ocid1.compartment.oc1..aaaa..." -oci_vnic_iface = "br-wan" -oci_config_file = "/etc/spinifex/oci/config" -oci_config_profile = "spinifex" -dns_servers = ["169.254.169.253"] -``` +Continue to [Setting Up Your Cluster](/docs/setting-up-your-cluster) to import an AMI, create an SSH key pair, create a VPC with a public subnet, and launch your first instance. -Notes on the keys: +## Harden it before production -- **Exactly one of `oci_vnic_id` and `oci_vnic_iface`**, never both — the config is rejected if you set both or neither. Two that disagreed would send allocations to a VNIC the datapath is not on, and OCI would drop the traffic without a word. -- **`oci_vnic_iface` is the right choice on a cluster**, because it resolves through instance metadata **by MAC** on the node it runs on. Naming either `br-wan` or the physical interface resolves to the same VNIC. Use `oci_vnic_id` only when you want to pin a specific VNIC on a single node. -- `oci_compartment_id` is the only other required key. `oci_subnet_id` is optional and defaults to the VNIC's own subnet; set it only when you want private IPs from a different subnet. `oci_config_file` defaults to `~/.oci/config` and `oci_config_profile` to `DEFAULT` — **on a node both need setting**, because the daemon cannot read a home directory. -- `oci_public_ip_pool` takes a BYOIP pool OCID. Accepted today so BYOIP is a config change later rather than a code change; see [Limits](#limits-in-this-version). -- `range_start`, `range_end`, `gw_lrp_range_*`, `bind_bridge` and `dhcp_mac` are **rejected** on an OCI pool. OCI owns the addresses; a range you wrote would be fiction. -- Leave the `nat-transit` pool alone. In routed mode the per-VPC gateway router addresses come from the RFC 6598 transit range, not from OCI — **only public addresses handed to guests consume an OCI address.** Fifty VPCs and three Elastic IPs cost three reserved public IPs, not fifty-three. -- **The IMDS pair is required on OCI**, and it is set both keys or neither — a half-configured pair is ignored and the node behaves as if the remap were off. [The next section](#the-169254169254-collision) is why it exists; `169.254.42.254` / `169.254.42.253` is the tested choice. +The deployment comes up usable, not locked down. Three layers filter traffic here and the first job is telling them apart, which [Firewalls, in all three layers](../oci-architecture/README.md#firewalls-in-all-three-layers) does in full. The short version: -### Start and verify - -On **every** node: +**1. Arm the Spinifex host firewall.** It is installed but not armed on this path. Arming it gives you the proper policy: the public plane open, the cluster plane scoped to peers only, and SSH scoped to a list you own. ```bash -sudo systemctl start spinifex.target +# On every node. +sudo env SETUP_STAGES=firewall /usr/local/share/spinifex/setup.sh --firewall on ``` -Then, from any one of them: +**2. Narrow SSH.** It is open to the world until you do, which comes from the Ubuntu image's own rules rather than from ours. Edit the one file the installer creates and never overwrites: ```bash -sudo spx get nodes +# /etc/spinifex/firewall/custom.nft +define trusted_ssh_peers = { 203.0.113.10/32 } ``` -```text -NAME | STATUS | ROLES | IP | REGION | AZ | UPTIME | VMs | SERVICES -node1 | Ready | nats:follower | 10.200.1.249 | ap-southeast-2 | ap-southeast-2a | 0m | 0 | nats,predastore,viperblock,daemon,awsgw,vpcd,ui -node2 | Ready | nats:follower | 10.200.0.201 | ap-southeast-2 | ap-southeast-2a | 0m | 0 | nats,predastore,viperblock,daemon,awsgw,vpcd,ui -node3 | Ready | nats:leader | 10.200.1.79 | ap-southeast-2 | ap-southeast-2a | 0m | 0 | nats,predastore,viperblock,daemon,awsgw,vpcd,ui -``` - -Every node listed, all `Ready`, exactly one `nats:leader`, and the same `SERVICES` on each. `spx top nodes` shows pooled capacity and what the cluster can launch right now; if it looks like one server rather than three, the others never joined. - -**Confirm the OCI allocator came up**, which `spx get nodes` cannot tell you: - ```bash -sudo journalctl -u spinifex-vpcd --since -5m | grep -i ocinet +sudo nft -c -f /etc/spinifex/firewall/spinifex.nft # check, then apply +sudo /usr/local/lib/spinifex/spinifex-firewall-apply ``` -```text -"msg":"ocinet resolved the external VNIC from its interface","pool":"oci-public","iface":"br-wan", - "vnic_id":"ocid1.vnic.oc1.ap-sydney-1.abzxsljrjwlf...kimuq","private_ip":"10.200.1.31","subnet":"10.200.0.0/23" -"msg":"OCI allocator ready","pool":"oci-public","collected":0,"stale_bindings":0,"skipped":1 -``` +**3. Decide about the console on port 3000.** The S3 gate (8443) and the AWS gateway (9999) are the product's public surface and should stay public. The web console need not be. -**`resolved the external VNIC` is the line that matters** — it proves the credentials work, the compartment is right, and `br-wan`'s MAC matched a real VNIC. A node missing it will accept `allocate-address` and fail it. +**Leave the OCI security list open.** Guest public addresses cross it, so narrowing `node_client_cidr_allow_list` breaks your tenants instead of protecting the node. The host firewall above is the layer that can tell a node's listener from a guest's. -> [!NOTE] -> On a cold cluster start you may instead see `OCI allocator reconcile failed … nats: no responders available for request` on some nodes. That is vpcd racing JetStream's KV at boot; the startup reconcile is skipped and not retried. It is harmless on a new cluster where nothing has been allocated, and it is tracked — restart `spinifex-vpcd` on that node to run it. The `resolved the external VNIC` line above is still the one that decides whether allocation works. +Full detail, including which port serves what and why forming a cluster starts by turning the policy off, is in [Host Firewall](/docs/host-firewall). -## Step 6. Set up your cluster +## Next steps -The cluster is running, but it holds nothing yet — no machine images, no networks, no instances. +**Set up your cluster.** It is running but holds nothing yet: no images, no networks, no instances. [Setting Up Your Cluster](/docs/setting-up-your-cluster) imports an AMI, creates a key pair and a VPC, and launches your first instance. -Continue to [Setting Up Your Cluster](/docs/setting-up-your-cluster) to import an AMI, create an SSH key pair, create a VPC with a public subnet, and launch your first instance. It ends by arming the [host firewall](/docs/host-firewall), which is also where you re-arm it if you turned it off to form the cluster. - ---- - -## Step 7. Run your existing Terraform against the cluster - -This is the part worth pausing on. Everything above builds infrastructure **on** OCI using the OCI provider. Everything from here uses the **AWS** provider — unmodified, from the OpenTofu or Terraform registry — pointed at your own cluster. The same `aws_vpc`, `aws_instance`, `aws_db_instance`, `aws_ecs_service` and `aws_eks_cluster` resources a team already has in git apply against Spinifex on an OCI tenancy, with no rewriting and no OCI-specific module. - -That is the claim, so it is measured rather than asserted. What follows is a run of the workbooks we ship against a three-node Spinifex cluster on OCI VMs. - -### Pointing the provider at your cluster - -Three things differ from a provider block aimed at AWS, and only three: +**Run your existing Terraform against it.** Everything above builds infrastructure _on_ OCI with the OCI provider. From here you use the **AWS** provider, unmodified from the registry, pointed at your own cluster. Your `aws_vpc`, `aws_instance`, `aws_db_instance`, `aws_ecs_service` and `aws_eks_cluster` resources stay as they are in git. Three things differ, and only three: ```hcl provider "aws" { @@ -816,218 +629,70 @@ provider "aws" { } ``` -Credentials come from the `[spinifex]` profile that `spx admin init` writes into `~/.aws/credentials` on node 1. +> **Use the node's private address, not its public one.** The node certificate carries no SAN for the public address, because that address is never on the wire: OCI NATs it to a private one. A call to `https://:9999` fails TLS verification with _hostname doesn't match_. Run Terraform from a node, or from anything else inside the VCN. -> **Use the node's private address, not its OCI reserved public IP.** The node certificate carries no SAN for the public address, because that address is never on the wire — OCI NATs it to a private one. An `aws` or `terraform` call to `https://:9999` fails TLS verification with *hostname doesn't match*. Until that is fixed, run Terraform from a node, or from anything else inside the VCN. +The [Terraform workbooks](../terraform-workbooks/nginx-alb/README.md) we ship are the worked examples. `e2e-cloudvendor-nightly` runs them on a single VM, on three VMs and on bare metal, publishing a table per topology on its own run page, so read that for the build you are installing. -### What we tested, and what happened - -Measured on 2026-09-26 against a three-node cluster of `VM.Standard.E6.Flex` instances in `ap-sydney-1`, running `spinifex v1.20.0-113`. Each workbook is a full `apply`, a functional assertion against the thing it built, and a `destroy`. - -| Workbook | What it exercises | Result | -| --- | --- | --- | -| `nginx-webserver` | VPC, subnet, IGW, security group, key pair, EC2 instance, public IP; HTTP 200 from the internet | **Passed** (86s) | -| `bastion-private-subnet` | Public and private subnets, NAT egress, a bastion, SSH hop to a private host | **Passed** (117s) | -| `rds-quickstart` | DB subnet group, parameter group, `aws_db_instance` (PostgreSQL), client instance, connection | **Passed** (296s) | -| `ecs-quickstart` | ECS cluster, task definition, service, container instances, ALB with a healthy target | **Passed** (166s) | -| `eks-quickstart` | EKS control plane, managed node group, `kubectl` against the cluster, nodes `Ready` | **Passed** (259s) | -| `nginx-alb` | Application Load Balancer across two subnets, two backends, health checks | **Passed** (123s) | -| `s3-webapp` | S3 bucket, IAM role and instance profile, IMDS-fetched credentials, upload from the guest | **Failed** — see below | -| `demo-app` | Container image for the EKS workbooks, pushed to ECR | **Passed** | -| `eks-https-ingress` | Private-subnet workers behind a NAT gateway, LBC addon, ACM certificate, HTTPS Ingress | **Passed** (252s) | -| `eks-gitops-argocd` | Private-subnet workers, Argo CD addon, EBS-CSI PersistentVolume, GitOps sync | **Passed** (225s) | - -Nine of the ten pass. RDS, ECS and EKS are the answer to the question this section exists to ask: an EKS control plane and a managed node group come up, `kubectl get nodes` reports them `Ready`, a PostgreSQL instance accepts connections, and an ECS service runs behind a load balancer with a healthy target. None of it knows it is running on someone else's cloud. - -The last two are the harder network. Their workers sit in private subnets and reach the cluster endpoint and ECR through a NAT gateway, so a worker registering `Ready` is the proof that the whole NAT path works — which on OCI it did not until three defects in the gateway's address handling were fixed. If those two pass and `eks-quickstart` also passes, NAT egress is sound. - -`s3-webapp` fails on the read-back rather than the create: the AWS provider issues an **S3 Control** `ListTagsForResource` for the bucket, an endpoint nothing serves, and the SDK builds its hostname by prefixing the account ID onto the host — which cannot resolve against an IP. The bucket, the IAM role and the instance are all created correctly first. This is not OCI-specific — it fails the same way on bare metal — and it is a known defect we are fixing. Until then, either pin the AWS provider to 5.x or set `skip_requesting_account_id = true` in the provider block, and buckets apply cleanly. - -Two things bit during the run that are worth knowing before you hit them, neither of which is a reason the workbooks do not work: - -- A `spinifex-daemon` restart while a node group is creating is terminal for that node group — `NodeCreationFailure: create interrupted by daemon restart`, with no retry. -- A `terraform destroy` immediately followed by a `terraform apply` of the same EKS cluster name can fail with `ResourceInUseException` while `DescribeCluster` and `ListClusters` both report the cluster gone, so there is nothing to wait on. Leave a minute between the two. - ---- - -## Step 8. Oracle Linux as a guest image - -Spinifex ships four Oracle Linux entries in its image catalog, so a customer on OCI can run the same distro their Oracle support contract covers. They import exactly like any other AMI — nothing about them is OCI-specific, and they run equally well on bare metal: - -| Catalog name | Release | Arch | Kernel | -| --- | --- | --- | --- | -| `oracle-10.1-x86_64` | Oracle Linux 10.1 | x86_64 | UEK 8 | -| `oracle-10.1-arm64` | Oracle Linux 10.1 | arm64 | UEK 8 | -| `oracle-9.8-x86_64` | Oracle Linux 9.8 | x86_64 | UEK 7 | -| `oracle-9.8-arm64` | Oracle Linux 9.8 | arm64 | UEK 7 | +**Oracle Linux guests.** Four Oracle Linux images are in the catalog, so you can run the distro your Oracle support contract covers: ```bash sudo spx admin images import --name oracle-10.1-x86_64 --config /etc/spinifex/spinifex.toml -aws ec2 describe-images --query 'Images[].[Name,State,BootMode]' --output text ``` -All four boot **UEFI**, so launch them into a shape that boots UEFI — a BIOS-only instance type will not come up, and the failure looks like a hung boot rather than a rejected image. +The four are `oracle-10.1-x86_64`, `oracle-10.1-arm64`, `oracle-9.8-x86_64` and `oracle-9.8-arm64`. All of them boot **UEFI**, so launch them into a shape that boots UEFI or the failure looks like a hung boot rather than a rejected image. **Log in as `cloud-user`, not `opc`.** These are the generic KVM cloud images from `yum.oracle.com`, which refuse `opc`, `oracle` and `ec2-user` alike. The UI's instance detail page shows the right user per AMI. -### The login user is `cloud-user`, not `opc` +## Removing the deployment ```bash -ssh -i path/to/key.pem cloud-user@ +./validate-topology.sh --topology vm-single --destroy-only ``` -**This is the one that catches people.** `opc` is the default user on the images Oracle publishes *into OCI itself*; these are the generic **KVM cloud images** from `yum.oracle.com`, whose cloud-init `default_user` is `cloud-user`. Verified on both releases: `opc`, `oracle` and `ec2-user` are all refused. The Spinifex UI's instance detail page shows the right user per AMI, so read it there rather than guessing from the distro. +It destroys whatever that topology's Terraform state holds, so it can only remove what this configuration created. -### Why these four pin a checksum digest inline +### Check for leftover public IPs afterwards -Every other catalog entry verifies against the publisher's sums file. Oracle ships none — the digests are published as HTML on `yum.oracle.com/oracle-linux-templates.html` — so these four carry `ChecksumDigest` in `spinifex/operator/imagecatalog/images.go` instead. That is safe **only** because each URL names an immutable build (`b291`, `b293`, `b178`, `b182`) and Oracle never moves one. A new point release is a new URL and a new digest, never an edit to an existing entry. +**Terraform does not own the addresses Spinifex allocates, so a destroy can leave them behind.** +A reserved public IP and the private IP under it are created by the running node when a guest asks for an address, not by this configuration. +They are in no Terraform state, so `--destroy-only` cannot see them and does not try. -On arm64 Oracle publishes a `-kvm-cloud-` build alongside a plain `-kvm-` one. The catalog takes `-kvm-cloud-`: it is the one with cloud-init, and so the one that matches x86_64's `-kvm-`. The plain arm64 build imports fine and then has no datasource, which surfaces as an instance with no key and no metadata rather than as an import error. +Each one bills, and each holds one of the tenancy's 50 reserved-public-IP slots. +A tenancy at that ceiling refuses every later launch with `AddressLimitExceeded`, on every deployment in it and not only the one that leaked. -### SELinux is enforcing - -Both releases ship `SELinux: enforcing`, unlike the Debian and Ubuntu images. That is the upstream default and Spinifex does not change it. It does not affect networking, IMDS or cloud-init — all verified working — but a workload that has only ever run on Debian may meet it for the first time here. - ---- - ---- - -## Verify end to end +A running node collects its own: the allocator reconciles every ten minutes and deletes detached addresses carrying the `spinifex-` prefix that no binding claims. +Destroying the node is what defeats that, because the sweep goes away with the host that ran it. +So list them after a teardown: ```bash -export AWS_PROFILE= - -aws ec2 allocate-address -aws ec2 run-instances --image-id --instance-type t3.micro --key-name \ - --subnet-id --associate-public-ip-address -aws ec2 describe-instances --query \ - 'Reservations[].Instances[].[InstanceId,PrivateIpAddress,PublicIpAddress,State.Name]' \ - --output text +oci network public-ip list --compartment-id "$COMPARTMENT_OCID" --scope REGION --lifetime RESERVED --all \ + --query 'data[?starts_with("display-name", `spinifex-`)].{ip:"ip-address",name:"display-name",attached:"private-ip-id",created:"time-created"}' \ + --output table ``` -Then, from the host: +**A row with a non-empty `attached` is not garbage.** +It is bound to a VNIC, which means either a guest is receiving traffic on it or another deployment in the same compartment holds it. +Only rows with an empty `attached` are candidates, and then one at a time: ```bash -ping -c 3 -ssh -i ubuntu@ hostname +oci network public-ip delete --public-ip-id --force ``` -And from inside the guest — note that IMDS is **IMDSv2, so it needs a token**; an untokened request correctly returns 401: +Use the limits API rather than a count to judge the headroom, because the two disagree and only one of them is what the service enforces: ```bash -TOK=$(curl -s -X PUT http://169.254.169.254/latest/api/token \ - -H 'X-aws-ec2-metadata-token-ttl-seconds: 120') -curl -s -H "X-aws-ec2-metadata-token: $TOK" \ - http://169.254.169.254/latest/meta-data/instance-id -traceroute -n 8.8.8.8 +oci limits resource-availability get --service-name vcn \ + --limit-name reserved-public-ip-count --compartment-id "$TENANCY_OCID" ``` -A healthy topology is three hops before OCI's network: the OVN router port, the transit gateway, then upstream. - -On a cluster, prove an address survives a move. `scripts/terraform/oci-spx/eip-move-test.sh` does the whole sequence — it asserts that an auto-assigned address is returned to OCI on stop and a different one comes back, then associates an Elastic IP, forces the guest to start on another node, and checks OCI's own record of which VNIC carries the private half: - -```bash -INSTANCE=i-... ./scripts/terraform/oci-spx/eip-move-test.sh -``` - -### What a correct node looks like - -Worth knowing so the asymmetry does not read as a fault: - -```bash -sudo ovn-nbctl lr-nat-list # dnat_and_snat holds the PRIVATE address -aws ec2 describe-instances ... # reports the PUBLIC address -ip route show | grep spx-nat-host # route to the PRIVATE address -``` - -**These disagreeing is the design.** The public address is 1:1-NATed by OCI upstream and never touches the wire, so every datapath object holds the private half while every AWS-facing record holds the public half. If OVN showed the public address, the rule would be matching something that never arrives. - ---- - ## Troubleshooting -### Addresses and quotas +The deploy stops at the first failure and names the log it wrote, all under `.validate-/`. Add `--keep-on-fail` to leave a failed deployment up so you can log in and look. **It keeps billing** until you run `--destroy-only`. -**Spinifex enforces no limit of its own.** It attempts the allocation and reports what OCI says, so the ceiling you hit is always your tenancy's, never a number baked into the software. A quota is raised with Oracle, not reconfigured here, and there is nothing to restart afterwards. +[Troubleshooting](../oci-architecture/README.md#troubleshooting) covers the symptoms worth knowing in advance, several of which point at the wrong layer on first reading: -**`InsufficientAddressCapacity` on `allocate-address` is what exhaustion looks like.** It is the AWS error code for "out of addresses" and Spinifex returns it for either quota, mapped from OCI's own refusal. On a cluster the regional one is the likelier of the two. +- [If a deploy stage fails](../oci-architecture/README.md#if-a-deploy-stage-fails), and which log holds the answer +- [A guest's public address is unreachable](../oci-architecture/README.md#a-guests-public-address-is-unreachable) +- [A node that was fine and then was not](../oci-architecture/README.md#a-node-that-was-fine-and-then-was-not), where one command answers all of it +- [Guests cannot reach instance metadata](../oci-architecture/README.md#guests-cannot-reach-instance-metadata), because OCI and AWS guests want the same address +- [Addresses and quotas](../oci-architecture/README.md#addresses-and-quotas), including why a detached address still bills -**A detached reserved public IP still bills.** `disassociate-address` returns the address to `AVAILABLE` without deleting it, exactly as an unassociated AWS Elastic IP behaves, and it keeps consuming your regional quota as well as your bill. `release-address` is what frees both. - -**A stopped instance costs nothing for its auto-assigned address.** Stopping an instance returns its auto-assigned address to the pool and deletes the reserved public IP object behind it, as AWS does; the start that follows creates a new one. An **Elastic IP** is yours and survives the stop untouched — that is the whole distinction between the two, and on OCI it is also the difference between a stopped fleet that bills for addresses and one that does not. - -### Datapath - -**Instance launches but the public address is unreachable.** In order: - -1. `sudo ovn-nbctl lr-nat-list ` — is there a `dnat_and_snat` row, and does it hold the *private* address? -2. `ip route get ` — does it route via the transit veth? -3. `sudo iptables -S FORWARD | grep spinifex-eip-ingress` — both directions present? -4. `oci network private-ip list --vnic-id ` — is the private address actually registered with OCI, **and on this node's VNIC**? If not, nothing else matters. - -**Egress works from one address and not another on the same NIC.** That is [source-IP enforcement](#what-oci-changes), and it means the address is not a registered private-IP object on the VNIC. It is never a routing problem on the host. - -**An address went dark after a guest moved node.** The affinity pass should have claimed it within 15 seconds. Check the new node's daemon journal for `ocinet affinity`, then confirm with step 4 above which VNIC OCI thinks holds the private half. - -### A node that was fine and then was not - -Terraform's cloud-init does the host jobs on each node — the iSCSI volume, `br-wan` and its source routing, the firewall. When one of them did not take, the symptom arrives much later and rarely looks like a networking or storage problem. This one command answers all of it: - -```bash -ssh -i ~/.ssh/oci-spx ubuntu@ ' - cloud-init status # done - sudo iscsiadm -m session # a session to 169.254.2.2:3260 - findmnt /var/lib/spinifex # mounted by UUID, with _netdev - ip -br addr show br-wan # UP, second VNIC address as a /32 - ip -br addr show enp1s0 # the bridge MEMBER holds NO address - ip route show default # still on the PRIMARY interface - ls -l /dev/kvm # present -' -``` - -Three answers are worth knowing in advance, because each looks wrong and is not: - -- **`br-wan` holds a `/32` and the default route is on the other interface.** That is how two VNICs share one subnet without the second stealing the first one's traffic, and it is what satisfies OCI's per-VNIC source check. `br-wan`'s address appears in `ip rule` instead of in the default route. -- **`br-wan`'s address is not one you chose.** It is the second VNIC's own private IP, assigned by OCI, and not predictable before the apply. -- **`enp1s0` carrying an address is the one real fault here.** The kernel derives an on-link route from it that beats the primary VNIC's, so every packet to another node leaves the wrong VNIC and OCI drops it. The node still forms a cluster and still reports `Ready` — formation uses outbound connections — and it surfaces later as `predastore … the stripe is short one holder` on the first AMI import. `sudo /usr/local/sbin/spinifex-setup-wan-bridge` repairs it in place. - -### Host - -**`RunInstances` returns `ServerInternal`.** Check the daemon journal for the real error — `journalctl -u spinifex-daemon --since -10m`. An OCI allocation failure surfaces this way. - -**The stack ends up on the boot disk and the node fills.** The data volume was mounted without `_netdev` and lost the race with `iscsid`. `findmnt /var/lib/spinifex` is the check; `ls` cannot tell the difference. - -### Guests cannot reach instance metadata - -**Guests boot but cloud-init hangs on metadata**, or the host stops answering its own. OCI uses `169.254.169.254` for its instance metadata, and so does every AWS-compatible guest — the host and the guests want the same address. - -Spinifex resolves this by moving the *host* side of the per-guest metadata link to a different link-local pair, so guests keep asking `169.254.169.254` exactly as they do on AWS. [Step 5](#step-5-configure-spinifex-for-oci-start-and-verify) sets `imds_host_meta_ip` and `imds_host_dns_ip` for you. **Set both or neither** — a half-configured pair is ignored and the node behaves as if the remap were off, which is what this symptom looks like. - -Check it after your first guest launches: - -```bash -ip route get 169.254.169.254 # your real NIC, not lo -curl -sH 'Authorization: Bearer Oracle' -o /dev/null -w '%{http_code}\n' \ - http://169.254.169.254/opc/v2/instance/ # 200 -ip -br addr show | grep ime- # holds 169.254.42.x, not .169.x -``` - -`ip route get 169.254.169.254` returning `dev lo` is the signature of a missing remap. The same signature can appear after a guest terminates, from a leftover `ime-` endpoint still holding the address; with the remap configured it is harmless, and removing the stale OVS port clears it. - ---- - -## Limits in this version - -- **Operator-provisioned API key**, not instance principal. The key is on each node's disk and its rotation is your responsibility. -- **One VNIC per pool.** A pool cannot grow past the per-VNIC secondary private IP limit of 64. Three nodes give you three pools' worth; a single node is capped at 64 addresses. -- **IPv4 only.** IPv6 on OCI is materially simpler — no pools, prefixes assign directly to VCNs — but is not implemented. -- **No BYOIP.** The integration accepts a public IP pool OCID in config so BYOIP becomes a config change rather than a code change, but the RIR validation and Oracle's own validation window both precede any use of it. -- **OCI Block Volumes are not an EBS provider.** They back `/var/lib/spinifex` and therefore viperblock, which captures most of the performance benefit, but there is no native OCI block provider. -- **A recovered guest is briefly unreachable on its public address.** The address is never renumbered, but the node it is delivered to is corrected by a background pass every fifteen seconds rather than by the recovery itself. Private VPC addresses are unaffected. [Support status](#support-status) has the detail. -- **Terraform builds infrastructure, not Spinifex.** Formation is still the standard install path, by design: it is the same path prod and bare metal take, and diverging it for one cloud would mean two formation paths to keep correct. - -### What is no longer a limit - -Recorded because earlier versions of this guide said otherwise: - -- **Multi-node works.** The `--nodes=1` cap on routed mode is gone, three-node formation and guest-to-guest traffic are proven on OCI, and the routed-NAT datapath is guarded nightly on three nodes — on our own hardware, not on OCI. See [Support status](#support-status). -- **Public addresses are not pinned to one node.** Each node allocates on its own VNIC, and an affinity pass reassigns an address's private half to whichever node the guest is on — one OCI call, keeping the OCID, so the customer's public address never changes. No node needs another node's VNIC OCID, and `oci_vnic_iface` is correct on every node. -- **Addresses are released when an instance stops.** An auto-assigned address goes back to the pool on stop and the reserved public IP object is deleted, so a stopped fleet stops costing you addresses. +Installing by hand instead of with Terraform is [Deploying without Terraform](../oci-architecture/README.md#deploying-without-terraform). diff --git a/docs/oci-integration/oci-architecture/README.md b/docs/oci-integration/oci-architecture/README.md new file mode 100644 index 000000000..a5955a4e1 --- /dev/null +++ b/docs/oci-integration/oci-architecture/README.md @@ -0,0 +1,483 @@ +--- +title: "OCI Architecture" +seoTitle: "Spinifex on OCI: Architecture and Operations — Spinifex Docs" +description: "How Spinifex is wired on OCI: both VNICs, the iSCSI data volume and the public-address allocator, with the IAM policy, the quotas and the troubleshooting." +category: "Cloud Install" +sections: + - overview + - troubleshooting +tags: + - install + - oci + - oracle cloud + - terraform + - architecture + - troubleshooting +resources: + - title: "Spinifex on Oracle Cloud" + url: "/docs/oci-integration" + - title: "Host Firewall" + url: "/docs/host-firewall" + - title: "VPC Networking" + url: "/docs/vpc-networking" + - title: "Multi-Node Install" + url: "/docs/install-multi-node" +--- + +# Spinifex on OCI: Architecture and Operations + +> The reference half of the OCI integration. [Spinifex on Oracle Cloud](/docs/oci-integration) is the step-by-step deployment; everything here is what sits underneath it, plus the troubleshooting. + +## Table of Contents + +- [Why run Spinifex on OCI](#why-run-spinifex-on-oci) +- [Sizing](#sizing) +- [How it fits together](#how-it-fits-together) +- [Credentials: an API key, or an instance principal](#credentials-an-api-key-or-an-instance-principal) +- [The IAM policy](#the-iam-policy) +- [Quotas](#quotas) +- [Firewalls, in all three layers](#firewalls-in-all-three-layers) +- [What Terraform builds, per node](#what-terraform-builds-per-node) +- [Every Terraform variable](#every-terraform-variable) +- [The `oci` CLI](#the-oci-cli) +- [Deploying without Terraform](#deploying-without-terraform) +- [Troubleshooting](#troubleshooting) + +--- + +## Overview + +## Why run Spinifex on OCI + +**Lower cost for the same shape of workload.** OCI prices compute and block storage well below the large US clouds for equivalent OCPU and IOPS, and Spinifex turns one large instance into a whole EC2/EBS/S3 surface. A tenant's twenty small instances become twenty QEMU guests on hardware you are billed for once, instead of twenty billable cloud instances. + +**Egress stops being the line item that decides the architecture.** Oracle publishes a large monthly outbound-transfer allowance per tenancy, then charges per GB beyond it at roughly an order of magnitude below the majors. Check the current pricing page rather than a number in a document, but that gap is the reason this integration exists. Traffic _between_ guests never leaves the host, or on a cluster never leaves the VCN: it is Geneve over the private plane, which is not billed as internet egress at all. + +**The workload stops being AWS-shaped and becomes yours.** Your tenants code against Spinifex's API, so one set of Terraform, SDK calls and AMIs runs on OCI today and on bare metal in your own rack whenever you decide to move it. Leaving AWS becomes a deployment decision rather than a rewrite, and the second move costs nothing extra. + +**You keep the parts of OCI worth keeping.** Bare-metal shapes, fault domains, block volumes with a chosen performance tier, and real public addresses out of OCI's own pool. Spinifex registers each guest's address with OCI rather than hiding the cloud underneath it, so the guest is genuinely reachable on the internet instead of sitting behind a shared NAT. + +## Sizing + +**Bare metal is the recommendation.** `BM.Standard.E2.64` or similar gives you the hardware directly, with no nested virtualisation, full NIC performance, and nothing between your guests and the wire. Where bare metal is out of scope, a single `VM.Standard.E6.Flex` suits testing and development, or three of them production. + +| | Minimum | Recommended | +| --------------- | --------------------- | ----------------------------------------------------------------- | +| **Shape** | `VM.Standard.E6.Flex` | Bare metal, e.g. `BM.Standard.E2.64` | +| **OCPU** | 8 (16 vCPU) | 32+ | +| **RAM** | 32 GB | 128 GB+ | +| **Data volume** | 256 GiB block volume | 1 TB+ NVMe-backed | +| **VNICs** | 2 | 2 | +| **Nodes** | 1 | 3, see [Cluster sizing](/docs/install-multi-node#cluster-sizing) | + +## How it fits together + +Everything in [Single-Node Install](/docs/install) and [Multi-Node Install](/docs/install-multi-node) still applies: formation, storage and OVN behave exactly as they do on hardware you own. The layer underneath is what changes. An OCI VCN is not an Ethernet segment, so the external datapath is wired differently, and public addresses come from OCI's API rather than from a range you write in a config file. + +### Single node: the whole AWS surface inside one OCI instance + +One instance runs the control plane and every tenant guest. Customers reach the AWS APIs on the node's own address, while their instances reach the internet through addresses registered on the node's second VNIC. + +

+ Single node on OCI: the instance inside the VCN public subnet, both VNICs, br-wan, the routed-NAT transit veth, the control plane, tenant VPCs and the iSCSI data volume +

+ +Two things in that picture are the whole integration. The guest's private address (`10.0.1.4`) never leaves the host, because OVN and the host route both hold it. The address OCI delivers to is a **secondary private IP registered on VNIC 1**, appearing on `br-wan`, and the customer's public address (`150.230.13.131`) is a reserved public IP that OCI 1:1-NATs onto it upstream. `describe-instances` reports the public one while every datapath object holds the private one, which is why the two never appear together on the host. + +The third is storage. Every guest disk, every S3 object and the JetStream state all live under `/var/lib/spinifex`, which is an **OCI block volume attached over iSCSI**, not the boot disk. Size it for the guests you intend to run. A boot volume that quietly ends up carrying the stack is the most common way an install on OCI fails later rather than immediately. + +### Three nodes: the same surface, distributed + +Each node registers the addresses for **its own** guests on **its own** second VNIC, and the allocator runs per node, so nothing has to know another node's OCIDs. When a guest moves, whether through a stop/start that lands elsewhere or a host failure, the node it lands on claims the address's private half from the old VNIC with a single OCI call. The OCID and the public half are untouched, so the customer's address never changes. + +

+ Three nodes on OCI: three instances inside the VCN public subnet, one per fault domain, each with its own VNICs, addresses and iSCSI volume, joined east-west by Geneve, NATS, predastore and the OVN raft +

+ +The overlay, the object shards and the OVN databases all cross **VNIC 0**, inside the VCN. Size that plane rather than the external one: guest-to-guest traffic between nodes is Geneve over the VCN, and it is the link every distributed layer shares. + +> [!NOTE] +> **The Spinifex region is your own naming and has nothing to do with the OCI region.** `ap-southeast-2` in `spinifex.toml` beside `ap-sydney-1` in OCI is correct and expected. Do not read one as evidence about the other. + +## Credentials: an API key, or an instance principal + +The allocator needs OCI credentials at runtime. **A node with none forms, passes every health check, and then refuses every launch that wants a public address** with `InsufficientAddressCapacity`, naming no cause outside its own journal. + +### An API key, the documented path + +An API key needs nothing from a tenancy admin, which also makes it the only option when the compartment belongs to someone else's tenancy. The cost is key material on disk, with a rotation obligation, on every node: + +```bash +# On your workstation, not the node. +openssl genrsa -out ~/.oci/oci_api_key.pem 2048 +chmod 600 ~/.oci/oci_api_key.pem +openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem +openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem \ + | openssl md5 -c # this is the fingerprint +``` + +Upload the public key to the user under **Identity → Users → API Keys**, and record the user OCID, the fingerprint and the tenancy OCID. + +Each node then needs **two** files, and a node holding only the key is the silent failure described above. + +| Path | Mode | Contents | +| ----------------------------------- | -------------------- | ------------------------------------------------------------------------ | +| `/etc/spinifex/oci/oci_api_key.pem` | `0640 root:spinifex` | The private key | +| `/etc/spinifex/oci/config` | `0640 root:spinifex` | An ordinary OCI SDK config, profile `[spinifex]`, naming the key by path | + +The profile name must be `spinifex` to match `oci_config_profile` in the pool: + +```ini +[spinifex] +user=ocid1.user.oc1..aaaa... +fingerprint=12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef +tenancy=ocid1.tenancy.oc1..aaaa... +region=ap-sydney-1 +key_file=/etc/spinifex/oci/oci_api_key.pem +``` + +**`spx-oci-config.sh` writes both files on every node, and the deploy calls it for you.** It runs after formation and before the pool is configured, which is the only window where a node has `/etc/spinifex` but has not started the allocator, and it reads the credential from your `[spinifex]` profile, a dedicated key, a set of `OCI_SPX_*` environment variables, or failing all three the credential Terraform itself used — resolved through the same `scripts/oci_env.py` as the apply, so the two cannot disagree. + +**The key reaches the nodes over SSH and goes nowhere else.** It is never rendered into user-data or Terraform state, where it would be readable from instance metadata for the life of the instance, and it is carried in the remote shell's stdin rather than its arguments, where `ps` would expose it to every other tenant on the host. `--credential-hook PATH` still takes any executable called as `hook ...`, so a tenancy that keeps credentials in a vault can substitute its own. + +### An instance principal: no key material, but it needs a tenancy admin + +The instance certificate is served at `/opc/v2/identity/cert.pem` and the Go SDK authenticates as the instance with no key on disk. It must also be _authorised_, by a dynamic group and a policy, and **both are tenancy-root resources**: `oci_identity_dynamic_group` is created with `compartment_id` set to the tenancy OCID. A compartment-scoped user cannot create them, and the attempt fails with `404-NotAuthorizedOrNotFound` on `CreateDynamicGroup`, which reads like a misconfiguration and is not one. + +```bash +cd scripts/terraform/oci-spx +./setup-identity.sh --dry-run # always first +./setup-identity.sh # needs a tenancy-admin OCI profile +``` + +Then set `instance_principal = "adopt"` in your tfvars and pass `--instance-principal` to the deploy instead of `--credential-hook`. The dynamic group matches on `instance.compartment.id`, so it covers every node you ever build in that compartment and nothing needs updating when nodes are replaced. + +## The IAM policy + +Spinifex calls exactly ten operations, all of them in `spinifex/cloud/oci/client.go`. Grant no more than these: + +| Operation | Why | +| ------------------------------------------ | -------------------------------------------------------------------------------- | +| `CreatePrivateIp` | Register the secondary private IP the datapath carries | +| `DeletePrivateIp` | Release it | +| `GetPrivateIp` | Poll for `AVAILABLE` after an asynchronous assign | +| `ListPrivateIps` | The startup reconcile, and the affinity pass that moves an address between nodes | +| `UpdatePrivateIp` | Reassign a private IP to this node's VNIC when a guest moves here | +| `CreatePublicIp` | Create the RESERVED public IP | +| `DeletePublicIp` | Release it | +| `GetPublicIp` / `GetPublicIpByPrivateIpId` | Poll lifecycle state, and reconcile a private IP back to its public half | +| `UpdatePublicIp` | Attach and detach the public IP from a private IP | + +The matching policy, scoped to the one compartment Spinifex allocates in: + +```text +Allow group SpinifexOperators to use vnics in compartment +Allow group SpinifexOperators to manage private-ips in compartment +Allow group SpinifexOperators to manage public-ips in compartment +Allow group SpinifexOperators to use subnets in compartment +``` + +`instance-principal.tf` grants the dynamic group these same four statements, so an instance principal can allocate a public address exactly as an IAM user can. The two credential routes differ in who is authorised, never in what. + +> [!IMPORTANT] +> **Allocating one address needs permissions on three resource types, and a 404 names none of them.** `CreatePrivateIp` is checked against `PRIVATE_IP_CREATE`, `PRIVATE_IP_ASSIGN`, `VNIC_ASSIGN` and `SUBNET_ATTACH`, and `DeletePrivateIp` against `SUBNET_DETACH`. `VNIC_ASSIGN` lives in the vnics `use` verb, so `read vnics` is not enough; `SUBNET_ATTACH` and `SUBNET_DETACH` live in the subnets `use` verb, so a policy naming only vnics and IPs authorises nothing. Either omission fails every allocation with `NotAuthorizedOrNotFound` on a node that looks entirely healthy, and OCI uses that one error for "you may not" and "it is not there" alike, so it reads as a wrong compartment OCID rather than a missing verb. + +To tell the two apart, make one call per permission class and see which is the first to fail. `GetVnic` tests `VNIC_READ`, `ListPrivateIps` tests `PRIVATE_IP_READ`, and `GetSubnet` tests `SUBNET_READ`. If the first two succeed and the third does not, the credential is authentic and in the right compartment, and the policy is missing its subnet statement. + +**Scope it to a compartment, not the tenancy.** `manage public-ips` at tenancy level lets a compromised node consume the whole regional reserved-public-IP quota. + +**Do not grant `manage vnics` or `manage instances`.** Spinifex never creates, attaches or deletes a VNIC, and never touches an instance. It only adds addresses to a VNIC that already exists, which `use` permits. `manage` also permits VNIC lifecycle, which is strictly more than the integration can use. + +## Quotas + +Two limits bound how many public addresses a deployment can hand out, and they do not scale the same way: + +| Quota | Default | Scope | Notes | +| ---------------------------------- | ------- | ------------------------- | ---------------------------------------------------------------------------------------------- | +| **Reserved public IPs** | 50 | Per region, whole tenancy | Shared by every node, so it does **not** grow with node count. This is the wall you hit first. | +| **Secondary private IPs per VNIC** | 64 | Per VNIC, so per node | Not raisable. Three nodes gives you 192, so this is the limit that does scale. | + +**On a new tenancy, check the compute limits too.** A fresh account commonly carries a service limit of zero for bare-metal shapes and a low one for flex VMs, which can leave `BM.Standard.E2.64` unavailable until you request it. That refusal arrives at apply time, not at plan time. + +A raise is a support request, not a setting: Console → Governance & Administration → Limits, Quotas and Usage → "Request a service limit increase". Cite the exact limit name from `oci limits definition list`, not a name from documentation. + +```bash +oci limits definition list --service-name vcn --compartment-id +oci limits value list --service-name vcn --compartment-id +oci limits resource-availability get --service-name vcn \ + --limit-name --compartment-id +``` + +**These calls need a grant the node does not have, and must not be given.** Limits and usage are tenancy-level, which cannot be compartment-scoped the way the policy above insists the node's is. Create a **second, read-only principal** for an operator or a reporting job, and keep it off every node: + +```text +Allow group SpinifexReporting to read limits in tenancy +Allow group SpinifexReporting to read usage-reports in tenancy +``` + +The second verb is what Cost Analysis and `oci usage-api usage-summary request-summarized-usages` read. Adding either to `SpinifexOperators` would hand every node tenancy-wide read, which is exactly what the node policy refuses. + +## Firewalls, in all three layers + +Three independent things filter traffic to an OCI deployment, and they are easy to mistake for one. Nearly every "my port is closed" report on OCI turns out to be the wrong layer being adjusted. + +| Layer | What it guards | Who configures it | +| --- | --- | --- | +| **OCI security list** | The whole public subnet, including the addresses guests are reached on | `node_client_cidr_allow_list` | +| **The host firewall** | The node's own listeners: console, S3 gate, AWS gateway, SSH, the cluster plane | `node_service_ports`, then the Spinifex nft policy | +| **OVN security groups** | Each guest, per AWS security-group rules | Your tenants, through the EC2 API | + +### The OCI security list is deliberately open, and should stay that way + +```hcl +# network.tf, security_list.public +ingress_security_rules { protocol = "all", source = var.vcn_cidr } # intra-VCN +dynamic "ingress_security_rules" { ... source = each allow-list CIDR } # protocol = "all" +``` + +A guest's public address is a **secondary private IP on VNIC 1, in the public subnet**, so inbound traffic to a guest crosses this security list. Narrowing `node_client_cidr_allow_list` to your own office `/32` therefore cuts internet ingress to **every guest**, not just to the node. A tenant who then opens 443 on their own security group finds it does nothing, with no error anywhere naming the cause. + +That is also why the rule is `protocol = "all"` rather than the three service ports. Enumerating ports here would mean a Terraform change for every customer port. + +**So leave it at `0.0.0.0/0` for any deployment that serves guests**, and do the restricting in the host firewall, which is the layer that can tell the node's own listeners apart from a guest's. Narrow the allow list only for a private lab with no public guest services. + +The separate intra-VCN rule exists so that narrowing the allow list can never cut Geneve, OVN, NATS or predastore between nodes. + +### The host firewall is what you harden + +Terraform's cloud-init runs `open-service-ports.sh`, which opens all protocols from the peer CIDR plus `node_service_ports` (`3000 8443 9999`) to any source, in the Ubuntu image's **iptables**. SSH is already open to the world from the image's own INPUT rule, and nothing in that script narrows it. + +The Spinifex nft policy is installed but **not armed** on this path, because the installer arms it only when asked. Arming it is what gives you the proper policy: public plane, peer-scoped cluster plane, and an SSH scope you own. + +```bash +# On each node. Arms the policy the ISO installer arms by default. +sudo env SETUP_STAGES=firewall /usr/local/share/spinifex/setup.sh --firewall on +``` + +Then narrow SSH in the one file `setup.sh` creates and never overwrites: + +```bash +# /etc/spinifex/firewall/custom.nft is yours, and upgrades leave it alone. +define trusted_ssh_peers = { 203.0.113.10/32 } +``` + +```bash +sudo nft -c -f /etc/spinifex/firewall/spinifex.nft # check before applying +sudo /usr/local/lib/spinifex/spinifex-firewall-apply +``` + +What the armed policy allows, and why each port is where it is, is in [Host Firewall](/docs/host-firewall), along with [Narrowing SSH access](/docs/host-firewall#narrowing-ssh-access) and the rule that **forming or expanding a cluster starts by turning the policy off**, because nodes mid-formation are not yet each other's peers. + +Two OCI-specific notes on top of that guide: + +- **Northstar's DNS on 53 is in the armed policy's public plane, but `node_service_ports` does not include it.** Until the nft policy is armed, a node serving a public zone does not answer on 53 from the internet. +- **Never flush iptables on an OCI node.** The image's `InstanceServices` chain in OUTPUT is what permits iSCSI to `169.254.2.0/24:3260` and the metadata service, so clearing it takes the data volume and IMDS with it. + +## What Terraform builds, per node + +| Resource | Detail | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `oci_core_instance` | One per `node_count`, round-robined across **fault domains** so three nodes land on three sets of racks rather than wherever placement puts them | +| Primary VNIC | Public IP, `hostname_label`, the host plane: SSH, the advertise address, the Geneve endpoint | +| `oci_core_vnic_attachment` | A **second VNIC** in the same subnet. Every Spinifex external address becomes a secondary private IP here at runtime | +| `oci_core_volume` | A block volume per node, `data_volume_size_in_gbs` at `data_volume_vpus_per_gb` | +| `oci_core_volume_attachment` | **`attachment_type = "iscsi"`**, with the Oracle Cloud Agent's Block Volume Management plugin enabled so the node logs the iSCSI session in itself | +| cloud-init | Partitions, formats, mounts and `fstab`s the volume; builds `br-wan` over the second VNIC; opens the service ports | + +The resource-by-resource architecture is in [`scripts/terraform/oci-spx`](https://github.com/mulgadc/spinifex/tree/dev/scripts/terraform/oci-spx). + +**The data volume is iSCSI, and that is the detail that bites.** OCI presents the volume as an iSCSI target reachable at `169.254.2.2:3260`, so attaching it in the API does not put a block device on the host. `is_agent_auto_iscsi_login_enabled` makes the Oracle Cloud Agent do the login, and it does that _asynchronously_, so the device is not there when cloud-init first runs. The mount script waits up to ten minutes for it, formats it **only if `blkid` reports no filesystem** so that a re-run cannot erase a populated volume, and writes an fstab entry by UUID: + +```text +UUID= /var/lib/spinifex ext4 defaults,_netdev,nofail 0 2 +``` + +`_netdev` orders the mount after the network, and therefore after `iscsid` has a session. `nofail` keeps a missing volume from wedging the boot. Mounting `/var/lib/spinifex` _itself_ rather than somewhere else and symlinking is deliberate: viperblock, predastore and JetStream all land on the volume with no configuration pointing anywhere unusual. + +## Every Terraform variable + +All of these have defaults that build a working single node, except the first: + +| Variable | Default | What it decides | +| ----------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `compartment_ocid` | none | **Required.** An OCID, not a name: this deploys into a compartment that already exists, because creating one needs tenancy-root rights the API user must not have | +| `deployment_name` | `spinifex` | Prefixes every resource and becomes the VCN `dns_label`, so 1–15 lowercase alphanumerics starting with a letter | +| `node_count` | `1` | Nodes, 1–25. `1` for a single node, `3` for a cluster. Each gets its own volume, its own second VNIC and its own fault domain | +| `compute_shape` | `VM.Standard.E6.Flex` | **`BM.*` for bare metal, `VM.*.Flex` for a VM.** A fixed bare-metal shape carries its own size, so `shape_config` is emitted only when the name contains `Flex`. Set a BM shape and the two sizing variables below are ignored rather than rejected | +| `compute_ocpus` | `8` | OCPUs on a flex shape. Validated at ≥ 8 (16 vCPU), the minimum recommended for a node | +| `compute_memory_in_gbs` | `32` | GiB on a flex shape. Validated at ≥ 32 | +| `data_volume_size_in_gbs` | `256` | Size of each node's data volume. Guest disks, S3 objects and JetStream all live here, so size it for the guests rather than for the control plane | +| `data_volume_vpus_per_gb` | `120` | Performance tier, 0–120 VPUs/GB. 120 is Ultra High Performance; 10 is Balanced. Higher is more IOPS and more cost | +| `data_mountpoint` | `/var/lib/spinifex` | Where cloud-init mounts it. Change only if you know why | +| `vcn_cidr` | `10.200.0.0/22` | VCN address space. A `/22` leaves room for the secondary private IPs Spinifex registers per node | +| `public_subnet_cidr` | `10.200.0.0/23` | The subnet every node sits in, **on both VNICs**. Nodes serve the UI, the S3 gate and the AWS gateway directly, so they cannot live in a private subnet | +| `node_client_cidr_allow_list` | `["0.0.0.0/0"]` | OCI security-list ingress, **all protocols**, for the whole public subnet. Guest public addresses cross it too, so read [Firewalls](#firewalls-in-all-three-layers) before narrowing it | +| `node_service_ports` | `[3000, 8443, 9999]` | Console, predastore gate, AWS gateway, opened in the host's iptables by cloud-init. SSH comes from the image's own rule | +| `instance_principal` | unset | `"adopt"` to authenticate the allocator as the instance rather than with a key file. Needs the tenancy dynamic group and policy to exist | +| `ubuntu_version` | `26.04` | Canonical platform image version. The newest image for the shape and region is resolved at plan time rather than pinned to a regional OCID | +| `wan_bridge_name` | `br-wan` | The Linux bridge built over the second VNIC | +| `wan_bridge_mtu` | `9000` | The OCI VCN carries 9000 | + +**Six more exist and are not yours to set**: `tenancy_ocid`, `user_ocid`, `fingerprint`, `private_key`, `private_key_path` and `region`. `scripts/oci_env.py` fills them as `TF_VAR_*` from the profile in `~/.oci/config` on every `terraform` call the driver makes, so **the region you deploy into is the profile's region** and the credential never reaches a `.tfvars` file. Setting them by hand works, and is how a run with no config file at all would have to work, but then two sources disagree about which tenancy this is. + +The profile is resolved as `--oci-profile`, then `$OCI_CLI_PROFILE`, then the reference tenancy, then `DEFAULT`. A name passed explicitly and absent from the config is an error that lists the profiles present; only an unasked-for name falls through. CI takes a different route entirely, reading `OCI_TENANCY_OCID`, `OCI_USER_OCID`, `OCI_FINGERPRINT`, `OCI_PRIVATE_KEY` and `OCI_REGION` from the environment so a runner writes no key to disk. A partial set there is an error rather than a fallback, because half a credential means a secret failed to reach the job. + +## The `oci` CLI + +**The `oci` CLI is not on the Ubuntu image**, and `apt` has no `python3-oci-cli` package. Nothing in the deployment needs it; install it when you want to inspect allocations by hand: + +```bash +sudo apt-get update && sudo apt-get install -y python3-venv +python3 -m venv ~/.oci-cli-venv +~/.oci-cli-venv/bin/pip install --upgrade pip oci-cli +sudo ln -sf ~/.oci-cli-venv/bin/oci /usr/local/bin/oci +oci --version +``` + +**What the CLI is and is not for.** Spinifex's daemon uses the OCI **Go SDK** for every allocation, so the CLI is not on that path at all. You need it for bootstrap and for operational inspection. Do not build automation that shells out to it during an allocation: allocations run inside a request budget that a forked Python process will not respect. + +--- + +## Deploying without Terraform + +**Terraform automates every step of a normal install, and that is the point of it.** The `oci-spx` configuration builds the VCN, the subnets, the gateways, the block volumes and both VNICs per node, then renders the cloud-init that installs Spinifex and sets up OVN. The sequence below happens without anyone typing it, in the same order every time, on one node or three. + +If you do need to install by hand, whether for an existing OCI tenancy you cannot run Terraform against, an unsupported shape, or a stage you are debugging, the install itself is not OCI-specific. Follow the standard guides: + +- [Installing Spinifex](../../install/install/README.md) for a single node. +- [Multi-Node Installation](../../install/install-multi-node/README.md) for a cluster, which covers `spx admin init` on the leader and `spx admin join` on the rest. + +Four things about OCI are not in those guides, and each has its own section above: + +- **The external pool** is `source = "oci"`, which needs the API key or instance principal from [Credentials](#credentials-an-api-key-or-an-instance-principal) and the [IAM policy](#the-iam-policy). Omit it and you get the silent failure that section opens with: a healthy node that cannot hand out an address. +- **`br-wan` stays a Linux bridge** owned by netplan, linked to OVS `br-ext` by a veth pair. Pass `setup-ovn.sh --wan-bridge=br-wan` and it detects this itself. The NIC never becomes an OVS port, so the VNIC keeps its MAC identity. See [How it fits together](#how-it-fits-together). +- **The block volume must be mounted with `_netdev`**, because it arrives over iSCSI and the mount is otherwise attempted before a session exists. +- **IMDS needs the 169.254 remap** described under [Guests cannot reach instance metadata](#guests-cannot-reach-instance-metadata), since the guest's metadata address collides with OCI's own. + +--- + +## Troubleshooting + +### If a deploy stage fails + +The driver stops at the first failure, names the log, and leaves the rest alone. Logs are all under `.validate-/`: + +| Stage | Log | +| ----------------------------------------------- | ---------------------------------------- | +| Building the infrastructure | `apply.log` | +| Installing Spinifex | `install-.log` | +| Forming the cluster | `form.log` | +| Installing the credential, configuring the pool | `credential-hook.log`, `pool-.log` | +| Verifying public addressing | `allocator-.log` | +| The Terraform workbooks | `workbooks.log`, `workbooks.tsv` | + +The allocator log is the one worth knowing about, because public addressing is the part with the most moving pieces. If the allocator never comes up, the driver captures the daemon journal, the pool as configured, the bridge and OCI MAC addresses, and whether each credential file exists and is readable, never the credentials themselves, before anything is torn down. + +Add `--keep-on-fail` to leave a failed deployment running so you can log in and look. **It keeps billing** until you run `--destroy-only`. + +### Addresses and quotas + +**Spinifex enforces no limit of its own.** It attempts the allocation and reports what OCI says, so the ceiling you hit is always your tenancy's and never a number baked into the software. A quota is raised with Oracle, not reconfigured here, and there is nothing to restart afterwards. + +**`InsufficientAddressCapacity` on `allocate-address` is what exhaustion looks like.** It is the AWS error code for "out of addresses", and Spinifex returns it for either quota, mapped from OCI's own refusal. On a cluster the regional one is the likelier of the two. + +**A detached reserved public IP still bills.** `disassociate-address` returns the address to `AVAILABLE` without deleting it, exactly as an unassociated AWS Elastic IP behaves, and it keeps consuming your regional quota as well as your bill. `release-address` frees both. + +**A stopped instance costs nothing for its auto-assigned address.** Stopping an instance returns its auto-assigned address to the pool and deletes the reserved public IP object behind it, as AWS does, and the start that follows creates a new one. An **Elastic IP** is yours and survives the stop untouched. That is the whole distinction between the two, and on OCI it is also the difference between a stopped fleet that bills for addresses and one that does not. + +### A guest's public address is unreachable + +**Check where you are probing from first.** A node is a poor vantage point for a public address, for two independent reasons: the security list may not admit the node's own public address as a source, and a VCN may or may not reflect its public addresses back into itself. Either one fails the probe on a perfectly healthy cluster. Test from outside the VCN, which is where a customer is. + +Then, in order: + +1. `sudo ovn-nbctl lr-nat-list ` for a `dnat_and_snat` row, holding the _private_ address. +2. `ip route get ` to confirm it routes via the transit veth. +3. `sudo iptables -S FORWARD | grep spinifex-eip-ingress` for both directions. +4. `oci network private-ip list --vnic-id ` to confirm the private address is registered with OCI, **and on this node's VNIC**. If it is not, nothing else matters. + +**Egress works from one address and not another on the same NIC.** OCI enforces the source address per VNIC, so that means the address is not a registered private-IP object on it. It is never a routing problem on the host. + +**An address went dark after a guest moved node.** The affinity pass should have claimed it within 15 seconds. Check the new node's daemon journal for `ocinet affinity`, then use step 4 above to confirm which VNIC OCI thinks holds the private half. + +### A node that was fine and then was not + +Terraform's cloud-init does the host jobs on each node: the iSCSI volume, `br-wan` and its source routing, the firewall. When one of them did not take, the symptom arrives much later and rarely looks like a networking or storage problem. This one command answers all of it: + +```bash +ssh -i ~/.ssh/oci-spx ubuntu@ ' + cloud-init status # done + sudo iscsiadm -m session # a session to 169.254.2.2:3260 + findmnt /var/lib/spinifex # mounted by UUID, with _netdev + ip -br addr show br-wan # UP, second VNIC address as a /32 + ip -br addr show enp1s0 # the bridge MEMBER holds NO address + ip route show default # still on the PRIMARY interface + ls -l /dev/kvm # present +' +``` + +Three answers are worth knowing in advance, because each looks wrong and is not: + +- **`br-wan` holds a `/32` and the default route is on the other interface.** That is how two VNICs share one subnet without the second stealing the first one's traffic, and it is what satisfies OCI's per-VNIC source check. `br-wan`'s address appears in `ip rule` instead of in the default route. +- **`br-wan`'s address is not one you chose.** It is the second VNIC's own private IP, assigned by OCI, and not predictable before the apply. +- **`enp1s0` carrying an address is the one real fault here.** The kernel derives an on-link route from it that beats the primary VNIC's, so every packet to another node leaves the wrong VNIC and OCI drops it. The node still forms a cluster and still reports `Ready`, because formation uses outbound connections, and it surfaces later as `predastore … the stripe is short one holder` on the first AMI import. `sudo /usr/local/sbin/spinifex-setup-wan-bridge` repairs it in place. + +### The allocator + +**Confirm it came up**, which `spx get nodes` cannot tell you: + +```bash +sudo journalctl -u spinifex-vpcd --since -5m | grep -i ocinet +``` + +```text +"msg":"ocinet resolved the external VNIC from its interface","pool":"oci-public","iface":"br-wan", + "vnic_id":"ocid1.vnic.oc1.ap-sydney-1.abzxsljrjwlf...kimuq","private_ip":"10.200.1.31","subnet":"10.200.0.0/23" +"msg":"ocinet credential authorised to allocate","pool":"oci-public", + "vnic_id":"ocid1.vnic.oc1.ap-sydney-1.abzxsljrjwlf...kimuq","compartment":"ocid1.compartment.oc1..aaaa" +"msg":"OCI allocator ready","pool":"oci-public","collected":0,"stale_bindings":0,"skipped":1 +``` + +**`credential authorised to allocate` is the line that matters, and `resolved the external VNIC` is not.** The authorisation line is logged after the node has made one real read in each permission class an allocation needs, so it proves the credential is accepted, the compartment is right and every verb in the policy is held. The resolution line above it comes from the instance metadata service and needs no IAM policy at all, so a node with a policy missing a verb logs it and still refuses every allocation. + +The refusal has its own line, which names the verb: + +```text +"msg":"ocinet credential cannot allocate an external address","pool":"oci-public", + "error":"reading subnet ocid1.subnet... failed, which needs `use subnets` in compartment ocid1...; + AssignPrivateIP requires SUBNET_ATTACH from that same verb: ... NotAuthorizedOrNotFound" +``` + +On a cold cluster start you may instead see `OCI allocator reconcile failed … nats: no responders available for request` on some nodes. That is vpcd racing JetStream's KV at boot, where the startup reconcile is skipped and not retried. It is harmless on a new cluster where nothing has been allocated, and it is tracked; restart `spinifex-vpcd` on that node to run it. + +### Host + +**`RunInstances` returns `ServerInternal`.** Check the daemon journal for the real error with `journalctl -u spinifex-daemon --since -10m`. An OCI allocation failure surfaces this way. + +**The stack ends up on the boot disk and the node fills.** The data volume was mounted without `_netdev` and lost the race with `iscsid`. `findmnt /var/lib/spinifex` is the check, and `ls` cannot tell the difference. + +### Guests cannot reach instance metadata + +**Guests boot but cloud-init hangs on metadata**, or the host stops answering its own. OCI uses `169.254.169.254` for its instance metadata, and so does every AWS-compatible guest, so the host and the guests want the same address. + +Spinifex resolves this by moving the _host_ side of the per-guest metadata link to a different link-local pair, leaving guests to ask `169.254.169.254` exactly as they do on AWS. The deploy sets `imds_host_meta_ip` and `imds_host_dns_ip` for you. **Set both or neither**, because a half-configured pair is ignored and the node behaves as if the remap were off, which is what this symptom looks like. + +Check it after your first guest launches: + +```bash +ip route get 169.254.169.254 # your real NIC, not lo +curl -sH 'Authorization: Bearer Oracle' -o /dev/null -w '%{http_code}\n' \ + http://169.254.169.254/opc/v2/instance/ # 200 +ip -br addr show | grep ime- # holds 169.254.42.x, not .169.x +``` + +`ip route get 169.254.169.254` returning `dev lo` is the signature of a missing remap. The same signature can appear after a guest terminates, from a leftover `ime-` endpoint still holding the address; with the remap configured that is harmless, and removing the stale OVS port clears it. + +### An OVS problem, when `ovs-vsctl` says nothing is wrong + +`ovs-vsctl` exits 0 even when a bridge could not be instantiated. Read the error column and the log, never the exit status: + +```bash +sudo ovs-vsctl --columns=name,error list Interface +sudo journalctl -u ovs-vswitchd --since -10m +``` diff --git a/docs/terraform-workbooks/eks-quickstart/README.md b/docs/terraform-workbooks/eks-quickstart/README.md index dee0458d2..f562e5f04 100644 --- a/docs/terraform-workbooks/eks-quickstart/README.md +++ b/docs/terraform-workbooks/eks-quickstart/README.md @@ -66,7 +66,7 @@ Under the hood it keeps things minimal: a VPC with two public subnets, an IAM ro - The cluster's security groups are **auto-managed** — `vpc_config.security_group_ids` is ignored. To reach a NodePort, this workbook looks the worker SG up by its deterministic name (`eks-cluster--nodegroup-sg`) and adds a single ingress rule. - The worker AMI is always Spinifex's `eks-node` image; `ami_type` is recorded but does **not** select the image. -- `authentication_mode` must be `"API"` (the `API_AND_CONFIG_MAP` mode is rejected). +- `authentication_mode` can be `"API"` or `"API_AND_CONFIG_MAP"`, and bare `"CONFIG_MAP"` is rejected. Access is granted through access entries, as there is no `aws-auth` ConfigMap path. - The workers need outbound internet (here via the IGW) to pull the demo container image. **Prerequisites:** diff --git a/go.mod b/go.mod index 51c2dbea5..6ab424c85 100644 --- a/go.mod +++ b/go.mod @@ -4,33 +4,33 @@ go 1.27.0 require ( github.com/aws/aws-sdk-go v1.55.8 - github.com/aws/aws-sdk-go-v2 v1.47.0 + github.com/aws/aws-sdk-go-v2 v1.47.1 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20 - github.com/aws/aws-sdk-go-v2/config v1.33.5 - github.com/aws/aws-sdk-go-v2/credentials v1.20.5 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0 + github.com/aws/aws-sdk-go-v2/config v1.33.6 + github.com/aws/aws-sdk-go-v2/credentials v1.20.6 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.1 github.com/cenkalti/backoff/v4 v4.3.0 github.com/charmbracelet/bubbles v1.0.0 github.com/charmbracelet/bubbletea v1.3.10 github.com/charmbracelet/lipgloss v1.1.0 - github.com/containerd/containerd/v2 v2.4.0 + github.com/containerd/containerd/v2 v2.4.1 github.com/distribution/reference v0.6.0 github.com/go-chi/chi/v5 v5.3.2 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/insomniacslk/dhcp v0.0.0-20260719225207-c76316d4aa82 github.com/jackc/pgx/v5 v5.11.0 - github.com/klauspost/compress v1.20.0 + github.com/klauspost/compress v1.20.1 github.com/klauspost/cpuid/v2 v2.4.0 github.com/miekg/dns v1.1.73 github.com/minio/highwayhash v1.0.4 - github.com/mulgadc/bluebottle v1.21.1-0.20261001020941-036da4967e1c - github.com/mulgadc/northstar v1.21.0 - github.com/mulgadc/predastore v1.21.0 - github.com/mulgadc/viperblock v1.21.0 + github.com/mulgadc/bluebottle v1.22.0 + github.com/mulgadc/northstar v1.22.0 + github.com/mulgadc/predastore v1.22.0 + github.com/mulgadc/viperblock v1.22.0 github.com/nats-io/nats-server/v2 v2.15.0 github.com/nats-io/nats.go v1.54.0 github.com/opencontainers/runtime-spec v1.3.0 - github.com/oracle/oci-go-sdk/v65 v65.126.0 + github.com/oracle/oci-go-sdk/v65 v65.126.1 github.com/ovn-kubernetes/libovsdb v0.8.1 github.com/pelletier/go-toml/v2 v2.4.3 github.com/pterm/pterm v0.12.83 @@ -48,6 +48,7 @@ require ( golang.org/x/crypto v0.57.0 golang.org/x/sync v0.23.0 golang.org/x/sys v0.48.0 + golang.org/x/term v0.46.0 golang.org/x/time v0.16.0 golang.org/x/tools v0.50.0 gopkg.in/ini.v1 v1.67.3 @@ -61,18 +62,18 @@ require ( github.com/Microsoft/hcsshim v0.15.0-rc.4 // indirect github.com/antithesishq/antithesis-sdk-go v0.8.0-default-no-op // indirect github.com/atotto/clipboard v0.1.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.4 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.3 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.113.3 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.10.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.38.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.51.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.4 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.114.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.10.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.38.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.51.1 // indirect github.com/aws/smithy-go v1.28.2 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -177,7 +178,7 @@ require ( github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/tidwall/btree v1.8.1 // indirect + github.com/tidwall/btree v1.8.2 // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect @@ -197,7 +198,6 @@ require ( golang.org/x/mod v0.41.0 // indirect golang.org/x/net v0.59.0 // indirect golang.org/x/telemetry v0.0.0-20260908163034-4bcc4b2ee518 // indirect - golang.org/x/term v0.46.0 // indirect golang.org/x/text v0.42.0 // indirect golang.org/x/vuln v1.6.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260825221802-da73d73af1c5 // indirect diff --git a/go.sum b/go.sum index b5a688c67..691f6a762 100644 --- a/go.sum +++ b/go.sum @@ -30,40 +30,40 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= -github.com/aws/aws-sdk-go-v2 v1.47.0 h1:0jsHallhJCeaU0Ko48c/3FK1ctOQ7NpzggxriJOQ8MQ= -github.com/aws/aws-sdk-go-v2 v1.47.0/go.mod h1:bttEH6JqnUL8LepvDVfdrds/fZ5bCIxzpe3abyUrhDU= +github.com/aws/aws-sdk-go-v2 v1.47.1 h1:uOIZnp4PK3ZhKI0dNrJrhTEsLxbpXHTAJlwoS1pvAtw= +github.com/aws/aws-sdk-go-v2 v1.47.1/go.mod h1:bttEH6JqnUL8LepvDVfdrds/fZ5bCIxzpe3abyUrhDU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20 h1:GPRlPwz40I2B2VrBEASOA3Bi77NyeqejNLkifosX0rs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20/go.mod h1:g7PNzKcsOKWb4fkSRBA7BZVAS6Y8IcxzN+nRohhQ1Q8= -github.com/aws/aws-sdk-go-v2/config v1.33.5 h1:UA1dmokBFOLFoOyVBhO6HjM6edy0MIk5AZSkJVcksQw= -github.com/aws/aws-sdk-go-v2/config v1.33.5/go.mod h1:Dop8axzz0xx38GExIYWXdeyc8QQ7Cr+nPsxpD/LYy4U= -github.com/aws/aws-sdk-go-v2/credentials v1.20.5 h1:wklUVvHMc9xTQ3rcp49/ISpiMnhbCicJcA6n6S8m7J8= -github.com/aws/aws-sdk-go-v2/credentials v1.20.5/go.mod h1:fyEdrn6ccLFOkoK84j5bQyGTxp9zPt5l2XMhxf4DVZs= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0 h1:AM4hHjww+PSFtt6E+UrBrPlZkWsePCLEt9AjkfQX+yM= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0/go.mod h1:3x/yXezeQjpOvBb4jEMxrS8SXvpdvJ5abv6l5c1gWM8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3 h1:Hp/VgjP0BysR3OgLlR057Vz2LcbbVnoWeJ+3qWiS/fY= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3/go.mod h1:nwGV5qw7F1IZPgxCvA/ph8N2TAuz+BkRG/bXn808qMA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3 h1:MUaM4f+kj1ZIBPZfUS8cxP1GKXXZtHJjAthy93AN7SM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3/go.mod h1:6YmVmEVRI5ZZzRjCSsb9SryKH0hAlMRdgA7kG9aDvBU= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 h1:fuSCw4Z2qfRCztMPO3GXJNSiEp6Wee+WOLwrHHUMy9c= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3/go.mod h1:6SxcHheD1pPR5+kWm1wGvjlL/YqUsh267sAfEmN4K7A= +github.com/aws/aws-sdk-go-v2/config v1.33.6 h1:MBjkSTLczek/UgiK+EYPIoRTqE7gP8vtW3OFbFo7Nug= +github.com/aws/aws-sdk-go-v2/config v1.33.6/go.mod h1:grRAFzdAZJrwcbasJRg2MPvIrVjtlfXllHssN6+E1JE= +github.com/aws/aws-sdk-go-v2/credentials v1.20.6 h1:NpAFXCU7NzXNkdGK3zQTtsRJ+3v9tZQV0xcdRw8uBdw= +github.com/aws/aws-sdk-go-v2/credentials v1.20.6/go.mod h1:mcZCoiPnyMvP8VMNbygNX5lLqSlkYJIMPODylQMurOk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.1 h1:8gALAAmacnIXh+z6VkdDanv4/IkG5APdg4DZLDTmLog= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.1/go.mod h1:Z7IJhJU+poOdJjUR2wpyY21ossQ1XS/R3Lk9Msq5kM4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.4 h1:CLq4+8UHCI+ZZYl/EuJxXovaIVN2xeeT8JV+dsApQ5E= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.4/go.mod h1:Wv4q5sAM04xAMkoOedxLx2inVf6K5FdxYp+A61L+q/0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.4 h1:dD4MR81I7YkpEBRk6UP9rocC2QnT3qVuXwzlYTtfGEs= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.4/go.mod h1:EcXV1kAFd5XwSkDHlj94gnF3q5CkJyYiIJfH8N0VmrE= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.4 h1:7Wo47d/xn/7KttCSBd8EGYeZ7ULRFRkUHr6vkZPBzVQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.4/go.mod h1:tDB2IVC1xC3vX8o+6uRlzhTxP3g1b77CZXFX/oD2FnQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 h1:bAdDl/HkGCcGPoe25ToSHEw23VIxt6CT5fLcg111BKg= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19/go.mod h1:KaUzbLxv4CeSxh6ZCl9B4m7CuFenS8kUEaDs+f/DQr4= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.4 h1:7TXEkbDzy4BkYYTfTVjKcADTfkDnvHxDwcF1pJG1yF0= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.4/go.mod h1:GqWeeKfYfezihA2KfFL9l7ohEdZWe1tuFWh3GfyNSnE= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3 h1:bON1rJf67TSTDCKg816AAIE4xSTtoo9tl0XRkO72R+I= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3/go.mod h1:c5BBpjJcQXpfeq9iASyVKA3T6vX6B6LEXY4mL/gklDY= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.3 h1:L8vIOxylma91TcR96NFTEC07G3JDwSl+CvK2b+IODms= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.3/go.mod h1:fmPIZQzTExYuBNWFyi1P7IoDjvskgphXqK1yObMzusM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.113.3 h1:IDIchqG5C/o/JdprtYn1NirCi7iUx7XQ8+WwZ6odFX8= -github.com/aws/aws-sdk-go-v2/service/s3 v1.113.3/go.mod h1:iJ69H4lkK6a9zQ+L5i9pDERMok5Jvts0iZaMjWEi/78= -github.com/aws/aws-sdk-go-v2/service/signin v1.10.0 h1:ZD5qFpWcaOKdTuhBi431pIDkCgrMkMlMT6jlpSPoIRI= -github.com/aws/aws-sdk-go-v2/service/signin v1.10.0/go.mod h1:8Nuuf+tR346PjJ3MvZPh9pekbLiLQFWJhzMXfwy7alA= -github.com/aws/aws-sdk-go-v2/service/sso v1.38.0 h1:JGeeBcMlhg1xtOXYpeCaTQBZObtXMPQCUqBcmr65NRA= -github.com/aws/aws-sdk-go-v2/service/sso v1.38.0/go.mod h1:XwteswG9EOMRFm73UT0t+MbTwyLxMrEXkU6e+v92Lzo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0 h1:obhahQXDEdVEv8y5bTKXR30LVaxYe1kyYM0L7l2Iq+k= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0/go.mod h1:6twZZ/aXHNy1vXUO8koUbp++MYzMASkOgEBdkbJYmO0= -github.com/aws/aws-sdk-go-v2/service/sts v1.51.0 h1:Zpnqa6XtrNzXZnwbdCqHOXpXhMsa01ql/pcRQ1sb4hk= -github.com/aws/aws-sdk-go-v2/service/sts v1.51.0/go.mod h1:/8JRcdTt//hG0Q4BTmGbuOplT7ABe+5rdtqUHqXvYIM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.5 h1:/TYsZXdA8UTa+WCtCYSAJIr1vwl0+eho6TUgJGwFFO8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.5/go.mod h1:qPqp1Uwd/BqdhPufv6oem9j5J7HNsgc2V22dUiDPn+s= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.4 h1:29SvnfGhXjTl8ONxFwbj2rs6lbhiFXD2CgFQmbT/bXY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.4/go.mod h1:wm04I5DMuNVvZHFe/dHnUxincvNbbK7AiNBbYsQivek= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.4 h1:pPiWfgeNxqluKEph7hvU88kuGKBPOWzO+Dk9t2zqqNs= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.4/go.mod h1:YlwGoIUDG/3kBQbdNOVs/xKZ9J01G8e/6D1mRBj9uTk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.114.0 h1:VMAdYqr4Jn/8ATs9BHC5riwrs0d6m1Z2ohFriSwZwm0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.114.0/go.mod h1:9APRWGLFITKD+xzWSIyT9V7QV4bNlEuIieWlzXgGFlI= +github.com/aws/aws-sdk-go-v2/service/signin v1.10.1 h1:DzCCWLzcIRQ77F3DEUljud7bEjTgFOIKXP52NmVRyhU= +github.com/aws/aws-sdk-go-v2/service/signin v1.10.1/go.mod h1:xpo/geVldu8payT375WekctUzopG/hBU7miiqItMUlw= +github.com/aws/aws-sdk-go-v2/service/sso v1.38.1 h1:Umtl/0YZhng4xndfW3lKJrYYP7NLEjI6bGXVomwLcs0= +github.com/aws/aws-sdk-go-v2/service/sso v1.38.1/go.mod h1:rRD/dnm7q0HYE/I5TMaPgkWyyUGLcwuxHLABsLnQ3e0= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.1 h1:orIWdNiLgzrhu/11RcPPKO/SBzUUymbUQuZbSPImghg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.1/go.mod h1:skwM/xsbR/1ReUTesv9BhpJp1VjajR7DWQnuVLwiXsQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.51.1 h1:0HOqZXRvMytH6bFHVIc0oJX07sZjfhz0zXtjs6gdE8s= +github.com/aws/aws-sdk-go-v2/service/sts v1.51.1/go.mod h1:26zA0GhDrLo+yiLI2yXWxqB1PdsShfLikoI7GOEgugM= github.com/aws/smithy-go v1.28.2 h1:myhcykQcatTul2B/zITjDk203G7t0awUAs1hVry5Bvg= github.com/aws/smithy-go v1.28.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -111,8 +111,8 @@ github.com/containerd/console v1.0.5 h1:R0ymNeydRqH2DmakFNdmjR2k0t7UPuiOV/N/27/q github.com/containerd/console v1.0.5/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/containerd/containerd/api v1.12.0 h1:kuQm82SbDrCuO4n7hf2L8zsBtZLuympyq5X/VotfX2A= github.com/containerd/containerd/api v1.12.0/go.mod h1:EBcSzoi9Vl18cdODaXUCskf3D2NT8lsSXeZJnU5jIUc= -github.com/containerd/containerd/v2 v2.4.0 h1:mZLYWkPAgF4tfTjinClrRfvUxmxHxg1PQL7cjrrpTtk= -github.com/containerd/containerd/v2 v2.4.0/go.mod h1:gHZz+v5y8mGt9grF3ynuaa3r6bXLmghBZWTAftHAUtg= +github.com/containerd/containerd/v2 v2.4.1 h1:DUx/ZJN7cEu0WuzHClDB+68H/bqMEH5pWoEjf0ae4hc= +github.com/containerd/containerd/v2 v2.4.1/go.mod h1:vgLdtvl3prFk1d3ZVqQcsDD5Q9IKM+vAIdU54U85w+I= github.com/containerd/continuity v0.5.0 h1:7a85HZpCSs+1Zps0Ee3DPSuAWY+0SJM1JNM51nlEVDg= github.com/containerd/continuity v0.5.0/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= @@ -251,8 +251,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= -github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= -github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= +github.com/klauspost/compress v1.20.1 h1:T7kKElXUMXrUJ2E9QhQhxFtcK5rPyLdsGZvdbLMPdiQ= +github.com/klauspost/compress v1.20.1/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= @@ -312,14 +312,14 @@ github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELU github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= -github.com/mulgadc/bluebottle v1.21.1-0.20261001020941-036da4967e1c h1:oRb9PlvooMenQjKU9dD76/bxUOvJaYi6taxm3famoj4= -github.com/mulgadc/bluebottle v1.21.1-0.20261001020941-036da4967e1c/go.mod h1:LH0MuQcFxet0dDEISlZsuULIYj592eCN2Fv39A6EH5o= -github.com/mulgadc/northstar v1.21.0 h1:LE/5kiT3kBelCg02cXa3b7awhaYkGHsOXeJ4nHRLNaQ= -github.com/mulgadc/northstar v1.21.0/go.mod h1:O446cApNMB6qebqieBhDZfCIGVWX++v3QdOz+wIGhUk= -github.com/mulgadc/predastore v1.21.0 h1:pAm4fFWf0vnlwRgnoL2oJ+KSCw8mtjT2rQoBHFmnjzk= -github.com/mulgadc/predastore v1.21.0/go.mod h1:icCfKGnyqDaJ/Jlbp2aYeo2qwrKHZfxmPHDYK1MM7wc= -github.com/mulgadc/viperblock v1.21.0 h1:RbQ/GpHCg/uoPffYioSKqzqyoz22Uc7wpQ7XY7etLg0= -github.com/mulgadc/viperblock v1.21.0/go.mod h1:n0wCOGV58Lt2IVPXEvpbHDkTITlXtFw+2CMrQXgbJ7s= +github.com/mulgadc/bluebottle v1.22.0 h1:pGZ5/Ly3CYem62pPu2zKBRpvMpAG0LHMIMw9Yt/lkIg= +github.com/mulgadc/bluebottle v1.22.0/go.mod h1:DwT91bJyUsrpg1gCJmcCOTG+tgw5J124LloHYvGAQu0= +github.com/mulgadc/northstar v1.22.0 h1:fTndlk47hK76fcNr2MqsyeKhBNVEDt8+BC6Z30ohokA= +github.com/mulgadc/northstar v1.22.0/go.mod h1:yLH8waqfHZx177Ae6dGQGTDt/02rPE9alnUKyxDNhVs= +github.com/mulgadc/predastore v1.22.0 h1:mUQJMTxMiRDVvemMP+34BP/+r1U0iCptc9B++u4NJ8o= +github.com/mulgadc/predastore v1.22.0/go.mod h1:/cMIoKtnQG/DWyeX/0matEQrG2/abY60tNHWcBKS9Kc= +github.com/mulgadc/viperblock v1.22.0 h1:8vS2AtpIDkIhGNOazQPicKXV2y/8PAy8BNrVWIOCP6I= +github.com/mulgadc/viperblock v1.22.0/go.mod h1:Hq8yMagAX8c4wZ68oUkwZPyxTNMwvRwB685eHFewisc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/nats-io/jwt/v2 v2.8.2 h1:XXRgB60MSTnqsRwejQurVDs/hcv2dkt+86GjI+I/bMc= @@ -338,8 +338,8 @@ github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJw github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opencontainers/runtime-spec v1.3.0 h1:YZupQUdctfhpZy3TM39nN9Ika5CBWT5diQ8ibYCRkxg= github.com/opencontainers/runtime-spec v1.3.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/oracle/oci-go-sdk/v65 v65.126.0 h1:RuV0MEcLOOgNOBadYbbkUQriCK4Gm5348F/GdWvYPcI= -github.com/oracle/oci-go-sdk/v65 v65.126.0/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= +github.com/oracle/oci-go-sdk/v65 v65.126.1 h1:WmQ2Igq7/L/cHlR2jZnJkBC2UI51Ams4DJZW3CZGVBo= +github.com/oracle/oci-go-sdk/v65 v65.126.1/go.mod h1:YmvgbsnUfrsiJ410XAGQ1BRsrUYJJ7W3O5wUikmeI8w= github.com/ovn-kubernetes/libovsdb v0.8.1 h1:M2J8bcJt5mXCom0HqzfEtuHkT80CTSQRcYG7acT8gf4= github.com/ovn-kubernetes/libovsdb v0.8.1/go.mod h1:ZlnHLzagmLOSvyd9qfxBIZp6wOSOw0IsRsc+6lNUGbU= github.com/pelletier/go-toml/v2 v2.4.3 h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdDPYVpY= @@ -417,8 +417,8 @@ github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWD github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= -github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= +github.com/tidwall/btree v1.8.2 h1:mTY5iM4UTh2e80TG7RHDQQmnAY3xGNQA/DbU0olkhkA= +github.com/tidwall/btree v1.8.2/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= diff --git a/internal/guestenv/guestenv.go b/internal/guestenv/guestenv.go index b36a9edd3..231a2d2b4 100644 --- a/internal/guestenv/guestenv.go +++ b/internal/guestenv/guestenv.go @@ -10,11 +10,13 @@ import ( "strings" ) +// Loader holds the KEY=value settings read from an agent.env file, keyed by +// variable name. Read values through Get so the process environment applies. type Loader map[string]string -// A missing or unreadable file yields an empty Loader rather than an error: the -// settings are all optional, and a guest whose file never arrived must still -// start far enough to report why. +// Load parses the KEY=value file at path, skipping blanks and # comments. A +// missing or unreadable file yields an empty Loader rather than an error: the +// settings are optional, and a guest without its file must still report why. func Load(path string) Loader { out := Loader{} f, err := os.Open(path) @@ -38,8 +40,9 @@ func Load(path string) Loader { return out } -// A real environment variable wins, so an operator or test can override what -// cloud-init wrote. An empty value is treated as unset rather than as a mask. +// Get returns the setting for key. A real environment variable wins, so an +// operator or test can override what cloud-init wrote. An empty value is +// treated as unset rather than as a mask. func (l Loader) Get(key string) string { if v := os.Getenv(key); v != "" { return v diff --git a/internal/rdsgw/client.go b/internal/rdsgw/client.go index db41674b4..9bd13a2ca 100644 --- a/internal/rdsgw/client.go +++ b/internal/rdsgw/client.go @@ -37,7 +37,8 @@ const ( defaultTimeout = 40 * time.Second ) -// One client is reused for register/heartbeat/bootstrap/poll. +// Client sends SigV4-signed RDS Query calls to the gateway. One client is +// reused for register/heartbeat/bootstrap/poll. type Client struct { baseURL string signer *gwsign.Signer @@ -45,8 +46,9 @@ type Client struct { httpClient *http.Client } -// caPath optionally pins the gateway TLS CA; empty relies on the system trust -// store. region defaults to us-east-1, since SigV4 requires a non-empty one. +// New builds a TLS 1.3 client for baseURL. caPath optionally pins the gateway +// TLS CA; empty relies on the system trust store. region defaults to us-east-1, +// since SigV4 requires a non-empty one. func New(baseURL, caPath string, signer *gwsign.Signer, region string, timeout time.Duration) (*Client, error) { if baseURL == "" { return nil, fmt.Errorf("rdsgw: baseURL is required") @@ -88,8 +90,8 @@ func New(baseURL, caPath string, signer *gwsign.Signer, region string, timeout t }, nil } -// Code is the AWS error code, so a caller branches on the failure class rather -// than matching message text. +// APIError is a non-2xx gateway response. Code is the AWS error code, so a +// caller branches on the failure class rather than matching message text. type APIError struct { Action string StatusCode int @@ -113,8 +115,9 @@ type errorResponse struct { } `xml:"Error"` } +// Call POSTs action and decodes its into out, which may be nil. // params carries the action's own arguments; Action and Version are set here. -// out may be nil. A non-2xx yields an *APIError. No retry; callers wrap. +// A non-2xx yields an *APIError. No retry; callers wrap. func (c *Client) Call(ctx context.Context, action string, params url.Values, out any) error { form := make(url.Values, len(params)+2) maps.Copy(form, params) diff --git a/internal/testkit/ebsfake/ebsfake.go b/internal/testkit/ebsfake/ebsfake.go index 36862c5fc..24dd6c860 100644 --- a/internal/testkit/ebsfake/ebsfake.go +++ b/internal/testkit/ebsfake/ebsfake.go @@ -1,3 +1,5 @@ +// Package ebsfake provides an in-memory EBS provider for tests that also +// deletes a volume's objects from the store, as viperblockd does. package ebsfake import ( diff --git a/internal/testkit/nats.go b/internal/testkit/nats.go index 5a937f9f2..c7647f93b 100644 --- a/internal/testkit/nats.go +++ b/internal/testkit/nats.go @@ -1,3 +1,5 @@ +// Package testutil provides test helpers shared across Spinifex packages: +// embedded NATS and JetStream servers, stub responders and span recorders. package testutil import ( diff --git a/internal/testkit/tracing.go b/internal/testkit/tracing.go index cddabafdb..593e8f14b 100644 --- a/internal/testkit/tracing.go +++ b/internal/testkit/tracing.go @@ -2,6 +2,7 @@ package testutil import ( "testing" + "time" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" @@ -42,12 +43,26 @@ func SpanAttribute(t *testing.T, span sdktrace.ReadOnlySpan, key string) attribu return attribute.Value{} } -// SpansByKind returns the last recorded span of each kind. Owner-first -// routing can produce more than one client span for a single call, and the -// leg that answered is the last one. +// SpansByKind returns the last recorded span of each kind (owner-first routing +// can record several client legs; the last answered). Servers reply before +// ending their span, so this waits for one and fails the test if none ends. func SpansByKind(t *testing.T, recorder *tracetest.SpanRecorder) (client, server sdktrace.ReadOnlySpan) { t.Helper() - for _, span := range recorder.Ended() { + deadline := time.Now().Add(5 * time.Second) + for { + client, server = lastSpansByKind(recorder.Ended()) + if server != nil { + return client, server + } + if time.Now().After(deadline) { + t.Fatal("no server span recorded within 5s") + } + time.Sleep(time.Millisecond) + } +} + +func lastSpansByKind(spans []sdktrace.ReadOnlySpan) (client, server sdktrace.ReadOnlySpan) { + for _, span := range spans { switch span.SpanKind() { case trace.SpanKindClient: client = span diff --git a/scripts/setup.sh b/scripts/setup.sh index d247da4ac..1bd592ca7 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -1,6 +1,7 @@ #!/bin/bash # Spinifex binary installer # Usage: curl -sfL https://install.mulgadc.com | bash +# curl -sfL https://install.mulgadc.com | sudo bash -s -- --channel dev # # Environment variables: # INSTALL_SPINIFEX_CHANNEL Release channel: latest (default), dev @@ -897,6 +898,17 @@ install_files() { info " /usr/local/share/spinifex/setup.sh" fi + # Formation. Shipping these means a multi-node cluster can be formed from a + # `curl | bash` install with no checkout, which is what a cloud operator has. + # smoke-test.sh comes too: install-node.sh scp's it from its own directory for + # the post-formation verification, so without it formation fails at the last step. + for formation in install-node.sh smoke-test.sh; do + if [ -f "$EXTRACT_DIR/$formation" ]; then + $SUDO install -m 0755 "$EXTRACT_DIR/$formation" "/usr/local/share/spinifex/$formation" + info " /usr/local/share/spinifex/$formation" + fi + done + # Teardown scripts. An install delivered by `curl | bash` with no way to # undo it is a gap in the product, not just in our tooling, and node-reset.sh # ships alongside because uninstall-spx.sh delegates its state teardown to it @@ -1390,11 +1402,22 @@ main() { case "$1" in --firewall=*) INSTALL_SPINIFEX_FIREWALL="${1#*=}" ;; --firewall) INSTALL_SPINIFEX_FIREWALL="${2:-}"; shift ;; + --channel=*) INSTALL_SPINIFEX_CHANNEL="${1#*=}" ;; + --channel) INSTALL_SPINIFEX_CHANNEL="${2:-}"; shift ;; + --version=*) INSTALL_SPINIFEX_VERSION="${1#*=}" ;; + --version) INSTALL_SPINIFEX_VERSION="${2:-}"; shift ;; *) fatal "unknown option: $1" ;; esac shift done + case "$INSTALL_SPINIFEX_CHANNEL" in + latest|dev) ;; + # Anything else is passed to the install endpoint as a literal tag, so a + # typo would 404 on the download rather than here. Name the two channels. + *) fatal "--channel must be 'latest' or 'dev', got: ${INSTALL_SPINIFEX_CHANNEL} (use --version for a specific tag)" ;; + esac + case "${INSTALL_SPINIFEX_FIREWALL}" in on|off) ;; # Unset resolves by install path: the ISO arms, everything else does not. diff --git a/scripts/terraform/oci-spx/.gitignore b/scripts/terraform/oci-spx/.gitignore index bf2f62a12..bb5276a90 100644 --- a/scripts/terraform/oci-spx/.gitignore +++ b/scripts/terraform/oci-spx/.gitignore @@ -8,3 +8,8 @@ terraform.tfstate.* crash.log terraform.tfvars *.pem +*.log +.validate-*/ +# Per-run artifacts and the identity state, which is not a topology's to destroy. +.e2e-oci-*/ +.identity/ diff --git a/scripts/terraform/oci-spx/README.md b/scripts/terraform/oci-spx/README.md index 4383f8139..fb0ad2638 100644 --- a/scripts/terraform/oci-spx/README.md +++ b/scripts/terraform/oci-spx/README.md @@ -31,7 +31,7 @@ Every resource is prefixed with `deployment_name` (default `spinifex`), so nothi ## Quick Start -Prerequisites: Terraform, Python 3, OCI credentials in `~/.oci/config`, and the public and private halves of the SSH key. The Python helper creates and uses this repository's isolated `.venv` and installs [requirements.txt](requirements.txt). +Prerequisites: Terraform, Python 3, OCI credentials in `~/.oci/config` or the environment, and the public and private halves of the SSH key. The Python helper is standard library only, so there is nothing to install: it once used the OCI SDK, which meant a virtualenv and therefore `python3-venv` on every host that runs it. ```bash cd scripts/terraform/oci-spx @@ -53,13 +53,11 @@ python3 scripts/oci_env.py --ssh-public-key-path -- ter | Item | Purpose | | --- | --- | -| `scripts/oci_env.py` | Loads OCI profile inputs, discovers the tenancy home region, exports Terraform variables, and runs Terraform in the repository `.venv`. | -| `requirements.txt` | Python dependency set for the environment helper. | +| `scripts/oci_env.py` | Loads the credential from a profile or the environment, checks its shape, exports Terraform variables, and runs Terraform. | | `terraform.tfvars.example` | Example non-secret Terraform inputs. Copy it to untracked `terraform.auto.tfvars` for local overrides. | -| `.venv/` | Repository-local virtual environment; generated locally and not committed. | | `terraform.tfstate` | Terraform state; generated locally unless a remote backend is configured. Do not commit it. | -The helper defaults to OCI profile `apacanzset03child03`. If it is absent and `apacanzset03child3` is locally configured, the helper explicitly falls back to that profile. Override either setting when needed: +The helper reads the `DEFAULT` profile, which is what `oci setup config` writes. Set `OCI_CLI_PROFILE` or pass `--profile` to read a different one; a named profile the config does not hold is an error rather than a fallback, so a deployment cannot land in a tenancy nobody chose. ```bash python3 scripts/oci_env.py --profile my-profile --region ap-sydney-1 -- terraform plan @@ -125,7 +123,6 @@ flowchart TB ├── outputs.tf # OCIDs and policy outputs ├── versions.tf # Terraform and provider version constraints ├── terraform.tfvars.example -├── requirements.txt └── scripts/oci_env.py # Python environment and Terraform command helper ``` @@ -208,9 +205,77 @@ The private subnet is **unused today** and kept only so it exists: Spinifex gues node_client_cidr_allow_list = ["203.0.113.10/32"] ``` -## The API user this seeds +## How each node authenticates to OCI -The OCI provider integration needs credentials on each node so Spinifex can allocate addresses at runtime. **Grant that user only the operations Spinifex performs on addresses** — create/get/list/delete private IPs, create/get/update/delete public IPs — and nothing else. It is not a tenancy admin. Broader rights widen the blast radius of a node compromise for no benefit. +The allocator needs OCI credentials at runtime, and there are two ways to give it them. A node with neither forms, passes every health check, and then refuses every launch that wants a public address with `InsufficientAddressCapacity` — the cause appears only in the node's journal, so this is worth getting right before first start. + +**Instance principal is the better one.** Each node authenticates with the certificate its own metadata service serves, so no key material exists on any node, there is nothing to rotate, and nothing sensitive reaches Terraform state. The cost is a dynamic group and a policy, which are tenancy-root resources — so creating them needs a tenancy-admin principal, which is why the rest of this configuration deliberately creates nothing at tenancy root. + +`instance_principal` has three values, because using an instance principal and being allowed to create one are different rights: + +| Value | Pool auth | Creates the dynamic group and policy | Credential needed | +| --- | --- | --- | --- | +| `off` (default) | API key file | No | Compartment-scoped | +| `adopt` | `instance_principal` | No — assumes they exist | Compartment-scoped | +| `create` | `instance_principal` | Yes | **Tenancy admin** | + +Create them once per tenancy, then every deployment and rebuild afterwards uses `adopt`: + +```bash +./setup-identity.sh --dry-run # always first +./setup-identity.sh +``` + +`setup-identity.sh` targets only those two resources and keeps them in `.identity/terraform.tfstate`, separate from every topology's state. That separation is load-bearing: `validate-topology.sh` destroys its own state at the end of each run, so holding tenancy resources there would let a nightly teardown delete the tenancy's policy. + +**`adopt` references the dynamic group by nothing at all.** Its matching rule is `instance.compartment.id`, so it covers every instance in the compartment and names no OCID — which is why adopting needs no read on an identity resource and no tenancy rights. The cost is that a missing policy is invisible at apply time: the node forms, passes every health check, and then refuses every launch wanting a public address. The allocator gate in `validate-topology.sh` is what catches that, by requiring `ocinet credential authorised to allocate` in each node's `spinifex-daemon` journal. + +The policy grants four verbs in one compartment: `use vnics`, `manage private-ips`, `manage public-ips` and `use subnets`. +That is exactly what allocating an external address does and nothing more. +`use subnets` looks unrelated and is not: `CreatePrivateIp` is checked against `SUBNET_ATTACH` and `CreatePrivateIp` is how an address is registered, so a policy without it authorises nothing and every allocation returns a 404. + +**An API key is the fallback**, and the default because it needs nothing from a tenancy admin. Grant that user only the operations Spinifex performs on addresses and nothing else; it is not a tenancy admin, and broader rights widen the blast radius of a node compromise for no benefit. + +`spx-oci-config.sh` installs it on **every** node, as `/etc/spinifex/oci/{oci_api_key.pem,config}` — not a home directory, because the daemon's unit sets `ProtectHome=yes`. Both files are needed: `oci_config_file` names an ordinary OCI SDK config, so a node holding only the PEM forms and then fails every allocation. The profile it writes is `spinifex`, matching `oci_config_profile`: + +```ini +[spinifex] +user=ocid1.user.oc1.. +fingerprint= +tenancy=ocid1.tenancy.oc1.. +region=ap-sydney-1 +key_file=/etc/spinifex/oci/oci_api_key.pem +``` + +The script takes `validate-topology.sh`'s hook contract, `hook ...`, so it is both the default thing to pass to `--credential-hook` and runnable on its own against an existing cluster. `--dry-run` resolves and validates the credential without touching a host. + +It resolves the credential in four steps and takes the first complete one: the `OCI_SPX_*` environment variables, the `[spinifex]` profile in `~/.oci/config`, `~/.oci/oci_api_key_spx.pem` with the Terraform profile's identifiers, then the Terraform credential itself with a warning that it is wider than needed. Steps 2 to 4 go through `scripts/oci_env.py`, the same resolver the apply uses, so the node credential and the one that built the infrastructure cannot come from different profiles. The fingerprint is checked against the key before anything is written, because a mismatched pair is otherwise an OCI 401 at the first allocation. + +Credential material reaches the nodes over SSH, in the remote shell's stdin rather than its arguments, and goes into neither user-data nor Terraform state. `--credential-hook` still accepts any executable with that argument shape, so a tenancy holding credentials in a vault can substitute its own. Instance principal needs no hook at all, which is the reason to prefer it wherever a dynamic group can be created. + +Either way, Terraform stages the matching pool block at `/etc/spinifex/oci/external-pool.toml` on each node, with `oci_auth` set to match. Append it to `/etc/spinifex/spinifex.toml` after `spx admin init` and restart `spinifex.target`. Under instance principal that file holds no secret at all, which is the point of it. + +## Validating a topology end to end + +`validate-topology.sh` builds one topology from nothing, installs the published Spinifex release, forms the cluster, runs a Terraform workbook against it, proves the workbook serves traffic, and destroys everything. Three topologies, because each breaks differently — bare metal presents VNICs unlike a VM, a single node has no Geneve underlay to get wrong, and only a cluster exercises RAFT, the gateway chassis and cross-node allocation. + +```bash +./validate-topology.sh --topology bm --dry-run +./validate-topology.sh --topology vm-single --instance-principal +./validate-topology.sh --topology vm-multi --instance-principal +``` + +`--topology` has no default on purpose: a command aimed at the wrong one is the easiest expensive mistake here. Each topology keeps its own state under `.validate-/`, so two can be built from one checkout without either destroying the other's instances, and every log from the run lands there. + +**A topology's shape and node count are defaults, not settings.** They go to Terraform as `TF_VAR_compute_shape` and `TF_VAR_node_count`, which is the weakest source Terraform reads, so a `terraform.auto.tfvars` in the checkout outranks them and a deployment sizes itself in that file with no flag to pass. CI has no such file — `*.auto.tfvars` is gitignored — so a named topology stays the same every run. `instance_principal` is the exception and remains a `-var`, because `--instance-principal` is a choice about the run rather than about the infrastructure's size, and a stale tfvars must not quietly contradict it. + +The count that later gates read is the number of addresses the `hosts_file` output names, not the number asked for, and the run logs the shape and count it built. A tfvars that changes either is reported rather than silently diverging from the topology's name. + +**The teardown decides the verdict.** A topology or workbook that cannot be destroyed is half proved, and has been a real defect before, so `destroy` runs from an `EXIT` trap even on failure and a teardown failure fails the run. `--keep` leaves everything up and records no verdict. Other flags: `--skip-workload` (form and verify, launch no guests), `--workbook NAME`, `--ssh-public-key` / `--ssh-private-key`. + +**A clean teardown can still leave public IPs behind, and they count against the tenancy.** The addresses Spinifex allocates for guests are created by the running node, so they are in no Terraform state and `destroy` neither sees nor removes them. The node's own reconcile collects detached ones every ten minutes, which is exactly the sweep a destroy takes away. Twenty accumulated in `spxbm` over four runs and exhausted the tenancy's 50 reserved-public-IP limit, at which point every later launch in every compartment failed. [Check for leftover public IPs afterwards](../../../docs/oci-integration/README.md#check-for-leftover-public-ips-afterwards) has the query and the rule for reading it. + +The workbook runs **on the node** against `127.0.0.1`, because the node certificate carries no SAN for its public address — a workbook driven from outside the VCN is still blocked. ## Common Commands diff --git a/scripts/terraform/oci-spx/cloud-init/mount-data-volume.sh b/scripts/terraform/oci-spx/cloud-init/mount-data-volume.sh index 51b21a6b2..3fb4123f4 100755 --- a/scripts/terraform/oci-spx/cloud-init/mount-data-volume.sh +++ b/scripts/terraform/oci-spx/cloud-init/mount-data-volume.sh @@ -18,18 +18,39 @@ die() { exit 1 } +MULTIPATHD_UNIT=/usr/lib/systemd/system/multipathd.service +MULTIPATH_ALIAS=/etc/systemd/system/multipath-tools.service + +# OCI makes a bare-metal attachment multipath, and the agent refuses to log one in +# unless multipathd runs. It probes "multipath-tools", the name Debian retired, so +# on Ubuntu 26.04 it gets exit 5 forever while multipathd is active all along. A +# symlink in /etc/systemd/system is a systemd alias, which is all the agent needs. +# +# Asserted on every poll rather than written once: on the first bare-metal run the +# symlink was created and then vanished, cause unknown, and the volume only logged +# in once it was back. Converging on each pass beats trusting a single write. +assert_multipath_alias() { + [ -e "$MULTIPATHD_UNIT" ] || return 0 + [ "$(readlink -f "$MULTIPATH_ALIAS" 2>/dev/null)" = "$MULTIPATHD_UNIT" ] && return 0 + + ln -sfn "$MULTIPATHD_UNIT" "$MULTIPATH_ALIAS" + systemctl daemon-reload + log "aliased multipath-tools.service to multipathd.service for the Oracle agent" +} + # The Oracle Cloud Agent logs the iSCSI session in asynchronously, so the device # is not present when cloud-init first runs. Wait for it instead of racing it. wait_for_device() { local i for i in $(seq 1 120); do + assert_multipath_alias if [ -b "$DEVICE" ]; then log "$DEVICE appeared after $((i * 5))s" return 0 fi sleep 5 done - die "$DEVICE did not appear within 600s; check the iSCSI session with 'iscsiadm -m session'" + die "$DEVICE did not appear within 600s; check 'iscsiadm -m session' and the agent log at /var/log/oracle-cloud-agent/plugins/oci-blockautoconfig/" } # blkid reporting a TYPE is the only thing standing between a re-run and an erased diff --git a/scripts/terraform/oci-spx/cloud-init/setup-wan-bridge.sh b/scripts/terraform/oci-spx/cloud-init/setup-wan-bridge.sh index fbe31fff4..dbcec0bd7 100755 --- a/scripts/terraform/oci-spx/cloud-init/setup-wan-bridge.sh +++ b/scripts/terraform/oci-spx/cloud-init/setup-wan-bridge.sh @@ -28,41 +28,56 @@ primary_mac() { cat "/sys/class/net/$dev/address" } -# Prints shell assignments for the first VNIC that is not the primary, or exits 1. -imds_secondary() { +# One tab-separated record per VNIC that is not the primary. +imds_secondaries() { curl -sf --max-time 10 -H 'Authorization: Bearer Oracle' "$IMDS/vnics/" | python3 -c ' import ipaddress, json, sys primary = sys.argv[1].lower() for vnic in json.load(sys.stdin): - if vnic["macAddr"].lower() == primary: + mac = vnic["macAddr"].lower() + if mac == primary: continue net = ipaddress.ip_network(vnic["subnetCidrBlock"]) - print("WAN_MAC=%s" % vnic["macAddr"].lower()) - print("WAN_IP=%s" % vnic["privateIp"]) - print("WAN_PREFIX=%d" % net.prefixlen) - print("WAN_CIDR=%s" % vnic["subnetCidrBlock"]) - print("WAN_ROUTER=%s" % vnic["virtualRouterIp"]) - sys.exit(0) -sys.exit(1) + print("\t".join([mac, vnic["privateIp"], str(net.prefixlen), + vnic["subnetCidrBlock"], vnic["virtualRouterIp"]])) ' "$1" } +# Picks the secondary VNIC the kernel actually has an interface for, and sets the +# WAN_* variables from it. Deliberately not "the first non-primary": IMDS order is +# not documented, and on bare metal a VNIC sharing a port has no interface at all. +select_secondary() { + local primary="$1" mac ip prefix cidr router iface + while IFS=$'\t' read -r mac ip prefix cidr router; do + [ -n "$mac" ] || continue + if iface="$(iface_for_mac "$mac")"; then + WAN_MAC="$mac" + WAN_IP="$ip" + WAN_PREFIX="$prefix" + WAN_CIDR="$cidr" + WAN_ROUTER="$router" + WAN_IFACE="$iface" + return 0 + fi + done < <(imds_secondaries "$primary") + return 1 +} + wait_for_secondary() { - local primary i out + local primary i primary="$(primary_mac)" log "primary VNIC MAC is $primary" for i in $(seq 1 60); do - if out="$(imds_secondary "$primary")" && [ -n "$out" ]; then - eval "$out" - log "secondary VNIC after $((i * 5))s: $WAN_MAC $WAN_IP/$WAN_PREFIX via $WAN_ROUTER" + if select_secondary "$primary"; then + log "secondary VNIC after $((i * 5))s: $WAN_MAC on $WAN_IFACE, $WAN_IP/$WAN_PREFIX via $WAN_ROUTER" return 0 fi sleep 5 done - die "no secondary VNIC appeared within 300s; check the VNIC attachment in OCI" + die "no secondary VNIC with an interface appeared within 300s; on bare metal check it is attached at nic_index 1, because a VNIC sharing the primary's port never becomes an interface" } # The physical interface for a MAC. Matching on the address rather than trusting a @@ -184,16 +199,13 @@ PY main() { wait_for_secondary - - local iface - iface="$(iface_for_mac "$WAN_MAC")" || die "no interface carries $WAN_MAC" - log "bridging $iface into $BRIDGE" + log "bridging $WAN_IFACE into $BRIDGE" strip_cloud_init_secondary local previous="" [ -f "$NETPLAN_FILE" ] && previous="$(cat "$NETPLAN_FILE")" - write_netplan "$iface" + write_netplan "$WAN_IFACE" if [ "$STRIPPED" = 0 ] && [ "$previous" = "$(cat "$NETPLAN_FILE")" ] && ip link show "$BRIDGE" >/dev/null 2>&1; then log "$BRIDGE is already configured and unchanged" diff --git a/scripts/terraform/oci-spx/cloud-init/user-data.yaml.tftpl b/scripts/terraform/oci-spx/cloud-init/user-data.yaml.tftpl index cfb407cfa..2c83848ba 100644 --- a/scripts/terraform/oci-spx/cloud-init/user-data.yaml.tftpl +++ b/scripts/terraform/oci-spx/cloud-init/user-data.yaml.tftpl @@ -21,15 +21,68 @@ write_files: content: | ${indent(6, service_ports_script)} - # The secondary VNIC is attached after the instance reaches RUNNING, so it can + # Staged rather than applied: spinifex.toml does not exist until spx admin init + # has run. Holds no secret under instance principal, which is the point of it -- + # the instance's own certificate is the credential. + - path: /etc/spinifex/oci/external-pool.toml + owner: root:root + permissions: "0644" + content: | + ${indent(6, oci_pool_fragment)} + + # A unit rather than a runcmd so a boot that raced the iSCSI login retries on the + # next one, and so the ports below can declare a dependency on it. The script + # polls for the device itself and is safe to re-run. + - path: /etc/systemd/system/spinifex-data-volume.service + owner: root:root + permissions: "0644" + content: | + [Unit] + Description=Spinifex data volume on the OCI block volume + Wants=network-online.target + After=network-online.target remote-fs.target + ConditionPathIsMountPoint=!${data_mountpoint} + + [Service] + Type=oneshot + RemainAfterExit=yes + ExecStart=/usr/local/sbin/spinifex-mount-data-volume ${data_device} ${data_mountpoint} + + [Install] + WantedBy=multi-user.target + + # Requires= is the point: a node with no data volume has nothing behind these + # ports, so it must not publish them. systemd enforces that ordering, which a + # list of runcmd entries cannot -- runcmd continues past a failed step. + - path: /etc/systemd/system/spinifex-service-ports.service + owner: root:root + permissions: "0644" + content: | + [Unit] + Description=Spinifex node service ports + Requires=spinifex-data-volume.service + After=spinifex-data-volume.service + + [Service] + Type=oneshot + RemainAfterExit=yes + ExecStart=/usr/local/sbin/spinifex-open-service-ports ${peer_cidr} ${service_ports} + + [Install] + WantedBy=multi-user.target + + # The external VNIC is attached after the instance reaches RUNNING, so it can # arrive late. This unit retries on the next boot if the first attempt missed it, # and stops running once the netplan file it writes exists. + # + # Deliberately independent of the data volume: losing the external datapath + # because a disk is late would make the node more broken, not safer. - path: /etc/systemd/system/spinifex-wan-bridge.service owner: root:root permissions: "0644" content: | [Unit] - Description=Spinifex WAN bridge over the secondary OCI VNIC + Description=Spinifex WAN bridge over the external OCI VNIC Wants=network-online.target After=network-online.target ConditionPathExists=!/etc/netplan/60-spinifex-wan.yaml @@ -45,6 +98,6 @@ write_files: WantedBy=multi-user.target runcmd: - - [/usr/local/sbin/spinifex-mount-data-volume, "${data_device}", "${data_mountpoint}"] - - [/usr/local/sbin/spinifex-open-service-ports, "${peer_cidr}", ${service_ports}] + - [systemctl, enable, --now, spinifex-data-volume.service] + - [systemctl, enable, --now, spinifex-service-ports.service] - [systemctl, enable, --now, spinifex-wan-bridge.service] diff --git a/scripts/terraform/oci-spx/compute.tf b/scripts/terraform/oci-spx/compute.tf index cd5659893..031fad7b9 100644 --- a/scripts/terraform/oci-spx/compute.tf +++ b/scripts/terraform/oci-spx/compute.tf @@ -30,6 +30,10 @@ locals { # one, so it is emitted only when the shape name says Flex. shape_is_flex = strcontains(var.compute_shape, "Flex") + # Bare metal presents VNICs differently from a VM, which decides where the + # external VNIC is attached. See the nic_index comment below. + shape_is_bare_metal = startswith(var.compute_shape, "BM.") + # Round-robin, so three nodes land on three fault domains rather than wherever # OCI's placement happens to put them. Left to itself OCI spreads on a # best-effort basis and says nothing about the result, which is not something @@ -41,12 +45,38 @@ locals { # after the boot disk (mulga-poc has oraclevda1 pointing at sdb1). data_device = "/dev/oracleoci/oraclevdb" + # adopt and create differ only in who creates the dynamic group and policy; a node + # authenticates identically either way, because the matching rule covers the whole + # compartment and so names no instance. + use_instance_principal = var.instance_principal != "off" + + # The allocator's pool, staged on each node for spx admin init to pick up. Under + # instance principal there is no oci_config_file key, because naming one beside a + # certificate credential is a second source of truth that config load rejects. + oci_pool_fragment = join("\n", concat([ + "# Generated by the oci-spx Terraform. Append to /etc/spinifex/spinifex.toml", + "# after spx admin init, then restart spinifex.target.", + "[[network.external_pools]]", + "name = \"oci-public\"", + "source = \"oci\"", + "oci_compartment_id = \"${var.compartment_ocid}\"", + "oci_vnic_iface = \"${var.wan_bridge_name}\"", + ], local.use_instance_principal ? [ + "oci_auth = \"instance_principal\"", + ] : [ + "oci_config_file = \"/etc/spinifex/oci/config\"", + "oci_config_profile = \"spinifex\"", + ], [ + "dns_servers = [\"169.254.169.253\"]", + ])) + # Identical on every node, so a change to it replaces all of them together. user_data = templatefile("${path.module}/cloud-init/user-data.yaml.tftpl", { data_device = local.data_device data_mountpoint = var.data_mountpoint peer_cidr = var.vcn_cidr - service_ports = join(", ", [for p in var.node_service_ports : "\"${p}\""]) + service_ports = join(" ", var.node_service_ports) + oci_pool_fragment = local.oci_pool_fragment wan_bridge_name = var.wan_bridge_name wan_bridge_mtu = var.wan_bridge_mtu mount_script = file("${path.module}/cloud-init/mount-data-volume.sh") @@ -105,6 +135,11 @@ resource "oci_core_vnic_attachment" "mulgadc_external" { count = var.node_count instance_id = oci_core_instance.mulgadc[count.index].id + # On bare metal only the first VNIC on a physical port becomes a Linux device; + # a second one is a tagged overlay with no device. The second port keeps this + # VNIC first, so it is untagged and present at boot exactly as it is on a VM. + nic_index = local.shape_is_bare_metal ? 1 : 0 + create_vnic_details { subnet_id = oci_core_subnet.public.id display_name = format("%s-node-%02d-external", var.deployment_name, count.index + 1) diff --git a/scripts/terraform/oci-spx/e2e-oci.sh b/scripts/terraform/oci-spx/e2e-oci.sh new file mode 100755 index 000000000..e2273695e --- /dev/null +++ b/scripts/terraform/oci-spx/e2e-oci.sh @@ -0,0 +1,464 @@ +#!/bin/bash +# e2e-oci.sh — prove a ref works on OCI, across every topology, and leave nothing +# running. One entry point for a workstation, a Cloudflare-dispatched nightly and +# the GitHub workflow, because three ways of starting it would drift into three +# different answers about whether OCI works. +# +# Configured entirely by environment variables so a dispatch needs no arguments: +# +# SPX_REF Ref to prove. Default: the spinifex checkout's current branch. +# OCI_TOPOLOGIES Space-separated. Default: "vm-single vm-multi bm +# vm-single-principal". Set one name to test one thing: a +# single VM topology is roughly a quarter of the full run. +# OCI_SOURCE tree (build SPX_REF) or release (the published installer). +# OCI_VERSION With OCI_SOURCE=release, install this exact release tag and +# ignore OCI_CHANNEL. Preferred for anything repeatable: a tag +# resolves by redirect, while the dev channel resolves through a +# rate-limited GitHub API call that 404s when it trips. +# OCI_CHANNEL With OCI_SOURCE=release, which published channel to install: +# latest (default) or dev, the newest prerelease. dev is the +# path our cloud contacts are given, so it is worth testing. +# Default tree: a nightly exists to judge a ref, and the +# published installer says nothing about one. +# WORKBOOKS Workbooks to run on each topology. Default: the driver's own +# list. Set to "" to skip the workbook phase entirely. +# OCI_INSTANCE_PRINCIPAL Authenticate the node's allocator as the instance +# principal. Default 1, and it needs the tenancy's dynamic +# group to exist. The vm-single-principal topology ignores it +# and always authenticates that way, which is its purpose. +# +# A tenancy where setup-identity.sh cannot run has no such +# group, and then no principal run can pass: the node forms, +# authenticates, and is refused every allocation. That now +# fails at the allocator gate within a minute of the daemon +# starting rather than an hour later inside a workbook, but +# it still costs a full provision, so drop the topology from +# OCI_TOPOLOGIES until the group exists. +# OCI_NO_EXTERNAL_POOL 1 to form with no allocator at all, for a tenancy whose +# dynamic group does not exist yet. The allocator and every +# workbook are then recorded SKIPPED, never PASS, so a green +# run with this set is not a claim about guest networking. +# Not applied to vm-single-principal, which the allocator is +# the entire test of; that pairing is refused rather than run. +# OCI_SSH_PUBLIC_KEY / OCI_SSH_PRIVATE_KEY Paths. Default ~/.ssh/oci-spx[.pub]. +# OCI_CREDENTIAL_HOOK Executable run on each topology after formation and +# before the pool, as "hook ...". An API-key +# deployment installs its credential here; instance principal +# needs none, so it is skipped unless the pool is key-based. +# OCI_PRINCIPAL_TENANCY_OCID, OCI_PRINCIPAL_USER_OCID, +# OCI_PRINCIPAL_FINGERPRINT, OCI_PRINCIPAL_PRIVATE_KEY, OCI_PRINCIPAL_REGION, +# OCI_PRINCIPAL_COMPARTMENT_OCID +# The credential vm-single-principal builds with, replacing the +# run's own for that one topology. The dynamic group is a +# tenancy-root resource, so a tenancy that will not let +# setup-identity.sh create one refuses every allocation however +# correct the code is, and the principal route has to be proved +# in a tenancy we administer while the rest of the run stays +# where it is. +# +# All six or none. A partial set builds one tenancy's instances +# against another's compartment, which is refused rather than +# reported; with none set the topology is recorded SKIPPED +# rather than costing a provision to fail. Running it in the +# run's own tenancy is still available by pointing all six +# there, which says so explicitly instead of by default. +# OCI_PRINCIPAL_SHAPE Compute shape for vm-single-principal. Its tenancy +# carries its own service limits, so the shape the other +# topologies use can have zero quota there and fail the apply +# before anything about the principal is exercised. Default +# VM.Standard.E6.Flex, as the others. +# OCI_ARTIFACT_DIR Where logs and the verdict land. Default ./.e2e-oci-. +# OCI_KEEP_ON_FAIL 1 to leave a failed topology up for inspection. Off by +# default: an OCI bare-metal host left overnight is expensive. +# +# The credential comes from OCI_TENANCY_OCID, OCI_USER_OCID, OCI_FINGERPRINT, +# OCI_PRIVATE_KEY and OCI_REGION when they are set, and from ~/.oci/config when +# they are not. scripts/oci_env.py owns that choice; nothing here reads a key. +set -uo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SPINIFEX_ROOT="$(cd "$HERE/../../.." && pwd)" +# On a workstation spinifex is a submodule of mulga; in CI the two are siblings +# under the workspace. Deriving one from the other is only right in the first case. +MULGA_ROOT="${MULGA_ROOT:-$SPINIFEX_ROOT/..}" + +TOPOLOGIES="${OCI_TOPOLOGIES:-vm-single vm-multi bm vm-single-principal}" +SOURCE="${OCI_SOURCE:-tree}" +CHANNEL="${OCI_CHANNEL:-latest}" +INSTALL_VERSION="${OCI_VERSION:-}" +REF="${SPX_REF:-$(git -C "$SPINIFEX_ROOT" rev-parse --abbrev-ref HEAD)}" +SSH_PUBLIC_KEY="${OCI_SSH_PUBLIC_KEY:-$HOME/.ssh/oci-spx.pub}" +SSH_PRIVATE_KEY="${OCI_SSH_PRIVATE_KEY:-$HOME/.ssh/oci-spx}" +ARTIFACT_DIR="${OCI_ARTIFACT_DIR:-$HERE/.e2e-oci-$(date -u +%Y%m%dT%H%M%SZ)}" +# Exported so validate-topology.sh agrees with the sweep about where state lives. +# On a persistent runner this belongs outside the checkout: actions/checkout runs +# git clean -ffdx, which would delete the state of a killed run before the sweep. +export OCI_STATE_ROOT="${OCI_STATE_ROOT:-$HERE}" +STATE_ROOT="$OCI_STATE_ROOT" +SWEEP_ONLY=0 +SUMMARY_ONLY=0 +DRY_RUN=0 + +log() { printf '[e2e-oci] %s\n' "$*"; } +die() { + printf '[e2e-oci] ERROR: %s\n' "$*" >&2 + exit 1 +} + +usage() { + cat >&2 < "$VERDICT" + +# vm-single-principal is the one topology that cannot run wherever the others do. +# It needs the tenancy's dynamic group, and creating that is a tenancy-root write, +# so the tenancy a shared test account gives us can never pass it. These let it +# build somewhere else without moving the rest of the run. +PRINCIPAL_CRED_VARS="TENANCY_OCID USER_OCID FINGERPRINT PRIVATE_KEY REGION COMPARTMENT_OCID" + +# principal_cred_state is none, all or partial. Partial is the one worth a stop: +# one tenancy's OCIDs with another's compartment builds in a compartment nobody +# chose, and the apply reports success doing it. +principal_cred_state() { + local name var have=0 miss=0 + for name in $PRINCIPAL_CRED_VARS; do + var="OCI_PRINCIPAL_$name" + if [ -n "${!var:-}" ]; then + have=$((have + 1)) + else + miss=$((miss + 1)) + fi + done + if [ "$have" = 0 ]; then + printf 'none\n' + elif [ "$miss" = 0 ]; then + printf 'all\n' + else + printf 'partial\n' + fi +} + +# Into an array rather than a rendered string, because the private key is a +# multi-line PEM and any line-based plumbing silently truncates it to its header. +PRINCIPAL_ENV=() +build_principal_env() { + local name var + PRINCIPAL_ENV=() + for name in $PRINCIPAL_CRED_VARS; do + var="OCI_PRINCIPAL_$name" + case "$name" in + COMPARTMENT_OCID) PRINCIPAL_ENV+=("TF_VAR_compartment_ocid=${!var}") ;; + *) PRINCIPAL_ENV+=("OCI_$name=${!var}") ;; + esac + done +} + +# Here rather than at the topology, because the build runs first and takes minutes, +# and a credential that cannot work is knowable before any of it. The loop checks +# again, since it is what reads the variables. +case " $TOPOLOGIES " in + *" vm-single-principal "*) + [ "$(principal_cred_state)" != partial ] \ + || die "the OCI_PRINCIPAL_* credential is incomplete: set all of $PRINCIPAL_CRED_VARS or none of them" + ;; +esac + +# The run page is the evidence, and its readers are not us: someone assessing +# whether Spinifex works on their cloud should get the answer without opening a +# log or knowing what this harness is. Markdown on stdout as well as to the step +# summary, so a workstation run shows the same thing CI publishes. +mark() { + case "$1" in + PASS) printf '✅ PASS' ;; + FAIL) printf '❌ FAIL' ;; + SKIPPED) printf '⏭️ SKIPPED' ;; + *) printf 'ℹ️ %s' "$1" ;; + esac +} + +summary() { + printf '## Spinifex on OCI — %s\n\n' "$REF" + # Said, not implied. A tree build and a published release answer different + # questions, and a table headed "published release" over a build of somebody's + # branch is the one error here that would mislead a reader who trusted it. + if [ "$SOURCE" = tree ]; then + printf 'Built from this ref, region `%s`.\n\n' "${OCI_REGION:-ap-sydney-1}" + else + printf 'Published release `%s`, region `%s`.\n\n' \ + "${INSTALL_VERSION:-$CHANNEL channel}" "${OCI_REGION:-ap-sydney-1}" + fi + + # In the header, not left to a SKIPPED row further down. A run with no allocator + # is not evidence about public addressing, and that is precisely the claim a + # reader of a green table would otherwise take from it. + # Said per topology rather than once for the run: vm-single-principal pins its + # own credential, so a single claim over a mixed run is wrong for one of them. + if [ "${OCI_NO_EXTERNAL_POOL:-0}" = 1 ]; then + printf '> **No external address pool.** Public-address allocation and every workbook needing a public address were skipped, so nothing here speaks to guest ingress. `vm-single-principal`, if it ran, is the exception and did build one.\n\n' + elif [ "${OCI_INSTANCE_PRINCIPAL:-1}" = 1 ]; then + printf 'Allocator authenticated as the instance principal.\n\n' + else + printf 'Allocator authenticated with an API key, except `vm-single-principal` which authenticates as the instance.\n\n' + fi + # Said in the summary because the row is otherwise read as a result about the + # same tenancy as every row above it, which is the one thing it is not. + if [ "$(principal_cred_state)" = all ]; then + printf '`vm-single-principal` built in its own tenancy in `%s`, from the `OCI_PRINCIPAL_*` credential.\n\n' \ + "$OCI_PRINCIPAL_REGION" + fi + + local topology results workbooks gate status detail name secs + for topology in $TOPOLOGIES; do + results="$STATE_ROOT/.validate-$topology/results.tsv" + workbooks="$STATE_ROOT/.validate-$topology/workbooks.tsv" + printf '### `%s`\n\n' "$topology" + # A topology the loop never reached is said so rather than omitted: a + # reader takes an absent row for a passing one. + if [ ! -s "$results" ]; then + printf 'Did not run.\n\n' + continue + fi + printf '| Gate | Result | Detail |\n| --- | --- | --- |\n' + while IFS=$'\t' read -r gate status detail; do + [ -n "$gate" ] || continue + printf '| %s | %s | %s |\n' "$gate" "$(mark "$status")" "$detail" + done < "$results" + printf '\n' + if [ ! -s "$workbooks" ]; then + printf 'No published workbooks ran.\n\n' + continue + fi + printf '| Terraform workbook | Result | Duration |\n| --- | --- | --- |\n' + while IFS=$'\t' read -r name status secs; do + [ -n "$name" ] || continue + printf '| `%s` | %s | %ss |\n' "$name" "$(mark "$status")" "$secs" + done < "$workbooks" + printf '\n' + done +} + +# GITHUB_STEP_SUMMARY is per step, so appending from both the run and the dedicated +# publish step would put two copies of the tables on the run page. One owner: the run +# writes the file and prints it, and only --summary-only publishes it. +emit_summary() { + summary | tee "$ARTIFACT_DIR/summary.md" +} + +publish_summary() { + emit_summary + if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then + cat "$ARTIFACT_DIR/summary.md" >> "$GITHUB_STEP_SUMMARY" + fi +} + +# A topology destroys itself from its own EXIT trap, so this only catches a run +# the trap never reached: a killed process, a runner reclaimed mid-job, a reboot. +# It works from the state files rather than by name filter, so it can only ever +# destroy what one of these runs created. +sweep() { + local found=0 dir topology + local sweep_env=(env) + for dir in "$STATE_ROOT"/.validate-*; do + [ -s "$dir/terraform.tfstate" ] || continue + python3 -c ' +import json, sys +state = json.load(open(sys.argv[1])) +sys.exit(0 if any(r["instances"] for r in state.get("resources", [])) else 1) +' "$dir/terraform.tfstate" 2>/dev/null || continue + topology="${dir##*/.validate-}" + # The child reads OCI_STATE_ROOT from the environment, so it looks in the + # same place this loop found the state rather than beside its own script. + found=1 + # The same credential the topology built with, or the destroy authenticates + # against a tenancy that never held these resources and reports a clean + # sweep over a deployment that is still billing. + sweep_env=(env) + if [ "$topology" = vm-single-principal ] && [ "$(principal_cred_state)" = all ]; then + build_principal_env + sweep_env=(env "${PRINCIPAL_ENV[@]}") + fi + log "sweep: $topology still holds resources, destroying" + if "${sweep_env[@]}" "$HERE/validate-topology.sh" --topology "$topology" --destroy-only \ + >> "$ARTIFACT_DIR/sweep.log" 2>&1; then + log "sweep: $topology destroyed" + else + log "sweep: $topology WOULD NOT DESTROY -- it is still billing. See $ARTIFACT_DIR/sweep.log" + echo "sweep $topology: FAIL" >> "$VERDICT" + fi + done + [ "$found" = 0 ] && log "sweep: nothing left behind" +} + +# Before the sweep, because the sweep is what destroys the state the tables are +# read from. This is the path a cancelled job takes, so it has to work on whatever +# the run got through rather than assuming a complete set. +if [ "$SUMMARY_ONLY" = 1 ]; then + publish_summary + exit 0 +fi + +# Run the sweep before the topologies as well as after: a leftover cluster from a +# killed run is both a bill and a second set of resources with our names on it. +log "artifacts in $ARTIFACT_DIR" +sweep + +if [ "$SWEEP_ONLY" = 1 ]; then + log "--sweep-only: done" + exit 0 +fi + +# Built once for every topology. A per-topology build would prove three different +# sets of bytes and could not say which one failed. +DISTRO_TARBALL="" +if [ "$SOURCE" = tree ]; then + log "building $REF" + DISTRO_TARBALL="$ARTIFACT_DIR/spinifex-distro.tar.gz" + BUILDER="$MULGA_ROOT/scripts/tofu-cluster/build-install-artifacts.sh" + [ -x "$BUILDER" ] || die "no artifact builder at $BUILDER (set MULGA_ROOT)" + # It clones each repo from GitHub rather than using the checkout beside it, so a + # ref that exists only on this workstation silently falls back to dev and the + # run would report a verdict about the wrong code. Fail on that instead. + if ! git -C "$SPINIFEX_ROOT" rev-parse --verify --quiet "refs/remotes/origin/$REF" >/dev/null \ + && ! git -C "$SPINIFEX_ROOT" ls-remote --exit-code --tags origin "$REF" >/dev/null 2>&1; then + die "$REF is not on origin: the builder clones from GitHub, so an unpushed ref would fall back to dev" + fi + if [ "$DRY_RUN" = 1 ]; then + log "dry run: would build $REF into $DISTRO_TARBALL" + else + # --skip-e2e-build: the Go suites are not run here. The workbook driver is a + # shell script, so building their binaries would add minutes and prove nothing. + "$BUILDER" "$REF" "$DISTRO_TARBALL" "$ARTIFACT_DIR/setup.sh" \ + "$ARTIFACT_DIR/spinifex-tests.tar" --skip-e2e-build \ + > "$ARTIFACT_DIR/build.log" 2>&1 \ + || die "building $REF failed; see $ARTIFACT_DIR/build.log" + log "built $(du -h "$DISTRO_TARBALL" | cut -f1) from $REF" + fi +fi + +RUN_RC=0 +for topology in $TOPOLOGIES; do + # The credential swap happens here and nowhere else, so everything downstream + # of the one validate call is unaware the topology built somewhere different. + # Always a bare `env` otherwise, because an empty array is an unbound variable + # under set -u on the bash 3.2 operators run this with. + run_env=(env) + if [ "$topology" = vm-single-principal ]; then + case "$(principal_cred_state)" in + none) + log "$topology: SKIPPED -- no OCI_PRINCIPAL_* credential, and the run's own tenancy cannot hold the dynamic group this topology needs" + echo "$topology: SKIPPED (no principal credential)" >> "$VERDICT" + continue + ;; + partial) + die "the OCI_PRINCIPAL_* credential is incomplete: set all of $PRINCIPAL_CRED_VARS or none of them" + ;; + esac + build_principal_env + run_env=(env "${PRINCIPAL_ENV[@]}") + fi + args=(--topology "$topology" --ssh-public-key "$SSH_PUBLIC_KEY" --ssh-private-key "$SSH_PRIVATE_KEY") + [ "$DRY_RUN" = 1 ] && args+=(--dry-run) + # Two separate choices. --no-external-pool is the one that forms without any + # allocator, for a tenancy whose dynamic group does not exist yet; it records + # the allocator and the workbooks as SKIPPED rather than passing them. + # + # vm-single-principal opts out of both: it sets its own credential, and a run + # of it without an allocator would exercise nothing. validate-topology.sh + # refuses that pairing, so skipping it here keeps a mixed run from aborting. + if [ "$topology" = vm-single-principal ]; then + : + elif [ "${OCI_NO_EXTERNAL_POOL:-0}" = 1 ]; then + args+=(--no-external-pool) + elif [ "${OCI_INSTANCE_PRINCIPAL:-1}" = 1 ]; then + args+=(--instance-principal) + fi + # Not under --dry-run, where the build was skipped and naming the tarball it + # would have produced fails the readable check, so every topology reported FAIL + # and the flag operators are told to run first could never pass. Still + # unconditional in a real run, so a build that produced nothing stays loud + # rather than quietly installing a release instead. + if [ -n "$DISTRO_TARBALL" ] && [ "$DRY_RUN" != 1 ]; then + args+=(--distro "$DISTRO_TARBALL" --setup-sh "$ARTIFACT_DIR/setup.sh") + fi + if [ "$SOURCE" = release ]; then + if [ -n "$INSTALL_VERSION" ]; then + args+=(--version "$INSTALL_VERSION") + else + args+=(--channel "$CHANNEL") + fi + fi + [ -n "${OCI_CREDENTIAL_HOOK:-}" ] && args+=(--credential-hook "$OCI_CREDENTIAL_HOOK") + [ "${OCI_KEEP_ON_FAIL:-0}" = 1 ] && args+=(--keep-on-fail) + [ -n "${WORKBOOKS+x}" ] && args+=(--workbooks "$WORKBOOKS") + + # go test -v markers, so the same log feeds go-junit-report and the RCA bundle + # the Go suites produce. One testcase per topology. + tname="TestOCITopology_${topology//-/_}" + start=$SECONDS + echo "=== RUN $tname" + if "${run_env[@]}" "$HERE/validate-topology.sh" "${args[@]}" 2>&1 | tee "$ARTIFACT_DIR/$topology.log"; then + printf -- '--- PASS: %s (%d.00s)\n' "$tname" "$((SECONDS - start))" + echo "$topology: PASS" >> "$VERDICT" + else + printf -- '--- FAIL: %s (%d.00s)\n' "$tname" "$((SECONDS - start))" + echo "$topology: FAIL" >> "$VERDICT" + RUN_RC=1 + fi +done + +# Again at the end, because a topology that failed its own teardown is exactly the +# case that costs money, and the verdict should say so rather than the log. +sweep + +emit_summary + + +echo +log "=== $REF on OCI ($SOURCE build$([ "$SOURCE" = release ] && { [ -n "$INSTALL_VERSION" ] && echo ", $INSTALL_VERSION" || echo ", $CHANNEL channel"; })) ===" +cat "$VERDICT" +if [ "$RUN_RC" = 0 ] && ! grep -q FAIL "$VERDICT"; then + log "PASS" + printf 'ok \te2e-oci\t%d.000s\n' "$SECONDS" +else + log "FAIL" + printf 'FAIL\te2e-oci\t%d.000s\n' "$SECONDS" +fi +exit "$RUN_RC" diff --git a/scripts/terraform/oci-spx/eip-move-test.sh b/scripts/terraform/oci-spx/eip-move-test.sh index 7b21543fe..7dfe10405 100755 --- a/scripts/terraform/oci-spx/eip-move-test.sh +++ b/scripts/terraform/oci-spx/eip-move-test.sh @@ -17,7 +17,7 @@ set -euo pipefail KEY=${KEY:-$HOME/.ssh/oci-poc.pem} OCI_BIN=${OCI_BIN:-$HOME/bin/oci} -OCI_PROFILE=${OCI_PROFILE:-apacanzset03child03} +OCI_PROFILE=${OCI_PROFILE:-DEFAULT} SUBNET=${SUBNET:-ocid1.subnet.oc1.ap-sydney-1.aaaaaaaaimrhjgsqgrfg7bnka2d3nbx2n5ss7kurcwneon22rkclqf3ypfqa} # Public address -> node name. The control plane is reached through node01. diff --git a/scripts/terraform/oci-spx/instance-principal.tf b/scripts/terraform/oci-spx/instance-principal.tf new file mode 100644 index 000000000..41019758c --- /dev/null +++ b/scripts/terraform/oci-spx/instance-principal.tf @@ -0,0 +1,44 @@ +# Lets each node authenticate to the OCI API as itself, so the external-address +# allocator needs no API key on disk. Without one of these two credential routes a +# node forms and passes every health check, then refuses every launch that wants a +# public address with InsufficientAddressCapacity and no stated cause. +# +# Only instance_principal = "create" builds these, and deliberately: a dynamic +# group and a policy are tenancy-root resources, so creating them needs rights the +# compartment-scoped user the rest of this configuration runs as does not have and +# should not be given. Create them once with a tenancy admin, then every later +# deployment uses "adopt", which references nothing and so needs no such rights. + +resource "oci_identity_dynamic_group" "nodes" { + provider = oci.home + count = var.instance_principal == "create" ? 1 : 0 + compartment_id = var.tenancy_ocid + name = "${var.deployment_name}-nodes" + description = "Spinifex nodes in the ${var.deployment_name} deployment, authenticating as instance principals." + + # Scoped to the compartment, not to instance OCIDs: nodes are replaced, and a + # rule listing them by OCID goes stale the first time one is. + matching_rule = "ALL {instance.compartment.id = '${var.compartment_ocid}'}" +} + +# Narrower than it looks. The allocator creates, moves and deletes secondary +# private IPs on a node's own VNIC and attaches public IPs to them, which is what +# these four verbs cover; nothing here grants compute, storage or identity. +resource "oci_identity_policy" "nodes" { + provider = oci.home + count = var.instance_principal == "create" ? 1 : 0 + compartment_id = var.compartment_ocid + name = "${var.deployment_name}-nodes-network" + description = "Allows Spinifex nodes to manage the private and public IPs backing external addresses." + + statements = [ + "Allow dynamic-group ${oci_identity_dynamic_group.nodes[0].name} to use vnics in compartment id ${var.compartment_ocid}", + "Allow dynamic-group ${oci_identity_dynamic_group.nodes[0].name} to manage private-ips in compartment id ${var.compartment_ocid}", + "Allow dynamic-group ${oci_identity_dynamic_group.nodes[0].name} to manage public-ips in compartment id ${var.compartment_ocid}", + + # CreatePrivateIp needs SUBNET_ATTACH and DeletePrivateIp needs SUBNET_DETACH, + # both of which only the subnets `use` verb carries. Without it every allocation + # is refused as a 404, which reads as a missing resource rather than a missing grant. + "Allow dynamic-group ${oci_identity_dynamic_group.nodes[0].name} to use subnets in compartment id ${var.compartment_ocid}", + ] +} diff --git a/scripts/terraform/oci-spx/outputs.tf b/scripts/terraform/oci-spx/outputs.tf index 51c712520..df627ab66 100644 --- a/scripts/terraform/oci-spx/outputs.tf +++ b/scripts/terraform/oci-spx/outputs.tf @@ -8,6 +8,13 @@ output "security_list_ocids" { value = { public = oci_core_security_list.public. output "compute_ocids" { value = [for instance in oci_core_instance.mulgadc : instance.id] } output "data_volume_ocids" { value = [for volume in oci_core_volume.mulgadc_data : volume.id] } +# Read back rather than assumed: both can come from a tfvars file, so this is the +# only place that knows what was actually built. The deploy driver skips the +# credential handoff on instance_principal, so a wrong guess leaves a node with no +# credential at all. +output "compute_shape" { value = var.compute_shape } +output "instance_principal" { value = var.instance_principal } + # What the Spinifex deploy path consumes. The primary VNIC is the host plane, so # these are the addresses update-nodes.sh and install-node.sh connect to. output "nodes" { diff --git a/scripts/terraform/oci-spx/provider.tf b/scripts/terraform/oci-spx/provider.tf index 894ac4a8a..fa85301f4 100644 --- a/scripts/terraform/oci-spx/provider.tf +++ b/scripts/terraform/oci-spx/provider.tf @@ -1,10 +1,25 @@ +# A runner gets the key as a value, a workstation as a path. Passing the value +# means CI never writes key material to disk, so there is nothing to leave behind +# on a shared runner and nothing to clean up after a cancelled job. provider "oci" { tenancy_ocid = var.tenancy_ocid user_ocid = var.user_ocid fingerprint = var.fingerprint - private_key_path = var.private_key_path + private_key = var.private_key != "" ? var.private_key : null + private_key_path = var.private_key == "" ? var.private_key_path : null region = var.region } -# The aliased home-region provider is gone with the identity resources it served. -# Everything here now lives in one region, in an existing compartment. +# OCI serves IAM writes from the tenancy's home region, so the dynamic group and +# policy go through this one. Defaults to var.region, which makes it identical to +# the provider above until OCI_HOME_REGION says otherwise -- so a tenancy whose +# home region is where we build is unaffected, and ours is not. +provider "oci" { + alias = "home" + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key = var.private_key != "" ? var.private_key : null + private_key_path = var.private_key == "" ? var.private_key_path : null + region = var.home_region != null && var.home_region != "" ? var.home_region : var.region +} diff --git a/scripts/terraform/oci-spx/requirements.txt b/scripts/terraform/oci-spx/requirements.txt deleted file mode 100644 index 9c1d73332..000000000 --- a/scripts/terraform/oci-spx/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Dependencies used only by scripts/oci_env.py in its isolated .venv. -oci>=2.160.0,<3.0.0 diff --git a/scripts/terraform/oci-spx/scripts/oci_env.py b/scripts/terraform/oci-spx/scripts/oci_env.py index 3d20ec8e7..a3045638a 100755 --- a/scripts/terraform/oci-spx/scripts/oci_env.py +++ b/scripts/terraform/oci-spx/scripts/oci_env.py @@ -1,5 +1,9 @@ #!/usr/bin/env python3 -"""Prepare OCI-profile Terraform environment variables in this repo's .venv. +"""Prepare OCI Terraform environment variables from a profile or the environment. + +Standard library only, deliberately. It once used the OCI SDK, which meant a +virtualenv, which meant python3-venv on every host that runs it -- and banksia +did not have it. Terraform's own provider makes the OCI calls. Examples: eval "$(python3 scripts/oci_env.py --shell)" @@ -12,63 +16,144 @@ import argparse import configparser import os from pathlib import Path +import re import shlex import subprocess import sys -import venv REPOSITORY = Path(__file__).resolve().parent.parent -VENV_PYTHON = REPOSITORY / ".venv" / "bin" / "python" -REQUIREMENTS = REPOSITORY / "requirements.txt" -REQUESTED_PROFILE = "apacanzset03child03" -FALLBACK_PROFILE = "apacanzset03child3" +# The OCI CLI's own name for "the profile when none is named", so a config written +# by `oci setup config` works with no flag. +DEFAULT_PROFILE = "DEFAULT" -def ensure_venv() -> None: - """Create, populate, then re-execute from this repository's virtualenv.""" - if Path(sys.executable).resolve() == VENV_PYTHON.resolve(): - return - if not VENV_PYTHON.exists(): - venv.EnvBuilder(with_pip=True).create(VENV_PYTHON.parent.parent) - subprocess.check_call([str(VENV_PYTHON), "-m", "pip", "install", "--quiet", "-r", str(REQUIREMENTS)]) - os.execv(str(VENV_PYTHON), [str(VENV_PYTHON), str(Path(__file__).resolve()), *sys.argv[1:]]) +def default_profile() -> str: + """The profile to read when the caller named none. + + OCI_CLI_PROFILE is the OCI CLI's own variable, so an operator who has already + selected a profile for `oci` does not select it twice. + """ + return os.environ.get("OCI_CLI_PROFILE") or DEFAULT_PROFILE + + +def has_profile(parser: configparser.RawConfigParser, name: str) -> bool: + """Whether the config holds this profile. + + DEFAULT needs its own test: configparser treats it as the fallback for every + other section rather than as a section, so has_section and sections() both + deny it exists even when `oci setup config` wrote nothing else. + """ + if name == DEFAULT_PROFILE: + return bool(parser.defaults()) + return parser.has_section(name) + + +def profile_names(parser: configparser.RawConfigParser) -> list[str]: + names = list(parser.sections()) + if parser.defaults(): + names.insert(0, DEFAULT_PROFILE) + return names def load_profile(config_path: Path, requested_profile: str) -> tuple[str, dict[str, str]]: parser = configparser.RawConfigParser() parser.read(config_path) profile = requested_profile - if not parser.has_section(profile): - if profile == REQUESTED_PROFILE and parser.has_section(FALLBACK_PROFILE): - print( - f"Profile {REQUESTED_PROFILE} not found; using {FALLBACK_PROFILE}.", - file=sys.stderr, - ) - profile = FALLBACK_PROFILE - else: - raise ValueError(f"OCI profile {profile!r} was not found in {config_path}") + # No fallback to another profile. A missing one is an error because the only + # alternative is building a cluster in whichever tenancy a different profile + # happens to point at. + if not has_profile(parser, profile): + raise ValueError( + f"OCI profile {profile!r} was not found in {config_path}; " + f"profiles present: {', '.join(profile_names(parser)) or 'none'}. " + "Name one with --profile or OCI_CLI_PROFILE." + ) - # Validate through the OCI SDK installed in the dedicated virtualenv. - import oci - - values = oci.config.from_file(str(config_path), profile) + values = {key: value.strip() for key, value in parser.items(profile)} required = ("tenancy", "user", "fingerprint", "key_file", "region") missing = [key for key in required if not values.get(key)] if missing: raise ValueError(f"Missing OCI profile values: {', '.join(missing)}") + # ~ in key_file is the OCI CLI's own convention and configparser does not expand it. + values["key_file"] = str(Path(values["key_file"]).expanduser()) + if not Path(values["key_file"]).is_file(): + raise FileNotFoundError(f"key_file in profile {profile} does not exist: {values['key_file']}") + check_credential_shape(values, source=str(config_path), names=CONFIG_SOURCE) return profile, values -def tenancy_home_region(values: dict[str, str]) -> str: - """Read the home region from OCI rather than assuming the profile region.""" - import oci +ENVIRONMENT_KEYS = ("OCI_TENANCY_OCID", "OCI_USER_OCID", "OCI_FINGERPRINT", "OCI_PRIVATE_KEY", "OCI_REGION") - subscriptions = oci.identity.IdentityClient(values).list_region_subscriptions(values["tenancy"]).data - home = next((item.region_name for item in subscriptions if item.is_home_region), None) - if not home: - raise ValueError("OCI did not return a tenancy home region") - return home + +def load_environment() -> dict[str, str] | None: + """Read the credential from the environment, the way a CI runner holds it. + + Returns None when none of the keys are set, so a workstation still falls + through to ~/.oci/config. A partial set is an error rather than a fallback: + half a credential in the environment means a secret failed to reach the job, + and silently using a different one would validate the wrong tenancy. + """ + present = [key for key in ENVIRONMENT_KEYS if os.environ.get(key)] + if not present: + return None + missing = [key for key in ENVIRONMENT_KEYS if not os.environ.get(key)] + if missing: + raise ValueError( + f"OCI credential in the environment is incomplete: {', '.join(present)} set, {', '.join(missing)} missing" + ) + key = os.environ["OCI_PRIVATE_KEY"] + # Base64 is accepted because a PEM's newlines do not survive every secret + # store. Detected by shape rather than by a second variable to set wrongly. + if "-----BEGIN" not in key: + import base64 + + key = base64.b64decode(key).decode() + if "-----BEGIN" not in key: + raise ValueError("OCI_PRIVATE_KEY is neither a PEM nor base64-encoded PEM") + # Stripped because `echo` into a secret store appends a newline, and the SDK + # then calls the value malformed without saying which one or why. + values = { + "tenancy": os.environ["OCI_TENANCY_OCID"].strip(), + "user": os.environ["OCI_USER_OCID"].strip(), + "fingerprint": os.environ["OCI_FINGERPRINT"].strip(), + "key_content": key.strip() + "\n", + "region": os.environ["OCI_REGION"].strip(), + } + check_credential_shape(values, source="the environment", names=ENVIRONMENT_SOURCE) + return values + + +# Which input to go and fix, named the way the person reading the failure set it. +ENVIRONMENT_SOURCE = { + "tenancy": "OCI_TENANCY_OCID", + "user": "OCI_USER_OCID", + "fingerprint": "OCI_FINGERPRINT", + "key_content": "OCI_PRIVATE_KEY", + "region": "OCI_REGION", +} +CONFIG_SOURCE = {key: key for key in ENVIRONMENT_SOURCE} | {"key_content": "key_file"} +FINGERPRINT = re.compile(r"^[0-9a-f]{2}(:[0-9a-f]{2}){15}$") + + +def check_credential_shape(values: dict[str, str], source: str, names: dict[str, str]) -> None: + """Reject a malformed credential here rather than as an OCI 401 later. + + Every fault names the input the reader set, because the alternative is a + 401 forty seconds into a Terraform run, which says nothing about which of + five values is wrong. A newline from `echo` into a secret store is the + common one, and it is stripped before this runs. + """ + faults = [] + for field in ("tenancy", "user"): + if not values.get(field, "").startswith("ocid1."): + faults.append(f"{names[field]} is not an OCID") + if not FINGERPRINT.match(values.get("fingerprint", "")): + faults.append(f"{names['fingerprint']} is not a 16-byte hex fingerprint") + if not values.get("region"): + faults.append(f"{names['region']} is empty") + if faults: + raise ValueError(f"the OCI credential in {source} is not usable: {', '.join(faults)}") def terraform_environment( @@ -79,14 +164,22 @@ def terraform_environment( ssh_private_key_path: str | None, ) -> dict[str, str]: environment = { - "OCI_CLI_PROFILE": profile, "TF_VAR_tenancy_ocid": values["tenancy"], "TF_VAR_user_ocid": values["user"], "TF_VAR_fingerprint": values["fingerprint"], - "TF_VAR_private_key_path": values["key_file"], "TF_VAR_region": region_override or values["region"], - "TF_VAR_home_region": tenancy_home_region(values), + # A tenancy's home region is a fixed property of the tenancy, so it is an + # input rather than something to rediscover on every run. IAM resources + # have to be created against it; see the phase 12 note in the plan. + "TF_VAR_home_region": os.environ.get("OCI_HOME_REGION") or region_override or values["region"], } + # One of the two, never both: the provider rejects a key given twice, and the + # variable validation in variables.tf says so before OCI is called at all. + if values.get("key_content"): + environment["TF_VAR_private_key"] = values["key_content"] + else: + environment["OCI_CLI_PROFILE"] = profile + environment["TF_VAR_private_key_path"] = values["key_file"] if ssh_public_key_path: key_path = Path(ssh_public_key_path).expanduser().resolve() if not key_path.is_file(): @@ -102,7 +195,11 @@ def terraform_environment( def main() -> int: arg_parser = argparse.ArgumentParser() - arg_parser.add_argument("--profile", default=REQUESTED_PROFILE) + arg_parser.add_argument( + "--profile", + default=default_profile(), + help="Profile in ~/.oci/config. Defaults to $OCI_CLI_PROFILE, else DEFAULT.", + ) arg_parser.add_argument("--region") arg_parser.add_argument( "--ssh-public-key-path", @@ -118,11 +215,21 @@ def main() -> int: if args.shell and args.command: arg_parser.error("--shell and a command cannot be used together") - ensure_venv() - config_path = Path(os.environ.get("OCI_CONFIG_FILE", Path.home() / ".oci" / "config")) - if not config_path.is_file(): - raise FileNotFoundError(f"OCI configuration was not found at {config_path}") - profile, values = load_profile(config_path, args.profile) + values = load_environment() + if values is not None: + profile = "environment" + # Checked here, before anything calls OCI: --shell prints to stdout, which + # in CI is the job log, and this route holds the PEM itself. + if args.shell: + raise ValueError("--shell cannot be used with a credential from the environment: it would print the key") + else: + config_path = Path(os.environ.get("OCI_CONFIG_FILE", Path.home() / ".oci" / "config")) + if not config_path.is_file(): + raise FileNotFoundError( + f"OCI configuration was not found at {config_path} and the environment holds no credential" + f" (set {', '.join(ENVIRONMENT_KEYS)})" + ) + profile, values = load_profile(config_path, args.profile) environment = terraform_environment( profile, values, @@ -137,7 +244,7 @@ def main() -> int: return 0 if not args.command: - print(f"Loaded OCI profile {profile} for region {environment['TF_VAR_region']}; virtualenv: {VENV_PYTHON.parent.parent}") + print(f"Loaded OCI profile {profile} for region {environment['TF_VAR_region']}") return 0 command = args.command[1:] if args.command[0] == "--" else args.command @@ -145,7 +252,12 @@ def main() -> int: raise ValueError("A command is required after --") child_environment = os.environ.copy() child_environment.update(environment) - print(f"Running with OCI profile {profile} in {environment['TF_VAR_region']}: {' '.join(map(shlex.quote, command))}") + # Stderr, because stdout belongs to the wrapped command: a banner there is + # indistinguishable from output and corrupts anything that captures it. + print( + f"Running with OCI profile {profile} in {environment['TF_VAR_region']}: {' '.join(map(shlex.quote, command))}", + file=sys.stderr, + ) return subprocess.call(command, cwd=REPOSITORY, env=child_environment) diff --git a/scripts/terraform/oci-spx/setup-identity.sh b/scripts/terraform/oci-spx/setup-identity.sh new file mode 100755 index 000000000..e8ea4b820 --- /dev/null +++ b/scripts/terraform/oci-spx/setup-identity.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# setup-identity.sh -- create the dynamic group and policy that let Spinifex nodes +# authenticate to the OCI API as themselves, so no API key is installed on any node. +# +# Run once per tenancy, with a tenancy-admin principal. Every deployment afterwards +# passes instance_principal = "adopt", which references these by nothing at all: the +# matching rule covers the whole compartment, so it names no instance and needs no +# OCID from here. +# +# Its own state file, deliberately. validate-topology.sh destroys its state at the +# end of every run, and these two resources outlive every topology -- holding them +# in a per-topology state would let a nightly teardown delete the tenancy's policy. +# +# MUST MAINTAIN BASH 3.X COMPATABILITY. Operators run this on macOS, which ships +# bash 3.2: no declare -A, no mapfile, and under set -u an empty "${arr[@]}" is an +# unbound variable, so guard every such expansion with ${#arr[@]}. +set -uo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +STATE_DIR="${OCI_STATE_ROOT:-$HERE}/.identity" +SSH_PUBLIC_KEY="${OCI_SSH_PUBLIC_KEY:-$HOME/.ssh/oci-spx.pub}" +DESTROY=0 +DRY_RUN=0 + +log() { printf '[setup-identity] %s\n' "$*"; } +die() { + printf '[setup-identity] ERROR: %s\n' "$*" >&2 + exit 1 +} + +usage() { + cat >&2 </dev/null || die "terraform init failed" + +if [ "$DESTROY" = 1 ]; then + log "destroying the dynamic group and policy" + tf destroy -auto-approve -var 'instance_principal=create' \ + -state "$STATE_DIR/terraform.tfstate" "${targets[@]}" \ + || die "destroy failed" + log "removed. Any node configured for instance principal can no longer allocate an address." + exit 0 +fi + +args=(-var 'instance_principal=create' -state "$STATE_DIR/terraform.tfstate" "${targets[@]}") + +if [ "$DRY_RUN" = 1 ]; then + log "dry run: planning the dynamic group and policy only" + tf plan "${args[@]}" || die "plan failed" + exit 0 +fi + +log "creating the dynamic group and policy (tenancy-root resources)" +tf apply -auto-approve "${args[@]}" || die "apply failed -- a tenancy-admin principal is required" + +log "done. State in $STATE_DIR/terraform.tfstate -- keep it, it is the only record." +log "Deployments can now use instance_principal = \"adopt\" with a compartment-scoped user." diff --git a/scripts/terraform/oci-spx/spx-oci-config.sh b/scripts/terraform/oci-spx/spx-oci-config.sh new file mode 100755 index 000000000..1222bd0c0 --- /dev/null +++ b/scripts/terraform/oci-spx/spx-oci-config.sh @@ -0,0 +1,268 @@ +#!/usr/bin/env bash +# Installs the OCI credential the external-address allocator authenticates with +# on every node, as /etc/spinifex/oci/{config,oci_api_key.pem}. +# +# Usage: spx-oci-config.sh [--dry-run] ... +# +# The argument shape is validate-topology.sh's credential-hook contract, so this +# drops straight into --credential-hook or $OCI_CREDENTIAL_HOOK. +# +# MUST MAINTAIN BASH 3.X COMPATABILITY. Operators run this on macOS, which ships +# bash 3.2: no declare -A, no mapfile, and under set -u an empty "${arr[@]}" is an +# unbound variable, so guard every such expansion with ${#arr[@]}. +set -euo pipefail + +HERE=$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd) +SELF="$HERE/$(basename -- "$0")" + +# What the allocator reads, from the pool fragment Terraform stages on each node. +# The config path and the profile name are the contract; the key filename is only +# ever named by key_file inside that config. +REMOTE_DIR=/etc/spinifex/oci +REMOTE_CONFIG="$REMOTE_DIR/config" +REMOTE_PEM="$REMOTE_DIR/oci_api_key.pem" +REMOTE_PROFILE=spinifex + +SPX_KEY="${OCI_SPX_KEY:-$HOME/.oci/oci_api_key_spx.pem}" +SPX_PROFILE="${OCI_SPX_PROFILE:-spinifex}" +SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null + -o LogLevel=ERROR -o BatchMode=yes -o ConnectTimeout=15) +DRY_RUN=0 + +die() { echo "$(basename -- "$0"): $*" >&2; exit 1; } +log() { echo "[spx-oci-config] $*"; } + +usage() { + sed -n '2,8p' "$SELF" | sed 's/^# \{0,1\}//' + cat <<'EOF' + +Options: + --dry-run Resolve and validate the credential, print what would be written, + and touch no host. + -h, --help This text. + +The credential is resolved in this order, and the first one that is complete wins: + + 1. $OCI_SPX_PRIVATE_KEY with $OCI_SPX_USER_OCID, $OCI_SPX_FINGERPRINT, + $OCI_SPX_TENANCY_OCID and $OCI_SPX_REGION. A dedicated narrow credential, + which is the shape a CI secret store holds. A partial set is an error. + 2. The [spinifex] profile in ~/.oci/config, or $OCI_SPX_PROFILE. + 3. ~/.oci/oci_api_key_spx.pem, or $OCI_SPX_KEY, with the user, tenancy and + region of the profile Terraform itself uses. The fingerprint is derived + from the key rather than read from the config. + 4. The credential Terraform builds with. This works and is wider than the + allocator needs, so it warns. + +Rules 2 to 4 resolve the Terraform profile through scripts/oci_env.py, so the +precedence is the same one the apply used and the two cannot disagree. +EOF +} + +while [ "$#" -gt 0 ]; do + case "$1" in + --dry-run) DRY_RUN=1; shift ;; + -h|--help) usage; exit 0 ;; + --) shift; break ;; + -*) die "unknown option: $1" ;; + *) break ;; + esac +done + +# oci_env.py owns credential resolution for this directory: the environment route +# a runner uses, ~/.oci/config otherwise, a partial set treated as an error, and +# the shape checks. Re-exec under it rather than reimplement any of that here. +if [ -z "${SPX_OCI_ENV_READY:-}" ]; then + [ -x "$HERE/scripts/oci_env.py" ] || [ -r "$HERE/scripts/oci_env.py" ] \ + || die "scripts/oci_env.py was not found next to $SELF" + if [ "$DRY_RUN" = 1 ]; then + exec env SPX_OCI_ENV_READY=1 python3 "$HERE/scripts/oci_env.py" -- "$SELF" --dry-run "$@" + fi + exec env SPX_OCI_ENV_READY=1 python3 "$HERE/scripts/oci_env.py" -- "$SELF" "$@" +fi + +# The same argument shape in both modes, so a --dry-run rehearsal and the real run +# differ by one flag. Only the checks that need a host are skipped. +ssh_key="${1:?usage: $(basename -- "$0") [--dry-run] ...}" +shift +if [ "$DRY_RUN" != 1 ]; then + [ "$#" -gt 0 ] || die "no hosts given" + [ -r "$ssh_key" ] || die "SSH private key is not readable: $ssh_key" +fi + +# A key's fingerprint is a property of the key. Deriving it beats trusting a +# config field, because a stale fingerprint beside a good key is a 401 that names +# neither. +fingerprint_of() { + openssl rsa -pubout -outform DER -in "$1" 2>/dev/null \ + | openssl md5 -c 2>/dev/null | awk '{print $NF}' +} + +require_complete() { + local source="$1" missing="" name + shift + for name in "$@"; do + [ -n "${!name:-}" ] || missing="$missing $name" + done + [ -z "$missing" ] || die "$source is incomplete, missing:$missing" +} + +key_pem="" # the PEM itself, never a path, so nothing is read twice +oci_user="" +oci_fingerprint="" +oci_tenancy="" +oci_region="" +source_name="" + +if [ -n "${OCI_SPX_PRIVATE_KEY:-}${OCI_SPX_USER_OCID:-}${OCI_SPX_FINGERPRINT:-}${OCI_SPX_TENANCY_OCID:-}${OCI_SPX_REGION:-}" ]; then + require_complete "the OCI_SPX_* credential in the environment" \ + OCI_SPX_PRIVATE_KEY OCI_SPX_USER_OCID OCI_SPX_FINGERPRINT \ + OCI_SPX_TENANCY_OCID OCI_SPX_REGION + # Base64 accepted by shape, because a PEM's newlines do not survive every + # secret store, and detected rather than selected by a second variable. + case "$OCI_SPX_PRIVATE_KEY" in + *-----BEGIN*) key_pem="$OCI_SPX_PRIVATE_KEY" ;; + *) key_pem=$(printf '%s' "$OCI_SPX_PRIVATE_KEY" | tr -d ' \n' | base64 -d 2>/dev/null) || true ;; + esac + case "$key_pem" in + *-----BEGIN*) ;; + *) die "OCI_SPX_PRIVATE_KEY is neither a PEM nor a base64-encoded PEM" ;; + esac + oci_user="$OCI_SPX_USER_OCID" + oci_fingerprint="$OCI_SPX_FINGERPRINT" + oci_tenancy="$OCI_SPX_TENANCY_OCID" + oci_region="$OCI_SPX_REGION" + source_name="the OCI_SPX_* environment credential" + +elif [ -r "$HOME/.oci/config" ] && python3 - "$SPX_PROFILE" <<'PY' +import configparser, pathlib, sys +cfg = configparser.RawConfigParser() +cfg.read(pathlib.Path.home() / ".oci" / "config") +sys.exit(0 if cfg.has_section(sys.argv[1]) else 1) +PY +then + # One pipe-separated line read into named variables, rather than eval of + # generated shell: none of these fields can contain a pipe. + profile_fields=$(python3 - "$SPX_PROFILE" <<'PY' +import configparser, pathlib, sys +cfg = configparser.RawConfigParser() +cfg.read(pathlib.Path.home() / ".oci" / "config") +section = dict(cfg[sys.argv[1]]) +fields = ("user", "fingerprint", "tenancy", "region", "key_file") +missing = [f for f in fields if not section.get(f)] +if missing: + sys.exit(f"profile {sys.argv[1]} has no {', '.join(missing)}") +print("|".join(section[f] for f in fields)) +PY +) || die "could not read the [$SPX_PROFILE] profile from ~/.oci/config" + IFS='|' read -r profile_user profile_fingerprint profile_tenancy \ + profile_region profile_key_file < "$pem_tmp" ) +derived=$(fingerprint_of "$pem_tmp") +[ -n "$derived" ] || die "$source_name does not hold a usable RSA private key" +[ "$derived" = "$oci_fingerprint" ] \ + || die "the key from $source_name has fingerprint $derived, but the credential names $oci_fingerprint" + +log "credential: $source_name" +log "user: $oci_user" +log "fingerprint: $oci_fingerprint" +log "region: $oci_region" + +if [ "$DRY_RUN" = 1 ]; then + log "would write $REMOTE_CONFIG and $REMOTE_PEM as 0640 root:spinifex on:${*:-" (no hosts given)"}" + exit 0 +fi + +# base64 so the PEM survives two shells, and carried in the stdin stream rather +# than in the command: an argument is readable from ps on the node for the length +# of the call, on a host that runs other people's guests. +key_b64=$(printf '%s\n' "$key_pem" | base64 | tr -d '\n') + +install_on() { + # Unquoted heredoc on purpose: the key and the four credential fields are + # expanded here, so nothing in it is expanded on the node. + # shellcheck disable=SC2087 + ssh -i "$ssh_key" "${SSH_OPTS[@]}" "ubuntu@$1" bash -s </dev/null \ + || { echo "no spinifex group yet, so this ran before the install" >&2; exit 3; } +sudo install -d -m 0750 -o root -g spinifex $REMOTE_DIR +# install /dev/null first, then write: the file never exists at a wider mode, and +# sudo's umask is not the caller's. +sudo install -m 0640 -o root -g spinifex /dev/null $REMOTE_PEM +base64 -d <<'PEM_B64' | sudo tee $REMOTE_PEM >/dev/null +$key_b64 +PEM_B64 +sudo install -m 0640 -o root -g spinifex /dev/null $REMOTE_CONFIG +sudo tee $REMOTE_CONFIG >/dev/null <<'CONFIG' +[$REMOTE_PROFILE] +user=$oci_user +fingerprint=$oci_fingerprint +tenancy=$oci_tenancy +region=$oci_region +key_file=$REMOTE_PEM +CONFIG +REMOTE +} + +# Every host is attempted and the failures are named. Stopping at the first leaves +# a half-credentialled cluster and a log that does not say which half. +failed="" +for host in "$@"; do + log "installing the OCI credential on $host" + install_on "$host" || failed="$failed $host" +done + +[ -z "$failed" ] || die "failed on:$failed" +log "credential installed on $# host(s)" diff --git a/scripts/terraform/oci-spx/validate-topology.sh b/scripts/terraform/oci-spx/validate-topology.sh new file mode 100755 index 000000000..5567336c4 --- /dev/null +++ b/scripts/terraform/oci-spx/validate-topology.sh @@ -0,0 +1,853 @@ +#!/bin/bash +# Builds one OCI topology from nothing, proves Spinifex works on it, and destroys +# it again. Three topologies, because each breaks differently: bare metal presents +# VNICs unlike a VM, a single node has no Geneve underlay to get wrong, and only a +# cluster exercises RAFT, the gateway chassis and cross-node allocation. +# +# Every run is build-prove-destroy. A topology that cannot be torn down is half +# proved, so the teardown decides the verdict and runs even on failure. +# +# MUST MAINTAIN BASH 3.X COMPATABILITY. Operators run this on macOS, which ships +# bash 3.2: no declare -A, no mapfile, and under set -u an empty "${arr[@]}" is an +# unbound variable, so guard every such expansion with ${#arr[@]}. +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$HERE/../../.." && pwd)" + +TOPOLOGY="" +SSH_PUBLIC_KEY="$HOME/.ssh/oci-spx.pub" +SSH_PRIVATE_KEY="$HOME/.ssh/oci-spx" +KEEP=0 +KEEP_ON_FAIL=0 +SKIP_WORKLOAD=0 +SKIP_POOL=0 +DRY_RUN=0 +DESTROY_ONLY=0 +INSTANCE_PRINCIPAL=0 +CREDENTIAL_HOOK="${OCI_CREDENTIAL_HOOK:-}" +# Empty means oci_env.py chooses, which is $OCI_CLI_PROFILE, then the reference +# tenancy, then DEFAULT. Named here so a deployment can say which tenancy it is in. +OCI_PROFILE="${OCI_PROFILE:-}" +DISTRO="" +SETUP_SH="" +# Empty means the driver's own default list. Unset is distinguishable from empty, +# so --workbooks "" can deliberately mean "run none". +WORKBOOKS_SET=0 +CHANNEL=latest +INSTALL_VERSION="" +WORKBOOKS="" +# Declared here, not at the apply that fills it: the EXIT trap reads it, and under +# set -u an unset array is an error rather than an empty one. +HOSTS=() + +TOPOLOGIES="bm vm-single vm-multi vm-single-principal" + +# What a topology is worth when nothing says otherwise, so a CI run of a named +# topology is the same every time. Supplied as TF_VAR_, which terraform.auto.tfvars +# outranks, so a deployment sizes itself in that file and no flag has to carry it. +# +# TOPO_FORCE_PRINCIPAL is the exception: vm-single-principal exists to exercise +# instance-principal authentication, so the credential is the topology rather than +# a separate switch that could be left at the other value. +# +# A case rather than an associative array: macOS ships bash 3.2, where declare -A +# is an indexed assignment and the key is read as an arithmetic variable. +topo_defaults() { + TOPO_FORCE_PRINCIPAL=0 + case "$1" in + bm) TOPO_DEFAULT_SHAPE="BM.Standard.E2.64"; TOPO_DEFAULT_NODES=1 ;; + vm-single) TOPO_DEFAULT_SHAPE="VM.Standard.E6.Flex"; TOPO_DEFAULT_NODES=1 ;; + vm-multi) TOPO_DEFAULT_SHAPE="VM.Standard.E6.Flex"; TOPO_DEFAULT_NODES=3 ;; + vm-single-principal) + # Its own tenancy carries its own service limits, so the shape every + # other topology uses can have zero quota there and fail the apply + # before a single thing about the principal has been proved. + TOPO_DEFAULT_SHAPE="${OCI_PRINCIPAL_SHAPE:-VM.Standard.E6.Flex}" + TOPO_DEFAULT_NODES=1 + TOPO_FORCE_PRINCIPAL=1 ;; + *) return 1 ;; + esac +} + +log() { printf '[validate-%s] %s\n' "${TOPOLOGY:-?}" "$*"; } +die() { + printf '[validate-%s] ERROR: %s\n' "${TOPOLOGY:-?}" "$*" >&2 + exit 1 +} + +usage() { + cat >&2 < [options] + +Builds the topology, installs Spinifex, forms the cluster, runs a Terraform +workbook against it, then destroys everything. + + --topology Required. No default: a command aimed at the wrong + topology is the easiest expensive mistake here. + vm-single-principal is vm-single authenticating as the + instance, and implies --instance-principal. + --ssh-public-key PATH Public half installed on each node. Default $SSH_PUBLIC_KEY + --ssh-private-key PATH Private half used to reach them. Default $SSH_PRIVATE_KEY + --instance-principal Configure the pool with oci_auth="instance_principal" + instead of a key file. Needs the dynamic group and + policy to exist already; see instance-principal.tf. + Not needed when instance_principal is set in your + tfvars, which this reads; the flag outranks it. + --credential-hook PATH Executable run after formation, before the pool, as + "hook ...". Where an API-key deployment + installs its credential. Default \$OCI_CREDENTIAL_HOOK. + --oci-profile NAME Profile in ~/.oci/config that Terraform builds with. + Default \$OCI_PROFILE, else \$OCI_CLI_PROFILE, else the + reference tenancy, else DEFAULT. A name that is passed + and absent is an error, never a fallback. + --workbooks LIST Space-separated workbooks for the published driver to + run on the cluster. Empty means run none; omitted means + the driver's own default list. + --version TAG Install this exact release tag. Preferred over + --channel dev for anything repeatable: a tag resolves + by redirect, while the dev channel resolves through a + rate-limited GitHub API call that 404s when it trips. + --distro PATH Install this distro tarball instead of the published + release, so what is proved is the ref it was built from. + --setup-sh PATH setup.sh to pair with --distro. Both or neither. + --no-external-pool Form without an OCI credential: no external pool and no + allocator gate. Implies --skip-workload, because a guest + with no public address proves nothing a customer wants. + --skip-workload Form and verify only; launch no guests. + --keep Leave the infrastructure up. Implies no verdict. + --keep-on-fail Destroy on success, leave a failure up to inspect. + --destroy-only Destroy whatever this topology's state holds, then stop. + --dry-run Print the plan and the per-node steps, change nothing. +EOF + exit 2 +} + +while [ $# -gt 0 ]; do + case "$1" in + --topology) TOPOLOGY="${2:?}"; shift 2 ;; + --ssh-public-key) SSH_PUBLIC_KEY="${2:?}"; shift 2 ;; + --ssh-private-key) SSH_PRIVATE_KEY="${2:?}"; shift 2 ;; + --workbooks) WORKBOOKS_SET=1; WORKBOOKS="${2-}"; shift 2 ;; + --channel) CHANNEL="${2-}"; shift 2 ;; + --version) INSTALL_VERSION="${2:?}"; shift 2 ;; + --distro) DISTRO="${2:?}"; shift 2 ;; + --setup-sh) SETUP_SH="${2:?}"; shift 2 ;; + --instance-principal) INSTANCE_PRINCIPAL=1; shift ;; + --credential-hook) CREDENTIAL_HOOK="${2:?}"; shift 2 ;; + --oci-profile) OCI_PROFILE="${2:?}"; shift 2 ;; + --no-external-pool) SKIP_POOL=1; SKIP_WORKLOAD=1; shift ;; + --skip-workload) SKIP_WORKLOAD=1; shift ;; + --keep) KEEP=1; shift ;; + --keep-on-fail) KEEP_ON_FAIL=1; shift ;; + --destroy-only) DESTROY_ONLY=1; shift ;; + --dry-run) DRY_RUN=1; shift ;; + -h | --help) usage ;; + *) die "unknown option $1" ;; + esac +done + +[ -n "$TOPOLOGY" ] || usage +topo_defaults "$TOPOLOGY" || die "unknown topology $TOPOLOGY; one of: $TOPOLOGIES" +[ -r "$SSH_PUBLIC_KEY" ] || die "no readable SSH public key at $SSH_PUBLIC_KEY" +[ -r "$SSH_PRIVATE_KEY" ] || die "no readable SSH private key at $SSH_PRIVATE_KEY" +# Both or neither: a distro with the published setup.sh installs one ref's bytes +# with another's layout, and that is a cluster nobody can reason about. +if [ -n "$DISTRO" ] || [ -n "$SETUP_SH" ]; then + [ -r "$DISTRO" ] || die "--distro is not readable: '$DISTRO'" + [ -r "$SETUP_SH" ] || die "--setup-sh is not readable: '$SETUP_SH'" +fi + +if [ "$TOPO_FORCE_PRINCIPAL" = 1 ]; then + INSTANCE_PRINCIPAL=1 + # The pool is the whole point of this topology: with no allocator built, the + # credential is never used and a green run says nothing about it. That is + # exactly how the auth branch stayed broken through passing nightlies. + [ "$SKIP_POOL" != 1 ] \ + || die "--no-external-pool makes $TOPOLOGY meaningless: the allocator is what exercises the instance principal, so a run without it proves nothing" +fi + +# Terraform's own order, as far as this script needs it: the last assignment across +# terraform.tfvars then *.auto.tfvars alphabetically is the one that applies. Read +# because the credential-hook gate has to run before the apply spends anything; the +# apply's own output is checked against this afterwards. +tfvars_instance_principal() { + local file mode="" found="" + for file in "$HERE/terraform.tfvars" "$HERE"/*.auto.tfvars; do + [ -r "$file" ] || continue + mode=$(sed -n 's/^[[:space:]]*instance_principal[[:space:]]*=[[:space:]]*"\([a-z]*\)".*/\1/p' \ + "$file" | tail -1) + [ -n "$mode" ] && found="$mode" + done + [ -n "$found" ] || return 1 + printf '%s\n' "$found" +} + +# adopt, never create: this script's state is destroyed at the end of every run, and +# the dynamic group and policy outlive every topology. setup-identity.sh owns them. +# +# A flag goes in as -var and outranks the tfvars, because it is a choice about this +# run. Without one the deployment's own tfvars decides, so a guide can set the +# credential in the file it already writes and no flag has to carry it. +tf_principal_var=() +if [ "$INSTANCE_PRINCIPAL" = 1 ]; then + PRINCIPAL_MODE=adopt + tf_principal_var=(-var "instance_principal=$PRINCIPAL_MODE") +else + PRINCIPAL_MODE="$(tfvars_instance_principal || echo off)" +fi + +# What the apply actually built, filled in from the hosts_file output once it has. +# Until then these are what the topology asked for, which is all there is to say. +SHAPE="$TOPO_DEFAULT_SHAPE" +NODES="$TOPO_DEFAULT_NODES" +# Outside the checkout on a persistent runner, because actions/checkout runs +# git clean -ffdx: it would delete the Terraform state of a killed run before the +# sweep could read it, leaving instances running that nothing can find. +STATE_ROOT="${OCI_STATE_ROOT:-$HERE}" +mkdir -p "$STATE_ROOT" +STATE_DIR="$STATE_ROOT/.validate-$TOPOLOGY" +RESULTS="$STATE_DIR/results.txt" + +# Tab-separated siblings of the human block, for the run-page tables. Written here +# rather than parsed out of the log later: the status of a gate is then a field +# this script sets, not a regex over prose that reads fine and matches wrong. +RESULTS_TSV="$STATE_DIR/results.tsv" +WORKBOOKS_TSV="$STATE_DIR/workbooks.tsv" + +# A separate state directory per topology, so two topologies can be built from one +# checkout without one destroying the other's instances. +tf() { + # The topology's shape and count go in as TF_VAR_, which is the weakest source + # Terraform reads: a terraform.auto.tfvars in the checkout outranks it, so a + # deployment sizes itself in that file and the topology only supplies the + # default a CI run wants. + TF_VAR_compute_shape="$TOPO_DEFAULT_SHAPE" TF_VAR_node_count="$TOPO_DEFAULT_NODES" \ + python3 "$HERE/scripts/oci_env.py" --ssh-public-key-path "$SSH_PUBLIC_KEY" \ + ${OCI_PROFILE:+--profile "$OCI_PROFILE"} -- \ + terraform -chdir="$HERE" "$@" +} + +# terraform output takes -state but not -var, so the two sets are kept apart. They +# were one set once, and the -var made output fail into the default state file. +tf_state=(-state "$STATE_DIR/terraform.tfstate") +tf_vars=("${tf_state[@]}") +# Expanded only when it holds something. bash before 4.4, which is what macOS +# ships, calls "${arr[@]}" on an empty array an unbound variable under set -u, and +# tf_principal_var is empty on every run that did not pass --instance-principal. +if [ "${#tf_principal_var[@]}" -gt 0 ]; then + tf_vars=("${tf_principal_var[@]}" "${tf_vars[@]}") +fi + +ssh_node() { + local host="$1" + shift + # LogLevel=ERROR: the host-key warning is unavoidable with a throwaway known-hosts + # file, and it lands in the middle of whatever the remote command reported. + ssh -i "$SSH_PRIVATE_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -o LogLevel=ERROR -o BatchMode=yes -o ConnectTimeout=15 "ubuntu@$host" "$@" +} + +# record [detail] +# The node's own account of a failed run. A workbook's log says which API call +# failed; only the journal says why, and the nodes are destroyed minutes later. +# Warnings first because that is where a swallowed error surfaces, then a bounded +# tail for context -- unbounded, a multi-hour suite's journal dwarfs the artifact. +capture_journals() { + local host + # A failure before the apply leaves no hosts, and on bash before 4.4 iterating + # the empty array is an unbound-variable error rather than zero passes. + [ "${#HOSTS[@]}" -gt 0 ] || return 0 + for host in "${HOSTS[@]}"; do + ssh_node "$host" ' + echo "=== spinifex, warning and above ===" + sudo journalctl -u "spinifex-*" --since -4h --priority=warning --no-pager | tail -2000 + echo "=== spinifex, all priorities, last 2000 lines ===" + sudo journalctl -u "spinifex-*" --since -4h --no-pager | tail -2000 + ' > "$STATE_DIR/journal-$host.log" 2>&1 || log "could not collect the journal from $host" + done +} + +record() { + local gate="$1" status="$2" detail="${3-}" + printf '%s: %s%s\n' "$gate" "$status" "${detail:+ $detail}" >> "$RESULTS" + printf '%s\t%s\t%s\n' "$gate" "$status" "$detail" >> "$RESULTS_TSV" +} + +# The driver's per-workbook lines, which are go test's own shape because +# go-junit-report consumes them downstream. A workbook the driver never reached +# is absent from its log and so absent here, which the summary renders as a row +# rather than dropping — a missing row reads as a pass. +record_workbooks() { + local log="$1" + [ -r "$log" ] || return 0 + sed -n 's/^--- \(PASS\|FAIL\): TestTofuWorkbook_\([A-Za-z0-9_]*\) (\([0-9]*\)\.[0-9]*s)$/\2\t\1\t\3/p' \ + "$log" | tr '_' '-' > "$WORKBOOKS_TSV" +} + +# Teardown is the last assertion, not cleanup: a workbook or a topology that +# cannot be destroyed is a defect, and it has been one before. +DESTROY_RC="" +destroy_topology() { + log "destroying" + if tf destroy -auto-approve -no-color "${tf_vars[@]}" > "$STATE_DIR/destroy.log" 2>&1; then + DESTROY_RC=0 + record destroy PASS + else + DESTROY_RC=1 + record destroy FAIL "see $STATE_DIR/destroy.log" + log "TEARDOWN FAILED — resources may still be billing. $STATE_DIR/destroy.log" + fi +} + +cleanup() { + local rc=$? + if [ "$KEEP" = 1 ]; then + log "--keep: leaving the infrastructure up, no verdict recorded" + # The command to get in, printed rather than left to be assembled from an + # address elsewhere in the log. HOSTS is empty if we never got as far as + # the apply, which is why this is guarded rather than assumed. + if [ "${#HOSTS[@]}" -gt 0 ]; then + # ~ rather than the expanded path, so the line is the same on every + # machine and reads as something a person would type. + local key="$SSH_PRIVATE_KEY" + case "$key" in "$HOME"/*) key="~${key#"$HOME"}" ;; esac + log "ssh in with: ssh -i $key ubuntu@${HOSTS[0]}" + log "destroy it with: $0 --topology $TOPOLOGY --destroy-only" + fi + return + fi + # Only on a failure, and said out loud: the cost of forgetting is an OCI bare + # metal host running overnight. + if [ "$KEEP_ON_FAIL" = 1 ] && [ "$rc" != 0 ]; then + log "--keep-on-fail: $TOPOLOGY FAILED and is being left up. IT IS STILL BILLING." + log "destroy it with: $0 --topology $TOPOLOGY --destroy-only" + verdict "$rc" + return + fi + [ "$DRY_RUN" = 1 ] && return + destroy_topology + verdict "$rc" +} + +verdict() { + local run_rc="$1" + echo + log "=== $TOPOLOGY ($SHAPE, $NODES node(s)) ===" + [ -r "$RESULTS" ] && cat "$RESULTS" + if [ "$run_rc" = 0 ] && [ "$DESTROY_RC" = 0 ]; then + log "PASS" + else + log "FAIL" + fi +} + +mkdir -p "$STATE_DIR" + +if [ "$DESTROY_ONLY" = 1 ]; then + log "destroy only: whatever $STATE_DIR/terraform.tfstate holds" + destroy_topology + [ "$DESTROY_RC" = 0 ] || exit 1 + exit 0 +fi + +: > "$RESULTS" +: > "$RESULTS_TSV" +: > "$WORKBOOKS_TSV" + +# Last run's logs go before this one's first line, so what is left in here always +# describes the run that is starting. Without this a topology keeps logs that read +# as current, and anything collecting the directory publishes them as this run's. +# Named globs rather than a find: the tfstate is how the sweep finds hosts to +# destroy, so what is removed here has to be readable at a glance. +# :? so an unset STATE_DIR stops the shell rather than expanding to /*.log. +rm -f "${STATE_DIR:?}"/*.log "${STATE_DIR:?}"/nodes.txt "${STATE_DIR:?}"/cloudinit-*.txt + +log "$SHAPE, $NODES node(s), state in $STATE_DIR" + +# Checked here, not where the hook is run: nothing about it depends on the apply, and +# the run is otherwise forty minutes and a bare-metal bill from discovering that the +# path in a CI variable does not exist on this runner. +if [ "$SKIP_POOL" != 1 ] && [ "$PRINCIPAL_MODE" = off ]; then + [ -n "$CREDENTIAL_HOOK" ] \ + || die "this deployment authenticates with an API key and no credential hook is set, so no node could reach the OCI API; set --credential-hook or OCI_CREDENTIAL_HOOK, or use an instance principal" + [ -x "$CREDENTIAL_HOOK" ] || die "credential hook is not executable: $CREDENTIAL_HOOK" +fi + +# The directory's own terraform.tfstate belongs to hand-driven runs, not to a +# topology, and an instance left in it is both a bill and a name that collides +# with ours in the console. Say so rather than letting it be a surprise. +if [ -s "$HERE/terraform.tfstate" ]; then + stray="$(python3 -c ' +import json, sys +state = json.load(open(sys.argv[1])) +for res in state.get("resources", []): + if res["type"] != "oci_core_instance": + continue + for inst in res["instances"]: + attrs = inst["attributes"] + if attrs.get("state") not in ("TERMINATED", None): + print(attrs.get("display_name"), attrs.get("shape"), attrs.get("state"), attrs.get("public_ip")) +' "$HERE/terraform.tfstate" 2>/dev/null || true)" + [ -n "$stray" ] && log "NOTE: the hand-driven state in $HERE still holds: $stray" +fi + +# Terraform ranks a *.auto.tfvars file above TF_VAR_*, so a leftover one wins +# silently over an operator targeting a different tenancy by environment. The +# guide tells every operator to write one, which is what makes this likely. +assert_no_tfvars_override() { + local f want got + want="${TF_VAR_compartment_ocid:-}" + [ -n "$want" ] || return 0 + for f in "$HERE"/*.auto.tfvars "$HERE"/terraform.tfvars; do + [ -f "$f" ] || continue + got=$(sed -n 's/^[[:space:]]*compartment_ocid[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' "$f" | tail -1) + [ -n "$got" ] || continue + [ "$got" = "$want" ] && continue + die "${f##*/} sets compartment_ocid=$got, which Terraform ranks above the TF_VAR_compartment_ocid=$want this run was given, so it would build in a compartment nobody chose. Remove that file or make it agree." + done +} +assert_no_tfvars_override + +if [ "$DRY_RUN" = 1 ]; then + # Whole plan to a file, summary to the terminal. A dry run is here to catch a + # plan aimed at the wrong compartment, and `tail` dropped the resource count + # and every compartment and shape line along with it, leaving only the outputs + # block -- so the one check it exists for could not be made from its output. + mkdir -p "$STATE_DIR" + tf plan -no-color "${tf_vars[@]}" > "$STATE_DIR/plan.txt" 2>&1 \ + || { tail -30 "$STATE_DIR/plan.txt"; die "plan failed; see $STATE_DIR/plan.txt"; } + grep -E '^Plan: |^(No changes)' "$STATE_DIR/plan.txt" || true + printf 'compartment and shape as planned:\n' + # Terraform aligns the = to the widest key in each block, so the same value + # appears several times at several indents unless the spacing is normalised. + grep -hoE '(compartment_id|shape|availability_domain) += +"[^"]*"' "$STATE_DIR/plan.txt" \ + | sed -E 's/ +=/ =/' | sort -u | sed 's/^/ /' + log "full plan in $STATE_DIR/plan.txt" + plan="install Spinifex on $NODES node(s), form the cluster" + [ "$SKIP_POOL" = 1 ] && plan="$plan, configure no external pool" + if [ "$SKIP_WORKLOAD" = 1 ]; then + plan="$plan, launch no guests" + elif [ "$WORKBOOKS_SET" = 1 ]; then + plan="$plan, run the workbooks '$WORKBOOKS'" + else + plan="$plan, run the driver's default workbooks" + fi + log "dry run: would $plan, then destroy" + exit 0 +fi + +trap cleanup EXIT + +tf init -input=false > "$STATE_DIR/init.log" 2>&1 || die "terraform init failed; see $STATE_DIR/init.log" + +log "building" +tf apply -auto-approve -no-color "${tf_vars[@]}" > "$STATE_DIR/apply.log" 2>&1 \ + || die "terraform apply failed; see $STATE_DIR/apply.log" +record build PASS + +# A read loop rather than mapfile, which bash 3.2 on macOS does not have. The +# output is captured first so a failed terraform fails here, not silently as an +# empty host list. +hosts_raw=$(tf output -raw "${tf_state[@]}" hosts_file) \ + || die "could not read the hosts_file output from $STATE_DIR/terraform.tfstate" +HOSTS=() +while IFS= read -r line; do + if [ -n "$line" ]; then HOSTS+=("$line"); fi +done < "$STATE_DIR/hosts" + +# node_count can come from a tfvars file, so the hosts the apply produced are the +# authority on how many there are. Every later count check reads this. +if [ "${#HOSTS[@]}" != "$NODES" ]; then + log "note: $NODES node(s) is the $TOPOLOGY default, and the apply built ${#HOSTS[@]}; taking the apply's" + NODES="${#HOSTS[@]}" +fi +SHAPE=$(tf output -raw "${tf_state[@]}" compute_shape) \ + || die "could not read the compute_shape output from $STATE_DIR/terraform.tfstate" + +# Terraform is the authority on which credential was built, and the reader above is +# a guess made before the apply. They have to agree: the hook is skipped on the +# strength of that guess, and a node left with no credential at all would otherwise +# fail much later as an allocator that cannot resolve its VNIC. +built_principal=$(tf output -raw "${tf_state[@]}" instance_principal) \ + || die "could not read the instance_principal output from $STATE_DIR/terraform.tfstate" +[ "$built_principal" = "$PRINCIPAL_MODE" ] \ + || die "read instance_principal='$PRINCIPAL_MODE' from the tfvars and the apply built '$built_principal'; set it in one place" + +log "hosts: ${HOSTS[*]}" +log "$SHAPE, $NODES node(s), oci_auth $([ "$PRINCIPAL_MODE" = off ] && echo "from a key file" || echo "as the instance principal")" + +# cloud-init owns the volume, the ports and br-wan, and all three are units now, so +# the question is whether they converged rather than whether a runcmd happened to +# run. This is the gate the bare-metal findings were about. +log "waiting for cloud-init on each node" +for host in "${HOSTS[@]}"; do + for _ in $(seq 1 120); do + if ssh_node "$host" 'cloud-init status --wait >/dev/null 2>&1 || true; test -f /var/lib/cloud/instance/boot-finished' 2>/dev/null; then + break + fi + sleep 10 + done + ssh_node "$host" ' + set -e + for u in spinifex-data-volume spinifex-service-ports spinifex-wan-bridge; do + printf "%s=%s " "$u" "$(systemctl is-active "$u" 2>&1)" + done + echo + findmnt --noheadings --output SOURCE,TARGET /var/lib/spinifex + ip -br addr show br-wan + ' > "$STATE_DIR/cloudinit-$host.txt" 2>&1 \ + || die "cloud-init did not converge on $host; see $STATE_DIR/cloudinit-$host.txt" + log "$host cloud-init: $(head -1 "$STATE_DIR/cloudinit-$host.txt")" +done +record "cloud-init units" PASS + +# With --distro the bytes are the ref under test; without it they are the published +# release, which answers a different question -- what a customer following the +# guide gets today. A nightly judging a branch must pass --distro. +log "installing Spinifex on each node ($([ -n "$DISTRO" ] && echo "$(basename "$DISTRO")" || echo "published release"))" +for host in "${HOSTS[@]}"; do + if [ -n "$DISTRO" ]; then + scp -i "$SSH_PRIVATE_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -o LogLevel=ERROR -q "$DISTRO" "$SETUP_SH" "ubuntu@$host:/tmp/" \ + || die "could not copy the distro to $host" + fi + # cloud-init being finished does not mean apt is: the apt-daily timers and + # unattended-upgrades run on their own schedule and hold the dpkg lock, which + # the installer then fails on. Wait for the lock rather than fight it. + ssh_node "$host" "DISTRO_NAME='$(basename "${DISTRO:-}")' SETUP_NAME='$(basename "${SETUP_SH:-}")' CHANNEL='$CHANNEL' INSTALL_VERSION='$INSTALL_VERSION' bash -s" \ + > "$STATE_DIR/install-$host.log" 2>&1 <<'REMOTE' \ + || die "install failed on $host; see $STATE_DIR/install-$host.log" +set -e +for _ in $(seq 1 120); do + sudo fuser /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock >/dev/null 2>&1 || break + sleep 5 +done +sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1 \ + && { echo "the dpkg lock was still held after 10 minutes"; exit 1; } +if [ -n "${DISTRO_NAME:-}" ]; then + # The production setup.sh against the ref's own tarball, which is what the + # release and the ISO both run, so there is no separate dev install layout. + # No INSTALL_SPINIFEX_SKIP_APT/SKIP_AWS here, unlike the CI hypervisors: an OCI + # stock image is not pre-baked, so the dependency stages have to run. + sudo env INSTALL_SPINIFEX_TARBALL="/tmp/$DISTRO_NAME" bash "/tmp/$SETUP_NAME" +else + # The real customer path, including the checksum step a local tarball skips. + # The environment variable rather than --channel: the installer served by + # install.mulgadc.com is the latest release's, so it predates the flag. + # + # A tag goes in as VERSION, not CHANNEL. Only the dev channel resolves through + # an unauthenticated GitHub API call, which is rate limited per source address + # and returns 404 once it trips -- indistinguishable from a missing asset. A + # tagged path is a plain redirect, so it does not have that failure mode. + if [ -n "$INSTALL_VERSION" ]; then + curl -sfL https://install.mulgadc.com | sudo env INSTALL_SPINIFEX_VERSION="$INSTALL_VERSION" bash + else + curl -sfL https://install.mulgadc.com | sudo env INSTALL_SPINIFEX_CHANNEL="$CHANNEL" bash + fi +fi +sudo /usr/local/share/spinifex/setup-ovn.sh --management --nat-uplink +REMOTE + INSTALLED_VERSION="$(ssh_node "$host" 'spx version' 2>&1 | head -1)" + log "$host installed: $INSTALLED_VERSION" +done +record install PASS "$INSTALLED_VERSION" + +# A single node is its own documented path: install-node.sh refuses fewer than two +# hosts, because there is nothing to join. Both branches use the flags the guide +# names, so what is validated is what the guide tells a customer to type. +if [ "$NODES" = 1 ]; then + log "initializing the single node" + ssh_node "${HOSTS[0]}" ' + set -e + sudo spx admin init --node "$(hostname -s)" --nodes 1 \ + --region ap-southeast-2 --az ap-southeast-2a \ + --external-mode=nat --ipsec=false + sudo systemctl start spinifex.target + ' > "$STATE_DIR/form.log" 2>&1 \ + || die "single-node init failed; see $STATE_DIR/form.log" +else + log "forming the cluster" + "$REPO_ROOT/scripts/install-node.sh" \ + --hosts-file "$STATE_DIR/hosts" \ + --user ubuntu \ + --identity "$SSH_PRIVATE_KEY" \ + --external-mode nat \ + --ipsec off \ + --yes > "$STATE_DIR/form.log" 2>&1 \ + || die "formation failed; see $STATE_DIR/form.log" +fi +record formation PASS + +# Runs after formation and before the pool is configured, which is the only window +# where a node has /etc/spinifex but has not yet started the allocator. Nothing in +# this repository knows what it does: an API-key deployment needs a credential on +# each node, and a credential belongs to the operator, not to a checked-in script. +# Skipped under instance principal, which needs no handoff at all. +if [ "$SKIP_POOL" != 1 ] && [ "$PRINCIPAL_MODE" = off ]; then + log "running the credential hook" + # Arguments, not a file: the hook is told where the nodes are and how to reach + # them, and decides for itself what to put there. + "$CREDENTIAL_HOOK" "$SSH_PRIVATE_KEY" "${HOSTS[@]}" > "$STATE_DIR/credential-hook.log" 2>&1 \ + || die "the credential hook failed; see $STATE_DIR/credential-hook.log" + log "credential hook ok" +fi + +# The IMDS remap and the pool are both set-before-first-start, and the remap is the +# half that is invisible when missing: without it the cloud's metadata service is +# shadowed by Spinifex's own endpoints and the allocator cannot resolve its VNIC. +log "configuring the IMDS remap$([ "$SKIP_POOL" = 1 ] && echo " (no external pool)" || echo " and the external pool")" +for host in "${HOSTS[@]}"; do + ssh_node "$host" "SKIP_POOL=$SKIP_POOL bash -s" > "$STATE_DIR/pool-$host.log" 2>&1 <<'REMOTE' \ + || die "pool configuration failed on $host; see $STATE_DIR/pool-$host.log" +set -e +sudo cp /etc/spinifex/spinifex.toml /etc/spinifex/spinifex.toml.bak-prepool +# subn, not sub: with no [network] section to match, sub rewrites the file unchanged +# and exits 0, leaving the remap silently unapplied. That is the half of this that is +# invisible when missing, so the substitution count is checked rather than assumed. +grep -q imds_host_meta_ip /etc/spinifex/spinifex.toml || sudo python3 - <<"PY" +import re, sys +path = "/etc/spinifex/spinifex.toml" +text, n = re.subn(r"(?m)^\[network\]$", + "[network]\nimds_host_meta_ip = \"169.254.42.254\"\nimds_host_dns_ip = \"169.254.42.253\"", + open(path).read(), count=1) +if n != 1: + sys.exit("no [network] section in %s, so the IMDS remap was not applied" % path) +open(path, "w").write(text) +PY +if [ "${SKIP_POOL:-0}" != 1 ]; then + grep -q 'name = "oci-public"' /etc/spinifex/spinifex.toml \ + || sudo tee -a /etc/spinifex/spinifex.toml < /etc/spinifex/oci/external-pool.toml >/dev/null +fi +# spx has no config subcommand, so the `spx config validate` that used to be here +# could only ever fail, and was swallowed. Parsing the file is the check that was +# wanted: both edits above are textual, and a broken result would otherwise surface +# as every service failing to start with nothing saying why. +sudo python3 -c 'import sys, tomllib; tomllib.load(open(sys.argv[1], "rb"))' \ + /etc/spinifex/spinifex.toml \ + || { echo "spinifex.toml is not valid TOML after the IMDS remap and the pool append"; exit 1; } +sudo systemctl restart spinifex.target +REMOTE +done + +# Everything needed to tell the three allocator faults apart, and deliberately no +# credential: the config file and the PEM are reported as mode and size only, which +# distinguishes absent from unreadable without copying either into a log that is +# attached to a CI run. +allocator_diagnostics() { + local host="$1" + ssh_node "$host" ' + echo "=== spinifex-daemon: the allocator (ocinet) lives here ===" + sudo journalctl -u spinifex-daemon --since -20min --no-pager | grep -i "ocinet\|external VNIC\|allocator\|oci" | tail -40 + echo "=== spinifex-vpcd: consumes the addresses, does not allocate them ===" + sudo journalctl -u spinifex-vpcd --since -20min --no-pager | tail -40 + echo "=== external_pools as configured ===" + sudo sed -n "/\[\[network.external_pools\]\]/,\$p" /etc/spinifex/spinifex.toml + echo "=== credential files (mode and size, never content) ===" + sudo stat -c "%n %A %s bytes owner=%U:%G" \ + /etc/spinifex/oci/config /etc/spinifex/oci/oci_api_key.pem 2>&1 + echo "=== the bridge MAC the allocator matches on ===" + ip -br link show + echo "=== MACs IMDS reports for this instance VNICs ===" + curl -sf -H "Authorization: Bearer Oracle" \ + http://169.254.169.254/opc/v2/vnics/ | tr "," "\n" | grep -i "macAddr\|privateIp" || \ + echo "IMDS unreachable -- check the remap, Spinifex claims 169.254.169.254 itself" + ' 2>&1 +} + +# credential authorised to allocate is the line that proves the credential is +# accepted, in the right compartment, and holds every permission an allocation +# needs. A node missing it accepts allocate-address and then fails it. +# +# "resolved the external VNIC" is not enough and was what this used to wait for. +# That line comes from the metadata service and needs no IAM policy at all, so a +# node with an unauthorised credential passed here and failed hours later inside +# a workbook, reported as capacity. +ALLOCATOR_READY='ocinet credential authorised to allocate' +ALLOCATOR_DENIED='ocinet credential cannot allocate an external address' +if [ "$SKIP_POOL" = 1 ]; then + log "--no-external-pool: no allocator to check" + record "oci allocator" SKIPPED "no external pool configured" +else + log "checking the allocator came up" + for host in "${HOSTS[@]}"; do + found=0 + for _ in $(seq 1 30); do + # spinifex-daemon, not spinifex-vpcd: the allocator is built in the + # daemon, and vpcd only consumes the addresses it hands out. Gating on + # vpcd's journal failed a node whose allocator was working. + if ssh_node "$host" "sudo journalctl -u spinifex-daemon --since -10min --no-pager | grep -q '$ALLOCATOR_READY'" 2>/dev/null; then + found=1 + break + fi + # A refusal is final, so waiting out the remaining five minutes only + # delays a verdict the node has already reached. + if denial=$(ssh_node "$host" "sudo journalctl -u spinifex-daemon --since -10min --no-pager | grep -m1 '$ALLOCATOR_DENIED'" 2>/dev/null) && [ -n "$denial" ]; then + allocator_diagnostics "$host" > "$STATE_DIR/allocator-$host.log" 2>&1 || true + die "$host refused its own OCI credential: ${denial#*$ALLOCATOR_DENIED}. Diagnostics: $STATE_DIR/allocator-$host.log" + fi + sleep 10 + done + if [ "$found" != 1 ]; then + # Before the teardown, because the teardown is what destroys the only + # copy. Three unrelated faults land here -- a credential the SDK would + # not load, a bridge MAC matching no VNIC, and a pool vpcd never read -- + # and they are indistinguishable from the missing log line alone. + allocator_diagnostics "$host" > "$STATE_DIR/allocator-$host.log" 2>&1 || true + die "$host never logged '$ALLOCATOR_READY'; the OCI allocator is not up, so no guest can get a public address. Diagnostics: $STATE_DIR/allocator-$host.log" + fi + log "$host allocator ready" + done + record "oci allocator" PASS +fi + +# Parse the STATUS column, never grep for Ready: NotReady contains it, and that +# read passed a single-node run whose only node was NotReady on 0.0.0.0. The table +# is colourised, so the escapes come off first. +count_ready() { + sed 's/\x1b\[[0-9;]*m//g' "$STATE_DIR/nodes.txt" \ + | awk -F'|' 'NR > 1 { gsub(/^[ \t]+|[ \t]+$/, "", $2); if ($2 == "Ready") n++ } END { print n + 0 }' +} + +log "cluster membership" +ready=0 +for _ in $(seq 1 30); do + ssh_node "${HOSTS[0]}" 'sudo spx get nodes' > "$STATE_DIR/nodes.txt" 2>&1 || true + ready="$(count_ready)" + [ "$ready" = "$NODES" ] && break + sleep 10 +done +cat "$STATE_DIR/nodes.txt" +[ "$ready" = "$NODES" ] || die "expected $NODES Ready node(s), got $ready; see $STATE_DIR/nodes.txt" +record membership PASS "$ready Ready" + +if [ "$SKIP_WORKLOAD" = 1 ]; then + log "--skip-workload: stopping before the workbook" + record workbooks SKIPPED "--skip-workload" + exit 0 +fi + +# The same driver the GitHub nightly runs (cell 17), on the same published +# workbooks, so a workbook that passes on a hypervisor and fails on OCI is a +# difference in OCI and not in the test. It owns its own per-workbook assertions +# and destroys each one it builds. +# The suite used to run with stdout redirected to a file, so a run wedged inside a +# workbook printed nothing at all until it finished. Streamed now, and each of the +# driver's own RUN/PASS/FAIL lines is stamped with elapsed seconds and the workbook. +stream_workbooks() { + local start=$SECONDS line current="(starting)" + while IFS= read -r line; do + case "$line" in + '=== RUN'*) + current="${line##*RUN }" + printf '[validate-%s] %5ds workbook START %s\n' "$TOPOLOGY" "$((SECONDS - start))" "$current" ;; + '--- PASS'*|'--- FAIL'*|'--- SKIP'*) + printf '[validate-%s] %5ds workbook %s\n' "$TOPOLOGY" "$((SECONDS - start))" "$line" ;; + *) + printf '%s\n' "$line" ;; + esac + done +} + +log "running the published workbooks" +DRIVER="$REPO_ROOT/tests/e2e/run-tofu-examples-e2e.sh" +[ -r "$DRIVER" ] || die "no workbook driver at $DRIVER" +scp -i "$SSH_PRIVATE_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -o LogLevel=ERROR -q "$DRIVER" "ubuntu@${HOSTS[0]}:~/run-tofu-examples-e2e.sh" \ + || die "could not copy the workbook driver" +scp -i "$SSH_PRIVATE_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -o LogLevel=ERROR -qr "$REPO_ROOT/docs/terraform-workbooks" "ubuntu@${HOSTS[0]}:~/workbooks" \ + || die "could not copy the workbooks" + +# Every AMI the workbooks need, imported one at a time so predastore is not asked +# to absorb parallel uploads. Three are appliances rather than distros: RDS, ECS +# and EKS each boot their own, found by a spinifex:managed-by tag and never by name. +log "importing the images the workbooks need" +ssh_node "${HOSTS[0]}" ' + set -e + for img in ubuntu-26.04-x86_64 spinifex-rds-postgres spinifex-ecs-node spinifex-eks-node; do + sudo spx admin images import --name "$img" --config /etc/spinifex/spinifex.toml >/dev/null + done +' > "$STATE_DIR/images.log" 2>&1 || die "image import failed; see $STATE_DIR/images.log" + +# Every workbook that is a workbook. The shared driver's own default is five, which +# leaves ECS and all three EKS variants untested on every platform -- their +# assertions exist and nothing was running them. +# +# demo-app is absent because it is not a workbook: it has no .tf at all, being the +# container image the EKS workbooks' nested workloads/ modules deploy. Listing it +# here would fail on a missing root module rather than test anything. +OCI_WORKBOOKS="nginx-alb bastion-private-subnet nginx-webserver s3-webapp rds-quickstart" +OCI_WORKBOOKS="$OCI_WORKBOOKS ecs-quickstart eks-quickstart eks-https-ingress eks-gitops-argocd" +[ "$WORKBOOKS_SET" = 1 ] || WORKBOOKS="$OCI_WORKBOOKS" +workbook_env="WORKBOOK_DIR=\$HOME/workbooks $(printf 'WORKBOOKS=%q' "$WORKBOOKS")" + +# Whether a node can reach a public address inside its own VCN. Informational: the +# remedy below is right either way, because a customer reaches a guest from outside. +# +# Needs two hosts. With one, HOSTS[0] and HOSTS[-1] are the same address and the node +# connects to itself, which always succeeds and measures nothing — it reported +# "present" on vm-single and bm for exactly that reason before this guard. +# +# A negative result is only interpretable when the security list admits the source, +# so the record says which it was: narrowing node_client_cidr_allow_list makes a +# node's own public address a non-permitted source, and the refusal that follows +# looks identical to a VCN that does not hairpin. +if [ "${#HOSTS[@]}" -lt 2 ]; then + record "vcn hairpin" SKIPPED "needs two nodes; one node can only probe itself" +elif ssh_node "${HOSTS[0]}" \ + "bash -c 'exec 3<>/dev/tcp/${HOSTS[${#HOSTS[@]}-1]}/22' 2>/dev/null"; then + record "vcn hairpin" INFO "present: a node reached another node's public address" +else + record "vcn hairpin" INFO "not reached, which is a VCN without hairpin or a security list that excludes the source" +fi + +# Remote dynamic forward: the node gets a SOCKS5 proxy on this port whose egress +# is this host, outside the VCN. It gives the driver the customer's vantage point +# for public addresses without moving the driver off the node, where its ovn-nbctl, +# journalctl and spx diagnostics have to run. The subnet's own allow list does not +# need a new entry: ssh from here already works, and its rules are per-CIDR for +# every protocol. +PUBLIC_PROXY_PORT="${PUBLIC_PROXY_PORT:-1080}" +workbook_env="$workbook_env E2E_PUBLIC_PROXY=127.0.0.1:$PUBLIC_PROXY_PORT" + +# ExitOnForwardFailure, so a port already in use stops the run here instead of +# handing the driver a proxy that is not there. Keepalives because this one +# connection carries the proxy for the whole suite, and a dropped forward would +# read as every remaining public address going dark at once. +# +# if !, not a $? read after the fact: under set -e a failing ssh never reaches the +# next line, which is the one that prints the driver's own diagnostics. +if ssh -i "$SSH_PRIVATE_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -o LogLevel=ERROR -o BatchMode=yes -o ConnectTimeout=15 \ + -o ServerAliveInterval=30 -o ServerAliveCountMax=6 \ + -o ExitOnForwardFailure=yes -R "$PUBLIC_PROXY_PORT" "ubuntu@${HOSTS[0]}" \ + "chmod +x ~/run-tofu-examples-e2e.sh; $workbook_env ~/run-tofu-examples-e2e.sh" \ + 2>&1 | tee "$STATE_DIR/workbooks.log" | stream_workbooks; then + record_workbooks "$STATE_DIR/workbooks.log" + passed="$(grep -c '^--- PASS' "$STATE_DIR/workbooks.log" || true)" + ran="$(grep -c '^=== RUN' "$STATE_DIR/workbooks.log" || true)" + record workbooks PASS "$passed of $ran" +else + # Before die, so a failed suite still gets its per-workbook table: which four + # passed is most of what the fifth failing means. + record_workbooks "$STATE_DIR/workbooks.log" + failed="$(grep -c '^--- FAIL' "$STATE_DIR/workbooks.log" || true)" + record workbooks FAIL "$failed failed, see $STATE_DIR/workbooks.log" + capture_journals + tail -60 "$STATE_DIR/workbooks.log" + grep -E '^--- (PASS|FAIL)' "$STATE_DIR/workbooks.log" | sed 's/^/ /' || true + die "the published workbooks failed on $TOPOLOGY; see $STATE_DIR/workbooks.log" +fi diff --git a/scripts/terraform/oci-spx/variables.tf b/scripts/terraform/oci-spx/variables.tf index 7dd8580ab..3650bfe6f 100644 --- a/scripts/terraform/oci-spx/variables.tf +++ b/scripts/terraform/oci-spx/variables.tf @@ -1,17 +1,34 @@ variable "tenancy_ocid" { type = string } variable "user_ocid" { type = string } variable "fingerprint" { type = string } -variable "private_key_path" { type = string } +variable "private_key_path" { + type = string + default = "" +} + +# The PEM itself, for a CI runner that holds it as a secret in the environment. +# Exactly one of this and private_key_path is set; the check lives here so a run +# fails on the input rather than on an OCI 401 forty seconds later. +variable "private_key" { + type = string + default = "" + sensitive = true + validation { + condition = (var.private_key == "") != (var.private_key_path == "") + error_message = "Set exactly one of private_key (the PEM, for CI) or private_key_path (a file, for a workstation)." + } +} # OCI's own region name. Spinifex's region is a separate setting that follows AWS # naming, so ap-sydney-1 here beside ap-southeast-2 in spinifex.toml is correct. variable "region" { type = string default = "ap-sydney-1" } -# Unused. Kept declared because scripts/oci_env.py discovers and exports it, and -# there are no identity resources left that need the home-region endpoint. +# OCI serves IAM writes from the tenancy home region, which is not necessarily +# where we build: the dynamic group and policy in instance-principal.tf go through +# the oci.home provider. Unset means the two are the same region. variable "home_region" { - description = "Unused. The tenancy home region, exported by the Python environment tool." + description = "Tenancy home region, for IAM writes. Defaults to var.region; set OCI_HOME_REGION when they differ." type = string default = null nullable = true @@ -37,6 +54,20 @@ variable "deployment_name" { error_message = "deployment_name must be 1-15 lowercase alphanumeric characters starting with a letter, because it is used as the VCN dns_label." } } +# Three values rather than a bool, because using an instance principal and being +# allowed to create one are different rights. See instance-principal.tf for what +# the policy grants and why it is narrow. +variable "instance_principal" { + description = "off: nodes use an API key. adopt: nodes authenticate as themselves against a dynamic group and policy that already exist. create: also create those two, which needs a tenancy-admin principal." + type = string + default = "off" + + validation { + condition = contains(["off", "adopt", "create"], var.instance_principal) + error_message = "instance_principal must be off, adopt or create." + } +} + variable "vcn_cidr" { description = "VCN address space. A /22 leaves room for the per-node secondary private IPs Spinifex allocates for external addresses." type = string diff --git a/spinifex/accountteardown/reapers_account.go b/spinifex/accountteardown/reapers_account.go index 93ef7a49a..432fa635e 100644 --- a/spinifex/accountteardown/reapers_account.go +++ b/spinifex/accountteardown/reapers_account.go @@ -96,6 +96,7 @@ type IAMAccounts struct{ svc handlers_iam.IAMService } var _ AccountStore = (*IAMAccounts)(nil) +// NewIAMAccounts wraps svc as the engine's AccountStore. func NewIAMAccounts(svc handlers_iam.IAMService) *IAMAccounts { return &IAMAccounts{svc: svc} } diff --git a/spinifex/admin/admin.go b/spinifex/admin/admin.go index b7828cc69..89498d93b 100644 --- a/spinifex/admin/admin.go +++ b/spinifex/admin/admin.go @@ -1,3 +1,6 @@ +// Package admin holds the node administration helpers behind spx admin: config +// and certificate generation, credential bootstrap, image import and host +// network discovery. package admin import ( @@ -19,6 +22,7 @@ import ( "regexp" "strconv" "strings" + "testing" "text/template" "time" @@ -43,6 +47,8 @@ type RemoteNode struct { NorthstarConfigPath string } +// ConfigSettings is the template data rendered into every generated config file +// (spinifex.toml, predastore.toml, NATS and the rest) by GenerateConfigFile. type ConfigSettings struct { AccessKey string SecretKey string @@ -148,12 +154,16 @@ type ConfigSettings struct { ResolverAllowFrom []string } +// ConfigFile names one config file to render: Template is the text/template +// source and Path the destination it is written to. type ConfigFile struct { Name string Path string Template string } +// GenerateConfigFiles renders each of configs with configSettings, printing a +// line per file and stopping at the first failure. func GenerateConfigFiles(configs []ConfigFile, configSettings ConfigSettings) error { for _, cfg := range configs { if err := GenerateConfigFile(cfg.Path, cfg.Template, configSettings); err != nil { @@ -290,6 +300,8 @@ func PredastoreDataDir(spxRoot string) string { return filepath.Join(spxRoot, "predastore", "cluster") } +// CreateServiceDirectories creates the per-service directories under spxRoot. +// A directory that cannot be created is warned about on stderr, not returned. func CreateServiceDirectories(spxRoot string) { dirs := []string{ filepath.Join(spxRoot, "images"), @@ -316,6 +328,8 @@ func CreateServiceDirectories(spxRoot string) { fmt.Printf("✅ Directory structure created in %s\n", spxRoot) } +// FileExists reports whether path can be stat'd. Any stat error, including +// permission denied, reads as false. func FileExists(path string) bool { _, err := os.Stat(path) return err == nil @@ -465,33 +479,111 @@ func SetServiceOwnership() error { return ownershipErr } +// awsINIOptions keeps AWS nested settings (an empty key followed by indented +// lines) intact across a rewrite; without it they are flattened into the +// enclosing section and lost. +var awsINIOptions = ini.LoadOptions{AllowNestedValues: true} + // UpdateAWSINIFile updates or creates an AWS INI file section with the given key-value pairs. func UpdateAWSINIFile(path, section string, values map[string]string) error { - var cfg *ini.File - var err error - - if FileExists(path) { - cfg, err = ini.Load(path) - if err != nil { - return fmt.Errorf("failed to load INI file: %w", err) - } - } else { - cfg = ini.Empty() - } - - sec, err := cfg.NewSection(section) + cfg, err := loadAWSINIFile(path) if err != nil { - // Section already exists, get it. - sec, err = cfg.GetSection(section) - if err != nil { - return fmt.Errorf("failed to get section: %w", err) - } + return err + } + sec, err := awsINISection(cfg, section) + if err != nil { + return err } - for key, value := range values { sec.Key(key).SetValue(value) } + return saveAWSINIFile(cfg, path) +} +// WriteAWSProfileConfig points an AWS CLI profile at this cluster. One profile +// endpoint_url cannot send S3 to the predastore gate and everything else to the +// gateway, so S3 goes in the profile's services section, which takes precedence. +func WriteAWSProfileConfig(path, profileName, region, certPath, endpointHost string) error { + cfg, err := loadAWSINIFile(path) + if err != nil { + return err + } + profileSection := profileName + if profileName != "default" { + profileSection = "profile " + profileName + } + profile, err := awsINISection(cfg, profileSection) + if err != nil { + return err + } + for key, value := range map[string]string{ + "region": region, + "endpoint_url": "https://" + net.JoinHostPort(endpointHost, "9999"), + "ca_bundle": certPath, + "output": "json", + "services": profileName, + } { + profile.Key(key).SetValue(value) + } + services, err := awsINISection(cfg, "services "+profileName) + if err != nil { + return err + } + s3Endpoint := "https://" + net.JoinHostPort(endpointHost, strconv.Itoa(predastoreGatePort)) + if err := setNestedAWSSetting(services, "s3", "endpoint_url", s3Endpoint); err != nil { + return err + } + return saveAWSINIFile(cfg, path) +} + +// setNestedAWSSetting sets name inside the nested block under key, keeping any +// other settings an operator nested there. +func setNestedAWSSetting(sec *ini.Section, key, name, value string) error { + var lines []string + if sec.HasKey(key) { + for _, line := range sec.Key(key).NestedValues() { + if setting, _, _ := strings.Cut(line, "="); strings.TrimSpace(setting) != name { + lines = append(lines, line) + } + } + sec.DeleteKey(key) + } + nested, err := sec.NewKey(key, "") + if err != nil { + return fmt.Errorf("failed to create key %s: %w", key, err) + } + for _, line := range append(lines, name+" = "+value) { + if err := nested.AddNestedValue(line); err != nil { + return fmt.Errorf("failed to set %s.%s: %w", key, name, err) + } + } + return nil +} + +func loadAWSINIFile(path string) (*ini.File, error) { + if !FileExists(path) { + return ini.Empty(awsINIOptions), nil + } + cfg, err := ini.LoadSources(awsINIOptions, path) + if err != nil { + return nil, fmt.Errorf("failed to load INI file: %w", err) + } + return cfg, nil +} + +func awsINISection(cfg *ini.File, name string) (*ini.Section, error) { + sec, err := cfg.NewSection(name) + if err != nil { + // Section already exists, get it. + sec, err = cfg.GetSection(name) + if err != nil { + return nil, fmt.Errorf("failed to get section: %w", err) + } + } + return sec, nil +} + +func saveAWSINIFile(cfg *ini.File, path string) error { // Write atomically: ini.SaveTo uses os.Create (world-readable); render to a // sibling temp file (0600) and rename to avoid briefly exposing secrets. dir := filepath.Dir(path) @@ -590,6 +682,16 @@ func GenerateNATSToken() (string, error) { // keeps the 4096-bit default. var certKeyBits = 4096 +// ShortenCertKeyBitsForTest generates certificate keys at bits for the rest of +// one test and restores the previous size afterwards. There is one size per +// process, so the test must not run in parallel with anything generating keys. +func ShortenCertKeyBitsForTest(tb testing.TB, bits int) { + tb.Helper() + prev := certKeyBits + certKeyBits = bits + tb.Cleanup(func() { certKeyBits = prev }) +} + // GenerateCACert generates a Certificate Authority certificate and key. func GenerateCACert(caCertPath, caKeyPath string) error { caPrivateKey, err := rsa.GenerateKey(rand.Reader, certKeyBits) @@ -879,22 +981,12 @@ func SetupAWSCredentials(accessKey, secretKey, region, certPath, bindIP string) } } - configSection := profileName - if profileName != "default" { - configSection = "profile " + profileName - } - endpointHost := bindIP if endpointHost == "" || endpointHost == "0.0.0.0" { endpointHost = "localhost" } - if err := UpdateAWSINIFile(configPath, configSection, map[string]string{ - "region": region, - "endpoint_url": "https://" + net.JoinHostPort(endpointHost, "9999"), - "ca_bundle": certPath, - "output": "json", - }); err != nil { + if err := WriteAWSProfileConfig(configPath, profileName, region, certPath, endpointHost); err != nil { return err } diff --git a/spinifex/admin/admin_test.go b/spinifex/admin/admin_test.go index a395a589b..c81590588 100644 --- a/spinifex/admin/admin_test.go +++ b/spinifex/admin/admin_test.go @@ -11,6 +11,7 @@ import ( "strings" "testing" + awsconfig "github.com/aws/aws-sdk-go-v2/config" "github.com/mulgadc/spinifex/spinifex/bootstrap/config" "github.com/mulgadc/spinifex/spinifex/runtime/formation" "github.com/stretchr/testify/assert" @@ -229,6 +230,79 @@ func TestUpdateAWSINIFile_AddNewSection(t *testing.T) { assert.Contains(t, content, "spinifex-val") } +// --- WriteAWSProfileConfig --- + +// resolveProfileEndpoint resolves sdkID's endpoint through the Go SDK's own +// shared-config loader, the way a client does: the service's entry in the +// profile's services section, else the profile-wide endpoint_url. +func resolveProfileEndpoint(t *testing.T, configPath, profile, sdkID string) string { + t.Helper() + shared, err := awsconfig.LoadSharedConfigProfile(t.Context(), profile, func(o *awsconfig.LoadSharedConfigOptions) { + o.ConfigFiles = []string{configPath} + o.CredentialsFiles = []string{} + }) + require.NoError(t, err) + endpoint, found, err := shared.GetServiceBaseEndpoint(t.Context(), sdkID) + require.NoError(t, err) + if found { + return endpoint + } + return shared.BaseEndpoint +} + +func TestWriteAWSProfileConfig_SendsS3ToPredastoreAndTheRestToTheGateway(t *testing.T) { + path := filepath.Join(t.TempDir(), "config") + require.NoError(t, WriteAWSProfileConfig(path, "spinifex", "ap-southeast-2", "/ca.pem", "10.11.12.1")) + + assert.Equal(t, "https://10.11.12.1:8443", resolveProfileEndpoint(t, path, "spinifex", "S3")) + assert.Equal(t, "https://10.11.12.1:9999", resolveProfileEndpoint(t, path, "spinifex", "EC2")) + assert.Equal(t, "https://10.11.12.1:9999", resolveProfileEndpoint(t, path, "spinifex", "STS")) +} + +// A rewrite must not flatten nested settings an operator added, which is how a +// hand-written s3 block used to be lost on every re-init. +func TestWriteAWSProfileConfig_KeepsNestedSettingsAcrossARewrite(t *testing.T) { + path := filepath.Join(t.TempDir(), "config") + require.NoError(t, os.WriteFile(path, []byte(`[profile spinifex] +s3 = + max_concurrent_requests = 20 +services = spinifex + +[services spinifex] +s3 = + addressing_style = path + endpoint_url = https://stale:8443 +`), 0600)) + + require.NoError(t, WriteAWSProfileConfig(path, "spinifex", "ap-southeast-2", "/ca.pem", "localhost")) + require.NoError(t, WriteAWSProfileConfig(path, "spinifex", "ap-southeast-2", "/ca.pem", "localhost")) + + assert.Equal(t, "https://localhost:8443", resolveProfileEndpoint(t, path, "spinifex", "S3")) + shared, err := awsconfig.LoadSharedConfigProfile(t.Context(), "spinifex", func(o *awsconfig.LoadSharedConfigOptions) { + o.ConfigFiles = []string{path} + o.CredentialsFiles = []string{} + }) + require.NoError(t, err) + assert.Equal(t, map[string]string{"addressing_style": "path", "endpoint_url": "https://localhost:8443"}, + shared.Services.ServiceValues["s3"]) + + data, err := os.ReadFile(path) + require.NoError(t, err) + assert.Contains(t, string(data), "max_concurrent_requests = 20") + assert.NotContains(t, string(data), "stale") +} + +// Account profiles each get their own services section, so a tenant profile +// resolves S3 the same way as the operator's without sharing its section. +func TestWriteAWSProfileConfig_ProfilesDoNotShareAServicesSection(t *testing.T) { + path := filepath.Join(t.TempDir(), "config") + require.NoError(t, WriteAWSProfileConfig(path, "spinifex", "ap-southeast-2", "/ca.pem", "localhost")) + require.NoError(t, WriteAWSProfileConfig(path, "spinifex-acme", "ap-southeast-2", "/ca.pem", "10.0.0.5")) + + assert.Equal(t, "https://localhost:8443", resolveProfileEndpoint(t, path, "spinifex", "S3")) + assert.Equal(t, "https://10.0.0.5:8443", resolveProfileEndpoint(t, path, "spinifex-acme", "S3")) +} + // --- SetupAWSCredentials --- func TestSetupAWSCredentials_CreatesFiles(t *testing.T) { @@ -274,9 +348,9 @@ func TestSetupAWSCredentials_UsesBindIP(t *testing.T) { err := SetupAWSCredentials("AKIATEST123", "secret123", "us-east-1", "/ca.pem", "10.11.12.1") require.NoError(t, err) - configData, _ := os.ReadFile(filepath.Join(dir, ".aws", "config")) - assert.Contains(t, string(configData), "https://10.11.12.1:9999") - assert.NotContains(t, string(configData), "localhost") + configPath := filepath.Join(dir, ".aws", "config") + assert.Equal(t, "https://10.11.12.1:9999", resolveProfileEndpoint(t, configPath, "spinifex", "EC2")) + assert.Equal(t, "https://10.11.12.1:8443", resolveProfileEndpoint(t, configPath, "spinifex", "S3")) } func TestSetupAWSCredentials_FallsBackToLocalhostForWildcard(t *testing.T) { diff --git a/spinifex/agents/rds/agent/agent.go b/spinifex/agents/rds/agent/agent.go index ca6fe1e15..299a236e9 100644 --- a/spinifex/agents/rds/agent/agent.go +++ b/spinifex/agents/rds/agent/agent.go @@ -230,7 +230,8 @@ func newAgent(cfg Config, cp controlPlane, probe *engineProbe) (*Agent, error) { return a, nil } -// Does not wait for IMDS: the register loop rides out a datapath still coming up. +// New builds the agent from cfg, failing if no gateway URL is set. It does not +// wait for IMDS: the register loop rides out a datapath still coming up. func New(cfg Config) (*Agent, error) { if cfg.GatewayURL == "" { return nil, fmt.Errorf("no gateway URL configured (RDS_GATEWAY_URL)") @@ -375,16 +376,16 @@ func unescapeMountField(field string) string { // Boot-retry bounds. Tight to start, since the usual cause is a control plane // still creating this instance's record, and capped so an outage does not turn -// a booting fleet into a retry storm. -const ( +// a booting fleet into a retry storm. Vars so tests can shorten the wait. +var ( retryMin = 1 * time.Second retryMax = 30 * time.Second - - // With the production backoff, attempt five is about 15 seconds into the - // failure and still precedes the first 30-second heartbeat. - retryErrorAttempt = 5 ) +// With the production backoff, attempt five is about 15 seconds into the +// failure and still precedes the first 30-second heartbeat. +const retryErrorAttempt = 5 + // Wrapping an error in this stops retryObserved. For the failures the control // plane decides from its own record, no retry can change the answer, and looping // on one only keeps the caller blocked. diff --git a/spinifex/agents/rds/agent/config.go b/spinifex/agents/rds/agent/config.go index 73da8437e..e4bcd4574 100644 --- a/spinifex/agents/rds/agent/config.go +++ b/spinifex/agents/rds/agent/config.go @@ -81,7 +81,7 @@ type Config struct { AgentVersion string } -// Reads the cloud-init env file, then lets real env vars override. +// LoadConfig reads the cloud-init env file, then lets real env vars override. func LoadConfig(envFile string) Config { get := guestenv.Load(envFile).Get diff --git a/spinifex/agents/rds/agent/engine_mariadb_test.go b/spinifex/agents/rds/agent/engine_mariadb_test.go index 11f448730..ab0abacc9 100644 --- a/spinifex/agents/rds/agent/engine_mariadb_test.go +++ b/spinifex/agents/rds/agent/engine_mariadb_test.go @@ -948,8 +948,8 @@ func TestMariaDBProbe_LiveButUnreachableEngineResetsTheRollbackDeadline(t *testi recovery := &fakeRecovery{restored: true} guard := newTestGuard(recovery, probe) // Bounded so the deadline-resetting loop cannot run forever if it stops - // resetting; the assertion is that the rollback was never reached. - ctx, cancel := context.WithTimeout(t.Context(), 200*time.Millisecond) + // resetting; four rollback budgets, so a missed reset would roll back. + ctx, cancel := context.WithTimeout(t.Context(), 80*time.Millisecond) defer cancel() guard.Run(ctx) diff --git a/spinifex/agents/rds/agent/main_test.go b/spinifex/agents/rds/agent/main_test.go new file mode 100644 index 000000000..e317c2c03 --- /dev/null +++ b/spinifex/agents/rds/agent/main_test.go @@ -0,0 +1,14 @@ +package agent + +import ( + "os" + "testing" + "time" +) + +// TestMain shortens the boot-retry backoff for the whole package: the tests +// assert which calls are retried, not how long the agent waits between them. +func TestMain(m *testing.M) { + retryMin, retryMax = time.Millisecond, time.Millisecond + os.Exit(m.Run()) +} diff --git a/spinifex/agents/rds/agent/paramrecovery_test.go b/spinifex/agents/rds/agent/paramrecovery_test.go index 5cc959e5d..bb773db65 100644 --- a/spinifex/agents/rds/agent/paramrecovery_test.go +++ b/spinifex/agents/rds/agent/paramrecovery_test.go @@ -460,8 +460,8 @@ func TestParamGuard_LeavesARecoveringEngineAlone(t *testing.T) { engine := &fakeRecovery{restored: true} guard := newTestGuard(engine, stubProbe(t, 1, nil)) // Bounded so the deadline-resetting loop cannot run forever if it stops - // resetting; the assertion is that the rollback was never reached. - ctx, cancel := context.WithTimeout(t.Context(), 200*time.Millisecond) + // resetting; four rollback budgets, so a missed reset would roll back. + ctx, cancel := context.WithTimeout(t.Context(), 80*time.Millisecond) defer cancel() guard.Run(ctx) diff --git a/spinifex/bootstrap/config/config.go b/spinifex/bootstrap/config/config.go index 5aea02455..c352bb187 100644 --- a/spinifex/bootstrap/config/config.go +++ b/spinifex/bootstrap/config/config.go @@ -1,3 +1,5 @@ +// Package config defines spinifex.toml, the cluster and per-node configuration +// every Spinifex service is started from, and loads it via LoadConfig. package config import ( @@ -13,6 +15,8 @@ import ( "github.com/spf13/viper" ) +// ClusterConfig is the root of spinifex.toml as returned by LoadConfig: the +// cluster-wide settings plus a [nodes.] Config for every node. type ClusterConfig struct { Epoch uint64 `mapstructure:"epoch"` // bump when leader commits changes Node string `mapstructure:"node"` // my node name @@ -92,6 +96,7 @@ type ExternalPool struct { OCIVNICIface string `mapstructure:"oci_vnic_iface"` // Host interface to resolve the VNIC OCID from, instead of oci_vnic_id OCISubnetID string `mapstructure:"oci_subnet_id"` // Subnet OCID the private IPs come from (optional; defaults to the VNIC's) OCIPublicIPPool string `mapstructure:"oci_public_ip_pool"` // Public IP pool OCID for BYOIP (optional) + OCIAuth string `mapstructure:"oci_auth"` // "config_file" (default) or "instance_principal" OCIConfigFile string `mapstructure:"oci_config_file"` // API-key config file (optional; defaults to ~/.oci/config) OCIConfigProfile string `mapstructure:"oci_config_profile"` // Profile within that file (optional; defaults to DEFAULT) @@ -208,6 +213,8 @@ type Config struct { WalDir string `json:"WalDir" mapstructure:"wal_dir"` } +// AWSGWConfig is a node's [awsgw] section: the AWS gateway's listen address, +// TLS key pair and the path of its own config file. type AWSGWConfig struct { Host string `json:"Host" mapstructure:"host"` TLSKey string `json:"TLSKey" mapstructure:"tlskey"` @@ -218,6 +225,8 @@ type AWSGWConfig struct { ExpectedNodes int `json:"ExpectedNodes" mapstructure:"expected_nodes"` // TODO: Replace with root cluster config } +// ViperblockConfig is a node's [viperblock] section, tuning every viperblock +// instance the node constructs for EBS volumes. type ViperblockConfig struct { ShardWAL *bool `json:"ShardWAL" mapstructure:"shardwal"` // Enable sharded WAL (default false when nil) @@ -333,8 +342,9 @@ type NorthstarConfig struct { InternalDomain string `json:"InternalDomain" mapstructure:"internal_domain"` } -// Every DB VM's primary NIC lives in the shared system VPC, which gives the -// in-guest agent management egress while the customer ENI stays ingress-only. +// RDSConfig is a node's [rds] section. Every DB VM's primary NIC lives in the +// shared system VPC, which gives the in-guest agent management egress while +// the customer ENI stays ingress-only. type RDSConfig struct { // The IPv4 /14 the system VPC's /22 is carved from. It must not overlap the // EKS control-plane supernet or any customer VPC CIDR. @@ -380,9 +390,9 @@ type RDSConfig struct { // supernet, so a name-hash collision can never place an RDS subnet in EKS space. const RDSDefaultSystemVPCSupernet = "10.248.0.0/14" -// Every self-hosted vLLM serving VM's primary NIC lives in the shared Bedrock -// system VPC, mirroring RDS's DB-VM VPC: one shared VPC per region rather -// than one per endpoint, since a serving VM has no customer ENI to isolate. +// BedrockConfig is a node's [bedrock] section. Every vLLM serving VM's primary +// NIC lives in one shared system VPC per region, not one per endpoint, as with +// RDS DB VMs, since a serving VM has no customer ENI to isolate. type BedrockConfig struct { // The IPv4 /14 the system VPC's /22 is carved from. It must not overlap the // RDS or EKS control-plane supernets or any customer VPC CIDR. @@ -453,6 +463,8 @@ func ParseEndpoints(addr string) []string { return out } +// PredastoreConfig is a node's [predastore] section: the S3 endpoint, bucket +// and credentials Spinifex uses to reach Predastore. type PredastoreConfig struct { Host string `json:"Host" mapstructure:"host"` Bucket string `json:"Bucket" mapstructure:"bucket"` @@ -728,6 +740,20 @@ func validateClusterConfig(cc *ClusterConfig) error { if (p.OCIVNICID == "") == (p.OCIVNICIface == "") { return fmt.Errorf("config: [[network.external_pools]] %q: source=\"oci\" requires exactly one of oci_vnic_id or oci_vnic_iface", p.Name) } + // Named explicitly rather than inferred, so a node that was meant to + // use its own identity and has no dynamic group fails at config load + // instead of falling back to a key file nobody installed. + switch p.OCIAuth { + case "", "config_file", "instance_principal": + default: + return fmt.Errorf("config: [[network.external_pools]] %q: oci_auth must be \"config_file\" or \"instance_principal\", got %q", p.Name, p.OCIAuth) + } + // Credentials come from the metadata service under instance principal, + // so a config file named beside it is one of two sources of truth and + // the one that would be silently ignored. + if p.OCIAuth == "instance_principal" && (p.OCIConfigFile != "" || p.OCIConfigProfile != "") { + return fmt.Errorf("config: [[network.external_pools]] %q: oci_config_file/oci_config_profile are not valid with oci_auth=\"instance_principal\" (the instance's own certificate is the credential)", p.Name) + } if p.BindBridge != "" || p.DHCPMAC != "" { return fmt.Errorf("config: [[network.external_pools]] %q: bind_bridge/dhcp_mac are only valid with source=\"dhcp\"", p.Name) } diff --git a/spinifex/bootstrap/config/config_test.go b/spinifex/bootstrap/config/config_test.go index 80ea03ef3..fadcd0eeb 100644 --- a/spinifex/bootstrap/config/config_test.go +++ b/spinifex/bootstrap/config/config_test.go @@ -1262,6 +1262,58 @@ oci_compartment_id = "ocid1.compartment.oc1..c1" assert.Contains(t, err.Error(), "exactly one of oci_vnic_id or oci_vnic_iface") } +func TestLoadConfig_NetworkPoolOCIDefaultsToConfigFileAuth(t *testing.T) { + cfg, err := loadOCIPool(t, "nat", ` +source = "oci" +oci_compartment_id = "ocid1.compartment.oc1..c1" +oci_vnic_iface = "br-wan" +`) + require.NoError(t, err) + assert.Empty(t, cfg.Network.ExternalPools[0].OCIAuth) +} + +func TestLoadConfig_NetworkPoolOCIAcceptsInstancePrincipal(t *testing.T) { + cfg, err := loadOCIPool(t, "nat", ` +source = "oci" +oci_auth = "instance_principal" +oci_compartment_id = "ocid1.compartment.oc1..c1" +oci_vnic_iface = "br-wan" +`) + require.NoError(t, err) + assert.Equal(t, "instance_principal", cfg.Network.ExternalPools[0].OCIAuth) +} + +// A typo must not fall back to the key file, because a node meant to use its own +// identity would then fail on a credential nobody installed rather than here. +func TestLoadConfig_NetworkPoolOCIRejectsUnknownAuth(t *testing.T) { + _, err := loadOCIPool(t, "nat", ` +source = "oci" +oci_auth = "instance-principal" +oci_compartment_id = "ocid1.compartment.oc1..c1" +oci_vnic_iface = "br-wan" +`) + require.Error(t, err) + assert.Contains(t, err.Error(), "oci_auth must be") +} + +// Under instance principal the certificate is the credential, so a config file +// beside it is a second source of truth and the one that is silently ignored. +func TestLoadConfig_NetworkPoolOCIRejectsConfigFileWithInstancePrincipal(t *testing.T) { + for _, key := range []string{ + `oci_config_file = "/etc/spinifex/oci/config"`, + `oci_config_profile = "spinifex"`, + } { + _, err := loadOCIPool(t, "nat", ` +source = "oci" +oci_auth = "instance_principal" +oci_compartment_id = "ocid1.compartment.oc1..c1" +oci_vnic_iface = "br-wan" +`+key+"\n") + require.Error(t, err, key) + assert.Contains(t, err.Error(), "not valid with oci_auth=\"instance_principal\"", key) + } +} + func TestLoadConfig_NetworkPoolOCIRejectsRange(t *testing.T) { _, err := loadOCIPool(t, "nat", ` source = "oci" diff --git a/spinifex/daemon/coverage_fakes_test.go b/spinifex/daemon/coverage_fakes_test.go new file mode 100644 index 000000000..11d92eac1 --- /dev/null +++ b/spinifex/daemon/coverage_fakes_test.go @@ -0,0 +1,231 @@ +package daemon + +import ( + "context" + "errors" + viperblocklegacyv1 "github.com/mulgadc/spinifex/contracts/viperblockd/legacy/v1" + "net/netip" + "sync" + + "github.com/aws/aws-sdk-go/service/ec2" + ec2eip "github.com/mulgadc/spinifex/spinifex/domains/ec2/eip" + "github.com/mulgadc/spinifex/spinifex/domains/network/external" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" +) + +var errInjected = errors.New("injected failure") + +// failingKV wraps a real bucket and fails the methods named in failOn with +// errInjected, so tests can reach the KV error branches. +type failingKV struct { + jetstream.KeyValue + + mu sync.Mutex + failOn map[string]bool +} + +func newFailingKV(kv jetstream.KeyValue, methods ...string) *failingKV { + f := &failingKV{KeyValue: kv, failOn: map[string]bool{}} + for _, m := range methods { + f.failOn[m] = true + } + return f +} + +func (f *failingKV) fails(method string) bool { + f.mu.Lock() + defer f.mu.Unlock() + return f.failOn[method] +} + +func (f *failingKV) setFail(method string, fail bool) { + f.mu.Lock() + defer f.mu.Unlock() + f.failOn[method] = fail +} + +func (f *failingKV) Get(ctx context.Context, key string) (jetstream.KeyValueEntry, error) { + if f.fails("Get") { + return nil, errInjected + } + return f.KeyValue.Get(ctx, key) +} + +func (f *failingKV) Put(ctx context.Context, key string, value []byte) (uint64, error) { + if f.fails("Put") { + return 0, errInjected + } + return f.KeyValue.Put(ctx, key, value) +} + +func (f *failingKV) Create(ctx context.Context, key string, value []byte, opts ...jetstream.KVCreateOpt) (uint64, error) { + if f.fails("Create") { + return 0, errInjected + } + return f.KeyValue.Create(ctx, key, value, opts...) +} + +func (f *failingKV) Update(ctx context.Context, key string, value []byte, last uint64) (uint64, error) { + if f.fails("Update") { + return 0, errInjected + } + return f.KeyValue.Update(ctx, key, value, last) +} + +func (f *failingKV) Delete(ctx context.Context, key string, opts ...jetstream.KVDeleteOpt) error { + if f.fails("Delete") { + return errInjected + } + return f.KeyValue.Delete(ctx, key, opts...) +} + +func (f *failingKV) Purge(ctx context.Context, key string, opts ...jetstream.KVDeleteOpt) error { + if f.fails("Purge") { + return errInjected + } + return f.KeyValue.Purge(ctx, key, opts...) +} + +func (f *failingKV) Keys(ctx context.Context, opts ...jetstream.WatchOpt) ([]string, error) { + if f.fails("Keys") { + return nil, errInjected + } + return f.KeyValue.Keys(ctx, opts...) +} + +func (f *failingKV) ListKeys(ctx context.Context, opts ...jetstream.WatchOpt) (jetstream.KeyLister, error) { + if f.fails("ListKeys") { + return nil, errInjected + } + return f.KeyValue.ListKeys(ctx, opts...) +} + +// fakeEIPService answers only the EIP calls a test configures; any other +// method panics through the nil embedded interface. +type fakeEIPService struct { + ec2eip.EIPService + + mu sync.Mutex + + allocateOut *ec2.AllocateAddressOutput + allocateErr error + + associateOut *ec2.AssociateAddressOutput + associateErr error + + disassociateErr error + releaseErr error + + released []string + disassociated []string +} + +func (f *fakeEIPService) AllocateAddress(context.Context, *ec2.AllocateAddressInput, string) (*ec2.AllocateAddressOutput, error) { + if f.allocateErr != nil { + return nil, f.allocateErr + } + return f.allocateOut, nil +} + +func (f *fakeEIPService) AssociateAddress(context.Context, *ec2.AssociateAddressInput, string) (*ec2.AssociateAddressOutput, error) { + if f.associateErr != nil { + return nil, f.associateErr + } + if f.associateOut != nil { + return f.associateOut, nil + } + return &ec2.AssociateAddressOutput{}, nil +} + +func (f *fakeEIPService) DisassociateAddress(_ context.Context, in *ec2.DisassociateAddressInput, _ string) (*ec2.DisassociateAddressOutput, error) { + f.mu.Lock() + if in != nil && in.AssociationId != nil { + f.disassociated = append(f.disassociated, *in.AssociationId) + } + f.mu.Unlock() + if f.disassociateErr != nil { + return nil, f.disassociateErr + } + return &ec2.DisassociateAddressOutput{}, nil +} + +func (f *fakeEIPService) ReleaseAddress(_ context.Context, in *ec2.ReleaseAddressInput, _ string) (*ec2.ReleaseAddressOutput, error) { + f.mu.Lock() + if in != nil && in.AllocationId != nil { + f.released = append(f.released, *in.AllocationId) + } + f.mu.Unlock() + if f.releaseErr != nil { + return nil, f.releaseErr + } + return &ec2.ReleaseAddressOutput{}, nil +} + +// fakeAllocator is an external.Allocator whose Release returns releaseErr and +// records each release. +type fakeAllocator struct { + mu sync.Mutex + + allocateAddr netip.Addr + allocateErr error + releaseErr error + + releases []netip.Addr +} + +var _ external.Allocator = (*fakeAllocator)(nil) + +func (f *fakeAllocator) Allocate(context.Context, external.AllocateRequest) (netip.Addr, error) { + return f.allocateAddr, f.allocateErr +} + +func (f *fakeAllocator) Release(_ context.Context, _ string, ip netip.Addr, _ string) error { + f.mu.Lock() + f.releases = append(f.releases, ip) + f.mu.Unlock() + return f.releaseErr +} + +// erroringPlumber is a recordingPlumber whose SetupTap returns setupErr. +type erroringPlumber struct { + recordingPlumber + + setupErr error +} + +var _ vm.NetworkPlumber = (*erroringPlumber)(nil) + +func (p *erroringPlumber) SetupTap(vm.TapSpec) error { return p.setupErr } + +// hookVolumeMounter is a vm.VolumeMounter whose Mount runs onMount, letting a +// test set the instance status so launch returns before starting QEMU. +type hookVolumeMounter struct { + onMount func(*vm.VM) + mountErr error +} + +var _ vm.VolumeMounter = (*hookVolumeMounter)(nil) + +func (m *hookVolumeMounter) Mount(_ context.Context, v *vm.VM) error { + if m.onMount != nil { + m.onMount(v) + } + return m.mountErr +} + +func (m *hookVolumeMounter) Unmount(context.Context, *vm.VM) error { return nil } +func (m *hookVolumeMounter) Abandon(context.Context, *vm.VM, string) error { return nil } +func (m *hookVolumeMounter) MountOne(context.Context, string, *viperblocklegacyv1.EBSRequest) error { + return nil +} +func (m *hookVolumeMounter) UnmountOne(context.Context, string, viperblocklegacyv1.EBSRequest) error { + return nil +} + +// noReplyMsg builds a message with no reply subject, so msg.Respond fails +// and the handler's "respond failed" branch runs. +func noReplyMsg(subject string, data []byte) *nats.Msg { + return &nats.Msg{Subject: subject, Data: data} +} diff --git a/spinifex/daemon/daemon.go b/spinifex/daemon/daemon.go index 752711bae..0ea1c616e 100644 --- a/spinifex/daemon/daemon.go +++ b/spinifex/daemon/daemon.go @@ -1,3 +1,6 @@ +// Package daemon is the per-node Spinifex daemon: it wires the AWS service +// handlers to their NATS topics and owns this node's VMs, volumes, ENIs and +// the reconcilers that keep them converged. package daemon import ( @@ -1082,22 +1085,17 @@ func (d *Daemon) subscribeAll() error { ) } - // EKS gateway → daemon subscriptions. Every handler currently returns - // NotImplemented; topics are subscribed up-front so the wiring layer is - // stable while real bodies land. + // EKS gateway → daemon subscriptions. if d.eksService != nil { subs = append(subs, natsSub{"eks.CreateCluster", handleNATSRequestWithPrincipal(d.node, d.eksService.CreateCluster), "spinifex-workers"}, natsSub{"eks.DescribeCluster", handleNATSRequest(d.node, d.eksService.DescribeCluster), "spinifex-workers"}, natsSub{"eks.ListClusters", handleNATSRequest(d.node, d.eksService.ListClusters), "spinifex-workers"}, - natsSub{"eks.UpdateClusterConfig", handleNATSRequest(d.node, d.eksService.UpdateClusterConfig), "spinifex-workers"}, - natsSub{"eks.UpdateClusterVersion", handleNATSRequest(d.node, d.eksService.UpdateClusterVersion), "spinifex-workers"}, natsSub{"eks.DeleteCluster", handleNATSRequest(d.node, d.eksService.DeleteCluster), "spinifex-workers"}, natsSub{"eks.CreateNodegroup", handleNATSRequest(d.node, d.eksService.CreateNodegroup), "spinifex-workers"}, natsSub{"eks.DescribeNodegroup", handleNATSRequest(d.node, d.eksService.DescribeNodegroup), "spinifex-workers"}, natsSub{"eks.ListNodegroups", handleNATSRequest(d.node, d.eksService.ListNodegroups), "spinifex-workers"}, natsSub{"eks.UpdateNodegroupConfig", handleNATSRequest(d.node, d.eksService.UpdateNodegroupConfig), "spinifex-workers"}, - natsSub{"eks.UpdateNodegroupVersion", handleNATSRequest(d.node, d.eksService.UpdateNodegroupVersion), "spinifex-workers"}, natsSub{"eks.DeleteNodegroup", handleNATSRequest(d.node, d.eksService.DeleteNodegroup), "spinifex-workers"}, natsSub{"eks.CreateAccessEntry", handleNATSRequest(d.node, d.eksService.CreateAccessEntry), "spinifex-workers"}, natsSub{"eks.DescribeAccessEntry", handleNATSRequest(d.node, d.eksService.DescribeAccessEntry), "spinifex-workers"}, @@ -1118,10 +1116,6 @@ func (d *Daemon) subscribeAll() error { natsSub{"eks.GetRecoveryDirective", handleNATSRequest(d.node, d.eksService.GetRecoveryDirective), "spinifex-workers"}, natsSub{"eks.SetRecoveryDirective", handleNATSRequest(d.node, d.eksService.SetRecoveryDirective), "spinifex-workers"}, natsSub{"eks.RestoreSnapshot", handleNATSRequest(d.node, d.eksService.RestoreSnapshot), "spinifex-workers"}, - natsSub{"eks.AssociateIdentityProviderConfig", handleNATSRequest(d.node, d.eksService.AssociateIdentityProviderConfig), "spinifex-workers"}, - natsSub{"eks.DescribeIdentityProviderConfig", handleNATSRequest(d.node, d.eksService.DescribeIdentityProviderConfig), "spinifex-workers"}, - natsSub{"eks.ListIdentityProviderConfigs", handleNATSRequest(d.node, d.eksService.ListIdentityProviderConfigs), "spinifex-workers"}, - natsSub{"eks.DisassociateIdentityProviderConfig", handleNATSRequest(d.node, d.eksService.DisassociateIdentityProviderConfig), "spinifex-workers"}, natsSub{"eks.TagResource", handleNATSRequest(d.node, d.eksService.TagResource), "spinifex-workers"}, natsSub{"eks.UntagResource", handleNATSRequest(d.node, d.eksService.UntagResource), "spinifex-workers"}, natsSub{"eks.ListTagsForResource", handleNATSRequest(d.node, d.eksService.ListTagsForResource), "spinifex-workers"}, @@ -1194,6 +1188,7 @@ func (d *Daemon) subscribeAll() error { natsSub{handlers_rds.SubjectListTagsForResource, handleNATSRequest(d.node, d.rdsService.ListTagsForResource), "spinifex-workers"}, natsSub{handlers_rds.SubjectCreateDBSubnetGroup, handleNATSRequest(d.node, d.rdsService.CreateDBSubnetGroup), "spinifex-workers"}, natsSub{handlers_rds.SubjectDescribeDBSubnetGroups, handleNATSRequest(d.node, d.rdsService.DescribeDBSubnetGroups), "spinifex-workers"}, + natsSub{handlers_rds.SubjectModifyDBSubnetGroup, handleNATSRequest(d.node, d.rdsService.ModifyDBSubnetGroup), "spinifex-workers"}, natsSub{handlers_rds.SubjectDeleteDBSubnetGroup, handleNATSRequest(d.node, d.rdsService.DeleteDBSubnetGroup), "spinifex-workers"}, natsSub{handlers_rds.SubjectCreateDBParameterGroup, handleNATSRequest(d.node, d.rdsService.CreateDBParameterGroup), "spinifex-workers"}, natsSub{handlers_rds.SubjectDescribeDBParameterGroups, handleNATSRequest(d.node, d.rdsService.DescribeDBParameterGroups), "spinifex-workers"}, @@ -1464,6 +1459,7 @@ func (d *Daemon) externalPoolConfigs() (pools []external.ExternalPoolConfig, any OCIVNICIface: p.OCIVNICIface, OCISubnetID: p.OCISubnetID, OCIPublicIPPool: p.OCIPublicIPPool, + OCIAuth: p.OCIAuth, OCIConfigFile: p.OCIConfigFile, OCIConfigProfile: p.OCIConfigProfile, @@ -1514,11 +1510,13 @@ func (d *Daemon) installOCIAllocators(ipam *ec2vpc.ExternalIPAM, js jetstream.Je continue } slog.Info("OCI allocator ready", "pool", p.Name, - "collected", len(res.Collected), "stale_bindings", len(res.Stale), "skipped", res.Skipped) + "collected", len(res.Collected), "stale_bindings", len(res.Stale), + "orphaned_public_ips", len(res.Orphaned), "skipped", res.Skipped) d.ociAllocators = append(d.ociAllocators, ociPool{name: p.Name, alloc: alloc}) } if len(d.ociAllocators) > 0 { go d.runOCIAffinityLoop() + go d.runOCIReconcileLoop() } return nil } @@ -1563,6 +1561,11 @@ type ociPool struct { // guest has finished coming up. const ociAffinityInterval = 15 * time.Second +// ociReconcileInterval is how often leaked OCI objects are collected. Slower +// than the affinity pass by three orders of magnitude: a leak costs money and +// quota, not reachability, and the pass lists a whole compartment. +const ociReconcileInterval = 10 * time.Minute + // runOCIAffinityLoop keeps OCI's idea of where an address lives in step with // where its guest actually runs. Every node runs its own, like the host EIP // loop and for the same reason: the question is about this host's guests, and a @@ -1581,6 +1584,36 @@ func (d *Daemon) runOCIAffinityLoop() { } } +// runOCIReconcileLoop repeats the startup reconcile for as long as the node +// runs. An address is leaked by a release that half-failed or a guest that went +// away, both of which happen long after start, and the startup pass alone left +// those to accumulate against the tenancy's reserved-address quota until a +// launch failed. +func (d *Daemon) runOCIReconcileLoop() { + ticker := time.NewTicker(ociReconcileInterval) + defer ticker.Stop() + for { + select { + case <-d.ctx.Done(): + return + case <-ticker.C: + } + for _, p := range d.ociAllocators { + res, err := p.alloc.Reconcile(d.ctx) + if err != nil { + slog.Error("OCI allocator reconcile failed; leaked addresses may be billing", + "pool", p.name, "err", err) + continue + } + if len(res.Collected) > 0 || len(res.Stale) > 0 || len(res.Orphaned) > 0 { + slog.Info("OCI allocator reconcile collected leaks", "pool", p.name, + "collected", len(res.Collected), "stale_bindings", len(res.Stale), + "orphaned_public_ips", len(res.Orphaned)) + } + } + } +} + // ClaimOCIAddresses runs one affinity pass over every OCI pool and records which // guests OCI is not delivering an address to. // @@ -3220,7 +3253,9 @@ func (rm *ResourceManager) deallocate(instanceType *ec2.InstanceTypeInfo) { var _ ec2instance.InstanceTypeAllocator = (*ResourceManager)(nil) -// Allocate, Deallocate, CanAllocate satisfy ec2instance.InstanceTypeAllocator. +// Allocate reserves host capacity for one instance of type it, erroring when +// the node lacks room. With Deallocate and CanAllocate it satisfies +// ec2instance.InstanceTypeAllocator. func (rm *ResourceManager) Allocate(it *ec2.InstanceTypeInfo) error { return rm.allocate(it) } func (rm *ResourceManager) Deallocate(it *ec2.InstanceTypeInfo) { rm.deallocate(it) } func (rm *ResourceManager) CanAllocate(it *ec2.InstanceTypeInfo, count int) int { diff --git a/spinifex/daemon/daemon_handlers_eks_test.go b/spinifex/daemon/daemon_handlers_eks_test.go index 254059ccf..495ff07ee 100644 --- a/spinifex/daemon/daemon_handlers_eks_test.go +++ b/spinifex/daemon/daemon_handlers_eks_test.go @@ -63,21 +63,17 @@ func TestDaemonHandleEKS_AllHandlersDispatchToService(t *testing.T) { invalid := awserrors.ErrorInvalidParameterValue // Nodegroup mutators gate on orchestration deps, which the shim service // lacks → ServiceUnavailable. The read paths reach input validation and an - // empty body fails with InvalidParameterValue. UpdateNodegroupVersion stays - // NotImplemented (v1 doesn't do AMI upgrades). + // empty body fails with InvalidParameterValue. unavailable := awserrors.ErrorServiceUnavailable cases := []struct { subject string handler nats.MsgHandler wantCode string }{ - {"eks.UpdateClusterConfig", asMsgHandler(handleNATSRequest(d.node, d.eksService.UpdateClusterConfig)), notImpl}, - {"eks.UpdateClusterVersion", asMsgHandler(handleNATSRequest(d.node, d.eksService.UpdateClusterVersion)), notImpl}, {"eks.CreateNodegroup", asMsgHandler(handleNATSRequest(d.node, d.eksService.CreateNodegroup)), unavailable}, {"eks.DescribeNodegroup", asMsgHandler(handleNATSRequest(d.node, d.eksService.DescribeNodegroup)), invalid}, {"eks.ListNodegroups", asMsgHandler(handleNATSRequest(d.node, d.eksService.ListNodegroups)), invalid}, {"eks.UpdateNodegroupConfig", asMsgHandler(handleNATSRequest(d.node, d.eksService.UpdateNodegroupConfig)), unavailable}, - {"eks.UpdateNodegroupVersion", asMsgHandler(handleNATSRequest(d.node, d.eksService.UpdateNodegroupVersion)), notImpl}, {"eks.DeleteNodegroup", asMsgHandler(handleNATSRequest(d.node, d.eksService.DeleteNodegroup)), unavailable}, {"eks.CreateAccessEntry", asMsgHandler(handleNATSRequest(d.node, d.eksService.CreateAccessEntry)), invalid}, {"eks.DescribeAccessEntry", asMsgHandler(handleNATSRequest(d.node, d.eksService.DescribeAccessEntry)), invalid}, @@ -97,15 +93,11 @@ func TestDaemonHandleEKS_AllHandlersDispatchToService(t *testing.T) { {"eks.DeleteAddon", asMsgHandler(handleNATSRequest(d.node, d.eksService.DeleteAddon)), invalid}, {"eks.DescribeAddon", asMsgHandler(handleNATSRequest(d.node, d.eksService.DescribeAddon)), invalid}, {"eks.UpdateAddon", asMsgHandler(handleNATSRequest(d.node, d.eksService.UpdateAddon)), invalid}, - {"eks.AssociateIdentityProviderConfig", asMsgHandler(handleNATSRequest(d.node, d.eksService.AssociateIdentityProviderConfig)), notImpl}, - {"eks.DescribeIdentityProviderConfig", asMsgHandler(handleNATSRequest(d.node, d.eksService.DescribeIdentityProviderConfig)), notImpl}, - {"eks.ListIdentityProviderConfigs", asMsgHandler(handleNATSRequest(d.node, d.eksService.ListIdentityProviderConfigs)), notImpl}, - {"eks.DisassociateIdentityProviderConfig", asMsgHandler(handleNATSRequest(d.node, d.eksService.DisassociateIdentityProviderConfig)), notImpl}, {"eks.TagResource", asMsgHandler(handleNATSRequest(d.node, d.eksService.TagResource)), notImpl}, {"eks.UntagResource", asMsgHandler(handleNATSRequest(d.node, d.eksService.UntagResource)), notImpl}, {"eks.ListTagsForResource", asMsgHandler(handleNATSRequest(d.node, d.eksService.ListTagsForResource)), notImpl}, } - require.Len(t, cases, 30, "expected exactly one handler per non-lifecycle AWS EKS action") + require.Len(t, cases, 23, "expected exactly one handler per non-lifecycle AWS EKS action") for _, c := range cases { t.Run(c.subject, func(t *testing.T) { diff --git a/spinifex/daemon/daemon_handlers_instance_tags_test.go b/spinifex/daemon/daemon_handlers_instance_tags_test.go index 09768004c..171299a08 100644 --- a/spinifex/daemon/daemon_handlers_instance_tags_test.go +++ b/spinifex/daemon/daemon_handlers_instance_tags_test.go @@ -8,6 +8,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/mulgadc/spinifex/contracts/ec2/v1" + "github.com/mulgadc/spinifex/internal/testkit" ec2instance "github.com/mulgadc/spinifex/spinifex/domains/ec2/instance" ec2tags "github.com/mulgadc/spinifex/spinifex/domains/ec2/tags" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" @@ -155,9 +156,21 @@ func TestHandleSetInstanceTags_CrossAccountRejected(t *testing.T) { // into the central tag store, so describe-tags sees them from birth. The write // is best-effort, so the assertion tolerates it landing slightly late. func TestHandleEC2RunInstances_LaunchTagsWriteCentralStore(t *testing.T) { - daemon, memStore := createFullTestDaemonWithStore(t, sharedNATSURL) + // The launch fails (the AMI has no snapshot), so the manager needs a + // terminated bucket to release the record into for its tags to be checked. + // Its own server keeps that record out of the shared terminated bucket. + ns, _, _ := testutil.StartTestJetStream(t) + daemon, memStore := createFullTestDaemonWithStore(t, ns.ClientURL()) seedTestAMI(t, memStore, daemon.config.Predastore.Bucket, "ami-launchtags") + jsm, err := NewJetStreamManager(daemon.natsConn) + require.NoError(t, err) + require.NoError(t, jsm.InitKVBucket()) + require.NoError(t, jsm.InitTerminatedInstanceBucket()) + daemon.jsManager = jsm + daemon.stateStore = newStateStoreAdapter(jsm, daemon.persistState) + daemon.vmMgr.SetDeps(vm.Deps{NodeID: daemon.node, StateStore: daemon.stateStore}) + sub, err := daemon.natsConn.QueueSubscribe("ec2.RunInstances.launchtags", "spinifex-workers", asMsgHandler(daemon.handleEC2RunInstances)) require.NoError(t, err) defer func() { _ = sub.Unsubscribe() }() @@ -187,7 +200,11 @@ func TestHandleEC2RunInstances_LaunchTagsWriteCentralStore(t *testing.T) { assert.Eventually(t, func() bool { return assert.ObjectsAreEqual(want, centralTags(t, daemon, testAccountID, id)) }, 5*time.Second, 50*time.Millisecond, "central tag store must receive launch tags") - assert.Equal(t, want, recordTags(t, daemon, id)) + assert.Eventually(t, func() bool { + v, err := daemon.jsManager.LoadTerminatedInstance(id) + return err == nil && v != nil && v.Instance != nil && + assert.ObjectsAreEqual(want, tagsAsMap(v.Instance.Tags)) + }, 5*time.Second, 10*time.Millisecond, "the released record must carry the launch tags") } // Missing InstanceTagsData, and a set with no tags, are rejected with diff --git a/spinifex/daemon/daemon_handlers_instance_test.go b/spinifex/daemon/daemon_handlers_instance_test.go index 759510ccb..bc3cd273f 100644 --- a/spinifex/daemon/daemon_handlers_instance_test.go +++ b/spinifex/daemon/daemon_handlers_instance_test.go @@ -3,13 +3,17 @@ package daemon import ( "encoding/json" "errors" + "github.com/mulgadc/spinifex/contracts/ec2/v1" "github.com/mulgadc/spinifex/spinifex/foundation/messaging/nats" "testing" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" + ec2image "github.com/mulgadc/spinifex/spinifex/domains/ec2/image" ec2instance "github.com/mulgadc/spinifex/spinifex/domains/ec2/instance" + ec2key "github.com/mulgadc/spinifex/spinifex/domains/ec2/key" + ec2tags "github.com/mulgadc/spinifex/spinifex/domains/ec2/tags" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" "github.com/mulgadc/spinifex/spinifex/providers/objectstore" "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" @@ -487,3 +491,233 @@ func TestHandleEC2DescribeStoppedInstances_CrossAccountIsolation(t *testing.T) { } assert.ElementsMatch(t, []string{"i-mine"}, seen, "caller must only see their own instances") } + +// --- handleEC2RunInstances --- + +func TestHandleEC2RunInstances_MissingAccountHeader(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + body := mustMarshal(t, &ec2.RunInstancesInput{InstanceType: aws.String(getTestInstanceType(t))}) + + reply := requestHandler(t, d.natsConn, "ec2.RunInstances.p1-noacct", asMsgHandler(d.handleEC2RunInstances), "", body) + assert.Equal(t, awserrors.ErrorServerInternal, decodeError(t, reply.Data)["Code"]) + assert.Zero(t, d.vmMgr.Count(), "an unattributable launch must not reserve anything") +} + +func TestHandleEC2RunInstances_InvalidReservationTarget(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + body := mustMarshal(t, &ec2.RunInstancesInput{ + InstanceType: aws.String(getTestInstanceType(t)), + MinCount: aws.Int64(1), + MaxCount: aws.Int64(1), + CapacityReservationSpecification: &ec2.CapacityReservationSpecification{ + CapacityReservationTarget: &ec2.CapacityReservationTarget{CapacityReservationId: aws.String("cr-0000000000missing")}, + }, + }) + + reply := requestHandler(t, d.natsConn, "ec2.RunInstances.p1-badcr", asMsgHandler(d.handleEC2RunInstances), testAccountID, body) + assert.Equal(t, awserrors.ErrorInvalidCapacityReservationIdNotFound, decodeError(t, reply.Data)["Code"]) + assert.Zero(t, d.vmMgr.Count()) +} + +// A gateway-minted reservation ID replaces the one prepare generated, and a +// central tag store that cannot take the launch tags does not fail the launch. +func TestHandleEC2RunInstances_GatewayReservationAndTagStoreFailure(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + images := objectstore.NewMemoryObjectStore() + seedTestAMI(t, images, d.config.Predastore.Bucket, "ami-p1-gateway") + d.instanceService = ec2instance.NewInstanceServiceImpl( + d.config, d.resourceMgr.instanceTypes, d.natsConn, images, d.vmMgr, d.resourceMgr, nil) + d.instanceService.SetRunInstancesDeps( + ec2image.NewImageServiceImplWithStore(images, d.config.Predastore.Bucket), + ec2key.NewKeyServiceImplWithStore(images, d.config.Predastore.Bucket), nil, nil) + + _, tagKV := faultBucket(t) + for _, m := range []string{"Put", "Create", "Update"} { + tagKV.setFail(m, true) + } + d.tagsService = ec2tags.NewTagsServiceImplWithStore(d.config, objectstore.NewMemoryObjectStore(), tagKV) + t.Cleanup(d.vmMgr.WaitForBackgroundWork) + + subject := "ec2.RunInstances.p1-gateway" + sub, err := d.natsConn.Subscribe(subject, asMsgHandler(d.handleEC2RunInstances)) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + + msg := nats.NewMsg(subject) + msg.Data = mustMarshal(t, &ec2.RunInstancesInput{ + ImageId: aws.String("ami-p1-gateway"), + InstanceType: aws.String(getTestInstanceType(t)), + MinCount: aws.Int64(1), + MaxCount: aws.Int64(1), + TagSpecifications: []*ec2.TagSpecification{{ + ResourceType: aws.String("instance"), + Tags: []*ec2.Tag{{Key: aws.String("Name"), Value: aws.String("web")}}, + }}, + }) + msg.Header.Set(natsmsg.AccountIDHeader, testAccountID) + msg.Header.Set(natsmsg.ReservationIDHeader, "r-0gateway000000001") + reply, err := d.natsConn.RequestMsg(msg, 5*time.Second) + require.NoError(t, err) + + var reservation ec2.Reservation + require.NoError(t, json.Unmarshal(reply.Data, &reservation), "%s", reply.Data) + assert.Equal(t, "r-0gateway000000001", aws.StringValue(reservation.ReservationId)) + require.Len(t, reservation.Instances, 1, "a failed tag projection must not fail the launch") +} + +// --- handleEC2StartStoppedInstance forwarding --- + +func TestHandleEC2StartStoppedInstance_Forwarding(t *testing.T) { + newFixture := func(t *testing.T, id, lastNode string) (*Daemon, *vmmock.StateStore, []byte) { + store := vmmock.New() + v := stoppedVMFixture(id, testAccountID) + v.InstanceType = "definitely.not.a.real.type" + v.LastNode = lastNode + store.Stopped[v.ID] = v + body, err := json.Marshal(ec2instance.StartStoppedInstanceInput{InstanceID: v.ID}) + require.NoError(t, err) + return daemonWithFakeStateStore(t, store), store, body + } + owner := func(t *testing.T, d *Daemon, node string, fn nats.MsgHandler) { + sub, err := d.natsConn.Subscribe("ec2.start."+node, fn) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + } + + t.Run("owner success is relayed", func(t *testing.T) { + d, _, body := newFixture(t, "i-p1-fwd-ok", "node-p1-ok") + owner(t, d, "node-p1-ok", func(m *nats.Msg) { _ = m.Respond([]byte(`{"started":true}`)) }) + + reply := requestHandler(t, d.natsConn, "ec2.start.p1-ok", asMsgHandler(d.handleEC2StartStoppedInstance), testAccountID, body) + assert.JSONEq(t, `{"started":true}`, string(reply.Data)) + }) + + t.Run("owner at capacity falls back locally", func(t *testing.T) { + d, store, body := newFixture(t, "i-p1-fwd-cap", "node-p1-cap") + // The owner claims the record before answering at capacity, so the local + // attempt that follows finds it gone: a NotFound reply proves the + // fallback ran rather than the capacity error being relayed. + owner(t, d, "node-p1-cap", func(m *nats.Msg) { + _, _ = store.ClaimStoppedInstance("i-p1-fwd-cap") + _ = m.Respond(awserrors.GenerateErrorPayload(awserrors.ErrorInsufficientInstanceCapacity)) + }) + + reply := requestHandler(t, d.natsConn, "ec2.start.p1-cap", asMsgHandler(d.handleEC2StartStoppedInstance), testAccountID, body) + assert.Equal(t, awserrors.ErrorInvalidInstanceIDNotFound, decodeError(t, reply.Data)["Code"]) + }) + + t.Run("owner not subscribed falls back locally", func(t *testing.T) { + d, _, body := newFixture(t, "i-p1-fwd-gone", "node-p1-gone") + reply := requestHandler(t, d.natsConn, "ec2.start.p1-gone", asMsgHandler(d.handleEC2StartStoppedInstance), testAccountID, body) + assert.Equal(t, awserrors.ErrorInsufficientInstanceCapacity, decodeError(t, reply.Data)["Code"], + "the local attempt must run and reject the unresolvable instance type") + }) + + t.Run("relay to a departed caller is an error", func(t *testing.T) { + d, _, body := newFixture(t, "i-p1-fwd-relay", "node-p1-relay") + owner(t, d, "node-p1-relay", func(m *nats.Msg) { _ = m.Respond([]byte(`{}`)) }) + + msg := nats.NewMsg("ec2.start.p1-relay") + msg.Data = body + msg.Header.Set(natsmsg.AccountIDHeader, testAccountID) + assert.Equal(t, outcomeError, d.handleEC2StartStoppedInstance(msg)) + }) +} + +// --- handleSetInstanceTags / handleSetInstanceMonitoring --- + +func setTagsCommand(id string) ec2v1.EC2InstanceCommand { + return ec2v1.EC2InstanceCommand{ + ID: id, + Attributes: ec2v1.EC2CommandAttributes{SetInstanceTags: true}, + InstanceTagsData: &ec2v1.InstanceTagsData{ + Tags: map[string]string{"env": "dev"}, + }, + } +} + +func TestHandleSetInstanceTags_Failures(t *testing.T) { + t.Run("record without an instance", func(t *testing.T) { + const id = "i-p1-tags-norecord" + d := tagTestDaemon(t, id, nil) + d.vmMgr.UpdateState(id, func(v *vm.VM) { v.Instance = nil }) + + reply := requestHandler(t, d.natsConn, "ec2.cmd."+id, d.handleEC2Events, testAccountID, mustMarshal(t, setTagsCommand(id))) + assert.Equal(t, awserrors.ErrorServerInternal, decodeError(t, reply.Data)["Code"]) + }) + + t.Run("central store write fails", func(t *testing.T) { + const id = "i-p1-tags-central" + d := tagTestDaemon(t, id, map[string]string{"Name": "web"}) + _, tagKV := faultBucket(t) + for _, m := range []string{"Put", "Create", "Update"} { + tagKV.setFail(m, true) + } + d.tagsService = ec2tags.NewTagsServiceImplWithStore(d.config, objectstore.NewMemoryObjectStore(), tagKV) + + reply := requestHandler(t, d.natsConn, "ec2.cmd."+id, d.handleEC2Events, testAccountID, mustMarshal(t, setTagsCommand(id))) + assert.Equal(t, awserrors.ErrorServerInternal, decodeError(t, reply.Data)["Code"]) + assert.Equal(t, map[string]string{"Name": "web"}, recordTags(t, d, id), + "the record must not move ahead of the central store") + }) + + t.Run("persist fails", func(t *testing.T) { + const id = "i-p1-tags-persist" + d := tagTestDaemon(t, id, nil) + d.vmMgr.SetDeps(vm.Deps{NodeID: d.node, StateStore: &vmmock.StateStore{SaveRunningErr: errInjected}}) + + reply := requestHandler(t, d.natsConn, "ec2.cmd."+id, d.handleEC2Events, testAccountID, mustMarshal(t, setTagsCommand(id))) + assert.Equal(t, awserrors.ErrorServerInternal, decodeError(t, reply.Data)["Code"]) + }) + + t.Run("caller gone after the write", func(t *testing.T) { + const id = "i-p1-tags-noreply" + d := tagTestDaemon(t, id, nil) + instance, ok := d.vmMgr.Get(id) + require.True(t, ok) + + msg := nats.NewMsg("ec2.cmd." + id) + msg.Header.Set(natsmsg.AccountIDHeader, testAccountID) + assert.Equal(t, outcomeSuccess, d.handleSetInstanceTags(t.Context(), msg, setTagsCommand(id), instance)) + assert.Equal(t, map[string]string{"env": "dev"}, recordTags(t, d, id)) + }) +} + +func TestHandleSetInstanceMonitoring_Failures(t *testing.T) { + enable := func(id string) ec2v1.EC2InstanceCommand { + return ec2v1.EC2InstanceCommand{ + ID: id, + Attributes: ec2v1.EC2CommandAttributes{SetInstanceMonitoring: true}, + InstanceMonitoringData: &ec2v1.InstanceMonitoringData{Enabled: true}, + } + } + + t.Run("missing data", func(t *testing.T) { + const id = "i-p1-mon-nodata" + d, _ := monitoringTestDaemon(t, id, false) + cmd := enable(id) + cmd.InstanceMonitoringData = nil + + reply := requestHandler(t, d.natsConn, "ec2.cmd."+id, d.handleEC2Events, testAccountID, mustMarshal(t, cmd)) + assert.Equal(t, awserrors.ErrorMissingParameter, decodeError(t, reply.Data)["Code"]) + }) + + t.Run("persist fails", func(t *testing.T) { + const id = "i-p1-mon-persist" + d, _ := monitoringTestDaemon(t, id, false) + d.vmMgr.SetDeps(vm.Deps{NodeID: d.node, StateStore: &vmmock.StateStore{SaveRunningErr: errInjected}}) + + reply := requestHandler(t, d.natsConn, "ec2.cmd."+id, d.handleEC2Events, testAccountID, mustMarshal(t, enable(id))) + assert.Equal(t, awserrors.ErrorServerInternal, decodeError(t, reply.Data)["Code"]) + }) + + t.Run("caller gone after the write", func(t *testing.T) { + const id = "i-p1-mon-noreply" + d, _ := monitoringTestDaemon(t, id, false) + instance, ok := d.vmMgr.Get(id) + require.True(t, ok) + + assert.Equal(t, outcomeSuccess, d.handleSetInstanceMonitoring(t.Context(), noReplyMsg("ec2.cmd."+id, nil), enable(id), instance)) + assert.True(t, recordMonitoring(t, d, id)) + }) +} diff --git a/spinifex/daemon/daemon_handlers_tag_test.go b/spinifex/daemon/daemon_handlers_tag_test.go index 6abe504c4..720a6b5e0 100644 --- a/spinifex/daemon/daemon_handlers_tag_test.go +++ b/spinifex/daemon/daemon_handlers_tag_test.go @@ -6,8 +6,21 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" + ec2eigw "github.com/mulgadc/spinifex/spinifex/domains/ec2/eigw" + ec2eip "github.com/mulgadc/spinifex/spinifex/domains/ec2/eip" + ec2igw "github.com/mulgadc/spinifex/spinifex/domains/ec2/igw" + ec2image "github.com/mulgadc/spinifex/spinifex/domains/ec2/image" + ec2key "github.com/mulgadc/spinifex/spinifex/domains/ec2/key" + ec2natgw "github.com/mulgadc/spinifex/spinifex/domains/ec2/natgw" + ec2routetable "github.com/mulgadc/spinifex/spinifex/domains/ec2/routetable" + ec2snapshot "github.com/mulgadc/spinifex/spinifex/domains/ec2/snapshot" + ec2tags "github.com/mulgadc/spinifex/spinifex/domains/ec2/tags" + ec2volume "github.com/mulgadc/spinifex/spinifex/domains/ec2/volume" + ec2vpc "github.com/mulgadc/spinifex/spinifex/domains/ec2/vpc" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/mulgadc/spinifex/spinifex/providers/objectstore" "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/nats-io/nats.go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -205,3 +218,73 @@ func TestDeleteTags_Validation(t *testing.T) { _, err = d.deleteTags(context.Background(), &ec2.DeleteTagsInput{}, testAccountID) assert.Equal(t, awserrors.ErrorMissingParameter, err.Error()) } + +// Every service that stores tags on its own record must be mirrored, or a +// create-tags reaches the central store and leaves that record stale. +func TestRecordTagMirrors_IncludesEveryRecordStore(t *testing.T) { + assert.Empty(t, (&Daemon{eipService: ec2eip.NewDisabledEIPService()}).recordTagMirrors(), + "the disabled EIP service holds no records to mirror") + + d := &Daemon{ + vpcService: &ec2vpc.VPCServiceImpl{}, + imageService: &ec2image.ImageServiceImpl{}, + volumeService: &ec2volume.VolumeServiceImpl{}, + snapshotService: &ec2snapshot.SnapshotServiceImpl{}, + routeTableService: &ec2routetable.RouteTableServiceImpl{}, + igwService: &ec2igw.IGWServiceImpl{}, + eigwService: &ec2eigw.EgressOnlyIGWServiceImpl{}, + eipService: &ec2eip.EIPServiceImpl{}, + natGatewayService: &ec2natgw.NatGatewayServiceImpl{}, + keyService: &ec2key.KeyServiceImpl{}, + } + assert.Len(t, d.recordTagMirrors(), 10) +} + +func TestDeleteTags_NonInstanceResource(t *testing.T) { + d := tagTestDaemon(t, "i-p1-tag-unused", nil) + require.NoError(t, d.tagsService.PutResourceTags(t.Context(), testAccountID, "vol-p1-tagdel", + map[string]string{"env": "dev", "team": "infra"})) + + _, err := d.deleteTags(context.Background(), &ec2.DeleteTagsInput{ + Resources: []*string{nil, aws.String("vol-p1-tagdel")}, + Tags: []*ec2.Tag{{Key: nil}, {Key: aws.String("team")}}, + }, testAccountID) + require.NoError(t, err) + assert.Equal(t, map[string]string{"env": "dev"}, centralTags(t, d, testAccountID, "vol-p1-tagdel")) +} + +func TestTags_CentralStoreFailure(t *testing.T) { + d := tagTestDaemon(t, "i-p1-tag-unused2", nil) + _, tagKV := faultBucket(t) + for _, m := range []string{"Get", "Put", "Create", "Update", "Delete", "Purge"} { + tagKV.setFail(m, true) + } + d.tagsService = ec2tags.NewTagsServiceImplWithStore(d.config, objectstore.NewMemoryObjectStore(), tagKV) + vol := []*string{aws.String("vol-p1-tagfail")} + + _, err := d.createTags(context.Background(), &ec2.CreateTagsInput{ + Resources: vol, Tags: []*ec2.Tag{{Key: aws.String("k"), Value: aws.String("v")}}, + }, testAccountID) + require.Error(t, err) + + _, err = d.deleteTags(context.Background(), &ec2.DeleteTagsInput{Resources: vol}, testAccountID) + require.Error(t, err) +} + +func TestCreateTags_OwnerRequestFails(t *testing.T) { + d := tagTestDaemon(t, "i-p1-tag-closed", nil) + closed, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + closed.Close() + orig := d.natsConn + d.natsConn = closed + defer func() { d.natsConn = orig }() + + _, err = d.createTags(context.Background(), &ec2.CreateTagsInput{ + Resources: []*string{aws.String("i-p1-tag-closed")}, + Tags: []*ec2.Tag{{Key: aws.String("k"), Value: aws.String("v")}}, + }, testAccountID) + require.Error(t, err) + assert.Equal(t, awserrors.ErrorServerInternal, err.Error(), + "a transport failure is not evidence the instance is gone") +} diff --git a/spinifex/daemon/daemon_handlers_test.go b/spinifex/daemon/daemon_handlers_test.go index 23ae61bf1..3f76e1f9c 100644 --- a/spinifex/daemon/daemon_handlers_test.go +++ b/spinifex/daemon/daemon_handlers_test.go @@ -23,6 +23,7 @@ import ( viperblocklegacyv1 "github.com/mulgadc/spinifex/contracts/viperblockd/legacy/v1" "github.com/mulgadc/spinifex/internal/testkit" "github.com/mulgadc/spinifex/internal/testkit/ebsfake" + "github.com/mulgadc/spinifex/spinifex/bootstrap/config" ec2account "github.com/mulgadc/spinifex/spinifex/domains/ec2/account" "github.com/mulgadc/spinifex/spinifex/domains/ec2/ebs/metadata" ec2eigw "github.com/mulgadc/spinifex/spinifex/domains/ec2/eigw" @@ -696,14 +697,15 @@ func TestHandleEC2Events_StopInstance(t *testing.T) { daemon := createFullTestDaemonWithJetStream(t, natsURL) instanceID := "i-test-stop-001" - daemon.vmMgr.Insert(&vm.VM{ + instance := &vm.VM{ ID: instanceID, InstanceType: getTestInstanceType(t), Status: vm.StateRunning, Instance: &ec2.Instance{}, QMPClient: &qmp.QMPClient{}, AccountID: testAccountID, - }) + } + daemon.vmMgr.Insert(instance) sub, err := daemon.natsConn.Subscribe( fmt.Sprintf("ec2.cmd.%s", instanceID), @@ -731,18 +733,22 @@ func TestHandleEC2Events_StopInstance(t *testing.T) { // The ack comes first and the transition runs detached, so the state is a // later fact than the reply — and it does not stop at stopping. - assertLeavesRunning(t, daemon, instanceID, vm.StateStopping, vm.StateStopped) + assertLeavesRunning(t, daemon, instance, vm.StateStopping, vm.StateStopped) } // assertLeavesRunning waits for a detached stop or terminate to move the // instance out of running. Asserting on the transient state alone is a race in // both directions: too early reads running, too late reads the final state. -func assertLeavesRunning(t *testing.T, daemon *Daemon, instanceID string, want ...vm.InstanceState) { +func assertLeavesRunning(t *testing.T, daemon *Daemon, instance *vm.VM, want ...vm.InstanceState) { t.Helper() require.EventuallyWithT(t, func(c *assert.CollectT) { var status vm.InstanceState - daemon.vmMgr.UpdateState(instanceID, func(v *vm.VM) { status = v.Status }) + if !daemon.vmMgr.UpdateState(instance.ID, func(v *vm.VM) { status = v.Status }) { + // A finished stop or terminate drops the instance from the manager + // under the same lock, so the dropped VM holds the state it left in. + status = instance.Status + } assert.Contains(c, want, status) }, 10*time.Second, 10*time.Millisecond) } @@ -753,14 +759,15 @@ func TestHandleEC2Events_TerminateInstance(t *testing.T) { daemon := createFullTestDaemonWithJetStream(t, natsURL) instanceID := "i-test-term-001" - daemon.vmMgr.Insert(&vm.VM{ + instance := &vm.VM{ ID: instanceID, InstanceType: getTestInstanceType(t), Status: vm.StateRunning, Instance: &ec2.Instance{}, QMPClient: &qmp.QMPClient{}, AccountID: testAccountID, - }) + } + daemon.vmMgr.Insert(instance) sub, err := daemon.natsConn.Subscribe( fmt.Sprintf("ec2.cmd.%s", instanceID), @@ -785,7 +792,7 @@ func TestHandleEC2Events_TerminateInstance(t *testing.T) { assert.Equal(t, `{}`, string(reply.Data)) - assertLeavesRunning(t, daemon, instanceID, vm.StateShuttingDown, vm.StateTerminated) + assertLeavesRunning(t, daemon, instance, vm.StateShuttingDown, vm.StateTerminated) } func TestHandleEC2Events_RebootRunningInstance(t *testing.T) { @@ -4060,3 +4067,119 @@ func TestHandleEC2CreateImage_StoppedInstanceNotInKV(t *testing.T) { require.NoError(t, err) assert.Equal(t, awserrors.ErrorInvalidInstanceIDNotFound, errResp["Code"]) } + +func TestHandleNATSRequestWithPrincipal(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + defer nc.Close() + + const principal = "arn:aws:iam::000000000001:user/alice" + fn := func(_ context.Context, in *testInput, accountID, principalARN string) (*testOutput, error) { + if in.Name == "fail" { + return nil, errors.New(awserrors.ErrorInvalidParameterValue) + } + return &testOutput{Greeting: in.Name + "@" + accountID + "/" + principalARN}, nil + } + sub, err := nc.Subscribe("test.principal", asMsgHandler(handleNATSRequestWithPrincipal("test-node", fn))) + require.NoError(t, err) + defer func() { _ = sub.Unsubscribe() }() + + request := func(body string) *nats.Msg { + msg := nats.NewMsg("test.principal") + msg.Data = []byte(body) + msg.Header.Set(natsmsg.AccountIDHeader, testAccountID) + msg.Header.Set(natsmsg.PrincipalARNHeader, principal) + reply, err := nc.RequestMsg(msg, 5*time.Second) + require.NoError(t, err) + return reply + } + + t.Run("caller identity reaches the service", func(t *testing.T) { + var out testOutput + require.NoError(t, json.Unmarshal(request(`{"name":"bob"}`).Data, &out)) + assert.Equal(t, "bob@"+testAccountID+"/"+principal, out.Greeting) + }) + + t.Run("service error", func(t *testing.T) { + assert.Equal(t, awserrors.ErrorInvalidParameterValue, decodeError(t, request(`{"name":"fail"}`).Data)["Code"]) + }) + + t.Run("malformed payload", func(t *testing.T) { + assert.Equal(t, awserrors.ErrorValidationError, decodeError(t, request(`{`).Data)["Code"]) + }) +} + +func TestHandleEC2Events_CommandValidation(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + instanceID := "i-p1-cmd-validate" + d.vmMgr.Insert(&vm.VM{ + ID: instanceID, + InstanceType: getTestInstanceType(t), + Status: vm.StateRunning, + Instance: &ec2.Instance{}, + AccountID: testAccountID, + }) + + cases := []struct { + name string + attrs ec2v1.EC2CommandAttributes + want string + }{ + {"start a running instance", ec2v1.EC2CommandAttributes{StartInstance: true}, awserrors.ErrorIncorrectInstanceState}, + {"attach ENI without data", ec2v1.EC2CommandAttributes{AttachENI: true}, awserrors.ErrorInvalidParameterValue}, + {"detach ENI without data", ec2v1.EC2CommandAttributes{DetachENI: true}, awserrors.ErrorInvalidParameterValue}, + {"associate profile without data", ec2v1.EC2CommandAttributes{AssociateIamInstanceProfile: true}, awserrors.ErrorMissingParameter}, + {"no command set", ec2v1.EC2CommandAttributes{}, awserrors.ErrorServerInternal}, + } + for i, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + body, err := json.Marshal(ec2v1.EC2InstanceCommand{ID: instanceID, Attributes: tc.attrs}) + require.NoError(t, err) + subject := fmt.Sprintf("ec2.cmd.p1-validate-%d", i) + reply := requestHandler(t, d.natsConn, subject, d.handleEC2Events, testAccountID, body) + assert.Equal(t, tc.want, decodeError(t, reply.Data)["Code"]) + }) + } + + var status vm.InstanceState + d.vmMgr.UpdateState(instanceID, func(v *vm.VM) { status = v.Status }) + assert.Equal(t, vm.StateRunning, status, "rejected commands must leave the instance alone") +} + +// A requester that has gone away cannot be answered, but the admitted reboot +// still counts as a success rather than an error. +func TestDispatchEC2Command_RebootWithoutReplySubject(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + instanceID := "i-p1-reboot-noreply" + d.vmMgr.Insert(&vm.VM{ + ID: instanceID, + InstanceType: getTestInstanceType(t), + Status: vm.StateRunning, + Instance: &ec2.Instance{}, + QMPClient: &qmp.QMPClient{}, + AccountID: testAccountID, + }) + t.Cleanup(d.vmMgr.WaitForBackgroundWork) + + body, err := json.Marshal(ec2v1.EC2InstanceCommand{ + ID: instanceID, + Attributes: ec2v1.EC2CommandAttributes{RebootInstance: true}, + }) + require.NoError(t, err) + msg := nats.NewMsg("ec2.cmd." + instanceID) + msg.Data = body + msg.Header.Set(natsmsg.AccountIDHeader, testAccountID) + + name, outcome := d.dispatchEC2Command(msg) + assert.Equal(t, "RebootInstance", name) + assert.Equal(t, outcomeSuccess, outcome) +} + +func TestIsOVNDBQuorumMember_NoClusterConfig(t *testing.T) { + assert.False(t, (&Daemon{node: "node-1"}).isOVNDBQuorumMember()) +} + +func TestQueryNATSRole_NoNATSService(t *testing.T) { + d := &Daemon{config: &config.Config{Services: []string{"daemon"}}} + assert.Empty(t, d.queryNATSRole(), "a node without NATS has no JetStream role to probe") +} diff --git a/spinifex/daemon/daemon_handlers_vpc_test.go b/spinifex/daemon/daemon_handlers_vpc_test.go index 6c0c5fa6b..d7b2db515 100644 --- a/spinifex/daemon/daemon_handlers_vpc_test.go +++ b/spinifex/daemon/daemon_handlers_vpc_test.go @@ -15,6 +15,7 @@ import ( ec2routetable "github.com/mulgadc/spinifex/spinifex/domains/ec2/routetable" ec2vpc "github.com/mulgadc/spinifex/spinifex/domains/ec2/vpc" "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -284,3 +285,74 @@ func TestEnsureDefaultVPCInfrastructure_SkipsHalfBuiltAccounts(t *testing.T) { require.NoError(t, err) assert.Len(t, completed.InternetGateways, 1) } + +// Without persistence the VPC service reports no default VPC and no error; the +// handlers must say so rather than reply with an empty ID. +func TestDefaultVPCHandlers_NoPersistence(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + d.vpcService = &ec2vpc.VPCServiceImpl{} + + msg, sub := syncReply(t, d.natsConn, "ec2.test.EnsureDefaultVpc.nopersist", []byte(`{"account_id":"000000000771"}`)) + assert.Equal(t, outcomeError, d.handleEnsureDefaultVpc(msg)) + reply, err := sub.NextMsg(2 * time.Second) + require.NoError(t, err) + assert.JSONEq(t, `{"error":"default VPC has no ID"}`, string(reply.Data)) + + assert.Equal(t, outcomeSuccess, d.handleAccountCreated(noReplyMsg("account.created", []byte(`{"account_id":"000000000771"}`))), + "with no gateway service there is no infrastructure to build") +} + +func TestDefaultVPCHandlers_UnreadableClaim(t *testing.T) { + d, nc := createDefaultVPCTestDaemon(t) + const account = "000000000772" + js, err := jetstream.New(nc) + require.NoError(t, err) + defaults, err := js.KeyValue(t.Context(), ec2vpc.KVBucketDefaultVPCs) + require.NoError(t, err) + _, err = defaults.Put(t.Context(), account, []byte("{")) + require.NoError(t, err) + + assert.Equal(t, outcomeError, d.handleAccountCreated(noReplyMsg("account.created", []byte(`{"account_id":"`+account+`"}`)))) + + msg, sub := syncReply(t, nc, "ec2.test.EnsureDefaultVpc.unreadable", []byte(`{"account_id":"`+account+`"}`)) + assert.Equal(t, outcomeError, d.handleEnsureDefaultVpc(msg)) + reply, err := sub.NextMsg(2 * time.Second) + require.NoError(t, err) + assert.JSONEq(t, `{"error":"could not create default VPC"}`, string(reply.Data)) + + // A requester that has gone away gets the same outcome, with no reply sent. + assert.Equal(t, outcomeError, d.handleEnsureDefaultVpc(noReplyMsg("ec2.EnsureDefaultVpc", []byte(`{"account_id":"`+account+`"}`)))) +} + +func TestEnsureDefaultVPCInfrastructure_Partial(t *testing.T) { + d, _ := createDefaultVPCTestDaemon(t) + + t.Run("account without a default VPC", func(t *testing.T) { + const account = "000000000773" + d.ensureDefaultVPCInfrastructureFor(t.Context(), account) + igws, err := d.igwService.DescribeInternetGateways(t.Context(), &ec2.DescribeInternetGatewaysInput{}, account) + require.NoError(t, err) + assert.Empty(t, igws.InternetGateways) + }) + + t.Run("route waits for a gateway", func(t *testing.T) { + const account = "000000000775" + info, err := d.vpcService.EnsureDefaultVPC(account) + require.NoError(t, err) + require.NotNil(t, info) + + d.ensureDefaultIGWRoute(t.Context(), account, info.VpcId) + + out, err := d.routeTableService.DescribeRouteTables(t.Context(), &ec2.DescribeRouteTablesInput{ + Filters: []*ec2.Filter{{Name: aws.String("vpc-id"), Values: []*string{aws.String(info.VpcId)}}}, + }, account) + require.NoError(t, err) + require.NotEmpty(t, out.RouteTables) + for _, rtb := range out.RouteTables { + for _, r := range rtb.Routes { + assert.NotEqual(t, "0.0.0.0/0", aws.StringValue(r.DestinationCidrBlock), + "a default route with no gateway would black-hole egress") + } + } + }) +} diff --git a/spinifex/daemon/daemon_system_dispatch_test.go b/spinifex/daemon/daemon_system_dispatch_test.go index 7bf892bfe..0fef21e6f 100644 --- a/spinifex/daemon/daemon_system_dispatch_test.go +++ b/spinifex/daemon/daemon_system_dispatch_test.go @@ -2,11 +2,14 @@ package daemon import ( "encoding/json" + "strings" "testing" "time" "github.com/mulgadc/spinifex/spinifex/domains/ec2/systeminstance" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" handlers_elbv2 "github.com/mulgadc/spinifex/spinifex/handlers/elbv2" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" "github.com/nats-io/nats.go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -546,3 +549,149 @@ func msgWithConn(nc *nats.Conn, msg *nats.Msg) *nats.Msg { msg.Sub = sub return msg } + +// syncReply returns a message whose reply lands on a synchronous inbox, so a +// handler called directly can be asserted on without a responder goroutine. +func syncReply(t *testing.T, nc *nats.Conn, subject string, data []byte) (*nats.Msg, *nats.Subscription) { + t.Helper() + inbox := nats.NewInbox() + sub, err := nc.SubscribeSync(inbox) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + return &nats.Msg{Subject: subject, Reply: inbox, Sub: sub, Data: data}, sub +} + +func nextEnvelopeError(t *testing.T, sub *nats.Subscription) string { + t.Helper() + reply, err := sub.NextMsg(2 * time.Second) + require.NoError(t, err) + var env struct { + Error string `json:"error,omitempty"` + } + require.NoError(t, json.Unmarshal(reply.Data, &env)) + return env.Error +} + +func TestServeSystemLaunchInstance_UnknownType(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + rm, err := NewResourceManager(nil, nil, nil) + require.NoError(t, err) + + d := &Daemon{natsConn: nc, resourceMgr: rm, natsSubscriptions: make(map[string]*nats.Subscription)} + msg, sub := syncReply(t, nc, "system.LaunchInstance.zz9.none", []byte(`{"instance_type":"zz9.none"}`)) + + assert.Equal(t, outcomeError, d.serveSystemLaunchInstance(msg)) + assert.Contains(t, nextEnvelopeError(t, sub), "unknown instance type: zz9.none") + assert.Empty(t, d.natsSubscriptions, "a failed launch must not subscribe a terminate subject") +} + +func TestLaunchSystemInstanceOnNode_Failures(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + rm, err := NewResourceManager(nil, nil, nil) + require.NoError(t, err) + d := &Daemon{natsConn: nc, node: "node-a", resourceMgr: rm} + + t.Run("local target validates the type", func(t *testing.T) { + _, err := d.LaunchSystemInstanceOnNode("node-a", &handlers_elbv2.SystemInstanceInput{InstanceType: "zz9.none"}) + assert.ErrorContains(t, err, "unknown instance type") + }) + + t.Run("remote without a type", func(t *testing.T) { + _, err := d.LaunchSystemInstanceOnNode("node-b", &handlers_elbv2.SystemInstanceInput{}) + assert.ErrorContains(t, err, "missing InstanceType") + _, err = d.LaunchSystemInstanceOnNode("node-b", nil) + assert.ErrorContains(t, err, "missing InstanceType") + }) + + t.Run("remote node not listening", func(t *testing.T) { + _, err := d.LaunchSystemInstanceOnNode("node-gone", &handlers_elbv2.SystemInstanceInput{InstanceType: "sys.p1"}) + assert.ErrorIs(t, err, nats.ErrNoResponders) + }) + + replies := map[string]string{ + "undecodable reply": "not json", + "empty envelope": "{}", + } + wantErr := map[string]string{ + "undecodable reply": "decode launch reply", + "empty envelope": "missing output payload", + } + for name, body := range replies { + t.Run(name, func(t *testing.T) { + node := "node-" + strings.ReplaceAll(name, " ", "-") + sub, err := nc.Subscribe("system.LaunchInstance.sys.p1."+node, func(msg *nats.Msg) { + _ = msg.Respond([]byte(body)) + }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + + _, err = d.LaunchSystemInstanceOnNode(node, &handlers_elbv2.SystemInstanceInput{InstanceType: "sys.p1"}) + assert.ErrorContains(t, err, wantErr[name]) + }) + } +} + +func TestTerminateSystemInstanceRemote_TransportFailures(t *testing.T) { + t.Run("closed connection is not reported as already gone", func(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + nc.Close() + + err = (&Daemon{natsConn: nc}).terminateSystemInstanceRemote("i-closed") + require.ErrorContains(t, err, "route terminate i-closed") + assert.NotErrorIs(t, err, systeminstance.ErrSystemInstanceNotFound) + }) + + t.Run("undecodable reply", func(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + sub, err := nc.Subscribe("system.TerminateInstance.i-garbled", func(msg *nats.Msg) { + _ = msg.Respond([]byte("garbled")) + }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + + err = (&Daemon{natsConn: nc}).terminateSystemInstanceRemote("i-garbled") + assert.ErrorContains(t, err, "decode routed terminate reply i-garbled") + }) +} + +func TestSubscribeSystemTerminate_ConnFailures(t *testing.T) { + d := &Daemon{natsSubscriptions: make(map[string]*nats.Subscription)} + require.NoError(t, d.subscribeSystemTerminateLocked("i-nil"), "nil natsConn must short-circuit") + + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + nc.Close() + d.natsConn = nc + require.ErrorContains(t, d.subscribeSystemTerminate("i-closed"), "subscribe system.TerminateInstance.i-closed") + assert.Empty(t, d.natsSubscriptions) +} + +func TestHandleSystemTerminateInstance_Errors(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + + t.Run("unknown instance", func(t *testing.T) { + d := &Daemon{natsConn: nc, vmMgr: vm.NewManager(), natsSubscriptions: make(map[string]*nats.Subscription)} + msg, sub := syncReply(t, nc, "system.TerminateInstance.i-unknown", nil) + d.serveSystemTerminateInstance(msg) + assert.Contains(t, nextEnvelopeError(t, sub), systeminstance.ErrSystemInstanceNotFound.Error()) + }) + + // No VM manager makes the terminate nil-deref; the dispatch goroutine must + // recover and still answer. + t.Run("panic is recovered", func(t *testing.T) { + d := &Daemon{natsConn: nc, natsSubscriptions: make(map[string]*nats.Subscription)} + msg, sub := syncReply(t, nc, "system.TerminateInstance.i-panic", nil) + d.handleSystemTerminateInstance(msg) + assert.Equal(t, awserrors.ErrorServerInternal, nextEnvelopeError(t, sub)) + d.systemDispatchWg.Wait() + }) +} diff --git a/spinifex/daemon/daemon_system_instance_coverage_test.go b/spinifex/daemon/daemon_system_instance_coverage_test.go new file mode 100644 index 000000000..1756289cd --- /dev/null +++ b/spinifex/daemon/daemon_system_instance_coverage_test.go @@ -0,0 +1,842 @@ +package daemon + +import ( + "context" + "errors" + "fmt" + awsidentifiers "github.com/mulgadc/spinifex/spinifex/foundation/aws/identifiers" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/mulgadc/spinifex/internal/testkit" + "github.com/mulgadc/spinifex/spinifex/domains/ec2/ebs/metadata" + ec2instance "github.com/mulgadc/spinifex/spinifex/domains/ec2/instance" + "github.com/mulgadc/spinifex/spinifex/domains/ec2/systeminstance" + ec2vpc "github.com/mulgadc/spinifex/spinifex/domains/ec2/vpc" + "github.com/mulgadc/spinifex/spinifex/domains/network/external" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/tags" + handlers_elbv2 "github.com/mulgadc/spinifex/spinifex/handlers/elbv2" + "github.com/mulgadc/spinifex/spinifex/providers/ebs" + "github.com/mulgadc/spinifex/spinifex/providers/objectstore" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// sysInstFixture is a VPC test daemon with one subnet in the customer account +// and one in the system account, so launches can use real ENIs in either. +type sysInstFixture struct { + d *Daemon + js jetstream.JetStream + subnetID string + sysSubnetID string + itype string +} + +func newSysInstFixture(t *testing.T) *sysInstFixture { + t.Helper() + t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) + d := createTestDaemon(t, sharedNATSURL) + _, nc, js := testutil.StartTestJetStream(t) + testutil.StubVpcdSGResponder(t, nc) + vpcSvc, err := ec2vpc.NewVPCServiceImplWithNATS(t.Context(), d.config, nc) + require.NoError(t, err) + d.vpcService = vpcSvc + // MarkFailed tears down in the background; let it finish before the + // temp dirs and the NATS connection go away. + t.Cleanup(d.vmMgr.WaitForBackgroundWork) + // Launches here never hand capacity back (no resource controller is + // wired), so give the node room for every launch the test makes. + d.resourceMgr.mu.Lock() + d.resourceMgr.hostVCPU += 64 + d.resourceMgr.hostMemGB += 256 + d.resourceMgr.mu.Unlock() + + f := &sysInstFixture{d: d, js: js, itype: getTestInstanceType(t)} + f.subnetID = f.newSubnet(t, testAccountID, "10.81") + f.sysSubnetID = f.newSubnet(t, awsidentifiers.GlobalAccountID, "10.82") + return f +} + +func (f *sysInstFixture) newSubnet(t *testing.T, accountID, prefix string) string { + t.Helper() + vpcOut, err := f.d.vpcService.CreateVpc(t.Context(), &ec2.CreateVpcInput{ + CidrBlock: aws.String(prefix + ".0.0/16"), + }, accountID) + require.NoError(t, err) + subnetOut, err := f.d.vpcService.CreateSubnet(t.Context(), &ec2.CreateSubnetInput{ + VpcId: vpcOut.Vpc.VpcId, + CidrBlock: aws.String(prefix + ".1.0/24"), + }, accountID) + require.NoError(t, err) + return aws.StringValue(subnetOut.Subnet.SubnetId) +} + +// newENI creates an available ENI in the customer subnet. +func (f *sysInstFixture) newENI(t *testing.T) *ec2.NetworkInterface { + t.Helper() + out, err := f.d.vpcService.CreateNetworkInterface(t.Context(), &ec2.CreateNetworkInterfaceInput{ + SubnetId: aws.String(f.subnetID), + }, testAccountID) + require.NoError(t, err) + return out.NetworkInterface +} + +// input returns a direct-boot launch on a pre-created customer ENI with a +// valid single-NIC network config. +func (f *sysInstFixture) input(eni *ec2.NetworkInterface) *handlers_elbv2.SystemInstanceInput { + return &handlers_elbv2.SystemInstanceInput{ + InstanceType: f.itype, + SubnetID: f.subnetID, + AccountID: testAccountID, + ENIID: aws.StringValue(eni.NetworkInterfaceId), + ENIMac: aws.StringValue(eni.MacAddress), + ENIIP: aws.StringValue(eni.PrivateIpAddress), + NICs: []handlers_elbv2.NICConfig{{MAC: aws.StringValue(eni.MacAddress), CIDR: "10.81.1.5/24", IsDefault: true}}, + } +} + +func (f *sysInstFixture) eniRecord(t *testing.T, accountID, eniID string) ec2vpc.ENIRecord { + t.Helper() + rec, err := f.d.vpcService.GetENIRecord(accountID, eniID) + require.NoError(t, err) + return rec +} + +// sysInstLaunchRuns swaps the volume mounter for one that marks the instance +// running, so vm.Manager.Run returns before it would start QEMU. It waits out +// earlier teardowns first, since they read the deps it replaces. +func sysInstLaunchRuns(d *Daemon) { + d.vmMgr.WaitForBackgroundWork() + d.vmMgr.SetDeps(vm.Deps{ + NodeID: d.node, + VolumeMounter: &hookVolumeMounter{onMount: func(v *vm.VM) { + d.vmMgr.UpdateState(v.ID, func(x *vm.VM) { x.Status = vm.StateRunning }) + }}, + VolumeStateUpdater: d.volumeService, + }) +} + +// sysInstLaunchFails swaps the volume mounter for one that refuses every mount, so +// vm.Manager.Run fails without reaching QEMU. +func sysInstLaunchFails(d *Daemon) { + d.vmMgr.WaitForBackgroundWork() + d.vmMgr.SetDeps(vm.Deps{ + NodeID: d.node, + VolumeMounter: &hookVolumeMounter{mountErr: errSysInstLaunchRefused}, + VolumeStateUpdater: d.volumeService, + }) +} + +var errSysInstLaunchRefused = errors.New("launch refused") + +// sysInstMgmtAllocator returns an allocator bound to the shared cluster-state KV +// on a subnet no other test uses. +func sysInstMgmtAllocator(t *testing.T, bridgeIP string) *MgmtIPAllocator { + t.Helper() + jsm := newTestMgmtJSM(t) + a, err := NewMgmtIPAllocator(bridgeIP) + require.NoError(t, err) + a.BindKV(jsm, "node-1") + cleanupMgmtIPAM(t, jsm, a) + return a +} + +// sysInstUnboundMgmtAllocator has no KV, so every Allocate fails. +func sysInstUnboundMgmtAllocator(t *testing.T) *MgmtIPAllocator { + t.Helper() + a, err := NewMgmtIPAllocator("10.94.8.1") + require.NoError(t, err) + return a +} + +// sysInstReclaimingEIP adds the KV-backed backstop release that +// reclaimSystemInstanceEIP looks for. +type sysInstReclaimingEIP struct { + fakeEIPService + + reclaimErr error + reclaimed []string +} + +func (s *sysInstReclaimingEIP) ReleaseAddressByInstanceID(id string) error { + s.reclaimed = append(s.reclaimed, id) + return s.reclaimErr +} + +func TestLaunchSystemInstance_EarlyErrors(t *testing.T) { + t.Run("BootAMI dispatches to the AMI path", func(t *testing.T) { + _, err := (&Daemon{}).LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{BootMode: systeminstance.BootAMI}) + require.Error(t, err) + assert.Contains(t, err.Error(), "instance service not initialized") + }) + + d := createTestDaemon(t, sharedNATSURL) + itype := getTestInstanceType(t) + + t.Run("unknown instance type", func(t *testing.T) { + _, err := d.LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{InstanceType: "zz9.none"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "unknown instance type: zz9.none") + }) + + t.Run("capacity exhausted", func(t *testing.T) { + d.resourceMgr.mu.Lock() + saved := d.resourceMgr.allocatedVCPU + d.resourceMgr.allocatedVCPU = 1 << 20 + d.resourceMgr.mu.Unlock() + t.Cleanup(func() { + d.resourceMgr.mu.Lock() + d.resourceMgr.allocatedVCPU = saved + d.resourceMgr.mu.Unlock() + }) + + _, err := d.LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{InstanceType: itype}) + require.Error(t, err) + assert.Contains(t, err.Error(), "insufficient capacity for "+itype) + }) + + t.Run("RunInstance failure returns the capacity", func(t *testing.T) { + orig := d.instanceService + t.Cleanup(func() { d.instanceService = orig }) + // An instance service that knows no types rejects the launch after the + // daemon has already reserved capacity for it. + d.instanceService = ec2instance.NewInstanceServiceImpl(d.config, map[string]*ec2.InstanceTypeInfo{}, + d.natsConn, objectstore.NewMemoryObjectStore(), d.vmMgr, d.resourceMgr, nil) + + d.resourceMgr.mu.Lock() + before := d.resourceMgr.allocatedVCPU + d.resourceMgr.mu.Unlock() + + _, err := d.LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{InstanceType: itype}) + require.Error(t, err) + assert.Contains(t, err.Error(), "create instance") + + d.resourceMgr.mu.Lock() + after := d.resourceMgr.allocatedVCPU + d.resourceMgr.mu.Unlock() + assert.Equal(t, before, after, "the reserved capacity must be released") + }) +} + +func TestLaunchSystemInstance_PreCreatedENI(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + + t.Run("made-up ENI still reaches launch", func(t *testing.T) { + sysInstLaunchFails(d) + in := f.input(f.newENI(t)) + in.ENIID = "eni-madeup" + in.IamInstanceProfileArn = "arn:aws:iam::123456789012:instance-profile/lb" + + // The attach and owner stamp are best-effort, so only the launch fails. + _, err := d.LaunchSystemInstance(in) + require.ErrorIs(t, err, errSysInstLaunchRefused) + assert.Contains(t, err.Error(), "launch instance") + }) + + t.Run("cross-account ENI and extras are attached and stamped", func(t *testing.T) { + sysInstLaunchRuns(d) + + primary, extra := f.newENI(t), f.newENI(t) + extraID := aws.StringValue(extra.NetworkInterfaceId) + in := f.input(primary) + in.ExtraENIs = []systeminstance.ExtraENIInput{{ + ENIID: extraID, + ENIMac: aws.StringValue(extra.MacAddress), + ENIIP: aws.StringValue(extra.PrivateIpAddress), + SubnetID: f.subnetID, + DeleteOnTermination: aws.Bool(false), + }} + in.HostfwdPorts = []int{6443} + + out, err := d.LaunchSystemInstance(in) + require.NoError(t, err) + assert.Equal(t, aws.StringValue(primary.PrivateIpAddress), out.PrivateIP) + assert.Empty(t, out.PublicIP) + + rec := f.eniRecord(t, testAccountID, aws.StringValue(primary.NetworkInterfaceId)) + assert.Equal(t, out.InstanceID, rec.InstanceId) + assert.Equal(t, awsidentifiers.GlobalAccountID, rec.InstanceOwnerId, "a system VM on a customer ENI must stamp its own account") + + extraRec := f.eniRecord(t, testAccountID, extraID) + assert.Equal(t, out.InstanceID, extraRec.InstanceId) + assert.Equal(t, int64(1), extraRec.DeviceIndex) + require.NotNil(t, extraRec.DeleteOnTermination) + assert.False(t, *extraRec.DeleteOnTermination) + + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, tags.ManagedByELBv2, v.ManagedBy) + assert.Equal(t, awsidentifiers.GlobalAccountID, v.AccountID) + assert.NotEmpty(t, aws.StringValue(v.Instance.VpcId), "the VPC is resolved from the pre-created ENI") + require.Len(t, v.ExtraENIs, 1) + assert.Equal(t, extraID, v.ExtraENIs[0].ENIID) + assert.Equal(t, []int{6443}, v.HostfwdPorts) + assert.True(t, v.DirectBoot) + + d.mu.Lock() + _, subscribed := d.natsSubscriptions[out.InstanceID] + d.mu.Unlock() + assert.True(t, subscribed, "the instance must listen for terminate commands") + }) + + t.Run("failed extra attach fails the launch", func(t *testing.T) { + in := f.input(f.newENI(t)) + in.ExtraENIs = []systeminstance.ExtraENIInput{{ENIID: "eni-missing"}} + + _, err := d.LaunchSystemInstance(in) + require.Error(t, err) + assert.Contains(t, err.Error(), "attach extra ENI eni-missing") + }) + + t.Run("same-account ENI skips the owner stamp", func(t *testing.T) { + out, err := d.vpcService.CreateNetworkInterface(t.Context(), &ec2.CreateNetworkInterfaceInput{ + SubnetId: aws.String(f.sysSubnetID), + }, awsidentifiers.GlobalAccountID) + require.NoError(t, err) + eni := out.NetworkInterface + in := f.input(eni) + in.AccountID = "" + sysInstLaunchFails(d) + + _, err = d.LaunchSystemInstance(in) + require.ErrorIs(t, err, errSysInstLaunchRefused) + + rec := f.eniRecord(t, awsidentifiers.GlobalAccountID, aws.StringValue(eni.NetworkInterfaceId)) + assert.Empty(t, rec.InstanceOwnerId, "same-account attachments leave the owner empty") + }) +} + +func TestLaunchSystemInstance_AutoCreateENI(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + sysInstLaunchRuns(d) + + t.Run("creates and attaches an ENI in the system account", func(t *testing.T) { + out, err := d.LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{ + InstanceType: f.itype, + SubnetID: f.sysSubnetID, + NICs: []handlers_elbv2.NICConfig{{MAC: "02:00:00:00:00:01", IsDefault: true}}, + }) + require.NoError(t, err) + assert.True(t, strings.HasPrefix(out.PrivateIP, "10.82.1."), "private IP %q must come from the subnet", out.PrivateIP) + + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + require.NotEmpty(t, v.ENIId) + rec := f.eniRecord(t, awsidentifiers.GlobalAccountID, v.ENIId) + assert.Equal(t, out.InstanceID, rec.InstanceId) + assert.Equal(t, f.sysSubnetID, aws.StringValue(v.Instance.SubnetId)) + }) + + t.Run("unknown subnet", func(t *testing.T) { + _, err := d.LaunchSystemInstance(&handlers_elbv2.SystemInstanceInput{ + InstanceType: f.itype, + SubnetID: "subnet-madeup", + }) + require.Error(t, err) + assert.Contains(t, err.Error(), "create ENI") + }) +} + +func TestLaunchSystemInstance_EIPService(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + + internetFacing := func(t *testing.T) *handlers_elbv2.SystemInstanceInput { + in := f.input(f.newENI(t)) + in.Scheme = handlers_elbv2.SchemeInternetFacing + return in + } + allocated := &ec2.AllocateAddressOutput{ + PublicIp: aws.String("203.0.113.50"), + PublicIpv4Pool: aws.String("wan"), + AllocationId: aws.String("eipalloc-1"), + } + + t.Run("allocate failure", func(t *testing.T) { + d.eipService = &fakeEIPService{allocateErr: errInjected} + _, err := d.LaunchSystemInstance(internetFacing(t)) + require.ErrorIs(t, err, errInjected) + assert.Contains(t, err.Error(), "allocate public IP for internet-facing ALB") + }) + + for _, releaseErr := range []error{nil, errors.New("release failed")} { + t.Run(fmt.Sprintf("associate failure releases the address (release error %v)", releaseErr), func(t *testing.T) { + eip := &fakeEIPService{allocateOut: allocated, associateErr: errInjected, releaseErr: releaseErr} + d.eipService = eip + _, err := d.LaunchSystemInstance(internetFacing(t)) + require.ErrorIs(t, err, errInjected) + assert.Contains(t, err.Error(), "associate public IP") + assert.Equal(t, []string{"eipalloc-1"}, eip.released) + }) + } + + t.Run("success records the address on the ENI and the VM", func(t *testing.T) { + sysInstLaunchRuns(d) + d.eipService = &fakeEIPService{ + allocateOut: allocated, + associateOut: &ec2.AssociateAddressOutput{AssociationId: aws.String("eipassoc-1")}, + } + in := internetFacing(t) + + out, err := d.LaunchSystemInstance(in) + require.NoError(t, err) + assert.Equal(t, "203.0.113.50", out.PublicIP) + + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, "203.0.113.50", v.PublicIP) + assert.Equal(t, "wan", v.PublicIPPool) + assert.Equal(t, "eipalloc-1", v.PublicIPAllocID) + assert.Equal(t, "eipassoc-1", v.PublicIPAssocID) + assert.Equal(t, "203.0.113.50", f.eniRecord(t, testAccountID, in.ENIID).PublicIpAddress) + }) + + t.Run("launch failure releases the associated address", func(t *testing.T) { + sysInstLaunchFails(d) + eip := &fakeEIPService{ + allocateOut: allocated, + associateOut: &ec2.AssociateAddressOutput{AssociationId: aws.String("eipassoc-2")}, + } + d.eipService = eip + _, err := d.LaunchSystemInstance(internetFacing(t)) + require.ErrorIs(t, err, errSysInstLaunchRefused) + assert.Equal(t, []string{"eipassoc-2"}, eip.disassociated) + assert.Equal(t, []string{"eipalloc-1"}, eip.released) + }) +} + +func (f *sysInstFixture) externalIPAM(t *testing.T, pool external.ExternalPoolConfig) *ec2vpc.ExternalIPAM { + t.Helper() + ipam, err := ec2vpc.NewExternalIPAM(t.Context(), f.js, []external.ExternalPoolConfig{pool}) + require.NoError(t, err) + return ipam +} + +func TestLaunchSystemInstance_IPAM(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + sysInstLaunchRuns(d) + + t.Run("NAT committed", func(t *testing.T) { + d.externalIPAM = f.externalIPAM(t, external.ExternalPoolConfig{ + Name: "wan-ok", RangeStart: "198.51.100.10", RangeEnd: "198.51.100.20", Gateway: "198.51.100.1", PrefixLen: 24, + }) + sub, err := d.natsConn.Subscribe("vpc.add-nat", func(msg *nats.Msg) { + _ = msg.Respond([]byte(`{"success":true}`)) + }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + + in := f.input(f.newENI(t)) + in.Scheme = handlers_elbv2.SchemeInternetFacing + out, err := d.LaunchSystemInstance(in) + require.NoError(t, err) + require.True(t, strings.HasPrefix(out.PublicIP, "198.51.100."), "public IP %q must come from the pool", out.PublicIP) + + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, "wan-ok", v.PublicIPPool) + assert.Empty(t, v.PublicIPAllocID, "a direct IPAM address has no EIP allocation") + assert.Equal(t, out.PublicIP, f.eniRecord(t, testAccountID, in.ENIID).PublicIpAddress) + }) + + t.Run("pool exhausted", func(t *testing.T) { + // A one-address range holds only the reserved first address. + d.externalIPAM = f.externalIPAM(t, external.ExternalPoolConfig{ + Name: "wan-full", RangeStart: "198.51.101.10", RangeEnd: "198.51.101.10", Gateway: "198.51.101.1", PrefixLen: 24, + }) + + in := f.input(f.newENI(t)) + in.Scheme = handlers_elbv2.SchemeInternetFacing + _, err := d.LaunchSystemInstance(in) + require.Error(t, err) + assert.Contains(t, err.Error(), "allocate public IP for internet-facing ALB") + assert.Empty(t, f.eniRecord(t, testAccountID, in.ENIID).PublicIpAddress) + }) +} + +func TestLaunchSystemInstance_MgmtNIC(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + _, primed := captureNeighHooks(t) + d.mgmtBridgeIP = "10.93.8.1" + + tapErr := errors.New("tap failed") + cases := []struct { + name string + scheme string + alloc func(t *testing.T) *MgmtIPAllocator + tapErr error + wantErr string + wantMgmt bool + wantAlloc int + }{ + {name: "internal allocate error", scheme: handlers_elbv2.SchemeInternal, alloc: sysInstUnboundMgmtAllocator, + wantErr: "allocate mgmt IP for internal-scheme ALB"}, + {name: "internet-facing allocate error continues", scheme: "", alloc: sysInstUnboundMgmtAllocator}, + {name: "internal tap error", scheme: handlers_elbv2.SchemeInternal, tapErr: tapErr, + wantErr: "setup mgmt tap for internal-scheme ALB"}, + {name: "internet-facing tap error continues", scheme: "", tapErr: tapErr}, + {name: "success", scheme: handlers_elbv2.SchemeInternal, wantMgmt: true, wantAlloc: 1}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + sysInstLaunchRuns(d) + var alloc *MgmtIPAllocator + if tc.alloc != nil { + alloc = tc.alloc(t) + } else { + alloc = sysInstMgmtAllocator(t, "10.93.8.1") + } + d.mgmtIPAllocator = alloc + d.networkPlumber = &erroringPlumber{setupErr: tc.tapErr} + *primed = nil + + in := f.input(f.newENI(t)) + in.Scheme = tc.scheme + in.NICs = append(in.NICs, handlers_elbv2.NICConfig{}) + + out, err := d.LaunchSystemInstance(in) + if tc.wantErr != "" { + require.Error(t, err) + assert.Contains(t, err.Error(), tc.wantErr) + assert.Equal(t, 0, alloc.AllocatedCount(), "a failed mgmt NIC must return its address") + return + } + require.NoError(t, err) + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, tc.wantAlloc, alloc.AllocatedCount()) + if !tc.wantMgmt { + assert.Empty(t, v.MgmtIP) + assert.Empty(t, v.MgmtMAC) + return + } + assert.True(t, strings.HasPrefix(v.MgmtIP, "10.93.8.")) + assert.Equal(t, vm.GenerateMgmtMAC(out.InstanceID), v.MgmtMAC) + assert.Equal(t, v.MgmtMAC, in.NICs[1].MAC, "the allocated MAC is injected into the guest NIC config") + assert.Equal(t, v.MgmtIP+"/24", in.NICs[1].CIDR) + require.Len(t, *primed, 1) + assert.Equal(t, neighCall{dev: defaultMgmtBridge, ip: v.MgmtIP, mac: v.MgmtMAC}, (*primed)[0]) + }) + } +} + +func TestLaunchSystemInstance_ConfigAndRun(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + + t.Run("no default NIC fails the direct-boot config", func(t *testing.T) { + in := f.input(f.newENI(t)) + in.NICs = nil + _, err := d.LaunchSystemInstance(in) + require.Error(t, err) + assert.Contains(t, err.Error(), "build direct-boot config") + }) + + t.Run("dev networking derives a dev MAC", func(t *testing.T) { + sysInstLaunchRuns(d) + d.config.Daemon.DevNetworking = true + t.Cleanup(func() { d.config.Daemon.DevNetworking = false }) + + out, err := d.LaunchSystemInstance(f.input(f.newENI(t))) + require.NoError(t, err) + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, vm.GenerateDevMAC(out.InstanceID), v.DevMAC) + assert.Equal(t, microvmMachineType(), v.Config.MachineType) + }) +} + +// sysInstAMILoader serves one AMI whose snapshot the memory provider holds. +type sysInstAMILoader struct { + ami ebsmetadata.AMI + sourceVol string +} + +func (l *sysInstAMILoader) GetAMIConfig(_ context.Context, imageID string) (ebsmetadata.AMI, error) { + if imageID != l.ami.ImageID { + return ebsmetadata.AMI{}, fmt.Errorf("ami %s not found", imageID) + } + return l.ami, nil +} + +func (l *sysInstAMILoader) GetAMISourceVolumeID(context.Context, string) (string, error) { + return l.sourceVol, nil +} + +func TestLaunchAMISystemInstance_Guards(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + base := systeminstance.SystemInstanceInput{ + BootMode: systeminstance.BootAMI, ImageID: "ami-x", AccountID: testAccountID, ENIID: "eni-x", InstanceType: getTestInstanceType(t), + } + cases := []struct { + name string + mutate func(*systeminstance.SystemInstanceInput) + wantErr string + }{ + {"missing image", func(in *systeminstance.SystemInstanceInput) { in.ImageID = "" }, "requires ImageID"}, + {"missing account", func(in *systeminstance.SystemInstanceInput) { in.AccountID = "" }, "requires AccountID"}, + {"missing ENI", func(in *systeminstance.SystemInstanceInput) { in.ENIID = "" }, "requires a pre-created ENI"}, + // The test daemon wires no AMI loader, so Prepare refuses the launch. + {"prepare error", func(in *systeminstance.SystemInstanceInput) { + in.UserData = "#cloud-config" + in.IamInstanceProfileArn = "arn:aws:iam::123456789012:instance-profile/cp" + in.ManagedBy = tags.ManagedByEKS + }, "ServerInternal"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + in := base + tc.mutate(&in) + _, err := d.LaunchSystemInstance(&in) + require.Error(t, err) + assert.Contains(t, err.Error(), tc.wantErr) + }) + } +} + +func TestLaunchAMISystemInstance(t *testing.T) { + f := newSysInstFixture(t) + d := f.d + _, _ = captureNeighHooks(t) + + provider := ebsprovider.NewMemoryProvider(ebsprovider.Capabilities{}) + _, err := provider.CreateVolume(t.Context(), ebsprovider.CreateVolumeRequest{ + Versioned: ebsprovider.NewVersioned(), VolumeID: "vol-src", + CapacityRange: ebsprovider.CapacityRange{RequiredBytes: 1 << 30}, + }) + require.NoError(t, err) + _, err = provider.CreateSnapshot(t.Context(), ebsprovider.CreateSnapshotRequest{ + Versioned: ebsprovider.NewVersioned(), SnapshotID: "snap-src", VolumeID: "vol-src", + }) + require.NoError(t, err) + + loader := &sysInstAMILoader{ami: ebsmetadata.AMI{ImageID: "ami-sys", State: "available", SnapshotID: "snap-src"}, sourceVol: "vol-src"} + d.instanceService.SetRunInstancesDeps(loader, nil, &daemonENICreator{d: d}, nil) + d.instanceService.SetEBSProvider(provider) + sysInstLaunchFails(d) + + input := func(t *testing.T) *systeminstance.SystemInstanceInput { + eni := f.newENI(t) + return &systeminstance.SystemInstanceInput{ + BootMode: systeminstance.BootAMI, + InstanceType: f.itype, + ImageID: "ami-sys", + AccountID: testAccountID, + ManagedBy: tags.ManagedByEKS, + ENIID: aws.StringValue(eni.NetworkInterfaceId), + } + } + + t.Run("no management bridge", func(t *testing.T) { + d.mgmtIPAllocator = nil + _, err := d.LaunchSystemInstance(input(t)) + require.Error(t, err) + assert.Contains(t, err.Error(), "management bridge unavailable") + }) + + d.mgmtBridgeIP = "10.95.8.1" + d.networkPlumber = &recordingPlumber{} + alloc := sysInstMgmtAllocator(t, "10.95.8.1") + d.mgmtIPAllocator = alloc + + t.Run("extra ENI attach failure", func(t *testing.T) { + in := input(t) + in.ExtraENIs = []systeminstance.ExtraENIInput{{ENIID: "eni-missing"}} + _, err := d.LaunchSystemInstance(in) + require.Error(t, err) + assert.Contains(t, err.Error(), "attach extra ENI eni-missing") + }) + + t.Run("launch that never reaches running", func(t *testing.T) { + _, err := d.LaunchSystemInstance(input(t)) + require.Error(t, err) + assert.Contains(t, err.Error(), "did not reach running state") + }) + + t.Run("success", func(t *testing.T) { + sysInstLaunchRuns(d) + in := input(t) + extra := f.newENI(t) + in.ExtraENIs = []systeminstance.ExtraENIInput{{ENIID: aws.StringValue(extra.NetworkInterfaceId), SubnetID: f.subnetID}} + + out, err := d.LaunchSystemInstance(in) + require.NoError(t, err) + assert.True(t, strings.HasPrefix(out.MgmtIP, "10.95.8.")) + assert.True(t, strings.HasPrefix(out.PrivateIP, "10.81.1."), "private IP %q comes from the pre-created ENI", out.PrivateIP) + + v, ok := d.vmMgr.Get(out.InstanceID) + require.True(t, ok) + assert.Equal(t, tags.ManagedByEKS, v.ManagedBy) + assert.Equal(t, testAccountID, v.AccountID) + require.Len(t, v.ExtraENIs, 1) + assert.Equal(t, out.InstanceID, f.eniRecord(t, testAccountID, v.ExtraENIs[0].ENIID).InstanceId) + }) +} + +func TestAttachSystemMgmtNIC(t *testing.T) { + _, primed := captureNeighHooks(t) + + t.Run("no allocator", func(t *testing.T) { + err := (&Daemon{mgmtBridgeIP: "10.96.8.1"}).attachSystemMgmtNIC(&vm.VM{ID: "i-a"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "management bridge unavailable") + }) + + t.Run("allocate error", func(t *testing.T) { + d := &Daemon{mgmtBridgeIP: "10.94.8.1", mgmtIPAllocator: sysInstUnboundMgmtAllocator(t)} + err := d.attachSystemMgmtNIC(&vm.VM{ID: "i-b"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "allocate mgmt IP") + }) + + alloc := sysInstMgmtAllocator(t, "10.96.8.1") + + t.Run("tap error releases the address", func(t *testing.T) { + d := &Daemon{mgmtBridgeIP: "10.96.8.1", mgmtIPAllocator: alloc, networkPlumber: &erroringPlumber{setupErr: errInjected}} + inst := &vm.VM{ID: "i-c"} + err := d.attachSystemMgmtNIC(inst) + require.ErrorIs(t, err, errInjected) + assert.Empty(t, inst.MgmtIP) + assert.Empty(t, inst.MgmtMAC) + assert.Equal(t, 0, alloc.AllocatedCount()) + }) + + t.Run("success", func(t *testing.T) { + d := &Daemon{mgmtBridgeIP: "10.96.8.1", mgmtIPAllocator: alloc, networkPlumber: &recordingPlumber{}} + inst := &vm.VM{ID: "i-d"} + require.NoError(t, d.attachSystemMgmtNIC(inst)) + assert.Equal(t, "10.96.8.10", inst.MgmtIP) + assert.Equal(t, vm.GenerateMgmtMAC("i-d"), inst.MgmtMAC) + require.Len(t, *primed, 1) + assert.Equal(t, "10.96.8.10", (*primed)[0].ip) + }) +} + +func TestTerminateSystemInstance(t *testing.T) { + d := createTestDaemon(t, sharedNATSURL) + t.Cleanup(d.vmMgr.WaitForBackgroundWork) + + t.Run("local terminate releases the EIP", func(t *testing.T) { + eip := &sysInstReclaimingEIP{fakeEIPService: fakeEIPService{disassociateErr: errInjected}} + d.eipService = eip + inst := &vm.VM{ID: "i-term-ok", Status: vm.StateRunning, AccountID: testAccountID, + PublicIP: "203.0.113.7", PublicIPAllocID: "eipalloc-t", PublicIPAssocID: "eipassoc-t"} + d.vmMgr.Insert(inst) + + require.NoError(t, d.TerminateSystemInstance("i-term-ok")) + assert.Equal(t, []string{"eipassoc-t"}, eip.disassociated) + assert.Equal(t, []string{"eipalloc-t"}, eip.released, "release still runs after a failed disassociate") + // Once by the owning-node path and once by the backstop. + assert.Equal(t, []string{"i-term-ok", "i-term-ok"}, eip.reclaimed) + assert.Equal(t, vm.StateTerminated, d.vmMgr.Status(inst)) + }) + + t.Run("local terminate failure", func(t *testing.T) { + d.eipService = nil + d.vmMgr.SetDeps(vm.Deps{NodeID: d.node, TransitionState: func(*vm.VM, vm.InstanceState) error { return errInjected }}) + d.vmMgr.Insert(&vm.VM{ID: "i-term-fail", Status: vm.StateRunning}) + + err := d.TerminateSystemInstance("i-term-fail") + require.Error(t, err) + assert.Contains(t, err.Error(), "terminate:") + }) + + t.Run("no owner and failing reclaim", func(t *testing.T) { + eip := &sysInstReclaimingEIP{reclaimErr: errInjected} + d.eipService = eip + err := d.TerminateSystemInstance("i-term-nobody") + require.ErrorIs(t, err, systeminstance.ErrSystemInstanceNotFound) + assert.Equal(t, []string{"i-term-nobody"}, eip.reclaimed, "the backstop runs even when no node owns the VM") + }) + + t.Run("local lookup miss", func(t *testing.T) { + err := d.terminateSystemInstanceLocal("i-term-gone") + require.ErrorIs(t, err, systeminstance.ErrSystemInstanceNotFound) + }) +} + +func TestReleaseSystemInstanceEIP_Errors(t *testing.T) { + d := newDaemonWithVMs() + eip := &fakeEIPService{disassociateErr: errInjected, releaseErr: errInjected} + d.eipService = eip + inst := &vm.VM{ID: "i-rel", PublicIP: "203.0.113.9", PublicIPPool: "wan", PublicIPAllocID: "eipalloc-r", PublicIPAssocID: "eipassoc-r"} + d.vmMgr.Insert(inst) + + d.releaseSystemInstanceEIP(inst) + + assert.Equal(t, []string{"eipassoc-r"}, eip.disassociated) + assert.Equal(t, []string{"eipalloc-r"}, eip.released) + // Fields clear even on failure so teardown does not release the IP again. + assert.Empty(t, inst.PublicIP) + assert.Empty(t, inst.PublicIPPool) + assert.Empty(t, inst.PublicIPAllocID) + assert.Empty(t, inst.PublicIPAssocID) +} + +func TestBuildDirectBootConfig_InstanceTypeShape(t *testing.T) { + t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) + rm, err := NewResourceManager(nil, nil, nil) + require.NoError(t, err) + itype := getTestInstanceType(t) + it := rm.instanceTypes[itype] + d := &Daemon{resourceMgr: rm} + + cfg, err := d.buildDirectBootConfig("i-shape", &handlers_elbv2.SystemInstanceInput{ + InstanceType: itype, + ENIID: "eni-shape", + NICs: []handlers_elbv2.NICConfig{{MAC: "02:00:00:00:00:02", IsDefault: true}}, + }) + require.NoError(t, err) + assert.Equal(t, int(instanceTypeVCPUs(it)), cfg.CPUCount) + assert.Equal(t, int(instanceTypeMemoryMiB(it)), cfg.Memory) + assert.Equal(t, aws.StringValue(it.ProcessorInfo.SupportedArchitectures[0]), cfg.Architecture) + assert.Len(t, cfg.FwCfg, 3) +} + +func TestBuildDirectBootConfig_FwCfgWriteError(t *testing.T) { + notADir := filepath.Join(t.TempDir(), "file") + require.NoError(t, os.WriteFile(notADir, nil, 0o600)) + t.Setenv("XDG_RUNTIME_DIR", notADir) + + _, err := (&Daemon{resourceMgr: &ResourceManager{}}).buildDirectBootConfig("i-werr", &handlers_elbv2.SystemInstanceInput{ + NICs: []handlers_elbv2.NICConfig{{MAC: "02:00:00:00:00:03", IsDefault: true}}, + }) + require.Error(t, err) + assert.Contains(t, err.Error(), "write fw_cfg blobs") +} + +// A directory at a blob's path fails that write; the blobs written before it +// must be removed so no partial fw_cfg set is left behind. +func TestWriteFwCfgBlobs_LaterWriteErrorsCleanUp(t *testing.T) { + input := &handlers_elbv2.SystemInstanceInput{ + NICs: []handlers_elbv2.NICConfig{{MAC: "02:00:00:00:00:04", IsDefault: true}}, + } + for _, blob := range []string{"lbenv", "cacert"} { + t.Run(blob, func(t *testing.T) { + dir := t.TempDir() + t.Setenv("XDG_RUNTIME_DIR", dir) + require.NoError(t, os.Mkdir(filepath.Join(dir, "fwcfg-i-blob-"+blob+".tmp"), 0o700)) + + _, err := (&Daemon{}).writeFwCfgBlobs("i-blob", input) + require.Error(t, err) + + _, statErr := os.Stat(filepath.Join(dir, "fwcfg-i-blob-netcfg.tmp")) + assert.ErrorIs(t, statErr, os.ErrNotExist, "the netcfg blob must be removed") + _, statErr = os.Stat(filepath.Join(dir, "fwcfg-i-blob-lbenv.tmp")) + if blob == "cacert" { + assert.ErrorIs(t, statErr, os.ErrNotExist, "the lb-agent-env blob must be removed") + } + }) + } +} diff --git a/spinifex/daemon/dns_reconcile_services_test.go b/spinifex/daemon/dns_reconcile_services_test.go new file mode 100644 index 000000000..92cdd7e5b --- /dev/null +++ b/spinifex/daemon/dns_reconcile_services_test.go @@ -0,0 +1,53 @@ +package daemon + +import ( + "bytes" + "testing" + + "github.com/mulgadc/bluebottle/pkg/masterkey" + "github.com/mulgadc/spinifex/internal/testkit" + "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + handlers_eks "github.com/mulgadc/spinifex/spinifex/handlers/eks" + handlers_elbv2 "github.com/mulgadc/spinifex/spinifex/handlers/elbv2" + handlers_rds "github.com/mulgadc/spinifex/spinifex/handlers/rds" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// Without a base domain no service can name its records, so none of them may +// claim prune authority over the zone. +func TestDNSDesiredSet_ServicesWithoutBaseDomain(t *testing.T) { + d := &Daemon{ + elbv2Service: &handlers_elbv2.ELBv2ServiceImpl{}, + eksService: &handlers_eks.EKSServiceImpl{}, + rdsService: &handlers_rds.Service{}, + } + + ds := d.dnsDesiredSet() + assert.False(t, ds.Prunable.ELB) + assert.False(t, ds.Prunable.EKS) + assert.False(t, ds.Prunable.RDS) + assert.Empty(t, ds.Changes) +} + +func TestDNSDesiredSet_ServicesEnumerateCompletely(t *testing.T) { + _, nc, _ := testutil.StartTestJetStream(t) + cfg := &config.Config{Region: "ap-southeast-2"} + cfg.Northstar.DefaultDomain = "example.internal" + + elb, err := handlers_elbv2.NewELBv2ServiceImplWithNATS(cfg, nc, bytes.Repeat([]byte{0x42}, masterkey.MasterKeySize)) + require.NoError(t, err) + t.Cleanup(elb.Close) + eks, err := handlers_eks.NewEKSServiceImpl(handlers_eks.EKSServiceDeps{NATSConn: nc, Config: cfg}) + require.NoError(t, err) + t.Cleanup(eks.Shutdown) + rds := handlers_rds.NewService(nc, cfg.Region).WithDeps(handlers_rds.Deps{BaseDomain: "example.internal"}) + + d := &Daemon{elbv2Service: elb, eksService: eks, rdsService: rds} + ds := d.dnsDesiredSet() + assert.True(t, ds.Prunable.ELB, "an empty load balancer store is a complete view") + assert.True(t, ds.Prunable.EKS) + assert.True(t, ds.Prunable.RDS) + assert.False(t, ds.Prunable.EC2, "no instance store was configured") + assert.Empty(t, ds.Changes) +} diff --git a/spinifex/daemon/eks_deps_test.go b/spinifex/daemon/eks_deps_test.go index 09c4bbf0e..3fd0c2b88 100644 --- a/spinifex/daemon/eks_deps_test.go +++ b/spinifex/daemon/eks_deps_test.go @@ -1,10 +1,18 @@ package daemon import ( + "bytes" + "os" + "path/filepath" "testing" + "github.com/mulgadc/bluebottle/pkg/masterkey" "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + ec2volume "github.com/mulgadc/spinifex/spinifex/domains/ec2/volume" + "github.com/mulgadc/spinifex/spinifex/foundation/state/clustersize" + "github.com/nats-io/nats.go" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) // TestResolveGatewayHost covers all five host-selection branches plus the @@ -155,3 +163,78 @@ func TestBuildEKSServiceDeps(t *testing.T) { assert.Equal(t, "https://10.15.8.1:8443", deps.SystemPredastoreURL) assert.NotNil(t, deps.SnapshotStore) } + +// writeMasterKey drops a valid shared master key beside configPath. +func writeMasterKey(t *testing.T, configPath string) { + t.Helper() + key := bytes.Repeat([]byte{0x42}, masterkey.MasterKeySize) + require.NoError(t, os.WriteFile(filepath.Join(filepath.Dir(configPath), "master.key"), key, 0o640)) +} + +func TestSystemRoleEnsurer(t *testing.T) { + t.Run("no master key falls back to static creds", func(t *testing.T) { + d := &Daemon{ctx: t.Context(), configPath: filepath.Join(t.TempDir(), "spinifex.toml")} + assert.Nil(t, d.systemRoleEnsurer()) + }) + + t.Run("IAM init failure is retried rather than cached", func(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + defer nc.Close() + + d := &Daemon{ctx: t.Context(), natsConn: nc, configPath: filepath.Join(t.TempDir(), "spinifex.toml")} + writeMasterKey(t, d.configPath) + assert.Nil(t, d.systemRoleEnsurer(), "a NATS server without JetStream cannot back IAM") + assert.Nil(t, d.iamEnsurerCached) + }) + + t.Run("success is built once and cached", func(t *testing.T) { + clustersize.DeclareForTest(t, 1) + nc, err := nats.Connect(sharedJSNATSURL) + require.NoError(t, err) + defer nc.Close() + + d := &Daemon{ctx: t.Context(), natsConn: nc, configPath: filepath.Join(t.TempDir(), "spinifex.toml")} + writeMasterKey(t, d.configPath) + first := d.systemRoleEnsurer() + require.NotNil(t, first) + + // The key going away after a successful build must not matter. + require.NoError(t, os.Remove(filepath.Join(filepath.Dir(d.configPath), "master.key"))) + assert.Same(t, first, d.systemRoleEnsurer()) + }) +} + +func TestBuildEKSServiceDeps_ConfigDerivedFields(t *testing.T) { + caPath := filepath.Join(t.TempDir(), "ca.pem") + require.NoError(t, os.WriteFile(caPath, []byte("-----BEGIN CERTIFICATE-----"), 0o600)) + + base := func() *Daemon { + return &Daemon{ + mgmtBridgeIP: "10.15.8.1", + clusterConfig: &config.ClusterConfig{AWS: config.AWSConfig{ServicesDomain: "svc.example"}}, + volumeService: &ec2volume.VolumeServiceImpl{}, + config: &config.Config{ + AdvertiseIP: "192.0.2.10", + AWSGW: config.AWSGWConfig{Host: "0.0.0.0:8443"}, + NATS: config.NATSConfig{CACert: caPath}, + }, + } + } + + t.Run("readable CA and gateway port", func(t *testing.T) { + deps := base().buildEKSServiceDeps() + assert.Equal(t, "svc.example", deps.InternalSuffix) + assert.Equal(t, "-----BEGIN CERTIFICATE-----", deps.GatewayCACert) + assert.Equal(t, "https://192.0.2.10:8443", deps.GatewayBaseURL) + assert.Equal(t, "https://10.15.8.1:8443", deps.SystemGatewayURL) + assert.NotNil(t, deps.Volume, "a configured volume service must reach CSI reclaim") + }) + + t.Run("unreadable CA leaves the gateway unverified", func(t *testing.T) { + d := base() + d.config.NATS.CACert = filepath.Join(t.TempDir(), "missing.pem") + deps := d.buildEKSServiceDeps() + assert.Empty(t, deps.GatewayCACert) + }) +} diff --git a/spinifex/daemon/gpu_handlers_test.go b/spinifex/daemon/gpu_handlers_test.go index 77e665801..d5a2a8462 100644 --- a/spinifex/daemon/gpu_handlers_test.go +++ b/spinifex/daemon/gpu_handlers_test.go @@ -163,3 +163,17 @@ func TestResolveVMGPU_UnknownPCI_ReturnsNil(t *testing.T) { func TestResolveVMGPU_EmptyAttachment_ReturnsNil(t *testing.T) { assert.Nil(t, resolveVMGPU(gpu.GPUAttachment{}, nil, nil)) } + +// A partly resolved set is reported short rather than padded or dropped. +func TestResolveVMGPUs_SkipsUnresolvedAttachments(t *testing.T) { + dev := gpu.GPUDevice{PCIAddress: "0000:01:00.0", Model: "NVIDIA A10", MemoryMiB: 23028} + byPCI := map[string]gpu.PoolEntry{"0000:01:00.0": {Device: dev, InstanceID: "i-abc"}} + + got := resolveVMGPUs("i-abc", []gpu.GPUAttachment{ + {PCIAddress: "0000:01:00.0"}, + {PCIAddress: "0000:99:00.0"}, + }, nil, byPCI) + + require.Len(t, got, 1) + assert.Equal(t, "NVIDIA A10", got[0].Model) +} diff --git a/spinifex/daemon/heartbeat_test.go b/spinifex/daemon/heartbeat_test.go index 237760010..f3c025777 100644 --- a/spinifex/daemon/heartbeat_test.go +++ b/spinifex/daemon/heartbeat_test.go @@ -1,13 +1,16 @@ package daemon import ( + "context" "encoding/json" "testing" + "time" "github.com/mulgadc/spinifex/spinifex/bootstrap/config" "github.com/mulgadc/spinifex/spinifex/runtime/compute/cache" "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -159,3 +162,49 @@ func TestHeartbeatIntervalMatchesLivenessCopy(t *testing.T) { heartbeatInterval, instancecache.HeartbeatInterval) } } + +func heartbeatDaemon(t *testing.T, node string) *Daemon { + t.Helper() + rm, err := NewResourceManager(nil, nil, nil) + require.NoError(t, err) + return &Daemon{ + node: node, + clusterConfig: &config.ClusterConfig{Epoch: 7}, + config: &config.Config{Services: []string{"daemon"}}, + resourceMgr: rm, + vmMgr: vm.NewManager(), + } +} + +func TestStartHeartbeat_PublishesImmediately(t *testing.T) { + jsm, _ := newFaultInjectedJSM(t) + d := heartbeatDaemon(t, "hb-start-node") + d.jsManager = jsm + ctx, cancel := context.WithCancel(t.Context()) + d.ctx = ctx + defer cancel() + + d.startHeartbeat() + + var got *Heartbeat + require.Eventually(t, func() bool { + h, err := jsm.ReadHeartbeat("hb-start-node") + got = h + return err == nil + }, 2*time.Second, time.Millisecond, "the first heartbeat must not wait for the ticker") + assert.Equal(t, uint64(7), got.Epoch) + assert.Equal(t, []string{"daemon"}, got.Services) +} + +func TestPublishHeartbeat_WriteFailure(t *testing.T) { + jsm, f := newFaultInjectedJSM(t) + d := heartbeatDaemon(t, "hb-fail-node") + d.jsManager = jsm + + f.setFail("Put", true) + d.publishHeartbeat() + f.setFail("Put", false) + + _, err := jsm.ReadHeartbeat("hb-fail-node") + assert.ErrorIs(t, err, jetstream.ErrKeyNotFound) +} diff --git a/spinifex/daemon/instance_membership.go b/spinifex/daemon/instance_membership.go index 2e7145ef3..b1ae82e68 100644 --- a/spinifex/daemon/instance_membership.go +++ b/spinifex/daemon/instance_membership.go @@ -44,6 +44,10 @@ func runsOn(record *vm.InstanceRecord, nodeID string) bool { // drained for maintenance leaves them observed-stopped but still wanted — both // are recoveries. What is excluded is an instance nobody wants running: an // operator stop, or a terminate already under way. +// +// A fenced instance is excluded for the same reason the restore path excludes +// it. The fence does not seal, so no node can show the volumes are mountable, +// and taking it over is how an unproven state becomes a destroyed one. func recoverable(record *vm.InstanceRecord) bool { if record == nil || record.Spec.DesiredState != vm.DesiredRunning { return false @@ -55,6 +59,9 @@ func recoverable(record *vm.InstanceRecord) bool { case vm.StateTerminated, vm.StateShuttingDown: return false } + if vm.VolumeFenced(record.Status.Instance) { + return false + } return !storageFaulted(record) } diff --git a/spinifex/daemon/instance_records_migrate_internal_test.go b/spinifex/daemon/instance_records_migrate_internal_test.go new file mode 100644 index 000000000..d301a9efe --- /dev/null +++ b/spinifex/daemon/instance_records_migrate_internal_test.go @@ -0,0 +1,235 @@ +package daemon + +import ( + "context" + "log/slog" + "testing" + + "github.com/mulgadc/spinifex/spinifex/foundation/state/migrate" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/nats-io/nats.go/jetstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// migrateFaultKV fails chosen calls on a real bucket: the key listing, reads +// and creates of named keys, and every delete. +type migrateFaultKV struct { + jetstream.KeyValue + + keysErr error + getErr map[string]error + createErr map[string]error + deleteErr error +} + +func (k *migrateFaultKV) Keys(ctx context.Context, opts ...jetstream.WatchOpt) ([]string, error) { + if k.keysErr != nil { + return nil, k.keysErr + } + return k.KeyValue.Keys(ctx, opts...) +} + +func (k *migrateFaultKV) Get(ctx context.Context, key string) (jetstream.KeyValueEntry, error) { + if err := k.getErr[key]; err != nil { + return nil, err + } + return k.KeyValue.Get(ctx, key) +} + +func (k *migrateFaultKV) Create(ctx context.Context, key string, value []byte, opts ...jetstream.KVCreateOpt) (uint64, error) { + if err := k.createErr[key]; err != nil { + return 0, err + } + return k.KeyValue.Create(ctx, key, value, opts...) +} + +func (k *migrateFaultKV) Delete(ctx context.Context, key string, opts ...jetstream.KVDeleteOpt) error { + if k.deleteErr != nil { + return k.deleteErr + } + return k.KeyValue.Delete(ctx, key, opts...) +} + +type migrateCase struct { + name string + seed map[string][]byte + fault migrateFaultKV + wantErr string + check func(t *testing.T, kv jetstream.KeyValue) +} + +// runMigrateCases runs each case against its own freshly seeded bucket. +func runMigrateCases(t *testing.T, run func(context.Context, migrate.KVContext) error, cases []migrateCase) { + t.Helper() + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + _, f := faultBucket(t) + for k, v := range tc.seed { + _, err := f.KeyValue.Put(t.Context(), k, v) + require.NoError(t, err) + } + kv := tc.fault + kv.KeyValue = f.KeyValue + + err := run(t.Context(), migrate.KVContext{KV: &kv, Logger: slog.Default()}) + if tc.wantErr == "" { + require.NoError(t, err) + } else { + require.ErrorContains(t, err, tc.wantErr) + } + if tc.check != nil { + tc.check(t, f.KeyValue) + } + }) + } +} + +func assertKeyAbsent(t *testing.T, kv jetstream.KeyValue, key string) { + t.Helper() + _, err := kv.Get(context.Background(), key) + assert.ErrorIs(t, err, jetstream.ErrKeyNotFound, "%s must not be written", key) +} + +func notFound(key string) map[string]error { + return map[string]error{key: jetstream.ErrKeyNotFound} +} + +func injected(key string) map[string]error { + return map[string]error{key: errInjected} +} + +func TestRekeyRecordSeparator_Faults(t *testing.T) { + t.Parallel() + slashed := map[string][]byte{"i/i-1": []byte(`{}`)} + + runMigrateCases(t, rekeyRecordSeparator, []migrateCase{ + {name: "empty bucket"}, + {name: "listing fails", seed: slashed, fault: migrateFaultKV{keysErr: errInjected}, wantErr: "list keys"}, + { + name: "record vanished mid-pass", seed: slashed, fault: migrateFaultKV{getErr: notFound("i/i-1")}, + check: func(t *testing.T, kv jetstream.KeyValue) { assertKeyAbsent(t, kv, "i.i-1") }, + }, + {name: "read fails", seed: slashed, fault: migrateFaultKV{getErr: injected("i/i-1")}, wantErr: "read i/i-1"}, + {name: "write fails", seed: slashed, fault: migrateFaultKV{createErr: injected("i.i-1")}, wantErr: "write i.i-1"}, + { + name: "delete fails after the copy", seed: slashed, fault: migrateFaultKV{deleteErr: errInjected}, + wantErr: "delete i/i-1", + check: func(t *testing.T, kv jetstream.KeyValue) { + _, err := kv.Get(context.Background(), "i.i-1") + assert.NoError(t, err, "the copy lands before the delete, so a rerun finds it") + }, + }, + }) +} + +func TestCarryNodeOwnershipForward_Faults(t *testing.T) { + t.Parallel() + blob := mustMarshal(t, LocalState{SchemaVersion: LocalStateSchemaVersion, VMS: map[string]*vm.VM{"i-1": {ID: "i-1"}}}) + withRecord := map[string][]byte{ + "node.n1": blob, + "i.i-1": mustMarshal(t, (&vm.VM{ID: "i-1"}).Record()), + } + + runMigrateCases(t, carryNodeOwnershipForward, []migrateCase{ + {name: "empty bucket"}, + {name: "listing fails", seed: withRecord, fault: migrateFaultKV{keysErr: errInjected}, wantErr: "list keys"}, + { + name: "marker write fails", seed: withRecord, + fault: migrateFaultKV{createErr: injected("nodepresence.n1")}, wantErr: "write nodepresence.n1", + }, + { + name: "blob vanished still seeds the marker", seed: withRecord, + fault: migrateFaultKV{getErr: notFound("node.n1")}, + check: func(t *testing.T, kv jetstream.KeyValue) { + _, err := kv.Get(context.Background(), "nodepresence.n1") + assert.NoError(t, err) + }, + }, + {name: "blob read fails", seed: withRecord, fault: migrateFaultKV{getErr: injected("node.n1")}, wantErr: "read node.n1"}, + {name: "blob corrupt", seed: map[string][]byte{"node.n1": []byte("{")}, wantErr: "decode node.n1"}, + { + name: "blob from a newer build", seed: map[string][]byte{"node.n1": []byte(`{"schema_version":99}`)}, + wantErr: "newer than this node understands", + }, + { + name: "instance without a record is skipped", seed: map[string][]byte{"node.n1": blob}, + check: func(t *testing.T, kv jetstream.KeyValue) { assertKeyAbsent(t, kv, "i.i-1") }, + }, + { + name: "record read fails", seed: withRecord, fault: migrateFaultKV{getErr: injected("i.i-1")}, + wantErr: "stamp owner on i.i-1", + }, + }) +} + +func TestCopyInstancesForward_Faults(t *testing.T) { + t.Parallel() + stopped := map[string][]byte{"instance.i-1": mustMarshal(t, &vm.VM{ID: "i-1", InstanceType: "t3.nano"})} + run := func(ctx context.Context, kvc migrate.KVContext) error { + return copyInstancesForward(ctx, kvc, StoppedInstancePrefix) + } + + runMigrateCases(t, run, []migrateCase{ + {name: "empty bucket"}, + {name: "listing fails", seed: stopped, fault: migrateFaultKV{keysErr: errInjected}, wantErr: "list keys"}, + { + name: "instance vanished mid-pass", seed: stopped, fault: migrateFaultKV{getErr: notFound("instance.i-1")}, + check: func(t *testing.T, kv jetstream.KeyValue) { assertKeyAbsent(t, kv, "i.i-1") }, + }, + {name: "read fails", seed: stopped, fault: migrateFaultKV{getErr: injected("instance.i-1")}, wantErr: "read instance.i-1"}, + {name: "corrupt instance", seed: map[string][]byte{"instance.i-1": []byte("{")}, wantErr: "decode instance.i-1"}, + {name: "write fails", seed: stopped, fault: migrateFaultKV{createErr: injected("i.i-1")}, wantErr: "write i.i-1"}, + { + name: "existing record is kept", + seed: map[string][]byte{ + "instance.i-1": stopped["instance.i-1"], + "i.i-1": []byte(`{"kept":true}`), + }, + check: func(t *testing.T, kv jetstream.KeyValue) { + entry, err := kv.Get(context.Background(), "i.i-1") + require.NoError(t, err) + assert.JSONEq(t, `{"kept":true}`, string(entry.Value())) + }, + }, + }) +} + +func TestCopyRunningSetsForward_Faults(t *testing.T) { + t.Parallel() + set := map[string][]byte{"node.n1": mustMarshal(t, LocalState{ + SchemaVersion: LocalStateSchemaVersion, + VMS: map[string]*vm.VM{"i-1": {ID: "i-1"}}, + })} + + runMigrateCases(t, copyRunningSetsForward, []migrateCase{ + {name: "empty bucket"}, + {name: "listing fails", seed: set, fault: migrateFaultKV{keysErr: errInjected}, wantErr: "list keys"}, + { + name: "set vanished mid-pass", seed: set, fault: migrateFaultKV{getErr: notFound("node.n1")}, + check: func(t *testing.T, kv jetstream.KeyValue) { assertKeyAbsent(t, kv, "i.i-1") }, + }, + {name: "read fails", seed: set, fault: migrateFaultKV{getErr: injected("node.n1")}, wantErr: "read node.n1"}, + {name: "corrupt set", seed: map[string][]byte{"node.n1": []byte("{")}, wantErr: "decode node.n1"}, + { + name: "set from a newer build", seed: map[string][]byte{"node.n1": []byte(`{"schema_version":99}`)}, + wantErr: "newer than this node understands", + }, + { + name: "nil instance is skipped", + seed: map[string][]byte{"node.n1": []byte(`{"schema_version":1,"vms":{"i-1":null}}`)}, + check: func(t *testing.T, kv jetstream.KeyValue) { assertKeyAbsent(t, kv, "i.i-1") }, + }, + {name: "write fails", seed: set, fault: migrateFaultKV{createErr: injected("i.i-1")}, wantErr: "write i.i-1"}, + { + name: "existing record is kept", + seed: map[string][]byte{"node.n1": set["node.n1"], "i.i-1": []byte(`{"kept":true}`)}, + check: func(t *testing.T, kv jetstream.KeyValue) { + entry, err := kv.Get(context.Background(), "i.i-1") + require.NoError(t, err) + assert.JSONEq(t, `{"kept":true}`, string(entry.Value())) + }, + }, + }) +} diff --git a/spinifex/daemon/instance_recovery_coverage_test.go b/spinifex/daemon/instance_recovery_coverage_test.go new file mode 100644 index 000000000..649cc3b1d --- /dev/null +++ b/spinifex/daemon/instance_recovery_coverage_test.go @@ -0,0 +1,373 @@ +//test:in-package — the recovery loop, its pass and its attempt are unexported, +//and these tests drive them against a real store rather than through a cluster. + +package daemon + +import ( + "cmp" + "context" + "fmt" + "slices" + "strings" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + ec2instance "github.com/mulgadc/spinifex/spinifex/domains/ec2/instance" + "github.com/mulgadc/spinifex/spinifex/foundation/state/clustersize" + "github.com/mulgadc/spinifex/spinifex/foundation/state/kvstore" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/cache" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/nats-io/nats.go" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// recoveryStore is a JetStreamManager over private record and heartbeat +// buckets on the shared server, with a liveness view of the heartbeats. +type recoveryStore struct { + m *JetStreamManager + liveness *instancecache.Liveness +} + +func newRecoveryStore(t *testing.T) *recoveryStore { + t.Helper() + nc, err := nats.Connect(sharedJSNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + + m, err := NewJetStreamManager(nc) + require.NoError(t, err) + clustersize.RedeclareForTest(t, 1) + + name := fmt.Sprintf("recovery-%d", time.Now().UnixNano()) + m.setInstanceStateBucket(kvstore.NewBucket(m.js, kvstore.Config{Name: name, History: 1})) + _, err = m.stateB.KV(t.Context()) + require.NoError(t, err) + + beats := kvstore.Config{Name: name + "-hb", History: 1} + m.clusterKV, err = kvstore.NewBucket(m.js, beats).KV(t.Context()) + require.NoError(t, err) + + t.Cleanup(func() { + _ = m.js.DeleteKeyValue(context.Background(), name) + _ = m.js.DeleteKeyValue(context.Background(), name+"-hb") + }) + return &recoveryStore{m: m, liveness: instancecache.NewLiveness(m.js, beats)} +} + +// beat writes node's heartbeat stamped at. +func (s *recoveryStore) beat(t *testing.T, node string, at time.Time) { + t.Helper() + require.NoError(t, s.m.WriteHeartbeat(&Heartbeat{Node: node, Timestamp: at.UTC().Format(time.RFC3339)})) +} + +// put writes a desired-running record for id owned by node. +func (s *recoveryStore) put(t *testing.T, id, node, instanceType string) { + t.Helper() + record := runningOn(id, node) + record.Spec.InstanceType = instanceType + record.Status.Instance = &ec2.Instance{InstanceId: aws.String(id)} + require.NoError(t, s.m.records.Set(context.Background(), instanceRecordKey(id), record)) +} + +func (s *recoveryStore) load(t *testing.T, id string) *vm.InstanceRecord { + t.Helper() + record, err := s.m.LoadInstanceRecord(id) + require.NoError(t, err) + require.NotNil(t, record) + return record +} + +// recoveryDaemon is a node-1 daemon whose recovery loop reads s, has already +// settled, and finds its own object store healthy. +func recoveryDaemon(t *testing.T, s *recoveryStore) (*Daemon, *instanceRecovery) { + t.Helper() + t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) + origTTL := predastoreHealthCacheTTL + predastoreHealthCacheTTL = time.Hour + t.Cleanup(func() { predastoreHealthCacheTTL = origTTL }) + + d := createTestDaemon(t, sharedNATSURL) + d.jsManager = s.m + d.predastoreHealth.at = time.Now() + d.predastoreHealth.result = predastoreHealthOK + + return d, &instanceRecovery{ + daemon: d, + liveness: s.liveness, + startedAt: time.Now(), + settledOnce: true, + staleOnce: map[string]struct{}{}, + backoff: map[string]recoveryBackoff{}, + } +} + +// schedulableType is an instance type this daemon can allocate. +func schedulableType(t *testing.T, d *Daemon) string { + t.Helper() + for name := range d.resourceMgr.instanceTypes { + if strings.HasSuffix(name, ".nano") || strings.HasSuffix(name, ".micro") { + return name + } + } + t.Fatal("no small instance type on this host") + return "" +} + +func threeNodes() *config.ClusterConfig { + return &config.ClusterConfig{Nodes: map[string]config.Config{"node-1": {}, "node-2": {}, "node-3": {}}} +} + +func TestRecoveryStartsAndStopsOnContext(t *testing.T) { + t.Run("the loop runs until the daemon stops", func(t *testing.T) { + logs := captureSlogForTest(t) + nc, err := nats.Connect(sharedJSNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + m, err := NewJetStreamManager(nc) + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + d := &Daemon{ + node: "node-1", + clusterConfig: threeNodes(), + jsManager: m, + instanceService: &ec2instance.InstanceServiceImpl{}, + ctx: ctx, + cancel: cancel, + } + d.startInstanceRecovery() + assert.Contains(t, logs.String(), "Instance recovery started") + + cancel() + d.shutdownWg.Wait() + assert.Contains(t, logs.String(), "Instance recovery stopping", + "the loop has to exit with the daemon, not outlive the store it reads") + }) +} + +func TestRecoveryPassPaths(t *testing.T) { + t.Run("an unreadable record store ends the pass", func(t *testing.T) { + logs := captureSlogForTest(t) + r := recoveryFixture("node-1") + r.settledOnce = true + r.daemon.jsManager = &JetStreamManager{} + r.daemon.predastoreHealth.at = time.Now() + r.daemon.predastoreHealth.result = predastoreHealthOK + + r.pass(context.Background()) + assert.Contains(t, logs.String(), "could not read the instance records") + }) + + t.Run("a backed-off candidate is left where it is", func(t *testing.T) { + s := newRecoveryStore(t) + _, r := recoveryDaemon(t, s) + s.beat(t, "node-dead", time.Now().Add(-time.Hour)) + s.put(t, "i-backoff", "node-dead", "zz9.none") + r.backoff["i-backoff"] = recoveryBackoff{until: time.Now().Add(time.Hour)} + + r.pass(t.Context()) + r.pass(t.Context()) + + assert.Equal(t, "node-dead", s.load(t, "i-backoff").Status.LastNode, "a backed-off instance must not be claimed") + assert.Zero(t, r.backoff["i-backoff"].attempts) + }) + + t.Run("a cancelled pass stops before claiming", func(t *testing.T) { + s := newRecoveryStore(t) + _, r := recoveryDaemon(t, s) + s.beat(t, "node-dead", time.Now().Add(-time.Hour)) + s.put(t, "i-cancel", "node-dead", "zz9.none") + + r.pass(t.Context()) + ctx, cancel := context.WithCancel(t.Context()) + cancel() + r.pass(ctx) + + assert.Contains(t, r.staleOnce, "i-cancel", "the second pass derived the candidate from the memoised liveness") + assert.Equal(t, "node-dead", s.load(t, "i-cancel").Status.LastNode, "a cancelled pass must not claim") + assert.Empty(t, r.backoff) + }) + + t.Run("a candidate seen stale twice is attempted", func(t *testing.T) { + s := newRecoveryStore(t) + _, r := recoveryDaemon(t, s) + s.beat(t, "node-dead", time.Now().Add(-time.Hour)) + s.put(t, "i-attempt", "node-dead", "zz9.none") + + r.pass(t.Context()) + assert.Empty(t, r.backoff, "one stale sample is not enough to act on") + r.pass(t.Context()) + + assert.Equal(t, 1, r.backoff["i-attempt"].attempts, "the failed launch counts against the budget") + assert.Equal(t, "node-dead", s.load(t, "i-attempt").Status.LastNode, + "a launch that could not run here hands the record back") + }) +} + +func TestRecoveryAttemptFailureAndBudget(t *testing.T) { + t.Run("an unschedulable type is handed back and backed off", func(t *testing.T) { + s := newRecoveryStore(t) + _, r := recoveryDaemon(t, s) + s.put(t, "i-nofit", "node-dead", "zz9.none") + + r.attempt(t.Context(), recoveryCandidate{record: s.load(t, "i-nofit"), from: "node-dead"}) + + record := s.load(t, "i-nofit") + assert.Equal(t, "node-dead", record.Status.LastNode) + assert.Equal(t, vm.DesiredRunning, record.Spec.DesiredState, "one failure is not a give-up") + held := r.backoff["i-nofit"] + assert.Equal(t, 1, held.attempts) + assert.True(t, held.until.After(time.Now())) + }) + + t.Run("the last attempt in the budget stops the instance with the reason", func(t *testing.T) { + s := newRecoveryStore(t) + _, r := recoveryDaemon(t, s) + s.put(t, "i-budget", "node-dead", "zz9.none") + r.backoff["i-budget"] = recoveryBackoff{attempts: recoveryMaxAttempts - 1} + r.staleOnce["i-budget"] = struct{}{} + + r.attempt(t.Context(), recoveryCandidate{record: s.load(t, "i-budget"), from: "node-dead"}) + + record := s.load(t, "i-budget") + assert.Equal(t, vm.DesiredStopped, record.Spec.DesiredState) + assert.Equal(t, vm.StateStopped, record.Status.Status) + require.NotNil(t, record.Status.Instance.StateReason) + assert.Equal(t, "Server.InsufficientInstanceCapacity", aws.StringValue(record.Status.Instance.StateReason.Code)) + assert.NotContains(t, r.backoff, "i-budget") + assert.NotContains(t, r.staleOnce, "i-budget") + }) +} + +func TestRecoveryAttemptSucceeds(t *testing.T) { + s := newRecoveryStore(t) + d, r := recoveryDaemon(t, s) + + // Marking the guest as terminating before Run makes launch return without + // starting QEMU, which is the one part of a recovery this cannot do. + d.vmMgr.SetDeps(vm.Deps{ + NodeID: d.node, + VolumeMounter: newVolumeMounterAdapter(d.natsConn, d.node, d.volumeService), + VolumeStateUpdater: d.volumeService, + Hooks: vm.ManagerHooks{BeforeInstanceRelaunch: func(v *vm.VM) error { + d.vmMgr.Inspect(v, func(v *vm.VM) { v.Status = vm.StateShuttingDown }) + return nil + }}, + }) + + s.put(t, "i-recovered", "node-dead", schedulableType(t, d)) + r.backoff["i-recovered"] = recoveryBackoff{attempts: 2} + r.staleOnce["i-recovered"] = struct{}{} + + r.attempt(t.Context(), recoveryCandidate{record: s.load(t, "i-recovered"), from: "node-dead"}) + + assert.Equal(t, "node-1", s.load(t, "i-recovered").Status.LastNode, "the claim stands once the launch succeeds") + assertVMPresent(t, d, "i-recovered") + assert.NotContains(t, r.backoff, "i-recovered", "a recovered instance starts a fresh budget") + assert.NotContains(t, r.staleOnce, "i-recovered") +} + +func TestAbandonOutcomes(t *testing.T) { + cause := fmt.Errorf("launch refused") + + t.Run("a give-up that cannot be written keeps the backoff", func(t *testing.T) { + r := recoveryFixture("node-1") + r.daemon.jsManager = &JetStreamManager{} + r.backoff["i-1"] = recoveryBackoff{attempts: recoveryMaxAttempts} + + r.abandon(t.Context(), "i-1", "node-dead", recoveryFaultUnknown, cause, recoveryMaxAttempts) + assert.Contains(t, r.backoff, "i-1", "the next pass retries the launch rather than the give-up") + }) + + t.Run("an instance another node now owns is left running", func(t *testing.T) { + s := newRecoveryStore(t) + r := recoveryFixture("node-1") + r.daemon.jsManager = s.m + s.put(t, "i-moved", "node-3", "t3.micro") + r.backoff["i-moved"] = recoveryBackoff{attempts: recoveryMaxAttempts} + r.staleOnce["i-moved"] = struct{}{} + + r.abandon(t.Context(), "i-moved", "node-dead", recoveryFaultUnknown, cause, recoveryMaxAttempts) + + record := s.load(t, "i-moved") + assert.Equal(t, vm.DesiredRunning, record.Spec.DesiredState) + assert.Equal(t, "node-3", record.Status.LastNode) + assert.NotContains(t, r.backoff, "i-moved") + assert.NotContains(t, r.staleOnce, "i-moved") + }) + + t.Run("an instance still on its dead owner is stopped with the reason", func(t *testing.T) { + s := newRecoveryStore(t) + r := recoveryFixture("node-1") + r.daemon.jsManager = s.m + s.put(t, "i-gone", "node-dead", "t3.micro") + r.backoff["i-gone"] = recoveryBackoff{attempts: recoveryMaxAttempts} + + r.abandon(t.Context(), "i-gone", "node-dead", recoveryFaultUnknown, cause, recoveryMaxAttempts) + + record := s.load(t, "i-gone") + assert.Equal(t, vm.DesiredStopped, record.Spec.DesiredState) + reason := record.Status.Instance.StateReason + require.NotNil(t, reason) + assert.Equal(t, "Server.HostRecoveryFailed", aws.StringValue(reason.Code)) + assert.Contains(t, aws.StringValue(reason.Message), fmt.Sprintf("failed %d times", recoveryMaxAttempts)) + assert.NotContains(t, r.backoff, "i-gone") + }) +} + +// Every survivor derives the same candidates, so each has to try them in an +// order of its own or they all race the same instance first. +func TestCandidateOrderingIsPerNode(t *testing.T) { + var records []*vm.InstanceRecord + for i := range 8 { + records = append(records, runningOn(fmt.Sprintf("i-%d", i), "node-dead")) + } + order := func(self string) []string { + got := twice(recoveryFixture(self), records, stale) + ids := make([]string, len(got)) + for i, c := range got { + ids[i] = c.record.Metadata.Name + } + return ids + } + + a, b := order("node-1"), order("node-2") + require.Len(t, a, len(records)) + assert.Equal(t, a, order("node-1"), "one node's order is stable, so a failure is reproducible") + assert.ElementsMatch(t, a, b) + assert.NotEqual(t, a, b, "two survivors must not share one order") + + r := recoveryFixture("node-1") + assert.True(t, slices.IsSortedFunc(a, func(x, y string) int { + return cmp.Compare(r.preference(x), r.preference(y)) + }), "candidates are tried in this node's preference order") +} + +// A returning node drops only the instances the records say another node now +// runs. Its own, ones with no record, and ones it cannot read are kept. +func TestForgetSupersededInstances(t *testing.T) { + s := newRecoveryStore(t) + d, _ := recoveryDaemon(t, s) + + s.put(t, "i-moved", "node-3", "") + s.put(t, "i-mine", "node-1", "") + kv, err := s.m.stateB.KV(t.Context()) + require.NoError(t, err) + _, err = kv.Put(t.Context(), instanceRecordKey("i-corrupt"), []byte("{")) + require.NoError(t, err) + + for _, id := range []string{"i-moved", "i-mine", "i-corrupt", "i-unrecorded"} { + d.vmMgr.Insert(&vm.VM{ID: id, Status: vm.StateStopped}) + } + + d.forgetSupersededInstances() + + assertVMNotPresent(t, d, "i-moved", "another node owns it now") + assertVMPresent(t, d, "i-mine") + assertVMPresent(t, d, "i-corrupt", "an unreadable record is not evidence the instance moved") + assertVMPresent(t, d, "i-unrecorded") +} diff --git a/spinifex/daemon/instance_recovery_test.go b/spinifex/daemon/instance_recovery_test.go index 579d995de..692685078 100644 --- a/spinifex/daemon/instance_recovery_test.go +++ b/spinifex/daemon/instance_recovery_test.go @@ -15,6 +15,8 @@ import ( "testing" "time" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" "github.com/mulgadc/spinifex/spinifex/bootstrap/config" ec2instance "github.com/mulgadc/spinifex/spinifex/domains/ec2/instance" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" @@ -149,6 +151,33 @@ func TestAnInstancePausedOnItsStorageIsNotMoved(t *testing.T) { "only the guest whose storage was answering is worth moving") } +// A fenced guest is the case the storage-fault guard does not catch: the fence +// kills the export rather than pausing the guest, so it publishes no I/O error +// and reads as an ordinary desired-running instance on a node that has died. +func TestAFencedInstanceIsNotMoved(t *testing.T) { + fenced := runningOn("i-fenced", "node-1") + fenced.Status.Status = vm.StateError + fenced.Status.Instance = &ec2.Instance{StateReason: &ec2.StateReason{ + Code: aws.String("Server.VolumeFenced"), + Message: aws.String("the lease moved while this node had it open"), + }} + + // Errored for a reason that is not a fence, which is what the exclusion has + // to be narrower than: a launch that failed is still worth another node. + failed := runningOn("i-failed", "node-1") + failed.Status.Status = vm.StateError + failed.Status.Instance = &ec2.Instance{StateReason: &ec2.StateReason{ + Code: aws.String("Server.RecoveryFailed"), + }} + + r := recoveryFixture("node-2") + got := twice(r, []*vm.InstanceRecord{fenced, failed}, stale) + + require.Len(t, got, 1) + assert.Equal(t, "i-failed", got[0].record.Metadata.Name, + "a fenced guest's volumes were never sealed, so moving it is how an unproven state becomes a destroyed one") +} + // A guest that had recovered from an earlier pause is an ordinary candidate. // IOErrorSince clears on the first running poll, so a non-zero value means the // storage was still failing when the owner last wrote. diff --git a/spinifex/daemon/instance_running_set_internal_test.go b/spinifex/daemon/instance_running_set_internal_test.go new file mode 100644 index 000000000..52e728b0d --- /dev/null +++ b/spinifex/daemon/instance_running_set_internal_test.go @@ -0,0 +1,100 @@ +package daemon + +import ( + "testing" + + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func runningSetOf(ids ...string) map[string]*vm.VM { + set := make(map[string]*vm.VM, len(ids)) + for _, id := range ids { + set[id] = &vm.VM{ID: id, InstanceType: "t3.micro", Status: vm.StateRunning} + } + return set +} + +func TestWriteRunningSet_SeedFailure(t *testing.T) { + m, f := newFaultInjectedJSM(t) + f.setFail("ListKeys", true) + f.setFail("Keys", true) + + got := m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + assert.Equal(t, RunningSetResult{Failed: 1}, got) + + f.setFail("ListKeys", false) + f.setFail("Keys", false) + got = m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + assert.Equal(t, RunningSetResult{Written: 1}, got, "the next write must seed and publish") +} + +func TestWriteRunningSet_NilMemberIsSkipped(t *testing.T) { + m, _ := newFaultInjectedJSM(t) + set := runningSetOf("i-1") + set["i-nil"] = nil + + assert.Equal(t, RunningSetResult{Written: 1}, m.WriteRunningSet("node-1", "", set)) + rec, err := m.LoadInstanceRecord("i-nil") + require.NoError(t, err) + assert.Nil(t, rec) +} + +// A failed publish forgets its digest, so an unchanged set retries the write. +func TestWriteRunningSet_FailedWriteIsRetried(t *testing.T) { + m, f := newFaultInjectedJSM(t) + f.setFail("Create", true) + assert.Equal(t, RunningSetResult{Failed: 1}, m.WriteRunningSet("node-1", "", runningSetOf("i-1"))) + + f.setFail("Create", false) + assert.Equal(t, RunningSetResult{Written: 1}, m.WriteRunningSet("node-1", "", runningSetOf("i-1"))) +} + +func TestWriteRunningSet_Retirement(t *testing.T) { + t.Run("record already gone", func(t *testing.T) { + m, _ := newFaultInjectedJSM(t) + m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + require.NoError(t, m.DeleteStoppedInstance("i-1")) + + assert.Equal(t, RunningSetResult{Retired: 1}, m.WriteRunningSet("node-1", "", nil)) + }) + + t.Run("record moved to another node is left alone", func(t *testing.T) { + m, _ := newFaultInjectedJSM(t) + m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + _, err := m.UpdateInstanceRecord("i-1", func(r *vm.InstanceRecord) { r.Status.LastNode = "node-2" }) + require.NoError(t, err) + + assert.Equal(t, RunningSetResult{Retired: 1}, m.WriteRunningSet("node-1", "", nil)) + rec, err := m.LoadInstanceRecord("i-1") + require.NoError(t, err) + require.NotNil(t, rec, "the new owner's record must survive the old owner's write") + assert.Equal(t, "node-2", rec.Status.LastNode) + }) + + t.Run("unreadable record is kept until it can be checked", func(t *testing.T) { + m, f := newFaultInjectedJSM(t) + m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + + f.setFail("Get", true) + assert.Equal(t, RunningSetResult{Failed: 1}, m.WriteRunningSet("node-1", "", nil)) + f.setFail("Get", false) + + assert.Equal(t, RunningSetResult{Retired: 1}, m.WriteRunningSet("node-1", "", nil), + "the failed retirement must be retried, not forgotten") + }) + + t.Run("delete failure keeps the record", func(t *testing.T) { + m, f := newFaultInjectedJSM(t) + m.WriteRunningSet("node-1", "", runningSetOf("i-1")) + + f.setFail("Delete", true) + assert.Equal(t, RunningSetResult{Failed: 1}, m.WriteRunningSet("node-1", "", nil)) + f.setFail("Delete", false) + + rec, err := m.LoadInstanceRecord("i-1") + require.NoError(t, err) + assert.NotNil(t, rec) + }) +} diff --git a/spinifex/daemon/jetstream_test.go b/spinifex/daemon/jetstream_test.go index 0ddf85bcb..83be0a102 100644 --- a/spinifex/daemon/jetstream_test.go +++ b/spinifex/daemon/jetstream_test.go @@ -1,13 +1,17 @@ package daemon import ( + "context" "encoding/json" "errors" "github.com/mulgadc/spinifex/internal/testkit" + "strings" "sync" "testing" "time" + "github.com/mulgadc/spinifex/spinifex/foundation/lifecycle/resource" + "github.com/mulgadc/spinifex/spinifex/foundation/state/clustersize" "github.com/mulgadc/spinifex/spinifex/foundation/state/kvstore" "github.com/mulgadc/spinifex/spinifex/foundation/state/kvutil" "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" @@ -1870,3 +1874,237 @@ func TestJetStreamManager_WriteState_StampsSchemaVersion(t *testing.T) { assert.Empty(t, read("stamp-node").VMS, "the node key is a presence marker: carrying the running set is the cost the split removes") } + +// faultBucket creates a uniquely named bucket on the shared JetStream server +// and wraps it so a test can fail individual KV methods. +func faultBucket(t *testing.T) (jetstream.JetStream, *failingKV) { + t.Helper() + nc, err := nats.Connect(sharedJSNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + js, err := jetstream.New(nc) + require.NoError(t, err) + + name := "fault-" + strings.Map(func(r rune) rune { + if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') { + return r + } + return '-' + }, t.Name()) + kv, err := js.CreateKeyValue(t.Context(), jetstream.KeyValueConfig{Bucket: name, History: 1}) + require.NoError(t, err) + t.Cleanup(func() { _ = js.DeleteKeyValue(context.Background(), name) }) + return js, newFailingKV(kv) +} + +// newFaultInjectedJSM returns a manager whose instance-state, terminated and +// cluster buckets all sit on one fault-injectable bucket with recovery off. +func newFaultInjectedJSM(t *testing.T) (*JetStreamManager, *failingKV) { + t.Helper() + js, f := faultBucket(t) + m := &JetStreamManager{js: js, clusterKV: f} + m.setInstanceStateBucket(kvstore.NewOpenBucket(nil, f, instanceStateConfig())) + term := kvstore.NewOpenBucket(nil, f, terminatedInstanceConfig()) + m.term = kvstore.On[vm.VM](term) + m.termRecords = kvstore.On[vm.InstanceRecord](term) + return m, f +} + +func TestJetStreamManager_NilGuards(t *testing.T) { + m := &JetStreamManager{} + noop := func(*vm.VM) {} + + assert.False(t, m.KVHealthy(), "a manager with no JetStream context cannot be healthy") + + guards := map[string]func() error{ + "WriteHeartbeat": func() error { return m.WriteHeartbeat(&Heartbeat{Node: "n"}) }, + "ReadHeartbeat": func() error { _, err := m.ReadHeartbeat("n"); return err }, + "WriteClusterShutdown": func() error { + return m.WriteClusterShutdown(&ClusterShutdownState{}) + }, + "UpdateClusterShutdown": func() error { + _, err := m.UpdateClusterShutdown(func(*ClusterShutdownState) {}) + return err + }, + "UpdateMgmtIPAM": func() error { + _, err := m.UpdateMgmtIPAM("10.0.0.0/24", func(*MgmtIPRecord) {}, true) + return err + }, + "ReadClusterShutdown": func() error { _, err := m.ReadClusterShutdown(); return err }, + "DeleteClusterShutdown": m.DeleteClusterShutdown, + "WriteShutdownMarker": func() error { return m.WriteShutdownMarker("n") }, + "ReadShutdownMarker": func() error { _, err := m.ReadShutdownMarker("n"); return err }, + "DeleteShutdownMarker": func() error { return m.DeleteShutdownMarker("n") }, + "WriteNodeMarker": func() error { return m.WriteNodeMarker("n") }, + "ClaimStoppedInstance": func() error { _, err := m.ClaimStoppedInstance("i-1"); return err }, + "ClaimRecoverableInstance": func() error { + _, err := m.ClaimRecoverableInstance("i-1", "a", "b") + return err + }, + "ReleaseRecoveredInstance": func() error { return m.ReleaseRecoveredInstance("i-1", "a", "b") }, + "AbandonRecovery": func() error { + _, err := m.AbandonRecovery("i-1", "a", "code", "reason") + return err + }, + "UpdateStoppedInstance": func() error { _, err := m.UpdateStoppedInstance("i-1", noop); return err }, + "WriteTerminatedInstance": func() error { + return m.WriteTerminatedInstance("i-1", &vm.VM{ID: "i-1"}) + }, + "UpdateTerminatedInstance": func() error { + _, err := m.UpdateTerminatedInstance("i-1", noop) + return err + }, + } + for name, call := range guards { + t.Run(name, func(t *testing.T) { + assert.ErrorContains(t, call(), "not initialized") + }) + } +} + +func TestJetStreamManager_InitClusterStateBucket_NoJetStream(t *testing.T) { + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + defer nc.Close() + + jsm, err := NewJetStreamManager(nc) + require.NoError(t, err) + require.Error(t, jsm.InitClusterStateBucket()) + assert.Nil(t, jsm.clusterKV, "a failed init must not leave a half-open handle") +} + +func TestJetStreamManager_ClusterStateReads(t *testing.T) { + m, f := newFaultInjectedJSM(t) + + t.Run("heartbeat missing", func(t *testing.T) { + _, err := m.ReadHeartbeat("absent") + assert.ErrorIs(t, err, jetstream.ErrKeyNotFound) + }) + + t.Run("heartbeat corrupt", func(t *testing.T) { + _, err := f.Put(t.Context(), "heartbeat.corrupt", []byte("{")) + require.NoError(t, err) + _, err = m.ReadHeartbeat("corrupt") + assert.Error(t, err) + }) + + t.Run("cluster shutdown missing then corrupt", func(t *testing.T) { + _, err := m.ReadClusterShutdown() + require.ErrorIs(t, err, jetstream.ErrKeyNotFound) + + _, err = f.Put(t.Context(), "cluster.shutdown", []byte("{")) + require.NoError(t, err) + _, err = m.ReadClusterShutdown() + assert.Error(t, err) + require.NoError(t, m.DeleteClusterShutdown()) + }) + + t.Run("update cluster shutdown merges an ack", func(t *testing.T) { + require.NoError(t, m.WriteClusterShutdown(&ClusterShutdownState{ + Initiator: "n1", Phase: "drain", NodesTotal: 2, NodesAcked: map[string]string{}, + })) + got, err := m.UpdateClusterShutdown(func(s *ClusterShutdownState) { + s.NodesAcked["n2"] = "done" + }) + require.NoError(t, err) + assert.Equal(t, "done", got.NodesAcked["n2"]) + + stored, err := m.ReadClusterShutdown() + require.NoError(t, err) + assert.Equal(t, "drain", stored.Phase) + assert.Equal(t, map[string]string{"n2": "done"}, stored.NodesAcked) + }) + + t.Run("kv errors surface", func(t *testing.T) { + f.setFail("Get", true) + f.setFail("Delete", true) + t.Cleanup(func() { f.setFail("Get", false); f.setFail("Delete", false) }) + + _, err := m.ReadShutdownMarker("n1") + require.ErrorIs(t, err, errInjected, "only a missing key reads as no marker") + require.ErrorIs(t, m.DeleteClusterShutdown(), errInjected) + require.ErrorIs(t, m.DeleteShutdownMarker("n1"), errInjected) + }) +} + +func TestJetStreamManager_WriteNodeMarkerBestEffort_Timeout(t *testing.T) { + clustersize.DeclareForTest(t, 1) + nc, err := nats.Connect(sharedJSNATSURL) + require.NoError(t, err) + defer nc.Close() + + jsm, err := NewJetStreamManager(nc) + require.NoError(t, err) + require.NoError(t, jsm.InitKVBucket()) + + obs := &fakeKVObserver{} + jsm.SetSyncObserver(obs) + + jsm.WriteNodeMarkerBestEffort("obs-timeout", time.Nanosecond) + + successes, failures := obs.snapshot() + assert.Empty(t, successes) + require.Len(t, failures, 1) + assert.ErrorIs(t, failures[0].err, context.DeadlineExceeded) +} + +func TestJetStreamManager_InstanceRecordKVErrors(t *testing.T) { + m, f := newFaultInjectedJSM(t) + + require.NoError(t, m.WriteStoppedInstance("i-stopped", &vm.VM{ID: "i-stopped", InstanceType: "t3.micro"})) + require.NoError(t, m.WriteInstanceRecord("i-run", &vm.InstanceRecord{ + Metadata: resource.Metadata{Name: "i-run", AccountID: "111122223333"}, + Spec: vm.InstanceSpec{InstanceType: "t3.micro", DesiredState: vm.DesiredRunning}, + Status: vm.InstanceStatus{Status: vm.StateRunning, LastNode: "node-1"}, + })) + require.NoError(t, m.WriteNodeMarker("node-1")) + + t.Run("read failures", func(t *testing.T) { + f.setFail("Get", true) + t.Cleanup(func() { f.setFail("Get", false) }) + + _, err := m.ClaimStoppedInstance("i-stopped") + require.ErrorIs(t, err, errInjected) + _, err = m.ClaimRecoverableInstance("i-run", "node-1", "node-2") + require.ErrorIs(t, err, errInjected) + require.ErrorIs(t, m.ReleaseRecoveredInstance("i-run", "node-2", "node-1"), errInjected) + _, err = m.AbandonRecovery("i-run", "node-1", "code", "reason") + require.ErrorIs(t, err, errInjected) + }) + + t.Run("write failures are not lost claims", func(t *testing.T) { + f.setFail("Update", true) + t.Cleanup(func() { f.setFail("Update", false) }) + + _, err := m.ClaimStoppedInstance("i-stopped") + require.ErrorIs(t, err, errInjected) + assert.NotErrorIs(t, err, vm.ErrStoppedInstanceClaimed) + _, err = m.ClaimRecoverableInstance("i-run", "node-1", "node-2") + require.ErrorIs(t, err, errInjected) + assert.NotErrorIs(t, err, vm.ErrRecoveryClaimLost) + + rec, err := m.LoadInstanceRecord("i-run") + require.NoError(t, err) + assert.Equal(t, "node-1", rec.Status.LastNode, "a failed claim must leave the owner unchanged") + }) + + t.Run("load state listing fails", func(t *testing.T) { + f.setFail("ListKeys", true) + f.setFail("Keys", true) + t.Cleanup(func() { f.setFail("ListKeys", false); f.setFail("Keys", false) }) + + vms, known, err := m.LoadState("node-1") + require.ErrorIs(t, err, errInjected) + assert.False(t, known, "a node whose records cannot be read is not a node with no instances") + assert.Nil(t, vms) + }) + + t.Run("terminated write and delete", func(t *testing.T) { + f.setFail("Get", true) + f.setFail("Delete", true) + t.Cleanup(func() { f.setFail("Get", false); f.setFail("Delete", false) }) + + require.ErrorIs(t, m.WriteTerminatedInstance("i-term", &vm.VM{ID: "i-term"}), errInjected) + require.ErrorIs(t, m.DeleteTerminatedInstance("i-term"), errInjected) + }) +} diff --git a/spinifex/daemon/local_state_test.go b/spinifex/daemon/local_state_test.go index cdcf59593..442e9d7a8 100644 --- a/spinifex/daemon/local_state_test.go +++ b/spinifex/daemon/local_state_test.go @@ -136,3 +136,37 @@ func TestReadLocalState_NilVMSMapInitialized(t *testing.T) { require.NotNil(t, state) assert.NotNil(t, state.VMS) } + +func TestWriteLocalState_Failures(t *testing.T) { + t.Run("parent is a file", func(t *testing.T) { + parent := filepath.Join(t.TempDir(), "file") + require.NoError(t, os.WriteFile(parent, nil, 0o600)) + + err := writeLocalState(filepath.Join(parent, "instance-state.json"), map[string]*vm.VM{}) + assert.ErrorContains(t, err, "mkdir") + }) + + t.Run("tmp path is a directory", func(t *testing.T) { + path := filepath.Join(t.TempDir(), "instance-state.json") + require.NoError(t, os.Mkdir(path+".tmp", 0o750)) + + assert.ErrorContains(t, writeLocalState(path, map[string]*vm.VM{}), "open tmp") + _, err := os.Stat(path) + assert.ErrorIs(t, err, os.ErrNotExist) + }) + + t.Run("destination is a non-empty directory", func(t *testing.T) { + path := filepath.Join(t.TempDir(), "instance-state.json") + require.NoError(t, os.MkdirAll(filepath.Join(path, "occupied"), 0o750)) + + assert.ErrorContains(t, writeLocalState(path, map[string]*vm.VM{}), "rename") + _, err := os.Stat(path + ".tmp") + assert.ErrorIs(t, err, os.ErrNotExist, "a failed rename must not leave the tmp file behind") + }) +} + +func TestReadLocalState_Unreadable(t *testing.T) { + state, err := ReadLocalState(t.TempDir()) + assert.ErrorContains(t, err, "read local state") + assert.Nil(t, state, "an unreadable file is not a fresh install") +} diff --git a/spinifex/daemon/main_test.go b/spinifex/daemon/main_test.go index cd725ec0c..544ca453b 100644 --- a/spinifex/daemon/main_test.go +++ b/spinifex/daemon/main_test.go @@ -25,6 +25,10 @@ func TestMain(m *testing.M) { // refuse to start and every daemon-constructing test would fail. 4 keeps the // default reserve intact with 2 schedulable cores — enough for these tests. os.Setenv("SPINIFEX_HOST_VCPU", "4") + // Admission otherwise also clamps on the host's live MemAvailable, which a + // loaded box running tests in parallel can drop below the reserve. The gate + // has its own tests that inject a reader. + os.Setenv("SPINIFEX_ADMISSION_LIVE_MEM", "0") // Start a plain NATS server (no JetStream) ns, err := server.NewServer(&server.Options{ diff --git a/spinifex/daemon/shutdown_coverage_test.go b/spinifex/daemon/shutdown_coverage_test.go new file mode 100644 index 000000000..8e9c036b0 --- /dev/null +++ b/spinifex/daemon/shutdown_coverage_test.go @@ -0,0 +1,219 @@ +package daemon + +import ( + "encoding/json" + "errors" + hostprocess "github.com/mulgadc/spinifex/spinifex/runtime/host/process" + "os" + "path/filepath" + "syscall" + "testing" + "time" + + "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + "github.com/nats-io/nats.go" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// deadPID is above the default pid_max, so it names no process. +const deadPID = 1 << 30 + +// shutdownPhaseReply sends payload to handler over NATS and returns the ACK it +// answered with and the outcome it reported. +func shutdownPhaseReply(t *testing.T, handler func(*nats.Msg) string, payload []byte) (ShutdownACK, string) { + t.Helper() + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + t.Cleanup(nc.Close) + + outcome := make(chan string, 1) + subject := nats.NewInbox() + sub, err := nc.Subscribe(subject, func(msg *nats.Msg) { outcome <- handler(msg) }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + + reply, err := nc.Request(subject, payload, 5*time.Second) + require.NoError(t, err) + + var ack ShutdownACK + require.NoError(t, json.Unmarshal(reply.Data, &ack)) + return ack, <-outcome +} + +// stubNBDKitProcs makes every pid look like a live nbdkit and records which +// were signalled, so a STORAGE phase can never reach a real process. +func stubNBDKitProcs(t *testing.T, signalErr error) *[]int { + t.Helper() + origComm, origSignal := procComm, signalProcess + t.Cleanup(func() { procComm, signalProcess = origComm, origSignal }) + + var signalled []int + procComm = func(int) (string, error) { return "nbdkit", nil } + signalProcess = func(pid int, _ syscall.Signal) error { + signalled = append(signalled, pid) + return signalErr + } + return &signalled +} + +// shutdownTestDaemon is the plain daemon the phase handlers need: a node name +// and a config whose pid directory is private to the test. +func shutdownTestDaemon(t *testing.T, services ...string) (*Daemon, string) { + t.Helper() + d := &Daemon{node: "node-1", config: &config.Config{Services: services}} + return d, configurePidDir(t, d) +} + +func TestShutdownMalformedPayloads(t *testing.T) { + d := &Daemon{node: "node-1", config: &config.Config{}} + + for phase, handler := range map[string]func(*nats.Msg) string{ + "storage": d.handleShutdownStorage, + "persist": d.handleShutdownPersist, + "infra": d.handleShutdownInfra, + } { + t.Run(phase, func(t *testing.T) { + ack, outcome := shutdownPhaseReply(t, handler, []byte("{")) + assert.Equal(t, outcomeError, outcome) + assert.Equal(t, phase, ack.Phase) + assert.Equal(t, "node-1", ack.Node) + assert.NotEmpty(t, ack.Error, "the coordinator has to be told why the phase did not run") + assert.Empty(t, ack.Stopped) + }) + } + + t.Run("an ACK that cannot be sent is logged", func(t *testing.T) { + logs := captureSlogForTest(t) + assert.Equal(t, outcomeError, d.handleShutdownPersist(noReplyMsg("shutdown.persist", []byte("{")))) + assert.Contains(t, logs.String(), "Failed to respond with shutdown ACK") + }) +} + +func TestHandleShutdownStorage(t *testing.T) { + t.Run("a viperblock already gone is not reported stopped", func(t *testing.T) { + runtimeDir := t.TempDir() + t.Setenv("XDG_RUNTIME_DIR", runtimeDir) + signalled := stubNBDKitProcs(t, nil) + require.NoError(t, os.WriteFile(filepath.Join(runtimeDir, "nbdkit-vol-a.pid"), []byte("4242"), 0o600)) + + d, pidDir := shutdownTestDaemon(t, "viperblock") + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "viperblock", deadPID)) + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownStorage, []byte(`{"phase":"storage"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Equal(t, "storage", ack.Phase) + assert.Empty(t, ack.Error) + assert.Empty(t, ack.Stopped, "a stop that failed must not be reported as one") + assert.NoFileExists(t, filepath.Join(pidDir, "viperblock.pid"), "the stale pid file is cleared") + assert.Equal(t, []int{4242}, *signalled, "this node's nbdkit backends are swept from its runtime dir") + }) + + t.Run("an unconfigured viperblock is left alone", func(t *testing.T) { + t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) + signalled := stubNBDKitProcs(t, nil) + + d, pidDir := shutdownTestDaemon(t, "daemon") + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "viperblock", deadPID)) + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownStorage, []byte(`{"phase":"storage"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Empty(t, ack.Stopped) + assert.FileExists(t, filepath.Join(pidDir, "viperblock.pid")) + assert.Empty(t, *signalled) + }) +} + +func TestHandleShutdownPersist(t *testing.T) { + t.Run("a predastore already gone is not reported stopped", func(t *testing.T) { + d, pidDir := shutdownTestDaemon(t, "predastore") + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "predastore", deadPID)) + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownPersist, []byte(`{"phase":"persist"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Equal(t, "persist", ack.Phase) + assert.Empty(t, ack.Error) + assert.Empty(t, ack.Stopped) + assert.NoFileExists(t, filepath.Join(pidDir, "predastore.pid")) + }) + + t.Run("an unconfigured predastore is left alone", func(t *testing.T) { + d, pidDir := shutdownTestDaemon(t, "daemon") + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "predastore", deadPID)) + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownPersist, []byte(`{"phase":"persist"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Empty(t, ack.Stopped) + assert.FileExists(t, filepath.Join(pidDir, "predastore.pid")) + }) +} + +// A service whose process is already gone still lets GATE complete: the daemon +// stops taking work either way, and only real stops are reported. +func TestHandleShutdownGate_DeadServices(t *testing.T) { + d, pidDir := shutdownTestDaemon(t, "ui", "vpcd") + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "spinifex-ui", deadPID)) + require.NoError(t, hostprocess.WritePidFileTo(pidDir, "vpcd", deadPID)) + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownGate, []byte(`{"phase":"gate"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Empty(t, ack.Stopped) + assert.True(t, d.shuttingDown.Load()) +} + +// Neither the marker nor the local state write gates the ACK: by DRAIN the +// guests are already stopped, and refusing to advance would only strand them. +func TestHandleShutdownDrain_MarkerAndStateErrors(t *testing.T) { + logs := captureSlogForTest(t) + d := createTestDaemon(t, sharedNATSURL) + d.jsManager = &JetStreamManager{} + + blocker := filepath.Join(t.TempDir(), "file") + require.NoError(t, os.WriteFile(blocker, nil, 0o600)) + d.config.DataDir = filepath.Join(blocker, "data") + + ack, outcome := shutdownPhaseReply(t, d.handleShutdownDrain, []byte(`{"phase":"drain"}`)) + assert.Equal(t, outcomeSuccess, outcome) + assert.Equal(t, "drain", ack.Phase) + assert.Empty(t, ack.Error) + assert.Contains(t, logs.String(), "Failed to write shutdown marker during DRAIN") + assert.Contains(t, logs.String(), "Failed to write state during DRAIN") +} + +func TestCleanupOrphanNBDKit_Failures(t *testing.T) { + t.Run("an unlistable runtime dir signals nothing", func(t *testing.T) { + logs := captureSlogForTest(t) + signalled := stubNBDKitProcs(t, nil) + + cleanupOrphanNBDKit(filepath.Join(t.TempDir(), "[")) + assert.Empty(t, *signalled) + assert.Contains(t, logs.String(), "cannot list pid files") + }) + + t.Run("a backend that cannot be signalled keeps its pid file", func(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "nbdkit-vol-stuck.pid") + require.NoError(t, os.WriteFile(path, []byte("5151"), 0o600)) + signalled := stubNBDKitProcs(t, errors.New("operation not permitted")) + + cleanupOrphanNBDKit(dir) + assert.Equal(t, []int{5151}, *signalled) + assert.FileExists(t, path, "the backend may still be running, so its pid file is the only handle left on it") + }) + + t.Run("an unreadable pid file that cannot be removed is skipped", func(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "nbdkit-vol-dir.pid") + require.NoError(t, os.MkdirAll(filepath.Join(path, "child"), 0o750)) + signalled := stubNBDKitProcs(t, nil) + + cleanupOrphanNBDKit(dir) + assert.Empty(t, *signalled) + assert.DirExists(t, path) + }) +} + +func TestPidDirEmpty(t *testing.T) { + assert.Empty(t, (&Daemon{config: &config.Config{}}).pidDir(), "no base dir means no pid dir to look in") + assert.Equal(t, "/data/logs", (&Daemon{config: &config.Config{BaseDir: "/data/spinifex/"}}).pidDir()) +} diff --git a/spinifex/daemon/vm_adapters_coverage_test.go b/spinifex/daemon/vm_adapters_coverage_test.go new file mode 100644 index 000000000..8fedb1581 --- /dev/null +++ b/spinifex/daemon/vm_adapters_coverage_test.go @@ -0,0 +1,798 @@ +package daemon + +import ( + "context" + "encoding/json" + "fmt" + viperblocklegacyv1 "github.com/mulgadc/spinifex/contracts/viperblockd/legacy/v1" + "net/netip" + "os" + "path/filepath" + "slices" + "sync" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/mulgadc/spinifex/internal/testkit" + "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + ec2eip "github.com/mulgadc/spinifex/spinifex/domains/ec2/eip" + ec2placementgroup "github.com/mulgadc/spinifex/spinifex/domains/ec2/placementgroup" + ec2spotinstance "github.com/mulgadc/spinifex/spinifex/domains/ec2/spotinstance" + ec2volume "github.com/mulgadc/spinifex/spinifex/domains/ec2/volume" + ec2vpc "github.com/mulgadc/spinifex/spinifex/domains/ec2/vpc" + "github.com/mulgadc/spinifex/spinifex/domains/network/external/dhcp" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/mulgadc/spinifex/spinifex/foundation/state/clustersize" + "github.com/mulgadc/spinifex/spinifex/providers/objectstore" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/gpu" + "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" + "github.com/mulgadc/spinifex/spinifex/services/viperblockd/vbwire" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// uniqueAdapterID returns an ID no other test in the binary uses, for keys +// written to the shared JetStream buckets. +func uniqueAdapterID(prefix string) string { + return fmt.Sprintf("%s-%d", prefix, time.Now().UnixNano()) +} + +// connectAdapterTestNATS opens a connection to url that closes with the test. +func connectAdapterTestNATS(t *testing.T, url string) *nats.Conn { + t.Helper() + clustersize.DeclareForTest(t, 1) + nc, err := nats.Connect(url) + require.NoError(t, err) + t.Cleanup(nc.Close) + return nc +} + +// closedAdapterTestConn returns a connection that is already closed, so every +// request and subscribe on it fails immediately. +func closedAdapterTestConn(t *testing.T) *nats.Conn { + t.Helper() + nc, err := nats.Connect(sharedNATSURL) + require.NoError(t, err) + nc.Close() + return nc +} + +// respondJSON subscribes subject on nc and answers every request with reply. +func respondJSON(t *testing.T, nc *nats.Conn, subject string, reply any) { + t.Helper() + data, err := json.Marshal(reply) + require.NoError(t, err) + sub, err := nc.Subscribe(subject, func(msg *nats.Msg) { _ = msg.Respond(data) }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) +} + +// --- stateStoreAdapter --- + +func TestStateStoreAdapter_DelegatesToJetStream(t *testing.T) { + nc := connectAdapterTestNATS(t, sharedJSNATSURL) + jsm, err := NewJetStreamManager(nc) + require.NoError(t, err) + require.NoError(t, jsm.InitKVBucket()) + require.NoError(t, jsm.InitTerminatedInstanceBucket()) + + var persistedNode string + adapter := newStateStoreAdapter(jsm, func(nodeID string, _ map[string]*vm.VM) error { + persistedNode = nodeID + return nil + }) + + t.Run("running set goes through persist", func(t *testing.T) { + require.NoError(t, adapter.SaveRunningState("node-persist", map[string]*vm.VM{})) + assert.Equal(t, "node-persist", persistedNode) + + vms, found, err := adapter.LoadRunningState(uniqueAdapterID("node-none")) + require.NoError(t, err) + assert.False(t, found, "a node that never wrote state has none") + assert.Empty(t, vms) + }) + + t.Run("stopped instance lifecycle", func(t *testing.T) { + id := uniqueAdapterID("i-stopped") + t.Cleanup(func() { _ = jsm.DeleteStoppedInstance(id) }) + + require.NoError(t, adapter.WriteStoppedInstance(id, &vm.VM{ID: id, InstanceType: "t3.nano"})) + + got, err := adapter.LoadStoppedInstance(id) + require.NoError(t, err) + require.NotNil(t, got) + assert.Equal(t, "t3.nano", got.InstanceType) + + updated, err := adapter.UpdateStoppedInstance(id, func(v *vm.VM) { v.InstanceType = "t3.micro" }) + require.NoError(t, err) + assert.Equal(t, "t3.micro", updated.InstanceType) + + stopped, err := adapter.ListStoppedInstances() + require.NoError(t, err) + assert.True(t, slices.ContainsFunc(stopped, func(v *vm.VM) bool { return v.ID == id })) + + require.NoError(t, adapter.DeleteStoppedInstance(id)) + got, err = adapter.LoadStoppedInstance(id) + require.NoError(t, err) + assert.Nil(t, got, "a deleted stopped instance is gone") + }) + + t.Run("a stopped instance is claimed once", func(t *testing.T) { + id := uniqueAdapterID("i-claim") + t.Cleanup(func() { _ = jsm.DeleteStoppedInstance(id) }) + require.NoError(t, adapter.WriteStoppedInstance(id, &vm.VM{ID: id, InstanceType: "t3.nano"})) + + claimed, err := adapter.ClaimStoppedInstance(id) + require.NoError(t, err) + assert.Equal(t, id, claimed.ID) + + _, err = adapter.ClaimStoppedInstance(id) + assert.ErrorIs(t, err, vm.ErrStoppedInstanceClaimed) + }) + + t.Run("terminated instance lifecycle", func(t *testing.T) { + id := uniqueAdapterID("i-term") + require.NoError(t, adapter.WriteTerminatedInstance(id, &vm.VM{ID: id, InstanceType: "t3.nano"})) + + updated, err := adapter.UpdateTerminatedInstance(id, func(v *vm.VM) { v.InstanceType = "t3.small" }) + require.NoError(t, err) + assert.Equal(t, "t3.small", updated.InstanceType) + + hasID := func(v *vm.VM) bool { return v.ID == id } + terminated, err := adapter.ListTerminatedInstances() + require.NoError(t, err) + assert.True(t, slices.ContainsFunc(terminated, hasID)) + + require.NoError(t, adapter.DeleteTerminatedInstance(id)) + terminated, err = adapter.ListTerminatedInstances() + require.NoError(t, err) + assert.False(t, slices.ContainsFunc(terminated, hasID)) + }) +} + +// --- consumeCleanShutdownMarker --- + +func TestConsumeCleanShutdownMarker(t *testing.T) { + assert.False(t, (&Daemon{}).consumeCleanShutdownMarker()(), + "without JetStream there is no marker to trust") + + nc := connectAdapterTestNATS(t, sharedJSNATSURL) + jsm, err := NewJetStreamManager(nc) + require.NoError(t, err) + require.NoError(t, jsm.InitClusterStateBucket()) + + node := uniqueAdapterID("node-marker") + d := &Daemon{node: node, jsManager: jsm} + consume := d.consumeCleanShutdownMarker() + + assert.False(t, consume(), "no marker means the shutdown was not clean") + + require.NoError(t, jsm.WriteShutdownMarker(node)) + assert.True(t, consume(), "a recorded clean shutdown is trusted") + + present, err := jsm.ReadShutdownMarker(node) + require.NoError(t, err) + assert.False(t, present, "the marker is consumed so a later crash is not mistaken for a clean stop") + assert.False(t, consume()) +} + +func TestBuildVMManagerDeps_BackingStoreReady(t *testing.T) { + d := &Daemon{config: &config.Config{}, vmMgr: vm.NewManager()} + assert.False(t, d.buildVMManagerDeps().BackingStoreReady(), + "no NATS connection means viperblock is unreachable") + + d.natsConn = connectAdapterTestNATS(t, sharedJSNATSURL) + assert.True(t, d.buildVMManagerDeps().BackingStoreReady(), + "no predastore configured and JetStream answering is ready") +} + +// --- volumeMounterAdapter --- + +func TestVolumeMounterAdapter_Mount_ClosedConnIsNotRetryable(t *testing.T) { + adapter := newVolumeMounterAdapter(closedAdapterTestConn(t), "node-closed", nil) + instance := &vm.VM{ID: "i-mount-closed"} + instance.EBSRequests.Requests = []viperblocklegacyv1.EBSRequest{{Name: "vol-closed"}} + + err := adapter.Mount(t.Context(), instance) + require.ErrorIs(t, err, nats.ErrConnectionClosed) + assert.NotErrorIs(t, err, vm.ErrMountRetryable, + "only a missing responder means viperblockd is still starting") +} + +// recordingVolumeState records UpdateVolumeState calls and returns err. +type recordingVolumeState struct { + err error + updated []string +} + +func (r *recordingVolumeState) UpdateVolumeState(_, volumeID, state, _, _ string) error { + r.updated = append(r.updated, volumeID+"="+state) + return r.err +} + +func TestVolumeMounterAdapter_Unmount_Errors(t *testing.T) { + nc := connectAdapterTestNATS(t, sharedNATSURL) + + t.Run("no responder fails the seal and leaves the volume", func(t *testing.T) { + volState := &recordingVolumeState{} + adapter := newVolumeMounterAdapter(nc, uniqueAdapterID("node-unmount"), volState) + instance := &vm.VM{ID: "i-unmount-none"} + instance.EBSRequests.Requests = []viperblocklegacyv1.EBSRequest{{Name: "vol-a"}, {Name: "vol-b"}} + + err := adapter.Unmount(t.Context(), instance) + require.ErrorIs(t, err, nats.ErrNoResponders) + assert.Contains(t, err.Error(), "vol-a") + assert.Contains(t, err.Error(), "vol-b", "every volume is attempted") + assert.Empty(t, volState.updated, "an unsealed volume must not go available") + }) + + t.Run("state update failure does not fail the unmount", func(t *testing.T) { + node := uniqueAdapterID("node-unmount") + respondJSON(t, nc, "ebs."+node+".unmount", viperblocklegacyv1.EBSUnMountResponse{Volume: "vol-a"}) + volState := &recordingVolumeState{err: errInjected} + adapter := newVolumeMounterAdapter(nc, node, volState) + instance := &vm.VM{ID: "i-unmount-state"} + instance.EBSRequests.Requests = []viperblocklegacyv1.EBSRequest{{Name: "vol-a"}} + + require.NoError(t, adapter.Unmount(t.Context(), instance)) + assert.Equal(t, []string{"vol-a=available"}, volState.updated) + }) +} + +func TestVolumeMounterAdapter_Abandon(t *testing.T) { + nc := connectAdapterTestNATS(t, sharedNATSURL) + + // abandonResponder answers per volume so one request can mix outcomes. + abandonResponder := func(t *testing.T, node string, replies map[string][]byte) *[]vbwire.VolumeAbandonRequest { + t.Helper() + var ( + mu sync.Mutex + seen []vbwire.VolumeAbandonRequest + ) + sub, err := nc.Subscribe(vbwire.VolumeAbandonSubject(node), func(msg *nats.Msg) { + var req vbwire.VolumeAbandonRequest + _ = json.Unmarshal(msg.Data, &req) + mu.Lock() + seen = append(seen, req) + mu.Unlock() + _ = msg.Respond(replies[req.Volume]) + }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + return &seen + } + instanceWith := func(volumes ...string) *vm.VM { + v := &vm.VM{ID: "i-abandon", AccountID: testAccountID} + for _, name := range volumes { + v.EBSRequests.Requests = append(v.EBSRequests.Requests, viperblocklegacyv1.EBSRequest{Name: name}) + } + return v + } + + t.Run("no responder", func(t *testing.T) { + adapter := newVolumeMounterAdapter(nc, uniqueAdapterID("node-abandon"), nil) + err := adapter.Abandon(t.Context(), instanceWith("vol-1"), "superseded") + assert.ErrorIs(t, err, nats.ErrNoResponders) + }) + + t.Run("outcomes per volume", func(t *testing.T) { + node := uniqueAdapterID("node-abandon") + seen := abandonResponder(t, node, map[string][]byte{ + "vol-abandoned": []byte(`{"abandoned":true}`), + "vol-absent": []byte(`{"abandoned":false}`), + }) + adapter := newVolumeMounterAdapter(nc, node, nil) + + require.NoError(t, adapter.Abandon(t.Context(), instanceWith("vol-abandoned", "vol-absent"), "superseded"), + "a volume not exported here is the ordinary case, not a failure") + require.Len(t, *seen, 2) + assert.Equal(t, vbwire.VolumeAbandonRequest{Volume: "vol-abandoned", Reason: "superseded"}, (*seen)[0]) + }) + + t.Run("failures are joined and do not stop the sweep", func(t *testing.T) { + node := uniqueAdapterID("node-abandon") + seen := abandonResponder(t, node, map[string][]byte{ + "vol-garbled": []byte(`not json`), + "vol-refused": []byte(`{"error":"export busy"}`), + "vol-ok": []byte(`{"abandoned":true}`), + }) + adapter := newVolumeMounterAdapter(nc, node, nil) + + err := adapter.Abandon(t.Context(), instanceWith("vol-garbled", "vol-refused", "vol-ok"), "fenced") + require.Error(t, err) + assert.Contains(t, err.Error(), "unmarshal abandon response for vol-garbled") + assert.Contains(t, err.Error(), "abandon vol-refused: export busy") + assert.NotContains(t, err.Error(), "vol-ok") + assert.Len(t, *seen, 3, "every volume is attempted") + }) +} + +// --- resourceControllerAdapter --- + +func TestResourceControllerAdapter_UnknownAndKnownType(t *testing.T) { + rm := newReservationTestRM() + a := newResourceControllerAdapter(rm) + + t.Run("unknown type", func(t *testing.T) { + require.ErrorContains(t, a.Allocate("zz9.none"), "instance type zz9.none not found") + assert.Zero(t, a.CanAllocate("zz9.none", 4)) + a.Deallocate("zz9.none") + a.ReleaseToReservation("cr-none", "zz9.none") + assert.Zero(t, rm.allocatedVCPU, "an unknown type must not move the books") + }) + + t.Run("known type", func(t *testing.T) { + assert.Equal(t, 4, a.CanAllocate("t3.micro", 10)) + require.NoError(t, a.Allocate("t3.micro")) + assert.Equal(t, 2, rm.allocatedVCPU) + assert.Equal(t, 3, a.CanAllocate("t3.micro", 10)) + + a.Deallocate("t3.micro") + assert.Zero(t, rm.allocatedVCPU) + + require.NoError(t, a.Allocate("t3.micro")) + a.ReleaseToReservation("cr-gone", "t3.micro") + assert.Zero(t, rm.allocatedVCPU, "a slot from a vanished reservation returns to the general pool") + }) +} + +// --- per-instance subscription hooks --- + +func TestOnInstanceRecoveringHook(t *testing.T) { + t.Run("subscribes the command topic once", func(t *testing.T) { + d, _ := newHookTestDaemon(t) + hook := d.onInstanceRecoveringHook() + instance := &vm.VM{ID: "i-recovering"} + + hook(instance) + first, ok := d.natsSubscriptions[instance.ID] + require.True(t, ok) + assert.Equal(t, "ec2.cmd.i-recovering", first.Subject) + + hook(instance) + assert.Same(t, first, d.natsSubscriptions[instance.ID], "an existing subscription is kept, not replaced") + }) + + t.Run("subscribe failure leaves no entry", func(t *testing.T) { + d := &Daemon{natsConn: closedAdapterTestConn(t), natsSubscriptions: map[string]*nats.Subscription{}} + d.onInstanceRecoveringHook()(&vm.VM{ID: "i-recovering-closed"}) + assert.Empty(t, d.natsSubscriptions) + }) +} + +func TestOnInstanceUpHook_SubscribeFailureReturnsError(t *testing.T) { + d := &Daemon{natsConn: closedAdapterTestConn(t), natsSubscriptions: map[string]*nats.Subscription{}} + + err := d.onInstanceUpHook()(&vm.VM{ID: "i-up-closed"}) + require.ErrorIs(t, err, nats.ErrConnectionClosed) + assert.Empty(t, d.natsSubscriptions, "no topic may stay bound when the set fails") +} + +// natEIPResolver answers the associated-EIP lookup the up hook makes. +type natEIPResolver struct { + ec2eip.EIPService + + ip string +} + +func (r *natEIPResolver) AssociatedPublicIPForInstance(context.Context, string, string) (string, bool) { + return r.ip, r.ip != "" +} + +// recordNATEvents answers subject with success and records each event whose +// external IP is externalIP. +func recordNATEvents(t *testing.T, nc *nats.Conn, subject, externalIP string) func() []map[string]string { + t.Helper() + var ( + mu sync.Mutex + events []map[string]string + ) + sub, err := nc.Subscribe(subject, func(msg *nats.Msg) { + var evt map[string]string + _ = json.Unmarshal(msg.Data, &evt) + if evt["external_ip"] == externalIP { + mu.Lock() + events = append(events, evt) + mu.Unlock() + } + _ = msg.Respond([]byte(`{"success":true}`)) + }) + require.NoError(t, err) + t.Cleanup(func() { _ = sub.Unsubscribe() }) + return func() []map[string]string { + mu.Lock() + defer mu.Unlock() + return slices.Clone(events) + } +} + +func TestOnInstanceUpHook_RepublishesNAT(t *testing.T) { + d, nc := newHookTestDaemon(t) + upInstance := func(id, publicIP string) *vm.VM { + return &vm.VM{ + ID: id, + ENIId: "eni-" + id, + ENIMac: "02:00:00:00:00:01", + PublicIP: publicIP, + Instance: &ec2.Instance{VpcId: aws.String("vpc-nat"), PrivateIpAddress: aws.String("10.0.1.5")}, + } + } + + t.Run("elastic IP resolved from the EIP store", func(t *testing.T) { + events := recordNATEvents(t, nc, "vpc.add-nat", "198.51.100.77") + d.eipService = &natEIPResolver{ip: "198.51.100.77"} + + require.NoError(t, d.onInstanceUpHook()(upInstance("i-nat-eip", ""))) + got := events() + require.Len(t, got, 1, "the EIP's NAT must be re-announced after a reboot") + assert.Equal(t, "vpc-nat", got[0]["vpc_id"]) + assert.Equal(t, "10.0.1.5", got[0]["logical_ip"]) + assert.Equal(t, "port-eni-i-nat-eip", got[0]["port_name"]) + assert.Equal(t, "02:00:00:00:00:01", got[0]["mac"]) + }) + + t.Run("auto-assigned IP wins over the EIP store", func(t *testing.T) { + events := recordNATEvents(t, nc, "vpc.add-nat", "198.51.100.78") + d.eipService = &natEIPResolver{ip: "198.51.100.200"} + + require.NoError(t, d.onInstanceUpHook()(upInstance("i-nat-auto", "198.51.100.78"))) + assert.Len(t, events(), 1) + }) +} + +func TestOnInstanceUpHook_ReclaimsMIGSlice(t *testing.T) { + mdev := filepath.Join(t.TempDir(), "mdev-uuid") + require.NoError(t, os.WriteFile(mdev, nil, 0o600)) + + mgr := gpu.NewManager(nil) + mgr.AddMIGInstances(gpu.GPUDevice{PCIAddress: "0000:41:00.0"}, []gpu.MIGInstance{{MdevPath: mdev}}) + d, _ := newHookTestDaemon(t) + d.gpuManager = mgr + + instance := &vm.VM{ + ID: "i-mig", + GPUAttachments: []gpu.GPUAttachment{ + {MdevPath: mdev}, + {MdevPath: "/nonexistent/mdev"}, + }, + } + require.NoError(t, d.onInstanceUpHook()(instance), "a slice that cannot be re-claimed only warns") + assert.Zero(t, mgr.Available(), "the surviving slice is claimed again after a restart") + + require.NoError(t, newInstanceCleanerAdapter(d).ReleaseGPU(instance)) + assert.Equal(t, 1, mgr.Available(), "release returns the slice to the pool") +} + +func TestOnInstanceDownHook_UnsubscribeErrors(t *testing.T) { + d, nc := newHookTestDaemon(t) + id := "i-down-stale" + keys := []string{id, id + ".console", id + ".password", "system.TerminateInstance." + id} + for _, key := range keys { + sub, err := nc.SubscribeSync("test.stale." + key) + require.NoError(t, err) + require.NoError(t, sub.Unsubscribe()) + d.natsSubscriptions[key] = sub + } + + d.onInstanceDownHook()(id) + + assert.Empty(t, d.natsSubscriptions, "a failed unsubscribe still drops the entry") +} + +// --- instanceCleanerAdapter --- + +// getFailingStore fails every metadata read with a generic error. +type getFailingStore struct { + objectstore.ObjectStore +} + +func (getFailingStore) GetObject(context.Context, *s3.GetObjectInput) (*s3.GetObjectOutput, error) { + return nil, errInjected +} + +func TestInstanceCleaner_DeleteVolumes_Errors(t *testing.T) { + instanceWith := func(reqs ...viperblocklegacyv1.EBSRequest) *vm.VM { + v := &vm.VM{ID: "i-delvol", AccountID: testAccountID} + v.EBSRequests.Requests = reqs + return v + } + + t.Run("EFI delete with no responder", func(t *testing.T) { + a := newInstanceCleanerAdapter(&Daemon{natsConn: connectAdapterTestNATS(t, sharedNATSURL)}) + err := a.DeleteVolumes(instanceWith(viperblocklegacyv1.EBSRequest{Name: "vol-efi-" + uniqueAdapterID("x"), EFI: true})) + assert.ErrorIs(t, err, nats.ErrNoResponders) + }) + + t.Run("no volume service skips both kinds", func(t *testing.T) { + a := newInstanceCleanerAdapter(&Daemon{}) + require.NoError(t, a.DeleteVolumes(instanceWith( + viperblocklegacyv1.EBSRequest{Name: "vol-keep", DeleteOnTermination: false}, + viperblocklegacyv1.EBSRequest{Name: "vol-delete", DeleteOnTermination: true}, + ))) + }) + + t.Run("volume service errors are reported", func(t *testing.T) { + svc := ec2volume.NewVolumeServiceImplWithStore(&config.Config{}, getFailingStore{objectstore.NewMemoryObjectStore()}, nil) + a := newInstanceCleanerAdapter(&Daemon{volumeService: svc}) + + err := a.DeleteVolumes(instanceWith(viperblocklegacyv1.EBSRequest{Name: "vol-keep", DeleteOnTermination: false})) + require.ErrorIs(t, err, errInjected, "a failed detach must surface") + + err = a.DeleteVolumes(instanceWith(viperblocklegacyv1.EBSRequest{Name: "vol-delete", DeleteOnTermination: true})) + require.ErrorIs(t, err, errInjected, "a failed delete must surface") + }) +} + +// cleanupFailingPlumber fails CleanupTap and records the tap it was given. +type cleanupFailingPlumber struct { + recordingPlumber +} + +func (p *cleanupFailingPlumber) CleanupTap(name string) error { + p.cleanedTaps = append(p.cleanedTaps, name) + return errInjected +} + +func TestInstanceCleaner_CleanupMgmtNetwork_TapFailureStillReleases(t *testing.T) { + flushed, _ := captureNeighHooks(t) + alloc, err := NewMgmtIPAllocator("10.15.9.1") + require.NoError(t, err) + const ip = "10.15.9.20" + alloc.Claim("i-tapfail", ip) + require.Equal(t, 1, alloc.AllocatedCount()) + + plumber := &cleanupFailingPlumber{} + d := &Daemon{networkPlumber: plumber, mgmtIPAllocator: alloc, mgmtBridgeIP: "10.15.9.1"} + newInstanceCleanerAdapter(d).CleanupMgmtNetwork(&vm.VM{ID: "i-tapfail", MgmtIP: ip}) + + assert.Len(t, plumber.cleanedTaps, 1) + assert.Len(t, *flushed, 1, "the neighbour entry is invalidated even when the tap teardown fails") + assert.Zero(t, alloc.AllocatedCount(), "the address goes back to the pool") +} + +func TestInstanceCleaner_ReleasePublicIP(t *testing.T) { + const pool = "wan-fake" + newCleaner := func(t *testing.T, releaseErr error, nc *nats.Conn) (*instanceCleanerAdapter, *fakeAllocator) { + t.Helper() + ipam := ec2vpc.NewExternalIPAMWithKV(nil, nil) + alloc := &fakeAllocator{releaseErr: releaseErr} + require.NoError(t, ipam.InstallAllocator(pool, alloc)) + return newInstanceCleanerAdapter(&Daemon{externalIPAM: ipam, natsConn: nc}), alloc + } + withIP := func(ip string) *vm.VM { + return &vm.VM{ID: "i-pub", ENIId: "eni-pub", PublicIP: ip, PublicIPPool: pool} + } + + t.Run("nothing to release", func(t *testing.T) { + a, alloc := newCleaner(t, nil, nil) + require.NoError(t, a.ReleasePublicIP(&vm.VM{ID: "i-pub", PublicIPPool: pool})) + require.NoError(t, a.ReleasePublicIP(&vm.VM{ID: "i-pub", PublicIP: "203.0.113.5"})) + require.NoError(t, newInstanceCleanerAdapter(&Daemon{}).ReleasePublicIP(withIP("203.0.113.5"))) + assert.Empty(t, alloc.releases) + }) + + t.Run("success tears down NAT and releases", func(t *testing.T) { + nc := connectAdapterTestNATS(t, sharedNATSURL) + events := recordNATEvents(t, nc, "vpc.delete-nat", "203.0.113.6") + a, alloc := newCleaner(t, nil, nc) + inst := withIP("203.0.113.6") + inst.Instance = &ec2.Instance{VpcId: aws.String("vpc-pub"), PrivateIpAddress: aws.String("10.0.0.6")} + + require.NoError(t, a.ReleasePublicIP(inst)) + assert.Equal(t, []netip.Addr{netip.MustParseAddr("203.0.113.6")}, alloc.releases) + got := events() + require.Len(t, got, 1) + assert.Equal(t, "vpc-pub", got[0]["vpc_id"]) + assert.Equal(t, "10.0.0.6", got[0]["logical_ip"]) + assert.Equal(t, "port-eni-pub", got[0]["port_name"]) + }) + + t.Run("untracked lease is terminal success", func(t *testing.T) { + a, alloc := newCleaner(t, fmt.Errorf("release: %w", dhcp.ErrLeaseNotTracked), nil) + require.NoError(t, a.ReleasePublicIP(withIP("203.0.113.7"))) + assert.Len(t, alloc.releases, 1) + }) + + t.Run("release failure is returned", func(t *testing.T) { + a, _ := newCleaner(t, errInjected, nil) + assert.ErrorIs(t, a.ReleasePublicIP(withIP("203.0.113.8")), errInjected) + }) + + t.Run("unparseable address", func(t *testing.T) { + a, alloc := newCleaner(t, nil, nil) + assert.ErrorContains(t, a.ReleasePublicIP(withIP("not-an-ip")), "parse release IP") + assert.Empty(t, alloc.releases) + }) +} + +// adapterVPCFixture is a VPC service on a private JetStream with one ENI. +type adapterVPCFixture struct { + url string + nc *nats.Conn + js jetstream.JetStream + vpc *ec2vpc.VPCServiceImpl + eniID string +} + +func newAdapterVPCFixture(t *testing.T) *adapterVPCFixture { + t.Helper() + ns, nc, js := testutil.StartTestJetStream(t) + testutil.StubVpcdSGResponder(t, nc) + + vpcSvc, err := ec2vpc.NewVPCServiceImplWithNATS(t.Context(), &config.Config{}, nc) + require.NoError(t, err) + vpcOut, err := vpcSvc.CreateVpc(t.Context(), &ec2.CreateVpcInput{CidrBlock: aws.String("10.0.0.0/16")}, testAccountID) + require.NoError(t, err) + subnetOut, err := vpcSvc.CreateSubnet(t.Context(), &ec2.CreateSubnetInput{ + VpcId: vpcOut.Vpc.VpcId, CidrBlock: aws.String("10.0.1.0/24"), + }, testAccountID) + require.NoError(t, err) + eniOut, err := vpcSvc.CreateNetworkInterface(t.Context(), &ec2.CreateNetworkInterfaceInput{ + SubnetId: subnetOut.Subnet.SubnetId, + }, testAccountID) + require.NoError(t, err) + + return &adapterVPCFixture{ + url: ns.ClientURL(), nc: nc, js: js, vpc: vpcSvc, + eniID: *eniOut.NetworkInterface.NetworkInterfaceId, + } +} + +func TestInstanceCleaner_ReleaseAutoAssignedPublicIP(t *testing.T) { + const pool = "wan-auto" + f := newAdapterVPCFixture(t) + + eipKV, err := f.js.CreateKeyValue(t.Context(), jetstream.KeyValueConfig{Bucket: "test-adapter-eips"}) + require.NoError(t, err) + _, err = eipKV.Put(t.Context(), testAccountID+".eipalloc-owned", []byte(`{"eni_id":"eni-eip-owned"}`)) + require.NoError(t, err) + f.vpc.SetExternalIPAM(nil, eipKV) + + newCleaner := func(t *testing.T, releaseErr error) (*instanceCleanerAdapter, *fakeAllocator) { + t.Helper() + ipam := ec2vpc.NewExternalIPAMWithKV(nil, nil) + alloc := &fakeAllocator{releaseErr: releaseErr} + require.NoError(t, ipam.InstallAllocator(pool, alloc)) + return newInstanceCleanerAdapter(&Daemon{externalIPAM: ipam, vpcService: f.vpc}), alloc + } + stopping := func(eniID string) *vm.VM { + return &vm.VM{ID: "i-auto", AccountID: testAccountID, ENIId: eniID, PublicIP: "203.0.113.20", PublicIPPool: pool} + } + + t.Run("nothing to release", func(t *testing.T) { + a, alloc := newCleaner(t, nil) + released, err := a.ReleaseAutoAssignedPublicIP(&vm.VM{ID: "i-auto", PublicIPPool: pool}) + require.NoError(t, err) + assert.False(t, released) + + inst := stopping(f.eniID) + inst.PublicIPAllocID = "eipalloc-launch" + released, err = a.ReleaseAutoAssignedPublicIP(inst) + require.NoError(t, err) + assert.False(t, released, "an address allocated through the EIP service is the customer's") + assert.Empty(t, alloc.releases) + }) + + t.Run("address held by an elastic IP stays", func(t *testing.T) { + a, alloc := newCleaner(t, nil) + released, err := a.ReleaseAutoAssignedPublicIP(stopping("eni-eip-owned")) + require.NoError(t, err) + assert.False(t, released) + assert.Empty(t, alloc.releases) + }) + + t.Run("EIP lookup failure keeps the address", func(t *testing.T) { + failing := newFailingKV(eipKV, "Keys") + f.vpc.SetExternalIPAM(nil, failing) + t.Cleanup(func() { f.vpc.SetExternalIPAM(nil, eipKV) }) + + a, alloc := newCleaner(t, nil) + released, err := a.ReleaseAutoAssignedPublicIP(stopping(f.eniID)) + require.ErrorIs(t, err, errInjected) + assert.False(t, released) + assert.Empty(t, alloc.releases, "an address not proven ours is never released") + }) + + t.Run("release failure", func(t *testing.T) { + a, _ := newCleaner(t, errInjected) + released, err := a.ReleaseAutoAssignedPublicIP(stopping(f.eniID)) + require.ErrorIs(t, err, errInjected) + assert.False(t, released) + }) + + t.Run("missing ENI only warns", func(t *testing.T) { + a, alloc := newCleaner(t, nil) + released, err := a.ReleaseAutoAssignedPublicIP(stopping("eni-vanished")) + require.NoError(t, err) + assert.True(t, released) + assert.Len(t, alloc.releases, 1) + }) + + t.Run("success clears the ENI public IP", func(t *testing.T) { + require.NoError(t, f.vpc.UpdateENIPublicIP(testAccountID, f.eniID, "203.0.113.20", pool)) + a, alloc := newCleaner(t, nil) + + released, err := a.ReleaseAutoAssignedPublicIP(stopping(f.eniID)) + require.NoError(t, err) + assert.True(t, released) + assert.Equal(t, []netip.Addr{netip.MustParseAddr("203.0.113.20")}, alloc.releases) + + rec, err := f.vpc.GetENIRecord(testAccountID, f.eniID) + require.NoError(t, err) + assert.Empty(t, rec.PublicIpAddress, "a stale address would let the reconciler restore the NAT rule") + assert.Empty(t, rec.PublicIpPool) + }) + + t.Run("primary ENI delete failure is returned", func(t *testing.T) { + nc, err := nats.Connect(f.url) + require.NoError(t, err) + vpcSvc, err := ec2vpc.NewVPCServiceImplWithNATS(t.Context(), &config.Config{}, nc) + require.NoError(t, err) + nc.Close() + + a := newInstanceCleanerAdapter(&Daemon{vpcService: vpcSvc}) + err = a.DetachAndDeleteENI(&vm.VM{ID: "i-auto", AccountID: testAccountID, ENIId: f.eniID}) + require.Error(t, err, "a primary ENI that could not be deleted must fail terminate") + }) + + t.Run("spot close failure is returned", func(t *testing.T) { + nc, err := nats.Connect(f.url) + require.NoError(t, err) + spotSvc, err := ec2spotinstance.NewSpotInstanceServiceImplWithNATS(t.Context(), &config.Config{}, nc) + require.NoError(t, err) + + a := newInstanceCleanerAdapter(&Daemon{spotInstanceService: spotSvc}) + require.NoError(t, a.RemoveFromSpotRequest(&vm.VM{ID: "i-auto", AccountID: testAccountID}), + "an instance no spot request names is a no-op") + + nc.Close() + assert.ErrorContains(t, a.RemoveFromSpotRequest(&vm.VM{ID: "i-auto", AccountID: testAccountID}), + awserrors.ErrorServerInternal) + }) +} + +// failingEIPDisassociator fails every disassociation. +type failingEIPDisassociator struct { + ec2eip.EIPService + + calls int +} + +func (s *failingEIPDisassociator) DisassociateByENI(context.Context, string, string) (bool, error) { + s.calls++ + return false, errInjected +} + +func TestInstanceCleaner_DisassociateEIPFailureDoesNotFailTerminate(t *testing.T) { + f := newENIHotPlugFixture(t) + f.vmInst.AccountID = testAccountID + f.vmInst.ENIId = f.eniID + eip := &failingEIPDisassociator{} + f.daemon.eipService = eip + + require.NoError(t, newInstanceCleanerAdapter(f.daemon).DetachAndDeleteENI(f.vmInst)) + assert.Equal(t, 1, eip.calls) +} + +func TestInstanceCleaner_RemoveFromPlacementGroup(t *testing.T) { + inGroup := &vm.VM{ID: "i-pg", AccountID: testAccountID, PlacementGroupName: "pg-spread"} + + require.NoError(t, newInstanceCleanerAdapter(&Daemon{}).RemoveFromPlacementGroup(inGroup), + "no placement group service is a no-op") + + a := newInstanceCleanerAdapter(&Daemon{placementGroupService: &ec2placementgroup.PlacementGroupServiceImpl{}}) + require.NoError(t, a.RemoveFromPlacementGroup(&vm.VM{ID: "i-pg"}), "an ungrouped instance is a no-op") + + assert.EqualError(t, a.RemoveFromPlacementGroup(inGroup), awserrors.ErrorMissingParameter, + "a group member with no node recorded cannot be removed") +} + +func TestInstanceCleaner_DetachAndDeleteENI_NoVPCServiceIsNoOp(t *testing.T) { + a := newInstanceCleanerAdapter(&Daemon{}) + require.NoError(t, a.DetachAndDeleteENI(&vm.VM{ID: "i-novpc", ENIId: "eni-novpc"})) +} diff --git a/spinifex/domains/acm/certfields.go b/spinifex/domains/acm/certfields.go new file mode 100644 index 000000000..be6c36f92 --- /dev/null +++ b/spinifex/domains/acm/certfields.go @@ -0,0 +1,182 @@ +package acm + +import ( + "crypto/x509" + "fmt" + "log/slog" + "math/big" + "strings" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/acm" +) + +// maxSANSummaries is how many names AWS lists in a ListCertificates summary +// before setting HasAdditionalSubjectAlternativeNames. +const maxSANSummaries = 100 + +// formatSerial renders a serial number as ACM does: two lowercase hex digits +// per byte, joined by colons. +func formatSerial(serial *big.Int) string { + return strings.ReplaceAll(fmt.Sprintf("% x", serial.Bytes()), " ", ":") +} + +// signatureAlgorithms are ACM's spellings of the leaf's signature algorithm. +var signatureAlgorithms = map[x509.SignatureAlgorithm]string{ + x509.SHA256WithRSA: "SHA256WITHRSA", + x509.SHA384WithRSA: "SHA384WITHRSA", + x509.SHA512WithRSA: "SHA512WITHRSA", + x509.ECDSAWithSHA256: "SHA256WITHECDSA", + x509.ECDSAWithSHA384: "SHA384WITHECDSA", + x509.ECDSAWithSHA512: "SHA512WITHECDSA", +} + +// keyUsageNames is in x509.KeyUsage bit order, which is the order ACM lists them. +var keyUsageNames = []string{ + acm.KeyUsageNameDigitalSignature, acm.KeyUsageNameNonRepudiation, acm.KeyUsageNameKeyEncipherment, + acm.KeyUsageNameDataEncipherment, acm.KeyUsageNameKeyAgreement, acm.KeyUsageNameCertificateSigning, + acm.KeyUsageNameCrlSigning, acm.KeyUsageNameEncipherOnly, acm.KeyUsageNameDecipherOnly, +} + +var extKeyUsageNames = map[x509.ExtKeyUsage]struct{ name, oid string }{ + x509.ExtKeyUsageAny: {acm.ExtendedKeyUsageNameAny, "2.5.29.37.0"}, + x509.ExtKeyUsageServerAuth: {acm.ExtendedKeyUsageNameTlsWebServerAuthentication, "1.3.6.1.5.5.7.3.1"}, + x509.ExtKeyUsageClientAuth: {acm.ExtendedKeyUsageNameTlsWebClientAuthentication, "1.3.6.1.5.5.7.3.2"}, + x509.ExtKeyUsageCodeSigning: {acm.ExtendedKeyUsageNameCodeSigning, "1.3.6.1.5.5.7.3.3"}, + x509.ExtKeyUsageEmailProtection: {acm.ExtendedKeyUsageNameEmailProtection, "1.3.6.1.5.5.7.3.4"}, + x509.ExtKeyUsageIPSECEndSystem: {acm.ExtendedKeyUsageNameIpsecEndSystem, "1.3.6.1.5.5.7.3.5"}, + x509.ExtKeyUsageIPSECTunnel: {acm.ExtendedKeyUsageNameIpsecTunnel, "1.3.6.1.5.5.7.3.6"}, + x509.ExtKeyUsageIPSECUser: {acm.ExtendedKeyUsageNameIpsecUser, "1.3.6.1.5.5.7.3.7"}, + x509.ExtKeyUsageTimeStamping: {acm.ExtendedKeyUsageNameTimeStamping, "1.3.6.1.5.5.7.3.8"}, + x509.ExtKeyUsageOCSPSigning: {acm.ExtendedKeyUsageNameOcspSigning, "1.3.6.1.5.5.7.3.9"}, +} + +// issuerName is how ACM names the issuer: its O when it has one, else its CN. +func issuerName(leaf *x509.Certificate) string { + if len(leaf.Issuer.Organization) > 0 { + return leaf.Issuer.Organization[0] + } + if leaf.Issuer.CommonName != "" { + return leaf.Issuer.CommonName + } + return leaf.Issuer.String() +} + +// importedSANs is what ACM reports for an imported certificate: the CN, then +// any DNS SANs not already listed. +func importedSANs(leaf *x509.Certificate) []string { + return uniqueDomains(leafDomain(leaf), leaf.DNSNames) +} + +// keyUsages returns ACM's key-usage names, or ANY when the extension is absent. +func keyUsages(leaf *x509.Certificate) []string { + if leaf.KeyUsage == 0 { + return []string{acm.KeyUsageNameAny} + } + var names []string + for i, name := range keyUsageNames { + if leaf.KeyUsage&(1< 0 { + detail.SubjectAlternativeNames = aws.StringSlice(sans) + detail.DomainValidationOptions = make([]*acm.DomainValidation, len(sans)) + for i, d := range sans { + detail.DomainValidationOptions[i] = &acm.DomainValidation{DomainName: aws.String(d)} + } + } + for _, name := range keyUsages(leaf) { + detail.KeyUsages = append(detail.KeyUsages, &acm.KeyUsage{Name: aws.String(name)}) + } + names, oids := extKeyUsages(leaf) + for i := range names { + detail.ExtendedKeyUsages = append(detail.ExtendedKeyUsages, &acm.ExtendedKeyUsage{Name: aws.String(names[i]), OID: aws.String(oids[i])}) + } +} + +// applyLeafSummary fills the ListCertificates summary fields ACM reports for +// an imported certificate, derived on read as in applyLeafDetail. +func applyLeafSummary(sum *acm.CertificateSummary, rec *CertRecord) { + if certTypeOrDefault(rec) != certTypeImported { + return + } + sum.CreatedAt = timePtr(importedCreatedAt(rec)) + leaf := parseStoredLeaf(rec) + if leaf == nil { + return + } + if sans := importedSANs(leaf); len(sans) > 0 { + sum.SubjectAlternativeNameSummaries = aws.StringSlice(sans[:min(len(sans), maxSANSummaries)]) + sum.HasAdditionalSubjectAlternativeNames = aws.Bool(len(sans) > maxSANSummaries) + } + sum.KeyUsages = aws.StringSlice(keyUsages(leaf)) + names, _ := extKeyUsages(leaf) + sum.ExtendedKeyUsages = aws.StringSlice(names) +} diff --git a/spinifex/domains/acm/certfields_test.go b/spinifex/domains/acm/certfields_test.go new file mode 100644 index 000000000..10a6d2e3f --- /dev/null +++ b/spinifex/domains/acm/certfields_test.go @@ -0,0 +1,210 @@ +package acm + +import ( + "context" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/json" + "encoding/pem" + "math/big" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" + "github.com/aws/aws-sdk-go/service/acm" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// awsAuditSerial is the serial of the certificate imported into real ACM in +// the response audit; awsAuditSerialText is how ACM rendered it. +const ( + awsAuditCN = "awsdiff.example.com" + awsAuditSerialHex = "6c42f03e00b6ee54c0740448f8cad7939787c61c" + awsAuditSerialText = "6c:42:f0:3e:00:b6:ee:54:c0:74:04:48:f8:ca:d7:93:97:87:c6:1c" +) + +// genAuditShapedCert builds a certificate shaped like the one the audit +// imported into real ACM (openssl req -x509 -newkey rsa:2048 -subj /CN=...): +// RSA-2048, SHA-256 with RSA, CN only, no SAN, key-usage or EKU extension. +func genAuditShapedCert(t *testing.T) (certPEM, keyPEM []byte) { + t.Helper() + key, err := rsa.GenerateKey(rand.Reader, 2048) + require.NoError(t, err) + serial, ok := new(big.Int).SetString(awsAuditSerialHex, 16) + require.True(t, ok) + tmpl := &x509.Certificate{ + SerialNumber: serial, + Subject: pkix.Name{CommonName: awsAuditCN}, + NotBefore: time.Now().Add(-time.Hour), + NotAfter: time.Now().Add(30 * 24 * time.Hour), + SignatureAlgorithm: x509.SHA256WithRSA, + BasicConstraintsValid: true, + IsCA: true, + } + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &key.PublicKey, key) + require.NoError(t, err) + certPEM = pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: der}) + keyPEM = pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}) + return certPEM, keyPEM +} + +func importCert(t *testing.T, svc *ACMServiceImpl, certPEM, keyPEM []byte) string { + t.Helper() + out, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{Certificate: certPEM, PrivateKey: keyPEM}, testAccountID) + require.NoError(t, err) + return aws.StringValue(out.CertificateArn) +} + +func describeCert(t *testing.T, svc *ACMServiceImpl, certArn string) *acm.CertificateDetail { + t.Helper() + out, err := svc.DescribeCertificate(context.Background(), &acm.DescribeCertificateInput{CertificateArn: aws.String(certArn)}, testAccountID) + require.NoError(t, err) + return out.Certificate +} + +// wireJSON encodes v as the gateway does and decodes it generically, so +// assertions see the members a client receives rather than the Go struct. +func wireJSON(t *testing.T, v any) map[string]any { + t.Helper() + body, err := jsonutil.BuildJSON(v) + require.NoError(t, err) + var m map[string]any + require.NoError(t, json.Unmarshal(body, &m)) + return m +} + +// Expected values are copied from real ACM's DescribeCertificate response for +// the audit's certificate. Export is absent: aws-sdk-go v1 cannot carry it. +func TestDescribeCertificate_ImportedMatchesAWSAuditResponse(t *testing.T) { + svc := setupACMService(t) + certPEM, keyPEM := genAuditShapedCert(t) + d := describeCert(t, svc, importCert(t, svc, certPEM, keyPEM)) + + assert.Equal(t, []string{awsAuditCN}, aws.StringValueSlice(d.SubjectAlternativeNames), + "ACM lists the CN as the only SAN when the certificate has no SAN extension") + assert.Equal(t, awsAuditSerialText, aws.StringValue(d.Serial)) + assert.Equal(t, awsAuditCN, aws.StringValue(d.Issuer)) + assert.Equal(t, "CN="+awsAuditCN, aws.StringValue(d.Subject)) + assert.Equal(t, "SHA256WITHRSA", aws.StringValue(d.SignatureAlgorithm)) + require.NotNil(t, d.CreatedAt) + require.NotNil(t, d.ImportedAt) + assert.True(t, d.CreatedAt.Equal(*d.ImportedAt), "CreatedAt equals ImportedAt on a first import") + + cert := wireJSON(t, &acm.DescribeCertificateOutput{Certificate: d})["Certificate"].(map[string]any) + assert.Equal(t, []any{map[string]any{"DomainName": awsAuditCN}}, cert["DomainValidationOptions"], + "an imported certificate's validation entries carry the domain name and nothing else") + assert.Equal(t, []any{map[string]any{"Name": "ANY"}}, cert["KeyUsages"]) + assert.Equal(t, []any{map[string]any{"Name": "NONE", "OID": ""}}, cert["ExtendedKeyUsages"]) + assert.Equal(t, map[string]any{"CertificateTransparencyLoggingPreference": "DISABLED"}, cert["Options"]) +} + +func TestListCertificates_ImportedSummaryMatchesAWSAuditResponse(t *testing.T) { + svc := setupACMService(t) + certPEM, keyPEM := genAuditShapedCert(t) + importCert(t, svc, certPEM, keyPEM) + + list, err := svc.ListCertificates(context.Background(), &acm.ListCertificatesInput{}, testAccountID) + require.NoError(t, err) + sums := wireJSON(t, list)["CertificateSummaryList"].([]any) + require.Len(t, sums, 1) + s := sums[0].(map[string]any) + + assert.Equal(t, []any{awsAuditCN}, s["SubjectAlternativeNameSummaries"]) + assert.Equal(t, false, s["HasAdditionalSubjectAlternativeNames"]) + assert.Equal(t, []any{"ANY"}, s["KeyUsages"]) + assert.Equal(t, []any{"NONE"}, s["ExtendedKeyUsages"]) + assert.Equal(t, "INELIGIBLE", s["RenewalEligibility"]) + require.Contains(t, s, "CreatedAt") + assert.Equal(t, s["ImportedAt"], s["CreatedAt"]) +} + +func TestImportCertificate_ReimportKeepsCreatedAtAndMovesImportedAt(t *testing.T) { + svc := setupACMService(t) + c1, k1 := genAuditShapedCert(t) + certArn := importCert(t, svc, c1, k1) + first := describeCert(t, svc, certArn) + + c2, k2 := genAuditShapedCert(t) + _, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + CertificateArn: aws.String(certArn), Certificate: c2, PrivateKey: k2, + }, testAccountID) + require.NoError(t, err) + second := describeCert(t, svc, certArn) + + assert.True(t, second.CreatedAt.Equal(*first.CreatedAt), "re-import must not move CreatedAt") + assert.True(t, second.ImportedAt.After(*first.ImportedAt), "re-import records the new import time") +} + +// A record stored before these fields existed holds the old Serial and Issuer +// spellings, no SANs and no CreatedAt; it must still describe as AWS does. +func TestDescribeCertificate_LegacyImportedRecordDerivedFromPEM(t *testing.T) { + svc := setupACMService(t) + certPEM, keyPEM := genAuditShapedCert(t) + certArn := svc.mintCertificateArn(testAccountID) + importedAt := time.Date(2026, 9, 1, 0, 0, 0, 0, time.UTC) + require.NoError(t, svc.store.PutCert(context.Background(), &CertRecord{ + CertificateArn: certArn, + AccountID: testAccountID, + Certificate: string(certPEM), + PrivateKey: string(keyPEM), + DomainName: awsAuditCN, + Serial: awsAuditSerialHex, + Subject: "CN=" + awsAuditCN, + Issuer: "CN=" + awsAuditCN, + KeyAlgorithm: "RSA_2048", + ImportedAt: importedAt, + })) + + d := describeCert(t, svc, certArn) + assert.Equal(t, awsAuditSerialText, aws.StringValue(d.Serial)) + assert.Equal(t, awsAuditCN, aws.StringValue(d.Issuer)) + assert.Equal(t, []string{awsAuditCN}, aws.StringValueSlice(d.SubjectAlternativeNames)) + require.NotNil(t, d.CreatedAt) + assert.True(t, d.CreatedAt.Equal(importedAt), "a legacy record's CreatedAt falls back to ImportedAt") + require.Len(t, d.KeyUsages, 1) + require.Len(t, d.ExtendedKeyUsages, 1) +} + +// Expected values are copied from real ACM's DescribeCertificate response for +// a self-signed P-384 import carrying an O, SANs that omit the CN, and both +// usage extensions. +func TestDescribeCertificate_ImportedWithExtensionsMatchesAWS(t *testing.T) { + svc := setupACMService(t) + key, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) + require.NoError(t, err) + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(1005), + Subject: pkix.Name{Organization: []string{"Probe Org"}, CommonName: "cn.example.com"}, + DNSNames: []string{"a.example.com", "b.example.com"}, + KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + NotBefore: time.Now().Add(-time.Hour), + NotAfter: time.Now().Add(24 * time.Hour), + SignatureAlgorithm: x509.ECDSAWithSHA384, + } + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &key.PublicKey, key) + require.NoError(t, err) + keyDER, err := x509.MarshalECPrivateKey(key) + require.NoError(t, err) + d := describeCert(t, svc, importCert(t, svc, + pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: der}), + pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: keyDER}))) + + assert.Equal(t, "EC-secp384r1", aws.StringValue(d.KeyAlgorithm)) + assert.Equal(t, "SHA384WITHECDSA", aws.StringValue(d.SignatureAlgorithm)) + assert.Equal(t, "03:ed", aws.StringValue(d.Serial)) + assert.Equal(t, "Probe Org", aws.StringValue(d.Issuer)) + assert.Equal(t, []string{"cn.example.com", "a.example.com", "b.example.com"}, aws.StringValueSlice(d.SubjectAlternativeNames)) + cert := wireJSON(t, &acm.DescribeCertificateOutput{Certificate: d})["Certificate"].(map[string]any) + assert.Equal(t, []any{map[string]any{"Name": "DIGITAL_SIGNATURE"}, map[string]any{"Name": "KEY_ENCIPHERMENT"}}, cert["KeyUsages"]) + assert.Equal(t, []any{ + map[string]any{"Name": "TLS_WEB_SERVER_AUTHENTICATION", "OID": "1.3.6.1.5.5.7.3.1"}, + map[string]any{"Name": "TLS_WEB_CLIENT_AUTHENTICATION", "OID": "1.3.6.1.5.5.7.3.2"}, + }, cert["ExtendedKeyUsages"]) +} diff --git a/spinifex/domains/acm/getcertificate_test.go b/spinifex/domains/acm/getcertificate_test.go index 7f7a0d7fc..43afe425f 100644 --- a/spinifex/domains/acm/getcertificate_test.go +++ b/spinifex/domains/acm/getcertificate_test.go @@ -32,9 +32,10 @@ func TestGetCertificate_ReturnsBodyAndChain(t *testing.T) { assert.Equal(t, string(chainPEM), aws.StringValue(out.CertificateChain)) } -// A self-signed leaf has no chain; the field is left absent rather than an -// empty string a client would have to distinguish from a real chain. -func TestGetCertificate_OmitsAbsentChain(t *testing.T) { +// AWS answers a certificate imported without a chain with the certificate +// itself as the chain. The substitution is response-only: the stored record +// keeps no chain, which is what ELBv2 builds its leaf+chain bundle from. +func TestGetCertificate_AbsentChainReturnsCertificate(t *testing.T) { svc := setupACMService(t) leafPEM, keyPEM := genCert(t, "nochain.example.com") @@ -49,7 +50,43 @@ func TestGetCertificate_OmitsAbsentChain(t *testing.T) { }, testAccountID) require.NoError(t, err) assert.Equal(t, string(leafPEM), aws.StringValue(out.Certificate)) - assert.Nil(t, out.CertificateChain) + require.NotNil(t, out.CertificateChain) + assert.Equal(t, string(leafPEM), aws.StringValue(out.CertificateChain)) + + rec, err := svc.store.GetCertMetadata(t.Context(), aws.StringValue(imported.CertificateArn)) + require.NoError(t, err) + require.NotNil(t, rec) + assert.Empty(t, rec.CertificateChain) +} + +// A re-import without a chain drops the chain the first import carried, so +// GetCertificate falls back to the new certificate, not the stale chain. +func TestGetCertificate_ReimportWithoutChainReturnsNewCertificate(t *testing.T) { + svc := setupACMService(t) + leafPEM, keyPEM := genCert(t, "reimport.example.com") + chainPEM, _ := genCert(t, "issuer.example.com") + + imported, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: leafPEM, + PrivateKey: keyPEM, + CertificateChain: chainPEM, + }, testAccountID) + require.NoError(t, err) + + newLeafPEM, newKeyPEM := genCert(t, "reimport.example.com") + _, err = svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + CertificateArn: imported.CertificateArn, + Certificate: newLeafPEM, + PrivateKey: newKeyPEM, + }, testAccountID) + require.NoError(t, err) + + out, err := svc.GetCertificate(context.Background(), &acm.GetCertificateInput{ + CertificateArn: imported.CertificateArn, + }, testAccountID) + require.NoError(t, err) + assert.Equal(t, string(newLeafPEM), aws.StringValue(out.Certificate)) + assert.Equal(t, string(newLeafPEM), aws.StringValue(out.CertificateChain)) } func TestGetCertificate_UnknownArnNotFound(t *testing.T) { diff --git a/spinifex/domains/acm/keyalgorithm_test.go b/spinifex/domains/acm/keyalgorithm_test.go new file mode 100644 index 000000000..e6fd506fc --- /dev/null +++ b/spinifex/domains/acm/keyalgorithm_test.go @@ -0,0 +1,149 @@ +package acm + +import ( + "context" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "math/big" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/acm" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// genRSACert returns a self-signed RSA leaf with only a CN, the shape of the +// certificate the AWS conformance audit imported. +func genRSACert(t *testing.T, cn string, bits int) (certPEM, keyPEM []byte) { + t.Helper() + key, err := rsa.GenerateKey(rand.Reader, bits) + require.NoError(t, err) + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(time.Now().UnixNano()), + Subject: pkix.Name{CommonName: cn}, + NotBefore: time.Now().Add(-time.Hour), + NotAfter: time.Now().Add(24 * time.Hour), + } + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &key.PublicKey, key) + require.NoError(t, err) + certPEM = pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: der}) + keyPEM = pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}) + return certPEM, keyPEM +} + +// describeAndListKeyAlgorithm returns the KeyAlgorithm that DescribeCertificate +// and the ListCertificates summary report for certArn. +func describeAndListKeyAlgorithm(t *testing.T, svc *ACMServiceImpl, certArn string) (described, listed string) { + t.Helper() + desc, err := svc.DescribeCertificate(context.Background(), &acm.DescribeCertificateInput{ + CertificateArn: aws.String(certArn), + }, testAccountID) + require.NoError(t, err) + + list, err := svc.ListCertificates(context.Background(), &acm.ListCertificatesInput{}, testAccountID) + require.NoError(t, err) + for _, s := range list.CertificateSummaryList { + if aws.StringValue(s.CertificateArn) == certArn { + return aws.StringValue(desc.Certificate.KeyAlgorithm), aws.StringValue(s.KeyAlgorithm) + } + } + t.Fatalf("ListCertificates did not return %s", certArn) + return "", "" +} + +// AWS returns RSA-2048 with a hyphen from both Describe and List, although the +// API enum (and the ListCertificates keyTypes filter) spells it RSA_2048. +func TestImportCertificate_RSAKeyAlgorithmIsHyphenated(t *testing.T) { + svc := setupACMService(t) + certPEM, keyPEM := genRSACert(t, "rsa.example.com", 2048) + + out, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: certPEM, + PrivateKey: keyPEM, + }, testAccountID) + require.NoError(t, err) + + described, listed := describeAndListKeyAlgorithm(t, svc, aws.StringValue(out.CertificateArn)) + assert.Equal(t, "RSA-2048", described) + assert.Equal(t, "RSA-2048", listed) + + // The read path normalises, so check the stored spelling separately. + raw, _, err := svc.store.store.Get(t.Context(), certKey(aws.StringValue(out.CertificateArn))) + require.NoError(t, err) + assert.Equal(t, "RSA-2048", raw.KeyAlgorithm) +} + +// Records written before the spelling fix hold RSA_ or EC_; +// they must read back in the AWS spelling without a migration. +func TestKeyAlgorithm_StoredUnderscoreSpellingReadsBackHyphenated(t *testing.T) { + cases := []struct { + stored, want string + }{ + {stored: "RSA_2048", want: "RSA-2048"}, + {stored: "RSA_4096", want: "RSA-4096"}, + {stored: "RSA-3072", want: "RSA-3072"}, + {stored: "EC_P-256", want: "EC-prime256v1"}, + } + svc := setupACMService(t) + for i, tc := range cases { + t.Run(tc.stored, func(t *testing.T) { + certArn := "arn:aws:acm:ap-southeast-2:" + testAccountID + ":certificate/legacy-" + string(rune('a'+i)) + require.NoError(t, svc.store.PutCert(t.Context(), &CertRecord{ + CertificateArn: certArn, + AccountID: testAccountID, + DomainName: "legacy.example.com", + KeyAlgorithm: tc.stored, + })) + + described, listed := describeAndListKeyAlgorithm(t, svc, certArn) + assert.Equal(t, tc.want, described) + assert.Equal(t, tc.want, listed) + }) + } +} + +// AWS refuses a re-import whose key type differs from the current one, naming +// both in the API enum spelling. +func TestImportCertificate_ReimportWithDifferentKeyTypeRejected(t *testing.T) { + svc := setupACMService(t) + c1, k1 := genRSACert(t, "k.example.com", 2048) + out, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{Certificate: c1, PrivateKey: k1}, testAccountID) + require.NoError(t, err) + + c2, k2 := genCert(t, "k.example.com", "k.example.com") + _, err = svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + CertificateArn: out.CertificateArn, Certificate: c2, PrivateKey: k2, + }, testAccountID) + code, msg, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorValidationException, code) + assert.Equal(t, "New certificate has a key of EC_prime256v1 which is different from RSA_2048 in the current certificate.", msg) +} + +func TestImportCertificate_SerialZeroRejected(t *testing.T) { + svc := setupACMService(t) + key, err := rsa.GenerateKey(rand.Reader, 2048) + require.NoError(t, err) + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(0), + Subject: pkix.Name{CommonName: "zero.example.com"}, + NotBefore: time.Now().Add(-time.Hour), + NotAfter: time.Now().Add(24 * time.Hour), + } + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &key.PublicKey, key) + require.NoError(t, err) + _, err = svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: der}), + PrivateKey: pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}), + }, testAccountID) + code, msg, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorValidationException, code) + assert.Equal(t, "The serial number in the certificate is not supported by ACM.", msg) +} diff --git a/spinifex/domains/acm/service_impl.go b/spinifex/domains/acm/service_impl.go index 25ac5899d..f3f857749 100644 --- a/spinifex/domains/acm/service_impl.go +++ b/spinifex/domains/acm/service_impl.go @@ -1,3 +1,6 @@ +// Package acm is the daemon-side ACM service: certificate records in +// JetStream KV with sealed private keys, issuance from the tenant private CA, +// and the worker that renews those certificates before they expire. package acm import ( @@ -11,6 +14,7 @@ import ( "fmt" "log/slog" "maps" + "regexp" "strings" "time" "uuid" @@ -28,8 +32,16 @@ const ( certStatusIssued = "ISSUED" certTypeImported = "IMPORTED" + + // domainNamePattern is AWS's DomainName constraint, quoted verbatim in the + // ValidationException message. + domainNamePattern = `(\*\.)?(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])` ) +// domainNameRE is domainNamePattern with its (?!-) lookaheads rewritten, since +// Go regexp has none. +var domainNameRE = regexp.MustCompile(`^(\*\.)?([A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]$`) + // CertAuthority issues leaf certificates from the tenant private CA and // authorizes domains against the CA's own x509 name constraints. Satisfied by // *TenantCA (privateca.go), which is implemented separately; @@ -207,9 +219,15 @@ func (s *ACMServiceImpl) ImportCertificate(ctx context.Context, input *acm.Impor if err != nil { return nil, errors.New(awserrors.ErrorInvalidParameter) } + if leaf.SerialNumber.Sign() == 0 { + return nil, awserrors.Errorf(awserrors.ErrorValidationException, "The serial number in the certificate is not supported by ACM.") + } certArn := aws.StringValue(input.CertificateArn) var inUseBy []string + now := time.Now().UTC() + createdAt := now + tags := tagsToMap(input.Tags) reimport := certArn != "" if certArn == "" { certArn = s.mintCertificateArn(accountID) @@ -226,9 +244,22 @@ func (s *ACMServiceImpl) ImportCertificate(ctx context.Context, input *acm.Impor if existing == nil || existing.AccountID != accountID { return nil, errors.New(awserrors.ErrorResourceNotFound) } + // AWS refuses tags on re-import, once the ARN resolves. The stored tags + // carry forward below, so a plain re-import does not clear them. + if len(input.Tags) > 0 { + return nil, awserrors.Errorf(awserrors.ErrorValidationException, "Tagging is not permitted on re-import.") + } + // AWS names both keys in its API enum spelling (RSA_2048). + if newAlg := keyAlgorithm(leaf); newAlg != existing.KeyAlgorithm { + return nil, awserrors.Errorf(awserrors.ErrorValidationException, + "New certificate has a key of %s which is different from %s in the current certificate.", + strings.Replace(newAlg, "-", "_", 1), strings.Replace(existing.KeyAlgorithm, "-", "_", 1)) + } // Carry the InUseBy index forward — new material under the same ARN // must not silently drop the load balancers that reference it. inUseBy = existing.InUseBy + createdAt = importedCreatedAt(existing) + tags = existing.Tags } rec := &CertRecord{ @@ -245,8 +276,9 @@ func (s *ACMServiceImpl) ImportCertificate(ctx context.Context, input *acm.Impor KeyAlgorithm: keyAlgorithm(leaf), NotBefore: leaf.NotBefore, NotAfter: leaf.NotAfter, - ImportedAt: time.Now().UTC(), - Tags: tagsToMap(input.Tags), + CreatedAt: createdAt, + ImportedAt: now, + Tags: tags, InUseBy: inUseBy, Type: certTypeImported, Status: certStatusIssued, @@ -285,6 +317,17 @@ func (s *ACMServiceImpl) RequestCertificate(ctx context.Context, input *acm.Requ return nil, errors.New(awserrors.ErrorInvalidParameter) } domain := aws.StringValue(input.DomainName) + // Before the mode is derived, so a malformed domain is a ValidationException + // in every mode rather than whatever the mode's own checks answer. + if len(domain) > 253 { + return nil, awserrors.Errorf(awserrors.ErrorValidationException, + "1 validation error detected: Value of the input at 'domainName' failed to satisfy constraint: Member must have length less than or equal to 253") + } + if !domainNameRE.MatchString(domain) { + return nil, awserrors.Errorf(awserrors.ErrorValidationException, + "1 validation error detected: Value of the input at 'domainName' failed to satisfy constraint: Member must satisfy regular expression pattern: %s", + domainNamePattern) + } sans := aws.StringValueSlice(input.SubjectAlternativeNames) allDomains := uniqueDomains(domain, sans) @@ -494,12 +537,17 @@ func (s *ACMServiceImpl) GetCertificate(ctx context.Context, input *acm.GetCerti if rec.Certificate == "" { return nil, errors.New(awserrors.ErrorACMRequestInProgress) } - out := &acm.GetCertificateOutput{Certificate: aws.String(rec.Certificate)} - // Left absent rather than empty for a self-signed leaf with no chain. - if rec.CertificateChain != "" { - out.CertificateChain = aws.String(rec.CertificateChain) + // AWS answers a certificate imported without a chain with the certificate + // itself as the chain. Only the response does this; the stored record keeps + // no chain, so ELBv2's leaf+chain bundle does not repeat the leaf. + chain := rec.CertificateChain + if chain == "" { + chain = rec.Certificate } - return out, nil + return &acm.GetCertificateOutput{ + Certificate: aws.String(rec.Certificate), + CertificateChain: aws.String(chain), + }, nil } // ListCertificates returns summaries for every cert owned by accountID. @@ -515,17 +563,20 @@ func (s *ACMServiceImpl) ListCertificates(ctx context.Context, input *acm.ListCe } summaries := make([]*acm.CertificateSummary, 0, len(recs)) for _, rec := range recs { - summaries = append(summaries, &acm.CertificateSummary{ - CertificateArn: aws.String(rec.CertificateArn), - DomainName: aws.String(rec.DomainName), - Status: aws.String(certStatusOrDefault(rec)), - Type: aws.String(certTypeOrDefault(rec)), - KeyAlgorithm: aws.String(rec.KeyAlgorithm), - NotBefore: timePtr(rec.NotBefore), - NotAfter: timePtr(rec.NotAfter), - ImportedAt: timePtr(rec.ImportedAt), - InUse: aws.Bool(len(rec.InUseBy) > 0), - }) + sum := &acm.CertificateSummary{ + CertificateArn: aws.String(rec.CertificateArn), + DomainName: aws.String(rec.DomainName), + Status: aws.String(certStatusOrDefault(rec)), + Type: aws.String(certTypeOrDefault(rec)), + KeyAlgorithm: aws.String(rec.KeyAlgorithm), + NotBefore: timePtr(rec.NotBefore), + NotAfter: timePtr(rec.NotAfter), + ImportedAt: timePtr(rec.ImportedAt), + InUse: aws.Bool(len(rec.InUseBy) > 0), + RenewalEligibility: aws.String(renewalEligibilityOrDefault(rec)), + } + applyLeafSummary(sum, rec) + summaries = append(summaries, sum) } return &acm.ListCertificatesOutput{CertificateSummaryList: summaries}, nil } @@ -617,6 +668,7 @@ func recordToDetail(rec *CertRecord) *acm.CertificateDetail { } detail.RenewalSummary = summary } + applyLeafDetail(detail, rec) return detail } @@ -764,15 +816,37 @@ func leafDomain(leaf *x509.Certificate) string { return "" } -// keyAlgorithm maps the leaf public key to an ACM-style algorithm string -// (RSA_2048, EC_prime256v1, ...). +// ecCurveNames maps Go's curve names to the OpenSSL names ACM's KeyAlgorithm uses. +var ecCurveNames = map[string]string{"P-256": "prime256v1", "P-384": "secp384r1", "P-521": "secp521r1"} + +// keyAlgorithm maps the leaf public key to the KeyAlgorithm ACM returns: +// RSA- or EC-, hyphenated unlike the RSA_2048 API enum. func keyAlgorithm(leaf *x509.Certificate) string { switch pub := leaf.PublicKey.(type) { case *rsa.PublicKey: - return fmt.Sprintf("RSA_%d", pub.N.BitLen()) + return fmt.Sprintf("RSA-%d", pub.N.BitLen()) case *ecdsa.PublicKey: - return "EC_" + pub.Curve.Params().Name + return ecKeyAlgorithm(pub.Curve.Params().Name) default: return "UNKNOWN" } } + +func ecKeyAlgorithm(goCurve string) string { + if name, ok := ecCurveNames[goCurve]; ok { + return "EC-" + name + } + return "EC-" + goCurve +} + +// normaliseKeyAlgorithm rewrites the RSA_ and EC_ spellings +// stored by earlier builds to the ones keyAlgorithm now writes. +func normaliseKeyAlgorithm(alg string) string { + if bits, ok := strings.CutPrefix(alg, "RSA_"); ok { + return "RSA-" + bits + } + if curve, ok := strings.CutPrefix(alg, "EC_"); ok { + return ecKeyAlgorithm(curve) + } + return alg +} diff --git a/spinifex/domains/acm/service_impl_test.go b/spinifex/domains/acm/service_impl_test.go index 336d64fd4..e57c53389 100644 --- a/spinifex/domains/acm/service_impl_test.go +++ b/spinifex/domains/acm/service_impl_test.go @@ -87,7 +87,7 @@ func TestImportCertificate_MintsArnAndParsesLeaf(t *testing.T) { assert.Equal(t, "example.com", aws.StringValue(d.DomainName)) assert.Equal(t, certStatusIssued, aws.StringValue(d.Status)) assert.Equal(t, certTypeImported, aws.StringValue(d.Type)) - assert.Equal(t, "EC_P-256", aws.StringValue(d.KeyAlgorithm)) + assert.Equal(t, "EC-prime256v1", aws.StringValue(d.KeyAlgorithm)) assert.ElementsMatch(t, []string{"example.com", "www.example.com"}, aws.StringValueSlice(d.SubjectAlternativeNames)) require.NotNil(t, d.NotAfter) } diff --git a/spinifex/domains/acm/store.go b/spinifex/domains/acm/store.go index 6052929bb..f3228d7d3 100644 --- a/spinifex/domains/acm/store.go +++ b/spinifex/domains/acm/store.go @@ -111,6 +111,10 @@ type CertRecord struct { // CertificateDetail.InUseBy field. InUseBy []string `json:"in_use_by,omitempty"` + // CreatedAt is the first import and survives re-imports, which move + // ImportedAt. Zero on records stored before it was kept. + CreatedAt time.Time `json:"created_at"` + // Type is the ACM certificate type: AMAZON_ISSUED, PRIVATE or IMPORTED. Type string `json:"type,omitempty"` // Status is the ACM certificate status (PENDING_VALIDATION, ISSUED, @@ -273,6 +277,7 @@ func (s *Store) getCert(ctx context.Context, certArn string, decrypt bool) (*Cer if err != nil { return nil, err } + rec.KeyAlgorithm = normaliseKeyAlgorithm(rec.KeyAlgorithm) if !decrypt { rec.PrivateKey = "" return rec, nil @@ -410,6 +415,7 @@ func (s *Store) listCerts(ctx context.Context, keep func(*CertRecord) bool, decr if err := json.Unmarshal(entry.Value(), &rec); err != nil { continue } + rec.KeyAlgorithm = normaliseKeyAlgorithm(rec.KeyAlgorithm) if !keep(&rec) { continue } diff --git a/spinifex/domains/acm/tags_test.go b/spinifex/domains/acm/tags_test.go index 63633e7e6..d7d21547f 100644 --- a/spinifex/domains/acm/tags_test.go +++ b/spinifex/domains/acm/tags_test.go @@ -108,3 +108,84 @@ func TestTagOps_CrossAccountHidden(t *testing.T) { }, "000000000002") assert.Equal(t, awserrors.ErrorResourceNotFound, err.Error()) } + +func listTagMap(t *testing.T, svc *ACMServiceImpl, arn string) map[string]string { + t.Helper() + out, err := svc.ListTagsForCertificate(context.Background(), &acm.ListTagsForCertificateInput{ + CertificateArn: aws.String(arn), + }, testAccountID) + require.NoError(t, err) + got := map[string]string{} + for _, tg := range out.Tags { + got[aws.StringValue(tg.Key)] = aws.StringValue(tg.Value) + } + return got +} + +// AWS answers a re-import carrying Tags with ValidationException and leaves +// the stored certificate, material and tags alike, untouched. +func TestImportCertificate_ReimportWithTagsRejected(t *testing.T) { + svc := setupACMService(t) + arn := importTagged(t, svc, &acm.Tag{Key: aws.String("Name"), Value: aws.String("ingress")}) + + c2, k2 := genCert(t, "rotated.example.com", "rotated.example.com") + _, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: c2, + PrivateKey: k2, + CertificateArn: aws.String(arn), + Tags: []*acm.Tag{{Key: aws.String("env"), Value: aws.String("prod")}}, + }, testAccountID) + require.Error(t, err) + + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorValidationException, code) + assert.Equal(t, "Tagging is not permitted on re-import.", message) + assert.Equal(t, 400, awserrors.ErrorLookup[code].HTTPCode) + + desc, err := svc.DescribeCertificate(context.Background(), &acm.DescribeCertificateInput{CertificateArn: aws.String(arn)}, testAccountID) + require.NoError(t, err) + assert.Equal(t, "tags.example.com", aws.StringValue(desc.Certificate.DomainName), "a refused re-import must not replace the material") + assert.Equal(t, map[string]string{"Name": "ingress"}, listTagMap(t, svc, arn)) +} + +// A re-import without Tags keeps the tags already on the certificate rather +// than clearing them, as InUseBy is kept. +func TestImportCertificate_ReimportKeepsStoredTags(t *testing.T) { + svc := setupACMService(t) + arn := importTagged(t, svc, &acm.Tag{Key: aws.String("Name"), Value: aws.String("ingress")}) + _, err := svc.AddTagsToCertificate(context.Background(), &acm.AddTagsToCertificateInput{ + CertificateArn: aws.String(arn), + Tags: []*acm.Tag{{Key: aws.String("env"), Value: aws.String("dev")}}, + }, testAccountID) + require.NoError(t, err) + + c2, k2 := genCert(t, "rotated.example.com", "rotated.example.com") + out, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: c2, + PrivateKey: k2, + CertificateArn: aws.String(arn), + }, testAccountID) + require.NoError(t, err) + assert.Equal(t, arn, aws.StringValue(out.CertificateArn)) + + desc, err := svc.DescribeCertificate(context.Background(), &acm.DescribeCertificateInput{CertificateArn: aws.String(arn)}, testAccountID) + require.NoError(t, err) + assert.Equal(t, "rotated.example.com", aws.StringValue(desc.Certificate.DomainName), "material must be replaced") + assert.Equal(t, map[string]string{"Name": "ingress", "env": "dev"}, listTagMap(t, svc, arn)) +} + +// AWS resolves the ARN before refusing the tags, so an unknown ARN with tags is +// a ResourceNotFoundException, not the tagging ValidationException. +func TestImportCertificate_ReimportWithTagsUnknownArnIsNotFound(t *testing.T) { + svc := setupACMService(t) + c, k := genCert(t, "x.example.com", "x.example.com") + _, err := svc.ImportCertificate(context.Background(), &acm.ImportCertificateInput{ + Certificate: c, + PrivateKey: k, + CertificateArn: aws.String(svc.mintCertificateArn(testAccountID)), + Tags: []*acm.Tag{{Key: aws.String("a"), Value: aws.String("b")}}, + }, testAccountID) + require.Error(t, err) + assert.Equal(t, awserrors.ErrorResourceNotFound, err.Error()) +} diff --git a/spinifex/domains/acm/tenant_ca_paths.go b/spinifex/domains/acm/tenant_ca_paths.go index db0980617..3912762a2 100644 --- a/spinifex/domains/acm/tenant_ca_paths.go +++ b/spinifex/domains/acm/tenant_ca_paths.go @@ -24,6 +24,8 @@ func TenantCACertPath(configDir string) string { return filepath.Join(configDir, tenantCACertFilename) } +// TenantCAKeyPath returns the tenant private CA key path under configDir; see +// TenantCACertPath. func TenantCAKeyPath(configDir string) string { return filepath.Join(configDir, tenantCAKeyFilename) } diff --git a/spinifex/domains/dns/bootstrap_test.go b/spinifex/domains/dns/bootstrap_test.go index f46bc0d8d..058acf415 100644 --- a/spinifex/domains/dns/bootstrap_test.go +++ b/spinifex/domains/dns/bootstrap_test.go @@ -69,18 +69,25 @@ secret_key = "READONLY" // flakyS3 refuses the first failUntil requests (simulating predastore not yet // listening) then behaves like fakeS3, to exercise the bootstrap retry loop. -func flakyS3(t *testing.T, bucket string, failUntil int) (endpoint string, objects map[string]string) { +// sdkRetried reports whether the SDK itself ever resent a request. +func flakyS3(t *testing.T, bucket string, failUntil int) (endpoint string, objects map[string]string, sdkRetried func() bool) { t.Helper() var mu sync.Mutex objects = map[string]string{} var calls int + var retried bool srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { mu.Lock() defer mu.Unlock() calls++ + if !strings.HasPrefix(r.Header.Get("Amz-Sdk-Request"), "attempt=1;") { + retried = true + } + // 501 rather than 503: the SDK retries 5xx-unavailable itself with + // seconds of jitter, which would hide the bootstrap loop under test. if calls <= failUntil { - http.Error(w, "unavailable", http.StatusServiceUnavailable) + http.Error(w, "unavailable", http.StatusNotImplemented) return } key := strings.TrimPrefix(r.URL.Path, "/"+bucket+"/") @@ -100,7 +107,11 @@ func flakyS3(t *testing.T, bucket string, failUntil int) (endpoint string, objec } })) t.Cleanup(srv.Close) - return srv.URL, objects + return srv.URL, objects, func() bool { + mu.Lock() + defer mu.Unlock() + return retried + } } // assertZoneNameservers verifies the exact apex NS and glue topology rendered @@ -182,7 +193,7 @@ func TestBootstrapBaseZoneRetries(t *testing.T) { t.Cleanup(func() { bootstrapRetryDelay = prev }) // Fail the first two S3 requests, then succeed — the retry must seed. - endpoint, objects := flakyS3(t, "northstar", 2) + endpoint, objects, sdkRetried := flakyS3(t, "northstar", 2) tomlBody := fmt.Sprintf(`listen = "0.0.0.0:5300" default_domain = "spx3.net" [s3] @@ -208,6 +219,7 @@ secret_key = "READONLY" require.NoError(t, BootstrapBaseZone(configPath, cluster)) require.Contains(t, objects, "spx3.net.toml") + assert.False(t, sdkRetried(), "failures must be retried by the bootstrap loop, not the SDK") } // TestBootstrapBaseZoneSeedsTheServiceEndpointSuffix covers the third zone: diff --git a/spinifex/domains/ec2/account/service.go b/spinifex/domains/ec2/account/service.go index 7211dfc10..b65ab51dc 100644 --- a/spinifex/domains/ec2/account/service.go +++ b/spinifex/domains/ec2/account/service.go @@ -1,3 +1,6 @@ +// Package account implements the EC2 account-settings actions (EBS +// encryption by default, serial console access): the AccountSettingsService +// contract, its daemon-side JetStream KV implementation and its NATS client. package account import ( diff --git a/spinifex/domains/ec2/awsapi/account/DescribeAccountAttributes.go b/spinifex/domains/ec2/awsapi/account/DescribeAccountAttributes.go index defd6f06c..d55404aab 100644 --- a/spinifex/domains/ec2/awsapi/account/DescribeAccountAttributes.go +++ b/spinifex/domains/ec2/awsapi/account/DescribeAccountAttributes.go @@ -1,3 +1,6 @@ +// Package account implements the EC2 account-level actions: it +// answers DescribeAccountAttributes itself and forwards the EBS-encryption and +// serial-console defaults to the account settings service over NATS. package account import ( diff --git a/spinifex/domains/ec2/awsapi/account/DisableEbsEncryptionByDefault.go b/spinifex/domains/ec2/awsapi/account/DisableEbsEncryptionByDefault.go index 97d1b7088..9405ffc78 100644 --- a/spinifex/domains/ec2/awsapi/account/DisableEbsEncryptionByDefault.go +++ b/spinifex/domains/ec2/awsapi/account/DisableEbsEncryptionByDefault.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDisableEbsEncryptionByDefaultInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateDisableEbsEncryptionByDefaultInput(input *ec2.DisableEbsEncryptionByDefaultInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateDisableEbsEncryptionByDefaultInput(input *ec2.DisableEbsEncryptionB return nil } +// DisableEbsEncryptionByDefault implements the EC2 DisableEbsEncryptionByDefault action, turning +// off default encryption of new EBS volumes for accountID via the NATS account settings service. func DisableEbsEncryptionByDefault(ctx context.Context, input *ec2.DisableEbsEncryptionByDefaultInput, natsConn *nats.Conn, accountID string) (ec2.DisableEbsEncryptionByDefaultOutput, error) { var output ec2.DisableEbsEncryptionByDefaultOutput diff --git a/spinifex/domains/ec2/awsapi/account/DisableSerialConsoleAccess.go b/spinifex/domains/ec2/awsapi/account/DisableSerialConsoleAccess.go index 6f702941a..efda3f74a 100644 --- a/spinifex/domains/ec2/awsapi/account/DisableSerialConsoleAccess.go +++ b/spinifex/domains/ec2/awsapi/account/DisableSerialConsoleAccess.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDisableSerialConsoleAccessInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateDisableSerialConsoleAccessInput(input *ec2.DisableSerialConsoleAccessInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateDisableSerialConsoleAccessInput(input *ec2.DisableSerialConsoleAcce return nil } +// DisableSerialConsoleAccess implements the EC2 DisableSerialConsoleAccess action, turning off +// serial console access for accountID via the NATS account settings service. func DisableSerialConsoleAccess(ctx context.Context, input *ec2.DisableSerialConsoleAccessInput, natsConn *nats.Conn, accountID string) (ec2.DisableSerialConsoleAccessOutput, error) { var output ec2.DisableSerialConsoleAccessOutput diff --git a/spinifex/domains/ec2/awsapi/account/EnableEbsEncryptionByDefault.go b/spinifex/domains/ec2/awsapi/account/EnableEbsEncryptionByDefault.go index 9d21afcf1..c28c9364b 100644 --- a/spinifex/domains/ec2/awsapi/account/EnableEbsEncryptionByDefault.go +++ b/spinifex/domains/ec2/awsapi/account/EnableEbsEncryptionByDefault.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateEnableEbsEncryptionByDefaultInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateEnableEbsEncryptionByDefaultInput(input *ec2.EnableEbsEncryptionByDefaultInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateEnableEbsEncryptionByDefaultInput(input *ec2.EnableEbsEncryptionByD return nil } +// EnableEbsEncryptionByDefault implements the EC2 EnableEbsEncryptionByDefault action, making new +// EBS volumes in accountID encrypted by default via the NATS account settings service. func EnableEbsEncryptionByDefault(ctx context.Context, input *ec2.EnableEbsEncryptionByDefaultInput, natsConn *nats.Conn, accountID string) (ec2.EnableEbsEncryptionByDefaultOutput, error) { var output ec2.EnableEbsEncryptionByDefaultOutput diff --git a/spinifex/domains/ec2/awsapi/account/EnableSerialConsoleAccess.go b/spinifex/domains/ec2/awsapi/account/EnableSerialConsoleAccess.go index 4481661a5..b247086f3 100644 --- a/spinifex/domains/ec2/awsapi/account/EnableSerialConsoleAccess.go +++ b/spinifex/domains/ec2/awsapi/account/EnableSerialConsoleAccess.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateEnableSerialConsoleAccessInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateEnableSerialConsoleAccessInput(input *ec2.EnableSerialConsoleAccessInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateEnableSerialConsoleAccessInput(input *ec2.EnableSerialConsoleAccess return nil } +// EnableSerialConsoleAccess implements the EC2 EnableSerialConsoleAccess action, turning on +// serial console access for accountID via the NATS account settings service. func EnableSerialConsoleAccess(ctx context.Context, input *ec2.EnableSerialConsoleAccessInput, natsConn *nats.Conn, accountID string) (ec2.EnableSerialConsoleAccessOutput, error) { var output ec2.EnableSerialConsoleAccessOutput diff --git a/spinifex/domains/ec2/awsapi/account/GetEbsEncryptionByDefault.go b/spinifex/domains/ec2/awsapi/account/GetEbsEncryptionByDefault.go index 975db3d7c..84e5577b3 100644 --- a/spinifex/domains/ec2/awsapi/account/GetEbsEncryptionByDefault.go +++ b/spinifex/domains/ec2/awsapi/account/GetEbsEncryptionByDefault.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateGetEbsEncryptionByDefaultInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateGetEbsEncryptionByDefaultInput(input *ec2.GetEbsEncryptionByDefaultInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateGetEbsEncryptionByDefaultInput(input *ec2.GetEbsEncryptionByDefault return nil } +// GetEbsEncryptionByDefault implements the EC2 GetEbsEncryptionByDefault action, reporting +// whether new EBS volumes in accountID are encrypted by default. func GetEbsEncryptionByDefault(ctx context.Context, input *ec2.GetEbsEncryptionByDefaultInput, natsConn *nats.Conn, accountID string) (ec2.GetEbsEncryptionByDefaultOutput, error) { var output ec2.GetEbsEncryptionByDefaultOutput diff --git a/spinifex/domains/ec2/awsapi/account/GetSerialConsoleAccessStatus.go b/spinifex/domains/ec2/awsapi/account/GetSerialConsoleAccessStatus.go index e2c08b472..28cf1d885 100644 --- a/spinifex/domains/ec2/awsapi/account/GetSerialConsoleAccessStatus.go +++ b/spinifex/domains/ec2/awsapi/account/GetSerialConsoleAccessStatus.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateGetSerialConsoleAccessStatusInput rejects a nil input with InvalidParameterValue; the +// action takes no parameters. func ValidateGetSerialConsoleAccessStatusInput(input *ec2.GetSerialConsoleAccessStatusInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -17,6 +19,8 @@ func ValidateGetSerialConsoleAccessStatusInput(input *ec2.GetSerialConsoleAccess return nil } +// GetSerialConsoleAccessStatus implements the EC2 GetSerialConsoleAccessStatus action, reporting +// whether serial console access is enabled for accountID. func GetSerialConsoleAccessStatus(ctx context.Context, input *ec2.GetSerialConsoleAccessStatusInput, natsConn *nats.Conn, accountID string) (ec2.GetSerialConsoleAccessStatusOutput, error) { var output ec2.GetSerialConsoleAccessStatusOutput diff --git a/spinifex/domains/ec2/awsapi/capacityreservation/fanout.go b/spinifex/domains/ec2/awsapi/capacityreservation/fanout.go index d5f5855a8..0fa9d6678 100644 --- a/spinifex/domains/ec2/awsapi/capacityreservation/fanout.go +++ b/spinifex/domains/ec2/awsapi/capacityreservation/fanout.go @@ -1,3 +1,6 @@ +// Package capacityreservation implements the EC2 capacity +// reservation actions: Create pins a reservation to a node chosen from a census +// of free capacity, and Describe and Cancel fan out to every node. package capacityreservation import ( diff --git a/spinifex/domains/ec2/awsapi/eigw/CreateEgressOnlyInternetGateway.go b/spinifex/domains/ec2/awsapi/eigw/CreateEgressOnlyInternetGateway.go index 65e144ccf..fb18e7736 100644 --- a/spinifex/domains/ec2/awsapi/eigw/CreateEgressOnlyInternetGateway.go +++ b/spinifex/domains/ec2/awsapi/eigw/CreateEgressOnlyInternetGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateEgressOnlyInternetGatewayInput rejects a nil input with InvalidParameterValue and +// a missing VpcId with MissingParameter. func ValidateCreateEgressOnlyInternetGatewayInput(input *ec2.CreateEgressOnlyInternetGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/eigw/DeleteEgressOnlyInternetGateway.go b/spinifex/domains/ec2/awsapi/eigw/DeleteEgressOnlyInternetGateway.go index f038b77bd..e291f272b 100644 --- a/spinifex/domains/ec2/awsapi/eigw/DeleteEgressOnlyInternetGateway.go +++ b/spinifex/domains/ec2/awsapi/eigw/DeleteEgressOnlyInternetGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteEgressOnlyInternetGatewayInput rejects a nil input with InvalidParameterValue and +// a missing EgressOnlyInternetGatewayId with MissingParameter. func ValidateDeleteEgressOnlyInternetGatewayInput(input *ec2.DeleteEgressOnlyInternetGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/eigw/DescribeEgressOnlyInternetGateways.go b/spinifex/domains/ec2/awsapi/eigw/DescribeEgressOnlyInternetGateways.go index 771d792c2..75fba03db 100644 --- a/spinifex/domains/ec2/awsapi/eigw/DescribeEgressOnlyInternetGateways.go +++ b/spinifex/domains/ec2/awsapi/eigw/DescribeEgressOnlyInternetGateways.go @@ -1,3 +1,6 @@ +// Package eigw implements the EC2 egress-only internet gateway +// actions: it validates each request and forwards it to the EIGW service over +// NATS. package eigw import ( @@ -10,6 +13,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeEgressOnlyInternetGatewaysInput rejects only a nil input, with +// InvalidParameterValue; IDs and filters are checked by the handler. func ValidateDescribeEgressOnlyInternetGatewaysInput(input *ec2.DescribeEgressOnlyInternetGatewaysInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/eip/AssociateAddress.go b/spinifex/domains/ec2/awsapi/eip/AssociateAddress.go index 7914c3c1c..6b324f0a3 100644 --- a/spinifex/domains/ec2/awsapi/eip/AssociateAddress.go +++ b/spinifex/domains/ec2/awsapi/eip/AssociateAddress.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateAssociateAddressInput rejects a nil input with InvalidParameterValue and a missing +// AllocationId with MissingParameter; EC2-Classic PublicIp-only requests are not accepted. func ValidateAssociateAddressInput(input *ec2.AssociateAddressInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/eip/DescribeAddresses.go b/spinifex/domains/ec2/awsapi/eip/DescribeAddresses.go index 2a1112374..6d7bb176b 100644 --- a/spinifex/domains/ec2/awsapi/eip/DescribeAddresses.go +++ b/spinifex/domains/ec2/awsapi/eip/DescribeAddresses.go @@ -1,3 +1,5 @@ +// Package eip implements the EC2 Elastic IP actions: it validates +// each request and forwards it to the EIP service over NATS. package eip import ( diff --git a/spinifex/domains/ec2/awsapi/eip/DisassociateAddress.go b/spinifex/domains/ec2/awsapi/eip/DisassociateAddress.go index 806e78854..936a00794 100644 --- a/spinifex/domains/ec2/awsapi/eip/DisassociateAddress.go +++ b/spinifex/domains/ec2/awsapi/eip/DisassociateAddress.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDisassociateAddressInput rejects a nil input with InvalidParameterValue and a missing +// AssociationId with MissingParameter. func ValidateDisassociateAddressInput(input *ec2.DisassociateAddressInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/eip/ReleaseAddress.go b/spinifex/domains/ec2/awsapi/eip/ReleaseAddress.go index 2ceb5eb32..ee15c2b0a 100644 --- a/spinifex/domains/ec2/awsapi/eip/ReleaseAddress.go +++ b/spinifex/domains/ec2/awsapi/eip/ReleaseAddress.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateReleaseAddressInput rejects a nil input with InvalidParameterValue and a missing +// AllocationId with MissingParameter. func ValidateReleaseAddressInput(input *ec2.ReleaseAddressInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/igw/AttachInternetGateway.go b/spinifex/domains/ec2/awsapi/igw/AttachInternetGateway.go index 9a636ac53..0fa812ab0 100644 --- a/spinifex/domains/ec2/awsapi/igw/AttachInternetGateway.go +++ b/spinifex/domains/ec2/awsapi/igw/AttachInternetGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateAttachInternetGatewayInput rejects a nil input with InvalidParameterValue and a missing +// InternetGatewayId or VpcId with MissingParameter. func ValidateAttachInternetGatewayInput(input *ec2.AttachInternetGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/igw/DeleteInternetGateway.go b/spinifex/domains/ec2/awsapi/igw/DeleteInternetGateway.go index 8b5ff928c..5dd2a7511 100644 --- a/spinifex/domains/ec2/awsapi/igw/DeleteInternetGateway.go +++ b/spinifex/domains/ec2/awsapi/igw/DeleteInternetGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteInternetGatewayInput rejects a nil input with InvalidParameterValue and a missing +// InternetGatewayId with MissingParameter. func ValidateDeleteInternetGatewayInput(input *ec2.DeleteInternetGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/igw/DescribeInternetGateways.go b/spinifex/domains/ec2/awsapi/igw/DescribeInternetGateways.go index 2cb43f7b0..e9919aeae 100644 --- a/spinifex/domains/ec2/awsapi/igw/DescribeInternetGateways.go +++ b/spinifex/domains/ec2/awsapi/igw/DescribeInternetGateways.go @@ -1,3 +1,5 @@ +// Package igw implements the EC2 internet gateway actions: it +// validates each request and forwards it to the IGW service over NATS. package igw import ( diff --git a/spinifex/domains/ec2/awsapi/igw/DetachInternetGateway.go b/spinifex/domains/ec2/awsapi/igw/DetachInternetGateway.go index cc409122f..212fb1ed4 100644 --- a/spinifex/domains/ec2/awsapi/igw/DetachInternetGateway.go +++ b/spinifex/domains/ec2/awsapi/igw/DetachInternetGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDetachInternetGatewayInput rejects a nil input with InvalidParameterValue and a missing +// InternetGatewayId or VpcId with MissingParameter. func ValidateDetachInternetGatewayInput(input *ec2.DetachInternetGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/image/DeregisterImage.go b/spinifex/domains/ec2/awsapi/image/DeregisterImage.go index ebc62699c..7b71d1164 100644 --- a/spinifex/domains/ec2/awsapi/image/DeregisterImage.go +++ b/spinifex/domains/ec2/awsapi/image/DeregisterImage.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeregisterImageInput requires an ImageId (MissingParameter) carrying the ami- prefix +// (InvalidAMIID.Malformed). func ValidateDeregisterImageInput(input *ec2.DeregisterImageInput) error { if input == nil || input.ImageId == nil || *input.ImageId == "" { return errors.New(awserrors.ErrorMissingParameter) @@ -21,6 +23,8 @@ func ValidateDeregisterImageInput(input *ec2.DeregisterImageInput) error { return nil } +// DeregisterImage implements the EC2 DeregisterImage action, validating the input and forwarding +// it to the NATS image service scoped to accountID. func DeregisterImage(ctx context.Context, input *ec2.DeregisterImageInput, natsConn *nats.Conn, accountID string) (ec2.DeregisterImageOutput, error) { var output ec2.DeregisterImageOutput diff --git a/spinifex/domains/ec2/awsapi/image/DescribeImageAttribute.go b/spinifex/domains/ec2/awsapi/image/DescribeImageAttribute.go index f60567424..d02019afd 100644 --- a/spinifex/domains/ec2/awsapi/image/DescribeImageAttribute.go +++ b/spinifex/domains/ec2/awsapi/image/DescribeImageAttribute.go @@ -19,6 +19,8 @@ var supportedImageAttributes = map[string]bool{ ec2.ImageAttributeNameBlockDeviceMapping: true, } +// ValidateDescribeImageAttributeInput requires an ami- prefixed ImageId and an Attribute. +// Attributes outside supportedImageAttributes are rejected with InvalidParameterValue. func ValidateDescribeImageAttributeInput(input *ec2.DescribeImageAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorMissingParameter) @@ -38,6 +40,8 @@ func ValidateDescribeImageAttributeInput(input *ec2.DescribeImageAttributeInput) return nil } +// DescribeImageAttribute implements the EC2 DescribeImageAttribute action, validating the input +// and forwarding it to the NATS image service scoped to accountID. func DescribeImageAttribute(ctx context.Context, input *ec2.DescribeImageAttributeInput, natsConn *nats.Conn, accountID string) (ec2.DescribeImageAttributeOutput, error) { var output ec2.DescribeImageAttributeOutput diff --git a/spinifex/domains/ec2/awsapi/image/DescribeImages.go b/spinifex/domains/ec2/awsapi/image/DescribeImages.go index 1ff1596d9..942520fb4 100644 --- a/spinifex/domains/ec2/awsapi/image/DescribeImages.go +++ b/spinifex/domains/ec2/awsapi/image/DescribeImages.go @@ -1,3 +1,5 @@ +// Package image implements the EC2 AMI actions: it validates each +// request and forwards it to the image service over NATS. package image import ( @@ -11,6 +13,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeImagesInput accepts a nil input and rejects any ImageIds entry without the ami- +// prefix with InvalidAMIID.Malformed. func ValidateDescribeImagesInput(input *ec2.DescribeImagesInput) (err error) { if input == nil { return nil @@ -27,6 +31,8 @@ func ValidateDescribeImagesInput(input *ec2.DescribeImagesInput) (err error) { return err } +// DescribeImages implements the EC2 DescribeImages action, returning the AMIs visible to +// accountID from the NATS image service. func DescribeImages(ctx context.Context, input *ec2.DescribeImagesInput, natsConn *nats.Conn, accountID string) (output ec2.DescribeImagesOutput, err error) { err = ValidateDescribeImagesInput(input) if err != nil { diff --git a/spinifex/domains/ec2/awsapi/image/ModifyImageAttribute.go b/spinifex/domains/ec2/awsapi/image/ModifyImageAttribute.go index 8cd2f8e59..18805c4c6 100644 --- a/spinifex/domains/ec2/awsapi/image/ModifyImageAttribute.go +++ b/spinifex/domains/ec2/awsapi/image/ModifyImageAttribute.go @@ -72,6 +72,8 @@ func ValidateModifyImageAttributeInput(input *ec2.ModifyImageAttributeInput) err return nil } +// ModifyImageAttribute implements the EC2 ModifyImageAttribute action. Only the description +// attribute is supported; the normalized input is forwarded to the NATS image service. func ModifyImageAttribute(ctx context.Context, input *ec2.ModifyImageAttributeInput, natsConn *nats.Conn, accountID string) (ec2.ModifyImageAttributeOutput, error) { var output ec2.ModifyImageAttributeOutput diff --git a/spinifex/domains/ec2/awsapi/image/RegisterImage.go b/spinifex/domains/ec2/awsapi/image/RegisterImage.go index f91fecb36..18bf6bebd 100644 --- a/spinifex/domains/ec2/awsapi/image/RegisterImage.go +++ b/spinifex/domains/ec2/awsapi/image/RegisterImage.go @@ -124,6 +124,8 @@ func selectRootBlockDeviceMapping(mappings []*ec2.BlockDeviceMapping, rootDevice return nil } +// RegisterImage implements the EC2 RegisterImage action, registering an AMI that points at an +// existing EBS snapshot via the NATS image service. func RegisterImage(ctx context.Context, input *ec2.RegisterImageInput, natsConn *nats.Conn, accountID string) (ec2.RegisterImageOutput, error) { var output ec2.RegisterImageOutput diff --git a/spinifex/domains/ec2/awsapi/image/ResetImageAttribute.go b/spinifex/domains/ec2/awsapi/image/ResetImageAttribute.go index 689695b8a..b86b8e031 100644 --- a/spinifex/domains/ec2/awsapi/image/ResetImageAttribute.go +++ b/spinifex/domains/ec2/awsapi/image/ResetImageAttribute.go @@ -32,6 +32,8 @@ func ValidateResetImageAttributeInput(input *ec2.ResetImageAttributeInput) error return nil } +// ResetImageAttribute implements the EC2 ResetImageAttribute action for the description +// attribute, forwarding to the NATS image service scoped to accountID. func ResetImageAttribute(ctx context.Context, input *ec2.ResetImageAttributeInput, natsConn *nats.Conn, accountID string) (ec2.ResetImageAttributeOutput, error) { var output ec2.ResetImageAttributeOutput diff --git a/spinifex/domains/ec2/awsapi/instance/GetConsoleOutput.go b/spinifex/domains/ec2/awsapi/instance/GetConsoleOutput.go index a8fad9eeb..454088e1b 100644 --- a/spinifex/domains/ec2/awsapi/instance/GetConsoleOutput.go +++ b/spinifex/domains/ec2/awsapi/instance/GetConsoleOutput.go @@ -14,6 +14,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateGetConsoleOutputInput rejects a nil input with InvalidParameterValue and a missing +// InstanceId with MissingParameter. func ValidateGetConsoleOutputInput(input *ec2.GetConsoleOutputInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/instance/GetPasswordData.go b/spinifex/domains/ec2/awsapi/instance/GetPasswordData.go index f83dd7fdc..d5efb4dd7 100644 --- a/spinifex/domains/ec2/awsapi/instance/GetPasswordData.go +++ b/spinifex/domains/ec2/awsapi/instance/GetPasswordData.go @@ -18,6 +18,8 @@ import ( // the ErrTimeout path can be exercised without a real 5-second wait. var getPasswordDataTimeout = 5 * time.Second +// ValidateGetPasswordDataInput rejects a nil input with InvalidParameterValue and a missing +// InstanceId with MissingParameter. func ValidateGetPasswordDataInput(input *ec2.GetPasswordDataInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute.go b/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute.go index f40bf2abb..88179d6a2 100644 --- a/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute.go +++ b/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute.go @@ -16,7 +16,8 @@ import ( ) // ValidateModifyInstanceAttributeInput validates the input constraints for ModifyInstanceAttribute. -// AWS rejects calls with multiple attributes set in a single request. +// AWS answers InvalidParameterCombination when no attribute, or more than one, +// is set in a single request. func ValidateModifyInstanceAttributeInput(input *ec2.ModifyInstanceAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -41,8 +42,11 @@ func ValidateModifyInstanceAttributeInput(input *ec2.ModifyInstanceAttributeInpu if input.DisableApiTermination != nil { count++ } - if count != 1 { - return errors.New(awserrors.ErrorInvalidParameterValue) + switch { + case count == 0: + return awserrors.Errorf(awserrors.ErrorInvalidParameterCombination, "No attributes specified.") + case count > 1: + return awserrors.Errorf(awserrors.ErrorInvalidParameterCombination, "The request must contain a single attribute") } if input.InstanceType != nil && (input.InstanceType.Value == nil || *input.InstanceType.Value == "") { diff --git a/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute_test.go b/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute_test.go index 61c15da0e..fb7f8e79b 100644 --- a/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute_test.go +++ b/spinifex/domains/ec2/awsapi/instance/ModifyInstanceAttribute_test.go @@ -48,13 +48,20 @@ func TestValidateModifyInstanceAttributeInput_BadPrefix(t *testing.T) { assert.Equal(t, awserrors.ErrorInvalidInstanceIDMalformed, err.Error()) } +func assertSingleAttributeError(t *testing.T, err error, wantMessage string) { + t.Helper() + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorInvalidParameterCombination, code) + assert.Equal(t, wantMessage, message) +} + func TestValidateModifyInstanceAttributeInput_NoAttributeSet(t *testing.T) { t.Parallel() err := ValidateModifyInstanceAttributeInput(&ec2.ModifyInstanceAttributeInput{ InstanceId: aws.String("i-abc123"), }) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, err.Error()) + assertSingleAttributeError(t, err, "No attributes specified.") } func TestValidateModifyInstanceAttributeInput_MultipleAttributes(t *testing.T) { @@ -64,8 +71,7 @@ func TestValidateModifyInstanceAttributeInput_MultipleAttributes(t *testing.T) { InstanceType: &ec2.AttributeValue{Value: aws.String("t3.micro")}, UserData: &ec2.BlobAttributeValue{Value: []byte("data")}, }) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, err.Error()) + assertSingleAttributeError(t, err, "The request must contain a single attribute") } func TestValidateModifyInstanceAttributeInput_EmptyInstanceType(t *testing.T) { @@ -122,8 +128,7 @@ func TestValidateModifyInstanceAttributeInput_DisableApiTerminationWithOther(t * DisableApiTermination: &ec2.AttributeBooleanValue{Value: aws.Bool(true)}, InstanceType: &ec2.AttributeValue{Value: aws.String("t3.micro")}, }) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, err.Error()) + assertSingleAttributeError(t, err, "The request must contain a single attribute") } func TestValidateModifyInstanceAttributeInput_ValidSourceDestCheck(t *testing.T) { @@ -142,8 +147,17 @@ func TestValidateModifyInstanceAttributeInput_SourceDestCheckWithOtherAttribute( SourceDestCheck: &ec2.AttributeBooleanValue{Value: aws.Bool(false)}, InstanceType: &ec2.AttributeValue{Value: aws.String("t3.micro")}, }) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, err.Error()) + assertSingleAttributeError(t, err, "The request must contain a single attribute") +} + +func TestValidateModifyInstanceAttributeInput_SourceDestCheckWithDisableApiTermination(t *testing.T) { + t.Parallel() + err := ValidateModifyInstanceAttributeInput(&ec2.ModifyInstanceAttributeInput{ + InstanceId: aws.String("i-abc123"), + SourceDestCheck: &ec2.AttributeBooleanValue{Value: aws.Bool(false)}, + DisableApiTermination: &ec2.AttributeBooleanValue{Value: aws.Bool(true)}, + }) + assertSingleAttributeError(t, err, "The request must contain a single attribute") } // --- Gateway function tests --- diff --git a/spinifex/domains/ec2/awsapi/instance/RebootInstances.go b/spinifex/domains/ec2/awsapi/instance/RebootInstances.go index 63ca58351..b1957dcd7 100644 --- a/spinifex/domains/ec2/awsapi/instance/RebootInstances.go +++ b/spinifex/domains/ec2/awsapi/instance/RebootInstances.go @@ -21,6 +21,8 @@ import ( // and never the guest's shutdown. var rebootInstancesTimeout = 5 * time.Second +// ValidateRebootInstancesInput rejects a nil input with InvalidParameterValue and an empty +// InstanceIds list with MissingParameter. func ValidateRebootInstancesInput(input *ec2.RebootInstancesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/instance/RunInstances.go b/spinifex/domains/ec2/awsapi/instance/RunInstances.go index e92284323..c96b9d0fa 100644 --- a/spinifex/domains/ec2/awsapi/instance/RunInstances.go +++ b/spinifex/domains/ec2/awsapi/instance/RunInstances.go @@ -1,3 +1,6 @@ +// Package instance implements the EC2 instance actions: it places +// launches on nodes, fans lifecycle and Describe calls out across the cluster, +// and authorizes the IAM instance profiles attached to instances. package instance import ( @@ -28,10 +31,14 @@ type PassRoleChecker func(roleARN string) error // validation and PassRole authorization, but before the launch is dispatched. type LaunchQuotaChecker func() error +// RunInstancesResponse wraps a Reservation under the RunInstancesResponse XML element name. type RunInstancesResponse struct { Reservation *ec2.Reservation `locationName:"RunInstancesResponse"` } +// ValidateRunInstancesInput checks MinCount/MaxCount (present, non-zero, Min <= Max), ImageId +// (ami- prefix) and InstanceType. It also refuses a pinned private IP on a multi-instance launch +// and any block device mapping the launch cannot create. func ValidateRunInstancesInput(input *ec2.RunInstancesInput) (err error) { if input == nil { return errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/domains/ec2/awsapi/instance/StartInstances.go b/spinifex/domains/ec2/awsapi/instance/StartInstances.go index 1192595c8..913bea35e 100644 --- a/spinifex/domains/ec2/awsapi/instance/StartInstances.go +++ b/spinifex/domains/ec2/awsapi/instance/StartInstances.go @@ -19,6 +19,8 @@ type startStoppedInstanceRequest struct { InstanceID string `json:"instance_id"` } +// ValidateStartInstancesInput rejects a nil input with InvalidParameterValue and an empty +// InstanceIds list with MissingParameter. func ValidateStartInstancesInput(input *ec2.StartInstancesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/instance/StopInstances.go b/spinifex/domains/ec2/awsapi/instance/StopInstances.go index f343fc9ec..3edab73c9 100644 --- a/spinifex/domains/ec2/awsapi/instance/StopInstances.go +++ b/spinifex/domains/ec2/awsapi/instance/StopInstances.go @@ -14,6 +14,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateStopInstancesInput rejects a nil input with InvalidParameterValue and an empty +// InstanceIds list with MissingParameter. func ValidateStopInstancesInput(input *ec2.StopInstancesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/instance/TerminateInstances.go b/spinifex/domains/ec2/awsapi/instance/TerminateInstances.go index 9361df4d3..9f8336892 100644 --- a/spinifex/domains/ec2/awsapi/instance/TerminateInstances.go +++ b/spinifex/domains/ec2/awsapi/instance/TerminateInstances.go @@ -24,6 +24,8 @@ type terminateStoppedInstanceRequest struct { // terminateRetrySleep is the backoff seam between NoResponders retries; tests override it. var terminateRetrySleep = time.Sleep +// ValidateTerminateInstancesInput rejects a nil input with InvalidParameterValue and an empty +// InstanceIds list with MissingParameter. func ValidateTerminateInstancesInput(input *ec2.TerminateInstancesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/key/CreateKeyPair.go b/spinifex/domains/ec2/awsapi/key/CreateKeyPair.go index c4d869baf..86e2c7347 100644 --- a/spinifex/domains/ec2/awsapi/key/CreateKeyPair.go +++ b/spinifex/domains/ec2/awsapi/key/CreateKeyPair.go @@ -11,6 +11,7 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateKeyPairInput returns MissingParameter for a nil input or an empty KeyName. func ValidateCreateKeyPairInput(input *ec2.CreateKeyPairInput) (err error) { if input == nil { return errors.New(awserrors.ErrorMissingParameter) @@ -23,6 +24,8 @@ func ValidateCreateKeyPairInput(input *ec2.CreateKeyPairInput) (err error) { return err } +// CreateKeyPair implements the EC2 CreateKeyPair action. The NATS key service generates the key +// pair for accountID and the output carries the private key material. func CreateKeyPair(ctx context.Context, input *ec2.CreateKeyPairInput, natsConn *nats.Conn, accountID string) (output ec2.CreateKeyPairOutput, err error) { err = ValidateCreateKeyPairInput(input) diff --git a/spinifex/domains/ec2/awsapi/key/DeleteKeyPair.go b/spinifex/domains/ec2/awsapi/key/DeleteKeyPair.go index 74a7af0c6..73151e2e1 100644 --- a/spinifex/domains/ec2/awsapi/key/DeleteKeyPair.go +++ b/spinifex/domains/ec2/awsapi/key/DeleteKeyPair.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteKeyPairInput returns MissingParameter for a nil input or when neither KeyName nor +// KeyPairId is set. func ValidateDeleteKeyPairInput(input *ec2.DeleteKeyPairInput) (err error) { if input == nil { return errors.New(awserrors.ErrorMissingParameter) @@ -24,6 +26,8 @@ func ValidateDeleteKeyPairInput(input *ec2.DeleteKeyPairInput) (err error) { return err } +// DeleteKeyPair implements the EC2 DeleteKeyPair action, deleting the key pair named by KeyName +// or KeyPairId in accountID via the NATS key service. func DeleteKeyPair(ctx context.Context, input *ec2.DeleteKeyPairInput, natsConn *nats.Conn, accountID string) (output ec2.DeleteKeyPairOutput, err error) { err = ValidateDeleteKeyPairInput(input) diff --git a/spinifex/domains/ec2/awsapi/key/DescribeKeyPairs.go b/spinifex/domains/ec2/awsapi/key/DescribeKeyPairs.go index c9f937205..763601ea1 100644 --- a/spinifex/domains/ec2/awsapi/key/DescribeKeyPairs.go +++ b/spinifex/domains/ec2/awsapi/key/DescribeKeyPairs.go @@ -1,3 +1,5 @@ +// Package key implements the EC2 key pair actions: it validates +// each request and forwards it to the key pair service over NATS. package key import ( diff --git a/spinifex/domains/ec2/awsapi/key/ImportKeyPair.go b/spinifex/domains/ec2/awsapi/key/ImportKeyPair.go index 70d877f57..aea05f887 100644 --- a/spinifex/domains/ec2/awsapi/key/ImportKeyPair.go +++ b/spinifex/domains/ec2/awsapi/key/ImportKeyPair.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateImportKeyPairInput returns MissingParameter for a nil input, an empty KeyName or empty +// PublicKeyMaterial. func ValidateImportKeyPairInput(input *ec2.ImportKeyPairInput) (err error) { if input == nil { return errors.New(awserrors.ErrorMissingParameter) @@ -26,6 +28,8 @@ func ValidateImportKeyPairInput(input *ec2.ImportKeyPairInput) (err error) { return err } +// ImportKeyPair implements the EC2 ImportKeyPair action, storing a caller-supplied public key for +// accountID via the NATS key service. func ImportKeyPair(ctx context.Context, input *ec2.ImportKeyPairInput, natsConn *nats.Conn, accountID string) (output ec2.ImportKeyPairOutput, err error) { err = ValidateImportKeyPairInput(input) diff --git a/spinifex/domains/ec2/awsapi/launchtemplate/validate.go b/spinifex/domains/ec2/awsapi/launchtemplate/validate.go index a337e8f99..fb03b33e7 100644 --- a/spinifex/domains/ec2/awsapi/launchtemplate/validate.go +++ b/spinifex/domains/ec2/awsapi/launchtemplate/validate.go @@ -1,3 +1,6 @@ +// Package launchtemplate implements the EC2 launch template +// actions: it validates each request and forwards it to the launch template +// service over NATS. package launchtemplate import ( diff --git a/spinifex/domains/ec2/awsapi/natgw/CreateNatGateway.go b/spinifex/domains/ec2/awsapi/natgw/CreateNatGateway.go index 805272ed6..b27af6b2e 100644 --- a/spinifex/domains/ec2/awsapi/natgw/CreateNatGateway.go +++ b/spinifex/domains/ec2/awsapi/natgw/CreateNatGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateNatGatewayInput requires SubnetId and AllocationId (MissingParameter) and rejects +// ConnectivityType=private with Unsupported, since only public NAT gateways exist. func ValidateCreateNatGatewayInput(input *ec2.CreateNatGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -28,6 +30,8 @@ func ValidateCreateNatGatewayInput(input *ec2.CreateNatGatewayInput) error { return nil } +// CreateNatGateway implements the EC2 CreateNatGateway action, validating the input and +// forwarding it to the NATS NAT gateway service scoped to accountID. func CreateNatGateway(ctx context.Context, input *ec2.CreateNatGatewayInput, natsConn *nats.Conn, accountID string) (ec2.CreateNatGatewayOutput, error) { var output ec2.CreateNatGatewayOutput if err := ValidateCreateNatGatewayInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/natgw/DeleteNatGateway.go b/spinifex/domains/ec2/awsapi/natgw/DeleteNatGateway.go index 4e6a39128..52f07473a 100644 --- a/spinifex/domains/ec2/awsapi/natgw/DeleteNatGateway.go +++ b/spinifex/domains/ec2/awsapi/natgw/DeleteNatGateway.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteNatGatewayInput rejects a nil input with InvalidParameterValue and a missing +// NatGatewayId with MissingParameter. func ValidateDeleteNatGatewayInput(input *ec2.DeleteNatGatewayInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -20,6 +22,8 @@ func ValidateDeleteNatGatewayInput(input *ec2.DeleteNatGatewayInput) error { return nil } +// DeleteNatGateway implements the EC2 DeleteNatGateway action, validating the input and +// forwarding it to the NATS NAT gateway service scoped to accountID. func DeleteNatGateway(ctx context.Context, input *ec2.DeleteNatGatewayInput, natsConn *nats.Conn, accountID string) (ec2.DeleteNatGatewayOutput, error) { var output ec2.DeleteNatGatewayOutput if err := ValidateDeleteNatGatewayInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/natgw/DescribeNatGateways.go b/spinifex/domains/ec2/awsapi/natgw/DescribeNatGateways.go index bda905acd..f0cb0c7b8 100644 --- a/spinifex/domains/ec2/awsapi/natgw/DescribeNatGateways.go +++ b/spinifex/domains/ec2/awsapi/natgw/DescribeNatGateways.go @@ -1,3 +1,5 @@ +// Package natgw implements the EC2 NAT gateway actions: it +// validates each request and forwards it to the NAT gateway service over NATS. package natgw import ( @@ -10,6 +12,8 @@ import ( "github.com/nats-io/nats.go" ) +// DescribeNatGateways implements the EC2 DescribeNatGateways action, returning accountID's NAT +// gateways from the NATS service. A nil input is rejected with InvalidParameterValue. func DescribeNatGateways(ctx context.Context, input *ec2.DescribeNatGatewaysInput, natsConn *nats.Conn, accountID string) (ec2.DescribeNatGatewaysOutput, error) { var output ec2.DescribeNatGatewaysOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/placementgroup/CreatePlacementGroup.go b/spinifex/domains/ec2/awsapi/placementgroup/CreatePlacementGroup.go index 6fd3054b3..83523c59a 100644 --- a/spinifex/domains/ec2/awsapi/placementgroup/CreatePlacementGroup.go +++ b/spinifex/domains/ec2/awsapi/placementgroup/CreatePlacementGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreatePlacementGroupInput rejects a nil input with InvalidParameterValue and a missing +// GroupName with MissingParameter. func ValidateCreatePlacementGroupInput(input *ec2.CreatePlacementGroupInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/placementgroup/DeletePlacementGroup.go b/spinifex/domains/ec2/awsapi/placementgroup/DeletePlacementGroup.go index 97ef9d600..0907af8d4 100644 --- a/spinifex/domains/ec2/awsapi/placementgroup/DeletePlacementGroup.go +++ b/spinifex/domains/ec2/awsapi/placementgroup/DeletePlacementGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeletePlacementGroupInput rejects a nil input with InvalidParameterValue and a missing +// GroupName with MissingParameter. func ValidateDeletePlacementGroupInput(input *ec2.DeletePlacementGroupInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/placementgroup/DescribePlacementGroups.go b/spinifex/domains/ec2/awsapi/placementgroup/DescribePlacementGroups.go index f27dd9d59..6f6dd5727 100644 --- a/spinifex/domains/ec2/awsapi/placementgroup/DescribePlacementGroups.go +++ b/spinifex/domains/ec2/awsapi/placementgroup/DescribePlacementGroups.go @@ -1,3 +1,6 @@ +// Package placementgroup implements the EC2 placement group +// actions: it validates each request and forwards it to the placement group +// service over NATS. package placementgroup import ( diff --git a/spinifex/domains/ec2/awsapi/routetable/AssociateRouteTable.go b/spinifex/domains/ec2/awsapi/routetable/AssociateRouteTable.go index a041b101a..1682ad49b 100644 --- a/spinifex/domains/ec2/awsapi/routetable/AssociateRouteTable.go +++ b/spinifex/domains/ec2/awsapi/routetable/AssociateRouteTable.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateAssociateRouteTableInput requires RouteTableId and a SubnetId or GatewayId +// (MissingParameter). Gateway edge associations are rejected with Unsupported. func ValidateAssociateRouteTableInput(input *ec2.AssociateRouteTableInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -29,6 +31,8 @@ func ValidateAssociateRouteTableInput(input *ec2.AssociateRouteTableInput) error return nil } +// AssociateRouteTable implements the EC2 AssociateRouteTable action, associating a route table +// with a subnet via the NATS route table service. func AssociateRouteTable(ctx context.Context, input *ec2.AssociateRouteTableInput, natsConn *nats.Conn, accountID string) (ec2.AssociateRouteTableOutput, error) { var output ec2.AssociateRouteTableOutput if err := ValidateAssociateRouteTableInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/CreateRoute.go b/spinifex/domains/ec2/awsapi/routetable/CreateRoute.go index 414637113..dd0a1c533 100644 --- a/spinifex/domains/ec2/awsapi/routetable/CreateRoute.go +++ b/spinifex/domains/ec2/awsapi/routetable/CreateRoute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateRouteInput rejects a nil input with InvalidParameterValue and a missing +// RouteTableId or DestinationCidrBlock with MissingParameter. func ValidateCreateRouteInput(input *ec2.CreateRouteInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -23,6 +25,8 @@ func ValidateCreateRouteInput(input *ec2.CreateRouteInput) error { return nil } +// CreateRoute implements the EC2 CreateRoute action, adding an IPv4 route to a route table via +// the NATS route table service. func CreateRoute(ctx context.Context, input *ec2.CreateRouteInput, natsConn *nats.Conn, accountID string) (ec2.CreateRouteOutput, error) { var output ec2.CreateRouteOutput if err := ValidateCreateRouteInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/CreateRouteTable.go b/spinifex/domains/ec2/awsapi/routetable/CreateRouteTable.go index 7ff5fb105..90af8f484 100644 --- a/spinifex/domains/ec2/awsapi/routetable/CreateRouteTable.go +++ b/spinifex/domains/ec2/awsapi/routetable/CreateRouteTable.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateRouteTableInput rejects a nil input with InvalidParameterValue and a missing +// VpcId with MissingParameter. func ValidateCreateRouteTableInput(input *ec2.CreateRouteTableInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -20,6 +22,8 @@ func ValidateCreateRouteTableInput(input *ec2.CreateRouteTableInput) error { return nil } +// CreateRouteTable implements the EC2 CreateRouteTable action, creating a route table in a VPC +// via the NATS route table service. func CreateRouteTable(ctx context.Context, input *ec2.CreateRouteTableInput, natsConn *nats.Conn, accountID string) (ec2.CreateRouteTableOutput, error) { var output ec2.CreateRouteTableOutput if err := ValidateCreateRouteTableInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/DeleteRoute.go b/spinifex/domains/ec2/awsapi/routetable/DeleteRoute.go index ce8529129..cb568e3c7 100644 --- a/spinifex/domains/ec2/awsapi/routetable/DeleteRoute.go +++ b/spinifex/domains/ec2/awsapi/routetable/DeleteRoute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteRouteInput rejects a nil input with InvalidParameterValue and a missing +// RouteTableId or DestinationCidrBlock with MissingParameter. func ValidateDeleteRouteInput(input *ec2.DeleteRouteInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -23,6 +25,8 @@ func ValidateDeleteRouteInput(input *ec2.DeleteRouteInput) error { return nil } +// DeleteRoute implements the EC2 DeleteRoute action, removing the route for DestinationCidrBlock +// from a route table via the NATS route table service. func DeleteRoute(ctx context.Context, input *ec2.DeleteRouteInput, natsConn *nats.Conn, accountID string) (ec2.DeleteRouteOutput, error) { var output ec2.DeleteRouteOutput if err := ValidateDeleteRouteInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/DeleteRouteTable.go b/spinifex/domains/ec2/awsapi/routetable/DeleteRouteTable.go index a1d4537aa..6556e744e 100644 --- a/spinifex/domains/ec2/awsapi/routetable/DeleteRouteTable.go +++ b/spinifex/domains/ec2/awsapi/routetable/DeleteRouteTable.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteRouteTableInput rejects a nil input with InvalidParameterValue and a missing +// RouteTableId with MissingParameter. func ValidateDeleteRouteTableInput(input *ec2.DeleteRouteTableInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -20,6 +22,7 @@ func ValidateDeleteRouteTableInput(input *ec2.DeleteRouteTableInput) error { return nil } +// DeleteRouteTable implements the EC2 DeleteRouteTable action via the NATS route table service. func DeleteRouteTable(ctx context.Context, input *ec2.DeleteRouteTableInput, natsConn *nats.Conn, accountID string) (ec2.DeleteRouteTableOutput, error) { var output ec2.DeleteRouteTableOutput if err := ValidateDeleteRouteTableInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/DescribeRouteTables.go b/spinifex/domains/ec2/awsapi/routetable/DescribeRouteTables.go index 866103b3d..63c5cc026 100644 --- a/spinifex/domains/ec2/awsapi/routetable/DescribeRouteTables.go +++ b/spinifex/domains/ec2/awsapi/routetable/DescribeRouteTables.go @@ -1,3 +1,5 @@ +// Package routetable implements the EC2 route table actions: it +// validates each request and forwards it to the route table service over NATS. package routetable import ( @@ -10,6 +12,8 @@ import ( "github.com/nats-io/nats.go" ) +// DescribeRouteTables implements the EC2 DescribeRouteTables action, returning accountID's route +// tables from the NATS service. A nil input is rejected with InvalidParameterValue. func DescribeRouteTables(ctx context.Context, input *ec2.DescribeRouteTablesInput, natsConn *nats.Conn, accountID string) (ec2.DescribeRouteTablesOutput, error) { var output ec2.DescribeRouteTablesOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/DisassociateRouteTable.go b/spinifex/domains/ec2/awsapi/routetable/DisassociateRouteTable.go index ce79878e7..c40357924 100644 --- a/spinifex/domains/ec2/awsapi/routetable/DisassociateRouteTable.go +++ b/spinifex/domains/ec2/awsapi/routetable/DisassociateRouteTable.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDisassociateRouteTableInput rejects a nil input with InvalidParameterValue and a +// missing AssociationId with MissingParameter. func ValidateDisassociateRouteTableInput(input *ec2.DisassociateRouteTableInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -20,6 +22,8 @@ func ValidateDisassociateRouteTableInput(input *ec2.DisassociateRouteTableInput) return nil } +// DisassociateRouteTable implements the EC2 DisassociateRouteTable action, removing a subnet +// association via the NATS route table service. func DisassociateRouteTable(ctx context.Context, input *ec2.DisassociateRouteTableInput, natsConn *nats.Conn, accountID string) (ec2.DisassociateRouteTableOutput, error) { var output ec2.DisassociateRouteTableOutput if err := ValidateDisassociateRouteTableInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/ReplaceRoute.go b/spinifex/domains/ec2/awsapi/routetable/ReplaceRoute.go index 8e50e5419..cde218f7f 100644 --- a/spinifex/domains/ec2/awsapi/routetable/ReplaceRoute.go +++ b/spinifex/domains/ec2/awsapi/routetable/ReplaceRoute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateReplaceRouteInput rejects a nil input with InvalidParameterValue and a missing +// RouteTableId or DestinationCidrBlock with MissingParameter. func ValidateReplaceRouteInput(input *ec2.ReplaceRouteInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -23,6 +25,8 @@ func ValidateReplaceRouteInput(input *ec2.ReplaceRouteInput) error { return nil } +// ReplaceRoute implements the EC2 ReplaceRoute action, changing the target of an existing route +// via the NATS route table service. func ReplaceRoute(ctx context.Context, input *ec2.ReplaceRouteInput, natsConn *nats.Conn, accountID string) (ec2.ReplaceRouteOutput, error) { var output ec2.ReplaceRouteOutput if err := ValidateReplaceRouteInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/routetable/ReplaceRouteTableAssociation.go b/spinifex/domains/ec2/awsapi/routetable/ReplaceRouteTableAssociation.go index decb648b9..74288453f 100644 --- a/spinifex/domains/ec2/awsapi/routetable/ReplaceRouteTableAssociation.go +++ b/spinifex/domains/ec2/awsapi/routetable/ReplaceRouteTableAssociation.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateReplaceRouteTableAssociationInput rejects a nil input with InvalidParameterValue and a +// missing AssociationId or RouteTableId with MissingParameter. func ValidateReplaceRouteTableAssociationInput(input *ec2.ReplaceRouteTableAssociationInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -23,6 +25,8 @@ func ValidateReplaceRouteTableAssociationInput(input *ec2.ReplaceRouteTableAssoc return nil } +// ReplaceRouteTableAssociation implements the EC2 ReplaceRouteTableAssociation action, moving an +// existing association to a different route table via the NATS route table service. func ReplaceRouteTableAssociation(ctx context.Context, input *ec2.ReplaceRouteTableAssociationInput, natsConn *nats.Conn, accountID string) (ec2.ReplaceRouteTableAssociationOutput, error) { var output ec2.ReplaceRouteTableAssociationOutput if err := ValidateReplaceRouteTableAssociationInput(input); err != nil { diff --git a/spinifex/domains/ec2/awsapi/snapshot/DescribeSnapshots.go b/spinifex/domains/ec2/awsapi/snapshot/DescribeSnapshots.go index 1d0452dbf..c822dcfb9 100644 --- a/spinifex/domains/ec2/awsapi/snapshot/DescribeSnapshots.go +++ b/spinifex/domains/ec2/awsapi/snapshot/DescribeSnapshots.go @@ -1,3 +1,5 @@ +// Package snapshot implements the EC2 EBS snapshot actions: it +// validates each request and forwards it to the snapshot service over NATS. package snapshot import ( diff --git a/spinifex/domains/ec2/awsapi/tags/DescribeTags.go b/spinifex/domains/ec2/awsapi/tags/DescribeTags.go index a5377a080..ffcd4331e 100644 --- a/spinifex/domains/ec2/awsapi/tags/DescribeTags.go +++ b/spinifex/domains/ec2/awsapi/tags/DescribeTags.go @@ -1,3 +1,5 @@ +// Package tags implements the EC2 tagging actions: it validates +// each request and forwards it to the tag service over NATS. package tags import ( diff --git a/spinifex/domains/ec2/awsapi/volume/CreateVolume.go b/spinifex/domains/ec2/awsapi/volume/CreateVolume.go index 8bdb8cc68..2f2e5a876 100644 --- a/spinifex/domains/ec2/awsapi/volume/CreateVolume.go +++ b/spinifex/domains/ec2/awsapi/volume/CreateVolume.go @@ -5,11 +5,15 @@ import ( "errors" "github.com/aws/aws-sdk-go/service/ec2" + ebspolicy "github.com/mulgadc/spinifex/spinifex/domains/ec2/ebs/policy" ec2volume "github.com/mulgadc/spinifex/spinifex/domains/ec2/volume" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" "github.com/nats-io/nats.go" ) +// ValidateCreateVolumeInput requires Size (1-16384 GiB) unless SnapshotId is set, requires an +// AvailabilityZone, and checks VolumeType when given. Errors are MissingParameter or +// InvalidParameterValue. func ValidateCreateVolumeInput(input *ec2.CreateVolumeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -29,8 +33,10 @@ func ValidateCreateVolumeInput(input *ec2.CreateVolumeInput) error { return errors.New(awserrors.ErrorInvalidParameterValue) } - if input.VolumeType != nil && *input.VolumeType != "" && *input.VolumeType != "gp3" { - return errors.New(awserrors.ErrorUnknownVolumeType) + if input.VolumeType != nil { + if err := ebspolicy.ValidateVolumeType(*input.VolumeType); err != nil { + return err + } } return nil diff --git a/spinifex/domains/ec2/awsapi/volume/CreateVolume_test.go b/spinifex/domains/ec2/awsapi/volume/CreateVolume_test.go index 4f08b0880..dcb2bbad6 100644 --- a/spinifex/domains/ec2/awsapi/volume/CreateVolume_test.go +++ b/spinifex/domains/ec2/awsapi/volume/CreateVolume_test.go @@ -7,6 +7,7 @@ import ( "github.com/aws/aws-sdk-go/service/ec2" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestValidateCreateVolumeInput(t *testing.T) { @@ -153,6 +154,15 @@ func TestValidateCreateVolumeInput(t *testing.T) { }, wantErr: false, }, + { + name: "ValidInput_UppercaseGP3", + input: &ec2.CreateVolumeInput{ + Size: aws.Int64(80), + AvailabilityZone: aws.String("ap-southeast-2a"), + VolumeType: aws.String("GP3"), + }, + wantErr: false, + }, } for _, tt := range tests { @@ -160,8 +170,9 @@ func TestValidateCreateVolumeInput(t *testing.T) { err := ValidateCreateVolumeInput(tt.input) if tt.wantErr { - assert.Error(t, err) - assert.Equal(t, tt.errMsg, err.Error()) + code, _, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, tt.errMsg, code) } else { assert.NoError(t, err) } diff --git a/spinifex/domains/ec2/awsapi/volume/DeleteVolume.go b/spinifex/domains/ec2/awsapi/volume/DeleteVolume.go index 04d1ea649..74906454a 100644 --- a/spinifex/domains/ec2/awsapi/volume/DeleteVolume.go +++ b/spinifex/domains/ec2/awsapi/volume/DeleteVolume.go @@ -14,6 +14,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteVolumeInput rejects a nil input with InvalidParameterValue and a VolumeId that is +// missing or not a non-empty vol- ID with InvalidVolumeID.Malformed. func ValidateDeleteVolumeInput(input *ec2.DeleteVolumeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/volume/DescribeVolumeStatus.go b/spinifex/domains/ec2/awsapi/volume/DescribeVolumeStatus.go index e598814c5..0e7a9c166 100644 --- a/spinifex/domains/ec2/awsapi/volume/DescribeVolumeStatus.go +++ b/spinifex/domains/ec2/awsapi/volume/DescribeVolumeStatus.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeVolumeStatusInput accepts a nil input and rejects any VolumeIds entry without +// the vol- prefix with InvalidVolumeID.Malformed. func ValidateDescribeVolumeStatusInput(input *ec2.DescribeVolumeStatusInput) error { if input == nil { return nil diff --git a/spinifex/domains/ec2/awsapi/volume/DescribeVolumes.go b/spinifex/domains/ec2/awsapi/volume/DescribeVolumes.go index 5c8d8019d..50cdce387 100644 --- a/spinifex/domains/ec2/awsapi/volume/DescribeVolumes.go +++ b/spinifex/domains/ec2/awsapi/volume/DescribeVolumes.go @@ -1,3 +1,5 @@ +// Package volume implements the EC2 EBS volume actions: it +// validates each request and forwards it to the volume service over NATS. package volume import ( @@ -11,6 +13,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeVolumesInput accepts a nil input and rejects any VolumeIds entry without the +// vol- prefix with InvalidVolumeID.Malformed. func ValidateDescribeVolumesInput(input *ec2.DescribeVolumesInput) error { if input == nil { return nil diff --git a/spinifex/domains/ec2/awsapi/volume/DescribeVolumesModifications.go b/spinifex/domains/ec2/awsapi/volume/DescribeVolumesModifications.go index e068c8266..83488486e 100644 --- a/spinifex/domains/ec2/awsapi/volume/DescribeVolumesModifications.go +++ b/spinifex/domains/ec2/awsapi/volume/DescribeVolumesModifications.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeVolumesModificationsInput accepts a nil input and rejects any VolumeIds entry +// without the vol- prefix with InvalidVolumeID.Malformed. func ValidateDescribeVolumesModificationsInput(input *ec2.DescribeVolumesModificationsInput) error { if input == nil { return nil diff --git a/spinifex/domains/ec2/awsapi/volume/ModifyVolume.go b/spinifex/domains/ec2/awsapi/volume/ModifyVolume.go index 7832298ed..f892e6915 100644 --- a/spinifex/domains/ec2/awsapi/volume/ModifyVolume.go +++ b/spinifex/domains/ec2/awsapi/volume/ModifyVolume.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyVolumeInput requires a vol- prefixed VolumeId (InvalidVolumeID.Malformed) and +// rejects a non-positive Size with InvalidParameterValue. func ValidateModifyVolumeInput(input *ec2.ModifyVolumeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/CreateNetworkInterface.go b/spinifex/domains/ec2/awsapi/vpc/CreateNetworkInterface.go index c5535534a..2cf5c8b7c 100644 --- a/spinifex/domains/ec2/awsapi/vpc/CreateNetworkInterface.go +++ b/spinifex/domains/ec2/awsapi/vpc/CreateNetworkInterface.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateNetworkInterfaceInput rejects a nil input with InvalidParameterValue and a +// missing SubnetId with MissingParameter. func ValidateCreateNetworkInterfaceInput(input *ec2.CreateNetworkInterfaceInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/CreateSecurityGroup.go b/spinifex/domains/ec2/awsapi/vpc/CreateSecurityGroup.go index 8bc7c931e..2b95f1513 100644 --- a/spinifex/domains/ec2/awsapi/vpc/CreateSecurityGroup.go +++ b/spinifex/domains/ec2/awsapi/vpc/CreateSecurityGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// CreateSecurityGroup implements the EC2 CreateSecurityGroup action. It requires GroupName +// (MissingParameter) and forwards to the NATS VPC service scoped to accountID. func CreateSecurityGroup(ctx context.Context, input *ec2.CreateSecurityGroupInput, natsConn *nats.Conn, accountID string) (ec2.CreateSecurityGroupOutput, error) { var output ec2.CreateSecurityGroupOutput if input == nil { @@ -26,6 +28,8 @@ func CreateSecurityGroup(ctx context.Context, input *ec2.CreateSecurityGroupInpu return *result, nil } +// DeleteSecurityGroup implements the EC2 DeleteSecurityGroup action. Only GroupId is accepted +// (MissingParameter when absent); deletion by GroupName is not supported. func DeleteSecurityGroup(ctx context.Context, input *ec2.DeleteSecurityGroupInput, natsConn *nats.Conn, accountID string) (ec2.DeleteSecurityGroupOutput, error) { var output ec2.DeleteSecurityGroupOutput if input == nil { @@ -42,6 +46,8 @@ func DeleteSecurityGroup(ctx context.Context, input *ec2.DeleteSecurityGroupInpu return *result, nil } +// DescribeSecurityGroups implements the EC2 DescribeSecurityGroups action, returning accountID's +// security groups from the NATS VPC service. func DescribeSecurityGroups(ctx context.Context, input *ec2.DescribeSecurityGroupsInput, natsConn *nats.Conn, accountID string) (ec2.DescribeSecurityGroupsOutput, error) { var output ec2.DescribeSecurityGroupsOutput if input == nil { @@ -55,6 +61,8 @@ func DescribeSecurityGroups(ctx context.Context, input *ec2.DescribeSecurityGrou return *result, nil } +// AuthorizeSecurityGroupIngress implements the EC2 AuthorizeSecurityGroupIngress action, adding +// inbound rules to the group named by GroupId (MissingParameter when absent). func AuthorizeSecurityGroupIngress(ctx context.Context, input *ec2.AuthorizeSecurityGroupIngressInput, natsConn *nats.Conn, accountID string) (ec2.AuthorizeSecurityGroupIngressOutput, error) { var output ec2.AuthorizeSecurityGroupIngressOutput if input == nil { @@ -71,6 +79,8 @@ func AuthorizeSecurityGroupIngress(ctx context.Context, input *ec2.AuthorizeSecu return *result, nil } +// AuthorizeSecurityGroupEgress implements the EC2 AuthorizeSecurityGroupEgress action, adding +// outbound rules to the group named by GroupId (MissingParameter when absent). func AuthorizeSecurityGroupEgress(ctx context.Context, input *ec2.AuthorizeSecurityGroupEgressInput, natsConn *nats.Conn, accountID string) (ec2.AuthorizeSecurityGroupEgressOutput, error) { var output ec2.AuthorizeSecurityGroupEgressOutput if input == nil { @@ -87,6 +97,8 @@ func AuthorizeSecurityGroupEgress(ctx context.Context, input *ec2.AuthorizeSecur return *result, nil } +// RevokeSecurityGroupIngress implements the EC2 RevokeSecurityGroupIngress action, removing +// inbound rules from the group named by GroupId (MissingParameter when absent). func RevokeSecurityGroupIngress(ctx context.Context, input *ec2.RevokeSecurityGroupIngressInput, natsConn *nats.Conn, accountID string) (ec2.RevokeSecurityGroupIngressOutput, error) { var output ec2.RevokeSecurityGroupIngressOutput if input == nil { @@ -103,6 +115,8 @@ func RevokeSecurityGroupIngress(ctx context.Context, input *ec2.RevokeSecurityGr return *result, nil } +// RevokeSecurityGroupEgress implements the EC2 RevokeSecurityGroupEgress action, removing +// outbound rules from the group named by GroupId (MissingParameter when absent). func RevokeSecurityGroupEgress(ctx context.Context, input *ec2.RevokeSecurityGroupEgressInput, natsConn *nats.Conn, accountID string) (ec2.RevokeSecurityGroupEgressOutput, error) { var output ec2.RevokeSecurityGroupEgressOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/vpc/CreateSubnet.go b/spinifex/domains/ec2/awsapi/vpc/CreateSubnet.go index 7172f7a54..e0da23e32 100644 --- a/spinifex/domains/ec2/awsapi/vpc/CreateSubnet.go +++ b/spinifex/domains/ec2/awsapi/vpc/CreateSubnet.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateSubnetInput rejects a nil input with InvalidParameterValue and a missing VpcId or +// CidrBlock with MissingParameter. func ValidateCreateSubnetInput(input *ec2.CreateSubnetInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/CreateVpc.go b/spinifex/domains/ec2/awsapi/vpc/CreateVpc.go index b9a7a6d70..e75f03b20 100644 --- a/spinifex/domains/ec2/awsapi/vpc/CreateVpc.go +++ b/spinifex/domains/ec2/awsapi/vpc/CreateVpc.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateVpcInput rejects a nil input with InvalidParameterValue and a missing CidrBlock +// with MissingParameter; IPAM-allocated CIDRs are not accepted. func ValidateCreateVpcInput(input *ec2.CreateVpcInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/DeleteNetworkInterface.go b/spinifex/domains/ec2/awsapi/vpc/DeleteNetworkInterface.go index c07f04477..e05256030 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DeleteNetworkInterface.go +++ b/spinifex/domains/ec2/awsapi/vpc/DeleteNetworkInterface.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteNetworkInterfaceInput rejects a nil input with InvalidParameterValue and a +// missing NetworkInterfaceId with MissingParameter. func ValidateDeleteNetworkInterfaceInput(input *ec2.DeleteNetworkInterfaceInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/DeleteSubnet.go b/spinifex/domains/ec2/awsapi/vpc/DeleteSubnet.go index 86fa8f38d..21b0863de 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DeleteSubnet.go +++ b/spinifex/domains/ec2/awsapi/vpc/DeleteSubnet.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteSubnetInput rejects a nil input with InvalidParameterValue and a missing SubnetId +// with MissingParameter. func ValidateDeleteSubnetInput(input *ec2.DeleteSubnetInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/DeleteVpc.go b/spinifex/domains/ec2/awsapi/vpc/DeleteVpc.go index 166fbf837..de6af7d6e 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DeleteVpc.go +++ b/spinifex/domains/ec2/awsapi/vpc/DeleteVpc.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteVpcInput rejects a nil input with InvalidParameterValue and a missing VpcId with +// MissingParameter. func ValidateDeleteVpcInput(input *ec2.DeleteVpcInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules.go b/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules.go index 47d9bd453..cc97e69b1 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules.go +++ b/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules.go @@ -10,14 +10,14 @@ import ( "github.com/nats-io/nats.go" ) -// Nil input is valid and treated as "all rules in the account"; supplied -// SecurityGroupRuleIds are validated against the sgr-<17 hex> shape before the -// request crosses NATS so a malformed ID never hits the handler. +// DescribeSecurityGroupRules treats a nil input as "all rules in the account". A supplied +// SecurityGroupRuleId AWS calls malformed is rejected before the request crosses NATS; whether a +// well-formed ID exists is the handler's to answer. func DescribeSecurityGroupRules(ctx context.Context, input *ec2.DescribeSecurityGroupRulesInput, natsConn *nats.Conn, accountID string) (ec2.DescribeSecurityGroupRulesOutput, error) { var output ec2.DescribeSecurityGroupRulesOutput if input != nil { for _, id := range input.SecurityGroupRuleIds { - if id == nil || !ec2vpc.SGRuleIDRegex.MatchString(*id) { + if id == nil || ec2vpc.SGRuleIDIsMalformed(*id) { return output, errors.New(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed) } } diff --git a/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules_test.go b/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules_test.go index c174a39da..24147547e 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules_test.go +++ b/spinifex/domains/ec2/awsapi/vpc/DescribeSecurityGroupRules_test.go @@ -23,10 +23,9 @@ func TestDescribeSecurityGroupRules_NilInput_PassesValidation(t *testing.T) { func TestDescribeSecurityGroupRules_MalformedRuleID(t *testing.T) { cases := []string{ "sgr-toolong0123456789abcdef", - "sgr-XYZ", + "SGR-0123456789abcdef0", "sg-0123456789abcdef0", "", - "sgr-0123456789abcdefX", } for _, bad := range cases { input := &ec2.DescribeSecurityGroupRulesInput{ @@ -46,12 +45,14 @@ func TestDescribeSecurityGroupRules_NilRuleIDEntry(t *testing.T) { } func TestDescribeSecurityGroupRules_ValidRuleIDPassesValidation(t *testing.T) { - // A well-formed sgr- ID passes gateway validation; the call then dives - // into the NATS service (nil conn) and fails there. - input := &ec2.DescribeSecurityGroupRulesInput{ - SecurityGroupRuleIds: []*string{aws.String("sgr-0123456789abcdef0")}, + // An ID AWS answers NotFound for, not Malformed, passes gateway validation; + // the call then dives into the NATS service (nil conn) and fails there. + for _, id := range []string{"sgr-0123456789abcdef0", "sgr-XYZ", "sgr-0123456789abcdefX"} { + input := &ec2.DescribeSecurityGroupRulesInput{ + SecurityGroupRuleIds: []*string{aws.String(id)}, + } + _, err := DescribeSecurityGroupRules(context.Background(), input, nil, testAccountID) + require.Error(t, err) + assert.NotEqual(t, awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, err.Error(), "id %q", id) } - _, err := DescribeSecurityGroupRules(context.Background(), input, nil, testAccountID) - require.Error(t, err) - assert.NotEqual(t, awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, err.Error()) } diff --git a/spinifex/domains/ec2/awsapi/vpc/DescribeVpcAttribute.go b/spinifex/domains/ec2/awsapi/vpc/DescribeVpcAttribute.go index 785255b96..291e45738 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DescribeVpcAttribute.go +++ b/spinifex/domains/ec2/awsapi/vpc/DescribeVpcAttribute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeVpcAttributeInput rejects a nil input with InvalidParameterValue and a missing +// VpcId or Attribute with MissingParameter. func ValidateDescribeVpcAttributeInput(input *ec2.DescribeVpcAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/DescribeVpcs.go b/spinifex/domains/ec2/awsapi/vpc/DescribeVpcs.go index 805ed3576..62638c75c 100644 --- a/spinifex/domains/ec2/awsapi/vpc/DescribeVpcs.go +++ b/spinifex/domains/ec2/awsapi/vpc/DescribeVpcs.go @@ -1,3 +1,6 @@ +// Package vpc implements the EC2 VPC, subnet, security group and +// network interface actions: it validates each request and forwards it to the +// VPC service over NATS. package vpc import ( diff --git a/spinifex/domains/ec2/awsapi/vpc/GetSecurityGroupsForVpc.go b/spinifex/domains/ec2/awsapi/vpc/GetSecurityGroupsForVpc.go index ca1de011b..c5edd4964 100644 --- a/spinifex/domains/ec2/awsapi/vpc/GetSecurityGroupsForVpc.go +++ b/spinifex/domains/ec2/awsapi/vpc/GetSecurityGroupsForVpc.go @@ -18,9 +18,9 @@ const ( maxSGForVpcResults = 1000 ) -// VpcId is required by the model, so an absent one is MissingParameter before -// the request crosses NATS. Whether it names a VPC is the handler's call: only -// the store knows. +// GetSecurityGroupsForVpc returns MissingParameter for an absent VpcId (required by the model) +// before the request crosses NATS. Whether it names a VPC is the handler's call: only the store +// knows. func GetSecurityGroupsForVpc(ctx context.Context, input *ec2.GetSecurityGroupsForVpcInput, natsConn *nats.Conn, accountID string) (ec2.GetSecurityGroupsForVpcOutput, error) { var output ec2.GetSecurityGroupsForVpcOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/vpc/ModifyNetworkInterfaceAttribute.go b/spinifex/domains/ec2/awsapi/vpc/ModifyNetworkInterfaceAttribute.go index 436402c34..58799b6dd 100644 --- a/spinifex/domains/ec2/awsapi/vpc/ModifyNetworkInterfaceAttribute.go +++ b/spinifex/domains/ec2/awsapi/vpc/ModifyNetworkInterfaceAttribute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyNetworkInterfaceAttributeInput requires NetworkInterfaceId (MissingParameter) and +// then applies the handler's attribute checks. func ValidateModifyNetworkInterfaceAttributeInput(input *ec2.ModifyNetworkInterfaceAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/ModifySecurityGroupRules.go b/spinifex/domains/ec2/awsapi/vpc/ModifySecurityGroupRules.go index 2312e0282..d6b11d1a6 100644 --- a/spinifex/domains/ec2/awsapi/vpc/ModifySecurityGroupRules.go +++ b/spinifex/domains/ec2/awsapi/vpc/ModifySecurityGroupRules.go @@ -11,6 +11,8 @@ import ( "github.com/nats-io/nats.go" ) +// ModifySecurityGroupRules implements the EC2 ModifySecurityGroupRules action. It requires +// GroupId and at least one rule, and rejects malformed rule IDs before calling NATS. func ModifySecurityGroupRules(ctx context.Context, input *ec2.ModifySecurityGroupRulesInput, natsConn *nats.Conn, accountID string) (ec2.ModifySecurityGroupRulesOutput, error) { var output ec2.ModifySecurityGroupRulesOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/vpc/ModifySubnetAttribute.go b/spinifex/domains/ec2/awsapi/vpc/ModifySubnetAttribute.go index b57852e67..e4bf1bf3c 100644 --- a/spinifex/domains/ec2/awsapi/vpc/ModifySubnetAttribute.go +++ b/spinifex/domains/ec2/awsapi/vpc/ModifySubnetAttribute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifySubnetAttributeInput rejects a nil input with InvalidParameterValue and a missing +// SubnetId with MissingParameter. func ValidateModifySubnetAttributeInput(input *ec2.ModifySubnetAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/ModifyVpcAttribute.go b/spinifex/domains/ec2/awsapi/vpc/ModifyVpcAttribute.go index 97bd1cbe7..34eead557 100644 --- a/spinifex/domains/ec2/awsapi/vpc/ModifyVpcAttribute.go +++ b/spinifex/domains/ec2/awsapi/vpc/ModifyVpcAttribute.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyVpcAttributeInput rejects a nil input with InvalidParameterValue and a missing +// VpcId with MissingParameter. func ValidateModifyVpcAttributeInput(input *ec2.ModifyVpcAttributeInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions.go b/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions.go index 1afac446a..2444128e1 100644 --- a/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions.go +++ b/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions.go @@ -10,17 +10,19 @@ import ( "github.com/nats-io/nats.go" ) -// validateSGRuleDescriptions checks the sgr-<17 hex> shape before the request -// crosses NATS so a malformed ID never reaches the handler. +// validateSGRuleDescriptions rejects a rule ID AWS calls malformed before the +// request crosses NATS; whether a well-formed ID exists is the handler's to answer. func validateSGRuleDescriptions(descriptions []*ec2.SecurityGroupRuleDescription) error { for _, d := range descriptions { - if d == nil || d.SecurityGroupRuleId == nil || !ec2vpc.SGRuleIDRegex.MatchString(*d.SecurityGroupRuleId) { + if d == nil || d.SecurityGroupRuleId == nil || ec2vpc.SGRuleIDIsMalformed(*d.SecurityGroupRuleId) { return errors.New(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed) } } return nil } +// UpdateSecurityGroupRuleDescriptionsIngress implements the EC2 action of the same name, +// requiring GroupId and validating each rule description before calling the NATS VPC service. func UpdateSecurityGroupRuleDescriptionsIngress(ctx context.Context, input *ec2.UpdateSecurityGroupRuleDescriptionsIngressInput, natsConn *nats.Conn, accountID string) (ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput, error) { var output ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput if input == nil { @@ -40,6 +42,8 @@ func UpdateSecurityGroupRuleDescriptionsIngress(ctx context.Context, input *ec2. return *result, nil } +// UpdateSecurityGroupRuleDescriptionsEgress implements the EC2 action of the same name, requiring +// GroupId and validating each rule description before calling the NATS VPC service. func UpdateSecurityGroupRuleDescriptionsEgress(ctx context.Context, input *ec2.UpdateSecurityGroupRuleDescriptionsEgressInput, natsConn *nats.Conn, accountID string) (ec2.UpdateSecurityGroupRuleDescriptionsEgressOutput, error) { var output ec2.UpdateSecurityGroupRuleDescriptionsEgressOutput if input == nil { diff --git a/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions_test.go b/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions_test.go index c5d0aa29e..9e13bff54 100644 --- a/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions_test.go +++ b/spinifex/domains/ec2/awsapi/vpc/UpdateSecurityGroupRuleDescriptions_test.go @@ -35,7 +35,7 @@ func TestUpdateSecurityGroupRuleDescriptions_MissingGroupId(t *testing.T) { } func TestUpdateSecurityGroupRuleDescriptions_MalformedRuleID(t *testing.T) { - for _, bad := range []string{"sgr-toolong0123456789abcdef", "sgr-XYZ", "sg-0123456789abcdef0", ""} { + for _, bad := range []string{"sgr-toolong0123456789abcdef", "SGR-0123456789abcdef0", "sg-0123456789abcdef0", ""} { _, err := ec2vpcapi.UpdateSecurityGroupRuleDescriptionsIngress(context.Background(), &ec2.UpdateSecurityGroupRuleDescriptionsIngressInput{ GroupId: aws.String("sg-0123456789abcdef0"), SecurityGroupRuleDescriptions: []*ec2.SecurityGroupRuleDescription{ diff --git a/spinifex/domains/ec2/awsapi/zone/AvailabilityZone.go b/spinifex/domains/ec2/awsapi/zone/AvailabilityZone.go index 513012376..edb73e45e 100644 --- a/spinifex/domains/ec2/awsapi/zone/AvailabilityZone.go +++ b/spinifex/domains/ec2/awsapi/zone/AvailabilityZone.go @@ -1,3 +1,6 @@ +// Package zone implements DescribeAvailabilityZones and +// DescribeRegions, answered from the node's configured region and zone with +// AWS's filter rules. package zone import ( @@ -34,6 +37,8 @@ var ( } ) +// DescribeAvailabilityZones implements the EC2 action for the single zone az in region. Unknown +// ZoneNames or ZoneIds return InvalidParameterValue; non-matching filters yield an empty list. func DescribeAvailabilityZones(input *ec2.DescribeAvailabilityZonesInput, region string, az string) (output *ec2.DescribeAvailabilityZonesOutput, err error) { filters, err := parseFilters(input.Filters, describeAvailabilityZonesValidFilters) if err != nil { diff --git a/spinifex/domains/ec2/ebs/metadata/metadata.go b/spinifex/domains/ec2/ebs/metadata/metadata.go index 4bf7e8235..274239e83 100644 --- a/spinifex/domains/ec2/ebs/metadata/metadata.go +++ b/spinifex/domains/ec2/ebs/metadata/metadata.go @@ -163,11 +163,15 @@ func key(kind, id string) (string, error) { return "spinifex/ebsmetadata/v2/" + kind + "/" + id + ".json", nil } +// MarshalVolume encodes volume as JSON, stamping the current SchemaVersion over +// whatever the caller set. func MarshalVolume(volume Volume) ([]byte, error) { volume.SchemaVersion = SchemaVersion return json.Marshal(volume) } +// UnmarshalVolume decodes a stored volume document. Malformed JSON or a schema +// version other than SchemaVersion returns an error wrapping ErrCorruptDocument. func UnmarshalVolume(data []byte) (Volume, error) { var volume Volume if err := json.Unmarshal(data, &volume); err != nil { @@ -179,11 +183,15 @@ func UnmarshalVolume(data []byte) (Volume, error) { return volume, nil } +// MarshalSnapshot encodes snapshot as JSON, stamping the current SchemaVersion over +// whatever the caller set. func MarshalSnapshot(snapshot Snapshot) ([]byte, error) { snapshot.SchemaVersion = SchemaVersion return json.Marshal(snapshot) } +// UnmarshalSnapshot decodes a stored snapshot document. Malformed JSON or a schema +// version other than SchemaVersion returns an error wrapping ErrCorruptDocument. func UnmarshalSnapshot(data []byte) (Snapshot, error) { var snapshot Snapshot if err := json.Unmarshal(data, &snapshot); err != nil { @@ -195,11 +203,15 @@ func UnmarshalSnapshot(data []byte) (Snapshot, error) { return snapshot, nil } +// MarshalAMI encodes ami as JSON, stamping the current SchemaVersion over +// whatever the caller set. func MarshalAMI(ami AMI) ([]byte, error) { ami.SchemaVersion = SchemaVersion return json.Marshal(ami) } +// UnmarshalAMI decodes a stored AMI document. Malformed JSON or a schema +// version other than SchemaVersion returns an error wrapping ErrCorruptDocument. func UnmarshalAMI(data []byte) (AMI, error) { var ami AMI if err := json.Unmarshal(data, &ami); err != nil { diff --git a/spinifex/domains/ec2/ebs/metadata/store.go b/spinifex/domains/ec2/ebs/metadata/store.go index 8437d5eb5..b6efa7159 100644 --- a/spinifex/domains/ec2/ebs/metadata/store.go +++ b/spinifex/domains/ec2/ebs/metadata/store.go @@ -23,6 +23,7 @@ type Store struct { bucket string } +// NewStore returns a Store that keeps its documents in bucket on objects. func NewStore(objects objectstore.ObjectStore, bucket string) *Store { return &Store{objects: objects, bucket: bucket} } diff --git a/spinifex/domains/ec2/ebs/policy/gp3.go b/spinifex/domains/ec2/ebs/policy/gp3.go index bae8cdbce..d0d83c998 100644 --- a/spinifex/domains/ec2/ebs/policy/gp3.go +++ b/spinifex/domains/ec2/ebs/policy/gp3.go @@ -1,9 +1,34 @@ // Package ebspolicy owns EC2 EBS product policy that the control plane exposes. package ebspolicy +import ( + "strings" + + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" +) + // VolumeTypeGP3 is the only EBS volume type this platform currently serves. const VolumeTypeGP3 = "gp3" +// SupportedVolumeTypes lists the EBS volume types CreateVolume accepts. +var SupportedVolumeTypes = []string{VolumeTypeGP3} + +// ValidateVolumeType accepts an empty type (the gp3 default) or a supported one, +// matched case-insensitively as EC2 does, and answers UnknownVolumeType otherwise. +func ValidateVolumeType(volumeType string) error { + if volumeType == "" { + return nil + } + for _, t := range SupportedVolumeTypes { + if strings.EqualFold(volumeType, t) { + return nil + } + } + return awserrors.Errorf(awserrors.ErrorUnknownVolumeType, + "Unsupported volume type '%s' for volume creation. Supported volume types: %s.", + volumeType, strings.Join(SupportedVolumeTypes, ", ")) +} + const ( // GP3 IOPS envelope (AWS): 3000 baseline on any size, up to 500 IOPS/GiB, // capped at 16000. diff --git a/spinifex/domains/ec2/ebs/policy/volume_type_test.go b/spinifex/domains/ec2/ebs/policy/volume_type_test.go new file mode 100644 index 000000000..b894276a0 --- /dev/null +++ b/spinifex/domains/ec2/ebs/policy/volume_type_test.go @@ -0,0 +1,43 @@ +package ebspolicy + +import ( + "strings" + "testing" + + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestValidateVolumeType_AcceptsEmptyAndSupportedInAnyCase(t *testing.T) { + assert.NoError(t, ValidateVolumeType("")) + for _, vt := range SupportedVolumeTypes { + assert.NoError(t, ValidateVolumeType(vt)) + assert.NoError(t, ValidateVolumeType(strings.ToUpper(vt))) + } +} + +// gp3 is the only type served; the other types AWS accepts are refused, not +// aliased to gp3. +func TestValidateVolumeType_RejectsOtherAWSTypes(t *testing.T) { + for _, vt := range []string{"gp2", "io1", "io2", "st1", "sc1", "standard"} { + code, _, ok := awserrors.ResolveErrorDetail(ValidateVolumeType(vt)) + require.True(t, ok, vt) + assert.Equal(t, awserrors.ErrorUnknownVolumeType, code, vt) + } +} + +func TestValidateVolumeType_MessageNamesExactlyTheAcceptedSet(t *testing.T) { + code, message, ok := awserrors.ResolveErrorDetail(ValidateVolumeType("foo")) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorUnknownVolumeType, code) + + const prefix = "Unsupported volume type 'foo' for volume creation. Supported volume types: " + require.True(t, strings.HasPrefix(message, prefix), message) + named := strings.Split(strings.TrimSuffix(strings.TrimPrefix(message, prefix), "."), ", ") + + assert.ElementsMatch(t, SupportedVolumeTypes, named) + for _, vt := range named { + assert.NoError(t, ValidateVolumeType(vt), "the message names %q, so it must be accepted", vt) + } +} diff --git a/spinifex/domains/ec2/eigw/service.go b/spinifex/domains/ec2/eigw/service.go index 5a73a7bec..3f2bd135b 100644 --- a/spinifex/domains/ec2/eigw/service.go +++ b/spinifex/domains/ec2/eigw/service.go @@ -1,3 +1,6 @@ +// Package eigw implements the EC2 egress-only internet gateway +// actions: the EgressOnlyIGWService contract, its daemon-side JetStream KV +// implementation and its NATS client. package eigw import ( diff --git a/spinifex/domains/ec2/eip/disabled.go b/spinifex/domains/ec2/eip/disabled.go index 83ea74ab4..b0ba8a186 100644 --- a/spinifex/domains/ec2/eip/disabled.go +++ b/spinifex/domains/ec2/eip/disabled.go @@ -15,6 +15,7 @@ type DisabledEIPService struct{} var _ EIPService = (*DisabledEIPService)(nil) +// NewDisabledEIPService returns the EIPService used when the cluster has no external IPAM. func NewDisabledEIPService() *DisabledEIPService { return &DisabledEIPService{} } func (s *DisabledEIPService) AllocateAddress(_ context.Context, _ *ec2.AllocateAddressInput, _ string) (*ec2.AllocateAddressOutput, error) { diff --git a/spinifex/domains/ec2/eip/service.go b/spinifex/domains/ec2/eip/service.go index 7de8dca59..6cb74e75a 100644 --- a/spinifex/domains/ec2/eip/service.go +++ b/spinifex/domains/ec2/eip/service.go @@ -1,3 +1,6 @@ +// Package eip implements the EC2 Elastic IP actions: the +// EIPService contract, its daemon-side JetStream KV implementation that draws +// addresses from the external IPAM pools, and its NATS client. package eip import ( diff --git a/spinifex/domains/ec2/guestmetadata/service.go b/spinifex/domains/ec2/guestmetadata/service.go index 40d34ed7e..eb956d35d 100644 --- a/spinifex/domains/ec2/guestmetadata/service.go +++ b/spinifex/domains/ec2/guestmetadata/service.go @@ -1,3 +1,6 @@ +// Package guestmetadata is the EC2 Instance Metadata Service that vpcd serves +// at 169.254.169.254: one responder per local instance tap, IMDSv2 tokens, +// instance-role credentials minted through STS, and the guest DNS forwarder. package guestmetadata import ( diff --git a/spinifex/domains/ec2/igw/service.go b/spinifex/domains/ec2/igw/service.go index 3d058b404..5ed686974 100644 --- a/spinifex/domains/ec2/igw/service.go +++ b/spinifex/domains/ec2/igw/service.go @@ -1,3 +1,6 @@ +// Package igw implements the EC2 internet gateway actions: the +// IGWService contract, its daemon-side JetStream KV implementation and its NATS +// client. package igw import ( diff --git a/spinifex/domains/ec2/image/service.go b/spinifex/domains/ec2/image/service.go index fe62ed14d..446eda404 100644 --- a/spinifex/domains/ec2/image/service.go +++ b/spinifex/domains/ec2/image/service.go @@ -1,3 +1,6 @@ +// Package image implements the EC2 AMI actions: the ImageService +// contract, its daemon-side implementation over the object store and its NATS +// client. package image import ( diff --git a/spinifex/domains/ec2/image/service_impl.go b/spinifex/domains/ec2/image/service_impl.go index d88c9441a..dfa50a115 100644 --- a/spinifex/domains/ec2/image/service_impl.go +++ b/spinifex/domains/ec2/image/service_impl.go @@ -901,6 +901,8 @@ func (s *ImageServiceImpl) CopyImage(ctx context.Context, input *ec2.CopyImageIn ImageOwnerAlias: accountID, CreationDate: time.Now().UTC(), BootMode: srcMeta.BootMode, + Distro: srcMeta.Distro, + DistroFamily: srcMeta.DistroFamily, Tags: tags, SourceDigest: srcMeta.SourceDigest, // Zero-copy: the new config shares the source's already-durable diff --git a/spinifex/domains/ec2/image/service_impl_test.go b/spinifex/domains/ec2/image/service_impl_test.go index 461cbc109..53e726e3f 100644 --- a/spinifex/domains/ec2/image/service_impl_test.go +++ b/spinifex/domains/ec2/image/service_impl_test.go @@ -1781,6 +1781,8 @@ func TestCopyImage_InheritsSourceFields(t *testing.T) { RootDeviceType: "ebs", Description: "arm source", BootMode: "uefi", + Distro: "debian-12", + DistroFamily: "debian", SourceDigest: digest, }) @@ -1796,6 +1798,8 @@ func TestCopyImage_InheritsSourceFields(t *testing.T) { assert.Equal(t, uint64(32), newMeta.VolumeSizeGiB) assert.Equal(t, "ebs", newMeta.RootDeviceType) assert.Equal(t, "uefi", newMeta.BootMode, "CopyImage must propagate BootMode from source") + assert.Equal(t, "debian-12", newMeta.Distro, "CopyImage must propagate Distro from source") + assert.Equal(t, "debian", newMeta.DistroFamily, "cloud-init family detection reads DistroFamily") assert.Equal(t, digest, newMeta.SourceDigest, "a zero-copy share still holds the source artifact") assert.False(t, newMeta.CreationDate.Before(before), "CreationDate must be refreshed on copy, not inherited") } diff --git a/spinifex/domains/ec2/instance/service.go b/spinifex/domains/ec2/instance/service.go index c351d7fa8..87d901939 100644 --- a/spinifex/domains/ec2/instance/service.go +++ b/spinifex/domains/ec2/instance/service.go @@ -1,3 +1,6 @@ +// Package instance implements the EC2 instance actions: the +// InstanceService contract, its daemon-side implementation that launches and +// describes instances on this node, and its NATS client. package instance import ( diff --git a/spinifex/domains/ec2/instancetypes/definitions.go b/spinifex/domains/ec2/instancetypes/definitions.go index 12cb9dce9..abcf807af 100644 --- a/spinifex/domains/ec2/instancetypes/definitions.go +++ b/spinifex/domains/ec2/instancetypes/definitions.go @@ -1,3 +1,6 @@ +// Package instancetypes generates the EC2 instance types a node offers from its +// CPU and GPUs and answers per-type questions such as vCPUs, memory, GPU +// count and ENI limits. package instancetypes import ( @@ -282,6 +285,8 @@ var builtinGPUTiers = []int{2, 4, 8} // every tier so no gpu.* shape is one EC2 would find unfamiliar. const builtinGPUMemPerVCPUGB = 4 +// IsBuiltinGPUType reports whether instanceType is in the built-in gpu.* family +// (gpu.xc). It checks the prefix only, not that the size exists. func IsBuiltinGPUType(instanceType string) bool { return strings.HasPrefix(instanceType, builtinGPUPrefix) } diff --git a/spinifex/domains/ec2/key/service.go b/spinifex/domains/ec2/key/service.go index 39cca8a8b..b464074a2 100644 --- a/spinifex/domains/ec2/key/service.go +++ b/spinifex/domains/ec2/key/service.go @@ -1,3 +1,6 @@ +// Package key implements the EC2 key pair actions: the KeyService +// contract, its daemon-side implementation over the object store, and the NATS +// client and IMDS lookup that serve a key's public material. package key import ( diff --git a/spinifex/domains/ec2/launchtemplate/service.go b/spinifex/domains/ec2/launchtemplate/service.go index 87006403b..56f23154a 100644 --- a/spinifex/domains/ec2/launchtemplate/service.go +++ b/spinifex/domains/ec2/launchtemplate/service.go @@ -1,3 +1,6 @@ +// Package launchtemplate implements the EC2 launch template +// actions: the LaunchTemplateService contract, its daemon-side JetStream KV +// implementation with immutable versions, and its NATS client. package launchtemplate import ( diff --git a/spinifex/domains/ec2/launchtemplate/service_impl.go b/spinifex/domains/ec2/launchtemplate/service_impl.go index 3e3b7f436..47c4de509 100644 --- a/spinifex/domains/ec2/launchtemplate/service_impl.go +++ b/spinifex/domains/ec2/launchtemplate/service_impl.go @@ -260,9 +260,9 @@ func (s *LaunchTemplateServiceImpl) resolveVersionNumber(ctx context.Context, ac // --- CreateLaunchTemplate --- -// ClientToken is accepted but not stored: claimName reserves the name with an -// atomic Create, so a duplicate request cannot make a second template. It gets -// AlreadyExists where AWS would replay the first response. +// CreateLaunchTemplate implements the EC2 action. ClientToken is accepted but not stored: claimName +// reserves the name with an atomic Create, so a duplicate request cannot make a second template. It +// gets AlreadyExists where AWS would replay the first response. func (s *LaunchTemplateServiceImpl) CreateLaunchTemplate(ctx context.Context, input *ec2.CreateLaunchTemplateInput, accountID string) (*ec2.CreateLaunchTemplateOutput, error) { if input.LaunchTemplateData == nil { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -441,9 +441,9 @@ func (s *LaunchTemplateServiceImpl) CreateLaunchTemplateVersion(ctx context.Cont // --- ModifyLaunchTemplate --- -// ClientToken is accepted but not stored: this only moves the default version -// under a CAS, so applying the same request twice converges on the same state -// and creates nothing. +// ModifyLaunchTemplate implements the EC2 action. ClientToken is accepted but not stored: this only +// moves the default version under a CAS, so applying the same request twice converges on the same +// state and creates nothing. func (s *LaunchTemplateServiceImpl) ModifyLaunchTemplate(ctx context.Context, input *ec2.ModifyLaunchTemplateInput, accountID string) (*ec2.ModifyLaunchTemplateOutput, error) { header, entry, err := s.resolveHeader(ctx, accountID, input.LaunchTemplateId, input.LaunchTemplateName) if err != nil { diff --git a/spinifex/domains/ec2/natgw/service.go b/spinifex/domains/ec2/natgw/service.go index 91f4035e6..a0896897b 100644 --- a/spinifex/domains/ec2/natgw/service.go +++ b/spinifex/domains/ec2/natgw/service.go @@ -1,3 +1,6 @@ +// Package natgw implements the EC2 NAT gateway actions: the +// NatGatewayService contract, its daemon-side JetStream KV implementation and +// its NATS client. package natgw import ( diff --git a/spinifex/domains/ec2/placementgroup/service.go b/spinifex/domains/ec2/placementgroup/service.go index 3b8a64a85..2249d0460 100644 --- a/spinifex/domains/ec2/placementgroup/service.go +++ b/spinifex/domains/ec2/placementgroup/service.go @@ -1,3 +1,6 @@ +// Package placementgroup implements the EC2 placement group +// actions: the PlacementGroupService contract, its daemon-side JetStream KV +// implementation and its NATS client. package placementgroup import ( diff --git a/spinifex/domains/ec2/routetable/service.go b/spinifex/domains/ec2/routetable/service.go index e873cd40e..9b90b66d4 100644 --- a/spinifex/domains/ec2/routetable/service.go +++ b/spinifex/domains/ec2/routetable/service.go @@ -1,3 +1,6 @@ +// Package routetable implements the EC2 route table actions: the +// RouteTableService contract, its daemon-side JetStream KV implementation and +// its NATS client. package routetable import ( diff --git a/spinifex/domains/ec2/snapshot/service.go b/spinifex/domains/ec2/snapshot/service.go index 7f5fb562d..daab55a5e 100644 --- a/spinifex/domains/ec2/snapshot/service.go +++ b/spinifex/domains/ec2/snapshot/service.go @@ -1,3 +1,6 @@ +// Package snapshot implements the EC2 EBS snapshot actions: the +// SnapshotService contract, its daemon-side implementation over the object +// store and JetStream KV, and its NATS client. package snapshot import ( diff --git a/spinifex/domains/ec2/spotinstance/service.go b/spinifex/domains/ec2/spotinstance/service.go index b331c2aba..670d20fa8 100644 --- a/spinifex/domains/ec2/spotinstance/service.go +++ b/spinifex/domains/ec2/spotinstance/service.go @@ -1,3 +1,6 @@ +// Package spotinstance implements the EC2 Spot Instance Request +// actions: the SpotInstanceService contract, its daemon-side JetStream KV +// implementation and its NATS client. package spotinstance import ( diff --git a/spinifex/domains/ec2/tagmirror/tagmirror.go b/spinifex/domains/ec2/tagmirror/tagmirror.go index fb90fc451..fb88f4a55 100644 --- a/spinifex/domains/ec2/tagmirror/tagmirror.go +++ b/spinifex/domains/ec2/tagmirror/tagmirror.go @@ -1,3 +1,5 @@ +// Package tagmirror applies EC2 CreateTags and DeleteTags changes to the tag +// maps mirrored on resource records in JetStream KV. package tagmirror import ( diff --git a/spinifex/domains/ec2/tags/service.go b/spinifex/domains/ec2/tags/service.go index bd4e6ba4e..a4f2c52ec 100644 --- a/spinifex/domains/ec2/tags/service.go +++ b/spinifex/domains/ec2/tags/service.go @@ -1,3 +1,5 @@ +// Package tags implements the EC2 tagging actions: the TagsService +// contract, its daemon-side JetStream KV implementation and its NATS client. package tags import ( diff --git a/spinifex/domains/ec2/volume/service.go b/spinifex/domains/ec2/volume/service.go index a89b95602..df9897a5e 100644 --- a/spinifex/domains/ec2/volume/service.go +++ b/spinifex/domains/ec2/volume/service.go @@ -1,3 +1,6 @@ +// Package volume implements the EC2 EBS volume actions: the +// VolumeService contract, its daemon-side implementation over the object store +// and JetStream KV, its NATS client, and the reaper for leaked volumes. package volume import ( diff --git a/spinifex/domains/ec2/volume/service_impl.go b/spinifex/domains/ec2/volume/service_impl.go index 29ee6705d..0406a7971 100644 --- a/spinifex/domains/ec2/volume/service_impl.go +++ b/spinifex/domains/ec2/volume/service_impl.go @@ -128,9 +128,10 @@ func (s *VolumeServiceImpl) CreateVolume(ctx context.Context, input *ec2.CreateV return nil, errors.New(awserrors.ErrorAuthFailure) } - // Validate volume type: only gp3 supported (or empty defaults to gp3) - if input.VolumeType != nil && *input.VolumeType != "" && *input.VolumeType != ebspolicy.VolumeTypeGP3 { - return nil, errors.New(awserrors.ErrorUnknownVolumeType) + if input.VolumeType != nil { + if err := ebspolicy.ValidateVolumeType(*input.VolumeType); err != nil { + return nil, err + } } volumeType := ebspolicy.VolumeTypeGP3 diff --git a/spinifex/domains/ec2/volume/service_impl_test.go b/spinifex/domains/ec2/volume/service_impl_test.go index 0a7b4e5b3..bb9ee932a 100644 --- a/spinifex/domains/ec2/volume/service_impl_test.go +++ b/spinifex/domains/ec2/volume/service_impl_test.go @@ -207,8 +207,9 @@ func TestCreateVolume_Validation(t *testing.T) { t.Run(tt.name, func(t *testing.T) { svc := newTestVolumeService(tt.az) _, err := svc.CreateVolume(context.Background(), tt.input, testVolAccountID) - assert.Error(t, err) - assert.Equal(t, tt.wantErr, err.Error()) + code, _, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, tt.wantErr, code) }) } } diff --git a/spinifex/domains/ec2/vpc/security_group.go b/spinifex/domains/ec2/vpc/security_group.go index 835a33c55..444c3b105 100644 --- a/spinifex/domains/ec2/vpc/security_group.go +++ b/spinifex/domains/ec2/vpc/security_group.go @@ -29,11 +29,6 @@ import ( // sgIDRegex must stay in lockstep with awsidentifiers.GenerateResourceID("sg"). var sgIDRegex = regexp.MustCompile(`^sg-[0-9a-f]{17}$`) -// SGRuleIDRegex must stay in lockstep with awsidentifiers.GenerateResourceID("sgr"). -// Exported so the EC2 gateway can validate SecurityGroupRuleIds without -// re-implementing the format check. -var SGRuleIDRegex = regexp.MustCompile(`^sgr-[0-9a-f]{17}$`) - // allProtocols is the IpProtocol value naming every protocol, which is also // the port value AWS reports for such a rule. const allProtocols = "-1" @@ -48,11 +43,13 @@ var canonicalIPProtocols = []string{"tcp", "udp", "icmp", "-1"} var numericIPProtocols = map[string]string{"1": "icmp", "6": "tcp", "17": "udp"} // normalizeIPProtocol canonicalises an AWS IpProtocol value the way AWS does, -// returning "tcp" for both "tcp" and "6". An empty value means all protocols. +// returning "tcp" for both "tcp" and "6". An empty value is rejected as AWS +// rejects it: reading it as all protocols would open every port. func normalizeIPProtocol(proto string) (string, error) { proto = strings.ToLower(strings.TrimSpace(proto)) if proto == "" { - return "-1", nil + return "", awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + "Invalid value 'null' for protocol. VPC security group rules must specify protocols explicitly.") } if name, ok := numericIPProtocols[proto]; ok { return name, nil @@ -60,7 +57,18 @@ func normalizeIPProtocol(proto string) (string, error) { if slices.Contains(canonicalIPProtocols, proto) { return proto, nil } - return "", fmt.Errorf("invalid IpProtocol %q: supported values are tcp, udp, icmp, -1 (or 6, 17, 1)", proto) + return "", awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + "invalid IpProtocol %q: supported values are tcp, udp, icmp, -1 (or 6, 17, 1)", proto) +} + +// requireSGRulePorts rejects a tcp or udp rule missing either port, which would +// otherwise be stored as port 0. +func requireSGRulePorts(proto string, fromPort, toPort *int64) error { + if (proto == "tcp" || proto == "udp") && (fromPort == nil || toPort == nil) { + return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + "Invalid value for portRange. Must specify both from and to ports with TCP/UDP.") + } + return nil } // validateSGRulePorts rejects a tcp or udp rule whose FromPort exceeds its ToPort. @@ -889,7 +897,7 @@ func (s *VPCServiceImpl) DescribeSecurityGroupRules(ctx context.Context, input * for _, id := range input.SecurityGroupRuleIds { if !emitted[*id] { - return nil, sgRuleNotFoundError(*id) + return nil, sgRuleIDLookupError(*id) } } @@ -1244,6 +1252,9 @@ func (s *VPCServiceImpl) RevokeSecurityGroupIngress(ctx context.Context, input * revokeRules, err := ipPermissionsToSGRules(input.IpPermissions, sgParseRevoke) if err != nil { slog.WarnContext(ctx, "RevokeSecurityGroupIngress: invalid rule", "groupId", groupId, "err", err) + if _, ok := awserrors.ResolveErrorCode(err); ok { + return nil, err + } return nil, errors.New(awserrors.ErrorInvalidParameterValue) } idRules, err := resolveRuleIDsToRemove(record.IngressRules, input.SecurityGroupRuleIds) @@ -1311,6 +1322,9 @@ func (s *VPCServiceImpl) RevokeSecurityGroupEgress(ctx context.Context, input *e revokeRules, err := ipPermissionsToSGRules(input.IpPermissions, sgParseRevoke) if err != nil { slog.WarnContext(ctx, "RevokeSecurityGroupEgress: invalid rule", "groupId", groupId, "err", err) + if _, ok := awserrors.ResolveErrorCode(err); ok { + return nil, err + } return nil, errors.New(awserrors.ErrorInvalidParameterValue) } idRules, err := resolveRuleIDsToRemove(record.EgressRules, input.SecurityGroupRuleIds) @@ -1490,14 +1504,11 @@ func applySGRuleDescriptions(rules []SGRule, descriptions []*ec2.SecurityGroupRu return nil, errors.New(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed) } id := *d.SecurityGroupRuleId - if !SGRuleIDRegex.MatchString(id) { - return nil, errors.New(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed) - } // A rule on the other side, in another group or in another account is // absent from this record and so is not-found, never a silent no-op. i, ok := byID[id] if !ok { - return nil, sgRuleNotFoundError(id) + return nil, sgRuleIDLookupError(id) } if d.Description != nil { out[i].Description = *d.Description @@ -1771,21 +1782,16 @@ func sgRuleRequestToSGRule(req *ec2.SecurityGroupRuleRequest) (SGRule, error) { return SGRule{}, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "No value specified for securityGroupRule.") } - if strings.TrimSpace(aws.StringValue(req.IpProtocol)) == "" { - return SGRule{}, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "Invalid value 'null' for protocol. VPC security group rules must specify protocols explicitly.") - } - proto, err := normalizeIPProtocol(*req.IpProtocol) + proto, err := normalizeIPProtocol(aws.StringValue(req.IpProtocol)) if err != nil { - return SGRule{}, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "%s", err) + return SGRule{}, err } r := SGRule{IpProtocol: proto, Description: aws.StringValue(req.Description)} switch proto { case "tcp", "udp": - if req.FromPort == nil || req.ToPort == nil { - return SGRule{}, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "Invalid value for portRange. Must specify both from and to ports with TCP/UDP.") + if err := requireSGRulePorts(proto, req.FromPort, req.ToPort); err != nil { + return SGRule{}, err } r.FromPort, r.ToPort = *req.FromPort, *req.ToPort if err := validateSGRulePorts(proto, r.FromPort, r.ToPort); err != nil { @@ -1852,8 +1858,8 @@ func sgRuleSourceField(r SGRule) string { const sgRuleIDMaxSuffix = 17 // SGRuleIDIsMalformed reports whether AWS rejects id as malformed: it lacks the -// lowercase "sgr-" prefix or has too long a suffix. Looser than SGRuleIDRegex, -// because AWS answers NotFound for a short or non-hex suffix such as sgr-xyz. +// lowercase "sgr-" prefix or has too long a suffix. AWS answers NotFound, not +// Malformed, for a short or non-hex suffix such as sgr-xyz. func SGRuleIDIsMalformed(id string) bool { suffix, ok := strings.CutPrefix(id, "sgr-") return !ok || len(suffix) > sgRuleIDMaxSuffix @@ -1865,10 +1871,6 @@ func sgRuleIDLookupError(id string) error { if SGRuleIDIsMalformed(id) { return awserrors.Errorf(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, "Invalid id: %q", id) } - return sgRuleNotFoundError(id) -} - -func sgRuleNotFoundError(id string) error { return awserrors.IDNotFound(awserrors.ErrorInvalidSecurityGroupRuleIdNotFound, "security group rule", id) } @@ -1925,10 +1927,18 @@ func ipPermissionsToSGRules(perms []*ec2.IpPermission, mode sgParseMode) ([]SGRu toPort = *perm.ToPort } if mode == sgParseAuthorize { + if err := requireSGRulePorts(proto, perm.FromPort, perm.ToPort); err != nil { + return nil, err + } if err := validateSGRulePorts(proto, fromPort, toPort); err != nil { return nil, err } } + // AWS ignores the ports of an all-protocol rule. Storing 0/0, as the + // default egress rule is, keeps new rules uniform with it. + if proto == allProtocols { + fromPort, toPort = 0, 0 + } appended := false for _, ipRange := range perm.IpRanges { @@ -2005,6 +2015,10 @@ func sgRulesToIpPermissions(rules []SGRule, accountID string) []*ec2.IpPermissio grouped := make(map[permKey]*ec2.IpPermission) for _, rule := range rules { key := permKey{IpProtocol: rule.IpProtocol, FromPort: rule.FromPort, ToPort: rule.ToPort} + // An all-protocol rule stored with -1/-1 is the same permission as 0/0. + if rule.IpProtocol == allProtocols { + key.FromPort, key.ToPort = 0, 0 + } perm, exists := grouped[key] if !exists { perm = &ec2.IpPermission{IpProtocol: aws.String(rule.IpProtocol)} @@ -2129,12 +2143,9 @@ func resolveRuleIDsToRemove(existing []SGRule, ruleIDs []*string) ([]SGRule, err if idp == nil || *idp == "" { continue } - if !SGRuleIDRegex.MatchString(*idp) { - return nil, errors.New(awserrors.ErrorInvalidSecurityGroupRuleIdMalformed) - } r, ok := byID[*idp] if !ok { - return nil, sgRuleNotFoundError(*idp) + return nil, sgRuleIDLookupError(*idp) } out = append(out, r) } diff --git a/spinifex/domains/ec2/vpc/security_group_rule_validation_test.go b/spinifex/domains/ec2/vpc/security_group_rule_validation_test.go new file mode 100644 index 000000000..775a042f2 --- /dev/null +++ b/spinifex/domains/ec2/vpc/security_group_rule_validation_test.go @@ -0,0 +1,229 @@ +//test:in-package — builds on the package's unexported SG fixtures +//(setupTestVPCService, createTestSG, storedSGRecord) and plants rules in the +//stored record that no exported API can create. + +package vpc + +import ( + "context" + "encoding/json" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/mulgadc/spinifex/spinifex/foundation/state/kvutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func authorizeIngress(svc *VPCServiceImpl, sgID string, perm *ec2.IpPermission) error { + _, err := svc.AuthorizeSecurityGroupIngress(context.Background(), &ec2.AuthorizeSecurityGroupIngressInput{ + GroupId: aws.String(sgID), + IpPermissions: []*ec2.IpPermission{perm}, + }, testAccountID) + return err +} + +// plantIngressRules appends rules straight to the stored record, standing in +// for rules written before the current validation existed. +func plantIngressRules(t *testing.T, svc *VPCServiceImpl, sgID string, rules ...SGRule) { + t.Helper() + var rec SecurityGroupRecord + require.NoError(t, json.Unmarshal(storedSGRecord(t, svc, sgID), &rec)) + rec.IngressRules = append(rec.IngressRules, rules...) + data, err := json.Marshal(rec) + require.NoError(t, err) + _, err = svc.sgKV.Put(t.Context(), kvutil.AccountKey(testAccountID, sgID), data) + require.NoError(t, err) +} + +// An omitted protocol must not be read as all protocols, which would open +// every port to the CIDR. +func TestAuthorizeSecurityGroup_RequiresProtocol(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "no-proto-sg") + before := storedSGRecord(t, svc, sgID) + const msg = "Invalid value 'null' for protocol. VPC security group rules must specify protocols explicitly." + + for _, proto := range []*string{nil, aws.String(""), aws.String(" ")} { + perm := &ec2.IpPermission{ + IpProtocol: proto, FromPort: aws.Int64(80), ToPort: aws.Int64(80), + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + } + requireAWSError(t, authorizeIngress(svc, sgID, perm), awserrors.ErrorInvalidParameterValue, msg) + + _, err := svc.AuthorizeSecurityGroupEgress(context.Background(), &ec2.AuthorizeSecurityGroupEgressInput{ + GroupId: aws.String(sgID), IpPermissions: []*ec2.IpPermission{perm}, + }, testAccountID) + requireAWSError(t, err, awserrors.ErrorInvalidParameterValue, msg) + } + assert.Equal(t, before, storedSGRecord(t, svc, sgID), "a rejected authorize must store nothing") +} + +// A revoke without a protocol must not match the all-traffic rule. +func TestRevokeSecurityGroupEgress_RequiresProtocol(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "revoke-no-proto-sg") + before := storedSGRecord(t, svc, sgID) + + _, err := svc.RevokeSecurityGroupEgress(context.Background(), &ec2.RevokeSecurityGroupEgressInput{ + GroupId: aws.String(sgID), + IpPermissions: []*ec2.IpPermission{{ + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("0.0.0.0/0")}}, + }}, + }, testAccountID) + requireAWSCode(t, err, awserrors.ErrorInvalidParameterValue) + assert.Equal(t, before, storedSGRecord(t, svc, sgID), "the default egress rule must survive") +} + +func TestAuthorizeSecurityGroupIngress_TCPUDPRequireBothPorts(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "no-ports-sg") + before := storedSGRecord(t, svc, sgID) + + for _, proto := range []string{"tcp", "6", "udp", "17"} { + for _, ports := range [][2]*int64{{nil, nil}, {aws.Int64(80), nil}, {nil, aws.Int64(80)}} { + err := authorizeIngress(svc, sgID, &ec2.IpPermission{ + IpProtocol: aws.String(proto), FromPort: ports[0], ToPort: ports[1], + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + }) + requireAWSError(t, err, awserrors.ErrorInvalidParameterValue, + "Invalid value for portRange. Must specify both from and to ports with TCP/UDP.") + } + } + assert.Equal(t, before, storedSGRecord(t, svc, sgID), "a rejected authorize must store nothing") +} + +// An all-protocol rule is one rule whatever ports it was sent with, so a +// second authorize differing only in ports is a duplicate. +func TestAuthorizeSecurityGroupIngress_AllProtocolPortsShareIdentity(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "all-proto-identity-sg") + + out, err := svc.AuthorizeSecurityGroupIngress(context.Background(), &ec2.AuthorizeSecurityGroupIngressInput{ + GroupId: aws.String(sgID), + IpPermissions: []*ec2.IpPermission{{ + IpProtocol: aws.String("-1"), FromPort: aws.Int64(-1), ToPort: aws.Int64(-1), + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + }}, + }, testAccountID) + require.NoError(t, err) + require.Len(t, out.SecurityGroupRules, 1) + stored := storedSGRule(t, svc, sgID, aws.StringValue(out.SecurityGroupRules[0].SecurityGroupRuleId)) + assert.Equal(t, [2]int64{0, 0}, [2]int64{stored.FromPort, stored.ToPort}, "stored in the default egress rule's form") + + err = authorizeIngress(svc, sgID, &ec2.IpPermission{ + IpProtocol: aws.String("-1"), + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + }) + requireAWSCode(t, err, awserrors.ErrorInvalidPermissionDuplicate) +} + +// A rule stored with -1/-1 before authorize canonicalised the ports is the +// same rule as its 0/0 form for duplicate checks, revoke and reporting. +func TestAllProtocolRuleStoredWithMinusOnePorts(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "legacy-all-proto-sg") + plantIngressRules(t, svc, sgID, + SGRule{RuleId: "sgr-0000000000000000a", IpProtocol: "-1", FromPort: -1, ToPort: -1, CidrIp: "10.0.0.0/24"}, + SGRule{RuleId: "sgr-0000000000000000b", IpProtocol: "-1", FromPort: 0, ToPort: 0, CidrIp: "10.0.1.0/24"}, + ) + + err := authorizeIngress(svc, sgID, &ec2.IpPermission{ + IpProtocol: aws.String("-1"), + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + }) + requireAWSCode(t, err, awserrors.ErrorInvalidPermissionDuplicate) + + desc, err := svc.DescribeSecurityGroups(context.Background(), &ec2.DescribeSecurityGroupsInput{ + GroupIds: []*string{aws.String(sgID)}, + }, testAccountID) + require.NoError(t, err) + require.Len(t, desc.SecurityGroups, 1) + require.Len(t, desc.SecurityGroups[0].IpPermissions, 1, "both rules are one all-protocol permission") + assert.Len(t, desc.SecurityGroups[0].IpPermissions[0].IpRanges, 2) + + _, err = svc.RevokeSecurityGroupIngress(context.Background(), &ec2.RevokeSecurityGroupIngressInput{ + GroupId: aws.String(sgID), + IpPermissions: []*ec2.IpPermission{{ + IpProtocol: aws.String("-1"), + IpRanges: []*ec2.IpRange{{CidrIp: aws.String("10.0.0.0/24")}}, + }}, + }, testAccountID) + require.NoError(t, err) + var rec SecurityGroupRecord + require.NoError(t, json.Unmarshal(storedSGRecord(t, svc, sgID), &rec)) + require.Len(t, rec.IngressRules, 1) + assert.Equal(t, "sgr-0000000000000000b", rec.IngressRules[0].RuleId) +} + +// AWS calls a rule ID malformed only without the lowercase sgr- prefix or with +// more than 17 characters after it; anything else that matches no rule is +// not found. Every operation taking a rule ID must agree. +func TestSecurityGroupRuleIDClassification(t *testing.T) { + t.Parallel() + svc := setupTestVPCService(t) + vpcID := createTestVPC(t, svc, "10.0.0.0/16") + sgID := createTestSG(t, svc, vpcID, "rule-id-class-sg") + + ops := map[string]func(id string) error{ + "DescribeSecurityGroupRules": func(id string) error { + _, err := svc.DescribeSecurityGroupRules(context.Background(), &ec2.DescribeSecurityGroupRulesInput{ + SecurityGroupRuleIds: []*string{aws.String(id)}, + }, testAccountID) + return err + }, + "RevokeSecurityGroupIngress": func(id string) error { + _, err := svc.RevokeSecurityGroupIngress(context.Background(), &ec2.RevokeSecurityGroupIngressInput{ + GroupId: aws.String(sgID), SecurityGroupRuleIds: []*string{aws.String(id)}, + }, testAccountID) + return err + }, + "RevokeSecurityGroupEgress": func(id string) error { + _, err := svc.RevokeSecurityGroupEgress(context.Background(), &ec2.RevokeSecurityGroupEgressInput{ + GroupId: aws.String(sgID), SecurityGroupRuleIds: []*string{aws.String(id)}, + }, testAccountID) + return err + }, + "UpdateSecurityGroupRuleDescriptionsIngress": func(id string) error { + return updateIngressDescription(svc, sgID, id, "x") + }, + "UpdateSecurityGroupRuleDescriptionsEgress": func(id string) error { + _, err := svc.UpdateSecurityGroupRuleDescriptionsEgress(context.Background(), &ec2.UpdateSecurityGroupRuleDescriptionsEgressInput{ + GroupId: aws.String(sgID), + SecurityGroupRuleDescriptions: []*ec2.SecurityGroupRuleDescription{ + {SecurityGroupRuleId: aws.String(id), Description: aws.String("x")}, + }, + }, testAccountID) + return err + }, + } + ids := map[string]string{ + "sgr-xyz": awserrors.ErrorInvalidSecurityGroupRuleIdNotFound, + "sgr-0123-4567": awserrors.ErrorInvalidSecurityGroupRuleIdNotFound, + "sgr-": awserrors.ErrorInvalidSecurityGroupRuleIdNotFound, + "sgr-00000000000000000": awserrors.ErrorInvalidSecurityGroupRuleIdNotFound, + "SGR-00000000000000000": awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, + "sgr-000000000000000000": awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, + "not-a-rule-id": awserrors.ErrorInvalidSecurityGroupRuleIdMalformed, + } + for name, op := range ops { + for id, code := range ids { + t.Run(name+"/"+id, func(t *testing.T) { + t.Parallel() + requireAWSCode(t, op(id), code) + }) + } + } +} diff --git a/spinifex/domains/ec2/vpc/security_group_test.go b/spinifex/domains/ec2/vpc/security_group_test.go index c137fc345..4bc885592 100644 --- a/spinifex/domains/ec2/vpc/security_group_test.go +++ b/spinifex/domains/ec2/vpc/security_group_test.go @@ -1098,7 +1098,6 @@ func TestValidateSGRule_Protocol(t *testing.T) { func TestNormalizeIPProtocol(t *testing.T) { t.Parallel() cases := map[string]string{ - "": "-1", "-1": "-1", "tcp": "tcp", "TCP": "tcp", @@ -1114,8 +1113,9 @@ func TestNormalizeIPProtocol(t *testing.T) { assert.Equal(t, want, got, "protocol %q", in) } - // 58/icmpv6 is rejected with the rest: the ACL builder is IPv4-only. - for _, in := range []string{"58", "icmpv6", "47", "50", "0", "256", "banana", "tcp; drop"} { + // 58/icmpv6 is rejected with the rest: the ACL builder is IPv4-only. An + // empty protocol is rejected rather than read as all protocols. + for _, in := range []string{"", "58", "icmpv6", "47", "50", "0", "256", "banana", "tcp; drop"} { _, err := normalizeIPProtocol(in) assert.Error(t, err, "protocol %q", in) } diff --git a/spinifex/domains/ec2/vpc/service.go b/spinifex/domains/ec2/vpc/service.go index 7ec60f7ae..89a4849c0 100644 --- a/spinifex/domains/ec2/vpc/service.go +++ b/spinifex/domains/ec2/vpc/service.go @@ -1,3 +1,6 @@ +// Package vpc implements the EC2 VPC, subnet, network interface +// and security group actions: the VPCService contract, its daemon-side +// JetStream KV implementation with the internal and external IPAM, and its NATS client. package vpc import ( diff --git a/spinifex/domains/ecr/awsapi/authz.go b/spinifex/domains/ecr/awsapi/authz.go index f5bfebadc..c855b1a2b 100644 --- a/spinifex/domains/ecr/awsapi/authz.go +++ b/spinifex/domains/ecr/awsapi/authz.go @@ -124,7 +124,7 @@ func ResourceARNs(action, region, accountID string, body []byte) ([]string, erro // Parse fails only on a field spelled two ways, which it cannot scope. scope, err := bodyscope.Parse(action, body) if err != nil { - return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + return nil, awserrors.Errorf(awserrors.ErrorECRInvalidParameter, "The request body names the same field more than once in different letter case") } diff --git a/spinifex/domains/ecr/awsapi/authz_test.go b/spinifex/domains/ecr/awsapi/authz_test.go index 6d127b994..28e53ae39 100644 --- a/spinifex/domains/ecr/awsapi/authz_test.go +++ b/spinifex/domains/ecr/awsapi/authz_test.go @@ -129,6 +129,6 @@ func TestResourceARNs_FieldSpelledTwoWaysIsRejected(t *testing.T) { for range 50 { _, err := awsapi.ResourceARNs("DeleteRepository", testRegion, testAccountID, []byte(`{"repositoryName":"dev","RepositoryName":"prod"}`)) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, awserrors.ValidErrorCodeFromError(err)) } } diff --git a/spinifex/domains/ecr/awsapi/batch_delete_image.go b/spinifex/domains/ecr/awsapi/batch_delete_image.go index 572ee6570..212048660 100644 --- a/spinifex/domains/ecr/awsapi/batch_delete_image.go +++ b/spinifex/domains/ecr/awsapi/batch_delete_image.go @@ -47,7 +47,7 @@ func BatchDeleteImage(ctx context.Context, deleter ImageDeleter, accountID strin digest, err := deleter.DeleteImage(ctx, accountID, req.RepositoryName, imageID.ImageTag, imageID.ImageDigest) if errors.Is(err, ecrregistry.ErrImageNotFound) { - failures = append(failures, imageFailure(imageID, ecr.ImageFailureCodeImageNotFound, "image not found")) + failures = append(failures, imageFailure(imageID, ecr.ImageFailureCodeImageNotFound, ImageNotFoundReason)) continue } if err != nil { diff --git a/spinifex/domains/ecr/awsapi/batch_delete_image_test.go b/spinifex/domains/ecr/awsapi/batch_delete_image_test.go index dcac4c563..8c012af00 100644 --- a/spinifex/domains/ecr/awsapi/batch_delete_image_test.go +++ b/spinifex/domains/ecr/awsapi/batch_delete_image_test.go @@ -57,9 +57,9 @@ func TestBatchDeleteImage_ValidatesRequestAndDeleterFailure(t *testing.T) { code string }{ {"missing deleter", nil, `{"repositoryName":"team/app"}`, awserrors.ErrorServerInternal}, - {"malformed", fakeImageDeleter{}, `{`, awserrors.ErrorInvalidParameterValue}, + {"malformed", fakeImageDeleter{}, `{`, awserrors.ErrorECRInvalidParameter}, {"cross account", fakeImageDeleter{}, `{"repositoryName":"team/app","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, - {"cap exceeded", fakeImageDeleter{}, tooMany, awserrors.ErrorInvalidParameterValue}, + {"cap exceeded", fakeImageDeleter{}, tooMany, awserrors.ErrorECRInvalidParameter}, {"backend failure", fakeImageDeleter{results: map[string]fakeDeleteResult{"present": {err: errors.New("unavailable")}}}, `{"repositoryName":"team/app","imageIds":[{"imageTag":"present"}]}`, awserrors.ErrorServerInternal}, } for _, tc := range cases { diff --git a/spinifex/domains/ecr/awsapi/batch_get_image.go b/spinifex/domains/ecr/awsapi/batch_get_image.go index 545134a7e..68b25c744 100644 --- a/spinifex/domains/ecr/awsapi/batch_get_image.go +++ b/spinifex/domains/ecr/awsapi/batch_get_image.go @@ -54,7 +54,7 @@ func BatchGetImage(ctx context.Context, reader ManifestReader, accountID string, manifest, mediaType, digest, err := reader.GetManifest(ctx, accountID, req.RepositoryName, reference, req.AcceptedMediaTypes) if errors.Is(err, ecrregistry.ErrImageNotFound) { - failures = append(failures, imageFailure(imageID, ecr.ImageFailureCodeImageNotFound, "image not found")) + failures = append(failures, imageFailure(imageID, ecr.ImageFailureCodeImageNotFound, ImageNotFoundReason)) continue } if err != nil { diff --git a/spinifex/domains/ecr/awsapi/batch_get_image_test.go b/spinifex/domains/ecr/awsapi/batch_get_image_test.go index 5ee4de3f9..0ce39328b 100644 --- a/spinifex/domains/ecr/awsapi/batch_get_image_test.go +++ b/spinifex/domains/ecr/awsapi/batch_get_image_test.go @@ -55,9 +55,9 @@ func TestBatchGetImage_ValidatesRequestAndReaderFailure(t *testing.T) { code string }{ {"missing reader", nil, `{"repositoryName":"team/app"}`, awserrors.ErrorServerInternal}, - {"malformed", fakeManifestReader{}, `{`, awserrors.ErrorInvalidParameterValue}, + {"malformed", fakeManifestReader{}, `{`, awserrors.ErrorECRInvalidParameter}, {"cross account", fakeManifestReader{}, `{"repositoryName":"team/app","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, - {"cap exceeded", fakeManifestReader{}, tooMany, awserrors.ErrorInvalidParameterValue}, + {"cap exceeded", fakeManifestReader{}, tooMany, awserrors.ErrorECRInvalidParameter}, {"backend failure", fakeManifestReader{manifests: map[string]fakeManifest{"present": {err: errors.New("unavailable")}}}, `{"repositoryName":"team/app","imageIds":[{"imageTag":"present"}]}`, awserrors.ErrorServerInternal}, } for _, tc := range cases { diff --git a/spinifex/domains/ecr/awsapi/create_repository.go b/spinifex/domains/ecr/awsapi/create_repository.go index e4db93a45..2bfaaf5a3 100644 --- a/spinifex/domains/ecr/awsapi/create_repository.go +++ b/spinifex/domains/ecr/awsapi/create_repository.go @@ -67,7 +67,7 @@ func CreateRepository(ctx context.Context, store RepositoryStore, endpoint Repos } if _, err := store.GetRepo(ctx, accountID, req.RepositoryName); err == nil { - return nil, errors.New(awserrors.ErrorRepositoryAlreadyExists) + return nil, RepositoryAlreadyExistsError(accountID, req.RepositoryName) } else if !errors.Is(err, handlers_ecr.ErrNotFound) { slog.ErrorContext(ctx, "ECR CreateRepository: get repository failed", "repository", req.RepositoryName, "err", err) return nil, errors.New(awserrors.ErrorServerInternal) @@ -119,16 +119,17 @@ func normalizeEncryptionType(cfg *encryptionConfigurationInput) (string, error) case handlers_ecr.EncryptionTypeAES256: return cfg.EncryptionType, nil case handlers_ecr.EncryptionTypeKMS: - return "", awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + return "", awserrors.Errorf(awserrors.ErrorECRInvalidParameter, "encryptionType KMS is not supported: no customer-managed key is used, and repositories are already encrypted at rest under a server-managed AES-256 key") default: - return "", EnumValueError("encryptionConfiguration.encryptionType", cfg.EncryptionType, - handlers_ecr.EncryptionTypeAES256, handlers_ecr.EncryptionTypeKMS) + return "", EnumValueError("encryptionConfiguration.encryptionType", + handlers_ecr.EncryptionTypeAES256, "KMS_DSSE", handlers_ecr.EncryptionTypeKMS) } } // normalizeTagMutability validates the create-time mutability, defaulting an -// empty value to MUTABLE. +// empty value to MUTABLE. An unknown value is rejected with +// InvalidParameterException. func normalizeTagMutability(value string) (string, error) { switch value { case "": @@ -136,7 +137,6 @@ func normalizeTagMutability(value string) (string, error) { case handlers_ecr.TagMutabilityMutable, handlers_ecr.TagMutabilityImmutable: return value, nil default: - return "", EnumValueError("imageTagMutability", value, - handlers_ecr.TagMutabilityMutable, handlers_ecr.TagMutabilityImmutable) + return "", EnumValueError("imageTagMutability", ImageTagMutabilityValues...) } } diff --git a/spinifex/domains/ecr/awsapi/create_repository_test.go b/spinifex/domains/ecr/awsapi/create_repository_test.go index a809ee868..afecb7a04 100644 --- a/spinifex/domains/ecr/awsapi/create_repository_test.go +++ b/spinifex/domains/ecr/awsapi/create_repository_test.go @@ -41,10 +41,10 @@ func TestCreateRepository_RejectsInvalidRequestsAndDuplicates(t *testing.T) { code string }{ {"duplicate", `{"repositoryName":"team/app"}`, awserrors.ErrorRepositoryAlreadyExists}, - {"malformed", `{`, awserrors.ErrorInvalidParameterValue}, - {"missing name", `{}`, awserrors.ErrorInvalidParameterValue}, + {"malformed", `{`, awserrors.ErrorECRInvalidParameter}, + {"missing name", `{}`, awserrors.ErrorECRInvalidParameter}, {"cross account", `{"repositoryName":"team/other","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, - {"unsupported KMS", `{"repositoryName":"team/other","encryptionConfiguration":{"encryptionType":"KMS"}}`, awserrors.ErrorInvalidParameterValue}, + {"unsupported KMS", `{"repositoryName":"team/other","encryptionConfiguration":{"encryptionType":"KMS"}}`, awserrors.ErrorECRInvalidParameter}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { diff --git a/spinifex/domains/ecr/awsapi/delete_repository.go b/spinifex/domains/ecr/awsapi/delete_repository.go index e8cd62856..d74dedff0 100644 --- a/spinifex/domains/ecr/awsapi/delete_repository.go +++ b/spinifex/domains/ecr/awsapi/delete_repository.go @@ -41,7 +41,7 @@ func DeleteRepository(ctx context.Context, store RepositoryStore, endpoint Repos meta, err := store.GetRepo(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, req.RepositoryName) } slog.ErrorContext(ctx, "ECR DeleteRepository: get repository failed", "repository", req.RepositoryName, "err", err) return nil, errors.New(awserrors.ErrorServerInternal) @@ -60,13 +60,16 @@ func DeleteRepository(ctx context.Context, store RepositoryStore, endpoint Repos if err := store.DeleteRepo(ctx, accountID, req.RepositoryName); err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, req.RepositoryName) } slog.ErrorContext(ctx, "ECR DeleteRepository: delete repository failed", "repository", req.RepositoryName, "err", err) return nil, errors.New(awserrors.ErrorServerInternal) } - return &ecr.DeleteRepositoryOutput{ - Repository: endpoint.RepositoryFromMeta(accountID, req.RepositoryName, meta), - }, nil + // AWS's DeleteRepository omits the encryption and scanning configurations + // that every other repository response carries. + repo := endpoint.RepositoryFromMeta(accountID, req.RepositoryName, meta) + repo.EncryptionConfiguration = nil + repo.ImageScanningConfiguration = nil + return &ecr.DeleteRepositoryOutput{Repository: repo}, nil } diff --git a/spinifex/domains/ecr/awsapi/delete_repository_test.go b/spinifex/domains/ecr/awsapi/delete_repository_test.go index 7f2c8ccf6..26853dbd0 100644 --- a/spinifex/domains/ecr/awsapi/delete_repository_test.go +++ b/spinifex/domains/ecr/awsapi/delete_repository_test.go @@ -51,8 +51,8 @@ func TestDeleteRepository_ValidatesRequest(t *testing.T) { body string code string }{ - {"malformed", `{`, awserrors.ErrorInvalidParameterValue}, - {"missing name", `{}`, awserrors.ErrorInvalidParameterValue}, + {"malformed", `{`, awserrors.ErrorECRInvalidParameter}, + {"missing name", `{}`, awserrors.ErrorECRInvalidParameter}, {"cross account", `{"repositoryName":"team/app","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, {"missing repository", `{"repositoryName":"team/missing"}`, awserrors.ErrorRepositoryNotFound}, } diff --git a/spinifex/domains/ecr/awsapi/describe_images.go b/spinifex/domains/ecr/awsapi/describe_images.go index 64c6d7bdd..372ceb655 100644 --- a/spinifex/domains/ecr/awsapi/describe_images.go +++ b/spinifex/domains/ecr/awsapi/describe_images.go @@ -3,13 +3,11 @@ package awsapi import ( "context" "encoding/json" - "errors" "slices" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ecr" ecrregistry "github.com/mulgadc/spinifex/spinifex/domains/ecr/registry" - "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" ) // imageIdentifier is the AWS JSON 1.1 {imageDigest, imageTag} pair. @@ -81,7 +79,8 @@ func DescribeImages(ctx context.Context, catalog ImageCatalog, accountID string, details = append(details, detail) } if len(req.ImageIDs) > 0 && len(details) == 0 { - return nil, errors.New(awserrors.ErrorImageNotFound) + first := req.ImageIDs[0] + return nil, ImageNotFoundError(accountID, req.RepositoryName, first.ImageDigest, first.ImageTag) } return &ecr.DescribeImagesOutput{ImageDetails: details}, nil diff --git a/spinifex/domains/ecr/awsapi/describe_repositories.go b/spinifex/domains/ecr/awsapi/describe_repositories.go index 4b1e919e8..8a5fb5769 100644 --- a/spinifex/domains/ecr/awsapi/describe_repositories.go +++ b/spinifex/domains/ecr/awsapi/describe_repositories.go @@ -55,7 +55,7 @@ func DescribeRepositories(ctx context.Context, store RepositoryStore, endpoint R meta, err := store.GetRepo(ctx, accountID, name) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, name) } slog.ErrorContext(ctx, "ECR DescribeRepositories: get repository failed", "repository", name, "err", err) return nil, errors.New(awserrors.ErrorServerInternal) diff --git a/spinifex/domains/ecr/awsapi/describe_repositories_test.go b/spinifex/domains/ecr/awsapi/describe_repositories_test.go index 8ac6206e1..5adad2ce0 100644 --- a/spinifex/domains/ecr/awsapi/describe_repositories_test.go +++ b/spinifex/domains/ecr/awsapi/describe_repositories_test.go @@ -40,7 +40,7 @@ func TestDescribeRepositories_ValidatesRequestAndRepository(t *testing.T) { body string code string }{ - {"malformed body", `{`, awserrors.ErrorInvalidParameterValue}, + {"malformed body", `{`, awserrors.ErrorECRInvalidParameter}, {"cross-account registry", `{"registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, {"missing named repository", `{"repositoryNames":["team/ghost"]}`, awserrors.ErrorRepositoryNotFound}, } diff --git a/spinifex/domains/ecr/awsapi/errors.go b/spinifex/domains/ecr/awsapi/errors.go new file mode 100644 index 000000000..eed7f359e --- /dev/null +++ b/spinifex/domains/ecr/awsapi/errors.go @@ -0,0 +1,52 @@ +package awsapi + +import ( + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" +) + +// ImageNotFoundReason is the failureReason AWS reports for an imageId that +// names no image in BatchGetImage and BatchDeleteImage. +const ImageNotFoundReason = "Requested image not found" + +// RepositoryNotFoundError returns RepositoryNotFoundException naming the +// repository and registry, as AWS does. +func RepositoryNotFoundError(registryID, name string) error { + return awserrors.Errorf(awserrors.ErrorRepositoryNotFound, + "The repository with name '%s' does not exist in the registry with id '%s'", name, registryID) +} + +// RepositoryAlreadyExistsError returns RepositoryAlreadyExistsException naming +// the repository and registry, as AWS does. +func RepositoryAlreadyExistsError(registryID, name string) error { + return awserrors.Errorf(awserrors.ErrorRepositoryAlreadyExists, + "The repository with name '%s' already exists in the registry with id '%s'", name, registryID) +} + +// LifecyclePolicyNotFoundError returns LifecyclePolicyNotFoundException naming +// the repository and registry, as AWS does. +func LifecyclePolicyNotFoundError(registryID, name string) error { + return awserrors.Errorf(awserrors.ErrorLifecyclePolicyNotFound, + "Lifecycle policy does not exist for the repository with name '%s' in the registry with id '%s'", name, registryID) +} + +// RepositoryPolicyNotFoundError returns RepositoryPolicyNotFoundException +// naming the repository and registry, as AWS does. +func RepositoryPolicyNotFoundError(registryID, name string) error { + return awserrors.Errorf(awserrors.ErrorRepositoryPolicyNotFound, + "Repository policy does not exist for the repository with name '%s' in the registry with id '%s'", name, registryID) +} + +// ImageNotFoundError returns ImageNotFoundException naming the image, the +// repository and the registry; an absent digest or tag prints as 'null'. +func ImageNotFoundError(registryID, name, digest, tag string) error { + return awserrors.Errorf(awserrors.ErrorImageNotFound, + "The image with imageId {imageDigest:'%s', imageTag:'%s'} does not exist within the repository with name '%s' in the registry with id '%s'", + orNull(digest), orNull(tag), name, registryID) +} + +func orNull(s string) string { + if s == "" { + return "null" + } + return s +} diff --git a/spinifex/domains/ecr/awsapi/handler.go b/spinifex/domains/ecr/awsapi/handler.go index 250eaa227..3e77e792c 100644 --- a/spinifex/domains/ecr/awsapi/handler.go +++ b/spinifex/domains/ecr/awsapi/handler.go @@ -79,7 +79,7 @@ var Actions = map[string]Handler{ "DeleteRepositoryPolicy": DeleteRepositoryPolicy, "GetRegistryPolicy": NotImplemented, "PutRegistryPolicy": NotImplemented, - "DescribeRegistry": NotImplemented, + "DescribeRegistry": DescribeRegistry, // Image scanning is unsupported (no scanner backend), except that // PutImageScanningConfiguration accepts the scanOnPush=false no-op rather diff --git a/spinifex/domains/ecr/awsapi/image_catalog.go b/spinifex/domains/ecr/awsapi/image_catalog.go index ba754bb06..dc49e7c5f 100644 --- a/spinifex/domains/ecr/awsapi/image_catalog.go +++ b/spinifex/domains/ecr/awsapi/image_catalog.go @@ -57,7 +57,7 @@ func listImageRecords(ctx context.Context, catalog ImageCatalog, accountID, repo } records, err := catalog.ListImages(ctx, accountID, repository) if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, repository) } if err != nil { slog.ErrorContext(ctx, "ECR image action: list images failed", "repository", repository, "err", err) diff --git a/spinifex/domains/ecr/awsapi/imagescanning.go b/spinifex/domains/ecr/awsapi/imagescanning.go index c01cf3fc2..30c5ebed0 100644 --- a/spinifex/domains/ecr/awsapi/imagescanning.go +++ b/spinifex/domains/ecr/awsapi/imagescanning.go @@ -51,7 +51,7 @@ func PutImageScanningConfiguration(ctx context.Context, nc *nats.Conn, accountID meta, err := store.GetRepo(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, req.RepositoryName) } return nil, err } diff --git a/spinifex/domains/ecr/awsapi/imagescanning_test.go b/spinifex/domains/ecr/awsapi/imagescanning_test.go index 54acb8454..47fe5ae9c 100644 --- a/spinifex/domains/ecr/awsapi/imagescanning_test.go +++ b/spinifex/domains/ecr/awsapi/imagescanning_test.go @@ -63,8 +63,8 @@ func TestPutImageScanningConfiguration_Errors(t *testing.T) { name, body, expect string }{ {"missing repo", `{"repositoryName":"team/ghost"}`, awserrors.ErrorRepositoryNotFound}, - {"empty name", `{}`, awserrors.ErrorInvalidParameterValue}, - {"invalid name", `{"repositoryName":"Team/App"}`, awserrors.ErrorInvalidParameterValue}, + {"empty name", `{}`, awserrors.ErrorECRInvalidParameter}, + {"invalid name", `{"repositoryName":"Team/App"}`, awserrors.ErrorECRInvalidParameter}, {"cross-account", `{"repositoryName":"team/app","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, } for _, tc := range cases { diff --git a/spinifex/domains/ecr/awsapi/lifecycle_preview.go b/spinifex/domains/ecr/awsapi/lifecycle_preview.go index 168879663..22835de17 100644 --- a/spinifex/domains/ecr/awsapi/lifecycle_preview.go +++ b/spinifex/domains/ecr/awsapi/lifecycle_preview.go @@ -56,7 +56,7 @@ func EvaluateLifecyclePreview(ctx context.Context, policies LifecyclePolicyStore stored, err := policies.GetLifecyclePolicy(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return LifecyclePreview{}, errors.New(awserrors.ErrorLifecyclePolicyNotFound) + return LifecyclePreview{}, LifecyclePolicyNotFoundError(accountID, req.RepositoryName) } return LifecyclePreview{}, err } diff --git a/spinifex/domains/ecr/awsapi/lifecycle_preview_test.go b/spinifex/domains/ecr/awsapi/lifecycle_preview_test.go index d6e535aca..82e0a0501 100644 --- a/spinifex/domains/ecr/awsapi/lifecycle_preview_test.go +++ b/spinifex/domains/ecr/awsapi/lifecycle_preview_test.go @@ -70,7 +70,7 @@ func TestEvaluateLifecyclePreview_MapsPolicyAndRepositoryFailures(t *testing.T) }{ {"missing policy", fakeLifecyclePolicyStore{err: handlers_ecr.ErrNotFound}, fakeImageCatalog{}, `{"repositoryName":"team/app"}`, awserrors.ErrorLifecyclePolicyNotFound}, {"missing repository", fakeLifecyclePolicyStore{}, fakeImageCatalog{err: handlers_ecr.ErrNotFound}, `{"repositoryName":"team/app","lifecyclePolicyText":"{}"}`, awserrors.ErrorRepositoryNotFound}, - {"invalid policy", fakeLifecyclePolicyStore{}, fakeImageCatalog{}, `{"repositoryName":"team/app","lifecyclePolicyText":"not-json"}`, awserrors.ErrorInvalidParameterValue}, + {"invalid policy", fakeLifecyclePolicyStore{}, fakeImageCatalog{}, `{"repositoryName":"team/app","lifecyclePolicyText":"not-json"}`, awserrors.ErrorECRInvalidParameter}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { diff --git a/spinifex/domains/ecr/awsapi/lifecyclepolicy.go b/spinifex/domains/ecr/awsapi/lifecyclepolicy.go index e5a6c694c..d1f1fd854 100644 --- a/spinifex/domains/ecr/awsapi/lifecyclepolicy.go +++ b/spinifex/domains/ecr/awsapi/lifecyclepolicy.go @@ -1,9 +1,11 @@ package awsapi import ( + "bytes" "context" "encoding/json" "errors" + "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ecr" @@ -21,6 +23,20 @@ type lifecyclePolicyRequest struct { LifecyclePolicyText string `json:"lifecyclePolicyText"` } +// neverEvaluated is the lastEvaluatedAt AWS reports for a lifecycle policy +// that has not been evaluated; the sweeper records no evaluation time. +var neverEvaluated = time.Unix(0, 0).UTC() + +// compactPolicyText strips the whitespace between JSON tokens, keeping key +// order, as AWS does; text that is not JSON is returned unchanged. +func compactPolicyText(text []byte) string { + var buf bytes.Buffer + if err := json.Compact(&buf, text); err != nil { + return string(text) + } + return buf.String() +} + // resolveLifecycleRepo parses + validates the request, enforces the registryId // cross-account guard, and confirms the repository exists. func resolveLifecycleRepo(ctx context.Context, nc *nats.Conn, accountID string, body []byte) (lifecyclePolicyRequest, *handlers_ecr.NATSMetaStore, error) { @@ -40,7 +56,7 @@ func resolveLifecycleRepo(ctx context.Context, nc *nats.Conn, accountID string, store := handlers_ecr.NewNATSMetaStore(nc) if _, err := store.GetRepo(ctx, accountID, req.RepositoryName); err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return req, nil, errors.New(awserrors.ErrorRepositoryNotFound) + return req, nil, RepositoryNotFoundError(accountID, req.RepositoryName) } return req, nil, err } @@ -49,7 +65,7 @@ func resolveLifecycleRepo(ctx context.Context, nc *nats.Conn, accountID string, // PutLifecyclePolicy validates and stores the lifecycle-policy document for a // repository. The document is parsed by the evaluation engine; a malformed or -// unsupported rule is rejected with InvalidParameterValue. +// unsupported rule is rejected with InvalidParameterException. func PutLifecyclePolicy(ctx context.Context, nc *nats.Conn, accountID string, body []byte) (any, error) { req, store, err := resolveLifecycleRepo(ctx, nc, accountID, body) if err != nil { @@ -58,13 +74,14 @@ func PutLifecyclePolicy(ctx context.Context, nc *nats.Conn, accountID string, bo if _, err := handlers_ecr.ParseLifecyclePolicy([]byte(req.LifecyclePolicyText)); err != nil { return nil, InvalidLifecyclePolicyError() } - if err := store.PutLifecyclePolicy(ctx, accountID, req.RepositoryName, []byte(req.LifecyclePolicyText)); err != nil { + policy := compactPolicyText([]byte(req.LifecyclePolicyText)) + if err := store.PutLifecyclePolicy(ctx, accountID, req.RepositoryName, []byte(policy)); err != nil { return nil, err } return &ecr.PutLifecyclePolicyOutput{ RegistryId: aws.String(accountID), RepositoryName: aws.String(req.RepositoryName), - LifecyclePolicyText: aws.String(req.LifecyclePolicyText), + LifecyclePolicyText: aws.String(policy), }, nil } @@ -78,14 +95,15 @@ func GetLifecyclePolicy(ctx context.Context, nc *nats.Conn, accountID string, bo policy, err := store.GetLifecyclePolicy(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorLifecyclePolicyNotFound) + return nil, LifecyclePolicyNotFoundError(accountID, req.RepositoryName) } return nil, err } return &ecr.GetLifecyclePolicyOutput{ RegistryId: aws.String(accountID), RepositoryName: aws.String(req.RepositoryName), - LifecyclePolicyText: aws.String(string(policy)), + LifecyclePolicyText: aws.String(compactPolicyText(policy)), + LastEvaluatedAt: aws.Time(neverEvaluated), }, nil } @@ -99,13 +117,14 @@ func DeleteLifecyclePolicy(ctx context.Context, nc *nats.Conn, accountID string, policy, err := store.DeleteLifecyclePolicy(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorLifecyclePolicyNotFound) + return nil, LifecyclePolicyNotFoundError(accountID, req.RepositoryName) } return nil, err } return &ecr.DeleteLifecyclePolicyOutput{ RegistryId: aws.String(accountID), RepositoryName: aws.String(req.RepositoryName), - LifecyclePolicyText: aws.String(string(policy)), + LifecyclePolicyText: aws.String(compactPolicyText(policy)), + LastEvaluatedAt: aws.Time(neverEvaluated), }, nil } diff --git a/spinifex/domains/ecr/awsapi/lifecyclepolicy_test.go b/spinifex/domains/ecr/awsapi/lifecyclepolicy_test.go index f15b66610..8065578c2 100644 --- a/spinifex/domains/ecr/awsapi/lifecyclepolicy_test.go +++ b/spinifex/domains/ecr/awsapi/lifecyclepolicy_test.go @@ -2,8 +2,9 @@ package awsapi import ( "context" - + "net/http/httptest" "testing" + "time" "github.com/aws/aws-sdk-go/service/ecr" "github.com/mulgadc/spinifex/internal/testkit" @@ -72,9 +73,9 @@ func TestLifecyclePolicy_Errors(t *testing.T) { expect string }{ {"put missing repo", PutLifecyclePolicy, `{"repositoryName":"team/ghost","lifecyclePolicyText":` + strconvQuote(validLifecyclePolicy) + `}`, awserrors.ErrorRepositoryNotFound}, - {"put invalid json", PutLifecyclePolicy, `{"repositoryName":"team/app","lifecyclePolicyText":"not-json"}`, awserrors.ErrorInvalidParameterValue}, - {"put bad rule", PutLifecyclePolicy, `{"repositoryName":"team/app","lifecyclePolicyText":"{\"rules\":[{\"rulePriority\":1,\"selection\":{\"tagStatus\":\"tagged\",\"countType\":\"imageCountMoreThan\",\"countNumber\":1},\"action\":{\"type\":\"expire\"}}]}"}`, awserrors.ErrorInvalidParameterValue}, - {"put empty name", PutLifecyclePolicy, `{"lifecyclePolicyText":` + strconvQuote(validLifecyclePolicy) + `}`, awserrors.ErrorInvalidParameterValue}, + {"put invalid json", PutLifecyclePolicy, `{"repositoryName":"team/app","lifecyclePolicyText":"not-json"}`, awserrors.ErrorECRInvalidParameter}, + {"put bad rule", PutLifecyclePolicy, `{"repositoryName":"team/app","lifecyclePolicyText":"{\"rules\":[{\"rulePriority\":1,\"selection\":{\"tagStatus\":\"tagged\",\"countType\":\"imageCountMoreThan\",\"countNumber\":1},\"action\":{\"type\":\"expire\"}}]}"}`, awserrors.ErrorECRInvalidParameter}, + {"put empty name", PutLifecyclePolicy, `{"lifecyclePolicyText":` + strconvQuote(validLifecyclePolicy) + `}`, awserrors.ErrorECRInvalidParameter}, {"put cross-account", PutLifecyclePolicy, `{"repositoryName":"team/app","registryId":"999999999999","lifecyclePolicyText":` + strconvQuote(validLifecyclePolicy) + `}`, awserrors.ErrorAccessDenied}, {"get no policy", GetLifecyclePolicy, `{"repositoryName":"team/app"}`, awserrors.ErrorLifecyclePolicyNotFound}, {"delete no policy", DeleteLifecyclePolicy, `{"repositoryName":"team/app"}`, awserrors.ErrorLifecyclePolicyNotFound}, @@ -88,3 +89,58 @@ func TestLifecyclePolicy_Errors(t *testing.T) { }) } } + +// AWS returns lifecyclePolicyText compacted with the submitted key order, and +// lastEvaluatedAt (epoch 0 before any evaluation) from Get and Delete only. +func TestLifecyclePolicy_CompactTextAndLastEvaluatedAt(t *testing.T) { + nc := newLifecycleTestConn(t) + seedRepo(t, nc, "team/app") + pretty := "{\n \"rules\" : [ {\n \"rulePriority\" : 1,\n \"selection\" : {\"tagStatus\": \"untagged\", \"countType\": \"sinceImagePushed\", \"countUnit\": \"days\", \"countNumber\": 14},\n \"action\" : {\"type\": \"expire\"}\n } ]\n}" + body := []byte(`{"repositoryName":"team/app","lifecyclePolicyText":` + strconvQuote(pretty) + `}`) + + out, err := PutLifecyclePolicy(context.Background(), nc, policyTestAccount, body) + require.NoError(t, err) + put, ok := out.(*ecr.PutLifecyclePolicyOutput) + require.True(t, ok) + assert.Equal(t, validLifecyclePolicy, *put.LifecyclePolicyText) + + repoBody := []byte(`{"repositoryName":"team/app"}`) + out, err = GetLifecyclePolicy(context.Background(), nc, policyTestAccount, repoBody) + require.NoError(t, err) + got, ok := out.(*ecr.GetLifecyclePolicyOutput) + require.True(t, ok) + assert.Equal(t, validLifecyclePolicy, *got.LifecyclePolicyText) + require.NotNil(t, got.LastEvaluatedAt) + assert.True(t, got.LastEvaluatedAt.Equal(time.Unix(0, 0))) + + w := httptest.NewRecorder() + WriteJSONResponse(w, got) + assert.Contains(t, w.Body.String(), `"lastEvaluatedAt":0`) + + out, err = DeleteLifecyclePolicy(context.Background(), nc, policyTestAccount, repoBody) + require.NoError(t, err) + del, ok := out.(*ecr.DeleteLifecyclePolicyOutput) + require.True(t, ok) + assert.Equal(t, validLifecyclePolicy, *del.LifecyclePolicyText) + require.NotNil(t, del.LastEvaluatedAt) + assert.True(t, del.LastEvaluatedAt.Equal(time.Unix(0, 0))) +} + +func TestLifecyclePolicy_NotFoundMessagesNameRepository(t *testing.T) { + nc := newLifecycleTestConn(t) + seedRepo(t, nc, "team/app") + + _, err := GetLifecyclePolicy(context.Background(), nc, policyTestAccount, []byte(`{"repositoryName":"team/app"}`)) + require.Error(t, err) + code, message, found := awserrors.ResolveErrorDetail(err) + require.True(t, found) + assert.Equal(t, awserrors.ErrorLifecyclePolicyNotFound, code) + assert.Equal(t, "Lifecycle policy does not exist for the repository with name 'team/app' in the registry with id '"+policyTestAccount+"'", message) + + _, err = GetLifecyclePolicy(context.Background(), nc, policyTestAccount, []byte(`{"repositoryName":"team/ghost"}`)) + require.Error(t, err) + code, message, found = awserrors.ResolveErrorDetail(err) + require.True(t, found) + assert.Equal(t, awserrors.ErrorRepositoryNotFound, code) + assert.Equal(t, "The repository with name 'team/ghost' does not exist in the registry with id '"+policyTestAccount+"'", message) +} diff --git a/spinifex/domains/ecr/awsapi/list_images_test.go b/spinifex/domains/ecr/awsapi/list_images_test.go index 06db78c45..5f2e66102 100644 --- a/spinifex/domains/ecr/awsapi/list_images_test.go +++ b/spinifex/domains/ecr/awsapi/list_images_test.go @@ -49,8 +49,8 @@ func TestListImages_ValidatesRequestAndCatalogFailure(t *testing.T) { code string }{ {"missing catalog", nil, `{"repositoryName":"team/app"}`, awserrors.ErrorServerInternal}, - {"malformed", fakeImageCatalog{}, `{`, awserrors.ErrorInvalidParameterValue}, - {"missing repository name", fakeImageCatalog{}, `{}`, awserrors.ErrorInvalidParameterValue}, + {"malformed", fakeImageCatalog{}, `{`, awserrors.ErrorECRInvalidParameter}, + {"missing repository name", fakeImageCatalog{}, `{}`, awserrors.ErrorECRInvalidParameter}, {"cross account", fakeImageCatalog{}, `{"repositoryName":"team/app","registryId":"999999999999"}`, awserrors.ErrorAccessDenied}, {"repository missing", fakeImageCatalog{err: handlers_ecr.ErrNotFound}, `{"repositoryName":"team/app"}`, awserrors.ErrorRepositoryNotFound}, {"backend failure", fakeImageCatalog{err: errors.New("unavailable")}, `{"repositoryName":"team/app"}`, awserrors.ErrorServerInternal}, diff --git a/spinifex/domains/ecr/awsapi/put_image.go b/spinifex/domains/ecr/awsapi/put_image.go index ccbb1c746..d425efbf2 100644 --- a/spinifex/domains/ecr/awsapi/put_image.go +++ b/spinifex/domains/ecr/awsapi/put_image.go @@ -46,7 +46,7 @@ func PutImage(ctx context.Context, writer ManifestWriter, accountID string, body } digest, err := writer.StoreManifest(ctx, accountID, req.RepositoryName, reference, req.ImageManifestMediaType, []byte(req.ImageManifest)) if err != nil { - return nil, mapStoreManifestError(ctx, err, req.RepositoryName) + return nil, mapStoreManifestError(ctx, err, accountID, req.RepositoryName) } image := &ecr.Image{ @@ -65,7 +65,7 @@ func PutImage(ctx context.Context, writer ManifestWriter, accountID string, body // mapStoreManifestError translates OCI manifest-store errors into AWS PutImage // errors. The OCI adapter's typed errors are part of the explicit ECR internal // capability boundary; unknown backend faults remain ServerInternal. -func mapStoreManifestError(ctx context.Context, err error, repository string) error { +func mapStoreManifestError(ctx context.Context, err error, accountID, repository string) error { if manifestErr, ok := errors.AsType[*ecrregistry.ManifestStoreError](err); ok { switch manifestErr.Code { case "DIGEST_INVALID": @@ -75,7 +75,7 @@ func mapStoreManifestError(ctx context.Context, err error, repository string) er case "TAG_IMMUTABLE": return errors.New(awserrors.ErrorImageTagAlreadyExists) case "NAME_UNKNOWN": - return errors.New(awserrors.ErrorRepositoryNotFound) + return RepositoryNotFoundError(accountID, repository) default: return ConstraintError("imageManifest", manifestErr.Msg) } diff --git a/spinifex/domains/ecr/awsapi/put_image_test.go b/spinifex/domains/ecr/awsapi/put_image_test.go index fb2d38b60..90c4ddf64 100644 --- a/spinifex/domains/ecr/awsapi/put_image_test.go +++ b/spinifex/domains/ecr/awsapi/put_image_test.go @@ -46,8 +46,8 @@ func TestPutImage_ValidatesRequestAndMapsStoreErrors(t *testing.T) { code string }{ {"missing writer", nil, `{"repositoryName":"team/app","imageManifest":"{}"}`, awserrors.ErrorServerInternal}, - {"malformed", &fakeManifestWriter{}, `{`, awserrors.ErrorInvalidParameterValue}, - {"missing manifest", &fakeManifestWriter{}, `{"repositoryName":"team/app"}`, awserrors.ErrorInvalidParameterValue}, + {"malformed", &fakeManifestWriter{}, `{`, awserrors.ErrorECRInvalidParameter}, + {"missing manifest", &fakeManifestWriter{}, `{"repositoryName":"team/app"}`, awserrors.ErrorECRInvalidParameter}, {"cross account", &fakeManifestWriter{}, `{"repositoryName":"team/app","registryId":"999999999999","imageManifest":"{}"}`, awserrors.ErrorAccessDenied}, {"digest mismatch", &fakeManifestWriter{err: &ecrregistry.ManifestStoreError{Code: "DIGEST_INVALID"}}, `{"repositoryName":"team/app","imageManifest":"{}"}`, awserrors.ErrorImageDigestDoesNotMatch}, {"backend failure", &fakeManifestWriter{err: errors.New("unavailable")}, `{"repositoryName":"team/app","imageManifest":"{}"}`, awserrors.ErrorServerInternal}, diff --git a/spinifex/domains/ecr/awsapi/registry.go b/spinifex/domains/ecr/awsapi/registry.go new file mode 100644 index 000000000..48f0cb74c --- /dev/null +++ b/spinifex/domains/ecr/awsapi/registry.go @@ -0,0 +1,28 @@ +package awsapi + +import ( + "context" + "encoding/json" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ecr" + "github.com/nats-io/nats.go" +) + +// DescribeRegistry reports the caller's registry. A deployment has no +// replication, so the configuration is always present with an empty rules +// list, which is what AWS returns for an account with none configured. +func DescribeRegistry(_ context.Context, _ *nats.Conn, accountID string, body []byte) (any, error) { + if len(body) > 0 { + var req struct{} + if err := json.Unmarshal(body, &req); err != nil { + return nil, MalformedBodyError() + } + } + return &ecr.DescribeRegistryOutput{ + RegistryId: aws.String(accountID), + ReplicationConfiguration: &ecr.ReplicationConfiguration{ + Rules: []*ecr.ReplicationRule{}, + }, + }, nil +} diff --git a/spinifex/domains/ecr/awsapi/registry_test.go b/spinifex/domains/ecr/awsapi/registry_test.go new file mode 100644 index 000000000..a6936a27a --- /dev/null +++ b/spinifex/domains/ecr/awsapi/registry_test.go @@ -0,0 +1,63 @@ +package awsapi_test + +import ( + "context" + "encoding/json" + "net/http/httptest" + "testing" + + "github.com/mulgadc/spinifex/spinifex/domains/ecr/awsapi" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// describeRegistryWire runs the dispatched DescribeRegistry handler and +// serialises its output the way the gateway does, returning the decoded body. +func describeRegistryWire(t *testing.T, accountID string, body []byte) map[string]any { + t.Helper() + out, err := awsapi.Actions["DescribeRegistry"](context.Background(), nil, accountID, body) + require.NoError(t, err) + w := httptest.NewRecorder() + awsapi.WriteJSONResponse(w, out) + var decoded map[string]any + require.NoError(t, json.Unmarshal(w.Body.Bytes(), &decoded)) + return decoded +} + +// AWS answers an account with no replication with the configuration present +// and an empty rules list, not with the configuration omitted. +func TestDescribeRegistry_CallerAccountAndEmptyReplication(t *testing.T) { + for _, body := range []string{"", "{}", "null"} { + t.Run("body="+body, func(t *testing.T) { + decoded := describeRegistryWire(t, "123456789012", []byte(body)) + assert.Equal(t, map[string]any{ + "registryId": "123456789012", + "replicationConfiguration": map[string]any{"rules": []any{}}, + }, decoded) + }) + } +} + +func TestDescribeRegistry_ScopedToCaller(t *testing.T) { + a := describeRegistryWire(t, "111111111111", nil) + b := describeRegistryWire(t, "222222222222", nil) + assert.Equal(t, "111111111111", a["registryId"]) + assert.Equal(t, "222222222222", b["registryId"]) +} + +func TestDescribeRegistry_MalformedBody(t *testing.T) { + for _, body := range []string{"{", "[]", `"x"`} { + t.Run(body, func(t *testing.T) { + out, err := awsapi.DescribeRegistry(context.Background(), nil, "123456789012", []byte(body)) + assert.Nil(t, out) + require.Error(t, err) + assert.Equal(t, awserrors.ValidErrorCodeFromError(awsapi.MalformedBodyError()), + awserrors.ValidErrorCodeFromError(err)) + }) + } +} + +func TestDescribeRegistry_NotStubbed(t *testing.T) { + assert.NotContains(t, awsapi.StubbedActionNames(), "DescribeRegistry") +} diff --git a/spinifex/domains/ecr/awsapi/repositorypolicy.go b/spinifex/domains/ecr/awsapi/repositorypolicy.go index 28c291c71..f15fa426a 100644 --- a/spinifex/domains/ecr/awsapi/repositorypolicy.go +++ b/spinifex/domains/ecr/awsapi/repositorypolicy.go @@ -43,7 +43,7 @@ func resolvePolicyRepo(ctx context.Context, nc *nats.Conn, accountID string, bod store := handlers_ecr.NewNATSMetaStore(nc) if _, err := store.GetRepo(ctx, accountID, req.RepositoryName); err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return req, nil, errors.New(awserrors.ErrorRepositoryNotFound) + return req, nil, RepositoryNotFoundError(accountID, req.RepositoryName) } return req, nil, err } @@ -59,7 +59,7 @@ func SetRepositoryPolicy(ctx context.Context, nc *nats.Conn, accountID string, b return nil, err } if req.PolicyText == "" { - return nil, RequiredParameterError("policyText") + return nil, ConstraintError("PolicyText", "Cannot be null") } if !json.Valid([]byte(req.PolicyText)) { return nil, ConstraintError("policyText", "Invalid repository policy provided") @@ -84,7 +84,7 @@ func GetRepositoryPolicy(ctx context.Context, nc *nats.Conn, accountID string, b policy, err := store.GetRepoPolicy(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryPolicyNotFound) + return nil, RepositoryPolicyNotFoundError(accountID, req.RepositoryName) } return nil, err } @@ -105,7 +105,7 @@ func DeleteRepositoryPolicy(ctx context.Context, nc *nats.Conn, accountID string policy, err := store.DeleteRepoPolicy(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryPolicyNotFound) + return nil, RepositoryPolicyNotFoundError(accountID, req.RepositoryName) } return nil, err } diff --git a/spinifex/domains/ecr/awsapi/repositorypolicy_test.go b/spinifex/domains/ecr/awsapi/repositorypolicy_test.go index a26d72e7c..7d8946a5c 100644 --- a/spinifex/domains/ecr/awsapi/repositorypolicy_test.go +++ b/spinifex/domains/ecr/awsapi/repositorypolicy_test.go @@ -88,10 +88,13 @@ func TestRepositoryPolicy_Lifecycle(t *testing.T) { require.True(t, ok) assert.Equal(t, policy, *del.PolicyText) - // Policy gone after delete. + // Policy gone after delete; AWS names the repository and registry. _, err = GetRepositoryPolicy(context.Background(), nc, policyTestAccount, []byte(`{"repositoryName":"team/app"}`)) require.Error(t, err) - assert.Equal(t, awserrors.ErrorRepositoryPolicyNotFound, awserrors.ValidErrorCodeFromError(err)) + code, message, found := awserrors.ResolveErrorDetail(err) + require.True(t, found) + assert.Equal(t, awserrors.ErrorRepositoryPolicyNotFound, code) + assert.Equal(t, "Repository policy does not exist for the repository with name 'team/app' in the registry with id '"+policyTestAccount+"'", message) } func TestRepositoryPolicy_Errors(t *testing.T) { @@ -105,8 +108,8 @@ func TestRepositoryPolicy_Errors(t *testing.T) { expect string }{ {"set missing repo", SetRepositoryPolicy, `{"repositoryName":"team/ghost","policyText":"{}"}`, awserrors.ErrorRepositoryNotFound}, - {"set invalid json policy", SetRepositoryPolicy, `{"repositoryName":"team/app","policyText":"not-json"}`, awserrors.ErrorInvalidParameterValue}, - {"set empty name", SetRepositoryPolicy, `{"policyText":"{}"}`, awserrors.ErrorInvalidParameterValue}, + {"set invalid json policy", SetRepositoryPolicy, `{"repositoryName":"team/app","policyText":"not-json"}`, awserrors.ErrorECRInvalidParameter}, + {"set empty name", SetRepositoryPolicy, `{"policyText":"{}"}`, awserrors.ErrorECRInvalidParameter}, {"set cross-account", SetRepositoryPolicy, `{"repositoryName":"team/app","registryId":"999999999999","policyText":"{}"}`, awserrors.ErrorAccessDenied}, {"get no policy", GetRepositoryPolicy, `{"repositoryName":"team/app"}`, awserrors.ErrorRepositoryPolicyNotFound}, {"delete no policy", DeleteRepositoryPolicy, `{"repositoryName":"team/app"}`, awserrors.ErrorRepositoryPolicyNotFound}, @@ -121,6 +124,18 @@ func TestRepositoryPolicy_Errors(t *testing.T) { } } +// AWS names the member PolicyText, capitalised, when SetRepositoryPolicy omits it. +func TestSetRepositoryPolicy_MissingPolicyTextMessage(t *testing.T) { + nc := newPolicyTestConn(t) + seedRepo(t, nc, "team/app") + _, err := SetRepositoryPolicy(context.Background(), nc, policyTestAccount, []byte(`{"repositoryName":"team/app"}`)) + require.Error(t, err) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, code) + assert.Equal(t, "Invalid parameter at 'PolicyText' failed to satisfy constraint: 'Cannot be null'", message) +} + // strconvQuote JSON-quotes a string for inline test bodies. func strconvQuote(s string) string { b, _ := json.Marshal(s) diff --git a/spinifex/domains/ecr/awsapi/tag_mutability.go b/spinifex/domains/ecr/awsapi/tag_mutability.go index c11114499..019f61a99 100644 --- a/spinifex/domains/ecr/awsapi/tag_mutability.go +++ b/spinifex/domains/ecr/awsapi/tag_mutability.go @@ -39,15 +39,14 @@ func PutImageTagMutability(ctx context.Context, nc *nats.Conn, accountID string, case "": return nil, RequiredParameterError("imageTagMutability") default: - return nil, EnumValueError("imageTagMutability", req.ImageTagMutability, - handlers_ecr.TagMutabilityMutable, handlers_ecr.TagMutabilityImmutable) + return nil, EnumValueError("imageTagMutability", ImageTagMutabilityValues...) } store := handlers_ecr.NewNATSMetaStore(nc) meta, err := store.GetRepo(ctx, accountID, req.RepositoryName) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return nil, errors.New(awserrors.ErrorRepositoryNotFound) + return nil, RepositoryNotFoundError(accountID, req.RepositoryName) } slog.ErrorContext(ctx, "ECR PutImageTagMutability: get repository failed", "repository", req.RepositoryName, "err", err) return nil, errors.New(awserrors.ErrorServerInternal) diff --git a/spinifex/domains/ecr/awsapi/tag_mutability_test.go b/spinifex/domains/ecr/awsapi/tag_mutability_test.go index 0f020f775..2812d5c5b 100644 --- a/spinifex/domains/ecr/awsapi/tag_mutability_test.go +++ b/spinifex/domains/ecr/awsapi/tag_mutability_test.go @@ -36,9 +36,9 @@ func TestPutImageTagMutability_ValidatesRequest(t *testing.T) { body string code string }{ - {"malformed", `{`, awserrors.ErrorInvalidParameterValue}, - {"missing value", `{"repositoryName":"team/app"}`, awserrors.ErrorInvalidParameterValue}, - {"invalid value", `{"repositoryName":"team/app","imageTagMutability":"NOPE"}`, awserrors.ErrorInvalidParameterValue}, + {"malformed", `{`, awserrors.ErrorECRInvalidParameter}, + {"missing value", `{"repositoryName":"team/app"}`, awserrors.ErrorECRInvalidParameter}, + {"invalid value", `{"repositoryName":"team/app","imageTagMutability":"NOPE"}`, awserrors.ErrorECRInvalidParameter}, {"cross account", `{"repositoryName":"team/app","registryId":"999999999999","imageTagMutability":"IMMUTABLE"}`, awserrors.ErrorAccessDenied}, {"missing repository", `{"repositoryName":"team/missing","imageTagMutability":"IMMUTABLE"}`, awserrors.ErrorRepositoryNotFound}, } diff --git a/spinifex/domains/ecr/awsapi/tags.go b/spinifex/domains/ecr/awsapi/tags.go index d671c6116..af1d699b7 100644 --- a/spinifex/domains/ecr/awsapi/tags.go +++ b/spinifex/domains/ecr/awsapi/tags.go @@ -10,7 +10,6 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ecr" handlers_ecr "github.com/mulgadc/spinifex/spinifex/domains/ecr" - "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" "github.com/nats-io/nats.go" ) @@ -38,7 +37,7 @@ type listTagsForResourceRequest struct { // and the NATS-backed MetaStore for a follow-on read-modify-write. func resolveTaggedRepo(ctx context.Context, nc *nats.Conn, accountID, resourceArn string) (string, handlers_ecr.RepoMeta, *handlers_ecr.NATSMetaStore, error) { if resourceArn == "" { - return "", handlers_ecr.RepoMeta{}, nil, RequiredParameterError("resourceArn") + return "", handlers_ecr.RepoMeta{}, nil, invalidResourceARNError() } name, err := RepositoryNameFromResourceARN(resourceArn) if err != nil { @@ -48,7 +47,7 @@ func resolveTaggedRepo(ctx context.Context, nc *nats.Conn, accountID, resourceAr meta, err := store.GetRepo(ctx, accountID, name) if err != nil { if errors.Is(err, handlers_ecr.ErrNotFound) { - return "", handlers_ecr.RepoMeta{}, nil, errors.New(awserrors.ErrorRepositoryNotFound) + return "", handlers_ecr.RepoMeta{}, nil, RepositoryNotFoundError(accountID, name) } return "", handlers_ecr.RepoMeta{}, nil, err } diff --git a/spinifex/domains/ecr/awsapi/tags_test.go b/spinifex/domains/ecr/awsapi/tags_test.go index 1f522537f..260c979c5 100644 --- a/spinifex/domains/ecr/awsapi/tags_test.go +++ b/spinifex/domains/ecr/awsapi/tags_test.go @@ -124,14 +124,18 @@ func TestTagResource_Errors(t *testing.T) { _, err := TagResource(context.Background(), nc, policyTestAccount, []byte(`{"resourceArn":"`+tagResourceARN("team/app")+`","tags":[]}`)) require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, awserrors.ValidErrorCodeFromError(err)) }) t.Run("malformed arn", func(t *testing.T) { _, err := TagResource(context.Background(), nc, policyTestAccount, []byte(`{"resourceArn":"not-an-arn","tags":[{"Key":"env","Value":"prod"}]}`)) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + requireTagError(t, err, awserrors.ErrorECRInvalidParameter, "Invalid parameter at 'resourceArn' failed to satisfy constraint: 'Invalid ARN'") + }) + + t.Run("missing arn", func(t *testing.T) { + _, err := TagResource(context.Background(), nc, policyTestAccount, []byte(`{"tags":[{"Key":"env","Value":"prod"}]}`)) + requireTagError(t, err, awserrors.ErrorECRInvalidParameter, "Invalid parameter at 'resourceArn' failed to satisfy constraint: 'Invalid ARN'") }) t.Run("repo not found", func(t *testing.T) { @@ -144,16 +148,25 @@ func TestTagResource_Errors(t *testing.T) { t.Run("empty key rejected", func(t *testing.T) { _, err := TagResource(context.Background(), nc, policyTestAccount, []byte(`{"resourceArn":"`+tagResourceARN("team/app")+`","tags":[{"Key":"","Value":"prod"}]}`)) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + requireTagError(t, err, awserrors.ErrorInvalidTagParameter, "Tag parameters are invalid") }) } +// requireTagError asserts err resolves to AWS's code and message. +func requireTagError(t *testing.T, err error, wantCode, wantMessage string) { + t.Helper() + require.Error(t, err) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, wantCode, code) + assert.Equal(t, wantMessage, message) +} + func TestUntagResource_Errors(t *testing.T) { nc := newPolicyTestConn(t) _, err := UntagResource(context.Background(), nc, policyTestAccount, []byte(`{"resourceArn":"`+tagResourceARN("team/app")+`","tagKeys":[]}`)) require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, awserrors.ValidErrorCodeFromError(err)) } diff --git a/spinifex/domains/ecr/awsapi/validation.go b/spinifex/domains/ecr/awsapi/validation.go index a6961ff0a..16108a7d8 100644 --- a/spinifex/domains/ecr/awsapi/validation.go +++ b/spinifex/domains/ecr/awsapi/validation.go @@ -10,68 +10,58 @@ import ( "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" ) -// repositoryNamePattern is the expression AWS names when it refuses a -// repositoryName. -const repositoryNamePattern = `[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*(/[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*)*` - const ( minRepositoryNameLength = 2 maxRepositoryNameLength = 256 ) -// ValidateRepositoryName returns InvalidParameterValue naming the first +// ValidateRepositoryName returns InvalidParameterException naming the first // constraint name fails, or nil. func ValidateRepositoryName(name string) error { switch { case name == "": - return RequiredParameterError("repositoryName") + return ConstraintError("repositoryName", "must not be null") case len(name) < minRepositoryNameLength: - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value '%s' at 'repositoryName' failed to satisfy constraint: Member must have length greater than or equal to %d", - name, minRepositoryNameLength) + return ConstraintError("repositoryName", fmt.Sprintf("must have length greater than or equal to %d", minRepositoryNameLength)) case len(name) > maxRepositoryNameLength: - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value '%s' at 'repositoryName' failed to satisfy constraint: Member must have length less than or equal to %d", - name, maxRepositoryNameLength) + return ConstraintError("repositoryName", fmt.Sprintf("must have length less than or equal to %d", maxRepositoryNameLength)) case handlers_ecr.ValidateRepoName(name) != nil: - return ConstraintError("repositoryName", "must satisfy regular expression '"+repositoryNamePattern+"'") + return ConstraintError("repositoryName", "must satisfy regular expression '"+handlers_ecr.RepoNamePattern+"'") } return nil } // RequiredParameterError refuses a request that omits field. func RequiredParameterError(field string) error { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value null at '%s' failed to satisfy constraint: Member must not be null", field) + return ConstraintError(field, "Member must not be null") } -// EnumValueError refuses value for field, listing the values accepted. -func EnumValueError(field, value string, allowed ...string) error { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value '%s' at '%s' failed to satisfy constraint: Member must satisfy enum value set: [%s]", - value, field, strings.Join(allowed, ", ")) +// EnumValueError refuses a value of field outside allowed, which lists the +// values AWS's model declares, in the order AWS lists them. +func EnumValueError(field string, allowed ...string) error { + return ConstraintError(field, "Member must satisfy enum value set: ["+strings.Join(allowed, ", ")+"]") } // MaxItemsError refuses a list field carrying more than limit members. func MaxItemsError(field string, limit int) error { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value at '%s' failed to satisfy constraint: Member must have length less than or equal to %d", field, limit) + return ConstraintError(field, fmt.Sprintf("Member must have length less than or equal to %d", limit)) } // ConstraintError refuses field for failing constraint. func ConstraintError(field, constraint string) error { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + return awserrors.Errorf(awserrors.ErrorECRInvalidParameter, "Invalid parameter at '%s' failed to satisfy constraint: '%s'", field, constraint) } // MalformedBodyError refuses a body that does not decode into the action's // input shape. func MalformedBodyError() error { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + return awserrors.Errorf(awserrors.ErrorECRInvalidParameter, "The request body is not valid JSON or does not match the input shape of the action") } -// ValidateTags refuses a tag list with a missing or empty key. +// ValidateTags refuses a tag list with a missing or empty key. AWS answers a +// null key as a parameter error and an empty one as a tag error. func ValidateTags(tags []*ecr.Tag) error { for i, t := range tags { field := fmt.Sprintf("tags.%d.member.key", i+1) @@ -79,8 +69,7 @@ func ValidateTags(tags []*ecr.Tag) error { return RequiredParameterError(field) } if aws.StringValue(t.Key) == "" { - return awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "1 validation error detected: Value '' at '%s' failed to satisfy constraint: Member must have length greater than or equal to 1", field) + return awserrors.Errorf(awserrors.ErrorInvalidTagParameter, "Tag parameters are invalid") } } return nil @@ -93,5 +82,10 @@ func InvalidLifecyclePolicyError() error { } func invalidResourceARNError() error { - return ConstraintError("resourceArn", "must be a repository ARN of the form arn:aws:ecr:::repository/") + return ConstraintError("resourceArn", "Invalid ARN") } + +// ImageTagMutabilityValues is the imageTagMutability enum AWS's model declares, +// in the order AWS lists it when refusing a value. The exclusion values are +// listed but not accepted. +var ImageTagMutabilityValues = []string{"IMMUTABLE", "MUTABLE", "MUTABLE_WITH_EXCLUSION", "IMMUTABLE_WITH_EXCLUSION"} diff --git a/spinifex/domains/ecr/awsapi/validation_test.go b/spinifex/domains/ecr/awsapi/validation_test.go index 375d58fd9..4423c67a3 100644 --- a/spinifex/domains/ecr/awsapi/validation_test.go +++ b/spinifex/domains/ecr/awsapi/validation_test.go @@ -21,7 +21,7 @@ func requireInvalidParameter(t *testing.T, err error, wantMessage string) { require.Error(t, err) code, message, ok := awserrors.ResolveErrorDetail(err) require.True(t, ok) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, code) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, code) assert.Equal(t, wantMessage, message) } @@ -31,28 +31,47 @@ func TestValidateRepositoryName(t *testing.T) { }{ {"pattern", "Bad_Name!", awsRepositoryNameMessage}, {"uppercase", "Team/App", awsRepositoryNameMessage}, - {"missing", "", "1 validation error detected: Value null at 'repositoryName' failed to satisfy constraint: Member must not be null"}, - {"too short", "a", "1 validation error detected: Value 'a' at 'repositoryName' failed to satisfy constraint: Member must have length greater than or equal to 2"}, - {"too long", strings.Repeat("a", 257), "1 validation error detected: Value '" + strings.Repeat("a", 257) + "' at 'repositoryName' failed to satisfy constraint: Member must have length less than or equal to 256"}, + {"missing", "", "Invalid parameter at 'repositoryName' failed to satisfy constraint: 'must not be null'"}, + {"too short", "a", "Invalid parameter at 'repositoryName' failed to satisfy constraint: 'must have length greater than or equal to 2'"}, + {"too long", strings.Repeat("a", 257), "Invalid parameter at 'repositoryName' failed to satisfy constraint: 'must have length less than or equal to 256'"}, + {"triple underscore", "a___b", awsRepositoryNameMessage}, + {"underscore then hyphen", "a_-b", awsRepositoryNameMessage}, + {"leading separator", "_a", awsRepositoryNameMessage}, + {"trailing separator", "a_", awsRepositoryNameMessage}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { requireInvalidParameter(t, awsapi.ValidateRepositoryName(tc.input), tc.want) }) } - assert.NoError(t, awsapi.ValidateRepositoryName("team/app")) + for _, name := range []string{"team/app", "a__b", "a--b", "a---b", "a/b__c", strings.Repeat("a", 256)} { + assert.NoError(t, awsapi.ValidateRepositoryName(name), "expected %q valid", name) + } } func TestValidateTags(t *testing.T) { requireInvalidParameter(t, awsapi.ValidateTags([]*ecr.Tag{{Key: aws.String("env")}, {Value: aws.String("prod")}}), - "1 validation error detected: Value null at 'tags.2.member.key' failed to satisfy constraint: Member must not be null") - requireInvalidParameter(t, - awsapi.ValidateTags([]*ecr.Tag{{Key: aws.String("")}}), - "1 validation error detected: Value '' at 'tags.1.member.key' failed to satisfy constraint: Member must have length greater than or equal to 1") + "Invalid parameter at 'tags.2.member.key' failed to satisfy constraint: 'Member must not be null'") + err := awsapi.ValidateTags([]*ecr.Tag{{Key: aws.String("")}}) + require.Error(t, err) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, "InvalidTagParameterException", code) + assert.Equal(t, "Tag parameters are invalid", message) assert.NoError(t, awsapi.ValidateTags([]*ecr.Tag{{Key: aws.String("env"), Value: aws.String("")}})) } +// The messages below are AWS's, captured from real ECR refusals. +func TestConstraintHelpers_AWSMessages(t *testing.T) { + requireInvalidParameter(t, awsapi.RequiredParameterError("imageTagMutability"), + "Invalid parameter at 'imageTagMutability' failed to satisfy constraint: 'Member must not be null'") + requireInvalidParameter(t, awsapi.EnumValueError("imageTagMutability", awsapi.ImageTagMutabilityValues...), + "Invalid parameter at 'imageTagMutability' failed to satisfy constraint: 'Member must satisfy enum value set: [IMMUTABLE, MUTABLE, MUTABLE_WITH_EXCLUSION, IMMUTABLE_WITH_EXCLUSION]'") + requireInvalidParameter(t, awsapi.MaxItemsError("imageIds", 100), + "Invalid parameter at 'imageIds' failed to satisfy constraint: 'Member must have length less than or equal to 100'") +} + func TestResourceARNs_AmbiguousBodyNamesTheFault(t *testing.T) { _, err := awsapi.ResourceARNs("DeleteRepository", "ap-southeast-2", "123456789012", []byte(`{"repositoryName":"dev","RepositoryName":"prod"}`)) diff --git a/spinifex/domains/ecr/lifecycle.go b/spinifex/domains/ecr/lifecycle.go index 671dc9f75..ff87ff6f1 100644 --- a/spinifex/domains/ecr/lifecycle.go +++ b/spinifex/domains/ecr/lifecycle.go @@ -10,7 +10,7 @@ import ( // ErrInvalidLifecyclePolicy is returned when a lifecycle-policy document is // malformed or violates the supported rule schema. The gateway maps it to -// InvalidParameterValue. +// InvalidParameterException. var ErrInvalidLifecyclePolicy = errors.New("ecr: invalid lifecycle policy") // Lifecycle tag-status selectors and count types (AWS lifecycle-policy schema). diff --git a/spinifex/domains/ecr/meta_test.go b/spinifex/domains/ecr/meta_test.go index bbce0f7be..3395fa37b 100644 --- a/spinifex/domains/ecr/meta_test.go +++ b/spinifex/domains/ecr/meta_test.go @@ -33,11 +33,11 @@ func TestRepoMeta_EncryptionTypeOrDefault(t *testing.T) { } func TestValidateRepoName(t *testing.T) { - valid := []string{"ab", "team/app", "a/b/c", "my-repo.name_1", "x0/y1/z2"} + valid := []string{"ab", "team/app", "a/b/c", "my-repo.name_1", "x0/y1/z2", "a__b", "a--b", "a---b", "a/b__c"} for _, n := range valid { assert.NoError(t, ValidateRepoName(n), "expected %q valid", n) } - invalid := []string{"A", "Team/App", "a", "/leading", "trailing/", "a//b", strings.Repeat("a", 257)} + invalid := []string{"A", "Team/App", "a", "/leading", "trailing/", "a//b", strings.Repeat("a", 257), "a___b", "a_-b", "_a", "a_", "a..b", "Bad_Name!"} for _, n := range invalid { assert.Error(t, ValidateRepoName(n), "expected %q invalid", n) } diff --git a/spinifex/domains/ecr/registry/registry_test.go b/spinifex/domains/ecr/registry/registry_test.go index 237059bc9..577406ba1 100644 --- a/spinifex/domains/ecr/registry/registry_test.go +++ b/spinifex/domains/ecr/registry/registry_test.go @@ -460,6 +460,13 @@ func TestDispatch_InvalidRepoName(t *testing.T) { assertCode(t, w, "NAME_INVALID") } +func TestDispatch_RepeatedSeparatorRepoName(t *testing.T) { + reg := newTestRegistry() + dg := pushBlob(t, reg, "team/a__b--c", []byte("layer")) + w := do(reg, http.MethodHead, "/v2/team/a__b--c/blobs/"+dg, nil, nil) + assert.Equal(t, http.StatusOK, w.Code) +} + func TestDispatch_UnknownPath(t *testing.T) { reg := newTestRegistry() w := do(reg, http.MethodGet, "/v2/team/app/frobnicate", nil, nil) diff --git a/spinifex/domains/ecr/service.go b/spinifex/domains/ecr/service.go index 5e09d9f0a..ed0a26871 100644 --- a/spinifex/domains/ecr/service.go +++ b/spinifex/domains/ecr/service.go @@ -39,189 +39,249 @@ const ( // conflicts are reported via the Found/Conflict flags rather than transport // errors, so they round-trip a NATS reply that only carries AWS error codes. +// RepoCreateRequest is the payload for SubjectRepoCreate, carrying the repository record to store. type RepoCreateRequest struct { Meta RepoMeta `json:"meta"` } +// RepoCreateResponse is the empty reply to SubjectRepoCreate; failures arrive as an AWS error code. type RepoCreateResponse struct{} +// RepoDescribeRequest is the payload for SubjectRepoDescribe, naming the repository to look up. type RepoDescribeRequest struct { Repo string `json:"repo"` } +// RepoDescribeResponse is the reply to SubjectRepoDescribe. Found is false, and Meta zero, when the +// repository does not exist in the caller's account. type RepoDescribeResponse struct { Found bool `json:"found"` Meta RepoMeta `json:"meta"` } +// RepoListRequest is the empty payload for SubjectRepoList; the account comes from the NATS header. type RepoListRequest struct{} +// RepoListResponse is the reply to SubjectRepoList, holding the names of every repository in the account. type RepoListResponse struct { Repos []string `json:"repos"` } +// RepoDeleteRequest is the payload for SubjectRepoDelete, naming the repository record to remove. type RepoDeleteRequest struct { Repo string `json:"repo"` } +// RepoDeleteResponse is the reply to SubjectRepoDelete. Found is false when there was no repository to delete. type RepoDeleteResponse struct { Found bool `json:"found"` } +// PolicyPutRequest is the payload for SubjectPolicyPut, carrying the raw JSON repository policy that +// SetRepositoryPolicy stores for Repo. type PolicyPutRequest struct { Repo string `json:"repo"` PolicyText []byte `json:"policyText"` } +// PolicyPutResponse is the empty reply to SubjectPolicyPut; failures arrive as an AWS error code. type PolicyPutResponse struct{} +// PolicyGetRequest is the payload for SubjectPolicyGet, naming the repository whose policy to read. type PolicyGetRequest struct { Repo string `json:"repo"` } +// PolicyGetResponse is the reply to SubjectPolicyGet. Found is false when the repository has no +// policy, which the gateway maps to RepositoryPolicyNotFoundException. type PolicyGetResponse struct { Found bool `json:"found"` PolicyText []byte `json:"policyText"` } +// PolicyDeleteRequest is the payload for SubjectPolicyDelete, naming the repository whose policy to remove. type PolicyDeleteRequest struct { Repo string `json:"repo"` } +// PolicyDeleteResponse is the reply to SubjectPolicyDelete. It returns the deleted policy text, as +// DeleteRepositoryPolicy does, and Found is false when no policy was set. type PolicyDeleteResponse struct { Found bool `json:"found"` PolicyText []byte `json:"policyText"` } +// LifecyclePutRequest is the payload for SubjectLifecyclePut, carrying the raw JSON lifecycle policy +// that PutLifecyclePolicy stores for Repo. type LifecyclePutRequest struct { Repo string `json:"repo"` PolicyText []byte `json:"policyText"` } +// LifecyclePutResponse is the empty reply to SubjectLifecyclePut; failures arrive as an AWS error code. type LifecyclePutResponse struct{} +// LifecycleGetRequest is the payload for SubjectLifecycleGet, naming the repository whose lifecycle policy to read. type LifecycleGetRequest struct { Repo string `json:"repo"` } +// LifecycleGetResponse is the reply to SubjectLifecycleGet. Found is false when the repository has no +// lifecycle policy. type LifecycleGetResponse struct { Found bool `json:"found"` PolicyText []byte `json:"policyText"` } +// LifecycleDeleteRequest is the payload for SubjectLifecycleDelete, naming the repository whose +// lifecycle policy to remove. type LifecycleDeleteRequest struct { Repo string `json:"repo"` } +// LifecycleDeleteResponse is the reply to SubjectLifecycleDelete. It returns the deleted policy text, +// as DeleteLifecyclePolicy does, and Found is false when no policy was set. type LifecycleDeleteResponse struct { Found bool `json:"found"` PolicyText []byte `json:"policyText"` } +// TagPutRequest is the payload for SubjectTagPut, pointing image tag Tag in Repo at manifest Digest. type TagPutRequest struct { Repo string `json:"repo"` Tag string `json:"tag"` Digest string `json:"digest"` } +// TagPutResponse is the empty reply to SubjectTagPut; failures arrive as an AWS error code. type TagPutResponse struct{} +// TagGetRequest is the payload for SubjectTagGet, naming the image tag to resolve. type TagGetRequest struct { Repo string `json:"repo"` Tag string `json:"tag"` } +// TagGetResponse is the reply to SubjectTagGet, holding the manifest digest the tag points at. Found +// is false when the tag does not exist. type TagGetResponse struct { Found bool `json:"found"` Digest string `json:"digest"` } +// TagListRequest is the payload for SubjectTagList, naming the repository whose image tags to list. type TagListRequest struct { Repo string `json:"repo"` } +// TagListResponse is the reply to SubjectTagList, holding every image tag in the repository. type TagListResponse struct { Tags []string `json:"tags"` } +// TagDeleteRequest is the payload for SubjectTagDelete, naming the image tag to remove. type TagDeleteRequest struct { Repo string `json:"repo"` Tag string `json:"tag"` } +// TagDeleteResponse is the reply to SubjectTagDelete. Found is false when the tag did not exist. type TagDeleteResponse struct { Found bool `json:"found"` } +// ManifestPutRequest is the payload for SubjectManifestPut, carrying the manifest metadata record to +// store; the manifest bytes themselves never travel NATS. type ManifestPutRequest struct { Repo string `json:"repo"` Meta ManifestMeta `json:"meta"` } +// ManifestPutResponse is the empty reply to SubjectManifestPut; failures arrive as an AWS error code. type ManifestPutResponse struct{} +// ManifestDescribeRequest is the payload for SubjectManifestDescribe, naming a manifest by repository and digest. type ManifestDescribeRequest struct { Repo string `json:"repo"` Digest string `json:"digest"` } +// ManifestDescribeResponse is the reply to SubjectManifestDescribe. Found is false when no manifest +// with that digest is recorded. type ManifestDescribeResponse struct { Found bool `json:"found"` Meta ManifestMeta `json:"meta"` } +// ManifestListRequest is the payload for SubjectManifestList, naming the repository whose manifests to list. type ManifestListRequest struct { Repo string `json:"repo"` } +// ManifestListResponse is the reply to SubjectManifestList, holding the digest of every manifest in the repository. type ManifestListResponse struct { Digests []string `json:"digests"` } +// ManifestDeleteRequest is the payload for SubjectManifestDelete, naming the manifest metadata record to remove. type ManifestDeleteRequest struct { Repo string `json:"repo"` Digest string `json:"digest"` } +// ManifestDeleteResponse is the reply to SubjectManifestDelete. Found is false when the manifest was not recorded. type ManifestDeleteResponse struct { Found bool `json:"found"` } +// UploadCreateRequest is the payload for SubjectUploadCreate, carrying the initial state of a new +// blob upload session. type UploadCreateRequest struct { UploadID string `json:"uploadID"` State UploadState `json:"state"` } +// UploadCreateResponse is the reply to SubjectUploadCreate, holding the KV revision the caller must +// pass to the first UploadUpdateRequest. type UploadCreateResponse struct { Revision uint64 `json:"revision"` } +// UploadGetRequest is the payload for SubjectUploadGet, naming the upload session to read. type UploadGetRequest struct { UploadID string `json:"uploadID"` } +// UploadGetResponse is the reply to SubjectUploadGet, holding the upload state and its current KV +// revision. Found is false when the session does not exist. type UploadGetResponse struct { Found bool `json:"found"` State UploadState `json:"state"` Revision uint64 `json:"revision"` } +// UploadUpdateRequest is the payload for SubjectUploadUpdate, a compare-and-swap that writes State only +// if the stored record is still at Revision. type UploadUpdateRequest struct { UploadID string `json:"uploadID"` State UploadState `json:"state"` Revision uint64 `json:"revision"` } +// UploadUpdateResponse is the reply to SubjectUploadUpdate. Conflict is true when the stored revision +// moved on; otherwise Revision is the new revision. Found is false for an unknown session. type UploadUpdateResponse struct { Found bool `json:"found"` Conflict bool `json:"conflict"` Revision uint64 `json:"revision"` } +// UploadDeleteRequest is the payload for SubjectUploadDelete, naming the upload session to remove. type UploadDeleteRequest struct { UploadID string `json:"uploadID"` } +// UploadDeleteResponse is the reply to SubjectUploadDelete. Found is false when the session did not exist. type UploadDeleteResponse struct { Found bool `json:"found"` } diff --git a/spinifex/domains/ecr/storage.go b/spinifex/domains/ecr/storage.go index eb2ec4f8d..e56f7004c 100644 --- a/spinifex/domains/ecr/storage.go +++ b/spinifex/domains/ecr/storage.go @@ -141,11 +141,14 @@ func DigestToken(digest string) string { return strings.ReplaceAll(digest, ":", "-") } -// repoNameRe is the OCI Distribution repository-name grammar. Compiled once. -var repoNameRe = regexp.MustCompile(`^(?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*$`) +// RepoNamePattern is the repository-name expression AWS ECR enforces, which is +// also the OCI Distribution grammar: components split by '.', '_', '__' or '-' +// runs, joined by '/'. +const RepoNamePattern = `[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*(/[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*)*` -// ValidateRepoName enforces the OCI repository-name grammar and 2-256 length -// bound. It returns nil for a valid name and a descriptive error otherwise. +var repoNameRe = regexp.MustCompile(`^(?:` + RepoNamePattern + `)$`) + +// ValidateRepoName enforces RepoNamePattern and the 2-256 length bound. It returns nil for a valid name and a descriptive error otherwise. func ValidateRepoName(name string) error { if len(name) < 2 || len(name) > 256 { return errors.New("repository name must be 2-256 characters") diff --git a/spinifex/domains/network/external/dhcp/manager.go b/spinifex/domains/network/external/dhcp/manager.go index 672a17329..5c359803e 100644 --- a/spinifex/domains/network/external/dhcp/manager.go +++ b/spinifex/domains/network/external/dhcp/manager.go @@ -56,8 +56,8 @@ const gwLRPAcquireBudget = 90 * time.Second // timeout so concurrent acquires across vpcds don't synchronise. const acquireAttemptJitter = time.Second -// ManagerConfig: Client + Store required. Now is for tests. -// AcquireSchedule/AcquireBudget control the outer DORA backoff; +// ManagerConfig configures NewManager. Client and Store are required; Now is +// for tests. AcquireSchedule/AcquireBudget control the outer DORA backoff; // zero values fall back to defaults. type ManagerConfig struct { Client Client diff --git a/spinifex/domains/network/external/ocinet/allocator.go b/spinifex/domains/network/external/ocinet/allocator.go index b123048ef..e1725abe8 100644 --- a/spinifex/domains/network/external/ocinet/allocator.go +++ b/spinifex/domains/network/external/ocinet/allocator.go @@ -48,6 +48,12 @@ const DisplayNamePrefix = "spinifex-" // an Elastic IP from an auto-assigned address without importing handlers. const purposeEIP = "eip" +// The two OCI objects Allocate creates, each with its own tenancy limit. +const ( + objectPrivateIP = "private-ip" + objectPublicIP = "public-ip" +) + // assignSchedule is the poll ladder for an address to reach ASSIGNED. OCI // assignment is asynchronous: CreatePublicIp returns ASSIGNING and the address // is not reachable until it settles. Shaped like the DHCP manager's DORA ladder @@ -121,6 +127,9 @@ type Config struct { Budget time.Duration // Sleep is the delay function, so tests do not wait. Sleep func(context.Context, time.Duration) error + // Now is the clock the orphan grace period is measured against, so a test + // can age an address without waiting for it. + Now func() time.Time } // Store persists bindings. Implemented over JetStream KV in store.go; the @@ -147,6 +156,7 @@ type PoolAllocator struct { schedule []time.Duration budget time.Duration sleep func(context.Context, time.Duration) error + now func() time.Time localPorts func(context.Context) (map[string]struct{}, error) localGateway func(context.Context, string) (bool, error) } @@ -177,6 +187,7 @@ func New(client oci.Client, store Store, cfg Config) (*PoolAllocator, error) { schedule: cfg.Schedule, budget: cfg.Budget, sleep: cfg.Sleep, + now: cfg.Now, localPorts: cfg.LocalPorts, localGateway: cfg.LocalGateway, } @@ -189,6 +200,9 @@ func New(client oci.Client, store Store, cfg Config) (*PoolAllocator, error) { if a.sleep == nil { a.sleep = sleepCtx } + if a.now == nil { + a.now = time.Now + } return a, nil } @@ -211,7 +225,7 @@ func (a *PoolAllocator) Allocate(ctx context.Context, req external.AllocateReque name := displayName(req) priv, err := a.client.AssignPrivateIP(ctx, a.cfg.VNICID, netip.Addr{}, name) if err != nil { - return netip.Addr{}, capacityErr(fmt.Errorf("ocinet: assign private ip: %w", err), err) + return netip.Addr{}, capacityErr(objectPrivateIP, fmt.Errorf("ocinet: assign private ip: %w", err), err) } pub, err := a.client.CreatePublicIP(ctx, a.cfg.CompartmentID, priv.ID, name) @@ -219,7 +233,7 @@ func (a *PoolAllocator) Allocate(ctx context.Context, req external.AllocateReque // Give the private IP back rather than leaving it for Reconcile: we are // still here and we know exactly what we just made. a.undoPrivate(ctx, priv.ID) - return netip.Addr{}, capacityErr(fmt.Errorf("ocinet: create public ip: %w", err), err) + return netip.Addr{}, capacityErr(objectPublicIP, fmt.Errorf("ocinet: create public ip: %w", err), err) } pub, err = a.waitAssigned(ctx, pub) @@ -448,14 +462,21 @@ func (a *PoolAllocator) undoPublic(ctx context.Context, publicIPID string) { } } -// capacityErr maps an OCI quota refusal onto the AWS error that means the same -// thing, so a customer who has hit the 64-per-VNIC or 50-per-region ceiling is -// told they are out of addresses rather than shown an Oracle error code. -func capacityErr(wrapped, raw error) error { - if errors.Is(raw, oci.ErrLimitExceeded) { - return fmt.Errorf("%w: %w", errors.New(awserrors.ErrorInsufficientAddressCapacity), wrapped) +// capacityErr maps an OCI quota refusal onto the AWS error for the same limit. +// The two ceilings are different failures and a single capacity code hides +// which one was hit, which is the difference between waiting and releasing. +func capacityErr(object string, wrapped, raw error) error { + if !errors.Is(raw, oci.ErrLimitExceeded) { + return wrapped } - return wrapped + code := awserrors.ErrorInsufficientAddressCapacity + switch object { + case objectPublicIP: + code = awserrors.ErrorAddressLimitExceeded + case objectPrivateIP: + code = awserrors.ErrorPrivateIpAddressLimitExceeded + } + return fmt.Errorf("%w: %w", errors.New(code), wrapped) } // displayName marks the object as ours and carries the AWS identity, so the OCI diff --git a/spinifex/domains/network/external/ocinet/allocator_test.go b/spinifex/domains/network/external/ocinet/allocator_test.go index 571d4e0db..fc65a024d 100644 --- a/spinifex/domains/network/external/ocinet/allocator_test.go +++ b/spinifex/domains/network/external/ocinet/allocator_test.go @@ -3,6 +3,7 @@ package ocinet_test import ( "context" "errors" + "fmt" "net/netip" "testing" "time" @@ -79,7 +80,8 @@ func TestAllocateWaitsOutAsyncAssignment(t *testing.T) { "Allocate must not return an address that is still provisioning") } -func TestAllocateSurfacesQuotaExhaustionAsInsufficientAddressCapacity(t *testing.T) { +// A full VNIC is the AWS per-interface limit, not a shortage of addresses. +func TestAllocateSurfacesAFullVNICAsPrivateIpAddressLimitExceeded(t *testing.T) { ctx := context.Background() fake := oci.NewFake() fake.PrivateLimit = 1 @@ -90,10 +92,41 @@ func TestAllocateSurfacesQuotaExhaustionAsInsufficientAddressCapacity(t *testing _, err = a.Allocate(ctx, external.AllocateRequest{PoolName: "oci-wan", AllocationID: "eipalloc-2"}) require.Error(t, err) - assert.Contains(t, err.Error(), awserrors.ErrorInsufficientAddressCapacity, + assert.Contains(t, err.Error(), awserrors.ErrorPrivateIpAddressLimitExceeded, "an OCI quota refusal must reach the customer as the AWS error that means the same thing") } +// A tenancy out of reserved public IPs is the AWS Elastic IP limit. The two +// ceilings resolved to one code before, which told an operator to wait for +// capacity when the fix was to release an address they already hold. +func TestAllocateSurfacesAnExhaustedPublicIPQuotaAsAddressLimitExceeded(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + fake.FailWith["CreatePublicIP"] = fmt.Errorf("public ip limit reached: %w", oci.ErrLimitExceeded) + a, _ := newTestAllocator(t, fake) + + _, err := a.Allocate(ctx, external.AllocateRequest{PoolName: "oci-wan", AllocationID: "eipalloc-1"}) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorAddressLimitExceeded) + assert.NotContains(t, err.Error(), awserrors.ErrorInsufficientAddressCapacity, + "a quota the customer can free by releasing an address must not read as the region being out of them") +} + +// Anything that is not a quota keeps its own error rather than being dressed up +// as a limit, or an outage reads as an exhausted account. +func TestAllocateLeavesANonQuotaFailureUnmapped(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + fake.FailWith["CreatePublicIP"] = errors.New("boom") + a, _ := newTestAllocator(t, fake) + + _, err := a.Allocate(ctx, external.AllocateRequest{PoolName: "oci-wan", AllocationID: "eipalloc-1"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "boom") + assert.NotContains(t, err.Error(), awserrors.ErrorAddressLimitExceeded) + assert.NotContains(t, err.Error(), awserrors.ErrorInsufficientAddressCapacity) +} + // A failure after the private IP exists must not leave it behind: we are still // running and know exactly what we just created, so rolling back beats leaving // a billable object for the next reconcile pass. diff --git a/spinifex/domains/network/external/ocinet/authcheck.go b/spinifex/domains/network/external/ocinet/authcheck.go new file mode 100644 index 000000000..25f5c72e7 --- /dev/null +++ b/spinifex/domains/network/external/ocinet/authcheck.go @@ -0,0 +1,57 @@ +package ocinet + +import ( + "context" + "fmt" + "log/slog" + + "github.com/mulgadc/spinifex/spinifex/domains/network/external" +) + +// CheckAuthorisation makes the cheapest read in each permission class an +// allocation needs, so a credential that cannot allocate is known at startup +// rather than at the first launch that wants an address. +// +// Reads rather than a real assign-and-release round trip, deliberately: a full +// round trip would also fail when the subnet is simply out of addresses, and +// reporting that as an authorisation problem sends an operator to IAM for a +// capacity fault. +func (a *PoolAllocator) CheckAuthorisation(ctx context.Context) error { + ips, err := a.client.ListPrivateIPs(ctx, a.cfg.VNICID) + if err != nil { + return fmt.Errorf("listing the private IPs on vnic %s failed, which needs `use vnics` and `manage private-ips` in compartment %s: %w", + a.cfg.VNICID, a.cfg.CompartmentID, err) + } + + subnetID := "" + for _, ip := range ips { + if ip.SubnetID != "" { + subnetID = ip.SubnetID + break + } + } + if subnetID == "" { + // The VNIC always has a primary private IP, so an empty list means the + // credential read someone else's VNIC or the OCID is stale. + return fmt.Errorf("vnic %s reports no private IP with a subnet, so the subnet permission cannot be checked", a.cfg.VNICID) + } + + if _, err := a.client.GetSubnet(ctx, subnetID); err != nil { + return fmt.Errorf("reading subnet %s failed, which needs `use subnets` in compartment %s; AssignPrivateIP requires SUBNET_ATTACH from that same verb: %w", + subnetID, a.cfg.CompartmentID, err) + } + return nil +} + +// reportAuthorisation logs the verdict and does not fail construction. The node +// still serves every other pool and NAT mode, and a credential fault should not +// be the reason a whole node refuses to start. +func reportAuthorisation(ctx context.Context, a *PoolAllocator, pool external.ExternalPoolConfig) { + if err := a.CheckAuthorisation(ctx); err != nil { + slog.ErrorContext(ctx, "ocinet credential cannot allocate an external address", + "pool", pool.Name, "vnic_id", a.cfg.VNICID, "compartment", a.cfg.CompartmentID, "error", err) + return + } + slog.InfoContext(ctx, "ocinet credential authorised to allocate", + "pool", pool.Name, "vnic_id", a.cfg.VNICID, "compartment", a.cfg.CompartmentID) +} diff --git a/spinifex/domains/network/external/ocinet/authcheck_test.go b/spinifex/domains/network/external/ocinet/authcheck_test.go new file mode 100644 index 000000000..9e243c20f --- /dev/null +++ b/spinifex/domains/network/external/ocinet/authcheck_test.go @@ -0,0 +1,113 @@ +package ocinet_test + +import ( + "bytes" + "context" + "errors" + "log/slog" + "net/netip" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/mulgadc/spinifex/spinifex/domains/network/external/ocinet" + "github.com/mulgadc/spinifex/spinifex/providers/cloud/oci" +) + +// The primary private IP is what carries the subnet OCID, so the check needs one +// seeded to have anything to ask about. +func seedPrimary(fake *oci.Fake) { + fake.SeedPrivateIP(oci.PrivateIP{ + ID: "ocid1.privateip.oc1..primary", + Address: netip.MustParseAddr("10.200.0.2"), + VNICID: "ocid1.vnic.oc1..vnic1", + SubnetID: "ocid1.subnet.oc1..subnet1", + IsPrimary: true, + }) +} + +func TestCheckAuthorisationPassesWhenEveryPermissionIsHeld(t *testing.T) { + fake := oci.NewFake() + seedPrimary(fake) + a, _ := newTestAllocator(t, fake) + + require.NoError(t, a.CheckAuthorisation(context.Background())) +} + +// The defect this guards: a credential granted vnics and private-ips but no +// subnet verb reads both of those fine and is refused every AssignPrivateIP. +func TestCheckAuthorisationFailsWhenTheSubnetVerbIsMissing(t *testing.T) { + fake := oci.NewFake() + seedPrimary(fake) + fake.FailWith["GetSubnet"] = errors.New("NotAuthorizedOrNotFound") + a, _ := newTestAllocator(t, fake) + + err := a.CheckAuthorisation(context.Background()) + require.Error(t, err) + assert.Contains(t, err.Error(), "use subnets") + assert.Contains(t, err.Error(), "SUBNET_ATTACH") +} + +func TestCheckAuthorisationFailsWhenTheVNICCannotBeRead(t *testing.T) { + fake := oci.NewFake() + seedPrimary(fake) + fake.FailWith["ListPrivateIPs"] = errors.New("NotAuthorizedOrNotFound") + a, _ := newTestAllocator(t, fake) + + err := a.CheckAuthorisation(context.Background()) + require.Error(t, err) + assert.Contains(t, err.Error(), "use vnics") +} + +// An empty list means the OCID is not a VNIC this credential can see, which is a +// different fault from a missing verb and has to read differently. +func TestCheckAuthorisationFailsWhenTheVNICHasNoSubnet(t *testing.T) { + a, _ := newTestAllocator(t, oci.NewFake()) + + err := a.CheckAuthorisation(context.Background()) + require.Error(t, err) + assert.Contains(t, err.Error(), "no private IP with a subnet") +} + +// captureLogs makes slog's default logger write JSON into a buffer for the +// duration of one test, because the gate reads these lines out of a journal. +func captureLogs(t *testing.T) *bytes.Buffer { + t.Helper() + var buf bytes.Buffer + saved := slog.Default() + slog.SetDefault(slog.New(slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}))) + t.Cleanup(func() { slog.SetDefault(saved) }) + return &buf +} + +// The exact string matters more than usual: validate-topology.sh greps for it, +// so renaming it silently turns the gate into one that never fires. +func TestReportAuthorisationLogsTheLineTheGateWaitsFor(t *testing.T) { + fake := oci.NewFake() + seedPrimary(fake) + a, _ := newTestAllocator(t, fake) + buf := captureLogs(t) + + ocinet.ReportAuthorisation(context.Background(), a, ocinet.PoolWithAuth("instance_principal", "", "")) + + out := buf.String() + assert.Contains(t, out, "ocinet credential authorised to allocate") + assert.NotContains(t, out, "cannot allocate") + assert.Contains(t, out, "ocid1.vnic.oc1..vnic1") +} + +func TestReportAuthorisationLogsTheRefusalAndNamesTheVerb(t *testing.T) { + fake := oci.NewFake() + seedPrimary(fake) + fake.FailWith["GetSubnet"] = errors.New("NotAuthorizedOrNotFound") + a, _ := newTestAllocator(t, fake) + buf := captureLogs(t) + + ocinet.ReportAuthorisation(context.Background(), a, ocinet.PoolWithAuth("instance_principal", "", "")) + + out := buf.String() + assert.Contains(t, out, "ocinet credential cannot allocate an external address") + assert.Contains(t, out, "use subnets") + assert.Contains(t, out, `"level":"ERROR"`) +} diff --git a/spinifex/domains/network/external/ocinet/export_test.go b/spinifex/domains/network/external/ocinet/export_test.go new file mode 100644 index 000000000..f8f0edcb9 --- /dev/null +++ b/spinifex/domains/network/external/ocinet/export_test.go @@ -0,0 +1,40 @@ +package ocinet + +import ( + "github.com/mulgadc/spinifex/spinifex/domains/network/external" + "github.com/mulgadc/spinifex/spinifex/providers/cloud/oci" +) + +// NewClient is the credential choice a pool makes, which is worth testing on its +// own: both real constructors need an instance or a key file, so the branch is +// otherwise observable only on OCI. +var NewClient = newClient + +// SwapClientConstructors replaces both so a test can see which one a pool selects, +// and returns a function restoring them. +func SwapClientConstructors( + principal func() (oci.Client, error), + configFile func(path, profile string) (oci.Client, error), +) func() { + savedPrincipal, savedConfigFile := newInstancePrincipalClient, newConfigFileClient + newInstancePrincipalClient, newConfigFileClient = principal, configFile + return func() { + newInstancePrincipalClient, newConfigFileClient = savedPrincipal, savedConfigFile + } +} + +// PoolWithAuth is the smallest source="oci" pool that reaches the credential +// choice, so a test states the auth it means and nothing else. +func PoolWithAuth(auth, configFile, profile string) external.ExternalPoolConfig { + return external.ExternalPoolConfig{ + Name: "oci-public", + Source: external.SourceOCI, + OCIAuth: auth, + OCIConfigFile: configFile, + OCIConfigProfile: profile, + } +} + +// ReportAuthorisation logs the line validate-topology.sh gates the whole OCI +// suite on, so a test pins the exact text and not just the behaviour. +var ReportAuthorisation = reportAuthorisation diff --git a/spinifex/domains/network/external/ocinet/reconcile.go b/spinifex/domains/network/external/ocinet/reconcile.go index 488955362..4002d2850 100644 --- a/spinifex/domains/network/external/ocinet/reconcile.go +++ b/spinifex/domains/network/external/ocinet/reconcile.go @@ -6,6 +6,7 @@ import ( "fmt" "log/slog" "strings" + "time" "github.com/mulgadc/spinifex/spinifex/foundation/state/kvstore" "github.com/mulgadc/spinifex/spinifex/providers/cloud/oci" @@ -20,8 +21,16 @@ type ReconcileResult struct { Stale []string // Skipped is the private IPs left alone because they are not ours. Skipped int + // Orphaned is the OCIDs of detached reserved public IPs deleted because + // nothing references them and no VNIC could have reported them. + Orphaned []string } +// orphanGrace is how long a detached reserved public IP must have existed +// before a reconcile will collect it. CreatePublicIP returns before the address +// is attached, so anything younger may be another node's allocation in flight. +const orphanGrace = 30 * time.Minute + // Reconcile squares our record against OCI, in both directions. It is required // on startup rather than optional: Allocate creates OCI objects before writing // the record, so a crash in between leaves a reserved public IP that costs @@ -35,6 +44,9 @@ type ReconcileResult struct { // - A binding naming objects OCI no longer has is a stale record from an // interrupted Release, or from someone deleting the address in the console. // Drop it, so the address is not reported to a customer as theirs. +// - A reserved public IP attached to nothing is on no VNIC, so neither +// direction above can see it, and it holds a quota slot until deleted. +// Collect it once it is old enough to not be an allocation in flight. // // **It never touches an object without DisplayNamePrefix.** The reference host // carries operator-created secondary addresses on the same VNIC, and a @@ -53,6 +65,7 @@ func (a *PoolAllocator) Reconcile(ctx context.Context) (ReconcileResult, error) // the leak this pass exists to find is precisely an OCI object created // before its binding was written. rec, err := a.store.Get(ctx, a.cfg.Pool.Name) + recorded := err == nil if err != nil && !errors.Is(err, kvstore.ErrNotFound) { return res, fmt.Errorf("ocinet reconcile: read bindings: %w", err) } @@ -149,5 +162,71 @@ func (a *PoolAllocator) Reconcile(ctx context.Context) (ReconcileResult, error) res.Stale = stale } + if err := a.collectOrphanedPublicIPs(ctx, rec, recorded, &res); err != nil { + return res, err + } return res, nil } + +// collectOrphanedPublicIPs deletes reserved public IPs that nothing can reach. +// +// Four conditions have to hold together, and each one rules out a class of +// address that must survive: +// +// - Our display-name prefix, so an operator's own reserved address is never +// a candidate. +// - No private IP, so no guest anywhere is receiving traffic on it. +// - Named by no binding in the pool record, because an allocated but +// unassociated Elastic IP is detached too and is the customer's to keep. +// - Older than orphanGrace, because a detached address is also what a +// CreatePublicIP on another node looks like until it finishes attaching. +// +// The binding test is only as good as the record, so a pool with no record at +// all is not swept. That is a pool which has never allocated and has nothing to +// collect, or a store that cannot be read — and those are indistinguishable +// from here, while one of them means every held address looks like an orphan. +func (a *PoolAllocator) collectOrphanedPublicIPs(ctx context.Context, rec Record, recorded bool, res *ReconcileResult) error { + if !recorded { + slog.DebugContext(ctx, "ocinet reconcile skipped the orphan sweep: no binding record to judge against", + "pool", a.cfg.Pool.Name) + return nil + } + + reserved, err := a.client.ListReservedPublicIPs(ctx, a.cfg.CompartmentID) + if err != nil { + // A credential without `read public-ips` in the compartment can still + // allocate, so refusing the whole pass here would take a working node + // down over a cleanup it cannot perform. + slog.WarnContext(ctx, "ocinet reconcile could not list reserved public ips; orphans will accumulate", + "pool", a.cfg.Pool.Name, "compartment", a.cfg.CompartmentID, "error", err) + return nil + } + + bound := make(map[string]struct{}, len(rec.Bindings)) + for _, b := range rec.Bindings { + bound[b.PublicIPID] = struct{}{} + } + + cutoff := a.now().Add(-orphanGrace) + for _, p := range reserved { + if !strings.HasPrefix(p.DisplayName, DisplayNamePrefix) || p.PrivateIPID != "" { + continue + } + if _, ok := bound[p.ID]; ok { + continue + } + // A zero TimeCreated means the age is unknown, and an unknown age is + // not evidence of an orphan. + if p.TimeCreated.IsZero() || p.TimeCreated.After(cutoff) { + continue + } + if err := a.client.DeletePublicIP(ctx, p.ID); err != nil && !errors.Is(err, oci.ErrNotFound) { + return fmt.Errorf("ocinet reconcile: collect orphaned public ip %s: %w", p.ID, err) + } + slog.WarnContext(ctx, "ocinet reconcile collected an orphaned reserved public ip", + "pool", a.cfg.Pool.Name, "public_ip_id", p.ID, "public_ip", p.Address.String(), + "display_name", p.DisplayName, "created", p.TimeCreated) + res.Orphaned = append(res.Orphaned, p.ID) + } + return nil +} diff --git a/spinifex/domains/network/external/ocinet/reconcile_test.go b/spinifex/domains/network/external/ocinet/reconcile_test.go index abb3fad29..c48326c66 100644 --- a/spinifex/domains/network/external/ocinet/reconcile_test.go +++ b/spinifex/domains/network/external/ocinet/reconcile_test.go @@ -227,3 +227,160 @@ func TestReconcileStillDropsItsOwnStaleBinding(t *testing.T) { require.NoError(t, err) assert.Equal(t, []string{ip.String()}, res.Stale) } + +// orphanAllocator runs with a clock advanced past the grace period, so a +// seeded address created "now" reads as old without the test waiting. +func orphanAllocator(t *testing.T, fake *oci.Fake) (*ocinet.PoolAllocator, *ocinet.MemStore) { + t.Helper() + store := ocinet.NewMemStore() + a, err := ocinet.New(fake, store, ocinet.Config{ + Pool: external.ExternalPoolConfig{Name: "oci-wan", Source: external.SourceOCI}, + VNICID: "ocid1.vnic.oc1..vnic1", + CompartmentID: "ocid1.compartment.oc1..comp1", + Schedule: []time.Duration{time.Millisecond}, + Budget: time.Second, + Sleep: func(context.Context, time.Duration) error { return nil }, + Now: func() time.Time { return time.Now().Add(2 * time.Hour) }, + }) + require.NoError(t, err) + // The sweep needs a readable record to judge bindings against, and a pool + // that has ever allocated has one. Creating it empty is that pool. + require.NoError(t, store.Mutate(context.Background(), "oci-wan", + func(*ocinet.Record) (bool, error) { return true, nil })) + return a, store +} + +// seedOrphan is a reserved public IP attached to nothing, which is what a +// destroyed node or a failed rollback leaves behind. +func seedOrphan(fake *oci.Fake, id, name string, created time.Time) { + fake.SeedPublicIP(oci.PublicIP{ + ID: id, + Address: netip.MustParseAddr("203.0.113.200"), + DisplayName: name, + Lifetime: oci.LifetimeReserved, + LifecycleState: oci.LifecycleStateAvailable, + TimeCreated: created, + }) +} + +// The leak that exhausted the tenancy. A detached reserved public IP is on no +// VNIC, so walking the VNIC cannot see it however many passes run. +func TestReconcileCollectsADetachedReservedPublicIPNoVNICCanReport(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..orphan", ocinet.DisplayNamePrefix+"eipalloc-gone", time.Now()) + a, _ := orphanAllocator(t, fake) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Equal(t, []string{"ocid1.publicip.oc1..orphan"}, res.Orphaned) + assert.Empty(t, fake.PublicIPs(), "the orphan still holds a tenancy quota slot") +} + +func TestReconcileLeavesAReservedPublicIPThatIsNotOursAlone(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..theirs", "IP for NAT gateway", time.Now()) + a, _ := orphanAllocator(t, fake) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) + assert.Len(t, fake.PublicIPs(), 1, "an address without our prefix is never a candidate") +} + +// An allocated but unassociated Elastic IP is detached too, and is the +// customer's to keep. The binding is what tells the two apart. +func TestReconcileLeavesADetachedButBoundElasticIPAlone(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..heldeip", ocinet.DisplayNamePrefix+"eipalloc-held", time.Now()) + a, store := orphanAllocator(t, fake) + require.NoError(t, store.Mutate(ctx, "oci-wan", func(r *ocinet.Record) (bool, error) { + r.Bindings["203.0.113.200"] = ocinet.Binding{ + PublicIPID: "ocid1.publicip.oc1..heldeip", + Purpose: "eip", + AllocationID: "eipalloc-held", + } + return true, nil + })) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) + assert.Len(t, fake.PublicIPs(), 1, "a held EIP must survive a reconcile on any node") +} + +// CreatePublicIP returns before the address attaches, so a young detached one +// may be another node's allocation mid-flight. +func TestReconcileLeavesAYoungDetachedAddressAlone(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..inflight", ocinet.DisplayNamePrefix+"eni-new", time.Now()) + a, store := newTestAllocator(t, fake) + require.NoError(t, store.Mutate(ctx, "oci-wan", + func(*ocinet.Record) (bool, error) { return true, nil })) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) + assert.Len(t, fake.PublicIPs(), 1, "an in-flight allocation must not be collected") +} + +// An unknown age is not evidence of an orphan. +func TestReconcileLeavesAnAddressWithNoCreationTimeAlone(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..undated", ocinet.DisplayNamePrefix+"eni-undated", time.Time{}) + a, _ := orphanAllocator(t, fake) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) + assert.Len(t, fake.PublicIPs(), 1) +} + +// A credential that cannot list the compartment can still allocate, so the +// pass warns and carries on rather than failing a working node. +func TestReconcileSurvivesACredentialThatCannotListReservedPublicIPs(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..orphan", ocinet.DisplayNamePrefix+"eni-x", time.Now()) + fake.FailWith["ListReservedPublicIPs"] = oci.ErrNotFound + a, _ := orphanAllocator(t, fake) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) +} + +// A store that cannot be read looks exactly like a pool that never allocated, +// and one of those means every address a customer holds appears unbound. +func TestReconcileDoesNotSweepWhenThereIsNoBindingRecord(t *testing.T) { + ctx := context.Background() + fake := oci.NewFake() + seedOrphan(fake, "ocid1.publicip.oc1..orphan", ocinet.DisplayNamePrefix+"eipalloc-x", time.Now()) + // Deliberately no record: orphanAllocator's empty one is what makes the + // sweep safe, so its absence must disable it. + store := ocinet.NewMemStore() + a, err := ocinet.New(fake, store, ocinet.Config{ + Pool: external.ExternalPoolConfig{Name: "oci-wan", Source: external.SourceOCI}, + VNICID: "ocid1.vnic.oc1..vnic1", + CompartmentID: "ocid1.compartment.oc1..comp1", + Sleep: func(context.Context, time.Duration) error { return nil }, + Now: func() time.Time { return time.Now().Add(2 * time.Hour) }, + }) + require.NoError(t, err) + + res, err := a.Reconcile(ctx) + require.NoError(t, err) + + assert.Empty(t, res.Orphaned) + assert.Len(t, fake.PublicIPs(), 1) +} diff --git a/spinifex/domains/network/external/ocinet/wiring.go b/spinifex/domains/network/external/ocinet/wiring.go index bfcdb84a3..e62019574 100644 --- a/spinifex/domains/network/external/ocinet/wiring.go +++ b/spinifex/domains/network/external/ocinet/wiring.go @@ -13,17 +13,9 @@ import ( "github.com/mulgadc/spinifex/spinifex/providers/cloud/oci" ) -// FromPoolConfig builds a live allocator for one source="oci" pool: API-key -// auth from an ~/.oci/config profile, the VNIC resolved from the host interface -// when the config names one rather than an OCID, and the JetStream-backed -// bindings store. -// -// v1 authenticates from the config file rather than as an instance principal. -// It needs no dynamic group and no IAM policy from a tenancy admin, and it -// reads no instance metadata — which matters, because Spinifex's own IMDS -// endpoints claim 169.254.169.254 on the host and take the cloud's metadata -// service down with it. Configure oci_vnic_id rather than oci_vnic_iface for -// the same reason: resolving by interface is a metadata lookup. +// FromPoolConfig builds a live allocator for one source="oci" pool: the auth +// method the pool names, the VNIC resolved from the host interface when the +// config names one rather than an OCID, and the JetStream-backed bindings store. // // It does not reconcile. The caller decides when that pass runs, because it // deletes OCI objects and a startup path that does so before the store is @@ -35,7 +27,7 @@ func FromPoolConfig(ctx context.Context, js jetstream.JetStream, pool external.E return nil, fmt.Errorf("ocinet: pool %q has source %q, not %q", pool.Name, pool.Source, external.SourceOCI) } - client, err := oci.NewConfigFileClient(pool.OCIConfigFile, pool.OCIConfigProfile) + client, err := newClient(pool) if err != nil { return nil, fmt.Errorf("ocinet: pool %q: %w", pool.Name, err) } @@ -56,7 +48,7 @@ func FromPoolConfig(ctx context.Context, js jetstream.JetStream, pool external.E compartmentID = inst.CompartmentID } - return New(client, NewKVStore(js), Config{ + alloc, err := New(client, NewKVStore(js), Config{ Pool: pool, VNICID: vnicID, CompartmentID: compartmentID, @@ -73,8 +65,42 @@ func FromPoolConfig(ctx context.Context, js jetstream.JetStream, pool external.E GatewayPortLocal(ctx, topology.GatewayChassisRedirectPort(vpcID)) }, }) + if err != nil { + return nil, err + } + + // Before this, resolving the VNIC was the last thing logged, and that comes + // from the metadata service and needs no IAM policy at all. So an + // unauthorised node looked ready and refused the first launch instead. + reportAuthorisation(ctx, alloc, pool) + return alloc, nil } +// newClient authenticates the way the pool asks. Instance principal takes the +// credential from the instance's own certificate, so no key material sits on any +// node; a config file is the default because it needs nothing from a tenancy +// admin. +// +// Both read the metadata service on a pool configured with oci_vnic_iface, which +// is what the guide recommends, so instance principal adds no dependency on IMDS +// that such a node does not already have. The IMDS remap is what makes either +// work, since Spinifex's own endpoints otherwise claim 169.254.169.254. +func newClient(pool external.ExternalPoolConfig) (oci.Client, error) { + if pool.UsesInstancePrincipal() { + slog.Info("ocinet authenticating as the instance principal", "pool", pool.Name) + return newInstancePrincipalClient() + } + return newConfigFileClient(pool.OCIConfigFile, pool.OCIConfigProfile) +} + +// Indirected so a test can assert which credential a pool selects. Both real +// constructors need an instance or a key file, so the branch is otherwise only +// observable on OCI, and it was wrong there for a release without anyone seeing. +var ( + newInstancePrincipalClient = oci.NewInstancePrincipalClient + newConfigFileClient = oci.NewConfigFileClient +) + // resolveVNICID turns whichever VNIC key the operator set into an OCID. func resolveVNICID(ctx context.Context, pool external.ExternalPoolConfig) (string, error) { if pool.OCIVNICID != "" { diff --git a/spinifex/domains/network/external/ocinet/wiring_test.go b/spinifex/domains/network/external/ocinet/wiring_test.go new file mode 100644 index 000000000..004f0867e --- /dev/null +++ b/spinifex/domains/network/external/ocinet/wiring_test.go @@ -0,0 +1,99 @@ +package ocinet_test + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/mulgadc/spinifex/spinifex/domains/network/external" + "github.com/mulgadc/spinifex/spinifex/domains/network/external/ocinet" + "github.com/mulgadc/spinifex/spinifex/providers/cloud/oci" +) + +// A pool naming oci_auth="instance_principal" must not read a key file. It did +// for a release: the allocator failed with "open ~/.oci/config: no such file or +// directory" on a node that had been given no key on purpose. +func TestNewClientSelectsTheCredentialThePoolNames(t *testing.T) { + for _, tc := range []struct { + name string + auth string + configFile string + profile string + wantPrincipal bool + }{ + { + name: "instance principal", + auth: external.OCIAuthInstancePrincipal, + wantPrincipal: true, + }, + { + // A pool configured for an instance principal still must not fall + // back to a key file when one happens to be configured as well. + name: "instance principal with a config file also set", + auth: external.OCIAuthInstancePrincipal, + configFile: "/etc/spinifex/oci/config", + profile: "spinifex", + wantPrincipal: true, + }, + { + name: "config file", + auth: external.OCIAuthConfigFile, + configFile: "/etc/spinifex/oci/config", + profile: "spinifex", + }, + { + // The default, so a pool written before oci_auth existed keeps + // authenticating from its key file. + name: "unset auth defaults to the config file", + configFile: "/etc/spinifex/oci/config", + profile: "spinifex", + }, + } { + t.Run(tc.name, func(t *testing.T) { + var principalCalls, configFileCalls int + var gotPath, gotProfile string + restore := ocinet.SwapClientConstructors( + func() (oci.Client, error) { + principalCalls++ + return oci.NewFake(), nil + }, + func(path, profile string) (oci.Client, error) { + configFileCalls++ + gotPath, gotProfile = path, profile + return oci.NewFake(), nil + }, + ) + defer restore() + + client, err := ocinet.NewClient(ocinet.PoolWithAuth(tc.auth, tc.configFile, tc.profile)) + require.NoError(t, err) + require.NotNil(t, client) + + if tc.wantPrincipal { + assert.Equal(t, 1, principalCalls, "should authenticate as the instance") + assert.Zero(t, configFileCalls, "must not read a key file") + return + } + assert.Equal(t, 1, configFileCalls, "should authenticate from the key file") + assert.Zero(t, principalCalls) + assert.Equal(t, tc.configFile, gotPath, "the pool's oci_config_file should reach the SDK") + assert.Equal(t, tc.profile, gotProfile, "the pool's oci_config_profile should reach the SDK") + }) + } +} + +// The error has to name the pool: a node carries one OCI pool today and may carry +// several, and "no such file or directory" alone says nothing about which. +func TestNewClientReturnsTheConstructorError(t *testing.T) { + wantErr := errors.New("no such file or directory") + restore := ocinet.SwapClientConstructors( + func() (oci.Client, error) { return nil, errors.New("not on an instance") }, + func(string, string) (oci.Client, error) { return nil, wantErr }, + ) + defer restore() + + _, err := ocinet.NewClient(ocinet.PoolWithAuth(external.OCIAuthConfigFile, "/missing", "spinifex")) + require.ErrorIs(t, err, wantErr) +} diff --git a/spinifex/domains/network/external/pool.go b/spinifex/domains/network/external/pool.go index 462dced7a..17a6f5b23 100644 --- a/spinifex/domains/network/external/pool.go +++ b/spinifex/domains/network/external/pool.go @@ -69,6 +69,8 @@ type StaticRangeAllocator struct { var _ GatewayIPAllocator = (*StaticRangeAllocator)(nil) +// NewStaticRangeAllocator returns an allocator that reads existing gateway LRPs +// from client to find the next free IP in a pool's gw_lrp_range. func NewStaticRangeAllocator(client ovn.Client) *StaticRangeAllocator { return &StaticRangeAllocator{OVN: client} } diff --git a/spinifex/domains/network/external/types.go b/spinifex/domains/network/external/types.go index edf86b06a..58fb8b81a 100644 --- a/spinifex/domains/network/external/types.go +++ b/spinifex/domains/network/external/types.go @@ -32,9 +32,10 @@ type ExternalPoolConfig struct { OCIVNICIface string OCISubnetID string OCIPublicIPPool string - // OCIConfigFile and OCIConfigProfile select the API-key credentials. - // v1 authenticates from a config file rather than as an instance - // principal: no dynamic group, no IAM policy, and no metadata read. + // OCIAuth selects how the provider authenticates: OCIAuthInstancePrincipal + // for the instance's own certificate, or OCIAuthConfigFile (the default) for + // an API key, which OCIConfigFile and OCIConfigProfile then locate. + OCIAuth string OCIConfigFile string OCIConfigProfile string // Exoscale* configure a source="exoscale" pool: the zone the EIPs live in, @@ -56,6 +57,12 @@ func (p *ExternalPoolConfig) IsOCI() bool { return p != nil && p.Source == SourceOCI } +// UsesInstancePrincipal reports whether the OCI provider authenticates as the +// instance rather than from an API-key config file. +func (p *ExternalPoolConfig) UsesInstancePrincipal() bool { + return p != nil && p.OCIAuth == OCIAuthInstancePrincipal +} + // IsExoscale reports whether the pool sources IPs from Exoscale Elastic IPs. func (p *ExternalPoolConfig) IsExoscale() bool { return p != nil && p.Source == SourceExoscale @@ -76,6 +83,14 @@ const ( // so unlike OCI there is no private half to map. SourceExoscale = "exoscale" + // OCIAuthConfigFile authenticates from an API-key config file. The default, + // because it is what an operator already has from `oci setup config`. + OCIAuthConfigFile = "config_file" + // OCIAuthInstancePrincipal authenticates as the instance, from the + // certificate its metadata service serves. No key material on any node and + // nothing to rotate, at the cost of a dynamic group and an IAM policy. + OCIAuthInstancePrincipal = "instance_principal" + // DHCPMACDerived leases with deterministic per-client-id 02:xx MACs. DHCPMACDerived = "derived" // DHCPMACInterface leases with the bind interface's own MAC; the diff --git a/spinifex/domains/network/invariants/federation_isolation_test.go b/spinifex/domains/network/invariants/federation_isolation_test.go index 22738ca53..47384ba06 100644 --- a/spinifex/domains/network/invariants/federation_isolation_test.go +++ b/spinifex/domains/network/invariants/federation_isolation_test.go @@ -17,6 +17,7 @@ import ( // remote AZ identifiers, OVN-IC transit switches, or inter-AZ link state. // Cross-AZ federation is always mediated by L4." func TestS6_FederationIsolated(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S6: "L4 is the only layer aware of other AZs. ` + `No layer below L4 references remote AZ identifiers, OVN-IC transit ` + `switches, or inter-AZ link state. Cross-AZ federation is always ` + diff --git a/spinifex/domains/network/invariants/host_containment_test.go b/spinifex/domains/network/invariants/host_containment_test.go index a9a57a014..2096211f6 100644 --- a/spinifex/domains/network/invariants/host_containment_test.go +++ b/spinifex/domains/network/invariants/host_containment_test.go @@ -17,6 +17,7 @@ import ( // bridge mode, or physical NIC state directly. L0's UplinkMode() is the // only resolver; all layers above receive a typed enum at init time." func TestS2_BridgeModeContainedInL0(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S2: "Bridge mode is contained in L0. No layer ` + `above L0 reads uplink type, bridge mode, or physical NIC state ` + `directly. L0's UplinkMode() is the only resolver; all layers ` + diff --git a/spinifex/domains/network/invariants/ipsec_test.go b/spinifex/domains/network/invariants/ipsec_test.go index 76b9128a1..1dd4fcfbb 100644 --- a/spinifex/domains/network/invariants/ipsec_test.go +++ b/spinifex/domains/network/invariants/ipsec_test.go @@ -14,6 +14,7 @@ import ( // rules, or direct strongSwan management. IPSec SA lifecycle is // delegated entirely to OVN native IPSec and is invisible above L0." func TestS8_IPSecOVNNativeOnly(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S8: "IPSec is OVN-native only. No layer ` + `implements custom IKEv2, XFRM rules, or direct strongSwan ` + `management. IPSec SA lifecycle is delegated entirely to OVN ` + diff --git a/spinifex/domains/network/invariants/layers_test.go b/spinifex/domains/network/invariants/layers_test.go index 3ad67406e..e15f54699 100644 --- a/spinifex/domains/network/invariants/layers_test.go +++ b/spinifex/domains/network/invariants/layers_test.go @@ -14,6 +14,7 @@ import ( // interface. Every cross-layer call passes through the typed interface // of the immediate lower neighbor." func TestS1_LayerSkipProhibited(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S1: "No code above layer Lk calls through to a ` + `layer below Lk's immediate interface. Every cross-layer call ` + `passes through the typed interface of the immediate lower neighbor."` diff --git a/spinifex/domains/network/invariants/listener_bind_test.go b/spinifex/domains/network/invariants/listener_bind_test.go index cb1749684..ea864f891 100644 --- a/spinifex/domains/network/invariants/listener_bind_test.go +++ b/spinifex/domains/network/invariants/listener_bind_test.go @@ -37,6 +37,7 @@ import ( // call. It was found by hand on a live node; this is what would have caught // it at review time. func TestListenerBindSitesMatchInventory(t *testing.T) { + t.Parallel() root := repoRoot(t) table, err := listenerinventory.Parse(string(networkconnections.README())) if err != nil { @@ -241,6 +242,7 @@ func checkBindSite(table *listenerinventory.Table, s bindSite, root string) stri // port absent from the inventory must still be rejected, not silently // waved through. func TestCheckBindSite_RejectsUndocumentedPort(t *testing.T) { + t.Parallel() const doc = `# doc ## 1. Inbound Listeners diff --git a/spinifex/domains/network/invariants/names_test.go b/spinifex/domains/network/invariants/names_test.go index 3d97075ca..b1e258b06 100644 --- a/spinifex/domains/network/invariants/names_test.go +++ b/spinifex/domains/network/invariants/names_test.go @@ -18,6 +18,7 @@ import ( // the naming contract table. No layer above or below L2 constructs OVN // object names independently." func TestS4_OVNNamesL2Owned(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S4: "All OVN NB DB object names are constructed ` + `exclusively by L2 using the naming contract table. No layer above ` + `or below L2 constructs OVN object names independently."` diff --git a/spinifex/domains/network/invariants/names_unit_test.go b/spinifex/domains/network/invariants/names_unit_test.go index aae9b5bd9..8a44b1259 100644 --- a/spinifex/domains/network/invariants/names_unit_test.go +++ b/spinifex/domains/network/invariants/names_unit_test.go @@ -3,6 +3,7 @@ package invariants import "testing" func TestS4_HasOVNPrefix(t *testing.T) { + t.Parallel() cases := []struct { in string want bool diff --git a/spinifex/domains/network/invariants/nat_mode_test.go b/spinifex/domains/network/invariants/nat_mode_test.go index 71c45fec1..8f5498e9d 100644 --- a/spinifex/domains/network/invariants/nat_mode_test.go +++ b/spinifex/domains/network/invariants/nat_mode_test.go @@ -18,6 +18,7 @@ import ( // and never re-evaluated at runtime. No layer above L0 branches on NAT // mode dynamically." func TestS3_NATModeInitTimeConstant(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S3: "NAT distribution mode is an init-time ` + `constant. Centralised-vs-distributed NAT is determined once at ` + `startup from L0's UplinkMode() and never re-evaluated at runtime. ` + diff --git a/spinifex/domains/network/invariants/nats_subjects_test.go b/spinifex/domains/network/invariants/nats_subjects_test.go index 9389482a8..30dd4ae80 100644 --- a/spinifex/domains/network/invariants/nats_subjects_test.go +++ b/spinifex/domains/network/invariants/nats_subjects_test.go @@ -22,6 +22,7 @@ import ( // rename. Test runs audit and t.Skip's with gap report; flip to t.Fatalf once // the rename ships. func TestS7_NATSSubjectsCarryAZPrefix(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S7: "Every vpcd-originated NATS publication ` + `uses a subject prefixed vpc.{azID}. A subscription never processes ` + `a message whose subject AZ prefix does not match the local node's ` + diff --git a/spinifex/domains/network/invariants/ovn_named_create_test.go b/spinifex/domains/network/invariants/ovn_named_create_test.go index 42f4ff833..e0b7916ac 100644 --- a/spinifex/domains/network/invariants/ovn_named_create_test.go +++ b/spinifex/domains/network/invariants/ovn_named_create_test.go @@ -19,6 +19,7 @@ import ( // EnsurePortGroup). Callers outside network/ovn MUST use the Ensure* // primitive." func TestS4_OVNNamedCreatesUseEnsure(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S4.7: "OVN logical entities owned by spinifex ` + `MUST be unique on (table, Name). The libovsdb client enforces this ` + `via wait-then-insert transactions (EnsureLogicalRouter / ` + diff --git a/spinifex/domains/network/invariants/policy_no_create_test.go b/spinifex/domains/network/invariants/policy_no_create_test.go index 75d2f814c..ccf688c3f 100644 --- a/spinifex/domains/network/invariants/policy_no_create_test.go +++ b/spinifex/domains/network/invariants/policy_no_create_test.go @@ -17,6 +17,7 @@ import ( // (ACLs, NAT rules, static routes) to objects that L2 already owns. L3 // never calls create or delete on logical switches, routers, or ports." func TestS5_PolicyNeverCreatesOrDeletes(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S5: "L3 never creates or deletes logical ` + `objects. L3 only attaches policy (ACLs, NAT rules, static routes) ` + `to objects that L2 already owns. L3 never calls create or delete ` + diff --git a/spinifex/domains/network/invariants/reconciler_singleton_test.go b/spinifex/domains/network/invariants/reconciler_singleton_test.go index 022fe9f27..dd5c03bf5 100644 --- a/spinifex/domains/network/invariants/reconciler_singleton_test.go +++ b/spinifex/domains/network/invariants/reconciler_singleton_test.go @@ -18,6 +18,7 @@ import ( // pass runs against the NATS KV snapshot and OVN NB DB actual state. No // additional serial retrofit passes exist." func TestS9_SingleReconcilerNoRetrofitPasses(t *testing.T) { + t.Parallel() const clause = `ADR-0006 S9: "On each leader-gated startup, exactly one ` + `intent-actual reconciliation pass runs against the NATS KV snapshot ` + `and OVN NB DB actual state. No additional serial retrofit passes exist."` diff --git a/spinifex/domains/network/policy/nat.go b/spinifex/domains/network/policy/nat.go index 4e3d36a47..7ea12cd66 100644 --- a/spinifex/domains/network/policy/nat.go +++ b/spinifex/domains/network/policy/nat.go @@ -112,6 +112,7 @@ type NeighFlusher func(externalIP string) error // no node answers for a same-chassis recycled IP. Best-effort; callers warn and proceed. type NeighPrimer func(eip EIPSpec) error +// Option customizes the NATManager built by NewNATManager. type Option func(*natManager) // WithFlowsBarrier injects the post-write flow-install barrier so callers diff --git a/spinifex/domains/network/reconcile/apply_eip_concurrency_test.go b/spinifex/domains/network/reconcile/apply_eip_concurrency_test.go index 4ed1231cf..462a9f37a 100644 --- a/spinifex/domains/network/reconcile/apply_eip_concurrency_test.go +++ b/spinifex/domains/network/reconcile/apply_eip_concurrency_test.go @@ -119,6 +119,9 @@ func ovnWithGuestLSPs(t *testing.T, lspNames ...string) *mock.Client { // The assertion is wall time, so it holds whatever order the intent map yields. func TestApplyEIPs_HealthyPortDoesNotWaitForDeadOnes(t *testing.T) { withFastGuestPortBounds(t) + // The assertion is that the live port is probed inside one deadline, so the + // deadline is kept wide of goroutine start-up; withFastGuestPortBounds restores it. + guestPortDatapathTimeout = 100 * time.Millisecond const live = "port-eni-live" dead := []string{"port-eni-dead1", "port-eni-dead2", "port-eni-dead3"} diff --git a/spinifex/domains/network/reconcile/apply_gateway_claim_test.go b/spinifex/domains/network/reconcile/apply_gateway_claim_test.go index a4d7b5f1e..784499f1d 100644 --- a/spinifex/domains/network/reconcile/apply_gateway_claim_test.go +++ b/spinifex/domains/network/reconcile/apply_gateway_claim_test.go @@ -140,7 +140,7 @@ func (f *fakeClaimVerifier) ResetSBClusterState(_ context.Context) error { func withFastGuestPortBounds(t *testing.T) { t.Helper() to, iv := guestPortDatapathTimeout, guestPortDatapathInterval - guestPortDatapathTimeout = 200 * time.Millisecond + guestPortDatapathTimeout = 30 * time.Millisecond guestPortDatapathInterval = 1 * time.Millisecond t.Cleanup(func() { guestPortDatapathTimeout, guestPortDatapathInterval = to, iv }) } @@ -165,7 +165,7 @@ func ovnWithGuestLSP(t *testing.T, lspName string) *mock.Client { func withFastDatapathBounds(t *testing.T) { t.Helper() to, iv := gatewayDatapathTimeout, gatewayDatapathInterval - gatewayDatapathTimeout = 200 * time.Millisecond + gatewayDatapathTimeout = 30 * time.Millisecond gatewayDatapathInterval = 1 * time.Millisecond t.Cleanup(func() { gatewayDatapathTimeout, gatewayDatapathInterval = to, iv }) } @@ -173,7 +173,7 @@ func withFastDatapathBounds(t *testing.T) { func withFastClaimBounds(t *testing.T) { t.Helper() to, iv := gatewayClaimTimeout, gatewayClaimInterval - gatewayClaimTimeout = 200 * time.Millisecond + gatewayClaimTimeout = 30 * time.Millisecond gatewayClaimInterval = 1 * time.Millisecond t.Cleanup(func() { gatewayClaimTimeout, gatewayClaimInterval = to, iv }) } diff --git a/spinifex/domains/network/reconcile/drift.go b/spinifex/domains/network/reconcile/drift.go index 5ea72d0ac..54daee3db 100644 --- a/spinifex/domains/network/reconcile/drift.go +++ b/spinifex/domains/network/reconcile/drift.go @@ -27,6 +27,10 @@ var DriftInterval = 5 * time.Minute // floor on how often a change may drive a pass. Var so tests can shrink it. var driftBackoffBase = 5 * time.Second +// driftDebounce is how long the loop waits for a burst of intent writes to +// settle before a pass. Var so tests can shrink it. +var driftDebounce = loop.DefaultDebounce + // driftBackoffFactor grows the requeue gap per consecutive incomplete pass, up // to DriftInterval. Without a requeue the repair latency for any transient apply // failure is a full DriftInterval, so a 57-second DHCP stall costs five minutes @@ -97,6 +101,7 @@ func DriftLoop(ctx context.Context, rec Reconciler, nc *nats.Conn, localAZ, hold Sources: []loop.Source{intentSource(js)}, Reconcile: driftPass(rec, nc, js, localAZ, holder, startup), Resync: DriftInterval, + Debounce: driftDebounce, }) } diff --git a/spinifex/domains/network/reconcile/drift_test.go b/spinifex/domains/network/reconcile/drift_test.go index a20c3759b..1d5f8cf9d 100644 --- a/spinifex/domains/network/reconcile/drift_test.go +++ b/spinifex/domains/network/reconcile/drift_test.go @@ -140,9 +140,9 @@ func TestDriftLoop_ConvergedStartupWaitsFullInterval(t *testing.T) { rec := &stubReconciler{outcomes: []error{incompleteErr()}} startDriftLoop(t, rec, nc, nil) - time.Sleep(300 * time.Millisecond) + time.Sleep(100 * time.Millisecond) if got := rec.callCount(); got != 0 { - t.Errorf("reconcile ran %d times within 300ms of a converged startup, want 0 "+ + t.Errorf("reconcile ran %d times within 100ms of a converged startup, want 0 "+ "— the first pass must wait DriftInterval (10s here)", got) } } @@ -160,7 +160,7 @@ func TestDriftLoop_ConvergedPassReturnsToDriftInterval(t *testing.T) { if got := waitForCalls(t, rec, 2, 5*time.Second); got < 2 { t.Fatalf("reconcile called %d times, want 2 before the loop settles", got) } - time.Sleep(300 * time.Millisecond) + time.Sleep(100 * time.Millisecond) if got := rec.callCount(); got != 2 { t.Errorf("reconcile called %d times, want exactly 2 — a converged pass must "+ "reset the backoff to DriftInterval, not stay on the fast requeue", got) diff --git a/spinifex/domains/network/reconcile/drift_watch_test.go b/spinifex/domains/network/reconcile/drift_watch_test.go index 07cbfc73f..582dfa105 100644 --- a/spinifex/domains/network/reconcile/drift_watch_test.go +++ b/spinifex/domains/network/reconcile/drift_watch_test.go @@ -43,6 +43,15 @@ func bucketNames(t *testing.T, js jetstream.JetStream) []string { return names } +// shrinkDriftDebounce shortens how long the loop waits for writes to settle. +// Call it before startDriftLoop so the loop is joined before it is restored. +func shrinkDriftDebounce(t *testing.T, d time.Duration) { + t.Helper() + old := driftDebounce + driftDebounce = d + t.Cleanup(func() { driftDebounce = old }) +} + // waitForWatch writes probe keys until one of them wakes a pass, and returns the // call count once it has. Watchers attach asynchronously and are UpdatesOnly, so // a single write racing startup is lost for good; retrying is what makes a test @@ -56,7 +65,9 @@ func waitForWatch(t *testing.T, rec *stubReconciler, kv jetstream.KeyValue, pref if _, err := kv.Put(t.Context(), prefix+strconv.Itoa(i), []byte(`{}`)); err != nil { t.Fatalf("probe write %d: %v", i, err) } - if got := waitForCalls(t, rec, before+1, 250*time.Millisecond); got > before { + // Outlasting the debounce lets a probe that was seen wake its pass before + // another probe is written. + if got := waitForCalls(t, rec, before+1, 5*driftDebounce); got > before { return got } } @@ -82,13 +93,14 @@ func TestDriftLoop_IntentWriteWakesAPass(t *testing.T) { // The interval is long so a pass can only have come from the watch, and the // floor is short so the write is not merely deferred behind it. shrinkDriftTiming(t, time.Minute, time.Millisecond) + shrinkDriftDebounce(t, 20*time.Millisecond) rec := &stubReconciler{outcomes: []error{nil}} startDriftLoop(t, rec, nc, nil) // After the startup seed the loop is armed at DriftInterval alone, so the // watch has to be what brings the pass forward. - time.Sleep(200 * time.Millisecond) + time.Sleep(100 * time.Millisecond) if got := rec.callCount(); got != 0 { t.Fatalf("reconcile ran %d times before any write, want 0", got) } @@ -102,7 +114,10 @@ func TestDriftLoop_IntentWriteWakesAPass(t *testing.T) { func TestDriftLoop_BurstOfWritesIsOnePass(t *testing.T) { _, nc, js := testutil.StartTestJetStream(t) kv := createIntentBucket(t, js, ec2vpc.KVBucketENIs) - shrinkDriftTiming(t, time.Minute, 2*time.Second) + // The floor outlasts a probe window plus the debounce, so a late probe's + // pass is coalesced with the burst rather than counted as a second one. + shrinkDriftTiming(t, time.Minute, 300*time.Millisecond) + shrinkDriftDebounce(t, 20*time.Millisecond) rec := &stubReconciler{outcomes: []error{nil}} startDriftLoop(t, rec, nc, nil) @@ -121,7 +136,7 @@ func TestDriftLoop_BurstOfWritesIsOnePass(t *testing.T) { } // The burst is long spent, so a further pass here could only come from the // loop tracking writes rather than coalescing them. - time.Sleep(500 * time.Millisecond) + time.Sleep(200 * time.Millisecond) if got := rec.callCount() - base; got != 1 { t.Errorf("reconcile ran %d times for one burst of 20 writes, want 1", got) } diff --git a/spinifex/domains/network/reconcile/lock_test.go b/spinifex/domains/network/reconcile/lock_test.go index ef52b71dd..3024c8f36 100644 --- a/spinifex/domains/network/reconcile/lock_test.go +++ b/spinifex/domains/network/reconcile/lock_test.go @@ -54,7 +54,7 @@ func TestAcquireLeader_ReleaseSurvivesCancelledContext(t *testing.T) { } // shrinkLeaderTiming compresses the leader key's lifetime so a test can outlast -// the TTL in a second rather than a minute. +// the TTL in under a second rather than a minute. func shrinkLeaderTiming(t *testing.T, ttl, renew time.Duration) { t.Helper() oldTTL, oldRenew := reconcileLeaderTTL, reconcileLeaderRenew @@ -67,14 +67,14 @@ func shrinkLeaderTiming(t *testing.T, ttl, renew time.Duration) { // this a peer elects itself mid-pass and two reconcilers race the same OVN NB. func TestAcquireLeader_RenewsKeyBeyondTTL(t *testing.T) { _, nc, _ := testutil.StartTestJetStream(t) - shrinkLeaderTiming(t, time.Second, 100*time.Millisecond) + shrinkLeaderTiming(t, 300*time.Millisecond, 100*time.Millisecond) release, ok := AcquireLeader(t.Context(), nc, KVBucketVPCDReconcile, "node-1") require.True(t, ok) defer release() // Well past the TTL: an unrenewed key would have expired by now. - time.Sleep(2500 * time.Millisecond) + time.Sleep(750 * time.Millisecond) loserRelease, ok := AcquireLeader(t.Context(), nc, KVBucketVPCDReconcile, "node-2") assert.False(t, ok, "leader key expired mid-pass: a peer can now reconcile concurrently") diff --git a/spinifex/domains/network/subscribers/events.go b/spinifex/domains/network/subscribers/events.go index 962eece57..688971186 100644 --- a/spinifex/domains/network/subscribers/events.go +++ b/spinifex/domains/network/subscribers/events.go @@ -42,8 +42,8 @@ type SubnetEvent struct { CidrBlock string `json:"cidr_block"` } -// PortEvent: vpc.create-port / vpc.delete-port. SecurityGroupIds set on create -// for atomic PG wiring; empty on delete. +// PortEvent is published on vpc.create-port / vpc.delete-port. SecurityGroupIds +// is set on create for atomic PG wiring; empty on delete. type PortEvent struct { NetworkInterfaceId string `json:"network_interface_id"` SubnetId string `json:"subnet_id"` @@ -56,8 +56,8 @@ type PortEvent struct { SuppressDHCP bool `json:"suppress_dhcp,omitempty"` } -// UpdatePortSGsEvent: vpc.update-port-sgs. Declarative — vpcd diffs -// SecurityGroupIds against the current cache memberships. +// UpdatePortSGsEvent is published on vpc.update-port-sgs. Declarative — vpcd +// diffs SecurityGroupIds against the current cache memberships. type UpdatePortSGsEvent struct { NetworkInterfaceId string `json:"network_interface_id"` PrivateIpAddress string `json:"private_ip_address"` diff --git a/spinifex/domains/network/subscribers/subscribers.go b/spinifex/domains/network/subscribers/subscribers.go index 1170ef615..7dde6e1e9 100644 --- a/spinifex/domains/network/subscribers/subscribers.go +++ b/spinifex/domains/network/subscribers/subscribers.go @@ -34,7 +34,8 @@ type Subscriber struct { mac MACBindingFlusher } -// Config: all manager fields required. MAC is optional (nil disables the flush). +// Config holds the managers New wires to. All manager fields are required; MAC +// is optional (nil disables the flush). type Config struct { Topology topology.Manager SG policy.SecurityGroupManager diff --git a/spinifex/domains/ochre/launch.go b/spinifex/domains/ochre/launch.go index e564f764c..1995e21ee 100644 --- a/spinifex/domains/ochre/launch.go +++ b/spinifex/domains/ochre/launch.go @@ -58,6 +58,8 @@ type volumeAttacher interface { AttachVolume(ctx context.Context, accountID, instanceID, volumeID, device string) (string, error) } +// LaunchDeps bundles the EC2, VPC, AMI, volume and weights services a serving-VM launch drives, plus +// the daemon's own system-VPC port plumbing. type LaunchDeps struct { Config *config.Config SystemVPC systemvpc.Deps @@ -107,6 +109,8 @@ type LaunchMemberOutput struct { Family string } +// LaunchOutput reports the serving VM a launch produced: its instance, ENI and private IP, each +// member's port and weights volume, and an Unwind for a caller that fails after it returned. type LaunchOutput struct { InstanceID string ENIID string diff --git a/spinifex/domains/ochre/types.go b/spinifex/domains/ochre/types.go index 6a8f37ddf..dd05b9b1d 100644 --- a/spinifex/domains/ochre/types.go +++ b/spinifex/domains/ochre/types.go @@ -24,6 +24,8 @@ type EnsureEndpointInput struct { Pinned bool `json:"pinned,omitempty"` } +// EnsureEndpointOutput carries the model's endpoint record, either the one already STARTING or READY +// or the one just launched. type EnsureEndpointOutput struct { Endpoint EndpointRecord `json:"endpoint"` } @@ -35,6 +37,7 @@ type DescribeEndpointInput struct { AccountID string `json:"account_id,omitempty"` } +// DescribeEndpointOutput carries the model's current endpoint record. type DescribeEndpointOutput struct { Endpoint EndpointRecord `json:"endpoint"` } @@ -43,6 +46,8 @@ type DescribeEndpointOutput struct { // message header like every other handler, not the payload. type ListEndpointsInput struct{} +// ListEndpointsOutput holds every endpoint record across every account, shared platform and +// account-scoped alike. type ListEndpointsOutput struct { Endpoints []EndpointRecord `json:"endpoints"` } diff --git a/spinifex/domains/ochre/vector/api.go b/spinifex/domains/ochre/vector/api.go index 05993b55b..dd1d769c4 100644 --- a/spinifex/domains/ochre/vector/api.go +++ b/spinifex/domains/ochre/vector/api.go @@ -33,6 +33,7 @@ type CreateIndexRequest struct { EmbeddingModel string `json:"embeddingModel"` } +// CreateIndexResponse carries the newly registered index record. type CreateIndexResponse struct { Index Record `json:"index"` } @@ -43,12 +44,14 @@ type DeleteIndexRequest struct { IndexID string `json:"indexId"` } +// DeleteIndexResponse is the empty reply to a DeleteIndex, including the no-op delete of an absent index. type DeleteIndexResponse struct{} // ListIndexesRequest has no fields: accountID comes from the caller context // (D10), never the payload. type ListIndexesRequest struct{} +// ListIndexesResponse holds every index registered to the caller's account. type ListIndexesResponse struct { Indexes []Record `json:"indexes"` } @@ -67,6 +70,7 @@ type IngestRequest struct { DataSourceID string `json:"dataSourceId,omitempty"` } +// IngestResponse carries the record of the ingestion job just started; poll it with DescribeJob. type IngestResponse struct { Job JobRecord `json:"job"` } @@ -76,6 +80,7 @@ type DescribeJobRequest struct { JobID string `json:"jobId"` } +// DescribeJobResponse carries the ingestion job's current record. type DescribeJobResponse struct { Job JobRecord `json:"job"` } @@ -92,6 +97,8 @@ type QueryRequest struct { Filter *Filter `json:"filter,omitempty"` } +// QueryResponse holds the nearest chunks found. It is empty, not an error, when the index +// is not READY. type QueryResponse struct { Results []QueryResult `json:"results"` } @@ -100,6 +107,7 @@ type QueryResponse struct { // (D10), never the payload, mirroring ListIndexesRequest. type ListJobsRequest struct{} +// ListJobsResponse holds every ingestion job recorded for the caller's account. type ListJobsResponse struct { Jobs []JobRecord `json:"jobs"` } @@ -109,6 +117,7 @@ type StopJobRequest struct { JobID string `json:"jobId"` } +// StopJobResponse carries the job's record after the cancellation request. type StopJobResponse struct { Job JobRecord `json:"job"` } diff --git a/spinifex/domains/ochre/vector/appliance.go b/spinifex/domains/ochre/vector/appliance.go index b5f49c96f..c62902ec2 100644 --- a/spinifex/domains/ochre/vector/appliance.go +++ b/spinifex/domains/ochre/vector/appliance.go @@ -100,6 +100,7 @@ type TeardownApplianceRequest struct { PurgeMetadata bool `json:"purgeMetadata,omitempty"` } +// TeardownApplianceResponse is the empty reply to SubjectTeardownAppliance; failures arrive as an error. type TeardownApplianceResponse struct{} // ApplianceConnInfo is the appliance's connection endpoint: safe to log, diff --git a/spinifex/domains/ochre/vpc.go b/spinifex/domains/ochre/vpc.go index 807f7c4fa..c23cde67d 100644 --- a/spinifex/domains/ochre/vpc.go +++ b/spinifex/domains/ochre/vpc.go @@ -29,8 +29,8 @@ func SystemVPCName(region string) string { return "bedrock-system-" + region } -// cfg supplies the operator-overridable address space and subnet count; a nil -// or unset cfg falls back to the defaults. +// SystemVPCSpec builds the region's Bedrock system VPC spec. cfg supplies the operator-overridable +// address space and subnet count; a nil or unset cfg falls back to the defaults. func SystemVPCSpec(cfg *config.BedrockConfig, region string) systemvpc.Spec { supernet := config.BedrockDefaultSystemVPCSupernet privateSubnets := 1 diff --git a/spinifex/foundation/aws/errors/awserrors.go b/spinifex/foundation/aws/errors/awserrors.go index 7483351cc..74ed23b38 100644 --- a/spinifex/foundation/aws/errors/awserrors.go +++ b/spinifex/foundation/aws/errors/awserrors.go @@ -1,3 +1,6 @@ +// Package awserrors defines the AWS error codes Spinifex returns, their HTTP +// status and default message, and helpers to attach a code to an error and +// resolve it again at the API boundary. package awserrors import ( @@ -8,6 +11,8 @@ import ( "time" ) +// ErrorMessage is the HTTP status and default message returned for an AWS +// error code, as resolved by LookupErrorMessage. type ErrorMessage struct { HTTPCode int Message string @@ -388,6 +393,9 @@ var ( // real ECS both use the restJson1 wire code "InvalidParameterException", // so this gives EKS call sites their own name for the same registered code. ErrorEKSInvalidParameter = ErrorECSInvalidParameter + // ErrorECRInvalidParameter aliases ErrorECSInvalidParameter: every ECR + // operation declares the AWS JSON 1.1 wire code "InvalidParameterException". + ErrorECRInvalidParameter = ErrorECSInvalidParameter // ErrorACMResourceInUse aliases ErrorEKSResourceInUse: real ACM's // DeleteCertificate and real EKS's CreateCluster both legitimately use the // wire code "ResourceInUseException", so this is a distinct, self-documenting @@ -517,6 +525,7 @@ var ( ErrorLayersNotFound = "LayersNotFoundException" ErrorReferencedImagesNotFound = "ReferencedImagesNotFoundException" ErrorTooManyTags = "TooManyTagsException" + ErrorInvalidTagParameter = "InvalidTagParameterException" ErrorOperationNotSupported = "OperationNotSupportedException" // ELBv2-specific error codes. @@ -1216,7 +1225,7 @@ var ErrorLookup = map[string]ErrorMessage{ ErrorUnfulfillableCapacity: {HTTPCode: 400, Message: "At this time there isn't enough spare capacity to fulfill your request for Spot Instances. You can wait a few minutes to see whether capacity becomes available for your request. Alternatively, create a more flexible request. For example, include additional instance types, include additional Availability Zones, or use the capacity-optimized allocation strategy."}, ErrorUnknownParameter: {HTTPCode: 404, Message: "An unknown or unrecognized parameter was supplied. Requests that could cause this error include supplying a misspelled parameter or a parameter that is not supported for the specified API version."}, ErrorUnknownPrincipalTypeUnsupported: {HTTPCode: 400, Message: "The principal type is not supported."}, - ErrorUnknownVolumeType: {HTTPCode: 400, Message: "The specified volume type is unsupported. The supported volume types are gp2, io1, st1, sc1, and standard."}, + ErrorUnknownVolumeType: {HTTPCode: 400, Message: "Unsupported volume type for volume creation."}, ErrorUnsupported: {HTTPCode: 400, Message: "The specified request is unsupported. For example, you might be trying to launch an instance in an Availability Zone that currently has constraints on that instance type. The returned message provides details of the unsupported request."}, ErrorUnsupportedException: {HTTPCode: 400, Message: "Capacity Reservations are not supported for this Region."}, ErrorUnsupportedHibernationConfiguration: {HTTPCode: 400, Message: "The instance could not be launched because one or more parameter values do not meet the prerequisites for enabling hibernation. For more information, see Hibernation Prerequisites. Alternatively, the instance could not be hibernated because it is not enabled for hibernation."}, @@ -1283,6 +1292,7 @@ var ErrorLookup = map[string]ErrorMessage{ ErrorImageDigestDoesNotMatch: {HTTPCode: 400, Message: "The specified image digest does not match the digest of the supplied image manifest."}, ErrorLayersNotFound: {HTTPCode: 400, Message: "The specified layers could not be found, or the specified layer is not valid for this repository."}, ErrorReferencedImagesNotFound: {HTTPCode: 400, Message: "The manifest list is referencing an image that does not exist."}, + ErrorInvalidTagParameter: {HTTPCode: 400, Message: "Tag parameters are invalid"}, ErrorTooManyTags: {HTTPCode: 400, Message: "The list of tags on the repository is over the limit. The maximum number of tags that can be applied to a repository is 50."}, ErrorOperationNotSupported: {HTTPCode: 400, Message: "The specified operation is not supported in this registry."}, diff --git a/spinifex/foundation/aws/policy/actions.go b/spinifex/foundation/aws/policy/actions.go index 74f879b4f..9e9bbb96d 100644 --- a/spinifex/foundation/aws/policy/actions.go +++ b/spinifex/foundation/aws/policy/actions.go @@ -1,4 +1,5 @@ -// Package policy defines shared AWS IAM action vocabulary. +// Package policy formats a service and action as the IAM action string an +// AWS-shaped policy names, mapping wire service names to their IAM namespace. package policy // bedrockIAMFamily lists the Bedrock wire/signing service names that all diff --git a/spinifex/foundation/messaging/nats/nats.go b/spinifex/foundation/messaging/nats/nats.go index 0f465938d..a78a51724 100644 --- a/spinifex/foundation/messaging/nats/nats.go +++ b/spinifex/foundation/messaging/nats/nats.go @@ -1,3 +1,5 @@ +// Package natsmsg holds the shared NATS plumbing: connecting with retry and +// TLS, account-scoped request/reply and fan-out gathers, and their headers. package natsmsg import ( diff --git a/spinifex/foundation/messaging/nats/nats_test.go b/spinifex/foundation/messaging/nats/nats_test.go index df6ef1449..79c512997 100644 --- a/spinifex/foundation/messaging/nats/nats_test.go +++ b/spinifex/foundation/messaging/nats/nats_test.go @@ -722,20 +722,27 @@ func TestConnectNATSWithRetry_LogEscalatesPastThreshold(t *testing.T) { t.Cleanup(func() { slog.SetDefault(prev) }) slog.SetDefault(slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}))) + // Stop a fixed number of attempts past the threshold rather than after a wall-clock budget. + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() _, err := ConnectNATSWithRetry("nats://127.0.0.1:1", "", "", WithRetryDelay(1*time.Millisecond), WithMaxRetryDelay(1*time.Millisecond), - WithMaxWait(300*time.Millisecond), + WithContext(ctx), + WithAttemptErrHandler(func(_ error, attempt int) { + if attempt >= natsRetryEscalateAttempt+10 { + cancel() + } + }), ) - require.Error(t, err) + require.ErrorIs(t, err, context.Canceled) logs := buf.String() warnCount := strings.Count(logs, "level=WARN msg=\"NATS not ready, retrying...\"") errCount := strings.Count(logs, "level=ERROR msg=\"NATS still disconnected\"") - assert.GreaterOrEqual(t, warnCount, 1, "expect warn logs for first 30 attempts") - assert.GreaterOrEqual(t, errCount, 1, "expect at least one escalated error log past the threshold") - assert.LessOrEqual(t, errCount, 2, "rate-limited to once per minute, so a sub-second test should see at most one or two") + assert.Equal(t, natsRetryEscalateAttempt, warnCount, "expect a warn log for each of the first 30 attempts") + assert.Equal(t, 1, errCount, "ten attempts past the threshold must escalate once, then rate-limit to once per minute") assert.Contains(t, logs, "disconnected_for_ms=", "escalated error should include disconnected_for_ms") } @@ -764,6 +771,7 @@ func TestConnectNATSWithRetry_NoEscalation_BelowThreshold(t *testing.T) { // --- Gather tests --- func TestGather_EarlyExitBeforeTimeout(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) for range 3 { @@ -787,6 +795,7 @@ func TestGather_EarlyExitBeforeTimeout(t *testing.T) { } func TestGather_TimesOutBelowExpected(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) for range 2 { @@ -806,6 +815,7 @@ func TestGather_TimesOutBelowExpected(t *testing.T) { } func TestGather_MixedSuccessAndErrors(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) _, err := nc.Subscribe("test.gather.mixed", func(msg *nats.Msg) { @@ -837,6 +847,7 @@ func TestGather_MixedSuccessAndErrors(t *testing.T) { } func TestGather_Client4xxErrorKeepsNodeMessage(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) _, err := nc.Subscribe("test.gather.msg", func(msg *nats.Msg) { @@ -864,6 +875,7 @@ func TestSummary_Client4xxError(t *testing.T) { } func TestGather_StopOnFirstSkipsErrors(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) for range 2 { @@ -895,6 +907,7 @@ func TestGather_StopOnFirstSkipsErrors(t *testing.T) { } func TestGather_OversizedFrameDropped(t *testing.T) { + t.Parallel() opts := &server.Options{ Host: "127.0.0.1", Port: -1, @@ -934,6 +947,7 @@ type gatherAcctEcho struct { } func TestGather_AccountIDHeaderSet(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) _, err := nc.Subscribe("test.gather.acct.set", func(msg *nats.Msg) { @@ -958,6 +972,7 @@ func TestGather_AccountIDHeaderSet(t *testing.T) { } func TestGather_AccountIDHeaderAbsentWhenEmpty(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) _, err := nc.Subscribe("test.gather.acct.empty", func(msg *nats.Msg) { @@ -982,6 +997,7 @@ func TestGather_AccountIDHeaderAbsentWhenEmpty(t *testing.T) { } func TestGather_NilConn_ReturnsClusterUnavailable(t *testing.T) { + t.Parallel() frames, sum, err := Gather(context.Background(), nil, "test.never", []byte("{}"), GatherOpts{Timeout: 50 * time.Millisecond, ExpectedNodes: 1}) require.ErrorIs(t, err, ErrClusterUnavailable) @@ -990,6 +1006,7 @@ func TestGather_NilConn_ReturnsClusterUnavailable(t *testing.T) { } func TestGather_ClosedConn_ReturnsClusterUnavailable(t *testing.T) { + t.Parallel() ns := startTestNATSServer(t) nc, err := nats.Connect(ns.ClientURL()) require.NoError(t, err) @@ -1027,6 +1044,7 @@ func subscribeAsNode(t *testing.T, nc *nats.Conn, subject, nodeID string, data [ // accidentally read "identity mode ran and saw nobody" from "identity mode // never ran". func TestGather_LegacyMode_IdentityFieldsStayNil(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.legacy", "node-a", []byte(`{"ok":true}`), 0) @@ -1046,6 +1064,7 @@ func TestGather_LegacyMode_IdentityFieldsStayNil(t *testing.T) { // the distinct-node count is met, same early-exit shape as ExpectedNodes, and // tags each frame with the node that sent it. func TestGather_IdentityMode_NodeIDCarriedOnFramesAndEarlyExit(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.early", "node-a", []byte(`{"ok":true}`), 0) subscribeAsNode(t, nc, "test.gather.identity.early", "node-b", []byte(`{"ok":true}`), 0) @@ -1068,6 +1087,7 @@ func TestGather_IdentityMode_NodeIDCarriedOnFramesAndEarlyExit(t *testing.T) { // ErrorResponders partition it by how. A node cannot land in both from a // single reply. func TestGather_IdentityMode_RespondersPartitionSuccessAndError(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.partition", "node-ok", []byte(`{"ok":true}`), 0) subscribeAsNode(t, nc, "test.gather.identity.partition", "node-err", @@ -1087,6 +1107,7 @@ func TestGather_IdentityMode_RespondersPartitionSuccessAndError(t *testing.T) { // rather than silently folded into the responder sets — a describe-level // completeness judgement must be able to see it and refuse to trust the sweep. func TestGather_IdentityMode_UnidentifiedFrameCounted(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.unident", "node-a", []byte(`{"ok":true}`), 0) // No node ID set on this reply. @@ -1096,7 +1117,7 @@ func TestGather_IdentityMode_UnidentifiedFrameCounted(t *testing.T) { require.NoError(t, err) _, sum, err := Gather(context.Background(), nc, "test.gather.identity.unident", []byte("{}"), - GatherOpts{Timeout: 500 * time.Millisecond, ExpectedResponders: 2}) + GatherOpts{Timeout: 300 * time.Millisecond, ExpectedResponders: 2}) require.NoError(t, err) assert.Equal(t, 1, sum.Unidentified) @@ -1108,6 +1129,7 @@ func TestGather_IdentityMode_UnidentifiedFrameCounted(t *testing.T) { // its first payload — never the second, win or lose — and is flagged in // ConflictNodes so a completeness judgement downstream can refuse to trust it. func TestGather_IdentityMode_DuplicateDisagreeingFrame_FirstPayloadWinsAndFlagsConflict(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) // Two subscribers answering as the same node ID: the first reply must be // the one retained regardless of arrival order tie-breaks, so give the @@ -1116,7 +1138,7 @@ func TestGather_IdentityMode_DuplicateDisagreeingFrame_FirstPayloadWinsAndFlagsC subscribeAsNode(t, nc, "test.gather.identity.dup", "node-a", []byte(`{"value":"second"}`), 50*time.Millisecond) frames, sum, err := Gather(context.Background(), nc, "test.gather.identity.dup", []byte("{}"), - GatherOpts{Timeout: time.Second, Mode: CollectUntilDeadline, ExpectedResponders: 1}) + GatherOpts{Timeout: 300 * time.Millisecond, Mode: CollectUntilDeadline, ExpectedResponders: 1}) require.NoError(t, err) require.Len(t, frames, 1, "the disagreeing duplicate's bytes must never be retained") @@ -1129,6 +1151,7 @@ func TestGather_IdentityMode_DuplicateDisagreeingFrame_FirstPayloadWinsAndFlagsC // redelivery) is still counted as a duplicate frame, but is not a conflict: // there is nothing to disagree about. func TestGather_IdentityMode_DuplicateIdenticalFrame_NotFlaggedAsConflict(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.dupsame", "node-a", []byte(`{"value":"same"}`), 0) subscribeAsNode(t, nc, "test.gather.identity.dupsame", "node-a", []byte(`{"value":"same"}`), 50*time.Millisecond) @@ -1145,6 +1168,7 @@ func TestGather_IdentityMode_DuplicateIdenticalFrame_NotFlaggedAsConflict(t *tes // from a prefix of the replies: it must not exit early just because every // currently-expected responder has already answered. func TestGather_CollectUntilDeadline_DoesNotExitEarly(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.deadline", "node-a", []byte(`{"ok":true}`), 0) @@ -1171,6 +1195,7 @@ func TestGather_CollectUntilDeadline_DoesNotExitEarly(t *testing.T) { // the documented first-payload-wins rule the disagreeing reply's data is // dropped regardless, only the conflict flag survives it. func TestGather_CollectUntilDeadline_RestartOverlap_SurfacesConflictAndMissingNode(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.identity.restart", "node-1", []byte(`{"value":"stale"}`), 0) subscribeAsNode(t, nc, "test.gather.identity.restart", "node-1", []byte(`{"value":"fresh"}`), 50*time.Millisecond) @@ -1206,6 +1231,7 @@ func TestGather_Settled_EndsCollectionBeforeTheDeadline(t *testing.T) { // A predicate that never settles must leave CollectUntilDeadline's guarantee // intact, since that is the case where absence is still being proven. func TestGather_Settled_NeverTrue_StillRunsToTheDeadline(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.settled.miss", "node-a", []byte(`{"ok":true}`), 0) @@ -1225,6 +1251,7 @@ func TestGather_Settled_NeverTrue_StillRunsToTheDeadline(t *testing.T) { } func TestGather_Settled_IgnoredUnderCollectServeData(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.settled.mode", "node-a", []byte(`{"ok":true}`), 0) @@ -1244,6 +1271,7 @@ func TestGather_Settled_IgnoredUnderCollectServeData(t *testing.T) { // duplicate from a node already heard, which core NATS delivers alongside the // first. Waiting out the deadline for it buys nothing. func TestGather_ResponderGrace_EndsCollectionAfterFullCoverage(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.grace.covered", "node-a", []byte(`{"ok":true}`), 0) subscribeAsNode(t, nc, "test.gather.grace.covered", "node-b", []byte(`{"ok":true}`), 0) @@ -1268,6 +1296,7 @@ func TestGather_ResponderGrace_EndsCollectionAfterFullCoverage(t *testing.T) { // The grace window only opens on full coverage. A missing node is exactly the // case absence proofs exist for, so it must still cost the whole deadline. func TestGather_ResponderGrace_PartialCoverageStillRunsToTheDeadline(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.grace.partial", "node-a", []byte(`{"ok":true}`), 0) @@ -1319,6 +1348,7 @@ func TestGather_ResponderGrace_ArmedOnceNotExtendedByRepeatReplies(t *testing.T) // Zero ResponderGrace is the pre-existing behaviour: collect to the deadline // even when every node has answered. func TestGather_ResponderGrace_ZeroKeepsTheFullDeadline(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) subscribeAsNode(t, nc, "test.gather.grace.zero", "node-a", []byte(`{"ok":true}`), 0) diff --git a/spinifex/foundation/pki/ca.go b/spinifex/foundation/pki/ca.go index 9eeb50a08..da025dac7 100644 --- a/spinifex/foundation/pki/ca.go +++ b/spinifex/foundation/pki/ca.go @@ -10,8 +10,9 @@ import ( "os" ) -// Exported so runtime services that mint from the cluster CA share one loader -// rather than each re-implementing the PEM/PKCS8 handling. +// LoadCAKeyPair reads the cluster CA certificate and its PKCS8 RSA key from PEM +// files. Exported so runtime services that mint from the cluster CA share one +// loader rather than each re-implementing the PEM/PKCS8 handling. func LoadCAKeyPair(caCertPath, caKeyPath string) (*x509.Certificate, *rsa.PrivateKey, error) { certPEM, err := os.ReadFile(caCertPath) if err != nil { diff --git a/spinifex/foundation/state/kvlease/lease_test.go b/spinifex/foundation/state/kvlease/lease_test.go index cf51a62fa..ee420dd7c 100644 --- a/spinifex/foundation/state/kvlease/lease_test.go +++ b/spinifex/foundation/state/kvlease/lease_test.go @@ -96,13 +96,16 @@ func TestTryAcquire_AdoptsOwnKeyAfterRestart(t *testing.T) { // itself mid-pass and both act at once. func TestRenew_KeySurvivesBeyondTTL(t *testing.T) { _, nc, _ := testutil.StartTestJetStream(t) - a := newTestLease(t, nc, "node-a", nil) + // Three renewals per TTL, and above the 100ms floor NATS puts on a bucket TTL. + short := func(c *kvlease.Config) { c.TTL, c.Renew = 300*time.Millisecond, 100*time.Millisecond } + a := newTestLease(t, nc, "node-a", short) require.True(t, a.TryAcquire(t.Context())) defer a.Release(t.Context()) - time.Sleep(2500 * time.Millisecond) + // Well past the TTL: an unrenewed key would have expired by now. + time.Sleep(750 * time.Millisecond) - b := newTestLease(t, nc, "node-b", nil) + b := newTestLease(t, nc, "node-b", short) assert.False(t, b.TryAcquire(t.Context()), "lease expired mid-pass: a peer can now act concurrently") assert.True(t, a.Held()) } diff --git a/spinifex/foundation/state/kvstore/export_test.go b/spinifex/foundation/state/kvstore/export_test.go index 6334928ac..fe72098be 100644 --- a/spinifex/foundation/state/kvstore/export_test.go +++ b/spinifex/foundation/state/kvstore/export_test.go @@ -5,7 +5,5 @@ import "time" // SetOpenRetryInterval shortens the OpenWithRetry pause for tests and returns a // function restoring the previous value. func SetOpenRetryInterval(d time.Duration) func() { - prev := openRetryInterval - openRetryInterval = d - return func() { openRetryInterval = prev } + return swapOpenRetryInterval(d) } diff --git a/spinifex/foundation/state/kvstore/testhooks.go b/spinifex/foundation/state/kvstore/testhooks.go new file mode 100644 index 000000000..0ef4f69fb --- /dev/null +++ b/spinifex/foundation/state/kvstore/testhooks.go @@ -0,0 +1,22 @@ +package kvstore + +import ( + "testing" + "time" +) + +// ShortenOpenRetryForTest sets the OpenWithRetry pause to d for one test and +// restores it afterwards. There is one pause per process, so the test must not +// run in parallel with anything else that opens through OpenWithRetry. +func ShortenOpenRetryForTest(tb testing.TB, d time.Duration) { + tb.Helper() + tb.Cleanup(swapOpenRetryInterval(d)) +} + +// swapOpenRetryInterval sets the pause to d and returns a function restoring +// the previous value. +func swapOpenRetryInterval(d time.Duration) func() { + prev := openRetryInterval + openRetryInterval = d + return func() { openRetryInterval = prev } +} diff --git a/spinifex/gateway/admin_deleteaccount_job_test.go b/spinifex/gateway/admin_deleteaccount_job_test.go index 60ef824e3..9cc63b13d 100644 --- a/spinifex/gateway/admin_deleteaccount_job_test.go +++ b/spinifex/gateway/admin_deleteaccount_job_test.go @@ -188,7 +188,7 @@ func TestAdminDeleteAccountReturnsBeforeTheTeardownFinishes(t *testing.T) { // Progress is polled, so the record has to reach a terminal state on its own. require.Eventually(t, func() bool { return describeDeletion(t, gw, account.AccountID).State == DeletionStateCompleted - }, 60*time.Second, 100*time.Millisecond) + }, 60*time.Second, 10*time.Millisecond) job := describeDeletion(t, gw, account.AccountID) assert.Equal(t, response.DeletionID, job.DeletionID) @@ -213,7 +213,7 @@ func TestAdminDeleteAccountReplaysAfterTheAccountIsGone(t *testing.T) { require.Eventually(t, func() bool { return describeDeletion(t, gw, account.AccountID).State == DeletionStateCompleted - }, 60*time.Second, 100*time.Millisecond) + }, 60*time.Second, 10*time.Millisecond) second, err := gw.adminDeleteAccount(t.Context(), body) require.NoError(t, err) diff --git a/spinifex/gateway/auth.go b/spinifex/gateway/auth.go index 6190d4233..d2a33858d 100644 --- a/spinifex/gateway/auth.go +++ b/spinifex/gateway/auth.go @@ -29,6 +29,14 @@ const ( sessionAKIDPrefix = "ASIA" ) +// authSource is the caller's address as the auth path uses it. The rate limiter +// keys on the connection peer; log lines use the loopback-gated client IP so they +// agree with the request audit line for proxied requests. +type authSource struct { + limitKey string + logIP string +} + // SigV4AuthMiddleware returns stdlib middleware that validates AWS Signature V4 authentication. func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { if gw.RateLimiter == nil { @@ -39,8 +47,8 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { } return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - clientIP := ingresshttp.ClientIP(r.RemoteAddr) - if errCode := gw.RateLimiter.CheckIP(clientIP); errCode != "" { + src := authSource{limitKey: ingresshttp.ClientIP(r.RemoteAddr), logIP: ingresshttp.RequestClientIP(r)} + if errCode := gw.RateLimiter.CheckIP(src.limitKey); errCode != "" { gw.writeSigV4Error(w, r, errCode, "") return } @@ -63,28 +71,28 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { // A dropped or stalled connection, not an auth attempt: counting it // would lock out an IP for its network trouble. slog.Warn("Auth aborted: request body read failed", - "sourceIP", clientIP, "err", err) + "sourceIP", src.logIP, "err", err) gw.writeSigV4Error(w, r, awserrors.ErrorInternalError, "") case errors.Is(err, sigv4.ErrRequestTimeTooSkewed): // Skew/replay: AWS returns this as SignatureDoesNotMatch, which is // indistinguishable on the wire from a canonicalisation mismatch. // Log the timestamps so the two can be told apart after the fact. slog.Warn("Auth failure: request time too skewed", - "sourceIP", clientIP, + "sourceIP", src.logIP, "requestTime", signingTime(r), "serverTime", time.Now().UTC().Format("20060102T150405Z"), "max_skew_ms", telemetry.Millis(sigv4.MaxClockSkew)) // Anonymous: the request was rejected before its key id was parsed, // so there is no client identity for the lockout to protect. - gw.RateLimiter.RecordFailure(clientIP, authlimit.Anonymous) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Anonymous) gw.writeSigV4Error(w, r, awserrors.ErrorSignatureDoesNotMatch, "") default: // Malformed Authorization, bad credential scope, unsupported // algorithm, missing content hash: a failed auth attempt. The parse // error names which, and is the only record of it. slog.Warn("Auth failure: malformed signature envelope", - "sourceIP", clientIP, "err", err) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Anonymous) + "sourceIP", src.logIP, "err", err) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Anonymous) gw.writeSigV4Error(w, r, awserrors.ErrorIncompleteSignature, "") } return @@ -106,7 +114,7 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { // registration seam carries it. if !gw.selector().Served(sig.Credential.Service) { slog.Warn("Auth failure: unsupported service in credential scope", - "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", clientIP, + "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", src.logIP, "service", sig.Credential.Service) // Consistent with an unimplemented action on a served service: this // gate runs before Verify, so nothing was ever wrong with the @@ -136,12 +144,12 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { ) switch { case strings.HasPrefix(sig.Credential.AccessKeyID, longLivedAKIDPrefix): - secret, principal, lookupCode = gw.resolveLongLivedAKID(sig.Credential.AccessKeyID, clientIP) + secret, principal, lookupCode = gw.resolveLongLivedAKID(sig.Credential.AccessKeyID, src) case strings.HasPrefix(sig.Credential.AccessKeyID, sessionAKIDPrefix): - secret, principal, lookupCode = gw.resolveSessionAKID(r, sig.Credential.AccessKeyID, clientIP) + secret, principal, lookupCode = gw.resolveSessionAKID(r, sig.Credential.AccessKeyID, src) default: - slog.Warn("Auth failure: unknown AKID prefix", "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("unknown-prefix", sig.Credential.AccessKeyID)) + slog.Warn("Auth failure: unknown AKID prefix", "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("unknown-prefix", sig.Credential.AccessKeyID)) gw.writeSigV4Error(w, r, awserrors.ErrorInvalidClientTokenId, "") return } @@ -157,7 +165,7 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { // signed, so log ours to diff against the SDK's. Warn, not Debug: these // failures are intermittent and never reproduce on demand. slog.Warn("Auth failure: verification failed", - "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", clientIP, + "accessKeyID", sig.Credential.AccessKeyID, "sourceIP", src.logIP, "service", sig.Credential.Service, "action", mismatchAction(r, sig.Credential.Service), "canonicalRequest", sig.RedactedCanonicalRequest(), @@ -165,14 +173,14 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { // Fingerprinted by the signature as well as the key id: each guess at a // secret produces a different one, while a client retrying an identical // bad request produces the same one. - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("signature", sig.Credential.AccessKeyID, sig.Signature)) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("signature", sig.Credential.AccessKeyID, sig.Signature)) gw.writeSigV4Error(w, r, awserrors.ErrorSignatureDoesNotMatch, "") return } // Only after the signature holds: an unauthenticated prober must not // be able to use this to tell a suspended account from a live one. - if errCode := gw.checkAccountActive(principal.accountID, clientIP); errCode != "" { + if errCode := gw.checkAccountActive(principal.accountID, src); errCode != "" { gw.writeSigV4Error(w, r, errCode, "") return } @@ -180,19 +188,20 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { // Principal state, same class as the account check above and deferred for // the same reason: a session name resolves to whichever principal holds it // now, so it has to be checked against the ID the session was minted for. - if errCode := gw.checkSessionPrincipal(principal, sig.Credential.AccessKeyID, clientIP); errCode != "" { + if errCode := gw.checkSessionPrincipal(principal, sig.Credential.AccessKeyID, src); errCode != "" { gw.writeSigV4Error(w, r, errCode, "") return } // Resolved here, once, rather than per policy check: a fault must fail // the request rather than authorize it against a context missing the key. - userID, err := gw.principalUserID(principal) + userID, userARN, err := gw.principalUser(principal) if err != nil { gw.writeSigV4Error(w, r, err.Error(), "") return } principal.userID = userID + principal.userARN = userARN // Parse rewound the body; re-read it for query-arg parsing, then rewind // again for the downstream handler. @@ -225,6 +234,9 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { if principal.userID != "" { ctx = context.WithValue(ctx, ctxUserID, principal.userID) } + if principal.userARN != "" { + ctx = context.WithValue(ctx, ctxUserARN, principal.userARN) + } // Parse once; dispatchers reuse via ctxQueryArgs. On error the // dispatcher re-parses and returns MalformedQueryString. @@ -253,7 +265,7 @@ func (gw *GatewayConfig) SigV4AuthMiddleware() func(http.Handler) http.Handler { "accessKey", sig.Credential.AccessKeyID, "identity", principal.identity, "principalType", principal.principalType) - gw.RateLimiter.RecordSuccess(clientIP) + gw.RateLimiter.RecordSuccess(src.limitKey) next.ServeHTTP(w, r.WithContext(ctx)) }) } @@ -351,26 +363,29 @@ type principalContext struct { // userID is aws:userid, resolved where the principal is so the value cannot // differ between two policy checks in the same request. userID string + // userARN is an IAM user's stored ARN, path included, from the same read as + // userID. Empty for every other principal type. + userARN string // sessionCred is the rehydrated STS record on the ASIA path, nil on the // long-lived one. It carries the continuity check past sig.Verify. sessionCred *handlers_sts.SessionCredential } // resolveLongLivedAKID handles the AKIA path: IAM lookup, status check, secret decrypt. -func (gw *GatewayConfig) resolveLongLivedAKID(accessKeyID, clientIP string) (string, principalContext, string) { +func (gw *GatewayConfig) resolveLongLivedAKID(accessKeyID string, src authSource) (string, principalContext, string) { ak, err := gw.IAMService.LookupAccessKey(accessKeyID) if err != nil { if strings.Contains(err.Error(), awserrors.ErrorIAMNoSuchEntity) { - slog.Warn("Auth failure: access key not found", "accessKeyID", accessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("akid-not-found", accessKeyID)) + slog.Warn("Auth failure: access key not found", "accessKeyID", accessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("akid-not-found", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } slog.Error("IAM lookup failed", "accessKeyID", accessKeyID, "err", err) return "", principalContext{}, awserrors.ErrorInternalError } if ak.Status != handlers_iam.AccessKeyStatusActive { - slog.Warn("Auth failure: access key inactive", "accessKeyID", accessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("akid-inactive", accessKeyID)) + slog.Warn("Auth failure: access key inactive", "accessKeyID", accessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("akid-inactive", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } secret, err := gw.IAMService.DecryptSecret(ak.SecretAccessKey) @@ -378,7 +393,7 @@ func (gw *GatewayConfig) resolveLongLivedAKID(accessKeyID, clientIP string) (str // Undecryptable secret (e.g. master key rotated): treat as auth failure, not // server fault, so the client re-authenticates instead of retrying a dead request. slog.Error("Failed to decrypt IAM secret", "accessKeyID", accessKeyID, "err", err) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("akid-secret", accessKeyID)) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("akid-secret", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } return secret, principalContext{ @@ -391,7 +406,7 @@ func (gw *GatewayConfig) resolveLongLivedAKID(accessKeyID, clientIP string) (str // resolveSessionAKID handles the ASIA path: STS lookup, expiry check, // X-Amz-Security-Token HMAC verify, secret decrypt. Nil STSService surfaces // as InternalError so misconfiguration is loud at startup. -func (gw *GatewayConfig) resolveSessionAKID(r *http.Request, accessKeyID, clientIP string) (string, principalContext, string) { +func (gw *GatewayConfig) resolveSessionAKID(r *http.Request, accessKeyID string, src authSource) (string, principalContext, string) { if gw.STSService == nil { slog.Error("SigV4 auth: STS service not initialized but session AKID presented", "accessKeyID", accessKeyID) return "", principalContext{}, awserrors.ErrorInternalError @@ -402,28 +417,28 @@ func (gw *GatewayConfig) resolveSessionAKID(r *http.Request, accessKeyID, client return "", principalContext{}, awserrors.ErrorInternalError } if cred == nil { - slog.Warn("Auth failure: session credential not found", "accessKeyID", accessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-not-found", accessKeyID)) + slog.Warn("Auth failure: session credential not found", "accessKeyID", accessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-not-found", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } if time.Now().UTC().After(cred.ExpiresAt) { slog.Warn("Auth failure: session credential expired", - "accessKeyID", accessKeyID, "sourceIP", clientIP, "expiresAt", cred.ExpiresAt) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-expired", accessKeyID)) + "accessKeyID", accessKeyID, "sourceIP", src.logIP, "expiresAt", cred.ExpiresAt) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-expired", accessKeyID)) return "", principalContext{}, awserrors.ErrorExpiredToken } tokenHeader := r.Header.Get("X-Amz-Security-Token") if tokenHeader == "" { slog.Warn("Auth failure: session AKID presented without X-Amz-Security-Token", - "accessKeyID", accessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-no-token", accessKeyID)) + "accessKeyID", accessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-no-token", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } if !gw.STSService.VerifySessionToken(cred, tokenHeader) { slog.Warn("Auth failure: session token HMAC mismatch", - "accessKeyID", accessKeyID, "sourceIP", clientIP) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-token-mismatch", accessKeyID, authlimit.TokenDigest(tokenHeader))) + "accessKeyID", accessKeyID, "sourceIP", src.logIP) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-token-mismatch", accessKeyID, authlimit.TokenDigest(tokenHeader))) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } @@ -431,7 +446,7 @@ func (gw *GatewayConfig) resolveSessionAKID(r *http.Request, accessKeyID, client if err != nil { // Unverifiable secret: same auth-failure reasoning as resolveLongLivedAKID. slog.Error("Failed to decrypt session secret", "accessKeyID", accessKeyID, "err", err) - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-secret", accessKeyID)) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-secret", accessKeyID)) return "", principalContext{}, awserrors.ErrorInvalidClientTokenId } if cred.PrincipalType == principalTypeUser { @@ -465,7 +480,7 @@ func (gw *GatewayConfig) resolveSessionAKID(r *http.Request, accessKeyID, client // because it must produce the secret, whereas this reads the IAM users and // roles buckets. An AKID travels in cleartext, so running it there would let // anyone holding a copied one drive IAM reads with garbage signatures. -func (gw *GatewayConfig) checkSessionPrincipal(principal principalContext, accessKeyID, clientIP string) string { +func (gw *GatewayConfig) checkSessionPrincipal(principal principalContext, accessKeyID string, src authSource) string { if principal.sessionCred == nil { return "" } @@ -483,14 +498,14 @@ func (gw *GatewayConfig) checkSessionPrincipal(principal principalContext, acces // InvalidClientTokenId, not ExpiredToken: the credential has not expired, // the principal behind it is no longer the one it was minted for. slog.Warn("Auth failure: session principal continuity check failed", - "accessKeyID", accessKeyID, "sourceIP", clientIP, + "accessKeyID", accessKeyID, "sourceIP", src.logIP, "identity", principal.identity, "principalType", principal.principalType, "reason", err) // Every legacy record fails at once on the deploy that ships this check, so // counting them would lock out a shared egress address on distinct-attempt // volume alone and answer "retry later" to a fleet that cannot act on it. if !errors.Is(err, handlers_sts.ErrSessionPrincipalLegacy) { - gw.RateLimiter.RecordFailure(clientIP, authlimit.Fingerprint("session-principal", accessKeyID)) + gw.RateLimiter.RecordFailure(src.limitKey, authlimit.Fingerprint("session-principal", accessKeyID)) } return awserrors.ErrorInvalidClientTokenId } diff --git a/spinifex/gateway/auth_accountstatus.go b/spinifex/gateway/auth_accountstatus.go index a183219dc..553fc0bfe 100644 --- a/spinifex/gateway/auth_accountstatus.go +++ b/spinifex/gateway/auth_accountstatus.go @@ -64,7 +64,7 @@ func (c *accountStatusCache) forget(accountID string) { // // This is the only enforcement point for account status on the AWS surface: // until it existed, suspending an account blocked ECR and nothing else. -func (gw *GatewayConfig) checkAccountActive(accountID, clientIP string) string { +func (gw *GatewayConfig) checkAccountActive(accountID string, src authSource) string { if accountID == "" { return "" } @@ -88,7 +88,7 @@ func (gw *GatewayConfig) checkAccountActive(accountID, clientIP string) string { if account.Status != handlers_iam.AccountStatusActive { slog.Warn("Auth failure: account is not active", - "accountID", accountID, "status", account.Status, "sourceIP", clientIP) + "accountID", accountID, "status", account.Status, "sourceIP", src.logIP) return awserrors.ErrorAccessDenied } diff --git a/spinifex/gateway/auth_silentmismatch_test.go b/spinifex/gateway/auth_silentmismatch_test.go index 252ffcb79..1f105baf4 100644 --- a/spinifex/gateway/auth_silentmismatch_test.go +++ b/spinifex/gateway/auth_silentmismatch_test.go @@ -5,6 +5,9 @@ import ( "context" "crypto/sha256" "encoding/hex" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + authlimit "github.com/mulgadc/spinifex/spinifex/ingress/aws/ratelimit" + ingresshttp "github.com/mulgadc/spinifex/spinifex/ingress/http" "log/slog" "net/http" "net/http/httptest" @@ -104,3 +107,55 @@ func TestSigningTime_Sources(t *testing.T) { none := httptest.NewRequest(http.MethodGet, "/", nil) require.Empty(t, signingTime(none)) } + +// A proxied request reaches the gateway from loopback. The auth-failure line +// must name the client the request audit line names, while the lockout stays +// keyed on the connection peer. +func TestSigV4Auth_FailureLogsLoopbackGatedClientIP(t *testing.T) { + cases := []struct { + name string + remoteAddr string + wantLogIP string + }{ + {"proxied via loopback", "127.0.0.1:41234", "203.0.113.7"}, + {"direct client cannot choose the logged IP", "198.51.100.9:41234", "198.51.100.9"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + rl := authlimit.NewAuthRateLimiter() + defer rl.Stop() + gw := &GatewayConfig{ + DisableLogging: true, + Region: testRegion, + IAMService: &mockIAMService{masterKey: testMasterKey}, + STSService: &mockSTSService{}, + RateLimiter: rl, + } + handler := gw.SigV4AuthMiddleware()(http.HandlerFunc(func(http.ResponseWriter, *http.Request) { + t.Fatal("an unknown session credential must not reach the handler") + })) + logs := captureLogs(t) + + req := httptest.NewRequest(http.MethodGet, "/", nil) + req.Host = "localhost:9999" + req.RemoteAddr = tc.remoteAddr + req.Header.Set("X-Real-IP", "203.0.113.7") + signSessionRequest(t, req, nil, testSessionAKID, testSecretKey, testSessionToken) + + resp := doRequest(handler, req) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + + out := logs.String() + require.Contains(t, out, "session credential not found") + require.Contains(t, out, "sourceIP="+tc.wantLogIP) + + // The request's one failure counts against the connection peer: one + // fewer probe than the threshold then locks that address. + peer := ingresshttp.ClientIP(tc.remoteAddr) + recordProbeFailures(rl, peer, "below", authlimit.MaxFailures-2) + require.Empty(t, rl.CheckIP(peer), "lockout must key on the connection peer") + recordProbeFailures(rl, peer, "edge", 1) + require.Equal(t, awserrors.ErrorRequestLimitExceeded, rl.CheckIP(peer), "lockout must key on the connection peer") + }) + } +} diff --git a/spinifex/gateway/auth_test.go b/spinifex/gateway/auth_test.go index ca6014bf2..0d8bd878c 100644 --- a/spinifex/gateway/auth_test.go +++ b/spinifex/gateway/auth_test.go @@ -2061,7 +2061,7 @@ func TestSigV4Auth_SessionPrincipalVerdict_RateLimitRecording(t *testing.T) { } const ip = "10.15.8.11" - code := gw.checkSessionPrincipal(principal, testSessionAKID, ip) + code := gw.checkSessionPrincipal(principal, testSessionAKID, authSource{limitKey: ip, logIP: ip}) require.Equal(t, awserrors.ErrorInvalidClientTokenId, code) // Read at the lockout boundary: with exactly `recorded` failures from @@ -2470,6 +2470,7 @@ func TestCheckPolicy_AssumedRole_ResolveError_InternalError(t *testing.T) { // TestCheckPolicy_AssumedRole_TransientNATS_RetriesThenFails: a transient NATS // error is retried 3× then fails closed (no allow-on-error). func TestCheckPolicy_AssumedRole_TransientNATS_RetriesThenFails(t *testing.T) { + shortenPolicyResolveRetry(t) cred := assumedRoleSessionCred("app", "arn:aws:iam::123456789012:role/app-role", "123456789012") var calls int gw := newAssumedRoleEnforcementGateway(t, cred, func(_, _ string) ([]handlers_iam.PolicyDocument, error) { diff --git a/spinifex/gateway/bedrock/prices.go b/spinifex/gateway/bedrock/prices.go index 6c94d5e7b..7d511783c 100644 --- a/spinifex/gateway/bedrock/prices.go +++ b/spinifex/gateway/bedrock/prices.go @@ -77,6 +77,8 @@ var _ PriceResolver = (*PriceStore)(nil) // NewPriceStore constructs a PriceStore over the cluster's JetStream client, +// NewPriceStore returns a PriceStore over the bedrock-prices KV bucket. The bucket is opened +// lazily; with a nil js, lookups fail with an error instead of panicking. func NewPriceStore(js jetstream.JetStream) *PriceStore { return &PriceStore{store: kvstore.New[Price](js, kvstore.Config{ Name: bedrockPricesBucket, diff --git a/spinifex/gateway/bedrock/usage.go b/spinifex/gateway/bedrock/usage.go index 9203a3edf..50b6e914c 100644 --- a/spinifex/gateway/bedrock/usage.go +++ b/spinifex/gateway/bedrock/usage.go @@ -99,6 +99,8 @@ var _ UsageReader = (*UsageStore)(nil) // NewUsageStore constructs a UsageStore over the cluster's JetStream client, +// NewUsageStore returns a UsageStore over the bedrock-usage KV bucket and its TTL'd dedupe +// bucket. Buckets open lazily; with a nil js, calls fail with an error instead of panicking. func NewUsageStore(js jetstream.JetStream) *UsageStore { return &UsageStore{ store: kvstore.New[UsageCounters](js, kvstore.Config{ diff --git a/spinifex/gateway/bedrockagent.go b/spinifex/gateway/bedrockagent.go index 9fa44183a..52f1e17c1 100644 --- a/spinifex/gateway/bedrockagent.go +++ b/spinifex/gateway/bedrockagent.go @@ -791,10 +791,8 @@ func GetIngestionJob(ctx context.Context, accountID string, kb *ochrevector.KBSt return &bedrockagent.GetIngestionJobOutput{IngestionJob: jobRecordToOutput(kbID, dsID, resp.Job)}, nil } -// StopIngestionJobInput/StopIngestionJobOutput mirror the shape of -// GetIngestionJobInput/GetIngestionJobOutput (KnowledgeBaseId/DataSourceId/ -// IngestionJobId in, an IngestionJob summary out). Defined locally, not in -// aws-sdk-go, because the vendored aws-sdk-go v1.55.8 predates AWS's +// StopIngestionJobInput mirrors GetIngestionJobInput (KnowledgeBaseId, DataSourceId, +// IngestionJobId). It is defined locally because the vendored aws-sdk-go v1.55.8 predates AWS's // StopIngestionJob operation and carries no types for it. type StopIngestionJobInput struct { DataSourceId *string `json:"dataSourceId"` @@ -802,6 +800,8 @@ type StopIngestionJobInput struct { KnowledgeBaseId *string `json:"knowledgeBaseId"` } +// StopIngestionJobOutput mirrors GetIngestionJobOutput, returning the stopped IngestionJob +// summary; like StopIngestionJobInput it has no aws-sdk-go v1 counterpart. type StopIngestionJobOutput struct { IngestionJob *bedrockagent.IngestionJob `json:"ingestionJob"` } diff --git a/spinifex/gateway/conditionkeys_completeness_test.go b/spinifex/gateway/conditionkeys_completeness_test.go index 213669ad8..14ab297ab 100644 --- a/spinifex/gateway/conditionkeys_completeness_test.go +++ b/spinifex/gateway/conditionkeys_completeness_test.go @@ -37,6 +37,7 @@ var gatewayDoorKeys = []string{ var allConditionKeys = []string{ iampolicy.KeySourceIP, iampolicy.KeyS3Prefix, + iampolicy.KeyS3MaxKeys, iampolicy.KeySecureTransport, iampolicy.KeyUsername, iampolicy.KeyPrincipalAccount, @@ -45,9 +46,10 @@ var allConditionKeys = []string{ iampolicy.KeyPassedToService, iampolicy.KeyCurrentTime, iampolicy.KeyEpochTime, - // Deliberately outside the allowlist: there is no MFA in the stack, so the - // key could never be true. It is here to prove the validator says no. + // Deliberately outside the allowlist: there is no MFA in the stack, so neither + // key could ever be supplied. They are here to prove the validator says no. "aws:MultiFactorAuthPresent", + "aws:MultiFactorAuthAge", } // One value per operator that the leaf validator accepts, so a rejection can @@ -69,6 +71,12 @@ var operatorValues = map[string]string{ iampolicy.OpDateLessThanEquals: "2026-01-01T00:00:00Z", iampolicy.OpDateGreaterThan: "1767225600", iampolicy.OpDateGreaterThanEquals: "1767225600", + iampolicy.OpNumericEquals: "100", + iampolicy.OpNumericNotEquals: "100", + iampolicy.OpNumericLessThan: "100", + iampolicy.OpNumericLessThanEquals: "1767225600", + iampolicy.OpNumericGreaterThan: "10.5", + iampolicy.OpNumericGreaterThanEquals: "1e3", // Implemented, but no supported key is ARN-valued, so every pair below is // rejected until one is. iampolicy.OpArnEquals: "arn:aws:iam::000000000001:user/alice", @@ -77,7 +85,7 @@ var operatorValues = map[string]string{ iampolicy.OpArnNotLike: "arn:aws:iam::000000000001:user/*", // Operators the evaluator does not implement. Accepting one would store a // restriction that compares false forever. - "NumericLessThan": "3", + "BinaryEquals": "QmluYXJ5", } // withIfExists adds the IfExists form of every operator, so the gate below covers @@ -113,12 +121,12 @@ func emittedKeys(t *testing.T) map[string]string { gw := &GatewayConfig{DisableLogging: true, IAMService: &mockIAMService{}} union := make(map[string]string) for name, principal := range principals { - r := httptest.NewRequest(http.MethodPost, "/?prefix=home/", nil) + r := httptest.NewRequest(http.MethodPost, "/?prefix=home/&max-keys=100", nil) r.TLS = &tls.ConnectionState{} r.RemoteAddr = "10.4.1.9:52344" // Resolved the way the middleware resolves it, so the gate cannot pass on // a value only the test supplies. - userID, err := gw.principalUserID(principal) + userID, _, err := gw.principalUser(principal) require.NoError(t, err) principal.userID = userID for key := range requestConditionKeys(r, principal) { @@ -154,9 +162,10 @@ func TestRequestConditionKeys_MatchesTheDoorKeySet(t *testing.T) { "the AWS gateway door key set changed: update predastore's mirror in "+ "internal/gate/conditionkeys_completeness_test.go and the door table in bluebottle's door_test.go") - // s3:prefix is the one key the S3 gate adds over this set, and it is absent - // here even when the request carries a prefix parameter. + // s3:prefix and s3:max-keys are the keys the S3 gate adds over this set, and + // they are absent here even when the request carries the parameters. assert.NotContains(t, emitted, iampolicy.KeyS3Prefix) + assert.NotContains(t, emitted, iampolicy.KeyS3MaxKeys) } // The write path and the evaluator are the same allowlist or they are a bug: diff --git a/spinifex/gateway/conditionkeys_test.go b/spinifex/gateway/conditionkeys_test.go index 6cd2c5246..f6379412f 100644 --- a/spinifex/gateway/conditionkeys_test.go +++ b/spinifex/gateway/conditionkeys_test.go @@ -109,19 +109,19 @@ func TestRequestConditionKeys_OmitsUnresolvableUserID(t *testing.T) { assert.NotContains(t, keys, iampolicy.KeyUserID) } -// principalUserID resolves the ID once per request, at the point the principal +// principalUser resolves the ID once per request, at the point the principal // is resolved. A user with no record and a session minted before the ID was // recorded both yield an omitted key, not a failed request. func TestPrincipalUserID_ResolvesAndOmits(t *testing.T) { gw := &GatewayConfig{DisableLogging: true, IAMService: &mockIAMService{}} - userID, err := gw.principalUserID(principalContext{ + userID, _, err := gw.principalUser(principalContext{ identity: "alice", accountID: "000000000001", principalType: principalTypeUser, }) require.NoError(t, err) assert.Equal(t, "AIDAALICE", userID) - userID, err = gw.principalUserID(principalContext{ + userID, _, err = gw.principalUser(principalContext{ identity: "session", accountID: "000000000001", principalType: principalTypeAssumedRole, assumedRoleID: "AROASHAREDOPS:session", }) @@ -130,7 +130,7 @@ func TestPrincipalUserID_ResolvesAndOmits(t *testing.T) { // Root's aws:userid is the account ID, matching what GetCallerIdentity // reports for the same principal. - userID, err = gw.principalUserID(principalContext{ + userID, _, err = gw.principalUser(principalContext{ identity: "root", accountID: "000000000000", principalType: principalTypeUser, }) require.NoError(t, err) @@ -141,7 +141,7 @@ func TestPrincipalUserID_ResolvesAndOmits(t *testing.T) { return nil, errors.New(awserrors.ErrorIAMNoSuchEntity) }, }} - userID, err = missing.principalUserID(principalContext{ + userID, _, err = missing.principalUser(principalContext{ identity: "alice", accountID: "000000000001", principalType: principalTypeUser, }) require.NoError(t, err, "a deleted user omits the key rather than failing the request") @@ -153,14 +153,14 @@ func TestPrincipalUserID_ResolvesAndOmits(t *testing.T) { return &iam.GetUserOutput{User: &iam.User{UserName: aws.String("alice")}}, nil }, }} - userID, err = legacy.principalUserID(principalContext{ + userID, _, err = legacy.principalUser(principalContext{ identity: "alice", accountID: "000000000001", principalType: principalTypeUser, }) require.NoError(t, err) assert.Empty(t, userID) // A session minted before assumed_role_id was recorded takes the same arm. - userID, err = gw.principalUserID(principalContext{ + userID, _, err = gw.principalUser(principalContext{ identity: "session", accountID: "000000000001", principalType: principalTypeAssumedRole, }) require.NoError(t, err) @@ -176,13 +176,47 @@ func TestPrincipalUserID_DependencyFaultFailsClosed(t *testing.T) { }, }} - userID, err := faulty.principalUserID(principalContext{ + userID, userARN, err := faulty.principalUser(principalContext{ identity: "alice", accountID: "000000000001", principalType: principalTypeUser, }) require.Error(t, err) assert.Equal(t, awserrors.ErrorInternalError, err.Error()) assert.Empty(t, userID) + assert.Empty(t, userARN) +} + +// An IAM user's ARN comes from its record, path included, in the same read as +// its ID. Root and role sessions carry no user ARN. +func TestPrincipalUser_ResolvesStoredUserARN(t *testing.T) { + const pathed = "arn:aws:iam::000000000001:user/eng/alice" + gw := &GatewayConfig{DisableLogging: true, IAMService: &mockIAMService{ + getUserFn: func(string, *iam.GetUserInput) (*iam.GetUserOutput, error) { + return &iam.GetUserOutput{User: &iam.User{ + UserName: aws.String("alice"), UserId: aws.String("AIDAALICE"), Arn: aws.String(pathed), + }}, nil + }, + }} + + userID, userARN, err := gw.principalUser(principalContext{ + identity: "alice", accountID: "000000000001", principalType: principalTypeUser, + }) + require.NoError(t, err) + assert.Equal(t, "AIDAALICE", userID) + assert.Equal(t, pathed, userARN) + + _, userARN, err = gw.principalUser(principalContext{ + identity: "root", accountID: "000000000000", principalType: principalTypeUser, + }) + require.NoError(t, err) + assert.Empty(t, userARN) + + _, userARN, err = gw.principalUser(principalContext{ + identity: "session", accountID: "000000000001", principalType: principalTypeAssumedRole, + assumedRoleID: "AROASHAREDOPS:session", + }) + require.NoError(t, err) + assert.Empty(t, userARN) } // RoleSessionName is chosen by the caller of AssumeRole, so aws:username must diff --git a/spinifex/gateway/discover_nodes_test.go b/spinifex/gateway/discover_nodes_test.go index cb885e31e..aaf192f64 100644 --- a/spinifex/gateway/discover_nodes_test.go +++ b/spinifex/gateway/discover_nodes_test.go @@ -44,9 +44,11 @@ func respondAsNodes(t *testing.T, nc *nats.Conn, n int) *atomic.Int64 { // Discovery fronts eight EC2 handlers, so whatever it costs is added to every // one of their calls. The gather counts whoever answers and therefore cannot -// know when to stop, so it always sits out its whole 500ms timeout — that cost +// know when to stop, so it always sits out its whole timeout — that cost // has to be paid once in a while, not once per request. func TestDiscoverActiveNodesKeepsItsCostOffTheRequestPath(t *testing.T) { + const timeout = 50 * time.Millisecond + gateway.SetDiscoverActiveNodesTimeoutForTest(t, timeout) _, nc := testutil.StartTestNATS(t) respondAsNodes(t, nc, 4) @@ -62,7 +64,8 @@ func TestDiscoverActiveNodesKeepsItsCostOffTheRequestPath(t *testing.T) { } elapsed := time.Since(start) - if elapsed > 100*time.Millisecond { + // Five uncached calls would cost five timeouts, so two bounds the cached path well clear of that. + if elapsed > 2*timeout { t.Errorf("five further discoveries took %v; each was paying the fan-out timeout again", elapsed) } } @@ -70,6 +73,7 @@ func TestDiscoverActiveNodesKeepsItsCostOffTheRequestPath(t *testing.T) { // Membership does not change per request. Re-deriving it on every call put a // fan-out in front of every API call that needs it, which is most of them. func TestDiscoverActiveNodesReusesARecentAnswer(t *testing.T) { + gateway.SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) _, nc := testutil.StartTestNATS(t) rounds := respondAsNodes(t, nc, 3) @@ -94,6 +98,7 @@ func TestDiscoverActiveNodesReusesARecentAnswer(t *testing.T) { // A fallback is not evidence of anything: caching one would make a momentary // NATS problem outlive itself for the whole TTL. func TestDiscoverActiveNodesDoesNotCacheAFallback(t *testing.T) { + gateway.SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) _, nc := testutil.StartTestNATS(t) gw := &gateway.GatewayConfig{NATSConn: nc, ExpectedNodes: 2} diff --git a/spinifex/gateway/ecr_authz_test.go b/spinifex/gateway/ecr_authz_test.go index 36c0da110..d0ceaf955 100644 --- a/spinifex/gateway/ecr_authz_test.go +++ b/spinifex/gateway/ecr_authz_test.go @@ -66,7 +66,7 @@ func TestECRRequest_FieldSpelledTwoWaysIsRejected(t *testing.T) { err := dispatchECR(t, gw, "BatchCheckLayerAvailability", `{"repositoryName":"dev","RepositoryName":"prod"}`) require.Error(t, err) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, awserrors.ValidErrorCodeFromError(err)) } } diff --git a/spinifex/gateway/ecr_characterization_test.go b/spinifex/gateway/ecr_characterization_test.go index 11b4a57f1..dda7c98b2 100644 --- a/spinifex/gateway/ecr_characterization_test.go +++ b/spinifex/gateway/ecr_characterization_test.go @@ -256,7 +256,7 @@ func TestECRInventory_StubbedSetIsPinned(t *testing.T) { "ListRepositories", "BatchGetImage", "BatchCheckLayerAvailability", "BatchDeleteImage", "PutImage", "ListImages", "DescribeImages", "GetDownloadUrlForLayer", "InitiateLayerUpload", "UploadLayerPart", "CompleteLayerUpload", "GetRegistryPolicy", "PutRegistryPolicy", - "DescribeRegistry", "StartLifecyclePolicyPreview", "GetLifecyclePolicyPreview", + "StartLifecyclePolicyPreview", "GetLifecyclePolicyPreview", "PutReplicationConfiguration", "ReplicateImage", } assert.ElementsMatch(t, want, awsapi.StubbedActionNames()) @@ -270,7 +270,7 @@ func TestECRInventory_ReachableStubsAnswer501(t *testing.T) { want := []string{ "ListRepositories", "BatchCheckLayerAvailability", "GetDownloadUrlForLayer", "InitiateLayerUpload", "UploadLayerPart", "CompleteLayerUpload", "GetRegistryPolicy", - "PutRegistryPolicy", "DescribeRegistry", "PutReplicationConfiguration", "ReplicateImage", + "PutRegistryPolicy", "PutReplicationConfiguration", "ReplicateImage", } assert.ElementsMatch(t, want, reachableStubs) @@ -533,7 +533,7 @@ func TestECRInventory_RegisteredStubbedUnsupportedArePinned(t *testing.T) { wantStubbed := []string{ "ListRepositories", "BatchCheckLayerAvailability", "GetDownloadUrlForLayer", "InitiateLayerUpload", "UploadLayerPart", "CompleteLayerUpload", "GetRegistryPolicy", - "PutRegistryPolicy", "DescribeRegistry", "PutReplicationConfiguration", "ReplicateImage", + "PutRegistryPolicy", "PutReplicationConfiguration", "ReplicateImage", } wantUnsupported := []string{ "GetImageScanningConfiguration", "StartImageScan", "DescribeImageScanFindings", diff --git a/spinifex/gateway/ecr_createdeleterepository_test.go b/spinifex/gateway/ecr_createdeleterepository_test.go index 003faf7db..80e2462bd 100644 --- a/spinifex/gateway/ecr_createdeleterepository_test.go +++ b/spinifex/gateway/ecr_createdeleterepository_test.go @@ -113,7 +113,7 @@ func TestCreateRepository_Tags(t *testing.T) { _, err = createRepo(t, gw, `{"repositoryName":"team/badtag","tags":[{"Key":"","Value":"x"}]}`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidTagParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestCreateRepository_EncryptionAndScanningConfiguration(t *testing.T) { @@ -138,12 +138,12 @@ func TestCreateRepository_EncryptionAndScanningConfiguration(t *testing.T) { require.Error(t, err) code, message, ok := awserrors.ResolveErrorDetail(err) require.True(t, ok) - assert.Equal(t, "InvalidParameterValue", code) + assert.Equal(t, "InvalidParameterException", code) assert.NotEmpty(t, message) _, err = createRepo(t, gw, `{"repositoryName":"team/bad","encryptionConfiguration":{"encryptionType":"bogus"}}`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestCreateRepository_Errors(t *testing.T) { @@ -155,8 +155,8 @@ func TestCreateRepository_Errors(t *testing.T) { name, body, expect string }{ {"already exists", `{"repositoryName":"team/app"}`, "RepositoryAlreadyExistsException"}, - {"invalid name", `{"repositoryName":"Team/App"}`, "InvalidParameterValue"}, - {"empty name", `{}`, "InvalidParameterValue"}, + {"invalid name", `{"repositoryName":"Team/App"}`, "InvalidParameterException"}, + {"empty name", `{}`, "InvalidParameterException"}, {"cross-account", `{"repositoryName":"team/x","registryId":"999999999999"}`, "AccessDenied"}, } for _, tc := range cases { @@ -168,6 +168,18 @@ func TestCreateRepository_Errors(t *testing.T) { } } +func TestCreateRepository_AlreadyExistsNamesRepository(t *testing.T) { + gw, _ := newRepoLifecycleGateway(t) + _, err := createRepo(t, gw, `{"repositoryName":"team/app"}`) + require.NoError(t, err) + _, err = createRepo(t, gw, `{"repositoryName":"team/app"}`) + require.Error(t, err) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorRepositoryAlreadyExists, code) + assert.Equal(t, "The repository with name 'team/app' already exists in the registry with id '"+ecrTestAccount+"'", message) +} + // AWS's CreateRepository names the pattern a refused repositoryName must match. func TestCreateRepository_BadNameCarriesAWSMessage(t *testing.T) { gw, _ := newRepoLifecycleGateway(t) @@ -175,7 +187,7 @@ func TestCreateRepository_BadNameCarriesAWSMessage(t *testing.T) { require.Error(t, err) code, message, ok := awserrors.ResolveErrorDetail(err) require.True(t, ok) - assert.Equal(t, awserrors.ErrorInvalidParameterValue, code) + assert.Equal(t, awserrors.ErrorECRInvalidParameter, code) assert.Equal(t, `Invalid parameter at 'repositoryName' failed to satisfy constraint: 'must satisfy regular expression '[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*(/[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*)*''`, message) } @@ -196,7 +208,7 @@ func TestCreateRepository_NoAccountAndMalformed(t *testing.T) { _, err = createRepo(t, gw, `{`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestDeleteRepository_NoAccountAndMalformed(t *testing.T) { @@ -210,7 +222,7 @@ func TestDeleteRepository_NoAccountAndMalformed(t *testing.T) { _, err = deleteRepo(t, gw, `{`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestDeleteRepository_Happy(t *testing.T) { @@ -221,15 +233,23 @@ func TestDeleteRepository_Happy(t *testing.T) { w, err := deleteRepo(t, gw, `{"repositoryName":"team/app"}`) require.NoError(t, err) require.Equal(t, http.StatusOK, w.Code) - var out repoOut + var out struct { + Repository map[string]any `json:"repository"` + } require.NoError(t, json.Unmarshal(w.Body.Bytes(), &out)) - assert.Equal(t, "team/app", out.Repository.RepositoryName) - assert.Equal(t, "AES256", out.Repository.EncryptionConfiguration.EncryptionType) + assert.Equal(t, "team/app", out.Repository["repositoryName"]) + assert.Equal(t, "MUTABLE", out.Repository["imageTagMutability"]) + // AWS's DeleteRepository omits both configurations. + assert.NotContains(t, out.Repository, "encryptionConfiguration") + assert.NotContains(t, out.Repository, "imageScanningConfiguration") // Gone afterwards. _, err = deleteRepo(t, gw, `{"repositoryName":"team/app"}`) require.Error(t, err) - assert.Equal(t, "RepositoryNotFoundException", err.Error()) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorRepositoryNotFound, code) + assert.Equal(t, "The repository with name 'team/app' does not exist in the registry with id '"+ecrTestAccount+"'", message) } func TestDeleteRepository_NotEmpty(t *testing.T) { diff --git a/spinifex/gateway/ecr_describerepositories_test.go b/spinifex/gateway/ecr_describerepositories_test.go index ec9b1f179..e6d84ef2c 100644 --- a/spinifex/gateway/ecr_describerepositories_test.go +++ b/spinifex/gateway/ecr_describerepositories_test.go @@ -152,7 +152,7 @@ func TestDescribeRepositories_MissingNamedRepo(t *testing.T) { ctx := context.WithValue(req.Context(), ctxAccountID, ecrTestAccount) err := gw.serveECR(httptest.NewRecorder(), req.WithContext(ctx)) require.Error(t, err) - assert.Equal(t, "RepositoryNotFoundException", err.Error()) + assert.Equal(t, "RepositoryNotFoundException", awserrors.ValidErrorCodeFromError(err)) } func TestDescribeRepositories_CrossAccountDenied(t *testing.T) { diff --git a/spinifex/gateway/ecr_getauthorizationtoken_test.go b/spinifex/gateway/ecr_getauthorizationtoken_test.go index d9325cce4..ffb0023ab 100644 --- a/spinifex/gateway/ecr_getauthorizationtoken_test.go +++ b/spinifex/gateway/ecr_getauthorizationtoken_test.go @@ -9,6 +9,7 @@ import ( "strings" "testing" + "github.com/aws/aws-sdk-go/aws" awsapi "github.com/mulgadc/spinifex/spinifex/domains/ecr/awsapi" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -61,6 +62,52 @@ func TestGetAuthorizationToken_MintsUsableToken(t *testing.T) { assert.Equal(t, "arn:aws:iam::"+ecrTestAccount+":user/dev", claims.Subject) } +// The mint and verify halves agree on a pathed user: the token is minted for the +// stored ARN the middleware resolved, and verifies against the same record. +func TestGetAuthorizationToken_PathedUserRoundTrips(t *testing.T) { + iamSvc := newECRMockIAMService() + seedECRTestUser(iamSvc, ecrPrincipalTestAccount, "dev", ecrPrincipalTestAKID) + iamSvc.users[ecrPrincipalTestAccount+"|dev"].Arn = aws.String(ecrPathedUserARN) + allow, _ := allowAllIAMService().getUserPoliciesFn(ecrPrincipalTestAccount, "dev") + iamSvc.userPolicies[ecrPrincipalTestAccount+"|dev"] = allow + iss, verify := newECRAuth(t) + endpoint := awsapi.RepositoryEndpoint{Region: ecrTestRegion, ServicesDomain: ecrTestSuffix} + gw := withECR(&GatewayConfig{ + Region: ecrTestRegion, InternalSuffix: ecrTestSuffix, + ECRTokenIssuer: iss, ECRTokenVerifier: verify, DisableLogging: true, + IAMService: iamSvc, + }, awsapi.Deps{AuthorizationToken: awsapi.NewAuthorizationTokenActionService(iss, endpoint)}) + + req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader("{}")) + ctx := context.WithValue(req.Context(), ctxAccountID, ecrPrincipalTestAccount) + ctx = context.WithValue(ctx, ctxPrincipalType, principalTypeUser) + ctx = context.WithValue(ctx, ctxIdentity, "dev") + ctx = context.WithValue(ctx, ctxUserARN, ecrPathedUserARN) + ctx = context.WithValue(ctx, ctxAccessKey, ecrPrincipalTestAKID) + req.Header.Set("X-Amz-Target", awsapi.TargetPrefix+".GetAuthorizationToken") + w := httptest.NewRecorder() + require.NoError(t, gw.serveECR(w, req.WithContext(ctx))) + require.Equal(t, http.StatusOK, w.Code) + + var out struct { + AuthorizationData []struct { + AuthorizationToken string `json:"authorizationToken"` + } `json:"authorizationData"` + } + require.NoError(t, json.Unmarshal(w.Body.Bytes(), &out)) + require.Len(t, out.AuthorizationData, 1) + decoded, err := base64.StdEncoding.DecodeString(out.AuthorizationData[0].AuthorizationToken) + require.NoError(t, err) + _, jwtStr, _ := strings.Cut(string(decoded), ":") + + claims, err := verify.Verify(jwtStr) + require.NoError(t, err) + assert.Equal(t, ecrPathedUserARN, claims.Subject) + got, err := gw.resolveECRPrincipal(claims) + require.NoError(t, err) + assert.Equal(t, ecrPathedUserARN, got.userARN) +} + func TestGetAuthorizationToken_ProxyEndpointCarriesPort(t *testing.T) { iss, verify := newECRAuth(t) endpoint := awsapi.RepositoryEndpoint{Region: ecrTestRegion, ServicesDomain: ecrTestSuffix, RegistryPort: "9999"} diff --git a/spinifex/gateway/ecr_image_test.go b/spinifex/gateway/ecr_image_test.go index 8d3e216db..f033815f7 100644 --- a/spinifex/gateway/ecr_image_test.go +++ b/spinifex/gateway/ecr_image_test.go @@ -9,6 +9,7 @@ import ( "strings" "testing" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ecr" handlers_ecr "github.com/mulgadc/spinifex/spinifex/domains/ecr" awsapi "github.com/mulgadc/spinifex/spinifex/domains/ecr/awsapi" @@ -89,7 +90,7 @@ func TestListImages_MissingRepo(t *testing.T) { gw := newImageGateway(t) _, err := callImage(t, gw, "ListImages", `{"repositoryName":"team/ghost"}`) require.Error(t, err) - assert.Equal(t, "RepositoryNotFoundException", err.Error()) + assert.Equal(t, "RepositoryNotFoundException", awserrors.ValidErrorCodeFromError(err)) } func TestDescribeImages_HappyAndNotFound(t *testing.T) { @@ -115,10 +116,36 @@ func TestDescribeImages_HappyAndNotFound(t *testing.T) { assert.Positive(t, out.ImageDetails[0].ImageSizeInBytes) assert.Positive(t, out.ImageDetails[0].ImagePushedAt) - // Asking for an absent imageId -> ImageNotFound. + // Asking for an absent imageId -> ImageNotFound, naming it as AWS does. _, err = callImage(t, gw, "DescribeImages", `{"repositoryName":"team/app","imageIds":[{"imageTag":"ghost"}]}`) require.Error(t, err) - assert.Equal(t, "ImageNotFoundException", err.Error()) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok) + assert.Equal(t, awserrors.ErrorImageNotFound, code) + assert.Equal(t, "The image with imageId {imageDigest:'null', imageTag:'ghost'} does not exist within the repository with name 'team/app' in the registry with id '"+ecrTestAccount+"'", message) +} + +// AWS answers a BatchGetImage that finds nothing with an empty images list +// beside the failures, not an absent one. +func TestBatchGetImage_AllMissing(t *testing.T) { + gw := newImageGateway(t) + seedTaggedImage(t, gw, "team/app", "v1") + + w, err := callImage(t, gw, "BatchGetImage", `{"repositoryName":"team/app","imageIds":[{"imageTag":"nope"}]}`) + require.NoError(t, err) + var out struct { + Images []json.RawMessage `json:"images"` + Failures []struct { + FailureCode string `json:"failureCode"` + FailureReason string `json:"failureReason"` + } `json:"failures"` + } + require.NoError(t, json.Unmarshal(w.Body.Bytes(), &out)) + assert.NotNil(t, out.Images) + assert.Empty(t, out.Images) + require.Len(t, out.Failures, 1) + assert.Equal(t, "ImageNotFound", out.Failures[0].FailureCode) + assert.Equal(t, "Requested image not found", out.Failures[0].FailureReason) } func TestBatchGetImage_PartialAndDigestWins(t *testing.T) { @@ -154,7 +181,7 @@ func TestBatchGetImage_CapExceeded(t *testing.T) { body := `{"repositoryName":"team/app","imageIds":[` + strings.Join(ids, ",") + `]}` _, err := callImage(t, gw, "BatchGetImage", body) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestPutImage_HappyAndMissingManifest(t *testing.T) { @@ -182,10 +209,10 @@ func TestPutImage_HappyAndMissingManifest(t *testing.T) { require.NoError(t, json.Unmarshal(w.Body.Bytes(), &list)) assert.Len(t, list.ImageIds, 1) - // Missing manifest -> InvalidParameterValue. + // Missing manifest -> InvalidParameterException. _, err = callImage(t, gw, "PutImage", `{"repositoryName":"team/app","imageTag":"v2"}`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } // TestPutImage_RepoNotCreated asserts the JSON PutImage path rejects an uncreated @@ -200,7 +227,7 @@ func TestPutImage_RepoNotCreated(t *testing.T) { }) _, err := callImage(t, gw, "PutImage", string(body)) require.Error(t, err) - assert.Equal(t, "RepositoryNotFoundException", err.Error()) + assert.Equal(t, "RepositoryNotFoundException", awserrors.ValidErrorCodeFromError(err)) } func TestBatchDeleteImage_Partial(t *testing.T) { @@ -216,7 +243,18 @@ func TestBatchDeleteImage_Partial(t *testing.T) { require.NoError(t, json.Unmarshal(w.Body.Bytes(), &out)) require.Len(t, out.ImageIds, 1) assert.Equal(t, digest, *out.ImageIds[0].ImageDigest) - require.Len(t, out.Failures, 2) + wantFailures := []struct{ tag, code, reason string }{ + {"ghost", "ImageNotFound", "Requested image not found"}, + {"", "MissingDigestAndTag", "no digest or tag specified"}, + } + require.Len(t, out.Failures, len(wantFailures)) + for i, want := range wantFailures { + f := out.Failures[i] + assert.Equal(t, want.code, aws.StringValue(f.FailureCode), "failure %d code", i) + assert.Equal(t, want.reason, aws.StringValue(f.FailureReason), "failure %d reason", i) + require.NotNil(t, f.ImageId, "failure %d imageId", i) + assert.Equal(t, want.tag, aws.StringValue(f.ImageId.ImageTag), "failure %d tag", i) + } // The image is gone. w, err = callImage(t, gw, "ListImages", `{"repositoryName":"team/app"}`) @@ -226,6 +264,25 @@ func TestBatchDeleteImage_Partial(t *testing.T) { assert.Empty(t, list.ImageIds) } +// TestBatchDeleteImage_EmptyArraysSerialised asserts both arrays are present +// on the wire when empty, as AWS returns them. +func TestBatchDeleteImage_EmptyArraysSerialised(t *testing.T) { + gw := newImageGateway(t) + digest := seedTaggedImage(t, gw, "team/app", "v1") + + w, err := callImage(t, gw, "BatchDeleteImage", `{"repositoryName":"team/app","imageIds":[{"imageTag":"ghost"}]}`) + require.NoError(t, err) + require.Equal(t, http.StatusOK, w.Code) + assert.Contains(t, w.Body.String(), `"imageIds":[]`) + assert.Contains(t, w.Body.String(), `"failureCode":"ImageNotFound"`) + + body := fmt.Sprintf(`{"repositoryName":"team/app","imageIds":[{"imageDigest":"%s"}]}`, digest) + w, err = callImage(t, gw, "BatchDeleteImage", body) + require.NoError(t, err) + require.Equal(t, http.StatusOK, w.Code) + assert.Contains(t, w.Body.String(), `"failures":[]`) +} + func TestImageHandlers_GuardRails(t *testing.T) { gw := newImageGateway(t) diff --git a/spinifex/gateway/ecr_lifecyclepreview_test.go b/spinifex/gateway/ecr_lifecyclepreview_test.go index 6202a2aec..3cdf8085b 100644 --- a/spinifex/gateway/ecr_lifecyclepreview_test.go +++ b/spinifex/gateway/ecr_lifecyclepreview_test.go @@ -76,12 +76,12 @@ func TestLifecyclePreview_Errors(t *testing.T) { // Missing repo. _, err := callImage(t, gw, "GetLifecyclePolicyPreview", previewBody("team/ghost", previewExpireOldest)) require.Error(t, err) - assert.Equal(t, "RepositoryNotFoundException", err.Error()) + assert.Equal(t, "RepositoryNotFoundException", awserrors.ValidErrorCodeFromError(err)) // Malformed override policy. _, err = callImage(t, gw, "GetLifecyclePolicyPreview", previewBody("team/app", "not-json")) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) // Cross-account. _, err = callImage(t, gw, "StartLifecyclePolicyPreview", `{"repositoryName":"team/app","registryId":"999999999999","lifecyclePolicyText":`+strconvQuotePreview(previewExpireOldest)+`}`) diff --git a/spinifex/gateway/ecr_principal.go b/spinifex/gateway/ecr_principal.go index 58ab1c955..1a9e6d0db 100644 --- a/spinifex/gateway/ecr_principal.go +++ b/spinifex/gateway/ecr_principal.go @@ -119,11 +119,12 @@ func (gw *GatewayConfig) resolveECRLongLivedPrincipal(claims *ecrauth.Claims) (p return principalContext{}, classifyIAMLookupErr(err, "user") } identity := aws.StringValue(userOut.User.UserName) + userARN := aws.StringValue(userOut.User.Arn) if claims.PrincipalType != principalTypeUser { return principalContext{}, ecrInvalidPrincipal("principalType claim %q does not match resolved user", claims.PrincipalType) } - canonicalARN, err := buildCallerARN(ak.AccountID, identity, principalTypeUser, "") + canonicalARN, err := buildCallerARN(ak.AccountID, identity, principalTypeUser, "", userARN) if err != nil { return principalContext{}, ecrInvalidPrincipal("cannot build canonical ARN: %w", err) } @@ -136,6 +137,7 @@ func (gw *GatewayConfig) resolveECRLongLivedPrincipal(claims *ecrauth.Claims) (p accountID: ak.AccountID, principalType: principalTypeUser, userID: aws.StringValue(userOut.User.UserId), + userARN: userARN, }, nil } @@ -186,7 +188,7 @@ func (gw *GatewayConfig) resolveECRSessionPrincipal(claims *ecrauth.Claims) (pri if claims.PrincipalType != principalTypeUser { return principalContext{}, ecrInvalidPrincipal("principalType claim %q does not match resolved session", claims.PrincipalType) } - canonicalARN, err := buildCallerARN(cred.AccountID, cred.SessionName, principalTypeUser, "") + canonicalARN, err := buildCallerARN(cred.AccountID, cred.SessionName, principalTypeUser, "", live.UserARN) if err != nil { return principalContext{}, ecrInvalidPrincipal("cannot build canonical ARN: %w", err) } @@ -199,6 +201,7 @@ func (gw *GatewayConfig) resolveECRSessionPrincipal(claims *ecrauth.Claims) (pri accountID: cred.AccountID, principalType: principalTypeUser, userID: live.UserID, + userARN: live.UserARN, }, nil } @@ -208,7 +211,7 @@ func (gw *GatewayConfig) resolveECRSessionPrincipal(claims *ecrauth.Claims) (pri return principalContext{}, ecrInvalidPrincipal("principalType claim %q does not match resolved session", claims.PrincipalType) } - canonicalARN, err := buildCallerARN(cred.AccountID, cred.SessionName, principalTypeAssumedRole, cred.AssumedRoleARN) + canonicalARN, err := buildCallerARN(cred.AccountID, cred.SessionName, principalTypeAssumedRole, cred.AssumedRoleARN, "") if err != nil { return principalContext{}, ecrInvalidPrincipal("cannot build canonical ARN: %w", err) } diff --git a/spinifex/gateway/ecr_principal_test.go b/spinifex/gateway/ecr_principal_test.go index facbfacaa..0315ecbab 100644 --- a/spinifex/gateway/ecr_principal_test.go +++ b/spinifex/gateway/ecr_principal_test.go @@ -119,6 +119,9 @@ type ecrMockSTSService struct { // returns. Detection itself is exercised against real IAM/STS services in // handlers/sts; what these tests pin is how this door maps the answer. principalErr error + + // liveUserARN is the stored ARN the continuity read returns for a user session. + liveUserARN string } func newECRMockSTSService() *ecrMockSTSService { @@ -133,7 +136,11 @@ func (m *ecrMockSTSService) VerifySessionPrincipal(cred *handlers_sts.SessionCre if m.principalErr != nil { return nil, m.principalErr } - return stubSessionPrincipal(cred) + live, err := stubSessionPrincipal(cred) + if err == nil && cred.PrincipalType == principalTypeUser { + live.UserARN = m.liveUserARN + } + return live, err } const ( @@ -172,7 +179,34 @@ func TestResolveECRPrincipal_LongLivedUser(t *testing.T) { got, err := gw.resolveECRPrincipal(claims) require.NoError(t, err) assert.Equal(t, principalContext{identity: "dev", accountID: ecrPrincipalTestAccount, - principalType: principalTypeUser, userID: "AIDADEV"}, got) + principalType: principalTypeUser, userID: "AIDADEV", userARN: claims.Subject}, got) +} + +const ecrPathedUserARN = "arn:aws:iam::" + ecrPrincipalTestAccount + ":user/eng/dev" + +// A user at a non-root path verifies against its stored ARN, path included. A +// token whose subject drops the path, as one minted before the path was carried +// would, no longer names the principal and is rejected. +func TestResolveECRPrincipal_LongLivedUser_Pathed(t *testing.T) { + iamSvc := newECRMockIAMService() + seedECRTestUser(iamSvc, ecrPrincipalTestAccount, "dev", ecrPrincipalTestAKID) + iamSvc.users[ecrPrincipalTestAccount+"|dev"].Arn = aws.String(ecrPathedUserARN) + gw := &GatewayConfig{IAMService: iamSvc} + + claims := &ecrauth.Claims{ + AccountID: ecrPrincipalTestAccount, + PrincipalType: principalTypeUser, + AccessKeyID: ecrPrincipalTestAKID, + } + claims.Subject = ecrPathedUserARN + got, err := gw.resolveECRPrincipal(claims) + require.NoError(t, err) + assert.Equal(t, ecrPathedUserARN, got.userARN) + + claims.Subject = "arn:aws:iam::" + ecrPrincipalTestAccount + ":user/dev" + _, err = gw.resolveECRPrincipal(claims) + require.Error(t, err) + assert.False(t, isECRDependencyFailure(err)) } func TestResolveECRPrincipal_GlobalRoot(t *testing.T) { @@ -324,6 +358,29 @@ func TestResolveECRPrincipal_SessionToken_User(t *testing.T) { principalType: principalTypeUser, userID: "AIDADEV"}, got) } +func TestResolveECRPrincipal_SessionToken_User_Pathed(t *testing.T) { + iamSvc := newECRMockIAMService() + stsSvc := newECRMockSTSService() + seedECRSessionUser(iamSvc, stsSvc, ecrPrincipalTestAccount, "dev", ecrPrincipalTestASID, time.Now().Add(time.Hour)) + stsSvc.liveUserARN = ecrPathedUserARN + gw := &GatewayConfig{IAMService: iamSvc, STSService: stsSvc} + + claims := &ecrauth.Claims{ + AccountID: ecrPrincipalTestAccount, + PrincipalType: principalTypeUser, + AccessKeyID: ecrPrincipalTestASID, + } + claims.Subject = ecrPathedUserARN + got, err := gw.resolveECRPrincipal(claims) + require.NoError(t, err) + assert.Equal(t, ecrPathedUserARN, got.userARN) + + claims.Subject = "arn:aws:iam::" + ecrPrincipalTestAccount + ":user/dev" + _, err = gw.resolveECRPrincipal(claims) + require.Error(t, err) + assert.False(t, isECRDependencyFailure(err)) +} + // The user branch had no continuity check at all before: a GetSessionToken // session survived its user being deleted and recreated under the same name. func TestResolveECRPrincipal_SessionToken_User_StalePrincipalRejected(t *testing.T) { diff --git a/spinifex/gateway/ecr_tagmutability_test.go b/spinifex/gateway/ecr_tagmutability_test.go index 1900eaf9c..9238ed16c 100644 --- a/spinifex/gateway/ecr_tagmutability_test.go +++ b/spinifex/gateway/ecr_tagmutability_test.go @@ -48,7 +48,7 @@ func TestCreateRepository_InvalidMutability(t *testing.T) { gw, _ := newRepoLifecycleGateway(t) _, err := createRepo(t, gw, `{"repositoryName":"team/app","imageTagMutability":"SOMETIMES"}`) require.Error(t, err) - assert.Equal(t, "InvalidParameterValue", awserrors.ValidErrorCodeFromError(err)) + assert.Equal(t, "InvalidParameterException", awserrors.ValidErrorCodeFromError(err)) } func TestPutImageTagMutability_Happy(t *testing.T) { @@ -86,9 +86,9 @@ func TestPutImageTagMutability_Errors(t *testing.T) { cases := []struct { name, body, expect string }{ - {"missing value", `{"repositoryName":"team/app"}`, "InvalidParameterValue"}, - {"invalid value", `{"repositoryName":"team/app","imageTagMutability":"NOPE"}`, "InvalidParameterValue"}, - {"invalid name", `{"repositoryName":"Team/App","imageTagMutability":"IMMUTABLE"}`, "InvalidParameterValue"}, + {"missing value", `{"repositoryName":"team/app"}`, "InvalidParameterException"}, + {"invalid value", `{"repositoryName":"team/app","imageTagMutability":"NOPE"}`, "InvalidParameterException"}, + {"invalid name", `{"repositoryName":"Team/App","imageTagMutability":"IMMUTABLE"}`, "InvalidParameterException"}, {"cross-account", `{"repositoryName":"team/app","registryId":"999999999999","imageTagMutability":"IMMUTABLE"}`, "AccessDenied"}, {"not found", `{"repositoryName":"team/ghost","imageTagMutability":"IMMUTABLE"}`, "RepositoryNotFoundException"}, } diff --git a/spinifex/gateway/ecr_token.go b/spinifex/gateway/ecr_token.go index e078adab6..c3a6cba90 100644 --- a/spinifex/gateway/ecr_token.go +++ b/spinifex/gateway/ecr_token.go @@ -82,7 +82,7 @@ func (gw *GatewayConfig) handleECRToken(w http.ResponseWriter, r *http.Request) return } - callerARN, err := buildCallerARN(principal.accountID, principal.identity, principal.principalType, principal.assumedRoleARN) + callerARN, err := buildCallerARN(principal.accountID, principal.identity, principal.principalType, principal.assumedRoleARN, principal.userARN) if err != nil { slog.Error("ECR token endpoint: cannot build canonical caller ARN", "err", err) ecrregistry.WriteError(w, http.StatusInternalServerError, "SERVER_ERROR", "token mint failed") diff --git a/spinifex/gateway/ecs/actions.go b/spinifex/gateway/ecs/actions.go index 8ca488db1..3237fc913 100644 --- a/spinifex/gateway/ecs/actions.go +++ b/spinifex/gateway/ecs/actions.go @@ -57,6 +57,8 @@ func checkTaskLaunchRoles(ctx context.Context, svc handlers_ecs.ECSService, acco // --- Cluster --- +// CreateCluster implements the ECS CreateCluster action, creating a cluster. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func CreateCluster(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.CreateClusterInput) if err := unmarshalIfBody(body, input); err != nil { @@ -65,6 +67,8 @@ func CreateCluster(ctx context.Context, nc *nats.Conn, accountID string, body [] return handlers_ecs.NewNATSECSService(nc).CreateCluster(ctx, input, accountID) } +// DeleteCluster implements the ECS DeleteCluster action, deleting a cluster. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func DeleteCluster(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DeleteClusterInput) if err := unmarshalIfBody(body, input); err != nil { @@ -73,6 +77,8 @@ func DeleteCluster(ctx context.Context, nc *nats.Conn, accountID string, body [] return handlers_ecs.NewNATSECSService(nc).DeleteCluster(ctx, input, accountID) } +// DescribeClusters implements the ECS DescribeClusters action, describing clusters. The JSON body +// (empty means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func DescribeClusters(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeClustersInput) if err := unmarshalIfBody(body, input); err != nil { @@ -81,6 +87,8 @@ func DescribeClusters(ctx context.Context, nc *nats.Conn, accountID string, body return handlers_ecs.NewNATSECSService(nc).DescribeClusters(ctx, input, accountID) } +// ListClusters implements the ECS ListClusters action, listing cluster ARNs. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func ListClusters(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListClustersInput) if err := unmarshalIfBody(body, input); err != nil { @@ -91,6 +99,8 @@ func ListClusters(ctx context.Context, nc *nats.Conn, accountID string, body []b // --- Task definition --- +// RegisterTaskDefinition implements the ECS RegisterTaskDefinition action. It enforces +// iam:PassRole on the task and execution role ARNs before registering via NATS. func RegisterTaskDefinition(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.RegisterTaskDefinitionInput) if err := unmarshalIfBody(body, input); err != nil { @@ -102,6 +112,9 @@ func RegisterTaskDefinition(ctx context.Context, nc *nats.Conn, accountID string return handlers_ecs.NewNATSECSService(nc).RegisterTaskDefinition(ctx, input, accountID) } +// DeregisterTaskDefinition implements the ECS DeregisterTaskDefinition action, marking a task +// definition revision INACTIVE. The JSON body (empty means a zero input) is decoded and forwarded +// to the NATS ECS service for accountID. func DeregisterTaskDefinition(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DeregisterTaskDefinitionInput) if err := unmarshalIfBody(body, input); err != nil { @@ -110,6 +123,9 @@ func DeregisterTaskDefinition(ctx context.Context, nc *nats.Conn, accountID stri return handlers_ecs.NewNATSECSService(nc).DeregisterTaskDefinition(ctx, input, accountID) } +// DescribeTaskDefinition implements the ECS DescribeTaskDefinition action, describing a task +// definition revision. The JSON body (empty means a zero input) is decoded and forwarded to the +// NATS ECS service for accountID. func DescribeTaskDefinition(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeTaskDefinitionInput) if err := unmarshalIfBody(body, input); err != nil { @@ -118,6 +134,9 @@ func DescribeTaskDefinition(ctx context.Context, nc *nats.Conn, accountID string return handlers_ecs.NewNATSECSService(nc).DescribeTaskDefinition(ctx, input, accountID) } +// ListTaskDefinitions implements the ECS ListTaskDefinitions action, listing task definition +// ARNs. The JSON body (empty means a zero input) is decoded and forwarded to the NATS ECS service +// for accountID. func ListTaskDefinitions(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListTaskDefinitionsInput) if err := unmarshalIfBody(body, input); err != nil { @@ -128,6 +147,9 @@ func ListTaskDefinitions(ctx context.Context, nc *nats.Conn, accountID string, b // --- Container instance --- +// RegisterContainerInstance implements the ECS RegisterContainerInstance action, registering an +// EC2 instance into a cluster. The JSON body (empty means a zero input) is decoded and forwarded +// to the NATS ECS service for accountID. func RegisterContainerInstance(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.RegisterContainerInstanceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -146,6 +168,9 @@ func ProvisionCapacity(ctx context.Context, nc *nats.Conn, accountID string, bod return handlers_ecs.NewNATSECSService(nc).ProvisionCapacity(ctx, input, accountID) } +// DeregisterContainerInstance implements the ECS DeregisterContainerInstance action, removing a +// container instance from a cluster. The JSON body (empty means a zero input) is decoded and +// forwarded to the NATS ECS service for accountID. func DeregisterContainerInstance(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DeregisterContainerInstanceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -154,6 +179,9 @@ func DeregisterContainerInstance(ctx context.Context, nc *nats.Conn, accountID s return handlers_ecs.NewNATSECSService(nc).DeregisterContainerInstance(ctx, input, accountID) } +// UpdateContainerInstancesState implements the ECS UpdateContainerInstancesState action, setting +// container instances ACTIVE or DRAINING. The JSON body (empty means a zero input) is decoded and +// forwarded to the NATS ECS service for accountID. func UpdateContainerInstancesState(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.UpdateContainerInstancesStateInput) if err := unmarshalIfBody(body, input); err != nil { @@ -162,6 +190,9 @@ func UpdateContainerInstancesState(ctx context.Context, nc *nats.Conn, accountID return handlers_ecs.NewNATSECSService(nc).UpdateContainerInstancesState(ctx, input, accountID) } +// DescribeContainerInstances implements the ECS DescribeContainerInstances action, describing +// container instances. The JSON body (empty means a zero input) is decoded and forwarded to the +// NATS ECS service for accountID. func DescribeContainerInstances(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeContainerInstancesInput) if err := unmarshalIfBody(body, input); err != nil { @@ -170,6 +201,9 @@ func DescribeContainerInstances(ctx context.Context, nc *nats.Conn, accountID st return handlers_ecs.NewNATSECSService(nc).DescribeContainerInstances(ctx, input, accountID) } +// ListContainerInstances implements the ECS ListContainerInstances action, listing container +// instance ARNs. The JSON body (empty means a zero input) is decoded and forwarded to the NATS +// ECS service for accountID. func ListContainerInstances(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListContainerInstancesInput) if err := unmarshalIfBody(body, input); err != nil { @@ -246,6 +280,8 @@ func runTask(ctx context.Context, svc handlers_ecs.ECSService, accountID string, return svc.RunTask(ctx, input, accountID) } +// StartTask implements the ECS StartTask action, placing a task on named container instances +// after enforcing iam:PassRole on the task definition's roles. func StartTask(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.StartTaskInput) if err := unmarshalIfBody(body, input); err != nil { @@ -263,6 +299,8 @@ func startTask(ctx context.Context, svc handlers_ecs.ECSService, accountID strin return svc.StartTask(ctx, input, accountID) } +// StopTask implements the ECS StopTask action, stopping a running task. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func StopTask(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.StopTaskInput) if err := unmarshalIfBody(body, input); err != nil { @@ -271,6 +309,8 @@ func StopTask(ctx context.Context, nc *nats.Conn, accountID string, body []byte, return handlers_ecs.NewNATSECSService(nc).StopTask(ctx, input, accountID) } +// DescribeTasks implements the ECS DescribeTasks action, describing tasks. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func DescribeTasks(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeTasksInput) if err := unmarshalIfBody(body, input); err != nil { @@ -279,6 +319,8 @@ func DescribeTasks(ctx context.Context, nc *nats.Conn, accountID string, body [] return handlers_ecs.NewNATSECSService(nc).DescribeTasks(ctx, input, accountID) } +// ListTasks implements the ECS ListTasks action, listing task ARNs. The JSON body (empty means a +// zero input) is decoded and forwarded to the NATS ECS service for accountID. func ListTasks(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListTasksInput) if err := unmarshalIfBody(body, input); err != nil { @@ -312,6 +354,8 @@ func createService(ctx context.Context, svc handlers_ecs.ECSService, accountID s return svc.CreateService(ctx, input, accountID) } +// UpdateService implements the ECS UpdateService action. It refuses AZ rebalancing and enforces +// iam:PassRole on a new task definition's roles before calling NATS. func UpdateService(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.UpdateServiceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -333,6 +377,8 @@ func updateService(ctx context.Context, svc handlers_ecs.ECSService, accountID s return svc.UpdateService(ctx, input, accountID) } +// DeleteService implements the ECS DeleteService action, deleting a service. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func DeleteService(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DeleteServiceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -341,6 +387,8 @@ func DeleteService(ctx context.Context, nc *nats.Conn, accountID string, body [] return handlers_ecs.NewNATSECSService(nc).DeleteService(ctx, input, accountID) } +// DescribeServices implements the ECS DescribeServices action, describing services. The JSON body +// (empty means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func DescribeServices(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeServicesInput) if err := unmarshalIfBody(body, input); err != nil { @@ -349,6 +397,8 @@ func DescribeServices(ctx context.Context, nc *nats.Conn, accountID string, body return handlers_ecs.NewNATSECSService(nc).DescribeServices(ctx, input, accountID) } +// ListServices implements the ECS ListServices action, listing service ARNs. The JSON body (empty +// means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func ListServices(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListServicesInput) if err := unmarshalIfBody(body, input); err != nil { @@ -393,6 +443,8 @@ func ReportTaskGPU(ctx context.Context, nc *nats.Conn, accountID string, body [] // --- Tags --- +// TagResource implements the ECS TagResource action, adding tags to an ECS resource. The JSON +// body (empty means a zero input) is decoded and forwarded to the NATS ECS service for accountID. func TagResource(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.TagResourceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -401,6 +453,9 @@ func TagResource(ctx context.Context, nc *nats.Conn, accountID string, body []by return handlers_ecs.NewNATSECSService(nc).TagResource(ctx, input, accountID) } +// UntagResource implements the ECS UntagResource action, removing tags from an ECS resource. The +// JSON body (empty means a zero input) is decoded and forwarded to the NATS ECS service for +// accountID. func UntagResource(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.UntagResourceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -409,6 +464,9 @@ func UntagResource(ctx context.Context, nc *nats.Conn, accountID string, body [] return handlers_ecs.NewNATSECSService(nc).UntagResource(ctx, input, accountID) } +// ListTagsForResource implements the ECS ListTagsForResource action, listing an ECS resource's +// tags. The JSON body (empty means a zero input) is decoded and forwarded to the NATS ECS service +// for accountID. func ListTagsForResource(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.ListTagsForResourceInput) if err := unmarshalIfBody(body, input); err != nil { @@ -419,6 +477,9 @@ func ListTagsForResource(ctx context.Context, nc *nats.Conn, accountID string, b // --- Capacity providers --- +// PutClusterCapacityProviders implements the ECS PutClusterCapacityProviders action, setting a +// cluster's capacity providers and default strategy. The JSON body (empty means a zero input) is +// decoded and forwarded to the NATS ECS service for accountID. func PutClusterCapacityProviders(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.PutClusterCapacityProvidersInput) if err := unmarshalIfBody(body, input); err != nil { @@ -427,6 +488,9 @@ func PutClusterCapacityProviders(ctx context.Context, nc *nats.Conn, accountID s return handlers_ecs.NewNATSECSService(nc).PutClusterCapacityProviders(ctx, input, accountID) } +// CreateCapacityProvider implements the ECS CreateCapacityProvider action, creating a capacity +// provider. The JSON body (empty means a zero input) is decoded and forwarded to the NATS ECS +// service for accountID. func CreateCapacityProvider(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.CreateCapacityProviderInput) if err := unmarshalIfBody(body, input); err != nil { @@ -435,6 +499,9 @@ func CreateCapacityProvider(ctx context.Context, nc *nats.Conn, accountID string return handlers_ecs.NewNATSECSService(nc).CreateCapacityProvider(ctx, input, accountID) } +// DescribeCapacityProviders implements the ECS DescribeCapacityProviders action, describing +// capacity providers. The JSON body (empty means a zero input) is decoded and forwarded to the +// NATS ECS service for accountID. func DescribeCapacityProviders(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DescribeCapacityProvidersInput) if err := unmarshalIfBody(body, input); err != nil { @@ -443,6 +510,9 @@ func DescribeCapacityProviders(ctx context.Context, nc *nats.Conn, accountID str return handlers_ecs.NewNATSECSService(nc).DescribeCapacityProviders(ctx, input, accountID) } +// DeleteCapacityProvider implements the ECS DeleteCapacityProvider action, deleting a capacity +// provider. The JSON body (empty means a zero input) is decoded and forwarded to the NATS ECS +// service for accountID. func DeleteCapacityProvider(ctx context.Context, nc *nats.Conn, accountID string, body []byte, passRoleCheck PassRoleChecker) (any, error) { input := new(ecs.DeleteCapacityProviderInput) if err := unmarshalIfBody(body, input); err != nil { diff --git a/spinifex/gateway/eks.go b/spinifex/gateway/eks.go index e6e320865..66df8f4b4 100644 --- a/spinifex/gateway/eks.go +++ b/spinifex/gateway/eks.go @@ -34,26 +34,6 @@ var eksRoutes = []eksRoute{ Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { return gateway_eks.ListClusters(ctx, gw.NATSConn, acct) }}, - {Method: "POST", Pattern: "/clusters/{clusterName}/update-config", Action: "UpdateClusterConfig", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.UpdateClusterConfig(ctx, gw.NATSConn, acct, p[0], b) - }}, - {Method: "POST", Pattern: "/clusters/{clusterName}/updates", Action: "UpdateClusterVersion", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.UpdateClusterVersion(ctx, gw.NATSConn, acct, p[0], b) - }}, - // The update surface these two read is absent, so they refuse here rather - // than through a service method: a round-trip to reach a constant refusal - // is surface for its own sake. Left unregistered they would answer - // InvalidAction, which blames the caller's spelling for a routing gap. - {Method: "GET", Pattern: "/clusters/{clusterName}/updates", Action: "ListUpdates", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return nil, errors.New(awserrors.ErrorNotImplemented) - }}, - {Method: "GET", Pattern: "/clusters/{clusterName}/updates/{updateId}", Action: "DescribeUpdate", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return nil, errors.New(awserrors.ErrorNotImplemented) - }}, // Control-plane VM broker: relays bootstrap/state POSTs onto eks.bus.*/eks.state.* NATS subjects. // acct and callerARN are ignored; cluster account comes from the body. {Method: "POST", Pattern: "/clusters/{clusterName}/internal-publish", Action: "PublishInternal", @@ -98,10 +78,6 @@ var eksRoutes = []eksRoute{ Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { return gateway_eks.UpdateNodegroupConfig(ctx, gw.NATSConn, acct, p[0], p[1], b) }}, - {Method: "POST", Pattern: "/clusters/{clusterName}/node-groups/{nodegroupName}/update-version", Action: "UpdateNodegroupVersion", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.UpdateNodegroupVersion(ctx, gw.NATSConn, acct, p[0], p[1], b) - }}, {Method: "GET", Pattern: "/clusters/{clusterName}/node-groups/{nodegroupName}", Action: "DescribeNodegroup", Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { return gateway_eks.DescribeNodegroup(ctx, gw.NATSConn, acct, p[0], p[1]) @@ -175,24 +151,6 @@ var eksRoutes = []eksRoute{ return gateway_eks.DeleteAddon(ctx, gw.NATSConn, acct, p[0], p[1]) }}, - // OIDC identity-provider configs - {Method: "POST", Pattern: "/clusters/{clusterName}/identity-provider-configs/associate", Action: "AssociateIdentityProviderConfig", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.AssociateIdentityProviderConfig(ctx, gw.NATSConn, acct, p[0], b) - }}, - {Method: "POST", Pattern: "/clusters/{clusterName}/identity-provider-configs/describe", Action: "DescribeIdentityProviderConfig", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.DescribeIdentityProviderConfig(ctx, gw.NATSConn, acct, p[0], b) - }}, - {Method: "POST", Pattern: "/clusters/{clusterName}/identity-provider-configs/disassociate", Action: "DisassociateIdentityProviderConfig", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.DisassociateIdentityProviderConfig(ctx, gw.NATSConn, acct, p[0], b) - }}, - {Method: "GET", Pattern: "/clusters/{clusterName}/identity-provider-configs", Action: "ListIdentityProviderConfigs", - Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { - return gateway_eks.ListIdentityProviderConfigs(ctx, gw.NATSConn, acct, p[0]) - }}, - // Cluster CRUD — listed after more-specific /clusters/{name}/... routes. {Method: "GET", Pattern: "/clusters/{clusterName}", Action: "DescribeCluster", Handler: func(ctx context.Context, gw *GatewayConfig, acct, callerARN string, p []string, b []byte) (any, error) { @@ -370,7 +328,8 @@ func eksCallerPrincipalARN(r *http.Request) string { identity, _ := ctx.Value(ctxIdentity).(string) principalType, _ := ctx.Value(ctxPrincipalType).(string) assumedRoleARN, _ := ctx.Value(ctxAssumedRoleARN).(string) - arn, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN) + userARN, _ := ctx.Value(ctxUserARN).(string) + arn, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN, userARN) if err != nil { slog.DebugContext(r.Context(), "EKS_Request: could not resolve caller principal ARN", "err", err) return "" diff --git a/spinifex/gateway/eks/authz.go b/spinifex/gateway/eks/authz.go index 00103ed59..fc029a7b3 100644 --- a/spinifex/gateway/eks/authz.go +++ b/spinifex/gateway/eks/authz.go @@ -44,14 +44,10 @@ const ( // dispatch table in both directions. var eksScopes = map[string][]resourceSource{ // Cluster. - "CreateCluster": {sourceClusterFromBody}, - "DescribeCluster": {sourceCluster}, - "DeleteCluster": {sourceCluster}, - "UpdateClusterConfig": {sourceCluster}, - "UpdateClusterVersion": {sourceCluster}, - "ListUpdates": {sourceCluster}, - "DescribeUpdate": {sourceCluster}, - "ListClusters": {sourceAny}, + "CreateCluster": {sourceClusterFromBody}, + "DescribeCluster": {sourceCluster}, + "DeleteCluster": {sourceCluster}, + "ListClusters": {sourceAny}, // Internal control-plane routes. The cluster's owning account is a path // segment on these two, and the ARN names that account rather than the @@ -65,12 +61,11 @@ var eksScopes = map[string][]resourceSource{ // Nodegroups. Create evaluates the cluster and the nodegroup it is about // to create, matching AWS. - "CreateNodegroup": {sourceCluster, sourceNodegroupFromBody}, - "DescribeNodegroup": {sourceNodegroup}, - "DeleteNodegroup": {sourceNodegroup}, - "UpdateNodegroupConfig": {sourceNodegroup}, - "UpdateNodegroupVersion": {sourceNodegroup}, - "ListNodegroups": {sourceCluster}, + "CreateNodegroup": {sourceCluster, sourceNodegroupFromBody}, + "DescribeNodegroup": {sourceNodegroup}, + "DeleteNodegroup": {sourceNodegroup}, + "UpdateNodegroupConfig": {sourceNodegroup}, + "ListNodegroups": {sourceCluster}, // Access entries and policies. "CreateAccessEntry": {sourceCluster, sourceAccessEntryFromBody}, @@ -93,14 +88,6 @@ var eksScopes = map[string][]resourceSource{ // The add-on version catalogue is not an account resource. "DescribeAddonVersions": {sourceAny}, - // Identity-provider configs. All four handlers are stubs and no - // identity-provider-config object exists here, so the cluster is the only - // resource these name. - "AssociateIdentityProviderConfig": {sourceCluster}, - "DescribeIdentityProviderConfig": {sourceCluster}, - "DisassociateIdentityProviderConfig": {sourceCluster}, - "ListIdentityProviderConfigs": {sourceCluster}, - // Tags. "TagResource": {sourceTagARN}, "UntagResource": {sourceTagARN}, diff --git a/spinifex/gateway/eks/cluster.go b/spinifex/gateway/eks/cluster.go index c3dd287d8..ae0aa47d2 100644 --- a/spinifex/gateway/eks/cluster.go +++ b/spinifex/gateway/eks/cluster.go @@ -31,26 +31,6 @@ func ListClusters(ctx context.Context, natsConn *nats.Conn, accountID string) (* return handlers_eks.NewNATSEKSService(natsConn).ListClusters(ctx, &eks.ListClustersInput{}, accountID) } -// UpdateClusterConfig — POST /clusters/{name}/update-config. -func UpdateClusterConfig(ctx context.Context, natsConn *nats.Conn, accountID, name string, body []byte) (*eks.UpdateClusterConfigOutput, error) { - input := new(eks.UpdateClusterConfigInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.Name = aws.String(name) - return handlers_eks.NewNATSEKSService(natsConn).UpdateClusterConfig(ctx, input, accountID) -} - -// UpdateClusterVersion — POST /clusters/{name}/update-version. -func UpdateClusterVersion(ctx context.Context, natsConn *nats.Conn, accountID, name string, body []byte) (*eks.UpdateClusterVersionOutput, error) { - input := new(eks.UpdateClusterVersionInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.Name = aws.String(name) - return handlers_eks.NewNATSEKSService(natsConn).UpdateClusterVersion(ctx, input, accountID) -} - // DeleteCluster — DELETE /clusters/{name}. func DeleteCluster(ctx context.Context, natsConn *nats.Conn, accountID, name string) (*eks.DeleteClusterOutput, error) { input := &eks.DeleteClusterInput{Name: aws.String(name)} diff --git a/spinifex/gateway/eks/nodegroup.go b/spinifex/gateway/eks/nodegroup.go index 1d5dd17ad..451a14077 100644 --- a/spinifex/gateway/eks/nodegroup.go +++ b/spinifex/gateway/eks/nodegroup.go @@ -44,17 +44,6 @@ func UpdateNodegroupConfig(ctx context.Context, natsConn *nats.Conn, accountID, return handlers_eks.NewNATSEKSService(natsConn).UpdateNodegroupConfig(ctx, input, accountID) } -// UpdateNodegroupVersion — POST /clusters/{name}/node-groups/{ng}/update-version. -func UpdateNodegroupVersion(ctx context.Context, natsConn *nats.Conn, accountID, cluster, ng string, body []byte) (*eks.UpdateNodegroupVersionOutput, error) { - input := new(eks.UpdateNodegroupVersionInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.ClusterName = aws.String(cluster) - input.NodegroupName = aws.String(ng) - return handlers_eks.NewNATSEKSService(natsConn).UpdateNodegroupVersion(ctx, input, accountID) -} - // DeleteNodegroup — DELETE /clusters/{name}/node-groups/{ng}. func DeleteNodegroup(ctx context.Context, natsConn *nats.Conn, accountID, cluster, ng string) (*eks.DeleteNodegroupOutput, error) { input := &eks.DeleteNodegroupInput{ diff --git a/spinifex/gateway/eks/oidc.go b/spinifex/gateway/eks/oidc.go deleted file mode 100644 index c92951324..000000000 --- a/spinifex/gateway/eks/oidc.go +++ /dev/null @@ -1,45 +0,0 @@ -package gateway_eks - -import ( - "context" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/eks" - handlers_eks "github.com/mulgadc/spinifex/spinifex/handlers/eks" - "github.com/nats-io/nats.go" -) - -// AssociateIdentityProviderConfig — POST /clusters/{name}/identity-provider-configs/associate. -func AssociateIdentityProviderConfig(ctx context.Context, natsConn *nats.Conn, accountID, cluster string, body []byte) (*eks.AssociateIdentityProviderConfigOutput, error) { - input := new(eks.AssociateIdentityProviderConfigInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.ClusterName = aws.String(cluster) - return handlers_eks.NewNATSEKSService(natsConn).AssociateIdentityProviderConfig(ctx, input, accountID) -} - -// DescribeIdentityProviderConfig — POST /clusters/{name}/identity-provider-configs/describe. -func DescribeIdentityProviderConfig(ctx context.Context, natsConn *nats.Conn, accountID, cluster string, body []byte) (*eks.DescribeIdentityProviderConfigOutput, error) { - input := new(eks.DescribeIdentityProviderConfigInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.ClusterName = aws.String(cluster) - return handlers_eks.NewNATSEKSService(natsConn).DescribeIdentityProviderConfig(ctx, input, accountID) -} - -// ListIdentityProviderConfigs — GET /clusters/{name}/identity-provider-configs. -func ListIdentityProviderConfigs(ctx context.Context, natsConn *nats.Conn, accountID, cluster string) (*eks.ListIdentityProviderConfigsOutput, error) { - input := &eks.ListIdentityProviderConfigsInput{ClusterName: aws.String(cluster)} - return handlers_eks.NewNATSEKSService(natsConn).ListIdentityProviderConfigs(ctx, input, accountID) -} - -// DisassociateIdentityProviderConfig — POST /clusters/{name}/identity-provider-configs/disassociate. -func DisassociateIdentityProviderConfig(ctx context.Context, natsConn *nats.Conn, accountID, cluster string, body []byte) (*eks.DisassociateIdentityProviderConfigOutput, error) { - input := new(eks.DisassociateIdentityProviderConfigInput) - if err := unmarshalIfBody(body, input); err != nil { - return nil, err - } - input.ClusterName = aws.String(cluster) - return handlers_eks.NewNATSEKSService(natsConn).DisassociateIdentityProviderConfig(ctx, input, accountID) -} diff --git a/spinifex/gateway/eks/wrappers_test.go b/spinifex/gateway/eks/wrappers_test.go index 5af2a8643..b5526f325 100644 --- a/spinifex/gateway/eks/wrappers_test.go +++ b/spinifex/gateway/eks/wrappers_test.go @@ -47,25 +47,9 @@ func TestGatewayWrappers_Cluster(t *testing.T) { require.NoError(t, err) assert.NotNil(t, out4) - out5, err := UpdateClusterConfig(context.Background(), nc, acct, "alpha", []byte(`{}`)) + out5, err := DeleteCluster(context.Background(), nc, acct, "alpha") require.NoError(t, err) assert.NotNil(t, out5) - - out6, err := UpdateClusterConfig(context.Background(), nc, acct, "alpha", nil) - require.NoError(t, err) - assert.NotNil(t, out6) - - out7, err := UpdateClusterVersion(context.Background(), nc, acct, "alpha", []byte(`{"version":"1.30"}`)) - require.NoError(t, err) - assert.NotNil(t, out7) - - out8, err := UpdateClusterVersion(context.Background(), nc, acct, "alpha", nil) - require.NoError(t, err) - assert.NotNil(t, out8) - - out9, err := DeleteCluster(context.Background(), nc, acct, "alpha") - require.NoError(t, err) - assert.NotNil(t, out9) } func TestGatewayWrappers_Cluster_BadJSON(t *testing.T) { @@ -74,10 +58,6 @@ func TestGatewayWrappers_Cluster_BadJSON(t *testing.T) { _, err := CreateCluster(context.Background(), nc, acct, "", []byte(`{not-json`)) require.Error(t, err) - _, err = UpdateClusterConfig(context.Background(), nc, acct, "alpha", []byte(`{not-json`)) - require.Error(t, err) - _, err = UpdateClusterVersion(context.Background(), nc, acct, "alpha", []byte(`{not-json`)) - require.Error(t, err) } func TestGatewayWrappers_Nodegroup(t *testing.T) { @@ -108,17 +88,9 @@ func TestGatewayWrappers_Nodegroup(t *testing.T) { require.NoError(t, err) assert.NotNil(t, out6) - out7, err := UpdateNodegroupVersion(context.Background(), nc, acct, "alpha", "ng1", []byte(`{}`)) + out7, err := DeleteNodegroup(context.Background(), nc, acct, "alpha", "ng1") require.NoError(t, err) assert.NotNil(t, out7) - - out8, err := UpdateNodegroupVersion(context.Background(), nc, acct, "alpha", "ng1", nil) - require.NoError(t, err) - assert.NotNil(t, out8) - - out9, err := DeleteNodegroup(context.Background(), nc, acct, "alpha", "ng1") - require.NoError(t, err) - assert.NotNil(t, out9) } func TestGatewayWrappers_Nodegroup_BadJSON(t *testing.T) { @@ -129,8 +101,6 @@ func TestGatewayWrappers_Nodegroup_BadJSON(t *testing.T) { require.Error(t, err) _, err = UpdateNodegroupConfig(context.Background(), nc, acct, "alpha", "ng1", []byte(`{nope`)) require.Error(t, err) - _, err = UpdateNodegroupVersion(context.Background(), nc, acct, "alpha", "ng1", []byte(`{nope`)) - require.Error(t, err) } func TestGatewayWrappers_Access(t *testing.T) { @@ -245,51 +215,6 @@ func TestGatewayWrappers_Addons_BadJSON(t *testing.T) { require.Error(t, err) } -func TestGatewayWrappers_OIDC(t *testing.T) { - _, nc := testutil.StartTestNATS(t) - stubEKSResponder(t, nc) - - out1, err := AssociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{}`)) - require.NoError(t, err) - assert.NotNil(t, out1) - - out2, err := AssociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", nil) - require.NoError(t, err) - assert.NotNil(t, out2) - - out3, err := DescribeIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{}`)) - require.NoError(t, err) - assert.NotNil(t, out3) - - out4, err := DescribeIdentityProviderConfig(context.Background(), nc, acct, "alpha", nil) - require.NoError(t, err) - assert.NotNil(t, out4) - - out5, err := ListIdentityProviderConfigs(context.Background(), nc, acct, "alpha") - require.NoError(t, err) - assert.NotNil(t, out5) - - out6, err := DisassociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{}`)) - require.NoError(t, err) - assert.NotNil(t, out6) - - out7, err := DisassociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", nil) - require.NoError(t, err) - assert.NotNil(t, out7) -} - -func TestGatewayWrappers_OIDC_BadJSON(t *testing.T) { - _, nc := testutil.StartTestNATS(t) - stubEKSResponder(t, nc) - - _, err := AssociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{x`)) - require.Error(t, err) - _, err = DescribeIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{x`)) - require.Error(t, err) - _, err = DisassociateIdentityProviderConfig(context.Background(), nc, acct, "alpha", []byte(`{x`)) - require.Error(t, err) -} - func TestGatewayWrappers_Tags(t *testing.T) { _, nc := testutil.StartTestNATS(t) stubEKSResponder(t, nc) diff --git a/spinifex/gateway/eks_test.go b/spinifex/gateway/eks_test.go index 11e9cacd2..1c024a14e 100644 --- a/spinifex/gateway/eks_test.go +++ b/spinifex/gateway/eks_test.go @@ -23,16 +23,11 @@ func TestLookupEKSAction_ResolvesKnownRoutes(t *testing.T) { {"GET", "/clusters", "ListClusters", nil}, {"GET", "/clusters/alpha", "DescribeCluster", []string{"alpha"}}, {"DELETE", "/clusters/alpha", "DeleteCluster", []string{"alpha"}}, - {"POST", "/clusters/alpha/update-config", "UpdateClusterConfig", []string{"alpha"}}, - {"POST", "/clusters/alpha/updates", "UpdateClusterVersion", []string{"alpha"}}, - {"GET", "/clusters/alpha/updates", "ListUpdates", []string{"alpha"}}, - {"GET", "/clusters/alpha/updates/upd1", "DescribeUpdate", []string{"alpha", "upd1"}}, {"POST", "/clusters/alpha/node-groups", "CreateNodegroup", []string{"alpha"}}, {"GET", "/clusters/alpha/node-groups", "ListNodegroups", []string{"alpha"}}, {"GET", "/clusters/alpha/node-groups/ng1", "DescribeNodegroup", []string{"alpha", "ng1"}}, {"DELETE", "/clusters/alpha/node-groups/ng1", "DeleteNodegroup", []string{"alpha", "ng1"}}, {"POST", "/clusters/alpha/node-groups/ng1/update-config", "UpdateNodegroupConfig", []string{"alpha", "ng1"}}, - {"POST", "/clusters/alpha/node-groups/ng1/update-version", "UpdateNodegroupVersion", []string{"alpha", "ng1"}}, {"POST", "/clusters/alpha/access-entries", "CreateAccessEntry", []string{"alpha"}}, {"GET", "/clusters/alpha/access-entries", "ListAccessEntries", []string{"alpha"}}, {"GET", "/clusters/alpha/access-entries/arn-user", "DescribeAccessEntry", []string{"alpha", "arn-user"}}, @@ -48,10 +43,6 @@ func TestLookupEKSAction_ResolvesKnownRoutes(t *testing.T) { {"GET", "/clusters/alpha/addons/vpc-cni", "DescribeAddon", []string{"alpha", "vpc-cni"}}, {"DELETE", "/clusters/alpha/addons/vpc-cni", "DeleteAddon", []string{"alpha", "vpc-cni"}}, {"POST", "/clusters/alpha/addons/vpc-cni/update", "UpdateAddon", []string{"alpha", "vpc-cni"}}, - {"POST", "/clusters/alpha/identity-provider-configs/associate", "AssociateIdentityProviderConfig", []string{"alpha"}}, - {"POST", "/clusters/alpha/identity-provider-configs/describe", "DescribeIdentityProviderConfig", []string{"alpha"}}, - {"POST", "/clusters/alpha/identity-provider-configs/disassociate", "DisassociateIdentityProviderConfig", []string{"alpha"}}, - {"GET", "/clusters/alpha/identity-provider-configs", "ListIdentityProviderConfigs", []string{"alpha"}}, {"POST", "/tags/arn-cluster", "TagResource", []string{"arn-cluster"}}, {"DELETE", "/tags/arn-cluster", "UntagResource", []string{"arn-cluster"}}, {"GET", "/tags/arn-cluster", "ListTagsForResource", []string{"arn-cluster"}}, @@ -117,45 +108,36 @@ func TestLookupEKSAction_CoversAllActions(t *testing.T) { expected := map[string]bool{ "CreateCluster": false, // Internal control-plane broker routes, not AWS-SDK EKS actions. - "PublishInternal": false, - "WebhookTokenReview": false, - "ListInternalAddons": false, - "GetRecoveryDirective": false, - "DescribeCluster": false, - "ListClusters": false, - "UpdateClusterConfig": false, - "UpdateClusterVersion": false, - "ListUpdates": false, - "DescribeUpdate": false, - "DeleteCluster": false, - "CreateNodegroup": false, - "DescribeNodegroup": false, - "ListNodegroups": false, - "UpdateNodegroupConfig": false, - "UpdateNodegroupVersion": false, - "DeleteNodegroup": false, - "CreateAccessEntry": false, - "DescribeAccessEntry": false, - "ListAccessEntries": false, - "UpdateAccessEntry": false, - "DeleteAccessEntry": false, - "AssociateAccessPolicy": false, - "DisassociateAccessPolicy": false, - "ListAssociatedAccessPolicies": false, - "ListAccessPolicies": false, - "ListAddons": false, - "DescribeAddonVersions": false, - "CreateAddon": false, - "DeleteAddon": false, - "DescribeAddon": false, - "UpdateAddon": false, - "AssociateIdentityProviderConfig": false, - "DescribeIdentityProviderConfig": false, - "ListIdentityProviderConfigs": false, - "DisassociateIdentityProviderConfig": false, - "TagResource": false, - "UntagResource": false, - "ListTagsForResource": false, + "PublishInternal": false, + "WebhookTokenReview": false, + "ListInternalAddons": false, + "GetRecoveryDirective": false, + "DescribeCluster": false, + "ListClusters": false, + "DeleteCluster": false, + "CreateNodegroup": false, + "DescribeNodegroup": false, + "ListNodegroups": false, + "UpdateNodegroupConfig": false, + "DeleteNodegroup": false, + "CreateAccessEntry": false, + "DescribeAccessEntry": false, + "ListAccessEntries": false, + "UpdateAccessEntry": false, + "DeleteAccessEntry": false, + "AssociateAccessPolicy": false, + "DisassociateAccessPolicy": false, + "ListAssociatedAccessPolicies": false, + "ListAccessPolicies": false, + "ListAddons": false, + "DescribeAddonVersions": false, + "CreateAddon": false, + "DeleteAddon": false, + "DescribeAddon": false, + "UpdateAddon": false, + "TagResource": false, + "UntagResource": false, + "ListTagsForResource": false, } for _, route := range eksRoutes { if _, ok := expected[route.Action]; ok { @@ -228,27 +210,3 @@ type awsCodeError struct{ code string } func (e *awsCodeError) Error() string { return e.code } func errAWS(code string) error { return &awsCodeError{code: code} } - -// The update surface is absent, and the honest answer for an action that exists -// and is not served is NotImplemented. Unregistered, these two answered -// InvalidAction, which tells the caller they typed something that does not exist. -func TestLookupEKSAction_UpdateReadsRefuseAsNotImplemented(t *testing.T) { - for _, path := range []string{"/clusters/alpha/updates", "/clusters/alpha/updates/upd1"} { - t.Run(path, func(t *testing.T) { - _, params, handler, ok := eksRouter.Lookup(http.MethodGet, path) - require.True(t, ok) - out, err := handler(context.Background(), nil, "000000000001", "", params, nil) - assert.Nil(t, out) - require.Error(t, err) - assert.Equal(t, awserrors.ErrorNotImplemented, err.Error()) - }) - } -} - -// update-version is the nodegroup pattern. The cluster action has never been -// reachable at it on AWS, so keeping it registered would serve a path no caller -// sends and hide the one they do. -func TestLookupEKSAction_ClusterUpdateVersionIsNotAtTheNodegroupPath(t *testing.T) { - _, _, _, ok := eksRouter.Lookup(http.MethodPost, "/clusters/alpha/update-version") - assert.False(t, ok) -} diff --git a/spinifex/gateway/elbv2/CreateListener.go b/spinifex/gateway/elbv2/CreateListener.go index 62295aa9f..4f35d3f33 100644 --- a/spinifex/gateway/elbv2/CreateListener.go +++ b/spinifex/gateway/elbv2/CreateListener.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateListenerInput rejects a nil input with InvalidParameterValue and a missing +// LoadBalancerArn or empty DefaultActions with MissingParameter. func ValidateCreateListenerInput(input *elbv2.CreateListenerInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/CreateLoadBalancer.go b/spinifex/gateway/elbv2/CreateLoadBalancer.go index e3daf267f..b75266312 100644 --- a/spinifex/gateway/elbv2/CreateLoadBalancer.go +++ b/spinifex/gateway/elbv2/CreateLoadBalancer.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateLoadBalancerInput rejects a nil input with InvalidParameterValue and a missing +// Name with MissingParameter. func ValidateCreateLoadBalancerInput(input *elbv2.CreateLoadBalancerInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/CreateRule.go b/spinifex/gateway/elbv2/CreateRule.go index c67acb893..dfcf44e68 100644 --- a/spinifex/gateway/elbv2/CreateRule.go +++ b/spinifex/gateway/elbv2/CreateRule.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateRuleInput rejects a nil input with InvalidParameterValue and returns +// MissingParameter unless ListenerArn, Priority, Conditions and Actions are all present. func ValidateCreateRuleInput(input *elbv2.CreateRuleInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/CreateTargetGroup.go b/spinifex/gateway/elbv2/CreateTargetGroup.go index c91a46f8b..476ee4c57 100644 --- a/spinifex/gateway/elbv2/CreateTargetGroup.go +++ b/spinifex/gateway/elbv2/CreateTargetGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateCreateTargetGroupInput rejects a nil input with InvalidParameterValue and a missing +// Name with MissingParameter. func ValidateCreateTargetGroupInput(input *elbv2.CreateTargetGroupInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DeleteListener.go b/spinifex/gateway/elbv2/DeleteListener.go index ff0fef49b..c35188c88 100644 --- a/spinifex/gateway/elbv2/DeleteListener.go +++ b/spinifex/gateway/elbv2/DeleteListener.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteListenerInput rejects a nil input with InvalidParameterValue and a missing +// ListenerArn with MissingParameter. func ValidateDeleteListenerInput(input *elbv2.DeleteListenerInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DeleteLoadBalancer.go b/spinifex/gateway/elbv2/DeleteLoadBalancer.go index a068c15b1..594c7631d 100644 --- a/spinifex/gateway/elbv2/DeleteLoadBalancer.go +++ b/spinifex/gateway/elbv2/DeleteLoadBalancer.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteLoadBalancerInput rejects a nil input with InvalidParameterValue and a missing +// LoadBalancerArn with MissingParameter. func ValidateDeleteLoadBalancerInput(input *elbv2.DeleteLoadBalancerInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DeleteRule.go b/spinifex/gateway/elbv2/DeleteRule.go index 3d994f27e..cf93c52da 100644 --- a/spinifex/gateway/elbv2/DeleteRule.go +++ b/spinifex/gateway/elbv2/DeleteRule.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteRuleInput rejects a nil input with InvalidParameterValue and a missing RuleArn +// with MissingParameter. func ValidateDeleteRuleInput(input *elbv2.DeleteRuleInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DeleteTargetGroup.go b/spinifex/gateway/elbv2/DeleteTargetGroup.go index 8840d2870..066c419ba 100644 --- a/spinifex/gateway/elbv2/DeleteTargetGroup.go +++ b/spinifex/gateway/elbv2/DeleteTargetGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeleteTargetGroupInput rejects a nil input with InvalidParameterValue and a missing +// TargetGroupArn with MissingParameter. func ValidateDeleteTargetGroupInput(input *elbv2.DeleteTargetGroupInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DeregisterTargets.go b/spinifex/gateway/elbv2/DeregisterTargets.go index 9707b55ef..b6d34ef1d 100644 --- a/spinifex/gateway/elbv2/DeregisterTargets.go +++ b/spinifex/gateway/elbv2/DeregisterTargets.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDeregisterTargetsInput rejects a nil input with InvalidParameterValue and a missing +// TargetGroupArn or empty Targets with MissingParameter. func ValidateDeregisterTargetsInput(input *elbv2.DeregisterTargetsInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DescribeListenerAttributes.go b/spinifex/gateway/elbv2/DescribeListenerAttributes.go index a37498845..379c6c6c9 100644 --- a/spinifex/gateway/elbv2/DescribeListenerAttributes.go +++ b/spinifex/gateway/elbv2/DescribeListenerAttributes.go @@ -6,22 +6,29 @@ import ( "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" ) +// DescribeListenerAttributesInput is the ELBv2 DescribeListenerAttributes request, defined +// locally because aws-sdk-go v1's elbv2 package has no such shape. type DescribeListenerAttributesInput struct { _ struct{} `type:"structure"` ListenerArn *string `type:"string"` } +// ListenerAttribute is one Key/Value listener attribute in the ELBv2 Query wire format. type ListenerAttribute struct { _ struct{} `type:"structure"` Key *string `type:"string"` Value *string `type:"string"` } +// DescribeListenerAttributesOutput is the ELBv2 DescribeListenerAttributes response, encoded as +// an Attributes member list. type DescribeListenerAttributesOutput struct { _ struct{} `type:"structure"` Attributes []ListenerAttribute `locationName:"Attributes" locationNameList:"member" type:"list"` } +// ValidateDescribeListenerAttributesInput rejects a nil input with InvalidParameterValue and a +// missing ListenerArn with MissingParameter. func ValidateDescribeListenerAttributesInput(input *DescribeListenerAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DescribeLoadBalancers.go b/spinifex/gateway/elbv2/DescribeLoadBalancers.go index ee23dba49..12396b3c3 100644 --- a/spinifex/gateway/elbv2/DescribeLoadBalancers.go +++ b/spinifex/gateway/elbv2/DescribeLoadBalancers.go @@ -1,3 +1,6 @@ +// Package gateway_elbv2 implements the ELBv2 actions: it validates each +// request, resolves the resource ARNs it authorizes against, and forwards it to +// the ELBv2 service over NATS. package gateway_elbv2 import ( diff --git a/spinifex/gateway/elbv2/DescribeRules.go b/spinifex/gateway/elbv2/DescribeRules.go index 405cfbf75..19883a831 100644 --- a/spinifex/gateway/elbv2/DescribeRules.go +++ b/spinifex/gateway/elbv2/DescribeRules.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeRulesInput rejects a nil input with InvalidParameterValue and returns +// MissingParameter when neither ListenerArn nor RuleArns is given. func ValidateDescribeRulesInput(input *elbv2.DescribeRulesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/DescribeTargetHealth.go b/spinifex/gateway/elbv2/DescribeTargetHealth.go index a38ac0a57..adcbec069 100644 --- a/spinifex/gateway/elbv2/DescribeTargetHealth.go +++ b/spinifex/gateway/elbv2/DescribeTargetHealth.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateDescribeTargetHealthInput rejects a nil input with InvalidParameterValue and a missing +// TargetGroupArn with MissingParameter. func ValidateDescribeTargetHealthInput(input *elbv2.DescribeTargetHealthInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/GetLBConfig.go b/spinifex/gateway/elbv2/GetLBConfig.go index 19a6647f4..12559a825 100644 --- a/spinifex/gateway/elbv2/GetLBConfig.go +++ b/spinifex/gateway/elbv2/GetLBConfig.go @@ -9,6 +9,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateGetLBConfigInput rejects a nil input with InvalidParameterValue and a missing LBID with +// MissingParameter. func ValidateGetLBConfigInput(input *handlers_elbv2.GetLBConfigInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/LBAgentHeartbeat.go b/spinifex/gateway/elbv2/LBAgentHeartbeat.go index 4bd2bc795..d2562b7ea 100644 --- a/spinifex/gateway/elbv2/LBAgentHeartbeat.go +++ b/spinifex/gateway/elbv2/LBAgentHeartbeat.go @@ -9,6 +9,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateLBAgentHeartbeatInput rejects a nil input with InvalidParameterValue and a missing LBID +// with MissingParameter. func ValidateLBAgentHeartbeatInput(input *handlers_elbv2.LBAgentHeartbeatInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/ModifyListener.go b/spinifex/gateway/elbv2/ModifyListener.go index f60d9fee5..c84851abb 100644 --- a/spinifex/gateway/elbv2/ModifyListener.go +++ b/spinifex/gateway/elbv2/ModifyListener.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyListenerInput rejects a nil input with InvalidParameterValue and a missing +// ListenerArn with MissingParameter. func ValidateModifyListenerInput(input *elbv2.ModifyListenerInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/ModifyListenerAttributes.go b/spinifex/gateway/elbv2/ModifyListenerAttributes.go index 85daf3416..14d6aa969 100644 --- a/spinifex/gateway/elbv2/ModifyListenerAttributes.go +++ b/spinifex/gateway/elbv2/ModifyListenerAttributes.go @@ -6,17 +6,23 @@ import ( "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" ) +// ModifyListenerAttributesInput is the ELBv2 ModifyListenerAttributes request, defined locally +// because aws-sdk-go v1's elbv2 package has no such shape. type ModifyListenerAttributesInput struct { _ struct{} `type:"structure"` ListenerArn *string `type:"string"` Attributes []ListenerAttribute `locationName:"Attributes" locationNameList:"member" type:"list"` } +// ModifyListenerAttributesOutput is the ELBv2 ModifyListenerAttributes response, echoing the +// requested Attributes. type ModifyListenerAttributesOutput struct { _ struct{} `type:"structure"` Attributes []ListenerAttribute `locationName:"Attributes" locationNameList:"member" type:"list"` } +// ValidateModifyListenerAttributesInput rejects a nil input with InvalidParameterValue and a +// missing ListenerArn with MissingParameter. func ValidateModifyListenerAttributesInput(input *ModifyListenerAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/ModifyRule.go b/spinifex/gateway/elbv2/ModifyRule.go index e58b1a282..84995ba19 100644 --- a/spinifex/gateway/elbv2/ModifyRule.go +++ b/spinifex/gateway/elbv2/ModifyRule.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyRuleInput rejects a nil input with InvalidParameterValue and returns +// MissingParameter for a missing RuleArn or when neither Conditions nor Actions is given. func ValidateModifyRuleInput(input *elbv2.ModifyRuleInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/ModifyTargetGroup.go b/spinifex/gateway/elbv2/ModifyTargetGroup.go index d4400b379..55aaaaef2 100644 --- a/spinifex/gateway/elbv2/ModifyTargetGroup.go +++ b/spinifex/gateway/elbv2/ModifyTargetGroup.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateModifyTargetGroupInput rejects a nil input with InvalidParameterValue and a missing +// TargetGroupArn with MissingParameter. func ValidateModifyTargetGroupInput(input *elbv2.ModifyTargetGroupInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -20,6 +22,8 @@ func ValidateModifyTargetGroupInput(input *elbv2.ModifyTargetGroupInput) error { return nil } +// ModifyTargetGroup implements the ELBv2 ModifyTargetGroup action, updating health check settings +// via the NATS ELBv2 service scoped to accountID. func ModifyTargetGroup(ctx context.Context, input *elbv2.ModifyTargetGroupInput, natsConn *nats.Conn, accountID string) (elbv2.ModifyTargetGroupOutput, error) { var output elbv2.ModifyTargetGroupOutput diff --git a/spinifex/gateway/elbv2/RegisterTargets.go b/spinifex/gateway/elbv2/RegisterTargets.go index eeec43ab6..5aada0988 100644 --- a/spinifex/gateway/elbv2/RegisterTargets.go +++ b/spinifex/gateway/elbv2/RegisterTargets.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateRegisterTargetsInput rejects a nil input with InvalidParameterValue and a missing +// TargetGroupArn or empty Targets with MissingParameter. func ValidateRegisterTargetsInput(input *elbv2.RegisterTargetsInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/SetRulePriorities.go b/spinifex/gateway/elbv2/SetRulePriorities.go index 6c99fb670..320b92092 100644 --- a/spinifex/gateway/elbv2/SetRulePriorities.go +++ b/spinifex/gateway/elbv2/SetRulePriorities.go @@ -10,6 +10,8 @@ import ( "github.com/nats-io/nats.go" ) +// ValidateSetRulePrioritiesInput rejects a nil input with InvalidParameterValue and an empty +// RulePriorities list with MissingParameter. func ValidateSetRulePrioritiesInput(input *elbv2.SetRulePrioritiesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/gateway/elbv2/attributes.go b/spinifex/gateway/elbv2/attributes.go index 7643f7a71..4e4c9c5b6 100644 --- a/spinifex/gateway/elbv2/attributes.go +++ b/spinifex/gateway/elbv2/attributes.go @@ -32,6 +32,8 @@ func attributeOp[I, O any](input *I, validate func(*I) error, call func(*I) (*O, return *result, nil } +// ValidateModifyTargetGroupAttributesInput rejects a nil input with InvalidParameterValue and a +// missing TargetGroupArn or empty Attributes with MissingParameter. func ValidateModifyTargetGroupAttributesInput(input *elbv2.ModifyTargetGroupAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -45,6 +47,8 @@ func ValidateModifyTargetGroupAttributesInput(input *elbv2.ModifyTargetGroupAttr return nil } +// ValidateDescribeTargetGroupAttributesInput rejects a nil input with InvalidParameterValue and a +// missing TargetGroupArn with MissingParameter. func ValidateDescribeTargetGroupAttributesInput(input *elbv2.DescribeTargetGroupAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -52,6 +56,8 @@ func ValidateDescribeTargetGroupAttributesInput(input *elbv2.DescribeTargetGroup return validateAttrArn(input.TargetGroupArn) } +// ValidateModifyLoadBalancerAttributesInput rejects a nil input with InvalidParameterValue and a +// missing LoadBalancerArn or empty Attributes with MissingParameter. func ValidateModifyLoadBalancerAttributesInput(input *elbv2.ModifyLoadBalancerAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -65,6 +71,8 @@ func ValidateModifyLoadBalancerAttributesInput(input *elbv2.ModifyLoadBalancerAt return nil } +// ValidateDescribeLoadBalancerAttributesInput rejects a nil input with InvalidParameterValue and +// a missing LoadBalancerArn with MissingParameter. func ValidateDescribeLoadBalancerAttributesInput(input *elbv2.DescribeLoadBalancerAttributesInput) error { if input == nil { return errors.New(awserrors.ErrorInvalidParameterValue) @@ -72,6 +80,8 @@ func ValidateDescribeLoadBalancerAttributesInput(input *elbv2.DescribeLoadBalanc return validateAttrArn(input.LoadBalancerArn) } +// ModifyTargetGroupAttributes implements the ELBv2 ModifyTargetGroupAttributes action, validating +// the input and forwarding it to the NATS ELBv2 service. func ModifyTargetGroupAttributes(ctx context.Context, input *elbv2.ModifyTargetGroupAttributesInput, natsConn *nats.Conn, accountID string) (elbv2.ModifyTargetGroupAttributesOutput, error) { svc := handlers_elbv2.NewNATSELBv2Service(natsConn) return attributeOp(input, ValidateModifyTargetGroupAttributesInput, @@ -80,6 +90,8 @@ func ModifyTargetGroupAttributes(ctx context.Context, input *elbv2.ModifyTargetG }) } +// DescribeTargetGroupAttributes implements the ELBv2 DescribeTargetGroupAttributes action, +// validating the input and forwarding it to the NATS ELBv2 service. func DescribeTargetGroupAttributes(ctx context.Context, input *elbv2.DescribeTargetGroupAttributesInput, natsConn *nats.Conn, accountID string) (elbv2.DescribeTargetGroupAttributesOutput, error) { svc := handlers_elbv2.NewNATSELBv2Service(natsConn) return attributeOp(input, ValidateDescribeTargetGroupAttributesInput, @@ -88,6 +100,8 @@ func DescribeTargetGroupAttributes(ctx context.Context, input *elbv2.DescribeTar }) } +// ModifyLoadBalancerAttributes implements the ELBv2 ModifyLoadBalancerAttributes action, +// validating the input and forwarding it to the NATS ELBv2 service. func ModifyLoadBalancerAttributes(ctx context.Context, input *elbv2.ModifyLoadBalancerAttributesInput, natsConn *nats.Conn, accountID string) (elbv2.ModifyLoadBalancerAttributesOutput, error) { svc := handlers_elbv2.NewNATSELBv2Service(natsConn) return attributeOp(input, ValidateModifyLoadBalancerAttributesInput, @@ -96,6 +110,8 @@ func ModifyLoadBalancerAttributes(ctx context.Context, input *elbv2.ModifyLoadBa }) } +// DescribeLoadBalancerAttributes implements the ELBv2 DescribeLoadBalancerAttributes action, +// validating the input and forwarding it to the NATS ELBv2 service. func DescribeLoadBalancerAttributes(ctx context.Context, input *elbv2.DescribeLoadBalancerAttributesInput, natsConn *nats.Conn, accountID string) (elbv2.DescribeLoadBalancerAttributesOutput, error) { svc := handlers_elbv2.NewNATSELBv2Service(natsConn) return attributeOp(input, ValidateDescribeLoadBalancerAttributesInput, diff --git a/spinifex/gateway/export_test.go b/spinifex/gateway/export_test.go index 73472bdac..db343fc41 100644 --- a/spinifex/gateway/export_test.go +++ b/spinifex/gateway/export_test.go @@ -1,6 +1,10 @@ package gateway -import "fmt" +import ( + "fmt" + "testing" + "time" +) // AdvertisedEndpoint exposes the gateway's own dialable base URL to the // external test package. @@ -19,3 +23,12 @@ func DispatchEC2Action(gw *GatewayConfig, action string, query map[string]string } return h.dispatch(action, input, gw, accountID, nil) } + +// SetDiscoverActiveNodesTimeoutForTest shortens the discovery fan-out for one +// test. Tests that call it must not run in parallel. +func SetDiscoverActiveNodesTimeoutForTest(tb testing.TB, d time.Duration) { + tb.Helper() + prev := discoverActiveNodesTimeout + discoverActiveNodesTimeout = d + tb.Cleanup(func() { discoverActiveNodesTimeout = prev }) +} diff --git a/spinifex/gateway/gateway.go b/spinifex/gateway/gateway.go index b403984da..8f89dc369 100644 --- a/spinifex/gateway/gateway.go +++ b/spinifex/gateway/gateway.go @@ -67,6 +67,8 @@ const ( // ctxUserID carries aws:userid, resolved once by the SigV4 middleware so // every policy check in a request evaluates the same value. ctxUserID contextKey = "sigv4.userID" + // ctxUserARN carries an IAM user's stored ARN, path included, from the same read. + ctxUserARN contextKey = "sigv4.userARN" // ctxUnderlyingRoleARN carries the IAM role ARN backing an assumed-role session. // Policy enforcement resolves the role name from this, never from ctxIdentity // (attacker-influenced RoleSessionName). @@ -98,6 +100,9 @@ const ( principalTypeRoot = "root" ) +// GatewayConfig is the AWS API gateway's shared state: its NATS connection, region and cluster +// facts, auth and throttling collaborators, and lazily built caches. Its methods are the +// per-service request handlers. type GatewayConfig struct { Debug bool `json:"debug"` DisableLogging bool `json:"disable_logging"` @@ -277,9 +282,10 @@ func (gw *GatewayConfig) registeredActorFunc(r *http.Request) dispatch.ActorFunc identity, _ := ctx.Value(ctxIdentity).(string) principalType, _ := ctx.Value(ctxPrincipalType).(string) assumedRoleARN, _ := ctx.Value(ctxAssumedRoleARN).(string) + userARN, _ := ctx.Value(ctxUserARN).(string) accessKey, _ := ctx.Value(ctxAccessKey).(string) - callerARN, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN) + callerARN, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN, userARN) if err != nil { return dispatch.Actor{}, err } @@ -688,6 +694,7 @@ func (gw *GatewayConfig) checkPolicyResourcesWithKeys(r *http.Request, service, assumedRoleID: mustCtxString(r, ctxAssumedRoleID), underlyingRoleARN: mustCtxString(r, ctxUnderlyingRoleARN), userID: mustCtxString(r, ctxUserID), + userARN: mustCtxString(r, ctxUserARN), } keys := requestConditionKeys(r, principal) maps.Copy(keys, actionKeys) @@ -753,19 +760,19 @@ func principalTypeCondition(principalType string) (string, bool) { } } -// principalUserID resolves aws:userid: an IAM user's unique ID, the role ID and +// principalUser resolves aws:userid: an IAM user's unique ID, the role ID and // session name STS minted for a role session, or the account ID for root. Both // halves of a session's ID come from the resolved role, so unlike aws:username -// it is not caller-chosen. +// it is not caller-chosen. An IAM user's stored ARN comes from the same read. // // A principal with no ID on record returns empty and the door omits the key. A // dependency fault returns InternalError instead: authorizing against a context // missing the key silently narrows an Allow and widens a Deny. -func (gw *GatewayConfig) principalUserID(principal principalContext) (string, error) { +func (gw *GatewayConfig) principalUser(principal principalContext) (userID, userARN string, err error) { if principal.identity == "" || principal.accountID == "" { - return "", nil + return "", "", nil } - userID, err := gateway_sts.ResolveCallerUserID(principal.accountID, principal.principalType, + userID, userARN, err = gateway_sts.ResolveCallerUser(principal.accountID, principal.principalType, principal.identity, principal.assumedRoleID, gw.IAMService) switch { case err == nil: @@ -774,15 +781,15 @@ func (gw *GatewayConfig) principalUserID(principal principalContext) (string, er "accountID", principal.accountID, "identity", principal.identity, "principalType", principal.principalType) } - return userID, nil + return userID, userARN, nil case strings.Contains(err.Error(), awserrors.ErrorIAMNoSuchEntity): slog.Warn("aws:userid unavailable: no such IAM user", "accountID", principal.accountID, "user", principal.identity) - return "", nil + return "", "", nil default: slog.Error("aws:userid: IAM dependency fault, refusing to authorize on a degraded context", "accountID", principal.accountID, "identity", principal.identity, "err", err) - return "", errors.New(awserrors.ErrorInternalError) + return "", "", errors.New(awserrors.ErrorInternalError) } } @@ -793,6 +800,10 @@ func mustCtxString(r *http.Request, key contextKey) string { return v } +// policyResolveRetryBase scales the backoff between policy-resolve attempts +// after a transient NATS error. A var only so tests can shorten it. +var policyResolveRetryBase = 200 * time.Millisecond + // evaluatePrincipalPolicyResources resolves policies once and evaluates every // resource in the request against that same snapshot. func (gw *GatewayConfig) evaluatePrincipalPolicyResources( @@ -852,7 +863,7 @@ func (gw *GatewayConfig) evaluatePrincipalPolicyResources( if attempt < 2 { slog.Debug("evaluatePrincipalPolicy: transient NATS error, retrying", "identity", logIdentity, "attempt", attempt+1, "err", err) - time.Sleep(time.Duration(attempt+1) * 200 * time.Millisecond) + time.Sleep(time.Duration(attempt+1) * policyResolveRetryBase) } } if err != nil { @@ -888,7 +899,7 @@ func (d *identityPolicyDenialError) Error() string { func (d *identityPolicyDenialError) detailedError() error { callerARN, err := buildCallerARN(d.principal.accountID, d.principal.identity, - d.principal.principalType, d.principal.assumedRoleARN) + d.principal.principalType, d.principal.assumedRoleARN, d.principal.userARN) if err != nil { callerARN = d.logIdentity } @@ -1016,6 +1027,10 @@ func xmlErrorBody(svc, code, message, requestID, resource string) []byte { // the discovery fan-out's whole timeout in front of every API call it fronts. const activeNodesTTL = 5 * time.Second +// discoverActiveNodesTimeout is how long the discovery fan-out collects replies. +// A var only so tests can shorten it. +var discoverActiveNodesTimeout = 500 * time.Millisecond + // DiscoverActiveNodes discovers the number of active spinifex daemon nodes in the // cluster by publishing a discovery request and counting unique responses. It // carries the request context so the discovery fan-out joins the caller's trace. @@ -1036,7 +1051,7 @@ func (gw *GatewayConfig) DiscoverActiveNodes(ctx context.Context) int { } frames, _, err := natsmsg.Gather(ctx, gw.NATSConn, clusterv1.NodesDiscoverSubject, []byte("{}"), - natsmsg.GatherOpts{Timeout: 500 * time.Millisecond}) + natsmsg.GatherOpts{Timeout: discoverActiveNodesTimeout}) if err != nil { slog.ErrorContext(ctx, "DiscoverActiveNodes: fan-out failed, using ExpectedNodes fallback", "err", err, "fallback", gw.ExpectedNodes) return gw.ExpectedNodes diff --git a/spinifex/gateway/gateway_test.go b/spinifex/gateway/gateway_test.go index cf3943364..c601d2b33 100644 --- a/spinifex/gateway/gateway_test.go +++ b/spinifex/gateway/gateway_test.go @@ -16,6 +16,7 @@ import ( "slices" "strings" "testing" + "time" "github.com/aws/aws-sdk-go/aws" awsec2 "github.com/aws/aws-sdk-go/service/ec2" @@ -354,6 +355,7 @@ func TestDiscoverActiveNodes_NilNATS(t *testing.T) { } func TestDiscoverActiveNodes_NoResponders(t *testing.T) { + SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) nc := startTestNATS(t) gw := &GatewayConfig{ @@ -366,6 +368,7 @@ func TestDiscoverActiveNodes_NoResponders(t *testing.T) { } func TestDiscoverActiveNodes_WithResponders(t *testing.T) { + SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) nc := startTestNATS(t) for _, nodeName := range []string{"node-1", "node-2"} { @@ -389,6 +392,7 @@ func TestDiscoverActiveNodes_WithResponders(t *testing.T) { } func TestDiscoverActiveNodes_InvalidJSON(t *testing.T) { + SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) nc := startTestNATS(t) _, err := nc.Subscribe(clusterv1.NodesDiscoverSubject, func(msg *nats.Msg) { @@ -407,6 +411,7 @@ func TestDiscoverActiveNodes_InvalidJSON(t *testing.T) { } func TestDiscoverActiveNodes_DuplicateNodes(t *testing.T) { + SetDiscoverActiveNodesTimeoutForTest(t, 50*time.Millisecond) nc := startTestNATS(t) for range 2 { @@ -1263,7 +1268,17 @@ func TestCheckPolicy_MissingAccountID(t *testing.T) { assert.Equal(t, awserrors.ErrorInternalError, err.Error()) } +// shortenPolicyResolveRetry keeps the transient-NATS retries without paying +// the production backoff. Tests that call it must not run in parallel. +func shortenPolicyResolveRetry(t *testing.T) { + t.Helper() + prev := policyResolveRetryBase + policyResolveRetryBase = time.Millisecond + t.Cleanup(func() { policyResolveRetryBase = prev }) +} + func TestCheckPolicy_NATSTransientRetriesAllAttempts(t *testing.T) { + shortenPolicyResolveRetry(t) calls := 0 mock := &policyMockIAMService{ getUserPoliciesFn: func(_, _ string) ([]handlers_iam.PolicyDocument, error) { @@ -1285,6 +1300,7 @@ func TestCheckPolicy_NATSTransientRetriesAllAttempts(t *testing.T) { } func TestCheckPolicy_NATSTransientRetriesThenSucceeds(t *testing.T) { + shortenPolicyResolveRetry(t) calls := 0 mock := &policyMockIAMService{ getUserPoliciesFn: func(_, _ string) ([]handlers_iam.PolicyDocument, error) { diff --git a/spinifex/gateway/iam.go b/spinifex/gateway/iam.go index 60a6988bf..99ffa5a14 100644 --- a/spinifex/gateway/iam.go +++ b/spinifex/gateway/iam.go @@ -152,6 +152,9 @@ var iamActions = map[string]iamAction{ "UpdateRole": iamHandler(func(accountID string, input *iam.UpdateRoleInput, gw *GatewayConfig) (any, error) { return gateway_iam.UpdateRole(accountID, input, gw.IAMService) }), + "UpdateRoleDescription": iamHandler(func(accountID string, input *iam.UpdateRoleDescriptionInput, gw *GatewayConfig) (any, error) { + return gateway_iam.UpdateRoleDescription(accountID, input, gw.IAMService) + }), "UpdateAssumeRolePolicy": iamHandler(func(accountID string, input *iam.UpdateAssumeRolePolicyInput, gw *GatewayConfig) (any, error) { return gateway_iam.UpdateAssumeRolePolicy(accountID, input, gw.IAMService) }), @@ -323,6 +326,9 @@ var iamActions = map[string]iamAction{ "GetAccountSummary": iamHandler(func(accountID string, input *iam.GetAccountSummaryInput, gw *GatewayConfig) (any, error) { return gateway_iam.GetAccountSummary(accountID, input, gw.IAMService) }), + "ListAccountAliases": iamHandler(func(accountID string, input *iam.ListAccountAliasesInput, gw *GatewayConfig) (any, error) { + return gateway_iam.ListAccountAliases(accountID, input, gw.IAMService) + }), } func (gw *GatewayConfig) IAM_Request(w http.ResponseWriter, r *http.Request) error { diff --git a/spinifex/gateway/iam/account.go b/spinifex/gateway/iam/account.go index 1610abf8b..8036991ce 100644 --- a/spinifex/gateway/iam/account.go +++ b/spinifex/gateway/iam/account.go @@ -1,6 +1,7 @@ package gateway_iam import ( + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) @@ -10,3 +11,19 @@ import ( func GetAccountSummary(accountID string, input *iam.GetAccountSummaryInput, svc handlers_iam.IAMService) (*iam.GetAccountSummaryOutput, error) { return svc.GetAccountSummary(accountID, input) } + +// ListAccountAliases implements the IAM ListAccountAliases action. Aliases are paged here by +// Marker and MaxItems; a bad Marker or MaxItems is a ValidationError. +func ListAccountAliases(accountID string, input *iam.ListAccountAliasesInput, svc handlers_iam.IAMService) (*iam.ListAccountAliasesOutput, error) { + p, err := newPager(input.Marker, input.MaxItems) + if err != nil { + return nil, err + } + out, err := svc.ListAccountAliases(accountID, input) + if err != nil { + return nil, err + } + out.AccountAliases, out.Marker = paginate(p, out.AccountAliases, aws.StringValue) + out.IsTruncated = aws.Bool(out.Marker != nil) + return out, nil +} diff --git a/spinifex/gateway/iam/authz.go b/spinifex/gateway/iam/authz.go index 7c939c28e..055a5a114 100644 --- a/spinifex/gateway/iam/authz.go +++ b/spinifex/gateway/iam/authz.go @@ -69,6 +69,7 @@ var iamScopes = map[string]resourceScope{ "GetRole": existingScope(arn.IAMRole, "RoleName"), "DeleteRole": existingScope(arn.IAMRole, "RoleName"), "UpdateRole": existingScope(arn.IAMRole, "RoleName"), + "UpdateRoleDescription": existingScope(arn.IAMRole, "RoleName"), "UpdateAssumeRolePolicy": existingScope(arn.IAMRole, "RoleName"), "AttachRolePolicy": existingScope(arn.IAMRole, "RoleName"), "DetachRolePolicy": existingScope(arn.IAMRole, "RoleName"), @@ -136,6 +137,7 @@ var iamScopes = map[string]resourceScope{ "ListOpenIDConnectProviders": {source: sourceAccount}, "ListGroups": {source: sourceAccount}, "GetAccountSummary": {source: sourceAccount}, + "ListAccountAliases": {source: sourceAccount}, } // HasScope reports whether action has an explicit IAM scope-table entry. diff --git a/spinifex/gateway/iam/group.go b/spinifex/gateway/iam/group.go index 352f88989..97cfa5037 100644 --- a/spinifex/gateway/iam/group.go +++ b/spinifex/gateway/iam/group.go @@ -9,6 +9,8 @@ import ( handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) +// CreateGroup implements the IAM CreateGroup action, creating an IAM group. It returns +// MissingParameter when GroupName is absent, then calls the IAM service for accountID. func CreateGroup(accountID string, input *iam.CreateGroupInput, svc handlers_iam.IAMService) (*iam.CreateGroupOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -16,6 +18,8 @@ func CreateGroup(accountID string, input *iam.CreateGroupInput, svc handlers_iam return svc.CreateGroup(accountID, input) } +// GetGroup implements the IAM GetGroup action, returning the group and its members. It requires +// GroupName; the Users list is paged here by Marker and MaxItems. func GetGroup(accountID string, input *iam.GetGroupInput, svc handlers_iam.IAMService) (*iam.GetGroupOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -33,6 +37,8 @@ func GetGroup(accountID string, input *iam.GetGroupInput, svc handlers_iam.IAMSe return out, nil } +// ListGroups implements the IAM ListGroups action, listing the account's groups. It validates +// PathPrefix; results are paged here by Marker and MaxItems. func ListGroups(accountID string, input *iam.ListGroupsInput, svc handlers_iam.IAMService) (*iam.ListGroupsOutput, error) { if err := validatePathPrefix(input.PathPrefix, identityPathPrefix); err != nil { return nil, err @@ -50,6 +56,8 @@ func ListGroups(accountID string, input *iam.ListGroupsInput, svc handlers_iam.I return out, nil } +// DeleteGroup implements the IAM DeleteGroup action, deleting an IAM group. It returns +// MissingParameter when GroupName is absent, then calls the IAM service for accountID. func DeleteGroup(accountID string, input *iam.DeleteGroupInput, svc handlers_iam.IAMService) (*iam.DeleteGroupOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -57,6 +65,9 @@ func DeleteGroup(accountID string, input *iam.DeleteGroupInput, svc handlers_iam return svc.DeleteGroup(accountID, input) } +// AddUserToGroup implements the IAM AddUserToGroup action, adding a user to a group. It returns +// MissingParameter when GroupName or UserName is absent, then calls the IAM service for +// accountID. func AddUserToGroup(accountID string, input *iam.AddUserToGroupInput, svc handlers_iam.IAMService) (*iam.AddUserToGroupOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -67,6 +78,9 @@ func AddUserToGroup(accountID string, input *iam.AddUserToGroupInput, svc handle return svc.AddUserToGroup(accountID, input) } +// RemoveUserFromGroup implements the IAM RemoveUserFromGroup action, removing a user from a +// group. It returns MissingParameter when GroupName or UserName is absent, then calls the IAM +// service for accountID. func RemoveUserFromGroup(accountID string, input *iam.RemoveUserFromGroupInput, svc handlers_iam.IAMService) (*iam.RemoveUserFromGroupOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -77,6 +91,8 @@ func RemoveUserFromGroup(accountID string, input *iam.RemoveUserFromGroupInput, return svc.RemoveUserFromGroup(accountID, input) } +// ListGroupsForUser implements the IAM ListGroupsForUser action, listing the groups a user +// belongs to. It requires UserName; results are paged here by Marker and MaxItems. func ListGroupsForUser(accountID string, input *iam.ListGroupsForUserInput, svc handlers_iam.IAMService) (*iam.ListGroupsForUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -94,6 +110,9 @@ func ListGroupsForUser(accountID string, input *iam.ListGroupsForUserInput, svc return out, nil } +// AttachGroupPolicy implements the IAM AttachGroupPolicy action, attaching a managed policy to a +// group. It returns MissingParameter when GroupName or PolicyArn is absent, then calls the IAM +// service for accountID. func AttachGroupPolicy(accountID string, input *iam.AttachGroupPolicyInput, svc handlers_iam.IAMService) (*iam.AttachGroupPolicyOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -104,6 +123,9 @@ func AttachGroupPolicy(accountID string, input *iam.AttachGroupPolicyInput, svc return svc.AttachGroupPolicy(accountID, input) } +// DetachGroupPolicy implements the IAM DetachGroupPolicy action, detaching a managed policy from +// a group. It returns MissingParameter when GroupName or PolicyArn is absent, then calls the IAM +// service for accountID. func DetachGroupPolicy(accountID string, input *iam.DetachGroupPolicyInput, svc handlers_iam.IAMService) (*iam.DetachGroupPolicyOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -114,6 +136,9 @@ func DetachGroupPolicy(accountID string, input *iam.DetachGroupPolicyInput, svc return svc.DetachGroupPolicy(accountID, input) } +// ListAttachedGroupPolicies implements the IAM ListAttachedGroupPolicies action, listing a +// group's managed policies. It requires GroupName and validates PathPrefix; results are paged +// here by Marker and MaxItems. func ListAttachedGroupPolicies(accountID string, input *iam.ListAttachedGroupPoliciesInput, svc handlers_iam.IAMService) (*iam.ListAttachedGroupPoliciesOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -134,6 +159,9 @@ func ListAttachedGroupPolicies(accountID string, input *iam.ListAttachedGroupPol return out, nil } +// PutGroupPolicy implements the IAM PutGroupPolicy action, adding or replacing a group inline +// policy. It returns MissingParameter when GroupName, PolicyName or PolicyDocument is absent, +// then calls the IAM service for accountID. func PutGroupPolicy(accountID string, input *iam.PutGroupPolicyInput, svc handlers_iam.IAMService) (*iam.PutGroupPolicyOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -147,6 +175,9 @@ func PutGroupPolicy(accountID string, input *iam.PutGroupPolicyInput, svc handle return svc.PutGroupPolicy(accountID, input) } +// GetGroupPolicy implements the IAM GetGroupPolicy action, reading a group inline policy. It +// requires GroupName or PolicyName and returns the document percent-encoded as the IAM Query API +// does. func GetGroupPolicy(accountID string, input *iam.GetGroupPolicyInput, svc handlers_iam.IAMService) (*iam.GetGroupPolicyOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -162,6 +193,9 @@ func GetGroupPolicy(accountID string, input *iam.GetGroupPolicyInput, svc handle return out, nil } +// DeleteGroupPolicy implements the IAM DeleteGroupPolicy action, deleting a group inline policy. +// It returns MissingParameter when GroupName or PolicyName is absent, then calls the IAM service +// for accountID. func DeleteGroupPolicy(accountID string, input *iam.DeleteGroupPolicyInput, svc handlers_iam.IAMService) (*iam.DeleteGroupPolicyOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -172,6 +206,8 @@ func DeleteGroupPolicy(accountID string, input *iam.DeleteGroupPolicyInput, svc return svc.DeleteGroupPolicy(accountID, input) } +// ListGroupPolicies implements the IAM ListGroupPolicies action, listing a group's inline policy +// names. It requires GroupName; results are paged here by Marker and MaxItems. func ListGroupPolicies(accountID string, input *iam.ListGroupPoliciesInput, svc handlers_iam.IAMService) (*iam.ListGroupPoliciesOutput, error) { if input.GroupName == nil || *input.GroupName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/handler_test.go b/spinifex/gateway/iam/handler_test.go index 1b51c147b..8d1dec542 100644 --- a/spinifex/gateway/iam/handler_test.go +++ b/spinifex/gateway/iam/handler_test.go @@ -122,6 +122,9 @@ func (s *stubIAMService) DeleteRole(_ string, _ *iam.DeleteRoleInput) (*iam.Dele func (s *stubIAMService) UpdateRole(_ string, _ *iam.UpdateRoleInput) (*iam.UpdateRoleOutput, error) { return &iam.UpdateRoleOutput{}, nil } +func (s *stubIAMService) UpdateRoleDescription(_ string, in *iam.UpdateRoleDescriptionInput) (*iam.UpdateRoleDescriptionOutput, error) { + return &iam.UpdateRoleDescriptionOutput{Role: &iam.Role{RoleName: in.RoleName, Description: in.Description}}, nil +} func (s *stubIAMService) UpdateAssumeRolePolicy(_ string, _ *iam.UpdateAssumeRolePolicyInput) (*iam.UpdateAssumeRolePolicyOutput, error) { return &iam.UpdateAssumeRolePolicyOutput{}, nil } diff --git a/spinifex/gateway/iam/instance_profile.go b/spinifex/gateway/iam/instance_profile.go index e07ea57b4..91496ce5f 100644 --- a/spinifex/gateway/iam/instance_profile.go +++ b/spinifex/gateway/iam/instance_profile.go @@ -14,6 +14,9 @@ import ( // given profile ARN. DeleteInstanceProfile uses it to refuse delete-while-in-use. type LiveAssociationCounter func(profileARN string) (int, error) +// CreateInstanceProfile implements the IAM CreateInstanceProfile action, creating an instance +// profile. It returns MissingParameter when InstanceProfileName is absent, then calls the IAM +// service for accountID. func CreateInstanceProfile(accountID string, input *iam.CreateInstanceProfileInput, svc handlers_iam.IAMService) (*iam.CreateInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -21,6 +24,8 @@ func CreateInstanceProfile(accountID string, input *iam.CreateInstanceProfileInp return svc.CreateInstanceProfile(accountID, input) } +// GetInstanceProfile implements the IAM GetInstanceProfile action. It requires +// InstanceProfileName and percent-encodes each role's trust policy as the IAM Query API does. func GetInstanceProfile(accountID string, input *iam.GetInstanceProfileInput, svc handlers_iam.IAMService) (*iam.GetInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -33,6 +38,8 @@ func GetInstanceProfile(accountID string, input *iam.GetInstanceProfileInput, sv return out, nil } +// ListInstanceProfiles implements the IAM ListInstanceProfiles action. It validates PathPrefix, +// pages results here by Marker and MaxItems, and percent-encodes role trust policies. func ListInstanceProfiles(accountID string, input *iam.ListInstanceProfilesInput, svc handlers_iam.IAMService) (*iam.ListInstanceProfilesOutput, error) { if err := validatePathPrefix(input.PathPrefix, identityPathPrefix); err != nil { return nil, err @@ -87,6 +94,8 @@ func DeleteInstanceProfile(accountID string, input *iam.DeleteInstanceProfileInp return svc.DeleteInstanceProfile(accountID, input) } +// ListInstanceProfilesForRole implements the IAM action of the same name. It requires RoleName, +// pages results here by Marker and MaxItems, and percent-encodes role trust policies. func ListInstanceProfilesForRole(accountID string, input *iam.ListInstanceProfilesForRoleInput, svc handlers_iam.IAMService) (*iam.ListInstanceProfilesForRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -105,6 +114,9 @@ func ListInstanceProfilesForRole(accountID string, input *iam.ListInstanceProfil return out, nil } +// AddRoleToInstanceProfile implements the IAM AddRoleToInstanceProfile action, adding a role to +// an instance profile. It returns MissingParameter when InstanceProfileName or RoleName is +// absent, then calls the IAM service for accountID. func AddRoleToInstanceProfile(accountID string, input *iam.AddRoleToInstanceProfileInput, svc handlers_iam.IAMService) (*iam.AddRoleToInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -115,6 +127,9 @@ func AddRoleToInstanceProfile(accountID string, input *iam.AddRoleToInstanceProf return svc.AddRoleToInstanceProfile(accountID, input) } +// RemoveRoleFromInstanceProfile implements the IAM RemoveRoleFromInstanceProfile action, removing +// a role from an instance profile. It returns MissingParameter when InstanceProfileName or +// RoleName is absent, then calls the IAM service for accountID. func RemoveRoleFromInstanceProfile(accountID string, input *iam.RemoveRoleFromInstanceProfileInput, svc handlers_iam.IAMService) (*iam.RemoveRoleFromInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -125,6 +140,8 @@ func RemoveRoleFromInstanceProfile(accountID string, input *iam.RemoveRoleFromIn return svc.RemoveRoleFromInstanceProfile(accountID, input) } +// TagInstanceProfile implements the IAM TagInstanceProfile action. It returns MissingParameter +// when InstanceProfileName is absent or Tags is empty. func TagInstanceProfile(accountID string, input *iam.TagInstanceProfileInput, svc handlers_iam.IAMService) (*iam.TagInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -135,6 +152,8 @@ func TagInstanceProfile(accountID string, input *iam.TagInstanceProfileInput, sv return svc.TagInstanceProfile(accountID, input) } +// UntagInstanceProfile implements the IAM UntagInstanceProfile action. It returns +// MissingParameter when InstanceProfileName is absent or TagKeys is empty. func UntagInstanceProfile(accountID string, input *iam.UntagInstanceProfileInput, svc handlers_iam.IAMService) (*iam.UntagInstanceProfileOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -145,6 +164,8 @@ func UntagInstanceProfile(accountID string, input *iam.UntagInstanceProfileInput return svc.UntagInstanceProfile(accountID, input) } +// ListInstanceProfileTags implements the IAM ListInstanceProfileTags action, listing an instance +// profile's tags. It requires InstanceProfileName; results are paged here by Marker and MaxItems. func ListInstanceProfileTags(accountID string, input *iam.ListInstanceProfileTagsInput, svc handlers_iam.IAMService) (*iam.ListInstanceProfileTagsOutput, error) { if input.InstanceProfileName == nil || *input.InstanceProfileName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/key.go b/spinifex/gateway/iam/key.go index 0561236a6..cc61d5ac4 100644 --- a/spinifex/gateway/iam/key.go +++ b/spinifex/gateway/iam/key.go @@ -9,6 +9,8 @@ import ( handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) +// CreateAccessKey implements the IAM CreateAccessKey action, issuing a new key pair for UserName +// (MissingParameter when absent). The output is the only place the secret is returned. func CreateAccessKey(accountID string, input *iam.CreateAccessKeyInput, svc handlers_iam.IAMService) (*iam.CreateAccessKeyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -16,6 +18,8 @@ func CreateAccessKey(accountID string, input *iam.CreateAccessKeyInput, svc hand return svc.CreateAccessKey(accountID, input) } +// ListAccessKeys implements the IAM ListAccessKeys action, listing a user's access key metadata. +// It requires UserName; results are paged here by Marker and MaxItems. func ListAccessKeys(accountID string, input *iam.ListAccessKeysInput, svc handlers_iam.IAMService) (*iam.ListAccessKeysOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -33,6 +37,9 @@ func ListAccessKeys(accountID string, input *iam.ListAccessKeysInput, svc handle return out, nil } +// DeleteAccessKey implements the IAM DeleteAccessKey action, deleting a user's access key. It +// returns MissingParameter when UserName or AccessKeyId is absent, then calls the IAM service for +// accountID. func DeleteAccessKey(accountID string, input *iam.DeleteAccessKeyInput, svc handlers_iam.IAMService) (*iam.DeleteAccessKeyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -43,6 +50,9 @@ func DeleteAccessKey(accountID string, input *iam.DeleteAccessKeyInput, svc hand return svc.DeleteAccessKey(accountID, input) } +// UpdateAccessKey implements the IAM UpdateAccessKey action, setting an access key Active or +// Inactive. It returns MissingParameter when AccessKeyId or Status is absent, then calls the IAM +// service for accountID. func UpdateAccessKey(accountID string, input *iam.UpdateAccessKeyInput, svc handlers_iam.IAMService) (*iam.UpdateAccessKeyOutput, error) { if input.AccessKeyId == nil || *input.AccessKeyId == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/oidc_provider.go b/spinifex/gateway/iam/oidc_provider.go index 3da1ed35d..7c7f21dcc 100644 --- a/spinifex/gateway/iam/oidc_provider.go +++ b/spinifex/gateway/iam/oidc_provider.go @@ -9,6 +9,9 @@ import ( handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) +// CreateOpenIDConnectProvider implements the IAM CreateOpenIDConnectProvider action, registering +// an OIDC identity provider. It returns MissingParameter when Url is absent, then calls the IAM +// service for accountID. func CreateOpenIDConnectProvider(accountID string, input *iam.CreateOpenIDConnectProviderInput, svc handlers_iam.IAMService) (*iam.CreateOpenIDConnectProviderOutput, error) { if input.Url == nil || *input.Url == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -16,6 +19,9 @@ func CreateOpenIDConnectProvider(accountID string, input *iam.CreateOpenIDConnec return svc.CreateOpenIDConnectProvider(accountID, input) } +// GetOpenIDConnectProvider implements the IAM GetOpenIDConnectProvider action, describing an OIDC +// provider. It returns MissingParameter when OpenIDConnectProviderArn is absent, then calls the +// IAM service for accountID. func GetOpenIDConnectProvider(accountID string, input *iam.GetOpenIDConnectProviderInput, svc handlers_iam.IAMService) (*iam.GetOpenIDConnectProviderOutput, error) { if input.OpenIDConnectProviderArn == nil || *input.OpenIDConnectProviderArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -23,10 +29,15 @@ func GetOpenIDConnectProvider(accountID string, input *iam.GetOpenIDConnectProvi return svc.GetOpenIDConnectProvider(accountID, input) } +// ListOpenIDConnectProviders implements the IAM ListOpenIDConnectProviders action. The action is +// unpaginated in AWS, so the service result is returned as is. func ListOpenIDConnectProviders(accountID string, input *iam.ListOpenIDConnectProvidersInput, svc handlers_iam.IAMService) (*iam.ListOpenIDConnectProvidersOutput, error) { return svc.ListOpenIDConnectProviders(accountID, input) } +// DeleteOpenIDConnectProvider implements the IAM DeleteOpenIDConnectProvider action, deleting an +// OIDC provider. It returns MissingParameter when OpenIDConnectProviderArn is absent, then calls +// the IAM service for accountID. func DeleteOpenIDConnectProvider(accountID string, input *iam.DeleteOpenIDConnectProviderInput, svc handlers_iam.IAMService) (*iam.DeleteOpenIDConnectProviderOutput, error) { if input.OpenIDConnectProviderArn == nil || *input.OpenIDConnectProviderArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -34,6 +45,8 @@ func DeleteOpenIDConnectProvider(accountID string, input *iam.DeleteOpenIDConnec return svc.DeleteOpenIDConnectProvider(accountID, input) } +// TagOpenIDConnectProvider implements the IAM TagOpenIDConnectProvider action. It returns +// MissingParameter when OpenIDConnectProviderArn is absent or Tags is empty. func TagOpenIDConnectProvider(accountID string, input *iam.TagOpenIDConnectProviderInput, svc handlers_iam.IAMService) (*iam.TagOpenIDConnectProviderOutput, error) { if input.OpenIDConnectProviderArn == nil || *input.OpenIDConnectProviderArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -44,6 +57,8 @@ func TagOpenIDConnectProvider(accountID string, input *iam.TagOpenIDConnectProvi return svc.TagOpenIDConnectProvider(accountID, input) } +// UntagOpenIDConnectProvider implements the IAM UntagOpenIDConnectProvider action. It returns +// MissingParameter when OpenIDConnectProviderArn is absent or TagKeys is empty. func UntagOpenIDConnectProvider(accountID string, input *iam.UntagOpenIDConnectProviderInput, svc handlers_iam.IAMService) (*iam.UntagOpenIDConnectProviderOutput, error) { if input.OpenIDConnectProviderArn == nil || *input.OpenIDConnectProviderArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -54,6 +69,9 @@ func UntagOpenIDConnectProvider(accountID string, input *iam.UntagOpenIDConnectP return svc.UntagOpenIDConnectProvider(accountID, input) } +// ListOpenIDConnectProviderTags implements the IAM ListOpenIDConnectProviderTags action, listing +// an OIDC provider's tags. It requires OpenIDConnectProviderArn; results are paged here by Marker +// and MaxItems. func ListOpenIDConnectProviderTags(accountID string, input *iam.ListOpenIDConnectProviderTagsInput, svc handlers_iam.IAMService) (*iam.ListOpenIDConnectProviderTagsOutput, error) { if input.OpenIDConnectProviderArn == nil || *input.OpenIDConnectProviderArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/pagination_test.go b/spinifex/gateway/iam/pagination_test.go index c246ccc3c..a7138cf0b 100644 --- a/spinifex/gateway/iam/pagination_test.go +++ b/spinifex/gateway/iam/pagination_test.go @@ -132,6 +132,38 @@ func TestListUsers_RejectsBadPagingBeforeListing(t *testing.T) { } } +// listAliasesStub counts calls so a rejected page proves the service never ran. +type listAliasesStub struct { + handlers_iam.IAMService + + calls int +} + +func (s *listAliasesStub) ListAccountAliases(_ string, _ *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) { + s.calls++ + return &iam.ListAccountAliasesOutput{AccountAliases: []*string{}}, nil +} + +func TestListAccountAliases_RejectsBadPagingBeforeListing(t *testing.T) { + tests := []struct { + name string + input *iam.ListAccountAliasesInput + }{ + {"MaxItems zero", &iam.ListAccountAliasesInput{MaxItems: aws.Int64(0)}}, + {"MaxItems above 1000", &iam.ListAccountAliasesInput{MaxItems: aws.Int64(1001)}}, + {"undecodable Marker", &iam.ListAccountAliasesInput{Marker: aws.String("not a marker!")}}, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + svc := &listAliasesStub{} + _, err := gateway_iam.ListAccountAliases(testAccountID, tc.input, svc) + require.Error(t, err) + assert.True(t, awserrors.IsErrorCode(err, awserrors.ErrorValidationError), "got %v", err) + assert.Zero(t, svc.calls) + }) + } +} + func TestListUsers_MaxItemsBoundsAccepted(t *testing.T) { svc := &listStub{users: []string{"a", "b"}} assert.Len(t, listUsers(t, svc, nil, 1).Users, 1) diff --git a/spinifex/gateway/iam/policy.go b/spinifex/gateway/iam/policy.go index 2a20fa68e..e9968e24a 100644 --- a/spinifex/gateway/iam/policy.go +++ b/spinifex/gateway/iam/policy.go @@ -16,6 +16,9 @@ const ( maxARNLength = 2048 ) +// CreatePolicy implements the IAM CreatePolicy action, creating a customer managed policy. It +// returns MissingParameter when PolicyName or PolicyDocument is absent, then calls the IAM +// service for accountID. func CreatePolicy(accountID string, input *iam.CreatePolicyInput, svc handlers_iam.IAMService) (*iam.CreatePolicyOutput, error) { if input.PolicyName == nil || *input.PolicyName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -26,6 +29,8 @@ func CreatePolicy(accountID string, input *iam.CreatePolicyInput, svc handlers_i return svc.CreatePolicy(accountID, input) } +// GetPolicy implements the IAM GetPolicy action, describing a managed policy. It returns +// MissingParameter when PolicyArn is absent, then calls the IAM service for accountID. func GetPolicy(accountID string, input *iam.GetPolicyInput, svc handlers_iam.IAMService) (*iam.GetPolicyOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -33,6 +38,9 @@ func GetPolicy(accountID string, input *iam.GetPolicyInput, svc handlers_iam.IAM return svc.GetPolicy(accountID, input) } +// GetPolicyVersion implements the IAM GetPolicyVersion action, reading one version of a managed +// policy. It requires PolicyArn or VersionId and returns the document percent-encoded as the IAM +// Query API does. func GetPolicyVersion(accountID string, input *iam.GetPolicyVersionInput, svc handlers_iam.IAMService) (*iam.GetPolicyVersionOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -50,6 +58,8 @@ func GetPolicyVersion(accountID string, input *iam.GetPolicyVersionInput, svc ha return out, nil } +// ListPolicyVersions implements the IAM ListPolicyVersions action. It requires PolicyArn; +// versions are paged here newest first by Marker and MaxItems. func ListPolicyVersions(accountID string, input *iam.ListPolicyVersionsInput, svc handlers_iam.IAMService) (*iam.ListPolicyVersionsOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -67,6 +77,9 @@ func ListPolicyVersions(accountID string, input *iam.ListPolicyVersionsInput, sv return out, nil } +// CreatePolicyVersion implements the IAM CreatePolicyVersion action, adding a new version to a +// managed policy. It returns MissingParameter when PolicyArn or PolicyDocument is absent, then +// calls the IAM service for accountID. func CreatePolicyVersion(accountID string, input *iam.CreatePolicyVersionInput, svc handlers_iam.IAMService) (*iam.CreatePolicyVersionOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -77,6 +90,9 @@ func CreatePolicyVersion(accountID string, input *iam.CreatePolicyVersionInput, return svc.CreatePolicyVersion(accountID, input) } +// SetDefaultPolicyVersion implements the IAM SetDefaultPolicyVersion action, choosing a managed +// policy's default version. It returns MissingParameter when PolicyArn or VersionId is absent, +// then calls the IAM service for accountID. func SetDefaultPolicyVersion(accountID string, input *iam.SetDefaultPolicyVersionInput, svc handlers_iam.IAMService) (*iam.SetDefaultPolicyVersionOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -87,6 +103,9 @@ func SetDefaultPolicyVersion(accountID string, input *iam.SetDefaultPolicyVersio return svc.SetDefaultPolicyVersion(accountID, input) } +// DeletePolicyVersion implements the IAM DeletePolicyVersion action, deleting a non-default +// policy version. It returns MissingParameter when PolicyArn or VersionId is absent, then calls +// the IAM service for accountID. func DeletePolicyVersion(accountID string, input *iam.DeletePolicyVersionInput, svc handlers_iam.IAMService) (*iam.DeletePolicyVersionOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -97,6 +116,8 @@ func DeletePolicyVersion(accountID string, input *iam.DeletePolicyVersionInput, return svc.DeletePolicyVersion(accountID, input) } +// ListPolicies implements the IAM ListPolicies action, listing managed policies. It validates +// PathPrefix; results are paged here by Marker and MaxItems. func ListPolicies(accountID string, input *iam.ListPoliciesInput, svc handlers_iam.IAMService) (*iam.ListPoliciesOutput, error) { if err := validatePathPrefix(input.PathPrefix, policyPathPrefix); err != nil { return nil, err @@ -114,6 +135,8 @@ func ListPolicies(accountID string, input *iam.ListPoliciesInput, svc handlers_i return out, nil } +// DeletePolicy implements the IAM DeletePolicy action, deleting a customer managed policy. It +// returns MissingParameter when PolicyArn is absent, then calls the IAM service for accountID. func DeletePolicy(accountID string, input *iam.DeletePolicyInput, svc handlers_iam.IAMService) (*iam.DeletePolicyOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -121,6 +144,9 @@ func DeletePolicy(accountID string, input *iam.DeletePolicyInput, svc handlers_i return svc.DeletePolicy(accountID, input) } +// ListEntitiesForPolicy implements the IAM ListEntitiesForPolicy action. It checks PolicyArn's +// length and PathPrefix as the IAM model does, then pages groups, roles and users as one +// sequence. func ListEntitiesForPolicy(accountID string, input *iam.ListEntitiesForPolicyInput, svc handlers_iam.IAMService) (*iam.ListEntitiesForPolicyOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -184,6 +210,9 @@ func pageEntitiesForPolicy(p pager, out *iam.ListEntitiesForPolicyOutput) { out.Marker, out.IsTruncated = marker, aws.Bool(marker != nil) } +// AttachUserPolicy implements the IAM AttachUserPolicy action, attaching a managed policy to a +// user. It returns MissingParameter when UserName or PolicyArn is absent, then calls the IAM +// service for accountID. func AttachUserPolicy(accountID string, input *iam.AttachUserPolicyInput, svc handlers_iam.IAMService) (*iam.AttachUserPolicyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -194,6 +223,9 @@ func AttachUserPolicy(accountID string, input *iam.AttachUserPolicyInput, svc ha return svc.AttachUserPolicy(accountID, input) } +// DetachUserPolicy implements the IAM DetachUserPolicy action, detaching a managed policy from a +// user. It returns MissingParameter when UserName or PolicyArn is absent, then calls the IAM +// service for accountID. func DetachUserPolicy(accountID string, input *iam.DetachUserPolicyInput, svc handlers_iam.IAMService) (*iam.DetachUserPolicyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -204,6 +236,9 @@ func DetachUserPolicy(accountID string, input *iam.DetachUserPolicyInput, svc ha return svc.DetachUserPolicy(accountID, input) } +// ListAttachedUserPolicies implements the IAM ListAttachedUserPolicies action, listing a user's +// managed policies. It requires UserName and validates PathPrefix; results are paged here by +// Marker and MaxItems. func ListAttachedUserPolicies(accountID string, input *iam.ListAttachedUserPoliciesInput, svc handlers_iam.IAMService) (*iam.ListAttachedUserPoliciesOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -224,6 +259,8 @@ func ListAttachedUserPolicies(accountID string, input *iam.ListAttachedUserPolic return out, nil } +// TagPolicy implements the IAM TagPolicy action. It returns MissingParameter when PolicyArn is +// absent or Tags is empty. func TagPolicy(accountID string, input *iam.TagPolicyInput, svc handlers_iam.IAMService) (*iam.TagPolicyOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -234,6 +271,8 @@ func TagPolicy(accountID string, input *iam.TagPolicyInput, svc handlers_iam.IAM return svc.TagPolicy(accountID, input) } +// UntagPolicy implements the IAM UntagPolicy action. It returns MissingParameter when PolicyArn +// is absent or TagKeys is empty. func UntagPolicy(accountID string, input *iam.UntagPolicyInput, svc handlers_iam.IAMService) (*iam.UntagPolicyOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -244,6 +283,8 @@ func UntagPolicy(accountID string, input *iam.UntagPolicyInput, svc handlers_iam return svc.UntagPolicy(accountID, input) } +// ListPolicyTags implements the IAM ListPolicyTags action, listing a managed policy's tags. It +// requires PolicyArn; results are paged here by Marker and MaxItems. func ListPolicyTags(accountID string, input *iam.ListPolicyTagsInput, svc handlers_iam.IAMService) (*iam.ListPolicyTagsOutput, error) { if input.PolicyArn == nil || *input.PolicyArn == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/role.go b/spinifex/gateway/iam/role.go index 237efa6fc..6bbb43368 100644 --- a/spinifex/gateway/iam/role.go +++ b/spinifex/gateway/iam/role.go @@ -9,6 +9,9 @@ import ( handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) +// CreateRole implements the IAM CreateRole action. It requires RoleName and +// AssumeRolePolicyDocument and returns the trust policy percent-encoded as the IAM Query API +// does. func CreateRole(accountID string, input *iam.CreateRoleInput, svc handlers_iam.IAMService) (*iam.CreateRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -24,6 +27,8 @@ func CreateRole(accountID string, input *iam.CreateRoleInput, svc handlers_iam.I return out, nil } +// GetRole implements the IAM GetRole action. It requires RoleName and returns the trust policy +// percent-encoded as the IAM Query API does. func GetRole(accountID string, input *iam.GetRoleInput, svc handlers_iam.IAMService) (*iam.GetRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -36,6 +41,8 @@ func GetRole(accountID string, input *iam.GetRoleInput, svc handlers_iam.IAMServ return out, nil } +// ListRoles implements the IAM ListRoles action. It validates PathPrefix, pages results here by +// Marker and MaxItems, and percent-encodes each trust policy. func ListRoles(accountID string, input *iam.ListRolesInput, svc handlers_iam.IAMService) (*iam.ListRolesOutput, error) { if err := validatePathPrefix(input.PathPrefix, identityPathPrefix); err != nil { return nil, err @@ -54,6 +61,8 @@ func ListRoles(accountID string, input *iam.ListRolesInput, svc handlers_iam.IAM return out, nil } +// DeleteRole implements the IAM DeleteRole action, deleting an IAM role. It returns +// MissingParameter when RoleName is absent, then calls the IAM service for accountID. func DeleteRole(accountID string, input *iam.DeleteRoleInput, svc handlers_iam.IAMService) (*iam.DeleteRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -61,6 +70,9 @@ func DeleteRole(accountID string, input *iam.DeleteRoleInput, svc handlers_iam.I return svc.DeleteRole(accountID, input) } +// UpdateRole implements the IAM UpdateRole action, updating a role's description or maximum +// session duration. It returns MissingParameter when RoleName is absent, then calls the IAM +// service for accountID. func UpdateRole(accountID string, input *iam.UpdateRoleInput, svc handlers_iam.IAMService) (*iam.UpdateRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -68,6 +80,27 @@ func UpdateRole(accountID string, input *iam.UpdateRoleInput, svc handlers_iam.I return svc.UpdateRole(accountID, input) } +// UpdateRoleDescription implements the IAM UpdateRoleDescription action. RoleName and Description +// must be present (an empty Description clears it); the trust policy is percent- encoded. +func UpdateRoleDescription(accountID string, input *iam.UpdateRoleDescriptionInput, svc handlers_iam.IAMService) (*iam.UpdateRoleDescriptionOutput, error) { + if input.RoleName == nil || *input.RoleName == "" { + return nil, errors.New(awserrors.ErrorMissingParameter) + } + // Description may be empty, which clears it, but must be present. + if input.Description == nil { + return nil, errors.New(awserrors.ErrorMissingParameter) + } + out, err := svc.UpdateRoleDescription(accountID, input) + if err != nil { + return nil, err + } + encodeRoleDocuments(out.Role) + return out, nil +} + +// UpdateAssumeRolePolicy implements the IAM UpdateAssumeRolePolicy action, replacing a role's +// trust policy. It returns MissingParameter when RoleName or PolicyDocument is absent, then calls +// the IAM service for accountID. func UpdateAssumeRolePolicy(accountID string, input *iam.UpdateAssumeRolePolicyInput, svc handlers_iam.IAMService) (*iam.UpdateAssumeRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -78,6 +111,9 @@ func UpdateAssumeRolePolicy(accountID string, input *iam.UpdateAssumeRolePolicyI return svc.UpdateAssumeRolePolicy(accountID, input) } +// AttachRolePolicy implements the IAM AttachRolePolicy action, attaching a managed policy to a +// role. It returns MissingParameter when RoleName or PolicyArn is absent, then calls the IAM +// service for accountID. func AttachRolePolicy(accountID string, input *iam.AttachRolePolicyInput, svc handlers_iam.IAMService) (*iam.AttachRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -88,6 +124,9 @@ func AttachRolePolicy(accountID string, input *iam.AttachRolePolicyInput, svc ha return svc.AttachRolePolicy(accountID, input) } +// DetachRolePolicy implements the IAM DetachRolePolicy action, detaching a managed policy from a +// role. It returns MissingParameter when RoleName or PolicyArn is absent, then calls the IAM +// service for accountID. func DetachRolePolicy(accountID string, input *iam.DetachRolePolicyInput, svc handlers_iam.IAMService) (*iam.DetachRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -98,6 +137,9 @@ func DetachRolePolicy(accountID string, input *iam.DetachRolePolicyInput, svc ha return svc.DetachRolePolicy(accountID, input) } +// ListAttachedRolePolicies implements the IAM ListAttachedRolePolicies action, listing a role's +// managed policies. It requires RoleName and validates PathPrefix; results are paged here by +// Marker and MaxItems. func ListAttachedRolePolicies(accountID string, input *iam.ListAttachedRolePoliciesInput, svc handlers_iam.IAMService) (*iam.ListAttachedRolePoliciesOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -118,6 +160,9 @@ func ListAttachedRolePolicies(accountID string, input *iam.ListAttachedRolePolic return out, nil } +// PutRolePolicy implements the IAM PutRolePolicy action, adding or replacing a role inline +// policy. It returns MissingParameter when RoleName, PolicyName or PolicyDocument is absent, then +// calls the IAM service for accountID. func PutRolePolicy(accountID string, input *iam.PutRolePolicyInput, svc handlers_iam.IAMService) (*iam.PutRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -131,6 +176,9 @@ func PutRolePolicy(accountID string, input *iam.PutRolePolicyInput, svc handlers return svc.PutRolePolicy(accountID, input) } +// GetRolePolicy implements the IAM GetRolePolicy action, reading a role inline policy. It +// requires RoleName or PolicyName and returns the document percent-encoded as the IAM Query API +// does. func GetRolePolicy(accountID string, input *iam.GetRolePolicyInput, svc handlers_iam.IAMService) (*iam.GetRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -146,6 +194,9 @@ func GetRolePolicy(accountID string, input *iam.GetRolePolicyInput, svc handlers return out, nil } +// DeleteRolePolicy implements the IAM DeleteRolePolicy action, deleting a role inline policy. It +// returns MissingParameter when RoleName or PolicyName is absent, then calls the IAM service for +// accountID. func DeleteRolePolicy(accountID string, input *iam.DeleteRolePolicyInput, svc handlers_iam.IAMService) (*iam.DeleteRolePolicyOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -156,6 +207,8 @@ func DeleteRolePolicy(accountID string, input *iam.DeleteRolePolicyInput, svc ha return svc.DeleteRolePolicy(accountID, input) } +// ListRolePolicies implements the IAM ListRolePolicies action, listing a role's inline policy +// names. It requires RoleName; results are paged here by Marker and MaxItems. func ListRolePolicies(accountID string, input *iam.ListRolePoliciesInput, svc handlers_iam.IAMService) (*iam.ListRolePoliciesOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -173,6 +226,8 @@ func ListRolePolicies(accountID string, input *iam.ListRolePoliciesInput, svc ha return out, nil } +// TagRole implements the IAM TagRole action. It returns MissingParameter when RoleName is absent +// or Tags is empty. func TagRole(accountID string, input *iam.TagRoleInput, svc handlers_iam.IAMService) (*iam.TagRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -183,6 +238,8 @@ func TagRole(accountID string, input *iam.TagRoleInput, svc handlers_iam.IAMServ return svc.TagRole(accountID, input) } +// UntagRole implements the IAM UntagRole action. It returns MissingParameter when RoleName is +// absent or TagKeys is empty. func UntagRole(accountID string, input *iam.UntagRoleInput, svc handlers_iam.IAMService) (*iam.UntagRoleOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -193,6 +250,8 @@ func UntagRole(accountID string, input *iam.UntagRoleInput, svc handlers_iam.IAM return svc.UntagRole(accountID, input) } +// ListRoleTags implements the IAM ListRoleTags action, listing a role's tags. It requires +// RoleName; results are paged here by Marker and MaxItems. func ListRoleTags(accountID string, input *iam.ListRoleTagsInput, svc handlers_iam.IAMService) (*iam.ListRoleTagsOutput, error) { if input.RoleName == nil || *input.RoleName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam/role_test.go b/spinifex/gateway/iam/role_test.go index 06b5f953d..c04c87638 100644 --- a/spinifex/gateway/iam/role_test.go +++ b/spinifex/gateway/iam/role_test.go @@ -116,6 +116,33 @@ func TestUpdateRole(t *testing.T) { } } +func TestUpdateRoleDescription(t *testing.T) { + svc := &stubIAMService{} + tests := []struct { + name string + input *iam.UpdateRoleDescriptionInput + wantErr string + }{ + {"nil RoleName", &iam.UpdateRoleDescriptionInput{Description: aws.String("d")}, awserrors.ErrorMissingParameter}, + {"empty RoleName", &iam.UpdateRoleDescriptionInput{RoleName: aws.String(""), Description: aws.String("d")}, awserrors.ErrorMissingParameter}, + {"nil Description", &iam.UpdateRoleDescriptionInput{RoleName: aws.String("r")}, awserrors.ErrorMissingParameter}, + {"empty Description", &iam.UpdateRoleDescriptionInput{RoleName: aws.String("r"), Description: aws.String("")}, ""}, + {"valid", &iam.UpdateRoleDescriptionInput{RoleName: aws.String("r"), Description: aws.String("d")}, ""}, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + out, err := UpdateRoleDescription(testAccountID, tc.input, svc) + if tc.wantErr != "" { + require.Error(t, err) + assert.Equal(t, tc.wantErr, err.Error()) + } else { + require.NoError(t, err) + require.NotNil(t, out.Role) + } + }) + } +} + func TestUpdateAssumeRolePolicy(t *testing.T) { svc := &stubIAMService{} tests := []struct { diff --git a/spinifex/gateway/iam/user.go b/spinifex/gateway/iam/user.go index 22f8d8cc7..39a3f096f 100644 --- a/spinifex/gateway/iam/user.go +++ b/spinifex/gateway/iam/user.go @@ -9,6 +9,8 @@ import ( handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" ) +// CreateUser implements the IAM CreateUser action, creating an IAM user. It returns +// MissingParameter when UserName is absent, then calls the IAM service for accountID. func CreateUser(accountID string, input *iam.CreateUserInput, svc handlers_iam.IAMService) (*iam.CreateUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -16,6 +18,8 @@ func CreateUser(accountID string, input *iam.CreateUserInput, svc handlers_iam.I return svc.CreateUser(accountID, input) } +// GetUser implements the IAM GetUser action. UserName is required (MissingParameter); the AWS +// default of describing the calling user is not supported. func GetUser(accountID string, input *iam.GetUserInput, svc handlers_iam.IAMService) (*iam.GetUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -23,6 +27,8 @@ func GetUser(accountID string, input *iam.GetUserInput, svc handlers_iam.IAMServ return svc.GetUser(accountID, input) } +// ListUsers implements the IAM ListUsers action, listing the account's users. It validates +// PathPrefix; results are paged here by Marker and MaxItems. func ListUsers(accountID string, input *iam.ListUsersInput, svc handlers_iam.IAMService) (*iam.ListUsersOutput, error) { if err := validatePathPrefix(input.PathPrefix, identityPathPrefix); err != nil { return nil, err @@ -40,6 +46,8 @@ func ListUsers(accountID string, input *iam.ListUsersInput, svc handlers_iam.IAM return out, nil } +// DeleteUser implements the IAM DeleteUser action, deleting an IAM user. It returns +// MissingParameter when UserName is absent, then calls the IAM service for accountID. func DeleteUser(accountID string, input *iam.DeleteUserInput, svc handlers_iam.IAMService) (*iam.DeleteUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -47,6 +55,9 @@ func DeleteUser(accountID string, input *iam.DeleteUserInput, svc handlers_iam.I return svc.DeleteUser(accountID, input) } +// PutUserPolicy implements the IAM PutUserPolicy action, adding or replacing a user inline +// policy. It returns MissingParameter when UserName, PolicyName or PolicyDocument is absent, then +// calls the IAM service for accountID. func PutUserPolicy(accountID string, input *iam.PutUserPolicyInput, svc handlers_iam.IAMService) (*iam.PutUserPolicyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -60,6 +71,9 @@ func PutUserPolicy(accountID string, input *iam.PutUserPolicyInput, svc handlers return svc.PutUserPolicy(accountID, input) } +// GetUserPolicy implements the IAM GetUserPolicy action, reading a user inline policy. It +// requires UserName or PolicyName and returns the document percent-encoded as the IAM Query API +// does. func GetUserPolicy(accountID string, input *iam.GetUserPolicyInput, svc handlers_iam.IAMService) (*iam.GetUserPolicyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -75,6 +89,9 @@ func GetUserPolicy(accountID string, input *iam.GetUserPolicyInput, svc handlers return out, nil } +// DeleteUserPolicy implements the IAM DeleteUserPolicy action, deleting a user inline policy. It +// returns MissingParameter when UserName or PolicyName is absent, then calls the IAM service for +// accountID. func DeleteUserPolicy(accountID string, input *iam.DeleteUserPolicyInput, svc handlers_iam.IAMService) (*iam.DeleteUserPolicyOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -85,6 +102,8 @@ func DeleteUserPolicy(accountID string, input *iam.DeleteUserPolicyInput, svc ha return svc.DeleteUserPolicy(accountID, input) } +// ListUserPolicies implements the IAM ListUserPolicies action, listing a user's inline policy +// names. It requires UserName; results are paged here by Marker and MaxItems. func ListUserPolicies(accountID string, input *iam.ListUserPoliciesInput, svc handlers_iam.IAMService) (*iam.ListUserPoliciesOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -102,6 +121,8 @@ func ListUserPolicies(accountID string, input *iam.ListUserPoliciesInput, svc ha return out, nil } +// TagUser implements the IAM TagUser action. It returns MissingParameter when UserName is absent +// or Tags is empty. func TagUser(accountID string, input *iam.TagUserInput, svc handlers_iam.IAMService) (*iam.TagUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -112,6 +133,8 @@ func TagUser(accountID string, input *iam.TagUserInput, svc handlers_iam.IAMServ return svc.TagUser(accountID, input) } +// UntagUser implements the IAM UntagUser action. It returns MissingParameter when UserName is +// absent or TagKeys is empty. func UntagUser(accountID string, input *iam.UntagUserInput, svc handlers_iam.IAMService) (*iam.UntagUserOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) @@ -122,6 +145,8 @@ func UntagUser(accountID string, input *iam.UntagUserInput, svc handlers_iam.IAM return svc.UntagUser(accountID, input) } +// ListUserTags implements the IAM ListUserTags action, listing a user's tags. It requires +// UserName; results are paged here by Marker and MaxItems. func ListUserTags(accountID string, input *iam.ListUserTagsInput, svc handlers_iam.IAMService) (*iam.ListUserTagsOutput, error) { if input.UserName == nil || *input.UserName == "" { return nil, errors.New(awserrors.ErrorMissingParameter) diff --git a/spinifex/gateway/iam_examples_contract_test.go b/spinifex/gateway/iam_examples_contract_test.go index 7a1554c0e..d4f26788e 100644 --- a/spinifex/gateway/iam_examples_contract_test.go +++ b/spinifex/gateway/iam_examples_contract_test.go @@ -242,6 +242,10 @@ func (svc *echoIAMService) GetAccountSummary(accountID string, input *iam.GetAcc return echoIAMCall[iam.GetAccountSummaryInput, iam.GetAccountSummaryOutput](svc, accountID, input) } +func (svc *echoIAMService) ListAccountAliases(accountID string, input *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) { + return echoIAMCall[iam.ListAccountAliasesInput, iam.ListAccountAliasesOutput](svc, accountID, input) +} + func (svc *echoIAMService) GetInstanceProfile(accountID string, input *iam.GetInstanceProfileInput) (*iam.GetInstanceProfileOutput, error) { if _, ok := svc.wantOutput.(*iam.GetInstanceProfileOutput); !ok { return &iam.GetInstanceProfileOutput{InstanceProfile: &iam.InstanceProfile{}}, nil diff --git a/spinifex/gateway/iam_request_test.go b/spinifex/gateway/iam_request_test.go index 9a4c4410a..61543f83c 100644 --- a/spinifex/gateway/iam_request_test.go +++ b/spinifex/gateway/iam_request_test.go @@ -10,11 +10,14 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/iam" "github.com/mulgadc/spinifex/spinifex/foundation/aws/arn" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) // flexMockIAMService is a configurable mock with per-method overrides. It @@ -125,6 +128,9 @@ func (m *flexMockIAMService) GetAccountSummary(accountID string, input *iam.GetA } return &iam.GetAccountSummaryOutput{}, nil } +func (m *flexMockIAMService) ListAccountAliases(_ string, _ *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) { + return &iam.ListAccountAliasesOutput{}, nil +} func (m *flexMockIAMService) CreateGroup(_ string, _ *iam.CreateGroupInput) (*iam.CreateGroupOutput, error) { return &iam.CreateGroupOutput{}, nil } @@ -282,6 +288,40 @@ func TestIAMRequest_GetAccountSummary_Success(t *testing.T) { assert.Contains(t, xmlStr, "2") } +// realAliasesIAMService answers ListAccountAliases from the real service, which +// needs no storage, so the test sees the response the gateway actually sends. +type realAliasesIAMService struct { + flexMockIAMService +} + +func (realAliasesIAMService) ListAccountAliases(accountID string, input *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) { + return (&handlers_iam.IAMServiceImpl{}).ListAccountAliases(accountID, input) +} + +// AWS answers an account with no alias with an empty AccountAliases list and +// IsTruncated false, and no Marker. +func TestIAMRequest_ListAccountAliases_Empty(t *testing.T) { + server := httptest.NewServer(setupIAMRequestHandler(&realAliasesIAMService{})) + defer server.Close() + client := iam.New(session.Must(session.NewSession(&aws.Config{ + Credentials: credentials.NewStaticCredentials("test", "test", ""), + DisableSSL: aws.Bool(true), + Endpoint: aws.String(server.URL), + MaxRetries: aws.Int(0), + Region: aws.String("us-east-1"), + }))) + + out, err := client.ListAccountAliases(&iam.ListAccountAliasesInput{}) + require.NoError(t, err) + assert.Empty(t, out.AccountAliases) + assert.False(t, aws.BoolValue(out.IsTruncated)) + assert.Nil(t, out.Marker) + + _, err = client.ListAccountAliases(&iam.ListAccountAliasesInput{MaxItems: aws.Int64(1001)}) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorValidationError) +} + // AWS answers GetRole for a never-used role with an empty // element; a nil-field struct must still marshal to that element, not vanish. func TestIAMRequest_GetRole_EmptyRoleLastUsed(t *testing.T) { diff --git a/spinifex/gateway/rds.go b/spinifex/gateway/rds.go index c89e5c2a7..57b3afccd 100644 --- a/spinifex/gateway/rds.go +++ b/spinifex/gateway/rds.go @@ -11,8 +11,8 @@ import ( gateway_rds "github.com/mulgadc/spinifex/spinifex/gateway/rds" ) -// RDS shares the query-in/XML-out shape of ELBv2: the action comes from the -// Action= form param and the response is the IAM-style XML envelope. +// RDS_Request serves RDS, which shares the query-in/XML-out shape of ELBv2: the action comes from +// the Action= form param and the response is the IAM-style XML envelope. func (gw *GatewayConfig) RDS_Request(w http.ResponseWriter, r *http.Request) error { queryArgs, err := readQueryArgs(r) if err != nil { diff --git a/spinifex/gateway/rds/agent.go b/spinifex/gateway/rds/agent.go index 4aea885d6..e50766db0 100644 --- a/spinifex/gateway/rds/agent.go +++ b/spinifex/gateway/rds/agent.go @@ -101,13 +101,16 @@ func lookupInstanceIndex(ctx context.Context, nc *nats.Conn, instanceID string) return &out, nil } -// The identifier is accepted but authoritative identity comes from the gate. +// RegisterDBInstanceInput is the in-guest agent's registration request. The identifier is +// accepted but authoritative identity comes from the gate. type RegisterDBInstanceInput struct { DBInstanceIdentifier string `locationName:"DBInstanceIdentifier"` AgentVersion string `locationName:"AgentVersion"` EngineVersion string `locationName:"EngineVersion"` } +// RegisterDBInstance is the internal agent action announcing a DB instance's agent and engine +// versions. The instance and account come from the caller's role session, not the body. func RegisterDBInstance(ctx context.Context, input *RegisterDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { id, err := authorizeAgent(ctx, nc, caller, input.DBInstanceIdentifier) if err != nil { @@ -121,6 +124,7 @@ func RegisterDBInstance(ctx context.Context, input *RegisterDBInstanceInput, nc }, id.AccountID) } +// SubmitDBStateChangeInput is the agent's engine health report for its DB instance. type SubmitDBStateChangeInput struct { DBInstanceIdentifier string `locationName:"DBInstanceIdentifier"` EngineHealth string `locationName:"EngineHealth"` @@ -128,6 +132,8 @@ type SubmitDBStateChangeInput struct { Message string `locationName:"Message"` } +// SubmitDBStateChange is the internal agent action reporting engine health and version. The +// instance and account come from the caller's role session, not the body. func SubmitDBStateChange(ctx context.Context, input *SubmitDBStateChangeInput, nc *nats.Conn, caller Caller) (any, error) { id, err := authorizeAgent(ctx, nc, caller, input.DBInstanceIdentifier) if err != nil { @@ -142,12 +148,13 @@ func SubmitDBStateChange(ctx context.Context, input *SubmitDBStateChangeInput, n }, id.AccountID) } +// GetDBBootstrapConfigInput asks for the boot material of the agent's DB instance. type GetDBBootstrapConfigInput struct { DBInstanceIdentifier string `locationName:"DBInstanceIdentifier"` } -// Serves boot material, replaying the master password for as long as the staged -// payload bound to this VM generation has not been acknowledged. +// GetDBBootstrapConfig serves boot material, replaying the master password for as long as the +// staged payload bound to this VM generation has not been acknowledged. func GetDBBootstrapConfig(ctx context.Context, input *GetDBBootstrapConfigInput, nc *nats.Conn, caller Caller) (any, error) { id, err := authorizeAgent(ctx, nc, caller, input.DBInstanceIdentifier) if err != nil { @@ -160,8 +167,8 @@ func GetDBBootstrapConfig(ctx context.Context, input *GetDBBootstrapConfigInput, }, id.AccountID) } -// PayloadId, VMGeneration and DataVolumeId are the guest's assertions about the -// payload it applied; the control plane checks each against the record. +// AcknowledgeDBBootstrapInput carries PayloadId, VMGeneration and DataVolumeId, the guest's +// assertions about the payload it applied; the control plane checks each against the record. type AcknowledgeDBBootstrapInput struct { DBInstanceIdentifier string `locationName:"DBInstanceIdentifier"` PayloadId string `locationName:"PayloadId"` @@ -169,9 +176,9 @@ type AcknowledgeDBBootstrapInput struct { DataVolumeId string `locationName:"DataVolumeId"` } -// The only agent call whose side effect destroys key material, so it is a -// distinct action rather than a field on the heartbeat: it has to be denied on -// an identity mismatch, which would break liveness reporting if a beat carried it. +// AcknowledgeDBBootstrap is the only agent call whose side effect destroys key material, so it is +// a distinct action, not a heartbeat field: it must be denied on an identity mismatch, which +// would break liveness reporting if a beat carried it. func AcknowledgeDBBootstrap(ctx context.Context, input *AcknowledgeDBBootstrapInput, nc *nats.Conn, caller Caller) (any, error) { id, err := authorizeAgent(ctx, nc, caller, input.DBInstanceIdentifier) if err != nil { @@ -186,7 +193,7 @@ func AcknowledgeDBBootstrap(ctx context.Context, input *AcknowledgeDBBootstrapIn }, id.AccountID) } -// Carries results for commands delivered on an earlier poll and asks for the +// PollDBCommandsInput carries results for commands delivered on an earlier poll and asks for the // next one, matching the ECS ack-on-poll shape. type PollDBCommandsInput struct { DBInstanceIdentifier string `locationName:"DBInstanceIdentifier"` @@ -194,15 +201,14 @@ type PollDBCommandsInput struct { Replies []handlers_rds.CommandReply `locationName:"Replies" locationNameList:"member"` } -// At most one command per poll: each is a discrete guest operation the agent -// must complete and report before the next is safe to issue. +// PollDBCommandsOutput holds at most one command per poll: each is a discrete guest operation the +// agent must complete and report before the next is safe to issue. type PollDBCommandsOutput struct { Commands []handlers_rds.Command `locationName:"Commands" locationNameList:"member"` } -// The command channel is a live subscription, not a durable queue, so a -// set-password that cannot reach the agent fails loudly rather than queueing -// cleartext in KV. +// PollDBCommands reads from a live subscription, not a durable queue, so a set-password that +// cannot reach the agent fails loudly rather than queueing cleartext in KV. func PollDBCommands(ctx context.Context, input *PollDBCommandsInput, nc *nats.Conn, caller Caller) (any, error) { id, err := authorizeAgent(ctx, nc, caller, input.DBInstanceIdentifier) if err != nil { diff --git a/spinifex/gateway/rds/authz_test.go b/spinifex/gateway/rds/authz_test.go index af485a50b..46dd57d72 100644 --- a/spinifex/gateway/rds/authz_test.go +++ b/spinifex/gateway/rds/authz_test.go @@ -108,6 +108,8 @@ func TestResourceARN_ScopesSingleResourceActions(t *testing.T) { "arn:aws:rds:ap-southeast-2:123456789012:db:orders-db"}, {"DeleteDBSnapshot", map[string]string{"DBSnapshotIdentifier": "orders-db-pre-upgrade"}, "arn:aws:rds:ap-southeast-2:123456789012:snapshot:orders-db-pre-upgrade"}, + {"ModifyDBSubnetGroup", map[string]string{"DBSubnetGroupName": "db-private"}, + "arn:aws:rds:ap-southeast-2:123456789012:subgrp:db-private"}, {"DeleteDBSubnetGroup", map[string]string{"DBSubnetGroupName": "db-private"}, "arn:aws:rds:ap-southeast-2:123456789012:subgrp:db-private"}, {"ModifyDBParameterGroup", map[string]string{"DBParameterGroupName": "pg16-tuned"}, diff --git a/spinifex/gateway/rds/enginecatalog.go b/spinifex/gateway/rds/enginecatalog.go index 97b088331..d4b72b253 100644 --- a/spinifex/gateway/rds/enginecatalog.go +++ b/spinifex/gateway/rds/enginecatalog.go @@ -38,9 +38,9 @@ var ( } ) -// The engine catalog is static, so this reads it with no I/O at all: Engine is a -// filter here rather than a required parameter, and an unknown one is an empty -// list rather than the rejection create-db-instance gives it. +// DescribeDBEngineVersions reads the static engine catalog with no I/O: Engine is a filter here +// rather than a required parameter, and an unknown one is an empty list rather than the rejection +// create-db-instance gives it. func DescribeDBEngineVersions(ctx context.Context, input *rds.DescribeDBEngineVersionsInput, _ *nats.Conn, _ Caller) (any, error) { filter := handlers_rds.EngineVersionFilter{} filter.Engine.AddParam(aws.StringValue(input.Engine)) @@ -75,8 +75,8 @@ func DescribeDBEngineVersions(ctx context.Context, input *rds.DescribeDBEngineVe return &rds.DescribeDBEngineVersionsOutput{DBEngineVersions: versions, Marker: marker}, nil } -// Engine is required, so an absent one is MissingParameter and an unknown one is -// the InvalidParameterValue LookupEngine already words. Everything else narrows. +// DescribeOrderableDBInstanceOptions requires Engine, so an absent one is MissingParameter and an +// unknown one is the InvalidParameterValue LookupEngine already words. Everything else narrows. func DescribeOrderableDBInstanceOptions(ctx context.Context, input *rds.DescribeOrderableDBInstanceOptionsInput, nc *nats.Conn, _ Caller, env Env) (any, error) { if aws.StringValue(input.AvailabilityZoneGroup) != "" { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, diff --git a/spinifex/gateway/rds/handler.go b/spinifex/gateway/rds/handler.go index 7e2833e91..f7996dda7 100644 --- a/spinifex/gateway/rds/handler.go +++ b/spinifex/gateway/rds/handler.go @@ -18,8 +18,8 @@ import ( // Only an assumed-role session can be an in-guest agent. const principalTypeAssumedRole = "assumed-role" -// Customer actions need only AccountID; the internal agent actions have to tell -// an instance role apart from a user, which the account alone cannot do. +// Caller identifies the requester. Customer actions need only AccountID; the internal agent +// actions have to tell an instance role apart from a user, which the account alone cannot do. type Caller struct { AccountID string PrincipalType string @@ -29,9 +29,9 @@ type Caller struct { SessionName string } -// Cluster facts a handler needs that the request cannot carry. It holds the -// ingredient rather than a ready-made probe, so the next action needing a -// fan-out gets it without another parameter. +// Env holds cluster facts a handler needs that the request cannot carry. It holds the ingredient +// rather than a ready-made probe, so the next action needing a fan-out gets it without another +// parameter. type Env struct { // How many nodes a fan-out waits for before it stops waiting. Without it a // gather burns its full timeout on every call instead of early-exiting. @@ -43,6 +43,8 @@ type Env struct { QuotaCheck func(ctx context.Context, accountID string, want int) error } +// Handler is one entry in the RDS action table: it decodes the query params q, runs the action +// for caller and returns the marshalled XML response. type Handler func(ctx context.Context, action string, q map[string]string, nc *nats.Conn, caller Caller, env Env) ([]byte, error) // Allocates the input struct, parses the query params into it, calls handler and @@ -122,6 +124,7 @@ var actions = map[string]actionDef{ // Subnet groups. "CreateDBSubnetGroup": {handler: typed(CreateDBSubnetGroup)}, "DescribeDBSubnetGroups": {handler: typed(DescribeDBSubnetGroups)}, + "ModifyDBSubnetGroup": {handler: typed(ModifyDBSubnetGroup), scopes: []*resourceScope{dbSubnetGroupScope}}, "DeleteDBSubnetGroup": {handler: typed(DeleteDBSubnetGroup), scopes: []*resourceScope{dbSubnetGroupScope}}, // Parameter groups. DescribeDBParameters is scoped despite being a describe: @@ -175,16 +178,17 @@ var actions = map[string]actionDef{ "RestoreDBInstanceToPointInTime": {unsupported: true}, } -// Checked before the IAM policy check, so an unknown action is rejected as -// InvalidAction rather than logged as a denial. +// HasAction reports whether action is in the RDS table, including unsupported ones. It is checked +// before the IAM policy check, so an unknown action is rejected as InvalidAction rather than +// logged as a denial. func HasAction(action string) bool { _, ok := actions[action] return ok } -// Callers are expected to have authorized the action already; the unknown-action -// check here is a backstop, not the enforcement point. The internal actions -// re-run their own gate, so skipping AuthorizeCaller still cannot reach one. +// Dispatch runs action and returns its XML. Callers are expected to have authorized it already; +// the unknown-action check here is a backstop. The internal actions re-run their own gate, so +// skipping AuthorizeCaller still cannot reach one. func Dispatch(ctx context.Context, action string, q map[string]string, nc *nats.Conn, caller Caller, env Env) ([]byte, error) { def, ok := actions[action] if !ok { diff --git a/spinifex/gateway/rds/handler_test.go b/spinifex/gateway/rds/handler_test.go index f90d8bdce..a8203efb9 100644 --- a/spinifex/gateway/rds/handler_test.go +++ b/spinifex/gateway/rds/handler_test.go @@ -47,6 +47,7 @@ var v1Actions = []string{ "CreateDBSubnetGroup", "DescribeDBSubnetGroups", + "ModifyDBSubnetGroup", "DeleteDBSubnetGroup", "CreateDBParameterGroup", @@ -148,7 +149,7 @@ var liveActions = []string{ "RebootDBInstance", "StartDBInstance", "StopDBInstance", "DeleteDBInstance", "DescribeEvents", "AddTagsToResource", "RemoveTagsFromResource", "ListTagsForResource", - "CreateDBSubnetGroup", "DescribeDBSubnetGroups", "DeleteDBSubnetGroup", + "CreateDBSubnetGroup", "DescribeDBSubnetGroups", "ModifyDBSubnetGroup", "DeleteDBSubnetGroup", "CreateDBParameterGroup", "DescribeDBParameterGroups", "ModifyDBParameterGroup", "DescribeDBParameters", "DeleteDBParameterGroup", "CreateDBSnapshot", "DescribeDBSnapshots", "DeleteDBSnapshot", @@ -196,6 +197,7 @@ func newStubbedNATS(t *testing.T) *nats.Conn { }}) respondWith(t, nc, handlers_rds.SubjectCreateDBSubnetGroup, &rds.CreateDBSubnetGroupOutput{}) respondWith(t, nc, handlers_rds.SubjectDescribeDBSubnetGroups, &rds.DescribeDBSubnetGroupsOutput{}) + respondWith(t, nc, handlers_rds.SubjectModifyDBSubnetGroup, &rds.ModifyDBSubnetGroupOutput{}) respondWith(t, nc, handlers_rds.SubjectDeleteDBSubnetGroup, &rds.DeleteDBSubnetGroupOutput{}) respondWith(t, nc, handlers_rds.SubjectCreateDBParameterGroup, &rds.CreateDBParameterGroupOutput{}) respondWith(t, nc, handlers_rds.SubjectDescribeDBParameterGroups, &rds.DescribeDBParameterGroupsOutput{}) diff --git a/spinifex/gateway/rds/instance.go b/spinifex/gateway/rds/instance.go index d176ee860..50faf36a8 100644 --- a/spinifex/gateway/rds/instance.go +++ b/spinifex/gateway/rds/instance.go @@ -8,8 +8,9 @@ import ( "github.com/nats-io/nats.go" ) -// The whole orchestration runs on the daemon side, so this only carries the -// caller's account through — the request body never names the owner. +// CreateDBInstance enforces the DB-instance quota, then hands off: the whole orchestration runs +// on the daemon side, so this only carries the caller's account through, and the request body +// never names the owner. func CreateDBInstance(ctx context.Context, input *rds.CreateDBInstanceInput, nc *nats.Conn, caller Caller, env Env) (any, error) { if env.QuotaCheck != nil { if err := env.QuotaCheck(ctx, caller.AccountID, 1); err != nil { @@ -19,31 +20,38 @@ func CreateDBInstance(ctx context.Context, input *rds.CreateDBInstanceInput, nc return handlers_rds.NewNATSService(nc).CreateDBInstance(ctx, input, caller.AccountID) } +// DescribeDBInstances implements the RDS DescribeDBInstances action for the caller's account. func DescribeDBInstances(ctx context.Context, input *rds.DescribeDBInstancesInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBInstances(ctx, input, caller.AccountID) } +// RebootDBInstance implements the RDS RebootDBInstance action for the caller's account. func RebootDBInstance(ctx context.Context, input *rds.RebootDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).RebootDBInstance(ctx, input, caller.AccountID) } +// StartDBInstance implements the RDS StartDBInstance action, starting a stopped instance in the +// caller's account. func StartDBInstance(ctx context.Context, input *rds.StartDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).StartDBInstance(ctx, input, caller.AccountID) } +// StopDBInstance implements the RDS StopDBInstance action for the caller's account. func StopDBInstance(ctx context.Context, input *rds.StopDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).StopDBInstance(ctx, input, caller.AccountID) } +// ModifyDBInstance implements the RDS ModifyDBInstance action for the caller's account. func ModifyDBInstance(ctx context.Context, input *rds.ModifyDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).ModifyDBInstance(ctx, input, caller.AccountID) } +// DeleteDBInstance implements the RDS DeleteDBInstance action for the caller's account. func DeleteDBInstance(ctx context.Context, input *rds.DeleteDBInstanceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DeleteDBInstance(ctx, input, caller.AccountID) } -// Scoped to the caller's account: an event ring is per-tenant, so there is no +// DescribeEvents is scoped to the caller's account: an event ring is per-tenant, so there is no // cross-account read even for a resource that has since been deleted. func DescribeEvents(ctx context.Context, input *rds.DescribeEventsInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeEvents(ctx, input, caller.AccountID) diff --git a/spinifex/gateway/rds/parametergroup.go b/spinifex/gateway/rds/parametergroup.go index 6081f9804..a3aa524b3 100644 --- a/spinifex/gateway/rds/parametergroup.go +++ b/spinifex/gateway/rds/parametergroup.go @@ -8,24 +8,32 @@ import ( "github.com/nats-io/nats.go" ) +// CreateDBParameterGroup implements the RDS CreateDBParameterGroup action for the caller's +// account. func CreateDBParameterGroup(ctx context.Context, input *rds.CreateDBParameterGroupInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).CreateDBParameterGroup(ctx, input, caller.AccountID) } +// DescribeDBParameterGroups implements the RDS DescribeDBParameterGroups action for the caller's +// account. func DescribeDBParameterGroups(ctx context.Context, input *rds.DescribeDBParameterGroupsInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBParameterGroups(ctx, input, caller.AccountID) } -// The result is DBParameterGroupNameMessage rather than a group, which is what +// ModifyDBParameterGroup returns DBParameterGroupNameMessage rather than a group, which is what // AWS returns and what the Terraform provider reads the applied name from. func ModifyDBParameterGroup(ctx context.Context, input *rds.ModifyDBParameterGroupInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).ModifyDBParameterGroup(ctx, input, caller.AccountID) } +// DescribeDBParameters implements the RDS DescribeDBParameters action, listing a parameter +// group's parameters. func DescribeDBParameters(ctx context.Context, input *rds.DescribeDBParametersInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBParameters(ctx, input, caller.AccountID) } +// DeleteDBParameterGroup implements the RDS DeleteDBParameterGroup action for the caller's +// account. func DeleteDBParameterGroup(ctx context.Context, input *rds.DeleteDBParameterGroupInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DeleteDBParameterGroup(ctx, input, caller.AccountID) } diff --git a/spinifex/gateway/rds/snapshot.go b/spinifex/gateway/rds/snapshot.go index c151373bf..002453afc 100644 --- a/spinifex/gateway/rds/snapshot.go +++ b/spinifex/gateway/rds/snapshot.go @@ -8,27 +8,32 @@ import ( "github.com/nats-io/nats.go" ) -// DB snapshots are addressed by their own identifier within the caller's -// account, so nothing here needs the EC2 snapshot the record points at — that -// stays system-owned and unreachable from the customer's EC2 surface. +// CreateDBSnapshot addresses DB snapshots by their own identifier within the caller's account, so +// nothing here needs the EC2 snapshot the record points at; that stays system-owned and +// unreachable from the customer's EC2 surface. func CreateDBSnapshot(ctx context.Context, input *rds.CreateDBSnapshotInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).CreateDBSnapshot(ctx, input, caller.AccountID) } +// DescribeDBSnapshots implements the RDS DescribeDBSnapshots action, covering manual and +// automated snapshots in the caller's account. func DescribeDBSnapshots(ctx context.Context, input *rds.DescribeDBSnapshotsInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBSnapshots(ctx, input, caller.AccountID) } +// DeleteDBSnapshot implements the RDS DeleteDBSnapshot action for the caller's account. func DeleteDBSnapshot(ctx context.Context, input *rds.DeleteDBSnapshotInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DeleteDBSnapshot(ctx, input, caller.AccountID) } +// RestoreDBInstanceFromDBSnapshot implements the RDS action of the same name, creating a new DB +// instance from a snapshot in the caller's account. func RestoreDBInstanceFromDBSnapshot(ctx context.Context, input *rds.RestoreDBInstanceFromDBSnapshotInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).RestoreDBInstanceFromDBSnapshot(ctx, input, caller.AccountID) } -// One DBInstanceAutomatedBackup per instance with automated backups. The -// individual snapshots stay listable through DescribeDBSnapshots with +// DescribeDBInstanceAutomatedBackups returns one DBInstanceAutomatedBackup per instance with +// automated backups. The snapshots themselves stay listable through DescribeDBSnapshots with // --snapshot-type automated, which is where AWS puts them too. func DescribeDBInstanceAutomatedBackups(ctx context.Context, input *rds.DescribeDBInstanceAutomatedBackupsInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBInstanceAutomatedBackups(ctx, input, caller.AccountID) diff --git a/spinifex/gateway/rds/subnetgroup.go b/spinifex/gateway/rds/subnetgroup.go index 24351c50d..1fdb36e07 100644 --- a/spinifex/gateway/rds/subnetgroup.go +++ b/spinifex/gateway/rds/subnetgroup.go @@ -8,16 +8,25 @@ import ( "github.com/nats-io/nats.go" ) -// The nested Subnets list is rendered by the shared XML marshaller off the SDK's -// own struct tags, so nothing here shapes the response. +// CreateDBSubnetGroup implements the RDS action. The nested Subnets list is rendered by the +// shared XML marshaller off the SDK's own struct tags, so nothing here shapes the response. func CreateDBSubnetGroup(ctx context.Context, input *rds.CreateDBSubnetGroupInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).CreateDBSubnetGroup(ctx, input, caller.AccountID) } +// DescribeDBSubnetGroups implements the RDS DescribeDBSubnetGroups action for the caller's +// account. func DescribeDBSubnetGroups(ctx context.Context, input *rds.DescribeDBSubnetGroupsInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DescribeDBSubnetGroups(ctx, input, caller.AccountID) } +// ModifyDBSubnetGroup implements the RDS ModifyDBSubnetGroup action, replacing a subnet group's +// subnets or description. +func ModifyDBSubnetGroup(ctx context.Context, input *rds.ModifyDBSubnetGroupInput, nc *nats.Conn, caller Caller) (any, error) { + return handlers_rds.NewNATSService(nc).ModifyDBSubnetGroup(ctx, input, caller.AccountID) +} + +// DeleteDBSubnetGroup implements the RDS DeleteDBSubnetGroup action for the caller's account. func DeleteDBSubnetGroup(ctx context.Context, input *rds.DeleteDBSubnetGroupInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).DeleteDBSubnetGroup(ctx, input, caller.AccountID) } diff --git a/spinifex/gateway/rds/tags.go b/spinifex/gateway/rds/tags.go index fb4a1db4e..42b05c62d 100644 --- a/spinifex/gateway/rds/tags.go +++ b/spinifex/gateway/rds/tags.go @@ -8,16 +8,20 @@ import ( "github.com/nats-io/nats.go" ) -// The ARN in the request names the resource, and the daemon validates it -// against the caller's account — the account is never taken from the ARN. +// AddTagsToResource tags the resource named by the request ARN. The daemon validates the ARN +// against the caller's account; the account is never taken from the ARN. func AddTagsToResource(ctx context.Context, input *rds.AddTagsToResourceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).AddTagsToResource(ctx, input, caller.AccountID) } +// RemoveTagsFromResource implements the RDS RemoveTagsFromResource action; the daemon checks the +// ARN against the caller's account. func RemoveTagsFromResource(ctx context.Context, input *rds.RemoveTagsFromResourceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).RemoveTagsFromResource(ctx, input, caller.AccountID) } +// ListTagsForResource implements the RDS ListTagsForResource action; the daemon checks the ARN +// against the caller's account. func ListTagsForResource(ctx context.Context, input *rds.ListTagsForResourceInput, nc *nats.Conn, caller Caller) (any, error) { return handlers_rds.NewNATSService(nc).ListTagsForResource(ctx, input, caller.AccountID) } diff --git a/spinifex/gateway/sts.go b/spinifex/gateway/sts.go index 207b0b355..b153c76ef 100644 --- a/spinifex/gateway/sts.go +++ b/spinifex/gateway/sts.go @@ -196,8 +196,9 @@ func (gw *GatewayConfig) resolveSTSCaller(r *http.Request) (stsCaller, error) { assumedRoleARN, _ := ctx.Value(ctxAssumedRoleARN).(string) assumedRoleID, _ := ctx.Value(ctxAssumedRoleID).(string) accessKey, _ := ctx.Value(ctxAccessKey).(string) + userARN, _ := ctx.Value(ctxUserARN).(string) - arn, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN) + arn, err := buildCallerARN(accountID, identity, principalType, assumedRoleARN, userARN) if err != nil { return stsCaller{}, err } @@ -213,8 +214,9 @@ func (gw *GatewayConfig) resolveSTSCaller(r *http.Request) (stsCaller, error) { } // buildCallerARN composes the caller ARN: assumed-role uses ctxAssumedRoleARN, -// root uses arn:aws:iam::{aid}:root, user uses arn:aws:iam::{aid}:user/{identity}. -func buildCallerARN(accountID, identity, principalType, assumedRoleARN string) (string, error) { +// root uses arn:aws:iam::{aid}:root, user uses its stored userARN, path included, +// or arn:aws:iam::{aid}:user/{identity} when there is no record to read it from. +func buildCallerARN(accountID, identity, principalType, assumedRoleARN, userARN string) (string, error) { switch principalType { case principalTypeAssumedRole: if assumedRoleARN == "" { @@ -232,6 +234,9 @@ func buildCallerARN(accountID, identity, principalType, assumedRoleARN string) ( slog.Error("STS_Request: user principal without identity") return "", errors.New(awserrors.ErrorInternalError) } + if userARN != "" { + return userARN, nil + } return spxarn.FormatIAMPath(spxarn.IAMUser, accountID, "/", identity), nil default: slog.Error("STS_Request: unknown principal type", "principalType", principalType) diff --git a/spinifex/gateway/sts/GetCallerIdentity.go b/spinifex/gateway/sts/GetCallerIdentity.go index a2fd28c49..09a2d7cd1 100644 --- a/spinifex/gateway/sts/GetCallerIdentity.go +++ b/spinifex/gateway/sts/GetCallerIdentity.go @@ -1,3 +1,6 @@ +// Package gateway_sts implements the STS actions: it validates each request +// and delegates it to the STS service, which owns trust-policy checks and +// credential issuance. package gateway_sts import ( @@ -35,7 +38,7 @@ func GetCallerIdentity( iamSvc handlers_iam.IAMService, stsSvc handlers_sts.STSService, ) (*sts.GetCallerIdentityOutput, error) { - userID, err := ResolveCallerUserID(accountID, callerPrincipalType, identity, assumedRoleID, iamSvc) + userID, _, err := ResolveCallerUser(accountID, callerPrincipalType, identity, assumedRoleID, iamSvc) if err != nil { return nil, err } @@ -52,38 +55,37 @@ func GetCallerIdentity( return stsSvc.GetCallerIdentity(accountID, callerARN, userID, input) } -// ResolveCallerUserID resolves the UserId of an authenticated principal, which -// is also aws:userid at the authorization door. An error is a dependency fault; -// a principal with no ID to report returns empty, which each caller reads on its -// own terms. -func ResolveCallerUserID( +// ResolveCallerUser resolves the UserId of an authenticated principal, which is +// also aws:userid at the authorization door, and for an IAM user its stored ARN. +// An error is a dependency fault; a missing value returns empty. +func ResolveCallerUser( accountID, callerPrincipalType, identity, assumedRoleID string, iamSvc handlers_iam.IAMService, -) (string, error) { +) (userID, userARN string, err error) { switch callerPrincipalType { case PrincipalTypeRoot: - return accountID, nil + return accountID, "", nil case PrincipalTypeUser: // Root is encoded as principalType=user + identity="root"; UserId is the account ID. if identity == "root" { - return accountID, nil + return accountID, "", nil } if iamSvc == nil { - slog.Error("ResolveCallerUserID: IAM service not initialized") - return "", errors.New(awserrors.ErrorInternalError) + slog.Error("ResolveCallerUser: IAM service not initialized") + return "", "", errors.New(awserrors.ErrorInternalError) } out, err := iamSvc.GetUser(accountID, &iam.GetUserInput{UserName: aws.String(identity)}) if err != nil { - return "", err + return "", "", err } if out == nil || out.User == nil { - return "", nil + return "", "", nil } - return aws.StringValue(out.User.UserId), nil + return aws.StringValue(out.User.UserId), aws.StringValue(out.User.Arn), nil case PrincipalTypeAssumedRole: - return assumedRoleID, nil + return assumedRoleID, "", nil default: - slog.Error("ResolveCallerUserID: unknown principal type", "principalType", callerPrincipalType) - return "", errors.New(awserrors.ErrorInternalError) + slog.Error("ResolveCallerUser: unknown principal type", "principalType", callerPrincipalType) + return "", "", errors.New(awserrors.ErrorInternalError) } } diff --git a/spinifex/gateway/sts_request_test.go b/spinifex/gateway/sts_request_test.go index 818cb30b3..ddda6a557 100644 --- a/spinifex/gateway/sts_request_test.go +++ b/spinifex/gateway/sts_request_test.go @@ -442,3 +442,68 @@ func TestSTSRequest_GetCallerIdentity_User_LookupIAM(t *testing.T) { assert.Contains(t, xmlStr, "arn:aws:iam::000000000000:user/alice") assert.Contains(t, xmlStr, "AIDAALICE000") } + +// A user at a non-root path is reported with its stored ARN, as AWS does, +// resolved by the SigV4 middleware rather than reformatted at "/". +func TestSTSRequest_GetCallerIdentity_PathedUserThroughMiddleware(t *testing.T) { + const pathed = "arn:aws:iam::123456789012:user/eng/alice" + encryptedSecret, err := handlers_iam.EncryptSecret(testSecretKey, testMasterKey) + require.NoError(t, err) + gw := &GatewayConfig{ + DisableLogging: true, + Region: testRegion, + STSService: &flexMockSTSService{}, + IAMService: &mockIAMService{ + masterKey: testMasterKey, + accessKeys: map[string]*handlers_iam.AccessKey{testAccessKey: { + AccessKeyID: testAccessKey, SecretAccessKey: encryptedSecret, + UserName: "alice", AccountID: "123456789012", Status: "Active", + }}, + getUserFn: func(string, *iam.GetUserInput) (*iam.GetUserOutput, error) { + return &iam.GetUserOutput{User: &iam.User{ + UserName: aws.String("alice"), UserId: aws.String("AIDAALICE"), Arn: aws.String(pathed), + }}, nil + }, + }, + } + handler := gw.SigV4AuthMiddleware()(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if err := gw.STS_Request(w, r); err != nil { + gw.ErrorHandler(w, r, err) + } + })) + + body := []byte("Action=GetCallerIdentity") + req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(string(body))) + req.Host = "localhost:9999" + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + signTestRequest(t, req, body, testAccessKey, testSecretKey) + + resp := doRequest(handler, req) + b, _ := io.ReadAll(resp.Body) + require.Equalf(t, http.StatusOK, resp.StatusCode, "body: %s", string(b)) + assert.Contains(t, string(b), ""+pathed+"") +} + +func TestBuildCallerARN(t *testing.T) { + const acct = "123456789012" + cases := []struct { + name, accountID, identity, principalType, assumedRoleARN, userARN, want string + }{ + {"pathed user takes its stored ARN", acct, "alice", principalTypeUser, "", + "arn:aws:iam::" + acct + ":user/eng/alice", "arn:aws:iam::" + acct + ":user/eng/alice"}, + {"user with no record formats at the root path", acct, "alice", principalTypeUser, "", "", + "arn:aws:iam::" + acct + ":user/alice"}, + {"global root ignores a user ARN", awsidentifiers.GlobalAccountID, "root", principalTypeUser, "", + "arn:aws:iam::" + awsidentifiers.GlobalAccountID + ":user/root", "arn:aws:iam::" + awsidentifiers.GlobalAccountID + ":root"}, + {"root principal", acct, "", principalTypeRoot, "", "", "arn:aws:iam::" + acct + ":root"}, + {"assumed role keeps its session ARN", acct, "s", principalTypeAssumedRole, + "arn:aws:sts::" + acct + ":assumed-role/Ops/s", "", "arn:aws:sts::" + acct + ":assumed-role/Ops/s"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got, err := buildCallerARN(tc.accountID, tc.identity, tc.principalType, tc.assumedRoleARN, tc.userARN) + require.NoError(t, err) + assert.Equal(t, tc.want, got) + }) + } +} diff --git a/spinifex/handlers/ecs/records.go b/spinifex/handlers/ecs/records.go index 7010954dd..23f552c20 100644 --- a/spinifex/handlers/ecs/records.go +++ b/spinifex/handlers/ecs/records.go @@ -101,13 +101,13 @@ type ServiceEvent struct { Message string `json:"message"` } -// ARN builders for the ECS resource shapes (ecs-v1.md §1). Region + accountID -// scope every ARN; the partition is fixed to "aws" to match the rest of the -// stack. +// ClusterARN returns arn:aws:ecs:{region}:{account}:cluster/{name}. Region and accountID scope every +// ECS ARN; the partition is fixed to "aws" to match the rest of the stack. func ClusterARN(region, accountID, name string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", region, accountID, name) } +// TaskDefARN returns the task-definition ARN for a resolved numeric revision, family:rev. func TaskDefARN(region, accountID, family string, rev int) string { return TaskDefRefARN(region, accountID, family, strconv.Itoa(rev)) } @@ -118,18 +118,22 @@ func TaskDefRefARN(region, accountID, family, revision string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:task-definition/%s:%s", region, accountID, family, revision) } +// TaskARN returns the long-format task ARN, arn:aws:ecs:{region}:{account}:task/{cluster}/{taskID}. func TaskARN(region, accountID, cluster, taskID string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:task/%s/%s", region, accountID, cluster, taskID) } +// ContainerInstanceARN returns the long-format container-instance ARN, scoped under its cluster. func ContainerInstanceARN(region, accountID, cluster, ciID string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:container-instance/%s/%s", region, accountID, cluster, ciID) } +// ServiceARN returns the long-format service ARN, arn:aws:ecs:{region}:{account}:service/{cluster}/{name}. func ServiceARN(region, accountID, cluster, name string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:service/%s/%s", region, accountID, cluster, name) } +// CapacityProviderARN returns arn:aws:ecs:{region}:{account}:capacity-provider/{name}. func CapacityProviderARN(region, accountID, name string) string { return fmt.Sprintf("arn:aws:ecs:%s:%s:capacity-provider/%s", region, accountID, name) } diff --git a/spinifex/handlers/ecs/service.go b/spinifex/handlers/ecs/service.go index befdf8347..b165d5bb7 100644 --- a/spinifex/handlers/ecs/service.go +++ b/spinifex/handlers/ecs/service.go @@ -1,3 +1,6 @@ +// Package handlers_ecs is the ECS control plane: the ECSService contract, its +// daemon-side JetStream KV implementation and NATS client, and the leader-elected +// scheduler that converges services and drains silent container instances. package handlers_ecs import ( diff --git a/spinifex/handlers/eks/access_entry_test.go b/spinifex/handlers/eks/access_entry_test.go index 1d7006dec..21601d1d5 100644 --- a/spinifex/handlers/eks/access_entry_test.go +++ b/spinifex/handlers/eks/access_entry_test.go @@ -40,6 +40,7 @@ func TestValidateAccessScope(t *testing.T) { } func TestAccessEntryRecordToAWS_IncludesTags(t *testing.T) { + t.Parallel() now := time.Unix(1700000000, 0).UTC() rec := &AccessEntryRecord{ ARN: "arn:aws:eks:ap-southeast-2:000000000001:access-entry/dev1/abc", @@ -61,6 +62,7 @@ func TestAccessEntryRecordToAWS_IncludesTags(t *testing.T) { } func TestAssociatedPolicyToAWS_ScopeNamespaces(t *testing.T) { + t.Parallel() now := time.Unix(1700000000, 0).UTC() p := AssociatedAccessPolicy{ PolicyARN: "arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy", @@ -84,6 +86,7 @@ func TestAssociatedPolicyToAWS_ScopeNamespaces(t *testing.T) { // The record-store guard clauses reject malformed input before touching the KV, // so a nil handle is enough to exercise them. func TestAccessEntryRecordGuards(t *testing.T) { + t.Parallel() require.Error(t, PutAccessEntryRecord(t.Context(), nil, nil)) require.Error(t, PutAccessEntryRecord(t.Context(), nil, &AccessEntryRecord{PrincipalARN: "arn:aws:iam::000000000001:user/admin"})) diff --git a/spinifex/handlers/eks/addon_catalog_test.go b/spinifex/handlers/eks/addon_catalog_test.go index 04c328300..0b2c72e11 100644 --- a/spinifex/handlers/eks/addon_catalog_test.go +++ b/spinifex/handlers/eks/addon_catalog_test.go @@ -8,6 +8,7 @@ import ( ) func TestLookupAddon_KnownAndUnknown(t *testing.T) { + t.Parallel() spec, ok := lookupAddon("aws-load-balancer-controller") require.True(t, ok) assert.Equal(t, "aws-load-balancer-controller", spec.Name) @@ -18,6 +19,7 @@ func TestLookupAddon_KnownAndUnknown(t *testing.T) { } func TestAddonSpec_DefaultVersionIsNewest(t *testing.T) { + t.Parallel() for name, spec := range addonCatalog { require.NotEmpty(t, spec.Versions, "addon %s must list versions", name) assert.Equal(t, spec.Versions[0], spec.DefaultVersion, @@ -26,6 +28,7 @@ func TestAddonSpec_DefaultVersionIsNewest(t *testing.T) { } func TestAddonSpec_SupportsVersion(t *testing.T) { + t.Parallel() spec, ok := lookupAddon("aws-load-balancer-controller") require.True(t, ok) assert.True(t, spec.supportsVersion(spec.DefaultVersion)) @@ -33,6 +36,7 @@ func TestAddonSpec_SupportsVersion(t *testing.T) { } func TestCatalogSpecs_SortedByName(t *testing.T) { + t.Parallel() specs := catalogSpecs() require.Len(t, specs, len(addonCatalog)) for i := 1; i < len(specs); i++ { @@ -87,6 +91,8 @@ func TestValidateAddonCatalog(t *testing.T) { } } +// Not parallel: it swaps the package-wide catalog that every service the +// parallel tests construct is validated against. func TestNewEKSServiceImpl_RejectsInvalidAddonCatalog(t *testing.T) { previousCatalog := addonCatalog addonCatalog = buildAddonCatalog(newAddonSpec("broken", false, "no versions")) diff --git a/spinifex/handlers/eks/addon_state_test.go b/spinifex/handlers/eks/addon_state_test.go index 445d400e8..373c80e36 100644 --- a/spinifex/handlers/eks/addon_state_test.go +++ b/spinifex/handlers/eks/addon_state_test.go @@ -22,6 +22,7 @@ func sampleAddonRecord(name string) *AddonRecord { } func TestAddonRecordGuards(t *testing.T) { + t.Parallel() require.Error(t, PutAddonRecord(t.Context(), nil, "c1", nil)) require.Error(t, PutAddonRecord(t.Context(), nil, "", sampleAddonRecord("x"))) require.Error(t, PutAddonRecord(t.Context(), nil, "c1", &AddonRecord{})) @@ -34,6 +35,7 @@ func TestAddonRecordGuards(t *testing.T) { } func TestAddonRecord_RoundTrip(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) in := sampleAddonRecord("aws-load-balancer-controller") @@ -49,12 +51,14 @@ func TestAddonRecord_RoundTrip(t *testing.T) { } func TestGetAddonRecord_NotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, err := GetAddonRecord(t.Context(), kv, "c1", "ghost") assert.ErrorIs(t, err, ErrAddonNotFound) } func TestListAddonRecords_SkipsManifestSubKeys(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutAddonRecord(t.Context(), kv, "c1", sampleAddonRecord("coredns"))) @@ -72,6 +76,7 @@ func TestListAddonRecords_SkipsManifestSubKeys(t *testing.T) { } func TestDeleteAddonRecord_RemovesRecordAndManifest(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutAddonRecord(t.Context(), kv, "c1", sampleAddonRecord("coredns"))) _, err := kv.Put(t.Context(), AddonManifestKey("c1", "coredns"), []byte(`{}`)) @@ -89,6 +94,7 @@ func TestDeleteAddonRecord_RemovesRecordAndManifest(t *testing.T) { } func TestCasUpdateAddon(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutAddonRecord(t.Context(), kv, "c1", sampleAddonRecord("coredns"))) diff --git a/spinifex/handlers/eks/addons_test.go b/spinifex/handlers/eks/addons_test.go index c694dc813..c453d827e 100644 --- a/spinifex/handlers/eks/addons_test.go +++ b/spinifex/handlers/eks/addons_test.go @@ -45,6 +45,7 @@ func setupAddonService(t *testing.T) (*EKSServiceImpl, *fakeAddonInstaller) { const albController = "aws-load-balancer-controller" func TestDescribeAddonVersions_ReturnsCatalog(t *testing.T) { + t.Parallel() svc := setupTestService(t) out, err := svc.DescribeAddonVersions(context.Background(), &eks.DescribeAddonVersionsInput{}, testAccountID) @@ -72,6 +73,7 @@ func TestDescribeAddonVersions_ReturnsCatalog(t *testing.T) { } func TestCreateAddon_UnknownClusterIsNotFound(t *testing.T) { + t.Parallel() svc := setupTestService(t) _, err := svc.CreateAddon(context.Background(), &eks.CreateAddonInput{ ClusterName: aws.String("missing"), AddonName: aws.String(albController), @@ -80,6 +82,7 @@ func TestCreateAddon_UnknownClusterIsNotFound(t *testing.T) { } func TestCreateAddon_UnknownAddonRejected(t *testing.T) { + t.Parallel() svc, _ := setupAddonService(t) _, err := svc.CreateAddon(context.Background(), &eks.CreateAddonInput{ ClusterName: aws.String("c1"), AddonName: aws.String("not-a-real-addon"), @@ -88,6 +91,7 @@ func TestCreateAddon_UnknownAddonRejected(t *testing.T) { } func TestCreateAddon_UnknownVersionRejected(t *testing.T) { + t.Parallel() svc, _ := setupAddonService(t) _, err := svc.CreateAddon(context.Background(), &eks.CreateAddonInput{ ClusterName: aws.String("c1"), AddonName: aws.String(albController), @@ -97,6 +101,7 @@ func TestCreateAddon_UnknownVersionRejected(t *testing.T) { } func TestCreateAddon_CreatesStagingAndDefaultsVersion(t *testing.T) { + t.Parallel() svc, fake := setupAddonService(t) spec, _ := lookupAddon(albController) @@ -123,6 +128,7 @@ func TestCreateAddon_CreatesStagingAndDefaultsVersion(t *testing.T) { } func TestCreateAddon_InstallerFailureMarksCreateFailed(t *testing.T) { + t.Parallel() svc, fake := setupAddonService(t) fake.installErr = errors.New("delivery bus unreachable") @@ -139,6 +145,7 @@ func TestCreateAddon_InstallerFailureMarksCreateFailed(t *testing.T) { } func TestAddon_DescribeListDelete(t *testing.T) { + t.Parallel() svc, fake := setupAddonService(t) _, err := svc.CreateAddon(context.Background(), &eks.CreateAddonInput{ @@ -169,6 +176,7 @@ func TestAddon_DescribeListDelete(t *testing.T) { } func TestDescribeDeleteAddon_MissingIsNotFound(t *testing.T) { + t.Parallel() svc, _ := setupAddonService(t) _, err := svc.DescribeAddon(context.Background(), &eks.DescribeAddonInput{ ClusterName: aws.String("c1"), AddonName: aws.String(albController), @@ -181,6 +189,7 @@ func TestDescribeDeleteAddon_MissingIsNotFound(t *testing.T) { } func TestUpdateAddon_ChangesVersionAndReinstalls(t *testing.T) { + t.Parallel() svc, fake := setupAddonService(t) spec, _ := lookupAddon("argocd") @@ -209,6 +218,7 @@ func TestUpdateAddon_ChangesVersionAndReinstalls(t *testing.T) { } func TestUpdateAddon_UnknownVersionRejected(t *testing.T) { + t.Parallel() svc, _ := setupAddonService(t) _, err := svc.CreateAddon(context.Background(), &eks.CreateAddonInput{ ClusterName: aws.String("c1"), AddonName: aws.String("argocd"), @@ -223,6 +233,7 @@ func TestUpdateAddon_UnknownVersionRejected(t *testing.T) { } func TestUpdateAddon_MissingIsNotFound(t *testing.T) { + t.Parallel() svc, _ := setupAddonService(t) _, err := svc.UpdateAddon(context.Background(), &eks.UpdateAddonInput{ ClusterName: aws.String("c1"), AddonName: aws.String("argocd"), @@ -233,6 +244,7 @@ func TestUpdateAddon_MissingIsNotFound(t *testing.T) { // The default (uninjected) installer stages a manifest in KV that the VM-side // delivery slice consumes. func TestStagingInstaller_StagesManifest(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") @@ -251,6 +263,7 @@ func TestStagingInstaller_StagesManifest(t *testing.T) { } func TestListStagedAddonManifests(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") diff --git a/spinifex/handlers/eks/awsgw_endpoint_test.go b/spinifex/handlers/eks/awsgw_endpoint_test.go index 7fec30e97..536a2480f 100644 --- a/spinifex/handlers/eks/awsgw_endpoint_test.go +++ b/spinifex/handlers/eks/awsgw_endpoint_test.go @@ -8,12 +8,14 @@ import ( ) func TestClusterOIDCIssuer_HappyPath(t *testing.T) { + t.Parallel() got, err := ClusterOIDCIssuer("https://gw.example:9999", "us-east-1", "111122223333", "alpha") require.NoError(t, err) assert.Equal(t, "https://gw.example:9999/oidc/eks/us-east-1/111122223333/alpha", got) } func TestClusterOIDCIssuer_TrimsTrailingSlash(t *testing.T) { + t.Parallel() got, err := ClusterOIDCIssuer("https://gw.example:9999/", "us-east-1", "111122223333", "alpha") require.NoError(t, err) assert.Equal(t, "https://gw.example:9999/oidc/eks/us-east-1/111122223333/alpha", got) @@ -39,6 +41,7 @@ func TestClusterOIDCIssuer_EmptyInputsRejected(t *testing.T) { } func TestClusterOIDCIssuer_MalformedBaseRejected(t *testing.T) { + t.Parallel() _, err := ClusterOIDCIssuer("not-a-url", "us-east-1", "111122223333", "alpha") require.Error(t, err) assert.Contains(t, err.Error(), "missing scheme or host") diff --git a/spinifex/handlers/eks/claim_race_test.go b/spinifex/handlers/eks/claim_race_test.go index 4298f29ee..39af7af3f 100644 --- a/spinifex/handlers/eks/claim_race_test.go +++ b/spinifex/handlers/eks/claim_race_test.go @@ -33,6 +33,7 @@ func classifyCreateErrs(t *testing.T, errs []error) (ok, inUse int) { // asserted structurally here and enforced under -race (a double-claim would // race the launcher fakes the winner mutates). func TestCreateCluster_ConcurrentSameNameSingleOwner(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) const n = 2 @@ -61,6 +62,7 @@ func TestCreateCluster_ConcurrentSameNameSingleOwner(t *testing.T) { // caller CAS-flips FAILED→CREATING and proceeds, the other loses the CAS and is // rejected ResourceInUse. No double purge/relaunch. func TestCreateCluster_ConcurrentReclaimSingleOwner(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := sampleClusterMeta("race") @@ -94,6 +96,7 @@ func TestCreateCluster_ConcurrentReclaimSingleOwner(t *testing.T) { // exactly one launch (the loser returns at the record claim before // launchWorkers). func TestCreateNodegroup_ConcurrentSameNameSingleOwner(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") diff --git a/spinifex/handlers/eks/cluster_meta_to_aws_test.go b/spinifex/handlers/eks/cluster_meta_to_aws_test.go index 0760f1029..45aa67f03 100644 --- a/spinifex/handlers/eks/cluster_meta_to_aws_test.go +++ b/spinifex/handlers/eks/cluster_meta_to_aws_test.go @@ -209,6 +209,7 @@ func TestClusterMetaToAWS_SecurityGroupIdsEchoesCallerOnly(t *testing.T) { // --- H: platformVersion, upgradePolicy, logging (mulga-z2knb) --- func TestClusterMetaToAWS_PlatformVersionAlwaysPresent(t *testing.T) { + t.Parallel() // platformVersion is a stable constant, not derived from any stored field, // so an old zero-value-ish record projects it identically to a new one. meta := baseClusterMetaForProjection() diff --git a/spinifex/handlers/eks/cluster_reconciler_recovery_test.go b/spinifex/handlers/eks/cluster_reconciler_recovery_test.go index 3959c9993..db52bf829 100644 --- a/spinifex/handlers/eks/cluster_reconciler_recovery_test.go +++ b/spinifex/handlers/eks/cluster_reconciler_recovery_test.go @@ -65,6 +65,7 @@ func newRecoveryReconciler(t *testing.T, cp CPInstanceControl) *ClusterReconcile } func TestMaybeRecoverCP_HealthyClearsDegradedClock(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-time.Hour) @@ -78,6 +79,7 @@ func TestMaybeRecoverCP_HealthyClearsDegradedClock(t *testing.T) { } func TestMaybeRecoverCP_WithinGraceDoesNotRestart(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) @@ -88,6 +90,7 @@ func TestMaybeRecoverCP_WithinGraceDoesNotRestart(t *testing.T) { } func TestMaybeRecoverCP_RestartsStoppedCPAfterGrace(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -101,6 +104,7 @@ func TestMaybeRecoverCP_RestartsStoppedCPAfterGrace(t *testing.T) { } func TestMaybeRecoverCP_RestartsAllHAMembersAfterGrace(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -113,6 +117,7 @@ func TestMaybeRecoverCP_RestartsAllHAMembersAfterGrace(t *testing.T) { } func TestMaybeRecoverCP_RunningCPNotRestarted(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -124,6 +129,7 @@ func TestMaybeRecoverCP_RunningCPNotRestarted(t *testing.T) { } func TestMaybeRecoverCP_BackoffPreventsRapidRetry(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -135,6 +141,7 @@ func TestMaybeRecoverCP_BackoffPreventsRapidRetry(t *testing.T) { } func TestMaybeRecoverCP_StopsAtMaxAttempts(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -146,6 +153,7 @@ func TestMaybeRecoverCP_StopsAtMaxAttempts(t *testing.T) { } func TestMaybeRecoverCP_NilControlIsNoop(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) // no CP control wired r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -155,6 +163,7 @@ func TestMaybeRecoverCP_NilControlIsNoop(t *testing.T) { } func TestMaybeRecoverCP_EmptyInstanceIDIsNoop(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -166,6 +175,7 @@ func TestMaybeRecoverCP_EmptyInstanceIDIsNoop(t *testing.T) { } func TestMaybeRecoverCP_StateQueryErrorSkipsRestart(t *testing.T) { + t.Parallel() cp := &fakeCPControl{stateErr: errors.New("query-pci failed")} r := newRecoveryReconciler(t, cp) r.degradedSince = time.Now().Add(-10 * time.Minute) @@ -179,6 +189,7 @@ func TestMaybeRecoverCP_StateQueryErrorSkipsRestart(t *testing.T) { // a stale state report records the health issue AND drives an in-place restart // once the CP has been degraded past the grace window. func TestActiveBranchRestartsWedgedCP(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "stopped"} r, _, acctKV := newStateReconcilerHarness(t, WithCPInstanceControl(cp)) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) diff --git a/spinifex/handlers/eks/cluster_reconciler_replace_test.go b/spinifex/handlers/eks/cluster_reconciler_replace_test.go index ec81eeb4a..988bcd184 100644 --- a/spinifex/handlers/eks/cluster_reconciler_replace_test.go +++ b/spinifex/handlers/eks/cluster_reconciler_replace_test.go @@ -92,6 +92,7 @@ func newReplaceReconciler(t *testing.T, cp CPInstanceControl, prov CPProvisioner } func TestMaybeReplaceCP_ReplacesLostMemberWithHealthyQuorum(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{node: ControlPlaneNode{NodeID: "node-c", InstanceID: "i-cp-new", ENIID: "eni-new", ENIIP: "10.0.0.20"}} @@ -115,6 +116,7 @@ func TestMaybeReplaceCP_ReplacesLostMemberWithHealthyQuorum(t *testing.T) { } func TestMaybeReplaceCP_DescribeErrorMemberTreatedAsLost(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{ states: map[string]string{"i-cp0": "running", "i-cp1": "running"}, @@ -131,6 +133,7 @@ func TestMaybeReplaceCP_DescribeErrorMemberTreatedAsLost(t *testing.T) { } func TestMaybeReplaceCP_NoQuorumDoesNotReplace(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "terminated", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{} @@ -144,6 +147,7 @@ func TestMaybeReplaceCP_NoQuorumDoesNotReplace(t *testing.T) { } func TestMaybeReplaceCP_UnhealthyQuorumDoesNotReplace(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{} @@ -157,6 +161,7 @@ func TestMaybeReplaceCP_UnhealthyQuorumDoesNotReplace(t *testing.T) { } func TestMaybeReplaceCP_RestartableMemberIsNoop(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "stopped"}} prov := &fakeCPProvisioner{} @@ -171,6 +176,7 @@ func TestMaybeReplaceCP_RestartableMemberIsNoop(t *testing.T) { } func TestMaybeReplaceCP_WithinGraceDoesNotReplace(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{} @@ -184,6 +190,7 @@ func TestMaybeReplaceCP_WithinGraceDoesNotReplace(t *testing.T) { } func TestMaybeReplaceCP_BackoffAndCap(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{node: ControlPlaneNode{NodeID: "node-c", InstanceID: "i-cp-new", ENIIP: "10.0.0.20"}} @@ -203,6 +210,7 @@ func TestMaybeReplaceCP_BackoffAndCap(t *testing.T) { } func TestMaybeReplaceCP_ProvisionFailureLeavesDegraded(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{err: errors.New("no free host")} @@ -219,6 +227,7 @@ func TestMaybeReplaceCP_ProvisionFailureLeavesDegraded(t *testing.T) { } func TestMaybeReplaceCP_SingleCPClusterIsNoop(t *testing.T) { + t.Parallel() nodes := []ControlPlaneNode{{NodeID: "", InstanceID: "i-cp0", ENIIP: "10.0.0.10"}} cp := &mapCPControl{states: map[string]string{"i-cp0": "terminated"}} prov := &fakeCPProvisioner{} @@ -233,6 +242,7 @@ func TestMaybeReplaceCP_SingleCPClusterIsNoop(t *testing.T) { } func TestMaybeReplaceCP_NoTemplateIsNoop(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{} @@ -247,6 +257,7 @@ func TestMaybeReplaceCP_NoTemplateIsNoop(t *testing.T) { } func TestMaybeReplaceCP_NilProvisionerIsNoop(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} meta := haMeta(nodes) @@ -260,6 +271,7 @@ func TestMaybeReplaceCP_NilProvisionerIsNoop(t *testing.T) { } func TestProvisionReplacementCP_LaunchesJoinOnFreeHost(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} inst := &seqK3sInst{} svc := newPlacerService(sched, &fakePlacer{}, &seqK3sVPC{}, inst) @@ -287,6 +299,7 @@ func TestProvisionReplacementCP_LaunchesJoinOnFreeHost(t *testing.T) { } func TestProvisionReplacementCP_NoFreeHostErrors(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b"}} svc := newPlacerService(sched, &fakePlacer{}, &seqK3sVPC{}, &seqK3sInst{}) tmpl := validK3sInput() @@ -304,6 +317,7 @@ func TestProvisionReplacementCP_NoFreeHostErrors(t *testing.T) { } func TestProvisionReplacementCP_GuardsBadRequests(t *testing.T) { + t.Parallel() svc := newPlacerService(&fakeHostScheduler{}, &fakePlacer{}, &seqK3sVPC{}, &seqK3sInst{}) _, err := svc.ProvisionReplacementCP(context.Background(), ReplacementCPRequest{JoinURL: "x"}) @@ -318,6 +332,7 @@ func TestProvisionReplacementCP_GuardsBadRequests(t *testing.T) { // a healthy 2/3 quorum with one terminated member drives a replacement provision // and meta swap once past the grace window. func TestActiveBranchReplacesLostCPMember(t *testing.T) { + t.Parallel() nodes := threeMemberCP() cp := &mapCPControl{states: map[string]string{"i-cp0": "running", "i-cp1": "running", "i-cp2": "terminated"}} prov := &fakeCPProvisioner{node: ControlPlaneNode{NodeID: "node-c", InstanceID: "i-cp-new", ENIIP: "10.0.0.20"}} diff --git a/spinifex/handlers/eks/cluster_reconciler_reset_test.go b/spinifex/handlers/eks/cluster_reconciler_reset_test.go index bfc7ba94a..357a41615 100644 --- a/spinifex/handlers/eks/cluster_reconciler_reset_test.go +++ b/spinifex/handlers/eks/cluster_reconciler_reset_test.go @@ -24,6 +24,7 @@ func newResetReconciler(t *testing.T, cp CPInstanceControl) (*ClusterReconciler, const etcdIssue = `apiserver healthz="fail": etcd:unreachable` func TestReformEtcd_DisabledIsNoop(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} // CP control wired but reset NOT enabled. r := newRecoveryReconciler(t, cp) @@ -35,6 +36,7 @@ func TestReformEtcd_DisabledIsNoop(t *testing.T) { } func TestReformEtcd_NonEtcdIssueIgnored(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, _ := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-time.Hour) @@ -45,6 +47,7 @@ func TestReformEtcd_NonEtcdIssueIgnored(t *testing.T) { } func TestReformEtcd_SingleCPIgnored(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, _ := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-time.Hour) @@ -55,6 +58,7 @@ func TestReformEtcd_SingleCPIgnored(t *testing.T) { } func TestReformEtcd_WithinGraceDoesNotReset(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, _ := newResetReconciler(t, cp) @@ -65,6 +69,7 @@ func TestReformEtcd_WithinGraceDoesNotReset(t *testing.T) { } func TestReformEtcd_MemberNotRunningDefers(t *testing.T) { + t.Parallel() // A stopped member is the in-place restart path's job; reset only fires when // every member is VM-running but etcd is still wedged. cp := &fakeCPControl{state: "stopped"} @@ -77,6 +82,7 @@ func TestReformEtcd_MemberNotRunningDefers(t *testing.T) { } func TestReformEtcd_EscalatesAfterGrace(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, acctKV := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-10 * time.Minute) @@ -101,6 +107,7 @@ func TestReformEtcd_EscalatesAfterGrace(t *testing.T) { } func TestReformEtcd_BackoffPreventsRapidReset(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, _ := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-10 * time.Minute) @@ -112,6 +119,7 @@ func TestReformEtcd_BackoffPreventsRapidReset(t *testing.T) { } func TestReformEtcd_StopsAtMaxAttempts(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, _ := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-10 * time.Minute) @@ -123,6 +131,7 @@ func TestReformEtcd_StopsAtMaxAttempts(t *testing.T) { } func TestReformEtcd_RecoveryClearsDirectivesAndClock(t *testing.T) { + t.Parallel() cp := &fakeCPControl{state: "running"} r, acctKV := newResetReconciler(t, cp) r.resetSince = time.Now().Add(-10 * time.Minute) @@ -144,6 +153,7 @@ func TestReformEtcd_RecoveryClearsDirectivesAndClock(t *testing.T) { } func TestReformEtcd_SteadyHealthyDoesNotBumpEpoch(t *testing.T) { + t.Parallel() // A healthy cluster that never escalated must not write directives each tick. cp := &fakeCPControl{state: "running"} r, acctKV := newResetReconciler(t, cp) diff --git a/spinifex/handlers/eks/cluster_reconciler_state_test.go b/spinifex/handlers/eks/cluster_reconciler_state_test.go index 781bf5af7..42480fba2 100644 --- a/spinifex/handlers/eks/cluster_reconciler_state_test.go +++ b/spinifex/handlers/eks/cluster_reconciler_state_test.go @@ -38,6 +38,7 @@ func freshReport(healthz string, nodes int) *ServerStateReport { } func TestClusterReconciler_CreatingTransitionsToActiveOnStateReport(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) freshenClusterCreatedAt(t, acctKV) seedBootstrapState(t, acctKV) @@ -53,6 +54,7 @@ func TestClusterReconciler_CreatingTransitionsToActiveOnStateReport(t *testing.T } func TestClusterReconciler_CreatingStaysWithoutStateReport(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) freshenClusterCreatedAt(t, acctKV) seedBootstrapState(t, acctKV) @@ -66,6 +68,7 @@ func TestClusterReconciler_CreatingStaysWithoutStateReport(t *testing.T) { } func TestClusterReconciler_CreatingStaysOnUnhealthyReport(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) freshenClusterCreatedAt(t, acctKV) seedBootstrapState(t, acctKV) @@ -79,6 +82,7 @@ func TestClusterReconciler_CreatingStaysOnUnhealthyReport(t *testing.T) { } func TestClusterReconciler_ActiveRecordsNodeCountAndClearsIssue(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) require.NoError(t, SetClusterHealthState(t.Context(), acctKV, "alpha", "stale", 0, nil)) @@ -94,6 +98,7 @@ func TestClusterReconciler_ActiveRecordsNodeCountAndClearsIssue(t *testing.T) { } func TestClusterReconciler_ActiveFlagsStaleReport(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithStateStaleAfter(90*time.Second)) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) r.latest.Store(&ServerStateReport{Healthz: "ok", NodeCount: 2, TS: time.Now().Add(-5 * time.Minute).Unix()}) @@ -107,6 +112,7 @@ func TestClusterReconciler_ActiveFlagsStaleReport(t *testing.T) { } func TestClusterReconciler_ActiveUnhealthyReportSurfacesReason(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) r.latest.Store(&ServerStateReport{ @@ -124,6 +130,7 @@ func TestClusterReconciler_ActiveUnhealthyReportSurfacesReason(t *testing.T) { } func TestClusterReconciler_ActiveUnhealthyReportWithoutReasonStaysTerse(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) r.latest.Store(freshReport("fail", 0)) @@ -136,6 +143,7 @@ func TestClusterReconciler_ActiveUnhealthyReportWithoutReasonStaysTerse(t *testi } func TestClusterReconciler_StateReportSubscriptionDrivesActive(t *testing.T) { + t.Parallel() r, nc, acctKV := newStateReconcilerHarness(t, WithReconcileInterval(10*time.Millisecond), WithLeaseRefresh(10*time.Second), diff --git a/spinifex/handlers/eks/cluster_reconciler_test.go b/spinifex/handlers/eks/cluster_reconciler_test.go index 29f12c8e9..78db5a591 100644 --- a/spinifex/handlers/eks/cluster_reconciler_test.go +++ b/spinifex/handlers/eks/cluster_reconciler_test.go @@ -70,6 +70,7 @@ func newReconcilerHarness(t *testing.T, healthURL string, opts ...ReconcilerOpti } func TestNewClusterReconciler_EmptyInputsRejected(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) leaderKV, err := InitLeaderBucket(t.Context(), js) @@ -90,6 +91,7 @@ func TestNewClusterReconciler_EmptyInputsRejected(t *testing.T) { } func TestClusterReconciler_AcquireLeaseFirstHolderWins(t *testing.T) { + t.Parallel() r, _, _ := newReconcilerHarness(t, "") release, ok := r.AcquireLease(t.Context()) @@ -104,6 +106,7 @@ func TestClusterReconciler_AcquireLeaseFirstHolderWins(t *testing.T) { } func TestClusterReconciler_AcquireLeaseSecondHolderLoses(t *testing.T) { + t.Parallel() r1, leaderKV, acctKV := newReconcilerHarness(t, "") release, ok := r1.AcquireLease(t.Context()) @@ -145,6 +148,7 @@ func seedBootstrapState(t *testing.T, kv jetstream.KeyValue) { } func TestClusterReconciler_CreatingTransitionsToActiveOnReadyAndHealthz(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusOK} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -183,6 +187,7 @@ func TestClusterReconciler_CreatingTransitionsToActiveOnReadyAndHealthz(t *testi } func TestClusterReconciler_CreatingStaysWhenBootstrapMissing(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusOK} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -212,6 +217,7 @@ func TestClusterReconciler_CreatingStaysWhenBootstrapMissing(t *testing.T) { } func TestClusterReconciler_CreatingStaysWhenJWKSUnverified(t *testing.T) { + t.Parallel() // Regression for the ACTIVE-on-pre-seeded-JWKS race: every artifact is // present INCLUDING the controller-pre-seeded OIDCJWKSKey, but the VM's // JWKS cross-check has not passed (no verified-marker). The cluster must @@ -250,6 +256,7 @@ func TestClusterReconciler_CreatingStaysWhenJWKSUnverified(t *testing.T) { } func TestClusterReconciler_CreatingStaysWhenHealthzFails(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{err: errors.New("connection refused")} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -274,6 +281,7 @@ func TestClusterReconciler_CreatingStaysWhenHealthzFails(t *testing.T) { } func TestClusterReconciler_CreatingTimesOutToFailed(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{err: errors.New("connection refused")} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -306,6 +314,7 @@ func TestClusterReconciler_CreatingTimesOutToFailed(t *testing.T) { } func TestClusterReconciler_CreatingWithinDeadlineStaysCreating(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{err: errors.New("connection refused")} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -330,6 +339,7 @@ func TestClusterReconciler_CreatingWithinDeadlineStaysCreating(t *testing.T) { } func TestClusterReconciler_DeletingExitsLoop(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusOK} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -351,6 +361,7 @@ func TestClusterReconciler_DeletingExitsLoop(t *testing.T) { } func TestClusterReconciler_LostLeaseExitsLoop(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusOK} r, leaderKV, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -385,6 +396,7 @@ func TestClusterReconciler_LostLeaseExitsLoop(t *testing.T) { } func TestClusterReconciler_ActiveProbesAndWarnsOnHealthzFail(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusOK} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -412,6 +424,7 @@ func TestClusterReconciler_ActiveProbesAndWarnsOnHealthzFail(t *testing.T) { } func TestClusterReconciler_ActiveHealthRecoversClearsIssue(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: http.StatusServiceUnavailable} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", @@ -441,6 +454,7 @@ func TestClusterReconciler_ActiveHealthRecoversClearsIssue(t *testing.T) { } func TestClusterReconciler_ProbeHealthzEmptyURLNoop(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{} r, _, _ := newReconcilerHarness(t, "", diff --git a/spinifex/handlers/eks/cluster_state_test.go b/spinifex/handlers/eks/cluster_state_test.go index f23da704c..d04bb51f0 100644 --- a/spinifex/handlers/eks/cluster_state_test.go +++ b/spinifex/handlers/eks/cluster_state_test.go @@ -36,6 +36,7 @@ func sampleClusterMeta(name string) *ClusterMeta { } func TestPutClusterMeta_NilOrEmptyNameRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.Error(t, PutClusterMeta(t.Context(), kv, nil)) @@ -43,6 +44,7 @@ func TestPutClusterMeta_NilOrEmptyNameRejected(t *testing.T) { } func TestPutClusterMeta_RoundTrip(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) in := sampleClusterMeta("alpha") @@ -61,6 +63,7 @@ func TestPutClusterMeta_RoundTrip(t *testing.T) { } func TestGetClusterMeta_MissingReturnsErrClusterNotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, err := GetClusterMeta(t.Context(), kv, "missing") @@ -68,6 +71,7 @@ func TestGetClusterMeta_MissingReturnsErrClusterNotFound(t *testing.T) { } func TestGetClusterMeta_EmptyNameRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, err := GetClusterMeta(t.Context(), kv, "") @@ -76,6 +80,7 @@ func TestGetClusterMeta_EmptyNameRejected(t *testing.T) { } func TestGetClusterMeta_CorruptBlobRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, err := kv.Put(t.Context(), ClusterMetaKey("corrupt"), []byte("{not json")) @@ -87,6 +92,7 @@ func TestGetClusterMeta_CorruptBlobRejected(t *testing.T) { } func TestSetClusterStatus_TransitionsAndIsIdempotent(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutClusterMeta(t.Context(), kv, sampleClusterMeta("alpha"))) @@ -102,6 +108,7 @@ func TestSetClusterStatus_TransitionsAndIsIdempotent(t *testing.T) { } func TestSetClusterStatus_DeletingAlwaysAllowedFromAnyState(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) for _, from := range []ClusterStatus{ClusterStatusCreating, ClusterStatusActive, ClusterStatusFailed} { @@ -116,6 +123,7 @@ func TestSetClusterStatus_DeletingAlwaysAllowedFromAnyState(t *testing.T) { } func TestSetClusterStatus_MissingReturnsErrClusterNotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) err := SetClusterStatus(t.Context(), kv, "missing", ClusterStatusActive) @@ -123,6 +131,7 @@ func TestSetClusterStatus_MissingReturnsErrClusterNotFound(t *testing.T) { } func TestSetClusterStatus_RecoversFromConcurrentRevisionBump(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutClusterMeta(t.Context(), kv, sampleClusterMeta("alpha"))) @@ -148,6 +157,7 @@ func TestSetClusterStatus_RecoversFromConcurrentRevisionBump(t *testing.T) { } func TestMarkClusterFailed_FromCreatingSetsStatusAndReason(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutClusterMeta(t.Context(), kv, sampleClusterMeta("alpha"))) @@ -159,6 +169,7 @@ func TestMarkClusterFailed_FromCreatingSetsStatusAndReason(t *testing.T) { } func TestMarkClusterFailed_NoopFromNonCreating(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) for _, from := range []ClusterStatus{ClusterStatusActive, ClusterStatusDeleting, ClusterStatusFailed} { @@ -175,6 +186,7 @@ func TestMarkClusterFailed_NoopFromNonCreating(t *testing.T) { } func TestMarkClusterFailed_MissingReturnsErrClusterNotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) err := MarkClusterFailed(t.Context(), kv, "ghost", "boom") @@ -182,6 +194,7 @@ func TestMarkClusterFailed_MissingReturnsErrClusterNotFound(t *testing.T) { } func TestSetClusterCertificateAuthority_WritesAndIsIdempotent(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutClusterMeta(t.Context(), kv, sampleClusterMeta("alpha"))) @@ -197,6 +210,7 @@ func TestSetClusterCertificateAuthority_WritesAndIsIdempotent(t *testing.T) { } func TestSetClusterCertificateAuthority_MissingReturnsErrClusterNotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) err := SetClusterCertificateAuthority(t.Context(), kv, "ghost", "ca-blob") @@ -204,6 +218,7 @@ func TestSetClusterCertificateAuthority_MissingReturnsErrClusterNotFound(t *test } func TestSetClusterCertificateAuthority_EmptyInputsRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.Error(t, SetClusterCertificateAuthority(t.Context(), kv, "", "ca-blob")) @@ -211,6 +226,7 @@ func TestSetClusterCertificateAuthority_EmptyInputsRejected(t *testing.T) { } func TestDeleteClusterPrefix_SweepsEveryKey(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, PutClusterMeta(t.Context(), kv, sampleClusterMeta("alpha"))) @@ -244,12 +260,14 @@ func TestDeleteClusterPrefix_SweepsEveryKey(t *testing.T) { } func TestDeleteClusterPrefix_EmptyBucketIsNoop(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, DeleteClusterPrefix(t.Context(), kv, "ghost")) } func TestDeleteClusterPrefix_EmptyNameRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.Error(t, DeleteClusterPrefix(t.Context(), kv, "")) diff --git a/spinifex/handlers/eks/cp_vpc_test.go b/spinifex/handlers/eks/cp_vpc_test.go index 850aaa875..c32c0208c 100644 --- a/spinifex/handlers/eks/cp_vpc_test.go +++ b/spinifex/handlers/eks/cp_vpc_test.go @@ -411,6 +411,7 @@ func (f *fakeNatGatewayProvisioner) DeleteNatGateway(_ context.Context, input *e // a change to either orphans every deployed cluster from its own teardown, // stranding a billable NAT gateway and hanging DeleteCluster in DELETING. func TestCPVPCTagValuesAreFrozen(t *testing.T) { + t.Parallel() assert.Equal(t, systemvpc.Roles{ VPC: "cp-vpc", PublicSubnet: "cp-public", @@ -423,6 +424,7 @@ func TestCPVPCTagValuesAreFrozen(t *testing.T) { } func TestCPVPCSupernetIsDisjointFromOtherComponents(t *testing.T) { + t.Parallel() supernet, err := netip.ParsePrefix(cpVPCSupernet) require.NoError(t, err) assert.Equal(t, supernet.Masked(), supernet, "a supernet with host bits set is rejected by the builder") diff --git a/spinifex/handlers/eks/create_cluster_test.go b/spinifex/handlers/eks/create_cluster_test.go index 4d67488e4..c62a0dd2d 100644 --- a/spinifex/handlers/eks/create_cluster_test.go +++ b/spinifex/handlers/eks/create_cluster_test.go @@ -30,6 +30,7 @@ func createInput(name string) *eks.CreateClusterInput { // persisted on the (now FAILED) meta, otherwise the resources leak with no // owning record and DeleteCluster cannot reclaim them. func TestCreateCluster_NLBArnPersistedBeforeLaterFailure(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) // Force the K3s VM launch to fail — this is after EnsureClusterNLB and the @@ -52,6 +53,7 @@ func TestCreateCluster_NLBArnPersistedBeforeLaterFailure(t *testing.T) { // End-to-end: a failed create followed by delete-cluster leaves zero orphaned // NLB resources. The persisted ARNs from the partial create drive teardown. func TestCreateCluster_FailedCreateThenDeleteReclaimsNLB(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.inst.launchErr = errors.New("no capacity") @@ -75,6 +77,7 @@ func TestCreateCluster_FailedCreateThenDeleteReclaimsNLB(t *testing.T) { // sys.medium VMs are unrecorded and neither DeleteCluster nor the FAILED-cluster // reclaim can reach them — they leak. func TestCreateCluster_PostPlacementFailureLeavesControlPlaneRecorded(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) // Placement succeeds and launches the CP VM, then target registration fails. @@ -96,6 +99,7 @@ func TestCreateCluster_PostPlacementFailureLeavesControlPlaneRecorded(t *testing // terminate the control-plane VM the partial create launched — driven by the CP // refs the early persist recorded. func TestCreateCluster_PostPlacementFailedThenDeleteTerminatesControlPlane(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.nlb.registerErr = errors.New("TargetGroupNotFound") @@ -119,6 +123,7 @@ func TestCreateCluster_PostPlacementFailedThenDeleteTerminatesControlPlane(t *te // FAILED meta is retained for observability; purge is idempotent so a later // DeleteCluster re-purge is a no-op. func TestCreateCluster_FailedLaunchEagerlyPurgesInfra(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.inst.launchErr = errors.New("no capacity") @@ -139,6 +144,7 @@ func TestCreateCluster_FailedLaunchEagerlyPurgesInfra(t *testing.T) { // parameters must replay the in-progress/created cluster rather than launching // a second control plane (AWS ClientRequestToken semantics). func TestCreateCluster_SameTokenSameParamsReplaysInProgressCluster(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in := createInput("alpha") @@ -160,6 +166,7 @@ func TestCreateCluster_SameTokenSameParamsReplaysInProgressCluster(t *testing.T) // Reusing a ClientRequestToken with different CreateClusterInput parameters is // IdempotentParameterMismatch, not a second cluster or a silent replay. func TestCreateCluster_SameTokenDifferentParamsIsIdempotentMismatch(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in1 := createInput("alpha") @@ -181,6 +188,7 @@ func TestCreateCluster_SameTokenDifferentParamsIsIdempotentMismatch(t *testing.T // second create, not a duplicate — it must still hit the atomic name claim and // get ResourceInUse, same as with no token at all. func TestCreateCluster_DistinctTokenSameNameReturnsResourceInUse(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in1 := createInput("alpha") @@ -197,6 +205,7 @@ func TestCreateCluster_DistinctTokenSameNameReturnsResourceInUse(t *testing.T) { // A live (CREATING/ACTIVE) cluster of the same name blocks create with a // cluster-scoped ResourceInUseException, not the ELBv2 target-group message. func TestCreateCluster_ExistingClusterReturnsResourceInUse(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := sampleClusterMeta("alpha") @@ -210,6 +219,7 @@ func TestCreateCluster_ExistingClusterReturnsResourceInUse(t *testing.T) { // A FAILED cluster from a prior attempt must not block a retry: create reclaims // it (tearing down recorded resources) and proceeds to a fresh CREATING cluster. func TestCreateCluster_FailedClusterIsReclaimedOnRetry(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) // First attempt fails at VM launch, leaving a FAILED meta with NLB ARNs. @@ -238,6 +248,7 @@ func TestCreateCluster_FailedClusterIsReclaimedOnRetry(t *testing.T) { // A FAILED cluster is observable via Describe and List — no state // where create blocks but describe/list show nothing. func TestCreateCluster_FailedClusterVisibleInDescribeAndList(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := sampleClusterMeta("alpha") @@ -264,6 +275,7 @@ func TestCreateCluster_FailedClusterVisibleInDescribeAndList(t *testing.T) { // that as a ClusterHealth issue in describe-cluster, so a dead control plane is // visible behind the still-ACTIVE status . func TestDescribeCluster_SurfacesHealthIssueForActiveCluster(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := sampleClusterMeta("alpha") @@ -282,6 +294,7 @@ func TestDescribeCluster_SurfacesHealthIssueForActiveCluster(t *testing.T) { // A healthy ACTIVE cluster carries no health issue in describe-cluster. func TestDescribeCluster_HealthyActiveClusterHasNoIssues(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := sampleClusterMeta("alpha") @@ -297,6 +310,7 @@ func TestDescribeCluster_HealthyActiveClusterHasNoIssues(t *testing.T) { // launch: CreateCluster accepts the request (CREATING) and the background launch // marks the half-built cluster FAILED so the reclaim path can retry . func TestCreateCluster_MissingAMIReturnsServiceUnavailable(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.ami.describeOut = &ec2.DescribeImagesOutput{} // no images tagged managed-by=eks @@ -310,6 +324,7 @@ func TestCreateCluster_MissingAMIReturnsServiceUnavailable(t *testing.T) { } func TestCreateCluster_HappyPathPersistsActiveCreatingMeta(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) out, err := f.svc.CreateCluster(context.Background(), createInput("alpha"), testAccountID, "") @@ -329,6 +344,7 @@ func TestCreateCluster_HappyPathPersistsActiveCreatingMeta(t *testing.T) { // with a known caller principal ARN mints a system:masters AccessEntry for the // caller, keyed by their exact ARN (the token webhook looks it up by the same). func TestCreateCluster_SeedsCreatorAdminAccessEntry(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) const caller = "arn:aws:iam::111122223333:role/admin" @@ -345,6 +361,7 @@ func TestCreateCluster_SeedsCreatorAdminAccessEntry(t *testing.T) { // With the bootstrap flag explicitly false, no creator-admin entry is minted. func TestCreateCluster_SkipsCreatorAdminWhenDisabled(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) const caller = "arn:aws:iam::111122223333:role/admin" in := createInput("alpha") @@ -366,6 +383,7 @@ func TestCreateCluster_SkipsCreatorAdminWhenDisabled(t *testing.T) { // gateway (no per-cluster hidden-pool EIP), so the persisted meta carries the CP // VPC refs and the NAT gateway is provisioned exactly once. func TestCreateCluster_BuildsManagedCPVPCUnderSystemAccount(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.CreateCluster(context.Background(), createInput("setb"), testAccountID, "") @@ -407,6 +425,7 @@ func TestCreateCluster_BuildsManagedCPVPCUnderSystemAccount(t *testing.T) { // actually lives in — otherwise the tenant's own DescribeSecurityGroups can // never resolve it. fakeSubnetResolver resolves every subnet to "vpc-aaa". func TestCreateCluster_ClusterSecurityGroupCreatedInCallerVPC(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.CreateCluster(context.Background(), createInput("alpha"), testAccountID, "") @@ -435,6 +454,7 @@ func TestCreateCluster_ClusterSecurityGroupCreatedInCallerVPC(t *testing.T) { // Security groups the caller explicitly passes on CreateCluster must come back // unchanged from DescribeCluster — never substituted with platform-created ids. func TestCreateCluster_CallerSecurityGroupIdsEchoedNotOverwritten(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in := createInput("alpha") @@ -456,6 +476,7 @@ func TestCreateCluster_CallerSecurityGroupIdsEchoedNotOverwritten(t *testing.T) // platformVersion, upgradePolicy and logging immediately, without waiting on // any nodegroup — the registry module reads all of these on the bare cluster. func TestCreateCluster_DescribeSurfacesReadbackConformanceFields(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in := createInput("alpha") @@ -504,6 +525,7 @@ func TestCreateCluster_DescribeSurfacesReadbackConformanceFields(t *testing.T) { // otherwise every subsequent terraform-aws-eks plan would show a permanent // diff on access_config.authentication_mode. func TestCreateCluster_EchoesRequestedAuthenticationMode(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) in := createInput("alpha") @@ -525,6 +547,7 @@ func TestCreateCluster_EchoesRequestedAuthenticationMode(t *testing.T) { // API — the AWS default, and the only mode a record predating this field can // mean. func TestCreateCluster_UnsetAuthenticationModeDescribesAsAPI(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.CreateCluster(context.Background(), createInput("alpha"), testAccountID, "") diff --git a/spinifex/handlers/eks/delete_cluster_test.go b/spinifex/handlers/eks/delete_cluster_test.go index aadca6180..2e19e79fa 100644 --- a/spinifex/handlers/eks/delete_cluster_test.go +++ b/spinifex/handlers/eks/delete_cluster_test.go @@ -164,7 +164,7 @@ func newDeleteClusterFixture(t *testing.T, clusterName string) *deleteClusterFix func TestDeleteCluster_LeakedSGKeepsClusterDeleting(t *testing.T) { origBudget, origInterval := sgDeleteWaitBudget, sgDeleteWaitInterval sgDeleteWaitBudget, sgDeleteWaitInterval = 10*time.Millisecond, time.Millisecond - defer func() { sgDeleteWaitBudget, sgDeleteWaitInterval = origBudget, origInterval }() + t.Cleanup(func() { sgDeleteWaitBudget, sgDeleteWaitInterval = origBudget, origInterval }) f := newDeleteClusterFixture(t, "alpha") f.sg.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-cp" @@ -186,6 +186,7 @@ func TestDeleteCluster_LeakedSGKeepsClusterDeleting(t *testing.T) { // while the private route table still routes to it fails with DependencyViolation // and strands the billable NAT-GW EIP. func TestRLC5_DeleteClusterCPVPCReleasesNATGWEIPAfterRoutes(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.ngw.routeGuard = f.rt f.ngw.gws = []*fakeCPNatGateway{{ @@ -242,6 +243,7 @@ func TestRLC1_DeleteClusterCPVPCToleratesAbsentVPC(t *testing.T) { } func TestDeleteCluster_AllTeardownSucceedsSweepsKV(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") out, err := f.svc.DeleteCluster(context.Background(), deleteInput("alpha"), testAccountID) @@ -262,6 +264,7 @@ func TestDeleteCluster_AllTeardownSucceedsSweepsKV(t *testing.T) { // cluster wedges in DELETING. The fake models that in-use-until-detached semantics, // so the teardown only completes if detach precedes delete. func TestDeleteCluster_DetachesPrivateEndpointENIBeforeDelete(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") meta, err := GetClusterMeta(t.Context(), f.kv, "alpha") @@ -280,6 +283,7 @@ func TestDeleteCluster_DetachesPrivateEndpointENIBeforeDelete(t *testing.T) { } func TestDeleteCluster_NLBFailureLeavesMetaAndDELETING(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") // Seed the LB so delete is attempted, then force it to fail. @@ -300,6 +304,7 @@ func TestDeleteCluster_NLBFailureLeavesMetaAndDELETING(t *testing.T) { } func TestDeleteCluster_VMTerminateFailureLeavesMeta(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("hypervisor unreachable") @@ -315,6 +320,7 @@ func TestDeleteCluster_VMTerminateFailureLeavesMeta(t *testing.T) { // so ReleaseAddress returns InvalidAllocationID.NotFound. That is idempotent // success — teardown must complete and sweep the KV, not wedge in DELETING. func TestDeleteCluster_EgressEIPAlreadyReleasedSweepsKV(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.eip.releaseErr = errors.New(awserrors.ErrorInvalidAllocationIDNotFound) @@ -330,6 +336,7 @@ func TestDeleteCluster_EgressEIPAlreadyReleasedSweepsKV(t *testing.T) { // A genuine release failure (not a NotFound) is retryable and must still wedge // the cluster in DELETING so the billable EIP is not orphaned. func TestDeleteCluster_EgressEIPReleaseRealErrorLeavesMeta(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.eip.releaseErr = errors.New("AddressLimitExceeded") @@ -348,6 +355,7 @@ func TestDeleteCluster_EgressEIPReleaseRealErrorLeavesMeta(t *testing.T) { // without running purgeClusterInfra — no duplicate ENI/NLB/EIP teardown — and // must leave the meta for the lease holder to sweep. func TestDeleteClusterSingleFlightLoserSkipsTeardown(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") // Stand in for the winning handler: hold the teardown lease. @@ -372,6 +380,7 @@ func TestDeleteClusterSingleFlightLoserSkipsTeardown(t *testing.T) { // must release the teardown lease so a later delete or the backstop reaper can // re-acquire it (a leaked lease would wedge every future teardown until TTL). func TestDeleteClusterWinnerReleasesTeardownLease(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") _, err := f.svc.DeleteCluster(context.Background(), deleteInput("alpha"), testAccountID) @@ -382,6 +391,7 @@ func TestDeleteClusterWinnerReleasesTeardownLease(t *testing.T) { } func TestTeardownLeaseReleaseSurvivesCallerCancellation(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") ctx, cancel := context.WithCancel(t.Context()) @@ -401,6 +411,7 @@ func TestTeardownLeaseReleaseSurvivesCallerCancellation(t *testing.T) { // there too, or they orphan — cross-referencing each other — and pin the // customer VPC with DependencyViolation, hanging tofu destroy of the VPC. func TestDeleteCluster_ManagedCPVPCReclaimsCustomerVPCSGs(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") meta, err := GetClusterMeta(t.Context(), f.kv, "alpha") @@ -434,6 +445,7 @@ func TestDeleteCluster_ManagedCPVPCReclaimsCustomerVPCSGs(t *testing.T) { // single failure into the reaper's permanent "DependencyViolation" loop. A // later re-drive, once the unrelated failure clears, must then fully converge. func TestDeleteCluster_ManagedCPVPCAlreadyGoneClearsStateRecord(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") meta, err := GetClusterMeta(t.Context(), f.kv, "alpha") diff --git a/spinifex/handlers/eks/dns_reconcile_test.go b/spinifex/handlers/eks/dns_reconcile_test.go index 05e3b6c32..da7b2fa9e 100644 --- a/spinifex/handlers/eks/dns_reconcile_test.go +++ b/spinifex/handlers/eks/dns_reconcile_test.go @@ -10,6 +10,7 @@ import ( ) func TestCreateCluster_EndpointDNSNameUsesOwnerAccount(t *testing.T) { + t.Parallel() fixture := newEKSServiceFixture(t) fixture.svc.baseDomain = "spx3.net" @@ -24,6 +25,7 @@ func TestCreateCluster_EndpointDNSNameUsesOwnerAccount(t *testing.T) { } func TestDesiredDNSChanges_IncludesEndpointReadyCreatingClusters(t *testing.T) { + t.Parallel() fixture := newEKSServiceFixture(t) fixture.svc.baseDomain = "spx3.net" @@ -52,6 +54,7 @@ func TestDesiredDNSChanges_IncludesEndpointReadyCreatingClusters(t *testing.T) { } func TestDesiredDNSChanges_MetadataReadFailureIsNotAuthoritative(t *testing.T) { + t.Parallel() fixture := newEKSServiceFixture(t) fixture.svc.baseDomain = "spx3.net" @@ -73,6 +76,7 @@ func TestDesiredDNSChanges_MetadataReadFailureIsNotAuthoritative(t *testing.T) { } func TestDesiredDNSChanges_EnumerationFailureIsNotAuthoritative(t *testing.T) { + t.Parallel() fixture := newEKSServiceFixture(t) fixture.svc.baseDomain = "spx3.net" diff --git a/spinifex/handlers/eks/eks_billable_reaper_test.go b/spinifex/handlers/eks/eks_billable_reaper_test.go index 30ad1b1c4..0f4a1423c 100644 --- a/spinifex/handlers/eks/eks_billable_reaper_test.go +++ b/spinifex/handlers/eks/eks_billable_reaper_test.go @@ -39,6 +39,7 @@ func cpVM(id, eniID string) *vm.VM { // by the GC backstop — the real fix for the orphan CP VM surviving a // daemon restart after DeleteCluster swept the meta. func TestRLC5_EKSBillableReaperTerminatesOrphanCPVM(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.vpc.describeByENI = map[string]*ec2.NetworkInterface{ "eni-orphan": cpENI("eni-orphan", "gone-cluster", testAccountID), @@ -86,6 +87,7 @@ func TestRLC5_EKSBillableReaperTerminatesOrphanCPVM(t *testing.T) { // DELETING) is left to the cluster's own teardown, and a VM whose ENI is gone or // untagged is never reaped (orphan-hood cannot be confirmed). func TestRLC5_EKSBillableReaperSpareLiveAndUncertain(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) require.NoError(t, PutClusterMeta(t.Context(), f.kv, sampleClusterMeta("alive"))) diff --git a/spinifex/handlers/eks/eks_deleting_reaper_test.go b/spinifex/handlers/eks/eks_deleting_reaper_test.go index d836cfad6..488775a5b 100644 --- a/spinifex/handlers/eks/eks_deleting_reaper_test.go +++ b/spinifex/handlers/eks/eks_deleting_reaper_test.go @@ -26,6 +26,7 @@ func markDeleting(t *testing.T, f *deleteClusterFixture, name string, age time.D // client re-issued) must be re-driven to completion by the backstop reaper — // infra torn down and meta swept — so its billable EIP is never stranded. func TestRLC4_DeletingReaperReDrivesWedgedTeardown(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") markDeleting(t, f, "alpha", 10*time.Minute) @@ -43,6 +44,7 @@ func TestRLC4_DeletingReaperReDrivesWedgedTeardown(t *testing.T) { // TestDeletingReaperSkipsFreshDelete: a cluster that just entered DELETING is // within the in-flight synchronous-delete window; the reaper must not race it. func TestDeletingReaperSkipsFreshDelete(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "beta") markDeleting(t, f, "beta", 1*time.Second) // younger than min-age @@ -63,6 +65,7 @@ func TestDeletingReaperSkipsFreshDelete(t *testing.T) { // unreachable JetStream — leaving a stuck teardown holding its billable EIP with // nothing to say the sweep never looked. func TestDeletingReaper_EnumerationFailureIsReported(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "delta") markDeleting(t, f, "delta", 10*time.Minute) @@ -82,6 +85,7 @@ func TestDeletingReaper_EnumerationFailureIsReported(t *testing.T) { // the window survives a restart. No sleeping — the clock is advanced by // backdating LastDeleteReapAttempt directly. func TestDeletingReaper_BacksOffAfterFailedAttempt(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("hypervisor unreachable") markDeleting(t, f, "alpha", 10*time.Minute) @@ -126,6 +130,7 @@ func TestDeletingReaper_BacksOffAfterFailedAttempt(t *testing.T) { // invariant: an exhausted cluster must stay DELETING — its infra stays tracked // and billable — not silently vanish or move to some other status. func TestDeletingReaper_ExhaustsAfterMaxAttempts(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("permanent hypervisor failure") markDeleting(t, f, "alpha", 10*time.Minute) @@ -172,6 +177,7 @@ func TestDeletingReaper_ExhaustsAfterMaxAttempts(t *testing.T) { // checking a still-retrying cluster already sees why), and the same error must // still be there once the reaper exhausts its attempts and gives up. func TestDeletingReaper_PersistsLastErrorOnFailure(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("dependency violation: eni still attached") markDeleting(t, f, "alpha", 10*time.Minute) @@ -205,6 +211,7 @@ func TestDeletingReaper_PersistsLastErrorOnFailure(t *testing.T) { // TestDeletingReaperSkipsNonDeleting: a CREATING/ACTIVE cluster is never touched. func TestDeletingReaperSkipsNonDeleting(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "gamma") // stays CREATING reaper := f.svc.NewDeletingReaper() diff --git a/spinifex/handlers/eks/igw_test.go b/spinifex/handlers/eks/igw_test.go index 552b339ee..d1b55f6b1 100644 --- a/spinifex/handlers/eks/igw_test.go +++ b/spinifex/handlers/eks/igw_test.go @@ -106,6 +106,7 @@ func (f *fakeIGWProvisioner) seedAttached(igwID, vpcID string, tagKV ...string) } func TestEnsureClusterIGW_FreshCreatesAndAttaches(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() require.NoError(t, EnsureClusterIGW(context.Background(), f, "acct", "vpc-1", "demo")) @@ -124,6 +125,7 @@ func TestEnsureClusterIGW_FreshCreatesAndAttaches(t *testing.T) { } func TestEnsureClusterIGW_ExistingIsReusedNotRecreated(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() f.seedAttached("igw-customer", "vpc-1") // untagged, customer-provisioned @@ -134,6 +136,7 @@ func TestEnsureClusterIGW_ExistingIsReusedNotRecreated(t *testing.T) { } func TestEnsureClusterIGW_Idempotent(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() require.NoError(t, EnsureClusterIGW(context.Background(), f, "acct", "vpc-1", "demo")) require.NoError(t, EnsureClusterIGW(context.Background(), f, "acct", "vpc-1", "demo")) @@ -141,6 +144,7 @@ func TestEnsureClusterIGW_Idempotent(t *testing.T) { } func TestDeleteClusterIGW_RemovesOnlyOwned(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() f.seedAttached("igw-owned", "vpc-1", tags.ManagedByKey, tags.ManagedByEKS, clusterEKSClusterTagKey, "demo") @@ -153,6 +157,7 @@ func TestDeleteClusterIGW_RemovesOnlyOwned(t *testing.T) { } func TestDeleteClusterIGW_LeavesCustomerIGW(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() f.seedAttached("igw-customer", "vpc-1") // untagged @@ -164,6 +169,7 @@ func TestDeleteClusterIGW_LeavesCustomerIGW(t *testing.T) { } func TestDeleteClusterIGW_WrongClusterTagNotOwned(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() f.seedAttached("igw-other", "vpc-1", tags.ManagedByKey, tags.ManagedByEKS, clusterEKSClusterTagKey, "other-cluster") @@ -173,6 +179,7 @@ func TestDeleteClusterIGW_WrongClusterTagNotOwned(t *testing.T) { } func TestEnsureClusterIGW_CreateErrorPropagates(t *testing.T) { + t.Parallel() f := newFakeIGWProvisioner() f.createErr = errors.New("boom") err := EnsureClusterIGW(context.Background(), f, "acct", "vpc-1", "demo") diff --git a/spinifex/handlers/eks/k3s_ha_control_plane_test.go b/spinifex/handlers/eks/k3s_ha_control_plane_test.go index 9d7890df5..bf6195227 100644 --- a/spinifex/handlers/eks/k3s_ha_control_plane_test.go +++ b/spinifex/handlers/eks/k3s_ha_control_plane_test.go @@ -26,8 +26,8 @@ import ( // testFanoutTimeout shortens the fan-out window, which has no early exit and so // is otherwise the whole runtime of every scheduler test. The replies here are -// local and land in tens of milliseconds, well inside this. -const testFanoutTimeout = 250 * time.Millisecond +// in-process and land in a few milliseconds, well inside this. +const testFanoutTimeout = 50 * time.Millisecond // serveNodeStatus replies to spinifex.node.status fan-outs with the given node // snapshots so the NATS host scheduler can be exercised end-to-end. @@ -46,6 +46,7 @@ func serveNodeStatus(t *testing.T, nc *nats.Conn, nodes []types.NodeStatusRespon // TestNATSHostScheduler_SchedulableHosts covers both fit paths: customer types // fit on advertised per-type Available; system types fit on raw headroom. func TestNATSHostScheduler_SchedulableHosts(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) serveNodeStatus(t, nc, []types.NodeStatusResponse{ { @@ -75,6 +76,7 @@ func TestNATSHostScheduler_SchedulableHosts(t *testing.T) { // AZs as hosts, round-robin visits every AZ once before repeating any of them, // so a prefix of the result spans distinct AZs. func TestSpreadHostsByAZ_DistinctAZs(t *testing.T) { + t.Parallel() hosts := []azHost{ {node: "node-1", az: "az-a"}, {node: "node-2", az: "az-b"}, @@ -99,6 +101,7 @@ func TestSpreadHostsByAZ_DistinctAZs(t *testing.T) { // for a 3-way spread, every host is still returned and the first 2 picks land // in distinct AZs, the third necessarily repeating one. func TestSpreadHostsByAZ_FewerAZsThanHosts(t *testing.T) { + t.Parallel() hosts := []azHost{ {node: "node-1", az: "az-a"}, {node: "node-2", az: "az-a"}, @@ -116,6 +119,7 @@ func TestSpreadHostsByAZ_FewerAZsThanHosts(t *testing.T) { // every node reports the same AZ (or none at all): interleaving collapses to a // single bucket, so the original arrival order is preserved and nothing breaks. func TestSpreadHostsByAZ_UniformAZDegradesToNodeOrder(t *testing.T) { + t.Parallel() hosts := []azHost{ {node: "node-1", az: "ap-southeast-2a"}, {node: "node-2", az: "ap-southeast-2a"}, @@ -128,6 +132,7 @@ func TestSpreadHostsByAZ_UniformAZDegradesToNodeOrder(t *testing.T) { // end-to-end: node.status responses carrying distinct AZs must come back // ordered so the first haControlPlaneCount hosts span distinct AZs. func TestNATSHostScheduler_SchedulableHosts_SpreadsByAZ(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) serveNodeStatus(t, nc, []types.NodeStatusResponse{ {Node: "node-1", AZ: "az-a", InstanceTypes: []types.InstanceTypeCap{{Name: "t3.medium", Available: 1}}}, @@ -366,6 +371,7 @@ func nodeIDs(nodes []ControlPlaneNode) []string { const testHAAccountID = "111122223333" func TestPlaceControlPlane_SpreadHappyPath(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c", "node-d"}} placer := &fakePlacer{reserved: []string{"node-a", "node-b", "node-c"}} vpc := &seqK3sVPC{} @@ -403,6 +409,7 @@ func TestPlaceControlPlane_SpreadHappyPath(t *testing.T) { // the real NATS-backed HostScheduler with 4 nodes across 3 AZs, and a placer // reserving what it is offered first, as ReserveSpreadNodes does. func TestPlaceControlPlane_SpreadPrefersDistinctAZs(t *testing.T) { + t.Parallel() _, nc := testutil.StartTestNATS(t) serveNodeStatus(t, nc, []types.NodeStatusResponse{ {Node: "node-a", AZ: "az-1", TotalVCPU: 32, TotalMemGB: 128}, @@ -429,6 +436,7 @@ func TestPlaceControlPlane_SpreadPrefersDistinctAZs(t *testing.T) { } func TestPlaceControlPlane_SpreadFirstInitsRestJoin(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{reserved: []string{"node-a", "node-b", "node-c"}} vpc := &seqK3sVPC{} @@ -459,6 +467,7 @@ func TestPlaceControlPlane_SpreadFirstInitsRestJoin(t *testing.T) { } func TestPlaceControlPlane_FirstServerFailureRollsBackNoJoins(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{reserved: []string{"node-a", "node-b", "node-c"}} inst := &seqK3sInst{failNodes: map[string]bool{"node-a": true}} @@ -480,6 +489,7 @@ func TestPlaceControlPlane_FirstServerFailureRollsBackNoJoins(t *testing.T) { } func TestPlaceControlPlane_FallbackUnderThreeHosts(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b"}} placer := &fakePlacer{} inst := &seqK3sInst{} @@ -498,6 +508,7 @@ func TestPlaceControlPlane_FallbackUnderThreeHosts(t *testing.T) { } func TestPlaceControlPlane_BoundaryExactlyThree(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{} inst := &seqK3sInst{} @@ -512,6 +523,7 @@ func TestPlaceControlPlane_BoundaryExactlyThree(t *testing.T) { } func TestPlaceControlPlane_PartialLaunchRollsBack(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{reserved: []string{"node-a", "node-b", "node-c"}} inst := &seqK3sInst{failNodes: map[string]bool{"node-c": true}} @@ -530,6 +542,7 @@ func TestPlaceControlPlane_PartialLaunchRollsBack(t *testing.T) { } func TestPlaceControlPlane_ReserveFailureFallsBackToSingle(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{reserveErr: errors.New(awserrors.ErrorInsufficientInstanceCapacity)} inst := &seqK3sInst{} @@ -548,6 +561,7 @@ func TestPlaceControlPlane_ReserveFailureFallsBackToSingle(t *testing.T) { } func TestPlaceControlPlane_VerifyMismatchRollsBack(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{ hosts: []string{"node-a", "node-b", "node-c"}, wrongHost: map[string]string{"i-node-c": "node-x"}, @@ -568,6 +582,7 @@ func TestPlaceControlPlane_VerifyMismatchRollsBack(t *testing.T) { } func TestPlaceControlPlane_VerifyToleratesNotYetVisible(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{ hosts: []string{"node-a", "node-b", "node-c"}, notVisible: map[string]bool{"i-node-b": true}, @@ -586,6 +601,7 @@ func TestPlaceControlPlane_VerifyToleratesNotYetVisible(t *testing.T) { } func TestPlaceControlPlane_FinalizeFailureRollsBack(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b", "node-c"}} placer := &fakePlacer{ reserved: []string{"node-a", "node-b", "node-c"}, @@ -606,6 +622,7 @@ func TestPlaceControlPlane_FinalizeFailureRollsBack(t *testing.T) { } func TestControlPlaneTeardownNodes(t *testing.T) { + t.Parallel() multi := &ClusterMeta{ControlPlaneNodes: []ControlPlaneNode{ {NodeID: "n1", InstanceID: "i-1", ENIID: "eni-1"}, {NodeID: "n2", InstanceID: "i-2", ENIID: "eni-2"}, @@ -628,6 +645,7 @@ func TestControlPlaneTeardownNodes(t *testing.T) { } func TestTeardownSpreadGroup(t *testing.T) { + t.Parallel() placer := &fakePlacer{} svc := &EKSServiceImpl{deps: EKSServiceDeps{PlacementGroup: placer}} meta := &ClusterMeta{ @@ -690,6 +708,7 @@ func TestNodeFitsSystemInstance(t *testing.T) { } func TestSpecForSystemType_RejectsNonSystem(t *testing.T) { + t.Parallel() _, _, ok := instancetypes.SpecForSystemType("t3.medium") assert.False(t, ok, "customer types are not system types") _, _, ok = instancetypes.SpecForSystemType("sys.nonexistent") @@ -697,6 +716,7 @@ func TestSpecForSystemType_RejectsNonSystem(t *testing.T) { } func TestProvisionFreshControlPlane_ClusterInitNoJoin(t *testing.T) { + t.Parallel() sched := &fakeHostScheduler{hosts: []string{"node-a", "node-b"}} inst := &seqK3sInst{} svc := newPlacerService(sched, &fakePlacer{}, &seqK3sVPC{}, inst) @@ -724,6 +744,7 @@ func TestProvisionFreshControlPlane_ClusterInitNoJoin(t *testing.T) { } func TestProvisionFreshControlPlane_NoFreeHostErrors(t *testing.T) { + t.Parallel() // Two hosts, both excluded: genuinely nothing schedulable. A single // excluded host is covered separately since that falls back to it // (single-node topology). @@ -744,6 +765,7 @@ func TestProvisionFreshControlPlane_NoFreeHostErrors(t *testing.T) { } func TestProvisionFreshControlPlane_SingleHostFallsBack(t *testing.T) { + t.Parallel() // Single-node deployment: the only schedulable host is also the excluded // (old CP) host. pickReplacementHost falls back to it rather than erroring. sched := &fakeHostScheduler{hosts: []string{"node-a"}} @@ -763,6 +785,7 @@ func TestProvisionFreshControlPlane_SingleHostFallsBack(t *testing.T) { } func TestProvisionFreshControlPlane_NilTemplateRejected(t *testing.T) { + t.Parallel() svc := newPlacerService(&fakeHostScheduler{}, &fakePlacer{}, &seqK3sVPC{}, &seqK3sInst{}) _, err := svc.ProvisionFreshControlPlane(context.Background(), FreshCPRequest{ClusterName: "alpha"}) require.Error(t, err, "nil template rejected") diff --git a/spinifex/handlers/eks/k3s_server_role_test.go b/spinifex/handlers/eks/k3s_server_role_test.go index 4bb22ee0d..d6a8e523d 100644 --- a/spinifex/handlers/eks/k3s_server_role_test.go +++ b/spinifex/handlers/eks/k3s_server_role_test.go @@ -16,6 +16,7 @@ const testSysAcct = "000000000000" // role is created with the EC2 trust policy, carries the internal gateway // permissions, and its instance profile is returned for launch attachment. func TestEnsureK3sServerInstanceProfile_CreatesRolePolicyProfile(t *testing.T) { + t.Parallel() f := newFakeEnsurer() s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -46,6 +47,7 @@ func TestEnsureK3sServerInstanceProfile_CreatesRolePolicyProfile(t *testing.T) { // against a pre-existing role does not re-create it but still re-asserts the // inline policy so a stale role converges onto the current permissions. func TestEnsureK3sServerInstanceProfile_ExistingRoleConverges(t *testing.T) { + t.Parallel() f := newFakeEnsurer() f.Roles[CPInstanceRoleName] = &iam.Role{ RoleName: aws.String(CPInstanceRoleName), @@ -62,6 +64,7 @@ func TestEnsureK3sServerInstanceProfile_ExistingRoleConverges(t *testing.T) { // TestEnsureCPInstanceProfile_NilIAMFallsBack asserts an unwired IAM service // yields "" so the caller falls back to baked static creds rather than failing. func TestEnsureCPInstanceProfile_NilIAMFallsBack(t *testing.T) { + t.Parallel() s := &EKSServiceImpl{deps: EKSServiceDeps{}} assert.Empty(t, s.ensureCPInstanceProfile(testSysAcct)) } @@ -70,6 +73,7 @@ func TestEnsureCPInstanceProfile_NilIAMFallsBack(t *testing.T) { // via the lazily-resolved IAMProvider when the eager deps.IAM is unset — the // daemon wires only the provider so the build cannot race the NATS KV backend. func TestEnsureCPInstanceProfile_UsesLazyProvider(t *testing.T) { + t.Parallel() f := newFakeEnsurer() s := &EKSServiceImpl{deps: EKSServiceDeps{ IAMProvider: func() handlers_iam.SystemInstanceRoleEnsurer { return f }, @@ -83,6 +87,7 @@ func TestEnsureCPInstanceProfile_UsesLazyProvider(t *testing.T) { // returns nil (NATS KV backend not yet up) yields "" so the launch falls back to // static creds and retries on the next call rather than bricking the cluster. func TestEnsureCPInstanceProfile_ProviderNotReadyFallsBack(t *testing.T) { + t.Parallel() s := &EKSServiceImpl{deps: EKSServiceDeps{ IAMProvider: func() handlers_iam.SystemInstanceRoleEnsurer { return nil }, }} @@ -93,6 +98,7 @@ func TestEnsureCPInstanceProfile_ProviderNotReadyFallsBack(t *testing.T) { // ships with is exactly the EC2 service-principal shape AssumeRoleForInstance // matches; a drift here silently breaks IMDS credential minting. func TestEKSServerTrustPolicyIsAssumable(t *testing.T) { + t.Parallel() assert.Contains(t, handlers_iam.EC2InstanceTrustPolicy, `"Service":"ec2.amazonaws.com"`) assert.Contains(t, handlers_iam.EC2InstanceTrustPolicy, `"Action":"sts:AssumeRole"`) } diff --git a/spinifex/handlers/eks/k3s_server_vm_test.go b/spinifex/handlers/eks/k3s_server_vm_test.go index 2b3b408b3..ecc466c73 100644 --- a/spinifex/handlers/eks/k3s_server_vm_test.go +++ b/spinifex/handlers/eks/k3s_server_vm_test.go @@ -226,6 +226,7 @@ func TestLaunchK3sServerVM_EmptyInputsRejected(t *testing.T) { } func TestValidateK3sServerInput_ProfileOnlyAccepted(t *testing.T) { + t.Parallel() in := validK3sInput() in.AccessKey = "" in.SecretKey = "" @@ -234,6 +235,7 @@ func TestValidateK3sServerInput_ProfileOnlyAccepted(t *testing.T) { } func TestValidateK3sServerInput_NoCredsNoProfileRejected(t *testing.T) { + t.Parallel() in := validK3sInput() in.AccessKey = "" in.SecretKey = "" @@ -241,12 +243,14 @@ func TestValidateK3sServerInput_NoCredsNoProfileRejected(t *testing.T) { } func TestBuildK3sUserData_StaticCredsBakeKeys(t *testing.T) { + t.Parallel() ud := buildK3sUserData(validK3sInput()) assert.Contains(t, ud, "EKS_ACCESS_KEY=AKIAEXAMPLE") assert.Contains(t, ud, "EKS_SECRET_KEY=s3cr3t-key") } func TestBuildK3sUserData_WritesEtcdSnapshotEnv(t *testing.T) { + t.Parallel() ud := buildK3sUserData(validK3sInput()) require.Contains(t, ud, "path: "+k3sSnapshotEnvPath) assert.Contains(t, ud, "EKS_ACCOUNT_ID=111122223333") @@ -257,6 +261,7 @@ func TestBuildK3sUserData_WritesEtcdSnapshotEnv(t *testing.T) { } func TestBuildK3sUserData_ProfileModeOmitsKeys(t *testing.T) { + t.Parallel() in := validK3sInput() in.AccessKey = "" in.SecretKey = "" @@ -269,6 +274,7 @@ func TestBuildK3sUserData_ProfileModeOmitsKeys(t *testing.T) { } func TestLaunchK3sServerVM_AMINotFound(t *testing.T) { + t.Parallel() vpc, inst := &fakeK3sVPC{}, &fakeK3sInst{} ami := &fakeK3sAMI{describeOut: &ec2.DescribeImagesOutput{}} @@ -280,6 +286,7 @@ func TestLaunchK3sServerVM_AMINotFound(t *testing.T) { } func TestLaunchK3sServerVM_AMILookupErrorPropagated(t *testing.T) { + t.Parallel() vpc, inst := &fakeK3sVPC{}, &fakeK3sInst{} ami := &fakeK3sAMI{describeErr: errors.New("DescribeImages backend down")} @@ -291,6 +298,7 @@ func TestLaunchK3sServerVM_AMILookupErrorPropagated(t *testing.T) { } func TestLaunchK3sServerVM_ENICreateFailureNoRunInstances(t *testing.T) { + t.Parallel() vpc := &fakeK3sVPC{createErr: errors.New("InsufficientFreeAddressesInSubnet")} inst, ami := &fakeK3sInst{}, &fakeK3sAMI{} @@ -302,6 +310,7 @@ func TestLaunchK3sServerVM_ENICreateFailureNoRunInstances(t *testing.T) { } func TestLaunchK3sServerVM_RunInstancesFailureRollsBackENI(t *testing.T) { + t.Parallel() vpc := &fakeK3sVPC{} inst := &fakeK3sInst{launchErr: errors.New("InsufficientInstanceCapacity")} ami := &fakeK3sAMI{} @@ -314,6 +323,7 @@ func TestLaunchK3sServerVM_RunInstancesFailureRollsBackENI(t *testing.T) { } func TestLaunchK3sServerVM_HappyPath(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} out, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -347,6 +357,7 @@ func TestLaunchK3sServerVM_HappyPath(t *testing.T) { } func TestLaunchK3sServerVM_HonorsCustomInstanceType(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} in := validK3sInput() in.InstanceType = "t3.large" @@ -358,6 +369,7 @@ func TestLaunchK3sServerVM_HonorsCustomInstanceType(t *testing.T) { } func TestLaunchK3sServerVM_DefaultsToSystemInstanceType(t *testing.T) { + t.Parallel() // The control-plane VM defaults to a sys.* type so the daemon registers the // node-targeted system.LaunchInstance subject the HA spread path depends on. assert.Equal(t, "sys.medium", defaultK3sServerInstanceType) @@ -370,6 +382,7 @@ func TestLaunchK3sServerVM_DefaultsToSystemInstanceType(t *testing.T) { } func TestLaunchK3sServerVM_NoTargetNodeLaunchesLocal(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} _, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -379,6 +392,7 @@ func TestLaunchK3sServerVM_NoTargetNodeLaunchesLocal(t *testing.T) { } func TestLaunchK3sServerVM_TargetNodeIDRoutedToLauncher(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} in := validK3sInput() in.TargetNodeID = "node-c" @@ -390,6 +404,7 @@ func TestLaunchK3sServerVM_TargetNodeIDRoutedToLauncher(t *testing.T) { } func TestBuildK3sUserData_TLSSANIncludesPrivateEndpointIP(t *testing.T) { + t.Parallel() in := validK3sInput() in.EndpointIP = "203.0.113.9" in.PrivateEndpointIP = "10.20.0.5" @@ -401,6 +416,7 @@ func TestBuildK3sUserData_TLSSANIncludesPrivateEndpointIP(t *testing.T) { } func TestBuildK3sUserData_TLSSANDedupsWhenPrivateEqualsEndpoint(t *testing.T) { + t.Parallel() in := validK3sInput() in.EndpointIP = "10.20.0.5" in.PrivateEndpointIP = "10.20.0.5" @@ -410,6 +426,7 @@ func TestBuildK3sUserData_TLSSANDedupsWhenPrivateEqualsEndpoint(t *testing.T) { } func TestBuildK3sUserData_AdvertiseAddressPrefersPrivateEndpoint(t *testing.T) { + t.Parallel() in := validK3sInput() in.EndpointIP = "203.0.113.9" in.PrivateEndpointIP = "10.20.0.5" @@ -421,6 +438,7 @@ func TestBuildK3sUserData_AdvertiseAddressPrefersPrivateEndpoint(t *testing.T) { } func TestBuildK3sUserData_AdvertiseAddressFallsBackToEndpoint(t *testing.T) { + t.Parallel() in := validK3sInput() in.EndpointIP = "203.0.113.9" in.PrivateEndpointIP = "" @@ -430,6 +448,7 @@ func TestBuildK3sUserData_AdvertiseAddressFallsBackToEndpoint(t *testing.T) { } func TestBuildK3sUserData_EgressSelectorDisabledWithKonnConfig(t *testing.T) { + t.Parallel() ud := buildK3sUserData(validK3sInput()) assert.Contains(t, ud, "egress-selector-mode: disabled", "k3s remotedialer is off; the apiserver egress rides upstream konnectivity") @@ -441,6 +460,7 @@ func TestBuildK3sUserData_EgressSelectorDisabledWithKonnConfig(t *testing.T) { } func TestEgressSelectorConfigYAML_TunnelsClusterOnly(t *testing.T) { + t.Parallel() cfg := egressSelectorConfigYAML() // The authentication token webhook listens on 127.0.0.1 on this node and is @@ -455,6 +475,7 @@ func TestEgressSelectorConfigYAML_TunnelsClusterOnly(t *testing.T) { } func TestBuildK3sUserData_KonnectivityEnv(t *testing.T) { + t.Parallel() in := validK3sInput() in.PrivateEndpointIP = "10.32.100.4" in.EndpointIP = "203.0.113.9" @@ -469,6 +490,7 @@ func TestBuildK3sUserData_KonnectivityEnv(t *testing.T) { } func TestBuildK3sUserData_KonnServerCountDefaultsToOne(t *testing.T) { + t.Parallel() in := validK3sInput() in.KonnServerCount = 0 ud := buildK3sUserData(in) @@ -477,6 +499,7 @@ func TestBuildK3sUserData_KonnServerCountDefaultsToOne(t *testing.T) { } func TestLaunchK3sServerVM_SingleControlPlaneENI(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} _, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -487,6 +510,7 @@ func TestLaunchK3sServerVM_SingleControlPlaneENI(t *testing.T) { } func TestLaunchK3sServerVM_UserDataContainsAllArtifacts(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} _, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -582,6 +606,7 @@ func TestLaunchK3sServerVM_UserDataContainsAllArtifacts(t *testing.T) { } func TestLaunchK3sServerVM_UsesEmbeddedEtcd(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} _, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -596,6 +621,7 @@ func TestLaunchK3sServerVM_UsesEmbeddedEtcd(t *testing.T) { } func TestLaunchK3sServerVM_FirstServerTokenNoServerURL(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} in := validK3sInput() @@ -614,6 +640,7 @@ func TestLaunchK3sServerVM_FirstServerTokenNoServerURL(t *testing.T) { } func TestLaunchK3sServerVM_JoinServerRendersServerAndJoinRole(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} in := validK3sInput() @@ -634,6 +661,7 @@ func TestLaunchK3sServerVM_JoinServerRendersServerAndJoinRole(t *testing.T) { } func TestLaunchK3sServerVM_JoinServerRequiresToken(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} in := validK3sInput() @@ -646,6 +674,7 @@ func TestLaunchK3sServerVM_JoinServerRequiresToken(t *testing.T) { } func TestGenerateK3sClusterToken_UniqueHex(t *testing.T) { + t.Parallel() a, err := GenerateK3sClusterToken() require.NoError(t, err) b, err := GenerateK3sClusterToken() @@ -655,10 +684,12 @@ func TestGenerateK3sClusterToken_UniqueHex(t *testing.T) { } func TestK3sServerJoinURL(t *testing.T) { + t.Parallel() assert.Equal(t, "https://10.0.1.7:6443", k3sServerJoinURL("10.0.1.7")) } func TestLaunchK3sServerVM_RunInstancesEmptyReservationRollsBack(t *testing.T) { + t.Parallel() vpc, ami := &fakeK3sVPC{}, &fakeK3sAMI{} inst := &fakeK3sInst{launchOut: &systeminstance.SystemInstanceOutput{}} @@ -669,6 +700,7 @@ func TestLaunchK3sServerVM_RunInstancesEmptyReservationRollsBack(t *testing.T) { } func TestLaunchK3sServerVM_AMIFilterShape(t *testing.T) { + t.Parallel() vpc, inst, ami := &fakeK3sVPC{}, &fakeK3sInst{}, &fakeK3sAMI{} _, err := LaunchK3sServerVM(context.Background(), vpc, inst, ami, validK3sInput()) @@ -681,6 +713,7 @@ func TestLaunchK3sServerVM_AMIFilterShape(t *testing.T) { } func TestTerminateK3sServerVM_BothNoopOnEmpty(t *testing.T) { + t.Parallel() vpc, inst := &fakeK3sVPC{}, &fakeK3sInst{} require.NoError(t, TerminateK3sServerVM(context.Background(), vpc, inst, "111122223333", "", "")) @@ -689,6 +722,7 @@ func TestTerminateK3sServerVM_BothNoopOnEmpty(t *testing.T) { } func TestTerminateK3sServerVM_TerminatesInstanceAndDeletesENI(t *testing.T) { + t.Parallel() vpc, inst := &fakeK3sVPC{}, &fakeK3sInst{} require.NoError(t, TerminateK3sServerVM(context.Background(), vpc, inst, "111122223333", "i-aaa111", "eni-aaa111")) @@ -702,6 +736,7 @@ func TestTerminateK3sServerVM_TerminatesInstanceAndDeletesENI(t *testing.T) { } func TestTerminateK3sServerVM_InstanceErrorReturnedENIStillDeleted(t *testing.T) { + t.Parallel() vpc := &fakeK3sVPC{} inst := &fakeK3sInst{terminateErr: errors.New("IncorrectInstanceState")} @@ -712,6 +747,7 @@ func TestTerminateK3sServerVM_InstanceErrorReturnedENIStillDeleted(t *testing.T) } func TestTerminateK3sServerVM_ENINotFoundIsIdempotent(t *testing.T) { + t.Parallel() // A retried delete-cluster after the instance-terminate cascade already // removed the ENI: DeleteNetworkInterface returns NotFound. This must be // treated as success so the SG + KV sweep downstream is not blocked. @@ -724,6 +760,7 @@ func TestTerminateK3sServerVM_ENINotFoundIsIdempotent(t *testing.T) { } func TestTerminateK3sServerVM_ENIInUseDetachedThenDeletes(t *testing.T) { + t.Parallel() // The ENI record still shows the attachment (VM gone but // fields never cleared), so a plain force=false delete returns InUse forever // and wedges EKSDeletingReaper. Teardown owns the ENI: detach clears the @@ -738,6 +775,7 @@ func TestTerminateK3sServerVM_ENIInUseDetachedThenDeletes(t *testing.T) { } func TestTerminateK3sServerVM_ENIDeleteErrorSurfaces(t *testing.T) { + t.Parallel() // A real delete failure (not NotFound) must surface so the teardown backstop // retries rather than silently stranding the ENI. vpc := &fakeK3sVPC{deleteErr: errors.New(awserrors.ErrorInvalidNetworkInterfaceInUse)} @@ -749,6 +787,7 @@ func TestTerminateK3sServerVM_ENIDeleteErrorSurfaces(t *testing.T) { } func TestTerminateK3sServerVM_InstanceAlreadyGoneIsIdempotent(t *testing.T) { + t.Parallel() // On a reconciler retry the VM already drained, so TerminateSystemInstance // returns ErrSystemInstanceNotFound. This must not block teardown; the ENI // delete still runs. @@ -773,6 +812,7 @@ func gpuAMIImage(id, created, vendor string) *ec2.Image { } func TestLookupEKSGPUNodeAMI_SelectsGPUTaggedAMI(t *testing.T) { + t.Parallel() ami := &fakeK3sAMI{describeOut: &ec2.DescribeImagesOutput{ Images: []*ec2.Image{gpuAMIImage("ami-gpu-001", "2026-06-01T00:00:00.000Z", tags.GPUVendorNVIDIA)}, }} @@ -791,6 +831,7 @@ func TestLookupEKSGPUNodeAMI_SelectsGPUTaggedAMI(t *testing.T) { } func TestLookupEKSGPUNodeAMI_NoGPUAMINoFallback(t *testing.T) { + t.Parallel() // Only a plain (non-GPU) eks AMI resolves; the GPU lookup must error, never // fall back to the driverless image. ami := &fakeK3sAMI{describeOut: &ec2.DescribeImagesOutput{}} @@ -801,6 +842,7 @@ func TestLookupEKSGPUNodeAMI_NoGPUAMINoFallback(t *testing.T) { } func TestLookupEKSGPUNodeAMI_NewestCreationDateWins(t *testing.T) { + t.Parallel() ami := &fakeK3sAMI{describeOut: &ec2.DescribeImagesOutput{ Images: []*ec2.Image{ gpuAMIImage("ami-gpu-old", "2026-01-01T00:00:00.000Z", tags.GPUVendorNVIDIA), @@ -815,6 +857,7 @@ func TestLookupEKSGPUNodeAMI_NewestCreationDateWins(t *testing.T) { } func TestLookupEKSServerAMI_NewestCreationDateWins(t *testing.T) { + t.Parallel() ami := &fakeK3sAMI{describeOut: &ec2.DescribeImagesOutput{ Images: []*ec2.Image{ {ImageId: aws.String("ami-old"), CreationDate: aws.String("2026-01-01T00:00:00.000Z"), @@ -830,6 +873,7 @@ func TestLookupEKSServerAMI_NewestCreationDateWins(t *testing.T) { } func TestLookupEKSServerAMI_ExcludesGPUTaggedAMI(t *testing.T) { + t.Parallel() // The GPU node AMI also carries managed-by=eks, so a managed-by DescribeImages // returns it too. Even when it is newer, the plain server/worker lookup must // skip it — otherwise ordinary nodes would boot the heavy driverless-mismatch diff --git a/spinifex/handlers/eks/lifecycle_invariants_test.go b/spinifex/handlers/eks/lifecycle_invariants_test.go index 64871646f..276613bb6 100644 --- a/spinifex/handlers/eks/lifecycle_invariants_test.go +++ b/spinifex/handlers/eks/lifecycle_invariants_test.go @@ -18,6 +18,7 @@ import ( // the run. The live-reference teardown is unaffected — only true absence is // idempotent. func TestRLC1_EKSDeleteClusterIdempotentOnAbsent(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) out, err := f.svc.DeleteCluster(context.Background(), deleteInput("absent"), testAccountID) @@ -33,6 +34,7 @@ func TestRLC1_EKSDeleteClusterIdempotentOnAbsent(t *testing.T) { // intact for a retry — never erased out from under a still-running billable VM. // Regression guard for the errors.Join-before-sweep ordering in purgeClusterInfra. func TestRLC2_EKSBillableTeardownBeforeKVSweep(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("hypervisor unreachable") @@ -51,6 +53,7 @@ func TestRLC2_EKSBillableTeardownBeforeKVSweep(t *testing.T) { // orphaned EKS NLB target group would pin itself as ResourceInUse exactly as a // user target group does. func TestRLC3_EKSNLBNoOrphanTargetGroupAfterDelete(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") lbName := ClusterNLBName("alpha") diff --git a/spinifex/handlers/eks/list_clusters_test.go b/spinifex/handlers/eks/list_clusters_test.go index cd715945d..43ad2801a 100644 --- a/spinifex/handlers/eks/list_clusters_test.go +++ b/spinifex/handlers/eks/list_clusters_test.go @@ -18,6 +18,7 @@ import ( // paging path end-to-end: each page honours MaxResults, hands back a NextToken // pointing at the next name, and the final page carries no token. func TestEKSServiceImpl_ListClustersPagination(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) for _, n := range []string{"c01", "c02", "c03", "c04", "c05"} { require.NoError(t, PutClusterMeta(t.Context(), f.kv, sampleClusterMeta(n))) @@ -45,6 +46,7 @@ func TestEKSServiceImpl_ListClustersPagination(t *testing.T) { // MaxResults (zero, negative, or above the 100 ceiling) clamps to a single full // page rather than truncating or erroring. func TestEKSServiceImpl_ListClustersMaxResultsClamped(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) want := []string{"c01", "c02", "c03"} for _, n := range want { @@ -65,6 +67,7 @@ func TestEKSServiceImpl_ListClustersMaxResultsClamped(t *testing.T) { // to InternalError). Regression guard for list-clusters returning a misleading // 500 during the KV warmup window. func TestEKSReadUnavailableClassification(t *testing.T) { + t.Parallel() transient := []error{ nats.ErrNoResponders, nats.ErrTimeout, diff --git a/spinifex/handlers/eks/nats_bootstrap_test.go b/spinifex/handlers/eks/nats_bootstrap_test.go index 86cb1ac4b..367179728 100644 --- a/spinifex/handlers/eks/nats_bootstrap_test.go +++ b/spinifex/handlers/eks/nats_bootstrap_test.go @@ -83,6 +83,7 @@ func (h *natsBootstrapHarness) waitSubsBound(base, want int) { } func TestNewNATSBootstrap_RejectsBadInputs(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) kv, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -101,6 +102,7 @@ func TestNewNATSBootstrap_RejectsBadInputs(t *testing.T) { } func TestNATSBootstrap_HappyPath(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -152,6 +154,7 @@ func TestNATSBootstrap_HappyPath(t *testing.T) { } func TestNATSBootstrap_ContextCancelReturnsErr(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithCancel(context.Background()) @@ -171,6 +174,7 @@ func TestNATSBootstrap_ContextCancelReturnsErr(t *testing.T) { } func TestNATSBootstrap_JWKSMismatchReturnsErr(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() @@ -194,6 +198,7 @@ func TestNATSBootstrap_JWKSMismatchReturnsErr(t *testing.T) { } func TestAssertJWKSMatch_RejectsKtyMismatch(t *testing.T) { + t.Parallel() // Same kid as the controller key, but RSA instead of EC — a published key // that cannot be the one the controller distributed despite the kid // collision. Must be rejected. @@ -207,11 +212,13 @@ func TestAssertJWKSMatch_RejectsKtyMismatch(t *testing.T) { } func TestAssertJWKSMatch_AcceptsMatchingKidAndKty(t *testing.T) { + t.Parallel() jwks := []byte(`{"keys":[{"kty":"EC","kid":"abc","crv":"P-256","x":"AAA","y":"BBB"}]}`) require.NoError(t, assertJWKSMatch(jwks, jwks)) } func TestNATSBootstrap_EmptyEnvelopeFieldsRejected(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() @@ -233,6 +240,7 @@ func TestNATSBootstrap_EmptyEnvelopeFieldsRejected(t *testing.T) { } func TestNATSBootstrap_OneShotIgnoresSubsequentMessages(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -276,6 +284,7 @@ func TestNATSBootstrap_OneShotIgnoresSubsequentMessages(t *testing.T) { } func TestNATSBootstrap_CANotBase64Rejected(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() @@ -336,6 +345,7 @@ func TestPersistWithRetry(t *testing.T) { } func TestBootstrapPendingKinds(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) meta, err := GetClusterMeta(t.Context(), h.kv, bootstrapTestCluster) @@ -372,6 +382,7 @@ func TestBootstrapPendingKinds(t *testing.T) { } func TestNATSBootstrap_RunForKindsWaitsOnlyForSubset(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -400,6 +411,7 @@ func TestNATSBootstrap_RunForKindsWaitsOnlyForSubset(t *testing.T) { } func TestNATSBootstrap_RunForKindsRejectsUnknownKind(t *testing.T) { + t.Parallel() h := newBootstrapHarness(t) err := h.subscriber.RunForKinds(context.Background(), []string{"bogus-kind"}) require.Error(t, err) @@ -407,6 +419,7 @@ func TestNATSBootstrap_RunForKindsRejectsUnknownKind(t *testing.T) { } func TestBootstrapSubject_Shape(t *testing.T) { + t.Parallel() got := BootstrapSubject("111122223333", "alpha", BootstrapSubjectToken) assert.Equal(t, "eks.bus.111122223333.alpha.k3s-bootstrap-token", got) assert.True(t, strings.HasPrefix(got, "eks.bus.")) diff --git a/spinifex/handlers/eks/nlb_test.go b/spinifex/handlers/eks/nlb_test.go index 392ac8fec..d8450aefb 100644 --- a/spinifex/handlers/eks/nlb_test.go +++ b/spinifex/handlers/eks/nlb_test.go @@ -293,6 +293,7 @@ func (f *fakeNLBProvisioner) SetLoadBalancerIngressCIDRs(lbArn string, cidrs []s } func TestEnsureClusterNLB_EmptyInputsRejected(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() _, err := EnsureClusterNLB(context.Background(), nlbp, "111122223333", "", []string{"subnet-aaa"}, false, nil, nil) @@ -305,6 +306,7 @@ func TestEnsureClusterNLB_EmptyInputsRejected(t *testing.T) { } func TestEnsureClusterNLB_LongNameTruncatedDeterministically(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() longName := strings.Repeat("x", maxELBv2NameLen) // "eks-" + 32x = 36 chars, over the ELBv2 limit @@ -333,6 +335,7 @@ func TestEnsureClusterNLB_LongNameTruncatedDeterministically(t *testing.T) { } func TestSafeELBv2Name(t *testing.T) { + t.Parallel() short := ClusterNLBName("alpha") assert.Equal(t, "eks-alpha", short) @@ -348,6 +351,7 @@ func TestSafeELBv2Name(t *testing.T) { } func TestEnsureClusterNLB_FreshCreatesAllThree(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() out, err := EnsureClusterNLB(context.Background(), nlbp, "111122223333", "alpha", []string{"subnet-aaa", "subnet-bbb"}, false, nil, nil) @@ -404,6 +408,7 @@ func TestEnsureClusterNLB_FreshCreatesAllThree(t *testing.T) { } func TestEnsureClusterNLB_NoFrontendIPFailsLoud(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.frontendIP = "" // no external IP pool → LB comes up without a reachable address @@ -415,6 +420,7 @@ func TestEnsureClusterNLB_NoFrontendIPFailsLoud(t *testing.T) { } func TestEnsureClusterNLB_InternetFacingUsesPublicAddress(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.frontendIP = "203.0.113.7" @@ -426,6 +432,7 @@ func TestEnsureClusterNLB_InternetFacingUsesPublicAddress(t *testing.T) { } func TestEnsureClusterNLB_IdempotentReusesExisting(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() first, err := EnsureClusterNLB(context.Background(), nlbp, "111122223333", "alpha", []string{"subnet-aaa"}, false, nil, nil) @@ -449,6 +456,7 @@ func TestEnsureClusterNLB_IdempotentReusesExisting(t *testing.T) { } func TestEnsureClusterNLB_LBCreateErrorSurfaced(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.createLBErr = errors.New("InsufficientCapacity") @@ -459,6 +467,7 @@ func TestEnsureClusterNLB_LBCreateErrorSurfaced(t *testing.T) { } func TestEnsureClusterNLB_InternetFacingSchemeAndPublicFrontendIP(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() // Internet-facing LB record exposes a public IpAddress in its AZ addresses. arn := "arn:aws:elasticloadbalancing:us-east-1:111122223333:loadbalancer/net/eks-alpha/lb-001" @@ -486,6 +495,7 @@ func TestEnsureClusterNLB_InternetFacingSchemeAndPublicFrontendIP(t *testing.T) } func TestEnsureClusterNLB_InternalSchemeUsesPrivateFrontendIP(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() arn := "arn:aws:elasticloadbalancing:us-east-1:111122223333:loadbalancer/net/eks-alpha/lb-001" nlbp.createLBOut = &elbv2.CreateLoadBalancerOutput{ @@ -511,6 +521,7 @@ func TestEnsureClusterNLB_InternalSchemeUsesPrivateFrontendIP(t *testing.T) { } func TestEnsureClusterNLB_NarrowedPublicAccessSetsIngressCIDRs(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() cidrs := []string{"203.0.113.0/24", "198.51.100.7/32"} @@ -541,6 +552,7 @@ func TestEnsureClusterNLB_DefaultPublicAccessSkipsIngressCIDRs(t *testing.T) { } func TestEnsureClusterNLB_InternalSkipsIngressCIDRs(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() // Even with narrowed CIDRs, an internal NLB ignores them — its ingress @@ -551,6 +563,7 @@ func TestEnsureClusterNLB_InternalSkipsIngressCIDRs(t *testing.T) { } func TestEnsureClusterNLB_SetIngressErrorSurfaced(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.setIngressErr = errors.New("InvalidLoadBalancer") @@ -560,6 +573,7 @@ func TestEnsureClusterNLB_SetIngressErrorSurfaced(t *testing.T) { } func TestRegisterClusterTarget_PostsENIIPAndAPIPort(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() err := RegisterClusterTarget(context.Background(), nlbp, "111122223333", "arn:tg/alpha", "10.0.1.42", k3sAPIServerPort) @@ -574,6 +588,7 @@ func TestRegisterClusterTarget_PostsENIIPAndAPIPort(t *testing.T) { } func TestRegisterClusterTarget_EmptyInputsRejected(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() require.Error(t, RegisterClusterTarget(context.Background(), nlbp, "111122223333", "", "10.0.1.42", k3sAPIServerPort)) require.Error(t, RegisterClusterTarget(context.Background(), nlbp, "111122223333", "arn:tg/alpha", "", k3sAPIServerPort)) @@ -581,6 +596,7 @@ func TestRegisterClusterTarget_EmptyInputsRejected(t *testing.T) { } func TestRegisterClusterTargets_RegistersEveryENIIPInOneCall(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() err := RegisterClusterTargets(context.Background(), nlbp, "111122223333", "arn:tg/alpha", @@ -598,6 +614,7 @@ func TestRegisterClusterTargets_RegistersEveryENIIPInOneCall(t *testing.T) { } func TestRegisterClusterTargets_SkipsEmptyIPs(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() err := RegisterClusterTargets(context.Background(), nlbp, "111122223333", "arn:tg/alpha", @@ -610,6 +627,7 @@ func TestRegisterClusterTargets_SkipsEmptyIPs(t *testing.T) { } func TestRegisterClusterTargets_EmptyInputsRejected(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() require.Error(t, RegisterClusterTargets(context.Background(), nlbp, "111122223333", "", []string{"10.0.1.10"}, k3sAPIServerPort)) require.Error(t, RegisterClusterTargets(context.Background(), nlbp, "111122223333", "arn:tg/alpha", nil, k3sAPIServerPort)) @@ -618,6 +636,7 @@ func TestRegisterClusterTargets_EmptyInputsRejected(t *testing.T) { } func TestRegisterClusterTargets_RegisterErrorSurfaced(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.registerErr = errors.New("TargetGroupNotFound") @@ -627,6 +646,7 @@ func TestRegisterClusterTargets_RegisterErrorSurfaced(t *testing.T) { } func TestDeregisterClusterTarget_PostsENIIPAndAPIPort(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() err := DeregisterClusterTarget(context.Background(), nlbp, "111122223333", "arn:tg/alpha", "10.0.1.42", k3sAPIServerPort) @@ -641,6 +661,7 @@ func TestDeregisterClusterTarget_PostsENIIPAndAPIPort(t *testing.T) { } func TestDeleteClusterNLB_DeletesBoth(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() out, err := EnsureClusterNLB(context.Background(), nlbp, "111122223333", "alpha", []string{"subnet-aaa"}, false, nil, nil) require.NoError(t, err) @@ -658,6 +679,7 @@ func TestDeleteClusterNLB_DeletesBoth(t *testing.T) { } func TestDeleteClusterNLB_MissingResourcesNoOp(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() require.NoError(t, DeleteClusterNLB(context.Background(), nlbp, "111122223333", "alpha")) @@ -666,6 +688,7 @@ func TestDeleteClusterNLB_MissingResourcesNoOp(t *testing.T) { } func TestDeleteClusterNLB_FirstErrorSurfacedSweepContinues(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() _, err := EnsureClusterNLB(context.Background(), nlbp, "111122223333", "alpha", []string{"subnet-aaa"}, false, nil, nil) require.NoError(t, err) @@ -712,6 +735,7 @@ func (f *fakeNLBProvisioner) seedLBCALB(name, vpcID, ownerCluster string) string // Only an LBC ALB in the customer VPC carrying this cluster's ownership tag is // reaped — a different VPC, a different cluster, or no ownership tag is left alone. func TestReapLBCLoadBalancers_DeletesOnlyOwnedInVPC(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() owned := nlbp.seedLBCALB("k8s-toc-owned", "vpc-cust", "alpha") nlbp.seedLBCALB("k8s-toc-othervpc", "vpc-other", "alpha") // wrong VPC @@ -726,6 +750,7 @@ func TestReapLBCLoadBalancers_DeletesOnlyOwnedInVPC(t *testing.T) { // Empty cluster name or VPC id is a no-op (nothing to scope the reap to). func TestReapLBCLoadBalancers_EmptyArgsNoop(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.seedLBCALB("k8s-toc-owned", "vpc-cust", "alpha") @@ -737,6 +762,7 @@ func TestReapLBCLoadBalancers_EmptyArgsNoop(t *testing.T) { // A delete failure surfaces so the teardown backstop retries rather than leaking // the ALB (which would pin the VPC undeletable). func TestReapLBCLoadBalancers_DeleteErrorSurfaces(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() nlbp.seedLBCALB("k8s-toc-owned", "vpc-cust", "alpha") nlbp.deleteLBErr = errors.New("boom") diff --git a/spinifex/handlers/eks/nodegroup.go b/spinifex/handlers/eks/nodegroup.go index d1656f899..0ab6fa06d 100644 --- a/spinifex/handlers/eks/nodegroup.go +++ b/spinifex/handlers/eks/nodegroup.go @@ -1117,15 +1117,6 @@ func (s *EKSServiceImpl) casPutNodegroup(ctx context.Context, kv jetstream.KeyVa return true, nil } -func (s *EKSServiceImpl) updateNodegroupVersion(input *eks.UpdateNodegroupVersionInput) (*eks.UpdateNodegroupVersionOutput, error) { - // Worker AMI version upgrades (drain + replace) are not implemented in v1. - if input != nil { - slog.Info("UpdateNodegroupVersion not implemented in v1", - "cluster", aws.StringValue(input.ClusterName), "nodegroup", aws.StringValue(input.NodegroupName)) - } - return nil, notImpl() -} - func (s *EKSServiceImpl) deleteNodegroup(ctx context.Context, acctKV jetstream.KeyValue, input *eks.DeleteNodegroupInput, accountID string) (*eks.DeleteNodegroupOutput, error) { if input == nil { return nil, errors.New(awserrors.ErrorInvalidParameterValue) diff --git a/spinifex/handlers/eks/nodegroup_instance_profile_test.go b/spinifex/handlers/eks/nodegroup_instance_profile_test.go index 1467c6725..a7c203cf2 100644 --- a/spinifex/handlers/eks/nodegroup_instance_profile_test.go +++ b/spinifex/handlers/eks/nodegroup_instance_profile_test.go @@ -34,6 +34,7 @@ func newEnsurerWithRole(roleName, roleARN string) *iammock.SystemInstanceRoleEns } func TestEnsureNodeInstanceProfile_CreatesAndAttaches(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("eks-quickstart-node-role", testNodeRoleARN) s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -46,6 +47,7 @@ func TestEnsureNodeInstanceProfile_CreatesAndAttaches(t *testing.T) { } func TestEnsureNodeInstanceProfile_ExistingWithRoleIsNoop(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("eks-quickstart-node-role", testNodeRoleARN) f.Profiles["eks-quickstart-node-role"] = &iam.InstanceProfile{ InstanceProfileName: aws.String("eks-quickstart-node-role"), @@ -62,6 +64,7 @@ func TestEnsureNodeInstanceProfile_ExistingWithRoleIsNoop(t *testing.T) { } func TestEnsureNodeInstanceProfile_ExistingWithoutRoleAttaches(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("eks-quickstart-node-role", testNodeRoleARN) f.Profiles["eks-quickstart-node-role"] = &iam.InstanceProfile{ InstanceProfileName: aws.String("eks-quickstart-node-role"), @@ -76,6 +79,7 @@ func TestEnsureNodeInstanceProfile_ExistingWithoutRoleAttaches(t *testing.T) { } func TestEnsureNodeInstanceProfile_AddRoleLimitExceededIsSuccess(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("eks-quickstart-node-role", testNodeRoleARN) f.AddRoleToInstanceProfileErr = errors.New(awserrors.ErrorIAMLimitExceeded) s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -88,6 +92,7 @@ func TestEnsureNodeInstanceProfile_AddRoleLimitExceededIsSuccess(t *testing.T) { // A path-bearing role ARN names its profile after the final segment only; the // path is not a legal instance-profile name character. func TestEnsureNodeInstanceProfile_PathBearingRoleUsesFinalSegment(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("Worker", "arn:aws:iam::000000000001:role/team/Worker") s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -124,6 +129,7 @@ func TestEnsureNodeInstanceProfile_RejectsInvalidARNs(t *testing.T) { // holds it under the ARN the caller supplied, so the canonical comparison would // pass and only the guard can refuse it. func TestEnsureNodeInstanceProfile_RejectsCrossAccountRole(t *testing.T) { + t.Parallel() const crossAccountARN = "arn:aws:iam::000000000002:role/Worker" f := newEnsurerWithRole("Worker", crossAccountARN) s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -139,6 +145,7 @@ func TestEnsureNodeInstanceProfile_RejectsCrossAccountRole(t *testing.T) { // A node role ARN carrying a path the stored role does not have must not bind a // profile to the role its final segment names. func TestEnsureNodeInstanceProfile_RejectsFabricatedPath(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("eks-quickstart-node-role", testNodeRoleARN) s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -151,6 +158,7 @@ func TestEnsureNodeInstanceProfile_RejectsFabricatedPath(t *testing.T) { // A pathed role is likewise not reachable by its pathless ARN. func TestEnsureNodeInstanceProfile_RejectsStrippedPath(t *testing.T) { + t.Parallel() f := newEnsurerWithRole("Worker", "arn:aws:iam::000000000001:role/team/Worker") s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} @@ -162,6 +170,7 @@ func TestEnsureNodeInstanceProfile_RejectsStrippedPath(t *testing.T) { // A node role that does not exist in IAM cannot be resolved, so no profile is // created for it. func TestEnsureNodeInstanceProfile_RejectsUnknownRole(t *testing.T) { + t.Parallel() f := newFakeEnsurer() s := &EKSServiceImpl{deps: EKSServiceDeps{IAM: f}} diff --git a/spinifex/handlers/eks/nodegroup_recreate_test.go b/spinifex/handlers/eks/nodegroup_recreate_test.go index 706ff3023..2592525f3 100644 --- a/spinifex/handlers/eks/nodegroup_recreate_test.go +++ b/spinifex/handlers/eks/nodegroup_recreate_test.go @@ -20,6 +20,7 @@ import ( // failed with "reports 3 Ready nodes, want >= 5 (baseline 2 + 3 workers)", and // each retry raising the bar again. func TestCreateNodegroup_RecreateDoesNotBaselineOnPriorWorkers(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") diff --git a/spinifex/handlers/eks/nodegroup_test.go b/spinifex/handlers/eks/nodegroup_test.go index af7ebb307..16483db9f 100644 --- a/spinifex/handlers/eks/nodegroup_test.go +++ b/spinifex/handlers/eks/nodegroup_test.go @@ -195,6 +195,7 @@ func createNGInput(cluster, ng string, desired int64) *eks.CreateNodegroupInput } func TestReclaimOrphanedNodegroups_TerminatesStrandedWorkers(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) const cluster = "toc" seedActiveClusterWithToken(t, f, cluster) @@ -240,6 +241,7 @@ func TestReclaimOrphanedNodegroups_TerminatesStrandedWorkers(t *testing.T) { } func TestNodegroupRecord_CRUDRoundTrip(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) kv, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -278,6 +280,7 @@ func TestNodegroupRecord_CRUDRoundTrip(t *testing.T) { } func TestBuildAgentUserData_Shape(t *testing.T) { + t.Parallel() ud := buildAgentUserData(agentUserDataInput{ ClusterName: "c1", NodegroupName: "ng1", @@ -301,6 +304,7 @@ func TestBuildAgentUserData_Shape(t *testing.T) { } func TestEnsureNodegroupSGRules_AuthorizesExpectedRules(t *testing.T) { + t.Parallel() sg := newFakeSGProvisioner() require.NoError(t, EnsureNodegroupSGRules(context.Background(), sg, testAccountID, "c1", "sg-cp", "sg-ng")) @@ -325,6 +329,7 @@ func TestEnsureNodegroupSGRules_AuthorizesExpectedRules(t *testing.T) { } func TestEnsureNodegroupSGRules_DuplicateRuleTolerated(t *testing.T) { + t.Parallel() sg := newFakeSGProvisioner() sg.authorizeErr = errors.New(awserrors.ErrorInvalidPermissionDuplicate) @@ -333,6 +338,7 @@ func TestEnsureNodegroupSGRules_DuplicateRuleTolerated(t *testing.T) { } func TestCreateNodegroup_HappyPath(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -387,6 +393,7 @@ func TestCreateNodegroup_HappyPath(t *testing.T) { // the block device mapping entirely, which drops the worker onto the AMI's own // volume — sized to hold the image and nothing else. func TestCreateNodegroup_OmittedDiskSizeUsesAWSDefault(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -412,6 +419,7 @@ func TestCreateNodegroup_OmittedDiskSizeUsesAWSDefault(t *testing.T) { // vendor, so the worker-launch path resolves the GPU node AMI instead of the // default eks-node AMI. func TestCreateNodegroup_GPUInstanceTypeSetsGPUFields(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -433,6 +441,7 @@ func TestCreateNodegroup_GPUInstanceTypeSetsGPUFields(t *testing.T) { // A GPU nodegroup create must auto-stage the nvidia-device-plugin addon so // GPU-tainted nodes get nvidia.com/gpu allocatable without a manual CreateAddon. func TestCreateNodegroup_GPUNodegroupStagesDevicePluginAddon(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -453,6 +462,7 @@ func TestCreateNodegroup_GPUNodegroupStagesDevicePluginAddon(t *testing.T) { // A non-GPU nodegroup create must not stage nvidia-device-plugin — it stays // dormant on non-GPU clusters, and it isn't user-visible in the catalog. func TestCreateNodegroup_NonGPUNodegroupDoesNotStageDevicePluginAddon(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -469,6 +479,7 @@ func TestCreateNodegroup_NonGPUNodegroupDoesNotStageDevicePluginAddon(t *testing // A non-GPU instance type must leave the record's GPU fields unset, so the // worker-launch path keeps resolving the default eks-node AMI. func TestCreateNodegroup_NonGPUInstanceTypeClearsGPUFields(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -488,6 +499,7 @@ func TestCreateNodegroup_NonGPUInstanceTypeClearsGPUFields(t *testing.T) { // real AWS field EKS uses to signal a GPU-flavored node AMI — even though the // caller requested the plain AL2_x86_64 default. func TestCreateNodegroup_GPUInstanceTypeExposesGPUAmiTypeInDescribe(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -511,6 +523,7 @@ func TestCreateNodegroup_GPUInstanceTypeExposesGPUAmiTypeInDescribe(t *testing.T // A non-GPU nodegroup's DescribeNodegroup response must keep the plain amiType // so the UI does not mistake it for a GPU nodegroup. func TestCreateNodegroup_NonGPUInstanceTypeKeepsPlainAmiTypeInDescribe(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -531,6 +544,7 @@ func TestCreateNodegroup_NonGPUInstanceTypeKeepsPlainAmiTypeInDescribe(t *testin // End-to-end: a GPU nodegroup's worker launch must resolve the GPU-tagged AMI // over a coexisting plain eks-node AMI, not merely set the record's GPU fields. func TestCreateNodegroup_GPUWorkerLaunchUsesGPUAMI(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -564,6 +578,7 @@ func TestCreateNodegroup_GPUWorkerLaunchUsesGPUAMI(t *testing.T) { // plain eks-node AMI (running a GPU workload on a driverless image is worse // than a clear failure). func TestCreateNodegroup_GPUWorkerLaunchNoGPUAMINoFallback(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -590,6 +605,7 @@ func TestCreateNodegroup_GPUWorkerLaunchNoGPUAMINoFallback(t *testing.T) { // node count) must drive the nodegroup to CREATE_FAILED, not a falsely-ACTIVE // record. Instance IDs are retained so the reclaim path tears the workers down. func TestCreateNodegroup_WorkersNeverReady_CreateFailed(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -613,6 +629,7 @@ func TestCreateNodegroup_WorkersNeverReady_CreateFailed(t *testing.T) { // global cluster Ready-node count, so ng-a's Ready worker could have falsely // satisfied ng-b's gate too. func TestCreateNodegroup_ReadyGateScopedPerNodegroupNotGlobal(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -642,6 +659,7 @@ func TestCreateNodegroup_ReadyGateScopedPerNodegroupNotGlobal(t *testing.T) { // retried, not abandon the nodegroup at its first failed RunInstances call — // the relaunch converges to desired capacity within the retry budget. func TestCreateNodegroup_RelaunchesOnWorkerLaunchFailure(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -668,6 +686,7 @@ func TestCreateNodegroup_RelaunchesOnWorkerLaunchFailure(t *testing.T) { // the retry budget is exhausted — retrying must never hang the nodegroup // forever — while having genuinely retried at least once before giving up. func TestCreateNodegroup_WorkerLaunchFailureExhaustsRetryBudget(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -685,6 +704,7 @@ func TestCreateNodegroup_WorkerLaunchFailureExhaustsRetryBudget(t *testing.T) { } func TestCreateNodegroup_DiskSizePropagatesToBlockDeviceMapping(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -704,6 +724,7 @@ func TestCreateNodegroup_DiskSizePropagatesToBlockDeviceMapping(t *testing.T) { } func TestCreateNodegroup_ClusterNotActive(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) require.NoError(t, PutClusterMeta(t.Context(), f.kv, &ClusterMeta{ Name: "c1", @@ -717,12 +738,14 @@ func TestCreateNodegroup_ClusterNotActive(t *testing.T) { } func TestCreateNodegroup_UnknownCluster(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("ghost", "ng1", 1), testAccountID) require.EqualError(t, err, awserrors.ErrorEKSResourceNotFound) } func TestDescribeAndListNodegroups(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("c1", "ng1", 1), testAccountID) @@ -748,6 +771,7 @@ func TestDescribeAndListNodegroups(t *testing.T) { } func TestUpdateNodegroupConfig_ScaleUpAndDown(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("c1", "ng1", 1), testAccountID) @@ -788,6 +812,7 @@ func TestUpdateNodegroupConfig_ScaleUpAndDown(t *testing.T) { // terraform retry) must converge to exactly desired, not double-launch. Pre-fix // each read current=1 and launched desired-current=2, yielding 5 live workers. func TestUpdateNodegroupConfig_ConcurrentScaleUpConverges(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("c1", "ng1", 1), testAccountID) @@ -874,6 +899,7 @@ func TestUpdateNodegroupConfig_CapacityErrorSurfacesCode(t *testing.T) { } func TestDeleteNodegroup_TerminatesAndIsIdempotent(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("c1", "ng1", 2), testAccountID) @@ -898,17 +924,10 @@ func TestDeleteNodegroup_TerminatesAndIsIdempotent(t *testing.T) { require.EqualError(t, err, awserrors.ErrorEKSResourceNotFound) } -func TestUpdateNodegroupVersion_NotImplemented(t *testing.T) { - f := newEKSServiceFixture(t) - _, err := f.svc.UpdateNodegroupVersion(context.Background(), &eks.UpdateNodegroupVersionInput{ - ClusterName: aws.String("c1"), NodegroupName: aws.String("ng1"), - }, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) -} - // TestSelectWorkerHost_NoSchedulerOrCapacity returns "" so the caller falls back // to a local launch when no scheduler is wired or no host has free capacity. func TestSelectWorkerHost_NoSchedulerOrCapacity(t *testing.T) { + t.Parallel() s := &EKSServiceImpl{deps: EKSServiceDeps{}} require.Empty(t, s.selectWorkerHost(context.Background(), "t3.medium", nil)) @@ -942,6 +961,7 @@ func (m *mapHostScheduler) InstanceHosts(_ context.Context, ids []string) map[st // launches fan out one-per-host before doubling up, the fix for all workers // landing on a single node. func TestSelectWorkerHost_SpreadsThenPacks(t *testing.T) { + t.Parallel() hosts := []string{"nodeA", "nodeB", "nodeC"} sched := &mapHostScheduler{hosts: hosts, placement: map[string]string{}} s := &EKSServiceImpl{deps: EKSServiceDeps{Scheduler: sched}} @@ -1090,6 +1110,7 @@ func TestNodegroupRecordToAWS_TaintsAndUpdateConfig(t *testing.T) { // the node group has none. AWS always returns the field, and the provider reads // it as Optional+Computed, so a nil reads as a contradicted computed value. func TestNodegroupRecordToAWS_LabelsAlwaysPresent(t *testing.T) { + t.Parallel() out := nodegroupRecordToAWS(&NodegroupRecord{ ClusterName: "c1", Name: "ng1", Status: eks.NodegroupStatusActive, }) @@ -1109,6 +1130,7 @@ func TestNodegroupRecordToAWS_LabelsAlwaysPresent(t *testing.T) { // with a zero-length issues list when healthy, and the NodeCreationFailure // issue when set, via jsonutil.BuildJSON so a dropped nil-slice key is caught. func TestNodegroupRecordToAWS_HealthAlwaysPresent(t *testing.T) { + t.Parallel() healthy := nodegroupRecordToAWS(&NodegroupRecord{ ClusterName: "c1", Name: "ng1", Status: eks.NodegroupStatusActive, }) @@ -1154,6 +1176,7 @@ func TestNodegroupRecordToAWS_HealthAlwaysPresent(t *testing.T) { // resolved at describe time — launchTemplate is force-new, so a mismatch here // would replace the node group on the very next plan. func TestCreateNodegroup_CapturesLaunchTemplateCapacityTypeReleaseVersion(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -1182,6 +1205,7 @@ func TestCreateNodegroup_CapturesLaunchTemplateCapacityTypeReleaseVersion(t *tes // ON_DEMAND default, and a named placeholder) rather than staying empty, which // would omit the field from every future DescribeNodegroup. func TestCreateNodegroup_OmittedCapacityTypeAndReleaseVersionUseDefaults(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -1201,6 +1225,7 @@ func TestCreateNodegroup_OmittedCapacityTypeAndReleaseVersionUseDefaults(t *test // TestCreateNodegroup_CapturesTaints proves taints supplied to CreateNodegroup // land on the record, the other missing half of bead G alongside updateConfig. func TestCreateNodegroup_CapturesTaints(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") @@ -1226,6 +1251,7 @@ func TestCreateNodegroup_CapturesTaints(t *testing.T) { // (key, effect) so a same-key different-effect taint is never clobbered, and // remove deletes only the matching pair. func TestApplyTaintUpdate(t *testing.T) { + t.Parallel() existing := []NodegroupTaint{ {Key: "a", Value: "1", Effect: eks.TaintEffectNoSchedule}, {Key: "b", Value: "1", Effect: eks.TaintEffectPreferNoSchedule}, @@ -1256,6 +1282,7 @@ func TestApplyTaintUpdate(t *testing.T) { // converged and never errored either. It must now record what was asked for // and hand it back on the next Describe. func TestUpdateNodegroupConfig_HonoursTaintsAndUpdateConfig(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) seedActiveClusterWithToken(t, f, "c1") _, err := f.svc.CreateNodegroup(context.Background(), createNGInput("c1", "ng1", 1), testAccountID) diff --git a/spinifex/handlers/eks/nodegroup_userdata_test.go b/spinifex/handlers/eks/nodegroup_userdata_test.go index 8aee4d4ce..f64e6ec94 100644 --- a/spinifex/handlers/eks/nodegroup_userdata_test.go +++ b/spinifex/handlers/eks/nodegroup_userdata_test.go @@ -6,6 +6,7 @@ import ( ) func TestBuildAgentUserData_ECRWiring(t *testing.T) { + t.Parallel() in := agentUserDataInput{ ClusterName: "alpha", NodegroupName: "ng-1", @@ -61,6 +62,7 @@ func TestBuildAgentUserData_ECRWiring(t *testing.T) { } func TestBuildAgentUserData_NoGatewayIPUsesHostnameEndpoint(t *testing.T) { + t.Parallel() in := agentUserDataInput{ ClusterName: "alpha", NodegroupName: "ng-1", @@ -97,6 +99,7 @@ func baseTestInput() agentUserDataInput { } func TestBuildAgentUserData_GPUEnabledSignalsNodegroupAndGPU(t *testing.T) { + t.Parallel() in := baseTestInput() in.GPUEnabled = true in.GPUVendor = "nvidia" @@ -126,6 +129,7 @@ func TestBuildAgentUserData_GPUEnabledSignalsNodegroupAndGPU(t *testing.T) { } func TestBuildAgentUserData_NonGPUSignalsNodegroupOnly(t *testing.T) { + t.Parallel() in := baseTestInput() got := buildAgentUserData(in) diff --git a/spinifex/handlers/eks/oidc_keypair_test.go b/spinifex/handlers/eks/oidc_keypair_test.go index 19207d8cc..2ded60d1c 100644 --- a/spinifex/handlers/eks/oidc_keypair_test.go +++ b/spinifex/handlers/eks/oidc_keypair_test.go @@ -25,6 +25,7 @@ var testMasterKey = func() []byte { }() func TestGenerateClusterOIDCKeypair_PersistsJWKSAndEncryptedPrivateKey(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, jwksBytes, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) @@ -46,6 +47,7 @@ func TestGenerateClusterOIDCKeypair_PersistsJWKSAndEncryptedPrivateKey(t *testin // key's public part — kube-apiserver's --service-account-key-file requires a // public key and crash-loops on a private-key PEM. func TestPublicKeyPEMFromPrivate_RoundTrips(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) privPEM, _, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) require.NoError(t, err) @@ -68,6 +70,7 @@ func TestPublicKeyPEMFromPrivate_RoundTrips(t *testing.T) { } func TestPublicKeyPEMFromPrivate_RejectsGarbage(t *testing.T) { + t.Parallel() _, err := PublicKeyPEMFromPrivate("not a pem") require.Error(t, err) @@ -78,6 +81,7 @@ func TestPublicKeyPEMFromPrivate_RejectsGarbage(t *testing.T) { // The generator returns the plaintext private-key PEM directly so CreateCluster // avoids a second KV read + decrypt; it must match the key persisted in KV. func TestGenerateClusterOIDCKeypair_ReturnsPrivateKeyPEMMatchingStored(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) privPEM, _, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) @@ -97,6 +101,7 @@ func TestGenerateClusterOIDCKeypair_ReturnsPrivateKeyPEMMatchingStored(t *testin } func TestGenerateClusterOIDCKeypair_JWKSShapeIsRFC7517EC_P256(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, jwksBytes, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) @@ -122,6 +127,7 @@ func TestGenerateClusterOIDCKeypair_JWKSShapeIsRFC7517EC_P256(t *testing.T) { } func TestGenerateClusterOIDCKeypair_TwoCallsProduceDistinctKeys(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, a, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) @@ -132,6 +138,7 @@ func TestGenerateClusterOIDCKeypair_TwoCallsProduceDistinctKeys(t *testing.T) { } func TestGenerateClusterOIDCKeypair_EmptyArgsRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, _, err := GenerateClusterOIDCKeypair(t.Context(), kv, "", testMasterKey) @@ -141,6 +148,7 @@ func TestGenerateClusterOIDCKeypair_EmptyArgsRejected(t *testing.T) { } func TestLoadClusterOIDCPrivateKey_RoundTripMatchesJWKSPublic(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, jwksBytes, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) @@ -167,6 +175,7 @@ func TestLoadClusterOIDCPrivateKey_RoundTripMatchesJWKSPublic(t *testing.T) { } func TestLoadClusterOIDCPrivateKey_WrongMasterKeyFails(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, _, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) require.NoError(t, err) @@ -178,12 +187,14 @@ func TestLoadClusterOIDCPrivateKey_WrongMasterKeyFails(t *testing.T) { } func TestLoadClusterOIDCPrivateKey_MissingReturnsErrClusterNotFound(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, err := LoadClusterOIDCPrivateKey(t.Context(), kv, "ghost", testMasterKey) require.ErrorIs(t, err, ErrClusterNotFound) } func TestZeroizeClusterOIDCKey_DeletesKeyAndLeavesSiblingsIntact(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) _, _, err := GenerateClusterOIDCKeypair(t.Context(), kv, "alpha", testMasterKey) require.NoError(t, err) @@ -199,16 +210,19 @@ func TestZeroizeClusterOIDCKey_DeletesKeyAndLeavesSiblingsIntact(t *testing.T) { } func TestZeroizeClusterOIDCKey_MissingIsNoop(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.NoError(t, ZeroizeClusterOIDCKey(t.Context(), kv, "ghost")) } func TestZeroizeClusterOIDCKey_EmptyNameRejected(t *testing.T) { + t.Parallel() kv := newClusterStateTestKV(t) require.Error(t, ZeroizeClusterOIDCKey(t.Context(), kv, "")) } func TestMarshalJWKS_DeterministicForSameKey(t *testing.T) { + t.Parallel() priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) require.NoError(t, err) @@ -224,6 +238,7 @@ func TestMarshalJWKS_DeterministicForSameKey(t *testing.T) { // verifiers reject, so the fixture below pins a key with a short X coordinate to // keep the intermittent case deterministic. func TestMarshalJWKS_LeftPadsCoordinateWithLeadingZeroByte(t *testing.T) { + t.Parallel() d, err := hex.DecodeString("aa5dcdd192d84607aaf45a4ba2fcc794c8bddb0cff0908c2cb204b3553c4d60f") require.NoError(t, err) priv, err := ecdsa.ParseRawPrivateKey(elliptic.P256(), d) @@ -245,6 +260,7 @@ func TestMarshalJWKS_LeftPadsCoordinateWithLeadingZeroByte(t *testing.T) { } func TestMarshalJWKS_RejectsNonP256Curve(t *testing.T) { + t.Parallel() priv, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) require.NoError(t, err) _, err = marshalJWKS(&priv.PublicKey) diff --git a/spinifex/handlers/eks/private_endpoint_test.go b/spinifex/handlers/eks/private_endpoint_test.go index 093dd865e..04874fe2b 100644 --- a/spinifex/handlers/eks/private_endpoint_test.go +++ b/spinifex/handlers/eks/private_endpoint_test.go @@ -14,6 +14,7 @@ import ( ) func TestClusterJoinEndpoint_PrivateAccessPrefersSetA(t *testing.T) { + t.Parallel() // public+private: published endpoint is public, but workers join via Set A. meta := &ClusterMeta{ Endpoint: "https://203.0.113.9:443", @@ -27,6 +28,7 @@ func TestClusterJoinEndpoint_PrivateAccessPrefersSetA(t *testing.T) { } func TestClusterJoinEndpoint_PrivateOnlyMatchesPublished(t *testing.T) { + t.Parallel() // private-only: meta.Endpoint already equals the Set A endpoint. meta := &ClusterMeta{ Endpoint: "https://10.20.0.5:443", @@ -40,6 +42,7 @@ func TestClusterJoinEndpoint_PrivateOnlyMatchesPublished(t *testing.T) { } func TestClusterJoinEndpoint_PublicOnlyUsesPublished(t *testing.T) { + t.Parallel() meta := &ClusterMeta{ Endpoint: "https://203.0.113.9:443", ResourcesVpcConfig: &ClusterVpcConfig{ @@ -51,6 +54,7 @@ func TestClusterJoinEndpoint_PublicOnlyUsesPublished(t *testing.T) { } func TestClusterJoinEndpoint_PublicJoinsByEndpointIP(t *testing.T) { + t.Parallel() // With northstar on, meta.Endpoint is the DNS name but workers join by IP so // cluster bring-up never depends on DNS resolution of the published name. meta := &ClusterMeta{ @@ -65,6 +69,7 @@ func TestClusterJoinEndpoint_PublicJoinsByEndpointIP(t *testing.T) { } func TestEnsurePrivateEndpointSG_AuthorizesVPCCIDROnAPIServerPorts(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.createIDs = []string{"sg-pe-001"} @@ -92,6 +97,7 @@ func TestEnsurePrivateEndpointSG_AuthorizesVPCCIDROnAPIServerPorts(t *testing.T) } func TestEnsurePrivateEndpointSG_EmptyInputsRejected(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() _, err := EnsurePrivateEndpointSG(context.Background(), sgp, "111122223333", "", "vpc-aaa", "10.0.0.0/16") require.Error(t, err) @@ -103,6 +109,7 @@ func TestEnsurePrivateEndpointSG_EmptyInputsRejected(t *testing.T) { } func TestEnsurePrivateEndpointSG_DuplicateIngressTolerated(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.authorizeErr = errors.New(awserrors.ErrorInvalidPermissionDuplicate) @@ -111,6 +118,7 @@ func TestEnsurePrivateEndpointSG_DuplicateIngressTolerated(t *testing.T) { } func TestEnsurePrivateEndpointENI_HappyPath(t *testing.T) { + t.Parallel() vpcSvc := &fakeK3sVPC{ createOut: &ec2.CreateNetworkInterfaceOutput{ NetworkInterface: &ec2.NetworkInterface{ @@ -140,6 +148,7 @@ func TestEnsurePrivateEndpointENI_HappyPath(t *testing.T) { } func TestEnsurePrivateEndpointENI_EmptyInputsRejected(t *testing.T) { + t.Parallel() vpcSvc := &fakeK3sVPC{} sgp := newFakeSGProvisioner() _, err := EnsurePrivateEndpointENI(context.Background(), vpcSvc, sgp, fakeSubnetResolver{}, "", "alpha", "subnet-aaa", "vpc-aaa") @@ -152,6 +161,7 @@ func TestEnsurePrivateEndpointENI_EmptyInputsRejected(t *testing.T) { } func TestEnsureClusterNLB_ThreadsCrossAccountENIToSyncCreate(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() extras := []systeminstance.ExtraENIInput{{ ENIID: "eni-pe-001", @@ -171,6 +181,7 @@ func TestEnsureClusterNLB_ThreadsCrossAccountENIToSyncCreate(t *testing.T) { } func TestEnsureClusterNLB_NoExtrasUsesPlainSync(t *testing.T) { + t.Parallel() nlbp := newFakeNLBProvisioner() _, err := EnsureClusterNLB(context.Background(), nlbp, "000000000000", "alpha", []string{"subnet-cp"}, false, nil, nil) diff --git a/spinifex/handlers/eks/reconciler_registry_test.go b/spinifex/handlers/eks/reconciler_registry_test.go index 4ce391b71..778692178 100644 --- a/spinifex/handlers/eks/reconciler_registry_test.go +++ b/spinifex/handlers/eks/reconciler_registry_test.go @@ -12,6 +12,7 @@ import ( ) func TestReconcilerRegistry_SpawnAndStop(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() var ( @@ -34,6 +35,7 @@ func TestReconcilerRegistry_SpawnAndStop(t *testing.T) { } func TestReconcilerRegistry_SpawnIdempotent(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() var spawnCalls atomic.Int32 fn := func(ctx context.Context, _, _ string) (func(), <-chan struct{}, error) { @@ -50,6 +52,7 @@ func TestReconcilerRegistry_SpawnIdempotent(t *testing.T) { } func TestReconcilerRegistry_SpawnFnErrorRemovesEntry(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() fn := func(_ context.Context, _, _ string) (func(), <-chan struct{}, error) { return nil, nil, errors.New("acquire lease failed") @@ -61,6 +64,7 @@ func TestReconcilerRegistry_SpawnFnErrorRemovesEntry(t *testing.T) { } func TestReconcilerRegistry_LeaseHeldDropsEntryAndRetries(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() var spawnCalls atomic.Int32 leaseHeld := atomic.Bool{} @@ -93,6 +97,7 @@ func TestReconcilerRegistry_LeaseHeldDropsEntryAndRetries(t *testing.T) { // a later same-name create spawns a fresh reconciler instead of silently // no-opping on a leaked holder. func TestReconcilerRegistry_SelfExitDropsEntryAndRespawns(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() var ( spawnCalls atomic.Int32 @@ -129,6 +134,7 @@ func TestReconcilerRegistry_SelfExitDropsEntryAndRespawns(t *testing.T) { } func TestReconcilerRegistry_StopAllCancelsEvery(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() var released atomic.Int32 fn := func(ctx context.Context, _, _ string) (func(), <-chan struct{}, error) { @@ -148,12 +154,14 @@ func TestReconcilerRegistry_StopAllCancelsEvery(t *testing.T) { } func TestReconcilerRegistry_StopUnknownKeyNoop(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() reg.Stop("111122223333", "ghost") assert.False(t, reg.Has("111122223333", "ghost")) } func TestReconcilerRegistry_SpawnRejectsBadArgs(t *testing.T) { + t.Parallel() reg := NewReconcilerRegistry() fn := func(_ context.Context, _, _ string) (func(), <-chan struct{}, error) { return func() {}, nil, nil } diff --git a/spinifex/handlers/eks/recovery_directive_test.go b/spinifex/handlers/eks/recovery_directive_test.go index 5ece88768..f8e97763b 100644 --- a/spinifex/handlers/eks/recovery_directive_test.go +++ b/spinifex/handlers/eks/recovery_directive_test.go @@ -11,6 +11,7 @@ import ( ) func TestLoadRecoveryDirective_AbsentIsZeroNone(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) acctKV, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -23,6 +24,7 @@ func TestLoadRecoveryDirective_AbsentIsZeroNone(t *testing.T) { } func TestStoreRecoveryDirective_EpochIncrements(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) acctKV, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -44,6 +46,7 @@ func TestStoreRecoveryDirective_EpochIncrements(t *testing.T) { } func TestStoreRecoveryDirective_SnapshotRequiredRoundTrips(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) acctKV, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -60,6 +63,7 @@ func TestStoreRecoveryDirective_SnapshotRequiredRoundTrips(t *testing.T) { } func TestSetRecoveryDirective_RejectsBadInput(t *testing.T) { + t.Parallel() s := &EKSServiceImpl{} _, err := s.SetRecoveryDirective(context.Background(), &SetRecoveryDirectiveInput{ClusterName: "", InstanceID: "i-0", Action: RecoveryActionNone}, testAccountID) @@ -73,6 +77,7 @@ func TestSetRecoveryDirective_RejectsBadInput(t *testing.T) { } func TestGetRecoveryDirective_RejectsBadInput(t *testing.T) { + t.Parallel() s := &EKSServiceImpl{} _, err := s.GetRecoveryDirective(context.Background(), &GetRecoveryDirectiveInput{ClusterName: "", InstanceID: "i-0"}, testAccountID) diff --git a/spinifex/handlers/eks/restore_snapshot_test.go b/spinifex/handlers/eks/restore_snapshot_test.go index da33aafdd..0bd0db3f8 100644 --- a/spinifex/handlers/eks/restore_snapshot_test.go +++ b/spinifex/handlers/eks/restore_snapshot_test.go @@ -53,6 +53,7 @@ func seedSnapshot(t *testing.T, store objectstore.ObjectStore, accountID, cluste } func TestResolveLatestSnapshot_PrefersFrequentTier(t *testing.T) { + t.Parallel() store := objectstore.NewMemoryObjectStore() seedSnapshot(t, store, testAccountID, "alpha", "etcd-daily-20260709T230000Z.snap") seedSnapshot(t, store, testAccountID, "alpha", "etcd-frequent-20260709T010000Z.snap") @@ -66,6 +67,7 @@ func TestResolveLatestSnapshot_PrefersFrequentTier(t *testing.T) { } func TestResolveLatestSnapshot_FallsBackToAnyTierWhenNoFrequent(t *testing.T) { + t.Parallel() store := objectstore.NewMemoryObjectStore() seedSnapshot(t, store, testAccountID, "alpha", "etcd-daily-20260601T000000Z.snap") seedSnapshot(t, store, testAccountID, "alpha", "etcd-daily-20260602T000000Z.snap") @@ -76,11 +78,13 @@ func TestResolveLatestSnapshot_FallsBackToAnyTierWhenNoFrequent(t *testing.T) { } func TestResolveLatestSnapshot_NoStoreConfigured(t *testing.T) { + t.Parallel() _, err := resolveLatestSnapshot(context.Background(), nil, testAccountID, "alpha") require.Error(t, err) } func TestResolveLatestSnapshot_NoSnapshotsFound(t *testing.T) { + t.Parallel() store := objectstore.NewMemoryObjectStore() _, err := resolveLatestSnapshot(context.Background(), store, testAccountID, "alpha") require.Error(t, err) @@ -92,6 +96,7 @@ func TestResolveLatestSnapshot_NoSnapshotsFound(t *testing.T) { // last and lands on the final page — before this fix, a listing that never // followed the continuation token would silently pick an older "newest". func TestResolveLatestSnapshot_MultiPageListingFindsNewest(t *testing.T) { + t.Parallel() store := pagedstore.New(2) const count = 5 for i := 1; i <= count; i++ { @@ -132,6 +137,7 @@ func restoreSnapshotFixtureMeta(name string) *ClusterMeta { } func TestRestoreSnapshot_HappyPathLaunchesDirectsAndRepoints(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.Scheduler = &fakeHostScheduler{hosts: []string{"node-new"}} store := objectstore.NewMemoryObjectStore() @@ -179,6 +185,7 @@ func TestRestoreSnapshot_HappyPathLaunchesDirectsAndRepoints(t *testing.T) { } func TestRestoreSnapshot_ExplicitSnapshotUsedVerbatim(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.Scheduler = &fakeHostScheduler{hosts: []string{"node-new"}} store := objectstore.NewMemoryObjectStore() @@ -204,6 +211,7 @@ func TestRestoreSnapshot_ExplicitSnapshotUsedVerbatim(t *testing.T) { } func TestRestoreSnapshot_ExplicitSnapshotMissingHardFailsBeforeLaunch(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.Scheduler = &fakeHostScheduler{hosts: []string{"node-new"}} store := objectstore.NewMemoryObjectStore() @@ -221,6 +229,7 @@ func TestRestoreSnapshot_ExplicitSnapshotMissingHardFailsBeforeLaunch(t *testing } func TestRestoreSnapshot_ExplicitSnapshotWithNoStoreHardFails(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.Scheduler = &fakeHostScheduler{hosts: []string{"node-new"}} f.svc.deps.SnapshotStore = nil @@ -234,6 +243,7 @@ func TestRestoreSnapshot_ExplicitSnapshotWithNoStoreHardFails(t *testing.T) { } func TestRestoreSnapshot_HARejected(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := restoreSnapshotFixtureMeta("alpha") meta.ControlPlaneSpreadGroup = "eks-cp-111122223333-alpha" @@ -248,6 +258,7 @@ func TestRestoreSnapshot_HARejected(t *testing.T) { } func TestRestoreSnapshot_NoTemplateRejected(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := restoreSnapshotFixtureMeta("alpha") meta.ControlPlaneTemplate = nil @@ -260,6 +271,7 @@ func TestRestoreSnapshot_NoTemplateRejected(t *testing.T) { } func TestRestoreSnapshot_ClusterNotFound(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.RestoreSnapshot(context.Background(), &RestoreSnapshotInput{ClusterName: "ghost", Snapshot: "etcd-daily-20260601T000000Z.snap"}, testAccountID) @@ -267,6 +279,7 @@ func TestRestoreSnapshot_ClusterNotFound(t *testing.T) { } func TestRestoreSnapshot_NLBFailureIsProvisionalNotError(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.Scheduler = &fakeHostScheduler{hosts: []string{"node-new"}} store := objectstore.NewMemoryObjectStore() @@ -293,6 +306,7 @@ func TestRestoreSnapshot_NLBFailureIsProvisionalNotError(t *testing.T) { } func TestRestoreSnapshot_FenceFailureIsLoudError(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) // The old CP cannot be terminated (still alive) — split-brain risk. f.inst.terminateErr = errors.New("InstanceStillRunning") @@ -305,6 +319,7 @@ func TestRestoreSnapshot_FenceFailureIsLoudError(t *testing.T) { } func TestConfirmOldCPTerminated_NoOldNodeSucceeds(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) err := f.svc.confirmOldCPTerminated(context.Background(), testAccountID, ControlPlaneNode{}, 3, 0) require.NoError(t, err, "no old CP to fence is trivially confirmed") @@ -312,6 +327,7 @@ func TestConfirmOldCPTerminated_NoOldNodeSucceeds(t *testing.T) { } func TestUnwindFreshCP_TerminatesAndClearsDirective(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) meta := restoreSnapshotFixtureMeta("alpha") require.NoError(t, PutClusterMeta(t.Context(), f.kv, meta)) diff --git a/spinifex/handlers/eks/revisit_test.go b/spinifex/handlers/eks/revisit_test.go index 49a7cc8c8..13164ff31 100644 --- a/spinifex/handlers/eks/revisit_test.go +++ b/spinifex/handlers/eks/revisit_test.go @@ -27,6 +27,7 @@ func woke(r *ClusterReconciler) bool { // healthy report is a trigger, so the timeout expiring is the only thing left // that announces itself to nobody. func TestReconcileOnce_ACreatingClusterAsksForWhatIsLeftOfItsCreateTimeout(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithCreateTimeout(15*time.Minute)) freshenClusterCreatedAt(t, acctKV) // No bootstrap state and no report, so the cluster stays CREATING. @@ -41,6 +42,7 @@ func TestReconcileOnce_ACreatingClusterAsksForWhatIsLeftOfItsCreateTimeout(t *te // A create timeout already past belongs to the pass that fails the cluster. // Returning nothing would leave that pass unscheduled. func TestReconcileOnce_ACreatingClusterPastItsTimeoutAsksForTheInterval(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithCreateTimeout(15*time.Minute), WithReconcileInterval(30*time.Second), @@ -60,6 +62,7 @@ func TestReconcileOnce_ACreatingClusterPastItsTimeoutAsksForTheInterval(t *testi // is published by nobody. The deadline is the instant the newest report expires, // which lands the pass on it rather than up to a tick after it. func TestReconcileOnce_AHealthyClusterAsksForItsReportsStalenessInstant(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithStateStaleAfter(90*time.Second)) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) r.latest.Store(freshReport("ok", 3)) @@ -74,6 +77,7 @@ func TestReconcileOnce_AHealthyClusterAsksForItsReportsStalenessInstant(t *testi // A report already past its window is the case the next pass has to notice, so // the deadline falls back to the interval rather than to nothing. func TestReconcileOnce_AClusterWithAStaleReportAsksForTheInterval(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithStateStaleAfter(90*time.Second), WithReconcileInterval(30*time.Second), @@ -91,6 +95,7 @@ func TestReconcileOnce_AClusterWithAStaleReportAsksForTheInterval(t *testing.T) // time that this deliberately does not restate, and they poll their members' // VM state on every pass regardless. func TestReconcileOnce_ADegradedClusterAsksForTheInterval(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t, WithReconcileInterval(30*time.Second)) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusActive)) r.latest.Store(freshReport("fail", 0)) @@ -104,6 +109,7 @@ func TestReconcileOnce_ADegradedClusterAsksForTheInterval(t *testing.T) { // Without a state source health comes from an HTTP probe, which answers only // when asked, so there is nothing to wait for and the poll has to stay. func TestReconcileOnce_AProbedClusterAsksForTheInterval(t *testing.T) { + t.Parallel() stub := &stubHTTPDoer{status: 200} r, _, acctKV := newReconcilerHarness(t, "https://nlb.example/healthz", WithHTTPClient(stub), @@ -119,6 +125,7 @@ func TestReconcileOnce_AProbedClusterAsksForTheInterval(t *testing.T) { // A terminal status ends the loop, so there is no next run to schedule. func TestReconcileOnce_ADeletingClusterAsksForNoDeadline(t *testing.T) { + t.Parallel() r, _, acctKV := newStateReconcilerHarness(t) require.NoError(t, SetClusterStatus(t.Context(), acctKV, "alpha", ClusterStatusDeleting)) @@ -130,6 +137,7 @@ func TestReconcileOnce_ADeletingClusterAsksForNoDeadline(t *testing.T) { // The first report is always news: there is nothing to compare it against, and // it is what flips a CREATING cluster. func TestStoreReport_TheFirstReportWakesTheLoop(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) r.storeReport(freshReport("ok", 3)) @@ -140,6 +148,7 @@ func TestStoreReport_TheFirstReportWakesTheLoop(t *testing.T) { // The control plane publishes on its own timer whether or not anything changed. // Waking on every report would be the old 30s tick under another name. func TestStoreReport_ARepeatedReportDoesNotWakeTheLoop(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) r.storeReport(&ServerStateReport{Healthz: "ok", NodeCount: 3, TS: time.Now().Unix()}) require.True(t, woke(r)) @@ -152,6 +161,7 @@ func TestStoreReport_ARepeatedReportDoesNotWakeTheLoop(t *testing.T) { // The newest report still has to be stored even when it does not wake anything, // because the staleness deadline is measured from it. func TestStoreReport_ARepeatedReportStillRefreshesWhatIsStored(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) r.storeReport(&ServerStateReport{Healthz: "ok", NodeCount: 3, TS: 1000}) diff --git a/spinifex/handlers/eks/security_groups_test.go b/spinifex/handlers/eks/security_groups_test.go index 317f5b374..6158b504a 100644 --- a/spinifex/handlers/eks/security_groups_test.go +++ b/spinifex/handlers/eks/security_groups_test.go @@ -194,6 +194,7 @@ func (f *fakeSGProvisioner) AuthorizeSecurityGroupIngress(_ context.Context, inp } func TestEnsureClusterSGs_EmptyInputsRejected(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() _, _, err := EnsureClusterSGs(context.Background(), sgp, "111122223333", "", "vpc-aaa") @@ -207,6 +208,7 @@ func TestEnsureClusterSGs_EmptyInputsRejected(t *testing.T) { } func TestEnsureClusterSGs_FreshCreatesBoth(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.createIDs = []string{"sg-cp-001", "sg-ng-002"} @@ -222,6 +224,7 @@ func TestEnsureClusterSGs_FreshCreatesBoth(t *testing.T) { } func TestEnsureClusterSGs_IdempotentReusesExisting(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-existing-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-existing-ng" @@ -234,6 +237,7 @@ func TestEnsureClusterSGs_IdempotentReusesExisting(t *testing.T) { } func TestEnsureClusterSGs_MixedExistenceCreatesMissing(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-existing-cp" sgp.createIDs = []string{"sg-new-ng"} @@ -248,6 +252,7 @@ func TestEnsureClusterSGs_MixedExistenceCreatesMissing(t *testing.T) { } func TestEnsureClusterSGs_CreateErrorSurfacedFromControlPlane(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.createErr = errors.New("vpcd unavailable") @@ -257,6 +262,7 @@ func TestEnsureClusterSGs_CreateErrorSurfacedFromControlPlane(t *testing.T) { } func TestDeleteClusterSGs_DeletesBothExisting(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-existing-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-existing-ng" @@ -273,6 +279,7 @@ func TestDeleteClusterSGs_DeletesBothExisting(t *testing.T) { // deleted alongside the named cluster SGs, while an untagged third-party SG in the // same VPC has its rules revoked but is left intact. func TestDeleteClusterSGs_ReapsLBCTaggedSGs(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-ng" @@ -299,6 +306,7 @@ func TestDeleteClusterSGs_ReapsLBCTaggedSGs(t *testing.T) { } func TestDeleteClusterSGs_MissingSGsNoOp(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() err := DeleteClusterSGs(context.Background(), sgp, "111122223333", "alpha", "vpc-aaa") @@ -307,6 +315,7 @@ func TestDeleteClusterSGs_MissingSGsNoOp(t *testing.T) { } func TestDeleteClusterSGs_FirstErrorSurfacedSweepContinues(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-existing-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-existing-ng" @@ -357,6 +366,7 @@ func TestDeleteClusterSGs_RetriesDependencyViolation(t *testing.T) { // AWS rejects deleting either while the other's rule points at it. DeleteClusterSGs // must revoke all ingress on both before deleting, or the SGs leak and pin the VPC. func TestDeleteClusterSGs_RevokesCrossRefsBeforeDelete(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-ng" @@ -386,6 +396,7 @@ func TestDeleteClusterSGs_RevokesCrossRefsBeforeDelete(t *testing.T) { // directions on every non-default SG so the cluster SGs delete, must NOT delete // the referrer SGs (their owners do), and must leave the default SG untouched. func TestDeleteClusterSGs_RevokesEgressAndNonClusterReferrers(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.existing["eks-cluster-alpha-control-plane-sg|vpc-aaa"] = "sg-cp" sgp.existing["eks-cluster-alpha-nodegroup-sg|vpc-aaa"] = "sg-ng" @@ -440,6 +451,7 @@ func groupRefPerm(proto string, port int64, refSG string) *ec2.IpPermission { } func TestEnsureControlPlaneIngress_AuthorizesAPIServerFromVPCCIDR(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() err := EnsureControlPlaneIngress(context.Background(), sgp, "111122223333", "sg-cp-001", "10.0.0.0/16") @@ -463,6 +475,7 @@ func TestEnsureControlPlaneIngress_AuthorizesAPIServerFromVPCCIDR(t *testing.T) } func TestEnsureControlPlaneIngress_EmptyInputsRejected(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() require.Error(t, EnsureControlPlaneIngress(context.Background(), sgp, "111122223333", "", "10.0.0.0/16")) @@ -471,6 +484,7 @@ func TestEnsureControlPlaneIngress_EmptyInputsRejected(t *testing.T) { } func TestEnsureControlPlaneIngress_DuplicateTolerated(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.authorizeErr = errors.New(awserrors.ErrorInvalidPermissionDuplicate) @@ -479,6 +493,7 @@ func TestEnsureControlPlaneIngress_DuplicateTolerated(t *testing.T) { } func TestEnsureControlPlaneIngress_AuthorizeErrorSurfaced(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.authorizeErr = errors.New("vpcd unavailable") @@ -488,6 +503,7 @@ func TestEnsureControlPlaneIngress_AuthorizeErrorSurfaced(t *testing.T) { } func TestEnsureControlPlaneHAIngress_AuthorizesEtcdAndKubeletSelfReferenced(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() err := EnsureControlPlaneHAIngress(context.Background(), sgp, "111122223333", "sg-cp-001") @@ -523,6 +539,7 @@ func TestEnsureControlPlaneHAIngress_AuthorizesEtcdAndKubeletSelfReferenced(t *t } func TestEnsureControlPlaneHAIngress_EmptyInputRejected(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() require.Error(t, EnsureControlPlaneHAIngress(context.Background(), sgp, "111122223333", "")) @@ -530,6 +547,7 @@ func TestEnsureControlPlaneHAIngress_EmptyInputRejected(t *testing.T) { } func TestEnsureControlPlaneHAIngress_DuplicateTolerated(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.authorizeErr = errors.New(awserrors.ErrorInvalidPermissionDuplicate) @@ -538,6 +556,7 @@ func TestEnsureControlPlaneHAIngress_DuplicateTolerated(t *testing.T) { } func TestEnsureControlPlaneHAIngress_AuthorizeErrorSurfaced(t *testing.T) { + t.Parallel() sgp := newFakeSGProvisioner() sgp.authorizeErr = errors.New("vpcd unavailable") diff --git a/spinifex/handlers/eks/service.go b/spinifex/handlers/eks/service.go index 1f4516524..bcf99c850 100644 --- a/spinifex/handlers/eks/service.go +++ b/spinifex/handlers/eks/service.go @@ -13,8 +13,6 @@ type EKSService interface { CreateCluster(ctx context.Context, input *eks.CreateClusterInput, accountID, callerPrincipalARN string) (*eks.CreateClusterOutput, error) DescribeCluster(ctx context.Context, input *eks.DescribeClusterInput, accountID string) (*eks.DescribeClusterOutput, error) ListClusters(ctx context.Context, input *eks.ListClustersInput, accountID string) (*eks.ListClustersOutput, error) - UpdateClusterConfig(ctx context.Context, input *eks.UpdateClusterConfigInput, accountID string) (*eks.UpdateClusterConfigOutput, error) - UpdateClusterVersion(ctx context.Context, input *eks.UpdateClusterVersionInput, accountID string) (*eks.UpdateClusterVersionOutput, error) DeleteCluster(ctx context.Context, input *eks.DeleteClusterInput, accountID string) (*eks.DeleteClusterOutput, error) // Nodegroup @@ -22,7 +20,6 @@ type EKSService interface { DescribeNodegroup(ctx context.Context, input *eks.DescribeNodegroupInput, accountID string) (*eks.DescribeNodegroupOutput, error) ListNodegroups(ctx context.Context, input *eks.ListNodegroupsInput, accountID string) (*eks.ListNodegroupsOutput, error) UpdateNodegroupConfig(ctx context.Context, input *eks.UpdateNodegroupConfigInput, accountID string) (*eks.UpdateNodegroupConfigOutput, error) - UpdateNodegroupVersion(ctx context.Context, input *eks.UpdateNodegroupVersionInput, accountID string) (*eks.UpdateNodegroupVersionOutput, error) DeleteNodegroup(ctx context.Context, input *eks.DeleteNodegroupInput, accountID string) (*eks.DeleteNodegroupOutput, error) // AccessEntry + AccessPolicy @@ -60,12 +57,6 @@ type EKSService interface { // and NLB re-point. RestoreSnapshot(ctx context.Context, input *RestoreSnapshotInput, accountID string) (*RestoreSnapshotOutput, error) - // OIDC identity-provider configs. - AssociateIdentityProviderConfig(ctx context.Context, input *eks.AssociateIdentityProviderConfigInput, accountID string) (*eks.AssociateIdentityProviderConfigOutput, error) - DescribeIdentityProviderConfig(ctx context.Context, input *eks.DescribeIdentityProviderConfigInput, accountID string) (*eks.DescribeIdentityProviderConfigOutput, error) - ListIdentityProviderConfigs(ctx context.Context, input *eks.ListIdentityProviderConfigsInput, accountID string) (*eks.ListIdentityProviderConfigsOutput, error) - DisassociateIdentityProviderConfig(ctx context.Context, input *eks.DisassociateIdentityProviderConfigInput, accountID string) (*eks.DisassociateIdentityProviderConfigOutput, error) - // Tags TagResource(ctx context.Context, input *eks.TagResourceInput, accountID string) (*eks.TagResourceOutput, error) UntagResource(ctx context.Context, input *eks.UntagResourceInput, accountID string) (*eks.UntagResourceOutput, error) diff --git a/spinifex/handlers/eks/service_impl.go b/spinifex/handlers/eks/service_impl.go index da1f1adf6..e48322784 100644 --- a/spinifex/handlers/eks/service_impl.go +++ b/spinifex/handlers/eks/service_impl.go @@ -1452,14 +1452,6 @@ func (s *EKSServiceImpl) purgeClusterInfra(ctx context.Context, accountID, name return nil } -func (s *EKSServiceImpl) UpdateClusterConfig(ctx context.Context, _ *eks.UpdateClusterConfigInput, _ string) (*eks.UpdateClusterConfigOutput, error) { - return nil, notImpl() -} - -func (s *EKSServiceImpl) UpdateClusterVersion(ctx context.Context, _ *eks.UpdateClusterVersionInput, _ string) (*eks.UpdateClusterVersionOutput, error) { - return nil, notImpl() -} - // --- Nodegroup --- func (s *EKSServiceImpl) CreateNodegroup(ctx context.Context, input *eks.CreateNodegroupInput, accountID string) (*eks.CreateNodegroupOutput, error) { @@ -1506,10 +1498,6 @@ func (s *EKSServiceImpl) UpdateNodegroupConfig(ctx context.Context, input *eks.U return s.updateNodegroupConfig(ctx, acctKV, input, accountID) } -func (s *EKSServiceImpl) UpdateNodegroupVersion(ctx context.Context, input *eks.UpdateNodegroupVersionInput, accountID string) (*eks.UpdateNodegroupVersionOutput, error) { - return s.updateNodegroupVersion(input) -} - func (s *EKSServiceImpl) DeleteNodegroup(ctx context.Context, input *eks.DeleteNodegroupInput, accountID string) (*eks.DeleteNodegroupOutput, error) { if err := s.requireOrchestrationDeps("DeleteNodegroup"); err != nil { return nil, err @@ -1813,24 +1801,6 @@ func accessPolicyName(arn string) string { // --- Addons (see addons.go) --- -// --- OIDC identity-provider configs --- - -func (s *EKSServiceImpl) AssociateIdentityProviderConfig(ctx context.Context, _ *eks.AssociateIdentityProviderConfigInput, _ string) (*eks.AssociateIdentityProviderConfigOutput, error) { - return nil, notImpl() -} - -func (s *EKSServiceImpl) DescribeIdentityProviderConfig(ctx context.Context, _ *eks.DescribeIdentityProviderConfigInput, _ string) (*eks.DescribeIdentityProviderConfigOutput, error) { - return nil, notImpl() -} - -func (s *EKSServiceImpl) ListIdentityProviderConfigs(ctx context.Context, _ *eks.ListIdentityProviderConfigsInput, _ string) (*eks.ListIdentityProviderConfigsOutput, error) { - return nil, notImpl() -} - -func (s *EKSServiceImpl) DisassociateIdentityProviderConfig(ctx context.Context, _ *eks.DisassociateIdentityProviderConfigInput, _ string) (*eks.DisassociateIdentityProviderConfigOutput, error) { - return nil, notImpl() -} - // --- Tags --- // // Store-only against the cluster meta record or nodegroup record (no diff --git a/spinifex/handlers/eks/service_impl_cprecovery_test.go b/spinifex/handlers/eks/service_impl_cprecovery_test.go index ebccf9b4a..9aa1e50fe 100644 --- a/spinifex/handlers/eks/service_impl_cprecovery_test.go +++ b/spinifex/handlers/eks/service_impl_cprecovery_test.go @@ -56,6 +56,7 @@ func describeWithState(instanceID, state string) *ec2.DescribeInstancesOutput { } func TestCPControlAdapter_InstanceStateReturnsStateName(t *testing.T) { + t.Parallel() ctl := &fakeCPController{describeOut: describeWithState("i-cp", "stopped")} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -66,6 +67,7 @@ func TestCPControlAdapter_InstanceStateReturnsStateName(t *testing.T) { } func TestCPControlAdapter_InstanceStateNotFound(t *testing.T) { + t.Parallel() ctl := &fakeCPController{describeOut: &ec2.DescribeInstancesOutput{}} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -75,6 +77,7 @@ func TestCPControlAdapter_InstanceStateNotFound(t *testing.T) { } func TestCPControlAdapter_InstanceStatePropagatesDescribeError(t *testing.T) { + t.Parallel() ctl := &fakeCPController{describeErr: errors.New("describe boom")} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -84,6 +87,7 @@ func TestCPControlAdapter_InstanceStatePropagatesDescribeError(t *testing.T) { } func TestCPControlAdapter_StartInstanceForwardsIDAndAccount(t *testing.T) { + t.Parallel() ctl := &fakeCPController{} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -94,6 +98,7 @@ func TestCPControlAdapter_StartInstanceForwardsIDAndAccount(t *testing.T) { } func TestCPControlAdapter_StartInstancePropagatesError(t *testing.T) { + t.Parallel() ctl := &fakeCPController{recoverErr: errors.New("no owner")} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -101,6 +106,7 @@ func TestCPControlAdapter_StartInstancePropagatesError(t *testing.T) { } func TestCPControlAdapter_StopInstanceForwardsIDAndAccount(t *testing.T) { + t.Parallel() ctl := &fakeCPController{} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} @@ -112,6 +118,7 @@ func TestCPControlAdapter_StopInstanceForwardsIDAndAccount(t *testing.T) { } func TestCPControlAdapter_StopInstancePropagatesError(t *testing.T) { + t.Parallel() ctl := &fakeCPController{stopErr: errors.New("no owner")} a := cpControlAdapter{ctl: ctl, accountID: testAccountID} diff --git a/spinifex/handlers/eks/service_impl_test.go b/spinifex/handlers/eks/service_impl_test.go index b43f6f432..5ee6adea4 100644 --- a/spinifex/handlers/eks/service_impl_test.go +++ b/spinifex/handlers/eks/service_impl_test.go @@ -29,9 +29,9 @@ func setupTestService(t *testing.T) *EKSServiceImpl { // are absent so CreateCluster/DeleteCluster short-circuit to ServiceUnavailable // (the missing deps are logged at ERROR), DescribeCluster hits an empty // per-account bucket and surfaces ResourceNotFoundException, and ListClusters -// returns an empty list. The UpdateClusterConfig + UpdateClusterVersion paths -// stay NotImplemented. +// returns an empty list. func TestEKSServiceImpl_ClusterLifecycleShimMode(t *testing.T) { + t.Parallel() svc := setupTestService(t) _, err := svc.CreateCluster(context.Background(), &eks.CreateClusterInput{Name: aws.String("c1")}, testAccountID, "") @@ -45,12 +45,6 @@ func TestEKSServiceImpl_ClusterLifecycleShimMode(t *testing.T) { require.NotNil(t, out) require.Empty(t, out.Clusters) - _, err = svc.UpdateClusterConfig(context.Background(), &eks.UpdateClusterConfigInput{Name: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - - _, err = svc.UpdateClusterVersion(context.Background(), &eks.UpdateClusterVersionInput{Name: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - _, err = svc.DeleteCluster(context.Background(), &eks.DeleteClusterInput{Name: aws.String("c1")}, testAccountID) require.EqualError(t, err, awserrors.ErrorServiceUnavailable) } @@ -60,6 +54,7 @@ func TestEKSServiceImpl_ClusterLifecycleShimMode(t *testing.T) { // launch workers with no instance profile, which leaves IMDS roleless and blocks // ALB creation. The gate reports IAM even though MasterKey is present. func TestMissingOrchestrationDeps_NilIAMRejectsNodegroup(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.IAM = nil @@ -74,6 +69,7 @@ func TestMissingOrchestrationDeps_NilIAMRejectsNodegroup(t *testing.T) { // rejects every CreateCluster/CreateNodegroup with missing=[IAM] forever even // though the IAM service is fully available via the provider. func TestMissingOrchestrationDeps_IAMProviderSatisfiesGate(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) f.svc.deps.IAM = nil f.svc.deps.IAMProvider = func() handlers_iam.SystemInstanceRoleEnsurer { return newFakeEnsurer() } @@ -86,6 +82,7 @@ func TestMissingOrchestrationDeps_IAMProviderSatisfiesGate(t *testing.T) { // all. The refusal must name accessConfig.authenticationMode so a Terraform // caller sees why, not a bare code. func TestValidateCreateClusterInput_RejectsConfigMapAuthMode(t *testing.T) { + t.Parallel() in := createInput("alpha") in.AccessConfig = &eks.CreateAccessConfigRequest{ AuthenticationMode: aws.String(eks.AuthenticationModeConfigMap), @@ -100,6 +97,7 @@ func TestValidateCreateClusterInput_RejectsConfigMapAuthMode(t *testing.T) { // A junk authentication mode must be rejected the same way as CONFIG_MAP, and // must also name the parameter rather than surfacing a bare code. func TestValidateCreateClusterInput_RejectsJunkAuthMode(t *testing.T) { + t.Parallel() in := createInput("alpha") in.AccessConfig = &eks.CreateAccessConfigRequest{ AuthenticationMode: aws.String("NOT_A_REAL_MODE"), @@ -115,6 +113,7 @@ func TestValidateCreateClusterInput_RejectsJunkAuthMode(t *testing.T) { // module default. Its ConfigMap side grants nothing on Spinifex, exactly as it // would on real AWS with an empty aws-auth ConfigMap, so it must be accepted. func TestValidateCreateClusterInput_AcceptsAPIAndConfigMapAuthMode(t *testing.T) { + t.Parallel() in := createInput("alpha") in.AccessConfig = &eks.CreateAccessConfigRequest{ AuthenticationMode: aws.String(eks.AuthenticationModeApiAndConfigMap), @@ -123,6 +122,7 @@ func TestValidateCreateClusterInput_AcceptsAPIAndConfigMapAuthMode(t *testing.T) } func TestValidateCreateClusterInput_AcceptsAPIAuthMode(t *testing.T) { + t.Parallel() in := createInput("alpha") in.AccessConfig = &eks.CreateAccessConfigRequest{ AuthenticationMode: aws.String(eks.AuthenticationModeApi), @@ -133,6 +133,7 @@ func TestValidateCreateClusterInput_AcceptsAPIAuthMode(t *testing.T) { // An unset accessConfig (or an unset authenticationMode within it) must stay // valid — it defaults to API, exactly as an explicit "API" does. func TestValidateCreateClusterInput_AcceptsUnsetAuthMode(t *testing.T) { + t.Parallel() in := createInput("alpha") require.NoError(t, validateCreateClusterInput(in, testAccountID)) @@ -143,6 +144,7 @@ func TestValidateCreateClusterInput_AcceptsUnsetAuthMode(t *testing.T) { // A create request with no subnets is malformed and must be rejected before any // orchestration work (InvalidParameterValue → 400). func TestValidateCreateClusterInput_RejectsMissingSubnetIds(t *testing.T) { + t.Parallel() in := createInput("alpha") in.ResourcesVpcConfig = &eks.VpcConfigRequest{} require.EqualError(t, validateCreateClusterInput(in, testAccountID), awserrors.ErrorInvalidParameterValue) @@ -154,6 +156,7 @@ func TestValidateCreateClusterInput_RejectsMissingSubnetIds(t *testing.T) { // DescribeCluster on an absent cluster must reach the KV lookup (full deps // wired, unlike the shim short-circuit) and surface ResourceNotFoundException. func TestDescribeCluster_NotFoundWithFullDeps(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) _, err := f.svc.DescribeCluster(context.Background(), &eks.DescribeClusterInput{Name: aws.String("ghost")}, testAccountID) @@ -165,6 +168,7 @@ func TestDescribeCluster_NotFoundWithFullDeps(t *testing.T) { // read) and return idempotent success (Common Resource Lifecycle Contract #1), // not a teardown of nothing — so a tofu destroy retry converges. func TestDeleteCluster_NotFoundWithFullDeps(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) out, err := f.svc.DeleteCluster(context.Background(), deleteInput("ghost"), testAccountID) @@ -178,6 +182,7 @@ func TestDeleteCluster_NotFoundWithFullDeps(t *testing.T) { // leave recoverable key material behind. Force VM terminate to fail and assert // the key is already gone while the meta survives. func TestDeleteCluster_ZeroizesOIDCKeyBeforeTeardown(t *testing.T) { + t.Parallel() f := newDeleteClusterFixture(t, "alpha") f.inst.terminateErr = errors.New("hypervisor unreachable") @@ -194,9 +199,9 @@ func TestDeleteCluster_ZeroizesOIDCKeyBeforeTeardown(t *testing.T) { // In shim mode (orchestration deps absent) the mutating nodegroup methods // short-circuit to ServiceUnavailable, the read methods reach an empty -// per-account bucket and surface ResourceNotFoundException, and -// UpdateNodegroupVersion stays NotImplemented (v1 doesn't do AMI upgrades). +// per-account bucket and surface ResourceNotFoundException. func TestEKSServiceImpl_NodegroupMethodsShimMode(t *testing.T) { + t.Parallel() svc := setupTestService(t) _, err := svc.CreateNodegroup(context.Background(), &eks.CreateNodegroupInput{ClusterName: aws.String("c1"), NodegroupName: aws.String("ng1")}, testAccountID) @@ -211,9 +216,6 @@ func TestEKSServiceImpl_NodegroupMethodsShimMode(t *testing.T) { _, err = svc.UpdateNodegroupConfig(context.Background(), &eks.UpdateNodegroupConfigInput{ClusterName: aws.String("c1"), NodegroupName: aws.String("ng1")}, testAccountID) require.EqualError(t, err, awserrors.ErrorServiceUnavailable) - _, err = svc.UpdateNodegroupVersion(context.Background(), &eks.UpdateNodegroupVersionInput{ClusterName: aws.String("c1"), NodegroupName: aws.String("ng1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - _, err = svc.DeleteNodegroup(context.Background(), &eks.DeleteNodegroupInput{ClusterName: aws.String("c1"), NodegroupName: aws.String("ng1")}, testAccountID) require.EqualError(t, err, awserrors.ErrorServiceUnavailable) } @@ -231,6 +233,7 @@ func seedTestCluster(t *testing.T, svc *EKSServiceImpl, cluster string) { const testPrincipalARN = "arn:aws:iam::111122223333:role/dev" func TestAccessEntry_UnknownClusterIsNotFound(t *testing.T) { + t.Parallel() svc := setupTestService(t) _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ ClusterName: aws.String("missing"), PrincipalArn: aws.String(testPrincipalARN), @@ -239,6 +242,7 @@ func TestAccessEntry_UnknownClusterIsNotFound(t *testing.T) { } func TestAccessEntry_CreateDescribeListDelete(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") @@ -282,6 +286,7 @@ func TestAccessEntry_CreateDescribeListDelete(t *testing.T) { } func TestAccessEntry_RejectsNodeType(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ @@ -291,6 +296,7 @@ func TestAccessEntry_RejectsNodeType(t *testing.T) { } func TestAccessEntry_DescribeDeleteMissingIsNotFound(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.DescribeAccessEntry(context.Background(), &eks.DescribeAccessEntryInput{ @@ -304,6 +310,7 @@ func TestAccessEntry_DescribeDeleteMissingIsNotFound(t *testing.T) { } func TestAccessPolicy_AssociateListDisassociate(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ @@ -346,6 +353,7 @@ func TestAccessPolicy_AssociateListDisassociate(t *testing.T) { } func TestAccessPolicy_AssociateRejectsUnsupportedPolicyAndScope(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ @@ -374,6 +382,7 @@ func TestAccessPolicy_AssociateRejectsUnsupportedPolicyAndScope(t *testing.T) { // time with a message naming accessScope.type, not read back as a durable // grant that never actually authorizes anything. func TestAccessPolicy_AssociateRejectsNamespaceScope(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ @@ -397,6 +406,7 @@ func TestAccessPolicy_AssociateRejectsNamespaceScope(t *testing.T) { // DisassociateAccessPolicy already removes the association from the record; // this confirms the projection built on top of it reflects the removal too. func TestAccessPolicy_DisassociateRemovesProjectedGroup(t *testing.T) { + t.Parallel() svc := setupTestService(t) seedTestCluster(t, svc, "c1") _, err := svc.CreateAccessEntry(context.Background(), &eks.CreateAccessEntryInput{ @@ -431,6 +441,7 @@ func TestAccessPolicy_DisassociateRemovesProjectedGroup(t *testing.T) { } func TestListAccessPolicies_ReturnsSupportedCatalogue(t *testing.T) { + t.Parallel() svc := setupTestService(t) out, err := svc.ListAccessPolicies(context.Background(), &eks.ListAccessPoliciesInput{}, testAccountID) require.NoError(t, err) @@ -442,23 +453,8 @@ func TestListAccessPolicies_ReturnsSupportedCatalogue(t *testing.T) { } } -func TestEKSServiceImpl_OIDCMethodsReturnNotImplemented(t *testing.T) { - svc := setupTestService(t) - - _, err := svc.AssociateIdentityProviderConfig(context.Background(), &eks.AssociateIdentityProviderConfigInput{ClusterName: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - - _, err = svc.DescribeIdentityProviderConfig(context.Background(), &eks.DescribeIdentityProviderConfigInput{ClusterName: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - - _, err = svc.ListIdentityProviderConfigs(context.Background(), &eks.ListIdentityProviderConfigsInput{ClusterName: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) - - _, err = svc.DisassociateIdentityProviderConfig(context.Background(), &eks.DisassociateIdentityProviderConfigInput{ClusterName: aws.String("c1")}, testAccountID) - require.EqualError(t, err, awserrors.ErrorNotImplemented) -} - func TestEKSServiceImpl_ClusterTagRoundTrip(t *testing.T) { + t.Parallel() svc := setupTestService(t) js := testutil.NewJetStream(t, svc.deps.NATSConn) kv, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -501,6 +497,7 @@ func TestEKSServiceImpl_ClusterTagRoundTrip(t *testing.T) { } func TestEKSServiceImpl_NodegroupTagRoundTrip(t *testing.T) { + t.Parallel() svc := setupTestService(t) js := testutil.NewJetStream(t, svc.deps.NATSConn) kv, err := GetOrCreateAccountBucket(t.Context(), js, testAccountID) @@ -548,6 +545,7 @@ func TestEKSServiceImpl_NodegroupTagRoundTrip(t *testing.T) { } func TestEKSServiceImpl_NodegroupTagMissingNotFound(t *testing.T) { + t.Parallel() svc := setupTestService(t) const arn = "arn:aws:eks:us-east-1:111122223333:nodegroup/c1/absent/abc123" @@ -568,6 +566,7 @@ func TestEKSServiceImpl_NodegroupTagMissingNotFound(t *testing.T) { } func TestEKSServiceImpl_TagsUnsupportedARNNotImplemented(t *testing.T) { + t.Parallel() svc := setupTestService(t) const fpARN = "arn:aws:eks:us-east-1:111122223333:fargateprofile/c1/fp1/abc123" @@ -583,6 +582,7 @@ func TestEKSServiceImpl_TagsUnsupportedARNNotImplemented(t *testing.T) { // The cluster role must be a role in the caller's own account. func TestValidateCreateClusterInput_RejectsRoleOutsideCallerAccount(t *testing.T) { + t.Parallel() for _, roleARN := range []string{ "arn:aws:iam::999999999999:role/eks-cluster", "arn:aws:iam::" + testAccountID + ":user/eks-cluster", diff --git a/spinifex/handlers/eks/service_nats.go b/spinifex/handlers/eks/service_nats.go index 1d44cb71e..02d26e840 100644 --- a/spinifex/handlers/eks/service_nats.go +++ b/spinifex/handlers/eks/service_nats.go @@ -39,14 +39,6 @@ func (s *NATSEKSService) ListClusters(ctx context.Context, input *eks.ListCluste return natsmsg.NATSRequest[eks.ListClustersOutput](ctx, s.natsConn, "eks.ListClusters", input, defaultTimeout, accountID) } -func (s *NATSEKSService) UpdateClusterConfig(ctx context.Context, input *eks.UpdateClusterConfigInput, accountID string) (*eks.UpdateClusterConfigOutput, error) { - return natsmsg.NATSRequest[eks.UpdateClusterConfigOutput](ctx, s.natsConn, "eks.UpdateClusterConfig", input, defaultTimeout, accountID) -} - -func (s *NATSEKSService) UpdateClusterVersion(ctx context.Context, input *eks.UpdateClusterVersionInput, accountID string) (*eks.UpdateClusterVersionOutput, error) { - return natsmsg.NATSRequest[eks.UpdateClusterVersionOutput](ctx, s.natsConn, "eks.UpdateClusterVersion", input, defaultTimeout, accountID) -} - func (s *NATSEKSService) DeleteCluster(ctx context.Context, input *eks.DeleteClusterInput, accountID string) (*eks.DeleteClusterOutput, error) { return natsmsg.NATSRequest[eks.DeleteClusterOutput](ctx, s.natsConn, "eks.DeleteCluster", input, defaultTimeout, accountID) } @@ -69,10 +61,6 @@ func (s *NATSEKSService) UpdateNodegroupConfig(ctx context.Context, input *eks.U return natsmsg.NATSRequest[eks.UpdateNodegroupConfigOutput](ctx, s.natsConn, "eks.UpdateNodegroupConfig", input, defaultTimeout, accountID) } -func (s *NATSEKSService) UpdateNodegroupVersion(ctx context.Context, input *eks.UpdateNodegroupVersionInput, accountID string) (*eks.UpdateNodegroupVersionOutput, error) { - return natsmsg.NATSRequest[eks.UpdateNodegroupVersionOutput](ctx, s.natsConn, "eks.UpdateNodegroupVersion", input, defaultTimeout, accountID) -} - func (s *NATSEKSService) DeleteNodegroup(ctx context.Context, input *eks.DeleteNodegroupInput, accountID string) (*eks.DeleteNodegroupOutput, error) { return natsmsg.NATSRequest[eks.DeleteNodegroupOutput](ctx, s.natsConn, "eks.DeleteNodegroup", input, defaultTimeout, accountID) } @@ -157,24 +145,6 @@ func (s *NATSEKSService) RestoreSnapshot(ctx context.Context, input *RestoreSnap return natsmsg.NATSRequest[RestoreSnapshotOutput](ctx, s.natsConn, "eks.RestoreSnapshot", input, defaultTimeout, accountID) } -// --- OIDC identity-provider configs --- - -func (s *NATSEKSService) AssociateIdentityProviderConfig(ctx context.Context, input *eks.AssociateIdentityProviderConfigInput, accountID string) (*eks.AssociateIdentityProviderConfigOutput, error) { - return natsmsg.NATSRequest[eks.AssociateIdentityProviderConfigOutput](ctx, s.natsConn, "eks.AssociateIdentityProviderConfig", input, defaultTimeout, accountID) -} - -func (s *NATSEKSService) DescribeIdentityProviderConfig(ctx context.Context, input *eks.DescribeIdentityProviderConfigInput, accountID string) (*eks.DescribeIdentityProviderConfigOutput, error) { - return natsmsg.NATSRequest[eks.DescribeIdentityProviderConfigOutput](ctx, s.natsConn, "eks.DescribeIdentityProviderConfig", input, defaultTimeout, accountID) -} - -func (s *NATSEKSService) ListIdentityProviderConfigs(ctx context.Context, input *eks.ListIdentityProviderConfigsInput, accountID string) (*eks.ListIdentityProviderConfigsOutput, error) { - return natsmsg.NATSRequest[eks.ListIdentityProviderConfigsOutput](ctx, s.natsConn, "eks.ListIdentityProviderConfigs", input, defaultTimeout, accountID) -} - -func (s *NATSEKSService) DisassociateIdentityProviderConfig(ctx context.Context, input *eks.DisassociateIdentityProviderConfigInput, accountID string) (*eks.DisassociateIdentityProviderConfigOutput, error) { - return natsmsg.NATSRequest[eks.DisassociateIdentityProviderConfigOutput](ctx, s.natsConn, "eks.DisassociateIdentityProviderConfig", input, defaultTimeout, accountID) -} - // --- Tags --- func (s *NATSEKSService) TagResource(ctx context.Context, input *eks.TagResourceInput, accountID string) (*eks.TagResourceOutput, error) { diff --git a/spinifex/handlers/eks/spawn_registered_reconcilers_test.go b/spinifex/handlers/eks/spawn_registered_reconcilers_test.go index 813b906b8..933111504 100644 --- a/spinifex/handlers/eks/spawn_registered_reconcilers_test.go +++ b/spinifex/handlers/eks/spawn_registered_reconcilers_test.go @@ -13,6 +13,7 @@ import ( // so lifecycle reconcile resumes without waiting for the next CreateCluster, // while terminal (FAILED/DELETING) clusters stay untouched. func TestSpawnRegisteredReconcilers_ResumesNonTerminal(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) active := sampleClusterMeta("alpha") @@ -45,6 +46,7 @@ func TestSpawnRegisteredReconcilers_ResumesNonTerminal(t *testing.T) { // unreachable JetStream as "no accounts" and leave every cluster in the fleet // without a reconciler until the next daemon restart — with clean boot logs. func TestSpawnRegisteredReconcilers_EnumerationFailureIsReported(t *testing.T) { + t.Parallel() f := newEKSServiceFixture(t) active := sampleClusterMeta("alpha") @@ -62,6 +64,7 @@ func TestSpawnRegisteredReconcilers_EnumerationFailureIsReported(t *testing.T) { // safe no-op when orchestration deps are absent (the shim construction path), // so it never panics or registers phantom holders on a half-wired daemon. func TestSpawnRegisteredReconcilers_DepsNotReadyNoops(t *testing.T) { + t.Parallel() svc := setupTestService(t) require.NoError(t, svc.SpawnRegisteredReconcilers()) assert.False(t, svc.registry.Has(testAccountID, "alpha")) diff --git a/spinifex/handlers/eks/state_report_fsync_test.go b/spinifex/handlers/eks/state_report_fsync_test.go index 85d412ab4..7489ad0f0 100644 --- a/spinifex/handlers/eks/state_report_fsync_test.go +++ b/spinifex/handlers/eks/state_report_fsync_test.go @@ -21,11 +21,13 @@ func ptrFloat(v float64) *float64 { return &v } // and an etcd with too few fsyncs to average all arrive as nil, and treating any // of them as healthy would hide exactly the case the field exists to surface. func TestServerStateReport_SlowFsyncNeedsASample(t *testing.T) { + t.Parallel() assert.False(t, fsyncReport("ok", nil).SlowFsync(), "no sample must not read as fast") assert.False(t, fsyncReport("fail", nil).SlowFsync(), "no sample must not read as slow either") } func TestServerStateReport_SlowFsyncThreshold(t *testing.T) { + t.Parallel() assert.False(t, fsyncReport("ok", ptrFloat(6.0)).SlowFsync(), "single-digit ms is healthy") assert.True(t, fsyncReport("ok", ptrFloat(slowFsyncMs)).SlowFsync(), "the threshold itself is slow") assert.True(t, fsyncReport("ok", ptrFloat(90.0)).SlowFsync(), "a stalled disk is slow") @@ -35,6 +37,7 @@ func TestServerStateReport_SlowFsyncThreshold(t *testing.T) { // answers while its datastore is served at 90ms is the case that was previously // invisible until it degraded into etcd:unreachable. func TestServerStateReport_SlowFsyncOnAHealthyApiserver(t *testing.T) { + t.Parallel() r := fsyncReport("ok", ptrFloat(90.0)) assert.True(t, r.Healthy(), "apiserver is still answering") assert.True(t, r.SlowFsync(), "and its datastore is still slow") @@ -43,6 +46,7 @@ func TestServerStateReport_SlowFsyncOnAHealthyApiserver(t *testing.T) { // A slow fsync must never make the cluster unhealthy. observe() gates cluster // state, and a working cluster on a slow disk is working. func TestClusterReconciler_SlowFsyncDoesNotFailHealth(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) r.latest.Store(fsyncReport("ok", ptrFloat(90.0))) @@ -55,6 +59,7 @@ func TestClusterReconciler_SlowFsyncDoesNotFailHealth(t *testing.T) { // a warning every interval is how a real signal gets tuned out. storeReport is // the only path that sees both the previous and the new report. func TestClusterReconciler_LogFsyncTransitionIsLatched(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) // Crossing into slow, then staying slow, then recovering. Asserted through @@ -78,6 +83,7 @@ func TestClusterReconciler_LogFsyncTransitionIsLatched(t *testing.T) { // first usable sample is the only chance to record what normal looks like — a // green cell-25 previously left nothing to compare a later slow run against. func TestClusterReconciler_FirstKnownSampleIsTheBaseline(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) // A guest whose etcd has not warmed up yet reports no sample at all. @@ -94,6 +100,7 @@ func TestClusterReconciler_FirstKnownSampleIsTheBaseline(t *testing.T) { // A report with no sample must not be read as a recovery from a slow one, or a // guest that stopped serving metrics would look like a disk that got faster. func TestClusterReconciler_MissingSampleIsNotRecovery(t *testing.T) { + t.Parallel() r, _, _ := newStateReconcilerHarness(t) r.storeReport(fsyncReport("ok", ptrFloat(90.0))) r.storeReport(fsyncReport("ok", nil)) diff --git a/spinifex/handlers/eks/store_test.go b/spinifex/handlers/eks/store_test.go index 906bfc6ed..8a65e2439 100644 --- a/spinifex/handlers/eks/store_test.go +++ b/spinifex/handlers/eks/store_test.go @@ -11,6 +11,7 @@ import ( const testAccountID = "111122223333" func TestGetOrCreateAccountBucket_Idempotent(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) @@ -33,6 +34,7 @@ func TestGetOrCreateAccountBucket_Idempotent(t *testing.T) { // path (replicas <= 0 -> 1) is exercisable end-to-end here; multi-node // replica counts are exercised live (see the associated bug doc). func TestGetOrCreateAccountBucket_ReplicasClamped(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) @@ -48,6 +50,7 @@ func TestGetOrCreateAccountBucket_ReplicasClamped(t *testing.T) { } func TestInitLeaderBucket_Idempotent(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) @@ -65,6 +68,7 @@ func TestInitLeaderBucket_Idempotent(t *testing.T) { // TestInitLeaderBucket_ReplicasClamped confirms the leader bucket is created // with the requested replica count, clamped to a minimum of 1. func TestInitLeaderBucket_ReplicasClamped(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) @@ -103,10 +107,12 @@ func TestKeyPaths_MatchQ2Spec(t *testing.T) { } func TestAccountBucketName(t *testing.T) { + t.Parallel() assert.Equal(t, "eks-account-111122223333", AccountBucketName(testAccountID)) } func TestNewStore_NilConn(t *testing.T) { + t.Parallel() _, err := NewStore(nil) require.Error(t, err) } diff --git a/spinifex/handlers/eks/token_review_test.go b/spinifex/handlers/eks/token_review_test.go index 15290e106..5d2eaed81 100644 --- a/spinifex/handlers/eks/token_review_test.go +++ b/spinifex/handlers/eks/token_review_test.go @@ -44,6 +44,7 @@ func okVerify(_ string) (*TokenVerifyResponse, error) { } func TestAuthenticate_GrantsWhenEntryExists(t *testing.T) { + t.Parallel() lookup := func(arn string) (*AccessEntryRecord, error) { assert.Equal(t, testARN, arn) return &AccessEntryRecord{ @@ -61,6 +62,7 @@ func TestAuthenticate_GrantsWhenEntryExists(t *testing.T) { } func TestAuthenticate_DeniesMalformedToken(t *testing.T) { + t.Parallel() called := false verify := func(string) (*TokenVerifyResponse, error) { called = true; return nil, nil } lookup := func(string) (*AccessEntryRecord, error) { return nil, nil } @@ -72,6 +74,7 @@ func TestAuthenticate_DeniesMalformedToken(t *testing.T) { } func TestAuthenticate_DeniesWhenVerifyFails(t *testing.T) { + t.Parallel() verify := func(string) (*TokenVerifyResponse, error) { return nil, errors.New("signature mismatch") } @@ -85,6 +88,7 @@ func TestAuthenticate_DeniesWhenVerifyFails(t *testing.T) { } func TestAuthenticate_DeniesWhenNoAccessEntry(t *testing.T) { + t.Parallel() lookup := func(string) (*AccessEntryRecord, error) { return nil, ErrAccessEntryNotFound } @@ -95,6 +99,7 @@ func TestAuthenticate_DeniesWhenNoAccessEntry(t *testing.T) { } func TestAuthenticate_FallsBackUIDToARN(t *testing.T) { + t.Parallel() verify := func(string) (*TokenVerifyResponse, error) { return &TokenVerifyResponse{ARN: testARN}, nil // no UserID } @@ -130,6 +135,7 @@ func TestEffectiveGroups_EachPolicyProducesItsGroup(t *testing.T) { } func TestEffectiveGroups_TwoAssociationsProduceBothGroups(t *testing.T) { + t.Parallel() rec := &AccessEntryRecord{ AssociatedPolicies: []AssociatedAccessPolicy{ {PolicyARN: "arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy", AccessScope: AccessScope{Type: accessScopeCluster}}, @@ -142,6 +148,7 @@ func TestEffectiveGroups_TwoAssociationsProduceBothGroups(t *testing.T) { // A creator seeded system:masters directly (CreateCluster bootstrap) who is // also associated to AmazonEKSClusterAdminPolicy must not see the group twice. func TestEffectiveGroups_DedupesSeededAndAssociatedClusterAdmin(t *testing.T) { + t.Parallel() rec := &AccessEntryRecord{ KubernetesGroups: []string{"system:masters"}, AssociatedPolicies: []AssociatedAccessPolicy{ @@ -154,6 +161,7 @@ func TestEffectiveGroups_DedupesSeededAndAssociatedClusterAdmin(t *testing.T) { // Records written before namespace scope was rejected at association time may // still carry one; it must not silently widen to a cluster-scope grant. func TestEffectiveGroups_NamespaceScopeContributesNothing(t *testing.T) { + t.Parallel() rec := &AccessEntryRecord{ AssociatedPolicies: []AssociatedAccessPolicy{ {PolicyARN: "arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy", AccessScope: AccessScope{Type: accessScopeNamespace, Namespaces: []string{"team-a"}}}, @@ -163,6 +171,7 @@ func TestEffectiveGroups_NamespaceScopeContributesNothing(t *testing.T) { } func TestEffectiveGroups_UnrecognizedPolicyDoesNotPanic(t *testing.T) { + t.Parallel() rec := &AccessEntryRecord{ AssociatedPolicies: []AssociatedAccessPolicy{ {PolicyARN: "arn:aws:eks::aws:cluster-access-policy/MadeUpPolicy", AccessScope: AccessScope{Type: accessScopeCluster}}, @@ -175,6 +184,7 @@ func TestEffectiveGroups_UnrecognizedPolicyDoesNotPanic(t *testing.T) { // End-to-end through Authenticate: an associated policy's group must reach the // TokenReview result, not just the internal helper. func TestAuthenticate_ProjectsAssociatedPolicyGroup(t *testing.T) { + t.Parallel() lookup := func(arn string) (*AccessEntryRecord, error) { return &AccessEntryRecord{ KubernetesUsername: testARN, @@ -191,6 +201,7 @@ func TestAuthenticate_ProjectsAssociatedPolicyGroup(t *testing.T) { } func TestResolveTokenReview_NilConn(t *testing.T) { + t.Parallel() _, err := ResolveTokenReview(context.Background(), nil, "111122223333", "alpha", "tok", time.Second) require.Error(t, err) } @@ -198,12 +209,14 @@ func TestResolveTokenReview_NilConn(t *testing.T) { // A genuine infra fault (account bucket never created) is an error, not a // silent Authenticated=false — the webhook turns it into a retryable 5xx. func TestResolveTokenReview_MissingBucketErrors(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) _, err := ResolveTokenReview(context.Background(), nc, "111122223333", "alpha", validToken("https://sts/?x=1"), time.Second) require.Error(t, err) } func TestResolveTokenReview_AuthenticatesViaVerifyAndKV(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) kv := seedAccountBucket(t, js, "111122223333") @@ -239,6 +252,7 @@ func TestResolveTokenReview_AuthenticatesViaVerifyAndKV(t *testing.T) { // A valid IAM principal with no AccessEntry resolves to Authenticated=false // (a clean 401), not an error. func TestResolveTokenReview_NoAccessEntryDenies(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) seedAccountBucket(t, js, "111122223333") diff --git a/spinifex/handlers/eks/token_webhook_test.go b/spinifex/handlers/eks/token_webhook_test.go index 69f89c1a8..3b85f1dd5 100644 --- a/spinifex/handlers/eks/token_webhook_test.go +++ b/spinifex/handlers/eks/token_webhook_test.go @@ -9,6 +9,7 @@ import ( ) func TestDecodeGetToken_RoundTrips(t *testing.T) { + t.Parallel() url := "https://sts.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15&X-Amz-Algorithm=AWS4-HMAC-SHA256" token := getTokenV1Prefix + base64.RawURLEncoding.EncodeToString([]byte(url)) @@ -18,6 +19,7 @@ func TestDecodeGetToken_RoundTrips(t *testing.T) { } func TestDecodeGetToken_TrimsWhitespace(t *testing.T) { + t.Parallel() url := "https://sts.amazonaws.com/?Action=GetCallerIdentity" token := " " + getTokenV1Prefix + base64.RawURLEncoding.EncodeToString([]byte(url)) + "\n" diff --git a/spinifex/handlers/eks/volume_reclaim_test.go b/spinifex/handlers/eks/volume_reclaim_test.go index 25c29154b..21f9703a3 100644 --- a/spinifex/handlers/eks/volume_reclaim_test.go +++ b/spinifex/handlers/eks/volume_reclaim_test.go @@ -35,6 +35,7 @@ func tagVol(id string, tags map[string]string) *ec2.Volume { } func TestReclaimCSIVolumes_ReportsOwnedVolumes(t *testing.T) { + t.Parallel() fake := &fakeCSIVolumeReclaimer{out: &ec2.DescribeVolumesOutput{Volumes: []*ec2.Volume{ tagVol("vol-owned1", map[string]string{ "kubernetes.io/cluster/test-cluster": "owned", @@ -50,6 +51,7 @@ func TestReclaimCSIVolumes_ReportsOwnedVolumes(t *testing.T) { } func TestReclaimCSIVolumes_IgnoresUnrelatedVolumes(t *testing.T) { + t.Parallel() fake := &fakeCSIVolumeReclaimer{out: &ec2.DescribeVolumesOutput{Volumes: []*ec2.Volume{ tagVol("vol-other-cluster", map[string]string{ "kubernetes.io/cluster/some-other-cluster": "owned", @@ -66,6 +68,7 @@ func TestReclaimCSIVolumes_IgnoresUnrelatedVolumes(t *testing.T) { } func TestReclaimCSIVolumes_NilDepsIsNoop(t *testing.T) { + t.Parallel() svc := &EKSServiceImpl{deps: EKSServiceDeps{}} n, err := svc.reclaimCSIVolumes(context.Background(), "acct1", "test-cluster") @@ -74,6 +77,7 @@ func TestReclaimCSIVolumes_NilDepsIsNoop(t *testing.T) { } func TestReclaimCSIVolumes_DescribeErrorSurfaces(t *testing.T) { + t.Parallel() fake := &fakeCSIVolumeReclaimer{err: errors.New("describe volumes: boom")} svc := &EKSServiceImpl{deps: EKSServiceDeps{Volume: fake}} diff --git a/spinifex/handlers/eks/watch_source_test.go b/spinifex/handlers/eks/watch_source_test.go index 41d55518d..9edfdf701 100644 --- a/spinifex/handlers/eks/watch_source_test.go +++ b/spinifex/handlers/eks/watch_source_test.go @@ -15,6 +15,7 @@ import ( // bucket that is not an EKS account bucket must not be watched, or every write // anywhere in the cluster would wake the DNS reconcile. func TestAccountWatchBuckets_ReturnsOnePerAccountBucket(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) @@ -39,6 +40,7 @@ func TestAccountWatchBuckets_ReturnsOnePerAccountBucket(t *testing.T) { } func TestAccountWatchBuckets_NoAccountsIsNotAnError(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) buckets, err := handlers_eks.AccountWatchBuckets(t.Context(), nc) @@ -49,6 +51,7 @@ func TestAccountWatchBuckets_NoAccountsIsNotAnError(t *testing.T) { // TestAccountWatchBuckets_BucketsAreWatchable closes the loop: the handles are // not merely named, they open against the live server. func TestAccountWatchBuckets_BucketsAreWatchable(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) js := testutil.NewJetStream(t, nc) _, err := handlers_eks.GetOrCreateAccountBucket(t.Context(), js, "111111111111") @@ -68,6 +71,7 @@ func TestAccountWatchBuckets_BucketsAreWatchable(t *testing.T) { // the underlying stream-names listing fail, and that failure must surface // rather than come back as an empty, and therefore prunable, set. func TestAccountWatchBuckets_EnumerationErrorPropagates(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) ctx, cancel := context.WithCancel(t.Context()) cancel() diff --git a/spinifex/handlers/elbv2/service.go b/spinifex/handlers/elbv2/service.go index a5b9e5582..feb9b4590 100644 --- a/spinifex/handlers/elbv2/service.go +++ b/spinifex/handlers/elbv2/service.go @@ -1,3 +1,6 @@ +// Package handlers_elbv2 implements the ELBv2 actions for application and +// network load balancers: the daemon-side JetStream KV implementation, its NATS +// client, and the HAProxy and nginx configs rendered for the LB VMs. package handlers_elbv2 import ( diff --git a/spinifex/handlers/elbv2/service_impl.go b/spinifex/handlers/elbv2/service_impl.go index 84a268f1a..56414b641 100644 --- a/spinifex/handlers/elbv2/service_impl.go +++ b/spinifex/handlers/elbv2/service_impl.go @@ -1568,14 +1568,6 @@ func lbFrontendIP(r *LoadBalancerRecord) string { return r.VPCIP } -// DesiredDNSChanges returns the UPSERT records for every endpoint-ready load -// balancer across all accounts, plus whether the enumeration was authoritative. The KV -// store spans every tenant, so a successful list is a complete cross-account -// view; a store error yields ok=false so the reconcile suppresses ELB pruning -// rather than delete another tenant's live record on a partial view. -// -// The daemon's reconcile loop calls this without a context, so the read runs on -// the service lifetime context: the sweep should stop once the service closes. // DNSWatchBucket is the bucket behind DesiredDNSChanges, so the DNS reconcile // can be woken by a load-balancer change rather than poll for one. Nil when // there is no store to watch. @@ -1586,6 +1578,14 @@ func (s *ELBv2ServiceImpl) DNSWatchBucket() *kvstore.Bucket { return s.store.WatchBucket() } +// DesiredDNSChanges returns the UPSERT records for every endpoint-ready load +// balancer across all accounts, plus whether the enumeration was authoritative. The KV +// store spans every tenant, so a successful list is a complete cross-account +// view; a store error yields ok=false so the reconcile suppresses ELB pruning +// rather than delete another tenant's live record on a partial view. +// +// The daemon's reconcile loop calls this without a context, so the read runs on +// the service lifetime context: the sweep should stop once the service closes. func (s *ELBv2ServiceImpl) DesiredDNSChanges() (changes []dns.Change, ok bool) { if s == nil || s.store == nil || s.dnsBaseDomain == "" { return nil, false diff --git a/spinifex/handlers/iam/groups.go b/spinifex/handlers/iam/groups.go index 1e885b7dd..ab8cd6091 100644 --- a/spinifex/handlers/iam/groups.go +++ b/spinifex/handlers/iam/groups.go @@ -378,7 +378,10 @@ func (s *IAMServiceImpl) ListAttachedGroupPolicies(accountID string, input *iam. return nil, err } - attached := s.attachedPolicies(ctx, accountID, group.AttachedPolicies, aws.StringValue(input.PathPrefix)) + attached, err := s.attachedPolicies(ctx, accountID, group.AttachedPolicies, aws.StringValue(input.PathPrefix)) + if err != nil { + return nil, err + } return &iam.ListAttachedGroupPoliciesOutput{ AttachedPolicies: attached, @@ -403,6 +406,9 @@ func (s *IAMServiceImpl) PutGroupPolicy(accountID string, input *iam.PutGroupPol if err := validateIAMName("policyName", policyName, 128); err != nil { return nil, err } + if err := checkPolicyDocumentLength(policyDoc); err != nil { + return nil, err + } if _, err := ValidatePolicyDocument(policyDoc); err != nil { return nil, awserrors.Errorf(awserrors.ErrorIAMMalformedPolicyDocument, "policy %q on group %q: %w", policyName, groupName, err) @@ -412,6 +418,9 @@ func (s *IAMServiceImpl) PutGroupPolicy(accountID string, input *iam.PutGroupPol if err != nil { return nil, err } + if err := checkInlinePolicySize("group", groupName, groupPolicySizeQuota, group.InlinePolicies, policyName, policyDoc); err != nil { + return nil, err + } if group.InlinePolicies == nil { group.InlinePolicies = map[string]string{} diff --git a/spinifex/handlers/iam/groups_test.go b/spinifex/handlers/iam/groups_test.go index c3e8f9128..69612ad9d 100644 --- a/spinifex/handlers/iam/groups_test.go +++ b/spinifex/handlers/iam/groups_test.go @@ -790,21 +790,6 @@ func TestPutGroupPolicy_MalformedDocument(t *testing.T) { assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) } -func TestPutGroupPolicy_OversizedDocument(t *testing.T) { - t.Parallel() - svc := setupTestIAMService(t) - createTestGroup(t, svc, "oversized-group") - - huge := strings.Repeat("a", maxPolicyDocumentSize+1) - _, err := svc.PutGroupPolicy(testAccountID, &iam.PutGroupPolicyInput{ - GroupName: aws.String("oversized-group"), - PolicyName: aws.String("Huge"), - PolicyDocument: aws.String(huge), - }) - assert.Error(t, err) - assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) -} - func TestPutGroupPolicy_GroupNotFound(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) diff --git a/spinifex/handlers/iam/instance_profiles.go b/spinifex/handlers/iam/instance_profiles.go index 99e25cb11..120ed3d71 100644 --- a/spinifex/handlers/iam/instance_profiles.go +++ b/spinifex/handlers/iam/instance_profiles.go @@ -147,6 +147,12 @@ func (s *IAMServiceImpl) ListInstanceProfiles(accountID string, input *iam.ListI sdkProfile, err := s.listedProfileToSDK(ctx, accountID, &profile) if err != nil { + // One dangling role reference must not hide every other profile in the account. + if code, ok := awserrors.ResolveErrorCode(err); ok && code == awserrors.ErrorIAMNoSuchEntity { + slog.Warn("ListInstanceProfiles: skipping profile whose attached role no longer exists", + "key", key, "roleName", profile.RoleName) + continue + } return nil, err } profiles = append(profiles, sdkProfile) @@ -162,19 +168,18 @@ func (s *IAMServiceImpl) DeleteInstanceProfile(accountID string, input *iam.Dele ctx := context.Background() profileName := *input.InstanceProfileName - profile, err := s.getInstanceProfile(ctx, accountID, profileName) + // Revision-guarded, so a role attached after the check sends the delete back through it. + _, err := kvutil.DeleteIf(ctx, s.instanceProfilesBucket, accountID+"."+profileName, s.instanceProfileCASConfig(accountID, profileName), + func(p *InstanceProfile) error { + if p.RoleName != "" { + return errors.New(awserrors.ErrorIAMDeleteConflict) + } + return nil + }) if err != nil { return nil, err } - if profile.RoleName != "" { - return nil, errors.New(awserrors.ErrorIAMDeleteConflict) - } - - if err := s.instanceProfilesBucket.Delete(ctx, accountID+"."+profileName); err != nil { - return nil, fmt.Errorf("delete instance profile: %w", err) - } - slog.Info("IAM instance profile deleted", "accountID", accountID, "instanceProfileName", profileName) return &iam.DeleteInstanceProfileOutput{}, nil } @@ -372,7 +377,12 @@ func (s *IAMServiceImpl) getInstanceProfile(ctx context.Context, accountID, prof // re-reading and re-running mutate when a concurrent writer wins the race. // mutate reports whether it changed the record; a false return commits nothing. func (s *IAMServiceImpl) updateInstanceProfileCAS(ctx context.Context, accountID, profileName string, mutate func(*InstanceProfile) (bool, error)) error { - _, err := kvutil.Update(ctx, s.instanceProfilesBucket, accountID+"."+profileName, kvutil.CASConfig{ + _, err := kvutil.Update(ctx, s.instanceProfilesBucket, accountID+"."+profileName, s.instanceProfileCASConfig(accountID, profileName), mutate) + return err +} + +func (s *IAMServiceImpl) instanceProfileCASConfig(accountID, profileName string) kvutil.CASConfig { + return kvutil.CASConfig{ Attempts: instanceProfileCASMaxRetries, NotFound: errors.New(awserrors.ErrorIAMNoSuchEntity), Exhausted: func(string, int) error { @@ -380,8 +390,7 @@ func (s *IAMServiceImpl) updateInstanceProfileCAS(ctx context.Context, accountID "accountID", accountID, "instanceProfileName", profileName, "attempts", instanceProfileCASMaxRetries) return errors.New(awserrors.ErrorServerInternal) }, - }, mutate) - return err + } } // profileToSDK converts the internal InstanceProfile to the AWS SDK shape. diff --git a/spinifex/handlers/iam/instance_profiles_test.go b/spinifex/handlers/iam/instance_profiles_test.go index a12f17685..a0d98fc88 100644 --- a/spinifex/handlers/iam/instance_profiles_test.go +++ b/spinifex/handlers/iam/instance_profiles_test.go @@ -1,6 +1,7 @@ package handlers_iam import ( + "context" "fmt" "strings" "sync" @@ -9,6 +10,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/nats-io/nats.go/jetstream" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -162,6 +164,28 @@ func TestListInstanceProfiles(t *testing.T) { assert.True(t, names["profile3"]) } +// TestListInstanceProfiles_DanglingRoleSkipped pins that one profile naming a +// role that no longer exists is left out rather than failing the whole listing. +func TestListInstanceProfiles_DanglingRoleSkipped(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + createTestRole(t, svc, "gone-role") + createTestInstanceProfile(t, svc, "dangling-profile") + createTestInstanceProfile(t, svc, "healthy-profile") + _, err := svc.AddRoleToInstanceProfile(testAccountID, &iam.AddRoleToInstanceProfileInput{ + InstanceProfileName: aws.String("dangling-profile"), + RoleName: aws.String("gone-role"), + }) + require.NoError(t, err) + // DeleteRole refuses while the role is attached, so remove the record directly. + require.NoError(t, svc.rolesBucket.Delete(t.Context(), testAccountID+".gone-role")) + + out, err := svc.ListInstanceProfiles(testAccountID, &iam.ListInstanceProfilesInput{}) + require.NoError(t, err) + require.Len(t, out.InstanceProfiles, 1) + assert.Equal(t, "healthy-profile", *out.InstanceProfiles[0].InstanceProfileName) +} + func TestListInstanceProfiles_Empty(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) @@ -242,6 +266,55 @@ func TestDeleteInstanceProfile_WithRoleAttached(t *testing.T) { assert.Contains(t, err.Error(), awserrors.ErrorIAMDeleteConflict) } +// attachBeforeDelete lands a role attach between DeleteInstanceProfile's read +// and its delete, the window a concurrent AddRoleToInstanceProfile can win. +type attachBeforeDelete struct { + jetstream.KeyValue + + once sync.Once + attach func() error + err error +} + +func (a *attachBeforeDelete) Delete(ctx context.Context, key string, opts ...jetstream.KVDeleteOpt) error { + a.once.Do(func() { a.err = a.attach() }) + return a.KeyValue.Delete(ctx, key, opts...) +} + +// TestDeleteInstanceProfile_RoleAttachedAfterCheck pins the DeleteConflict +// guard under concurrency: an attach that reported success must not have its +// profile deleted out from under it. +func TestDeleteInstanceProfile_RoleAttachedAfterCheck(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + createTestRole(t, svc, "late-role") + createTestInstanceProfile(t, svc, "late-profile") + + bucket := &attachBeforeDelete{KeyValue: svc.instanceProfilesBucket} + bucket.attach = func() error { + _, err := svc.AddRoleToInstanceProfile(testAccountID, &iam.AddRoleToInstanceProfileInput{ + InstanceProfileName: aws.String("late-profile"), + RoleName: aws.String("late-role"), + }) + return err + } + svc.instanceProfilesBucket = bucket + + _, err := svc.DeleteInstanceProfile(testAccountID, &iam.DeleteInstanceProfileInput{ + InstanceProfileName: aws.String("late-profile"), + }) + require.NoError(t, bucket.err, "attach") + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMDeleteConflict) + + out, err := svc.GetInstanceProfile(testAccountID, &iam.GetInstanceProfileInput{ + InstanceProfileName: aws.String("late-profile"), + }) + require.NoError(t, err, "the profile must survive an attach that reported success") + require.Len(t, out.InstanceProfile.Roles, 1) + assert.Equal(t, "late-role", *out.InstanceProfile.Roles[0].RoleName) +} + // ============================================================================ // InstanceProfile ↔ Role Binding Tests // ============================================================================ diff --git a/spinifex/handlers/iam/managed_policies_test.go b/spinifex/handlers/iam/managed_policies_test.go index eb2871d96..1d5a31e33 100644 --- a/spinifex/handlers/iam/managed_policies_test.go +++ b/spinifex/handlers/iam/managed_policies_test.go @@ -111,7 +111,7 @@ func TestRDSFullAccessShim_GrantsTheCustomerSurface(t *testing.T) { "rds:DeleteDBInstance", "rds:RebootDBInstance", "rds:StartDBInstance", "rds:StopDBInstance", "rds:CreateDBSnapshot", "rds:DeleteDBSnapshot", "rds:RestoreDBInstanceFromDBSnapshot", "rds:DescribeDBInstanceAutomatedBackups", - "rds:CreateDBSubnetGroup", "rds:DeleteDBSubnetGroup", + "rds:CreateDBSubnetGroup", "rds:ModifyDBSubnetGroup", "rds:DeleteDBSubnetGroup", "rds:CreateDBParameterGroup", "rds:ModifyDBParameterGroup", "rds:DescribeDBParameters", "rds:DeleteDBParameterGroup", "rds:AddTagsToResource", "rds:RemoveTagsFromResource", "rds:ListTagsForResource", diff --git a/spinifex/handlers/iam/policy_size_test.go b/spinifex/handlers/iam/policy_size_test.go new file mode 100644 index 000000000..638fdc46f --- /dev/null +++ b/spinifex/handlers/iam/policy_size_test.go @@ -0,0 +1,228 @@ +package handlers_iam + +import ( + "fmt" + "strings" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/iam" + "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// sizedPolicy returns a valid identity policy whose size, as AWS counts it, is +// exactly size characters, padded through its resource ARN. +func sizedPolicy(t *testing.T, size int) string { + t.Helper() + const format = `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::%s"}]}` + base := policySize(fmt.Sprintf(format, "")) + require.GreaterOrEqual(t, size, base) + doc := fmt.Sprintf(format, strings.Repeat("a", size-base)) + require.Equal(t, size, policySize(doc)) + return doc +} + +func TestPolicySize_IgnoresWhiteSpace(t *testing.T) { + t.Parallel() + compact := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:*","Resource":"*"}]}` + pretty := "{\n \"Version\": \"2012-10-17\",\n\t\"Statement\": [ {\"Effect\": \"Allow\", \"Action\": \"s3:*\", \"Resource\": \"*\"} ]\r\n}" + assert.Equal(t, len(compact), policySize(compact)) + assert.Equal(t, policySize(compact), policySize(pretty)) + assert.Equal(t, 3, policySize("aéb"), "size counts characters, not bytes") +} + +// inlinePutter puts an inline policy on one entity type, for running the same +// quota cases against users, groups and roles. +type inlinePutter struct { + entityType string + quota int + create func(t *testing.T, svc *IAMServiceImpl, name string) + put func(svc *IAMServiceImpl, name, policyName, doc string) error +} + +var inlinePutters = []inlinePutter{ + { + entityType: "user", + quota: 2048, + create: func(t *testing.T, svc *IAMServiceImpl, name string) { createTestUser(t, svc, name) }, + put: func(svc *IAMServiceImpl, name, policyName, doc string) error { + _, err := svc.PutUserPolicy(testAccountID, &iam.PutUserPolicyInput{ + UserName: aws.String(name), PolicyName: aws.String(policyName), PolicyDocument: aws.String(doc), + }) + return err + }, + }, + { + entityType: "group", + quota: 5120, + create: func(t *testing.T, svc *IAMServiceImpl, name string) { createTestGroup(t, svc, name) }, + put: func(svc *IAMServiceImpl, name, policyName, doc string) error { + _, err := svc.PutGroupPolicy(testAccountID, &iam.PutGroupPolicyInput{ + GroupName: aws.String(name), PolicyName: aws.String(policyName), PolicyDocument: aws.String(doc), + }) + return err + }, + }, + { + entityType: "role", + quota: 10240, + create: func(t *testing.T, svc *IAMServiceImpl, name string) { createTestRole(t, svc, name) }, + put: func(svc *IAMServiceImpl, name, policyName, doc string) error { + _, err := svc.PutRolePolicy(testAccountID, &iam.PutRolePolicyInput{ + RoleName: aws.String(name), PolicyName: aws.String(policyName), PolicyDocument: aws.String(doc), + }) + return err + }, + }, +} + +func TestPutInlinePolicy_SingleDocumentQuota(t *testing.T) { + t.Parallel() + for _, p := range inlinePutters { + t.Run(p.entityType, func(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + p.create(t, svc, "sized") + + err := p.put(svc, "sized", "Over", sizedPolicy(t, p.quota+1)) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMLimitExceeded) + assert.Contains(t, err.Error(), fmt.Sprintf("Maximum policy size of %d bytes exceeded for %s sized", p.quota, p.entityType)) + + require.NoError(t, p.put(svc, "sized", "AtQuota", sizedPolicy(t, p.quota))) + }) + } +} + +// The quota applies to the sum of an entity's inline policies. +func TestPutInlinePolicy_AggregateQuota(t *testing.T) { + t.Parallel() + for _, p := range inlinePutters { + t.Run(p.entityType, func(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + p.create(t, svc, "aggregate") + + first := p.quota / 2 + require.NoError(t, p.put(svc, "aggregate", "First", sizedPolicy(t, first))) + + err := p.put(svc, "aggregate", "Second", sizedPolicy(t, p.quota-first+1)) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMLimitExceeded) + + require.NoError(t, p.put(svc, "aggregate", "Second", sizedPolicy(t, p.quota-first))) + }) + } +} + +// Replacing a policy counts only its new document, not the one it replaces. +func TestPutInlinePolicy_ReplacementCountsOnlyNewDocument(t *testing.T) { + t.Parallel() + for _, p := range inlinePutters { + t.Run(p.entityType, func(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + p.create(t, svc, "replace") + + require.NoError(t, p.put(svc, "replace", "Only", sizedPolicy(t, p.quota-10))) + require.NoError(t, p.put(svc, "replace", "Only", sizedPolicy(t, p.quota))) + }) + } +} + +func TestPutInlinePolicy_WhiteSpaceNotCounted(t *testing.T) { + t.Parallel() + for _, p := range inlinePutters { + t.Run(p.entityType, func(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + p.create(t, svc, "spaced") + + doc := strings.Replace(sizedPolicy(t, p.quota), `"Statement":`, `"Statement":`+strings.Repeat(" ", p.quota), 1) + require.NoError(t, p.put(svc, "spaced", "Spaced", doc)) + }) + } +} + +// A PolicyDocument over AWS's API length bound fails parameter validation, as in +// AWS, rather than reading as a malformed document. +func TestPolicyDocumentLength_ValidationError(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + tooLong := strings.Repeat("a", maxPolicyDocumentLength+1) + const want = "Member must have length less than or equal to 131072" + + _, err := svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ + PolicyName: aws.String("TooLong"), PolicyDocument: aws.String(tooLong), + }) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorValidationError) + assert.Contains(t, err.Error(), want) + + out, err := svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ + PolicyName: aws.String("Base"), PolicyDocument: aws.String(sizedPolicy(t, 200)), + }) + require.NoError(t, err) + _, err = svc.CreatePolicyVersion(testAccountID, &iam.CreatePolicyVersionInput{ + PolicyArn: out.Policy.Arn, PolicyDocument: aws.String(tooLong), + }) + require.Error(t, err) + assert.Contains(t, err.Error(), want) + + for _, p := range inlinePutters { + p.create(t, svc, "long-"+p.entityType) + err := p.put(svc, "long-"+p.entityType, "TooLong", tooLong) + require.Error(t, err, p.entityType) + assert.Contains(t, err.Error(), awserrors.ErrorValidationError, p.entityType) + assert.Contains(t, err.Error(), want, p.entityType) + } +} + +func TestCreatePolicy_ManagedQuota(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + + _, err := svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ + PolicyName: aws.String("Over"), PolicyDocument: aws.String(sizedPolicy(t, 6145)), + }) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMLimitExceeded) + assert.Contains(t, err.Error(), "Cannot exceed quota for PolicySize: 6144") + + out, err := svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ + PolicyName: aws.String("AtQuota"), PolicyDocument: aws.String(sizedPolicy(t, 6144)), + }) + require.NoError(t, err) + + _, err = svc.CreatePolicyVersion(testAccountID, &iam.CreatePolicyVersionInput{ + PolicyArn: out.Policy.Arn, PolicyDocument: aws.String(sizedPolicy(t, 6145)), + }) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMLimitExceeded) + + _, err = svc.CreatePolicyVersion(testAccountID, &iam.CreatePolicyVersionInput{ + PolicyArn: out.Policy.Arn, PolicyDocument: aws.String(sizedPolicy(t, 6144)), + }) + require.NoError(t, err) +} + +// Under 2008-10-17 a ${...} reference is literal text, so a key no request +// supplies is accepted rather than rejected as unresolvable. +func TestValidatePolicyDocument_Version2008(t *testing.T) { + t.Parallel() + const legacy = `{"Version":"2008-10-17","Statement":[{"Effect":"Allow","Action":"s3:GetObject",` + + `"Resource":"arn:aws:s3:::home/${unknown}/*","Condition":{"StringLike":{"s3:prefix":"${unknown}/*"}}},` + + `{"Effect":"Deny","Action":"s3:DeleteObject","NotResource":"arn:aws:s3:::${unknown}/*"}]}` + _, err := ValidatePolicyDocument(legacy) + require.NoError(t, err) + + _, err = ValidatePolicyDocument(strings.Replace(legacy, "2008-10-17", "2012-10-17", 1)) + require.Error(t, err) + assert.Contains(t, err.Error(), "no request supplies") + + _, err = ValidatePolicyDocument(strings.Replace(legacy, "2008-10-17", "2010-01-01", 1)) + require.Error(t, err) + assert.Contains(t, err.Error(), "unsupported policy version") +} diff --git a/spinifex/handlers/iam/policy_versions.go b/spinifex/handlers/iam/policy_versions.go index 0f51b3c7e..4424d8e3d 100644 --- a/spinifex/handlers/iam/policy_versions.go +++ b/spinifex/handlers/iam/policy_versions.go @@ -125,10 +125,16 @@ func policyCASTarget(accountID, policyARN string) (string, kvutil.CASConfig, err func (s *IAMServiceImpl) CreatePolicyVersion(accountID string, input *iam.CreatePolicyVersionInput) (*iam.CreatePolicyVersionOutput, error) { ctx := context.Background() + if err := checkPolicyDocumentLength(*input.PolicyDocument); err != nil { + return nil, err + } if _, err := ValidatePolicyDocument(*input.PolicyDocument); err != nil { return nil, awserrors.Errorf(awserrors.ErrorIAMMalformedPolicyDocument, "policy %q: %w", *input.PolicyArn, err) } + if err := checkManagedPolicySize(*input.PolicyDocument); err != nil { + return nil, err + } setAsDefault := aws.BoolValue(input.SetAsDefault) var created PolicyVersionRecord diff --git a/spinifex/handlers/iam/roles.go b/spinifex/handlers/iam/roles.go index c865a8fe5..a3ef80dbe 100644 --- a/spinifex/handlers/iam/roles.go +++ b/spinifex/handlers/iam/roles.go @@ -215,6 +215,18 @@ func (s *IAMServiceImpl) DeleteRole(accountID string, input *iam.DeleteRoleInput } slog.Info("IAM role deleted", "accountID", accountID, "roleName", roleName) + + // Same ordering and failure handling as DeleteUser. + if s.sessionRevoker != nil { + revoked, err := s.sessionRevoker.RevokeRoleSessions(ctx, accountID, role.ARN, role.RoleID) + if err != nil { + slog.Error("Revoking deleted role's sessions failed; janitor will reap them", + "accountID", accountID, "roleName", roleName, "revoked", revoked, "err", err) + } else if revoked > 0 { + slog.Info("Deleted role's sessions revoked", + "accountID", accountID, "roleName", roleName, "revoked", revoked) + } + } return &iam.DeleteRoleOutput{}, nil } @@ -266,6 +278,34 @@ func (s *IAMServiceImpl) UpdateRole(accountID string, input *iam.UpdateRoleInput return &iam.UpdateRoleOutput{}, nil } +// UpdateRoleDescription is the older single-field form of UpdateRole; unlike +// UpdateRole it returns the updated role. +func (s *IAMServiceImpl) UpdateRoleDescription(accountID string, input *iam.UpdateRoleDescriptionInput) (*iam.UpdateRoleDescriptionOutput, error) { + ctx := context.Background() + roleName := *input.RoleName + if err := validateDescription(input.Description); err != nil { + return nil, err + } + + role, err := s.getRole(ctx, accountID, roleName) + if err != nil { + return nil, err + } + + role.Description = *input.Description + + data, err := json.Marshal(role) + if err != nil { + return nil, fmt.Errorf("marshal role: %w", err) + } + if _, err := s.rolesBucket.Put(ctx, accountID+"."+roleName, data); err != nil { + return nil, fmt.Errorf("update role description: %w", err) + } + + slog.Info("IAM role description updated", "accountID", accountID, "roleName", roleName) + return &iam.UpdateRoleDescriptionOutput{Role: gotRoleToSDK(role)}, nil +} + func (s *IAMServiceImpl) UpdateAssumeRolePolicy(accountID string, input *iam.UpdateAssumeRolePolicyInput) (*iam.UpdateAssumeRolePolicyOutput, error) { ctx := context.Background() roleName := *input.RoleName @@ -353,7 +393,10 @@ func (s *IAMServiceImpl) ListAttachedRolePolicies(accountID string, input *iam.L return nil, err } - attached := s.attachedPolicies(ctx, accountID, role.AttachedPolicies, aws.StringValue(input.PathPrefix)) + attached, err := s.attachedPolicies(ctx, accountID, role.AttachedPolicies, aws.StringValue(input.PathPrefix)) + if err != nil { + return nil, err + } return &iam.ListAttachedRolePoliciesOutput{ AttachedPolicies: attached, @@ -372,6 +415,9 @@ func (s *IAMServiceImpl) PutRolePolicy(accountID string, input *iam.PutRolePolic if err := validateIAMName("policyName", policyName, 128); err != nil { return nil, err } + if err := checkPolicyDocumentLength(policyDoc); err != nil { + return nil, err + } if _, err := ValidatePolicyDocument(policyDoc); err != nil { return nil, awserrors.Errorf(awserrors.ErrorIAMMalformedPolicyDocument, "policy %q on role %q: %w", policyName, roleName, err) @@ -388,6 +434,9 @@ func (s *IAMServiceImpl) PutRolePolicy(accountID string, input *iam.PutRolePolic if !changed { return false, nil } + if err := checkInlinePolicySize("role", roleName, rolePolicySizeQuota, role.InlinePolicies, policyName, policyDoc); err != nil { + return false, err + } role.InlinePolicies[policyName] = policyDoc return true, nil }) diff --git a/spinifex/handlers/iam/roles_test.go b/spinifex/handlers/iam/roles_test.go index be69317ae..864e2fdbe 100644 --- a/spinifex/handlers/iam/roles_test.go +++ b/spinifex/handlers/iam/roles_test.go @@ -2,6 +2,7 @@ package handlers_iam import ( "encoding/json" + "errors" "slices" "strconv" "strings" @@ -557,6 +558,43 @@ func TestUpdateRole_NotFound(t *testing.T) { assert.Contains(t, err.Error(), awserrors.ErrorIAMNoSuchEntity) } +func TestUpdateRoleDescription(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + createTestRole(t, svc, "desc-role") + + out, err := svc.UpdateRoleDescription(testAccountID, &iam.UpdateRoleDescriptionInput{ + RoleName: aws.String("desc-role"), + Description: aws.String("new description"), + }) + require.NoError(t, err) + got, err := svc.GetRole(testAccountID, &iam.GetRoleInput{RoleName: aws.String("desc-role")}) + require.NoError(t, err) + assert.Equal(t, "new description", *got.Role.Description) + assert.Equal(t, got.Role, out.Role, "output carries the role in the GetRole shape") + + _, err = svc.UpdateRoleDescription(testAccountID, &iam.UpdateRoleDescriptionInput{ + RoleName: aws.String("desc-role"), + Description: aws.String(""), + }) + require.NoError(t, err) + got, err = svc.GetRole(testAccountID, &iam.GetRoleInput{RoleName: aws.String("desc-role")}) + require.NoError(t, err) + assert.Empty(t, aws.StringValue(got.Role.Description)) +} + +func TestUpdateRoleDescription_NotFound(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + + _, err := svc.UpdateRoleDescription(testAccountID, &iam.UpdateRoleDescriptionInput{ + RoleName: aws.String("ghost"), + Description: aws.String("never"), + }) + assert.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMNoSuchEntity) +} + func TestUpdateAssumeRolePolicy(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) @@ -815,6 +853,62 @@ func TestAttachRolePolicy_ConcurrentDistinctPolicies(t *testing.T) { assert.ElementsMatch(t, arns, got, "all concurrently-attached policies must persist") } +// A recorded ARN whose policy cannot be read must fail the call, not shorten +// the list. Reporting it as not attached makes a client delete its own record +// of the attachment while DeleteRole keeps refusing on the same field, so the +// attachment can never be cleared through the API. +func TestListAttachedRolePolicies_UnreadablePolicyIsAnError(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + role := createTestRole(t, svc, "unreadable-attach") + policy := createTestPolicy(t, svc, "UnreadablePolicy") + + _, err := svc.AttachRolePolicy(testAccountID, &iam.AttachRolePolicyInput{ + RoleName: role.RoleName, + PolicyArn: policy.Arn, + }) + require.NoError(t, err) + + // DeletePolicy refuses while the policy is attached, so the only way to this + // state is the bucket directly — which is the point: it models a failed read. + require.NoError(t, svc.policiesBucket.Delete(t.Context(), testAccountID+".UnreadablePolicy")) + + out, err := svc.ListAttachedRolePolicies(testAccountID, &iam.ListAttachedRolePoliciesInput{ + RoleName: role.RoleName, + }) + require.Error(t, err, "an unresolvable attached ARN must not be dropped") + assert.Nil(t, out) + assert.Contains(t, err.Error(), *policy.Arn, "the error must name the ARN it could not read") + + // The attachment is still recorded, which is what DeleteRole refuses on. + _, err = svc.DeleteRole(testAccountID, &iam.DeleteRoleInput{RoleName: role.RoleName}) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMDeleteConflict) +} + +// AWS-managed ARNs are stored without a policy record by design, so they must +// still round-trip once an unreadable ARN is an error. +func TestListAttachedRolePolicies_AWSManagedNeedsNoRecord(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + role := createTestRole(t, svc, "aws-managed-attach") + const arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" + + _, err := svc.AttachRolePolicy(testAccountID, &iam.AttachRolePolicyInput{ + RoleName: role.RoleName, + PolicyArn: aws.String(arn), + }) + require.NoError(t, err) + + out, err := svc.ListAttachedRolePolicies(testAccountID, &iam.ListAttachedRolePoliciesInput{ + RoleName: role.RoleName, + }) + require.NoError(t, err) + require.Len(t, out.AttachedPolicies, 1) + assert.Equal(t, arn, *out.AttachedPolicies[0].PolicyArn) + assert.Equal(t, "AmazonEKSClusterPolicy", *out.AttachedPolicies[0].PolicyName) +} + func TestListAttachedRolePolicies_Empty(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) @@ -1053,21 +1147,6 @@ func TestPutRolePolicy_MalformedDocument(t *testing.T) { assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) } -func TestPutRolePolicy_OversizedDocument(t *testing.T) { - t.Parallel() - svc := setupTestIAMService(t) - createTestRole(t, svc, "oversized-role") - - huge := strings.Repeat("a", maxPolicyDocumentSize+1) - _, err := svc.PutRolePolicy(testAccountID, &iam.PutRolePolicyInput{ - RoleName: aws.String("oversized-role"), - PolicyName: aws.String("Huge"), - PolicyDocument: aws.String(huge), - }) - assert.Error(t, err) - assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) -} - func TestPutRolePolicy_RoleNotFound(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) @@ -1615,6 +1694,8 @@ func TestRoleAndPolicy_DescriptionLength(t *testing.T) { requireIAMError(t, err, awserrors.ErrorValidationError, msg) _, err = svc.UpdateRole(testAccountID, &iam.UpdateRoleInput{RoleName: aws.String("missing"), Description: tooLong}) requireIAMError(t, err, awserrors.ErrorValidationError, msg) + _, err = svc.UpdateRoleDescription(testAccountID, &iam.UpdateRoleDescriptionInput{RoleName: aws.String("missing"), Description: tooLong}) + requireIAMError(t, err, awserrors.ErrorValidationError, msg) _, err = svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ PolicyName: aws.String("p"), PolicyDocument: aws.String("{"), Description: tooLong, }) @@ -1632,3 +1713,48 @@ func TestRoleAndPolicy_DescriptionLength(t *testing.T) { }) require.NoError(t, err) } + +func TestDeleteRole_RevokesSessionsOnceRecordIsGone(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc} + svc.SetSessionRevoker(revoker) + role := createTestRole(t, svc, "retired") + + _, err := svc.DeleteRole(testAccountID, &iam.DeleteRoleInput{RoleName: role.RoleName}) + require.NoError(t, err) + + require.Len(t, revoker.calls, 1) + assert.Equal(t, revocation{testAccountID, aws.StringValue(role.Arn), aws.StringValue(role.RoleId), true}, revoker.calls[0]) +} + +func TestDeleteRole_ConflictDoesNotRevoke(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc} + svc.SetSessionRevoker(revoker) + role := createTestRole(t, svc, "attached") + policy := createTestPolicy(t, svc, "RolePolicy") + _, err := svc.AttachRolePolicy(testAccountID, &iam.AttachRolePolicyInput{RoleName: role.RoleName, PolicyArn: policy.Arn}) + require.NoError(t, err) + + _, err = svc.DeleteRole(testAccountID, &iam.DeleteRoleInput{RoleName: role.RoleName}) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMDeleteConflict) + assert.Empty(t, revoker.calls, "a role that survives the delete keeps its sessions") +} + +func TestDeleteRole_RevocationFailureKeepsDelete(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc, err: errors.New("jetstream unavailable")} + svc.SetSessionRevoker(revoker) + role := createTestRole(t, svc, "retired") + + _, err := svc.DeleteRole(testAccountID, &iam.DeleteRoleInput{RoleName: role.RoleName}) + require.NoError(t, err) + require.Len(t, revoker.calls, 1) + + _, err = svc.GetRole(testAccountID, &iam.GetRoleInput{RoleName: role.RoleName}) + assert.True(t, awserrors.IsErrorCode(err, awserrors.ErrorIAMNoSuchEntity)) +} diff --git a/spinifex/handlers/iam/service.go b/spinifex/handlers/iam/service.go index b3e01631e..87e9d78f4 100644 --- a/spinifex/handlers/iam/service.go +++ b/spinifex/handlers/iam/service.go @@ -1,3 +1,6 @@ +// Package handlers_iam implements IAM: users, groups, roles, policies, access +// keys, instance profiles and OIDC providers, persisted in JetStream KV with +// secrets sealed under the deployment master key. package handlers_iam import ( @@ -48,6 +51,7 @@ type IAMService interface { ListRoles(accountID string, input *iam.ListRolesInput) (*iam.ListRolesOutput, error) DeleteRole(accountID string, input *iam.DeleteRoleInput) (*iam.DeleteRoleOutput, error) UpdateRole(accountID string, input *iam.UpdateRoleInput) (*iam.UpdateRoleOutput, error) + UpdateRoleDescription(accountID string, input *iam.UpdateRoleDescriptionInput) (*iam.UpdateRoleDescriptionOutput, error) UpdateAssumeRolePolicy(accountID string, input *iam.UpdateAssumeRolePolicyInput) (*iam.UpdateAssumeRolePolicyOutput, error) // Role policies — managed + inline — account-scoped @@ -151,4 +155,8 @@ type IAMService interface { // GetAccountSummary returns account-wide IAM usage counts plus AWS-parity // quota values as a SummaryMap. Read-only and account-scoped. GetAccountSummary(accountID string, input *iam.GetAccountSummaryInput) (*iam.GetAccountSummaryOutput, error) + + // ListAccountAliases lists the account's aliases. Spinifex has no account + // aliases, so every account has none. + ListAccountAliases(accountID string, input *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) } diff --git a/spinifex/handlers/iam/service_impl.go b/spinifex/handlers/iam/service_impl.go index 72a0a3c0a..4cbcb2382 100644 --- a/spinifex/handlers/iam/service_impl.go +++ b/spinifex/handlers/iam/service_impl.go @@ -16,6 +16,7 @@ import ( "strconv" "strings" "time" + "unicode" "unicode/utf8" "github.com/aws/aws-sdk-go/aws" @@ -109,10 +110,24 @@ type IAMServiceImpl struct { instanceProfilesBucket jetstream.KeyValue groupsBucket jetstream.KeyValue key *masterkey.Key + sessionRevoker SessionRevoker } var _ IAMService = (*IAMServiceImpl)(nil) +// SessionRevoker removes the STS session credentials bound to a deleted user or +// role. STS implements it; IAM cannot import STS, so the gateway installs it. +type SessionRevoker interface { + RevokeUserSessions(ctx context.Context, accountID, userName, userID string) (int, error) + RevokeRoleSessions(ctx context.Context, accountID, roleARN, roleID string) (int, error) +} + +// SetSessionRevoker installs the revoker DeleteUser and DeleteRole call once the +// principal record is gone. Must be called before the service handles requests. +func (s *IAMServiceImpl) SetSessionRevoker(r SessionRevoker) { + s.sessionRevoker = r +} + // NewIAMServiceImpl creates a new IAM service backed by NATS JetStream KV. // The context bounds bucket creation and the schema migrations only. func NewIAMServiceImpl(ctx context.Context, natsConn *nats.Conn, masterKey []byte) (*IAMServiceImpl, error) { @@ -585,6 +600,19 @@ func (s *IAMServiceImpl) DeleteUser(accountID string, input *iam.DeleteUserInput } slog.Info("IAM user deleted", "accountID", accountID, "userName", userName) + + // Revoked after the delete so a racing mint either writes before the scan or + // fails to resolve the user. A failure keeps the delete; the janitor retries. + if s.sessionRevoker != nil { + revoked, err := s.sessionRevoker.RevokeUserSessions(ctx, accountID, userName, user.UserID) + if err != nil { + slog.Error("Revoking deleted user's sessions failed; janitor will reap them", + "accountID", accountID, "userName", userName, "revoked", revoked, "err", err) + } else if revoked > 0 { + slog.Info("Deleted user's sessions revoked", + "accountID", accountID, "userName", userName, "revoked", revoked) + } + } return &iam.DeleteUserOutput{}, nil } @@ -1286,10 +1314,16 @@ func (s *IAMServiceImpl) CreatePolicy(accountID string, input *iam.CreatePolicyI } } + if err := checkPolicyDocumentLength(*input.PolicyDocument); err != nil { + return nil, err + } if _, err := ValidatePolicyDocument(*input.PolicyDocument); err != nil { return nil, awserrors.Errorf(awserrors.ErrorIAMMalformedPolicyDocument, "policy %q: %w", policyName, err) } + if err := checkManagedPolicySize(*input.PolicyDocument); err != nil { + return nil, err + } if err := validateTags(input.Tags, exactKeys); err != nil { return nil, err @@ -1636,7 +1670,12 @@ func (s *IAMServiceImpl) DetachUserPolicy(accountID string, input *iam.DetachUse // attachedPolicies resolves an identity's attached policy ARNs for the // ListAttached*Policies calls, keeping those whose path starts with pathPrefix. -func (s *IAMServiceImpl) attachedPolicies(ctx context.Context, accountID string, arns []string, pathPrefix string) []*iam.AttachedPolicy { +// +// Fails closed on an unresolvable ARN. Dropping one reports the policy as not +// attached, which no AWS response can say while the attachment is recorded, and +// leaves Delete{Role,User,Group} refusing on a field the caller has been told +// is empty. +func (s *IAMServiceImpl) attachedPolicies(ctx context.Context, accountID string, arns []string, pathPrefix string) ([]*iam.AttachedPolicy, error) { var attached []*iam.AttachedPolicy for _, arn := range arns { // AWS-managed ARNs have no KV entry; report them from the ARN itself so @@ -1652,8 +1691,12 @@ func (s *IAMServiceImpl) attachedPolicies(ctx context.Context, accountID string, } policy, err := s.getPolicyByARN(ctx, accountID, arn) if err != nil { - slog.Warn("attached policy not found for ARN", "arn", arn, "err", err) - continue + // DeletePolicy refuses while the policy is attached, so a recorded ARN + // with no readable policy is a failed read or a broken invariant, never + // a state the API can reach. + slog.Error("attached policy could not be read", + "accountID", accountID, "policyArn", arn, "err", err) + return nil, fmt.Errorf("resolve attached policy %q: %w", arn, err) } if !strings.HasPrefix(policy.Path, pathPrefix) { continue @@ -1663,7 +1706,7 @@ func (s *IAMServiceImpl) attachedPolicies(ctx context.Context, accountID string, PolicyName: aws.String(policy.PolicyName), }) } - return attached + return attached, nil } // policyPathFromARN returns the path of a policy ARN, e.g. @@ -1680,7 +1723,10 @@ func (s *IAMServiceImpl) ListAttachedUserPolicies(accountID string, input *iam.L return nil, err } - attached := s.attachedPolicies(ctx, accountID, user.AttachedPolicies, aws.StringValue(input.PathPrefix)) + attached, err := s.attachedPolicies(ctx, accountID, user.AttachedPolicies, aws.StringValue(input.PathPrefix)) + if err != nil { + return nil, err + } return &iam.ListAttachedUserPoliciesOutput{ AttachedPolicies: attached, @@ -1705,6 +1751,9 @@ func (s *IAMServiceImpl) PutUserPolicy(accountID string, input *iam.PutUserPolic if err := validateIAMName("policyName", policyName, 128); err != nil { return nil, err } + if err := checkPolicyDocumentLength(policyDoc); err != nil { + return nil, err + } if _, err := ValidatePolicyDocument(policyDoc); err != nil { return nil, awserrors.Errorf(awserrors.ErrorIAMMalformedPolicyDocument, "policy %q on user %q: %w", policyName, userName, err) @@ -1714,6 +1763,9 @@ func (s *IAMServiceImpl) PutUserPolicy(accountID string, input *iam.PutUserPolic if err != nil { return nil, err } + if err := checkInlinePolicySize("user", userName, userPolicySizeQuota, user.InlinePolicies, policyName, policyDoc); err != nil { + return nil, err + } if user.InlinePolicies == nil { user.InlinePolicies = map[string]string{} @@ -2204,7 +2256,64 @@ func parseCreatedAt(raw string) time.Time { return t } -const maxPolicyDocumentSize = 6144 +// maxPolicyDocumentLength is AWS's API bound on a PolicyDocument parameter. The +// per-type limits below are the quotas a valid document is held to. +const maxPolicyDocumentLength = 131072 + +// AWS's policy size quotas, in characters excluding white space. Inline limits +// apply to the sum of an entity's inline policies. +const ( + managedPolicySizeQuota = 6144 + userPolicySizeQuota = 2048 + groupPolicySizeQuota = 5120 + rolePolicySizeQuota = 10240 +) + +// policySize is a document's size as AWS counts it against the quotas: its +// characters, leaving out white space. +func policySize(doc string) int { + n := 0 + for _, r := range doc { + if !unicode.IsSpace(r) { + n++ + } + } + return n +} + +// checkPolicyDocumentLength refuses a PolicyDocument parameter over AWS's API +// bound with the ValidationError AWS returns, before the document is parsed. +func checkPolicyDocumentLength(doc string) error { + if utf8.RuneCountInString(doc) > maxPolicyDocumentLength { + return lengthViolation("policyDocument", fmt.Sprintf("less than or equal to %d", maxPolicyDocumentLength)) + } + return nil +} + +// checkManagedPolicySize refuses a managed policy document over its quota. +func checkManagedPolicySize(doc string) error { + if policySize(doc) > managedPolicySizeQuota { + return awserrors.Errorf(awserrors.ErrorIAMLimitExceeded, "Cannot exceed quota for PolicySize: %d", managedPolicySizeQuota) + } + return nil +} + +// checkInlinePolicySize refuses putting doc as policyName when the entity's +// inline policies would then exceed quota in total. A policy of the same name +// is replaced, so only the new document counts. +func checkInlinePolicySize(entityType, entityName string, quota int, inline map[string]string, policyName, doc string) error { + total := policySize(doc) + for name, existing := range inline { + if name != policyName { + total += policySize(existing) + } + } + if total > quota { + return awserrors.Errorf(awserrors.ErrorIAMLimitExceeded, + "Maximum policy size of %d bytes exceeded for %s %s", quota, entityType, entityName) + } + return nil +} // isIAMNameChar returns true if c is allowed in IAM user/policy names. func isIAMNameChar(c byte) bool { @@ -2288,8 +2397,8 @@ func validatePath(path string) error { // ValidatePolicyDocument parses and validates an IAM policy document JSON string. func ValidatePolicyDocument(docJSON string) (*PolicyDocument, error) { - if len(docJSON) > maxPolicyDocumentSize { - return nil, fmt.Errorf("policy document exceeds maximum size of %d bytes", maxPolicyDocumentSize) + if len(docJSON) > maxPolicyDocumentLength { + return nil, fmt.Errorf("policy document exceeds maximum length of %d", maxPolicyDocumentLength) } var doc PolicyDocument @@ -2297,9 +2406,11 @@ func ValidatePolicyDocument(docJSON string) (*PolicyDocument, error) { return nil, fmt.Errorf("invalid JSON: %w", err) } - if doc.Version != "2012-10-17" { + if doc.Version != iampolicy.Version2012 && doc.Version != iampolicy.Version2008 { return nil, fmt.Errorf("unsupported policy version: %q", doc.Version) } + // Under 2008-10-17 a ${...} reference is literal text, so it cannot be unresolvable. + resolvesVariables := doc.Version == iampolicy.Version2012 if len(doc.Statement) == 0 { return nil, fmt.Errorf("policy must contain at least one statement") @@ -2318,7 +2429,7 @@ func ValidatePolicyDocument(docJSON string) (*PolicyDocument, error) { if err := validateSelectorEntries(i, stmt); err != nil { return nil, err } - if err := validateStatementRestrictions(i, stmt); err != nil { + if err := validateStatementRestrictions(i, stmt, resolvesVariables); err != nil { return nil, err } } @@ -2362,19 +2473,22 @@ func validateSelectorEntries(i int, stmt Statement) error { // validateStatementRestrictions rejects the clauses the evaluator cannot enforce, // so an identity policy is never accepted with an inert restriction on it. -// Conditions inside the supported allowlist are accepted and enforced. -func validateStatementRestrictions(i int, stmt Statement) error { +// Conditions inside the supported allowlist are accepted and enforced. Policy +// variables are checked only when the document's Version resolves them. +func validateStatementRestrictions(i int, stmt Statement, resolvesVariables bool) error { if isRawJSONNonEmpty(stmt.Principal) { return fmt.Errorf("statement %d: Principal is not valid on an identity policy; use a resource or trust policy instead", i) } - for _, resource := range stmt.Resource { - if err := validatePolicyVariables(i, "Resource", resource); err != nil { - return err + if resolvesVariables { + for _, resource := range stmt.Resource { + if err := validatePolicyVariables(i, "Resource", resource); err != nil { + return err + } } - } - for _, resource := range stmt.NotResource { - if err := validatePolicyVariables(i, "NotResource", resource); err != nil { - return err + for _, resource := range stmt.NotResource { + if err := validatePolicyVariables(i, "NotResource", resource); err != nil { + return err + } } } for op, keys := range stmt.Condition { @@ -2382,7 +2496,7 @@ func validateStatementRestrictions(i int, stmt Statement) error { if !iampolicy.SupportedCondition(op, key) { return fmt.Errorf("statement %d: Condition operator %q on key %q is not supported in this release%s", i, op, key, unsupportedConditionKeyReason(key)) } - if err := validateConditionValues(i, op, key, values); err != nil { + if err := validateConditionValues(i, op, key, values, resolvesVariables); err != nil { return err } } @@ -2407,22 +2521,26 @@ func unsupportedConditionKeyReason(key string) string { // validateConditionValues rejects leaf values the matcher can only ever compare // false. An allowlisted operator over an unparseable value is still an inert // restriction, which is the failure this validation exists to prevent. -func validateConditionValues(i int, op, key string, values ConditionValue) error { +func validateConditionValues(i int, op, key string, values ConditionValue, resolvesVariables bool) error { if len(values) == 0 { return fmt.Errorf("statement %d: Condition operator %q on key %q has no value", i, op, key) } // An IfExists form takes its base operator's values. base, _ := iampolicy.BaseOperator(op) for _, v := range values { - // Only the string and ARN operators expand variables; a reference in a - // Bool, Null, IpAddress or date value is already rejected as unparseable below. + // Only the string and ARN operators expand variables; a reference in a Bool, + // Null, IpAddress, date or numeric value is already rejected as unparseable below. switch base { case iampolicy.OpIPAddress, iampolicy.OpNotIPAddress, iampolicy.OpBool, iampolicy.OpNull, iampolicy.OpDateEquals, iampolicy.OpDateNotEquals, iampolicy.OpDateLessThan, - iampolicy.OpDateLessThanEquals, iampolicy.OpDateGreaterThan, iampolicy.OpDateGreaterThanEquals: + iampolicy.OpDateLessThanEquals, iampolicy.OpDateGreaterThan, iampolicy.OpDateGreaterThanEquals, + iampolicy.OpNumericEquals, iampolicy.OpNumericNotEquals, iampolicy.OpNumericLessThan, + iampolicy.OpNumericLessThanEquals, iampolicy.OpNumericGreaterThan, iampolicy.OpNumericGreaterThanEquals: default: - if err := validatePolicyVariables(i, fmt.Sprintf("Condition %s on key %q", op, key), v); err != nil { - return err + if resolvesVariables { + if err := validatePolicyVariables(i, fmt.Sprintf("Condition %s on key %q", op, key), v); err != nil { + return err + } } } switch base { @@ -2448,6 +2566,11 @@ func validateConditionValues(i int, op, key string, values ConditionValue) error return fmt.Errorf("statement %d: Condition %s on key %q: %q is not an ISO 8601 date or epoch seconds", i, op, key, v) } + case iampolicy.OpNumericEquals, iampolicy.OpNumericNotEquals, iampolicy.OpNumericLessThan, + iampolicy.OpNumericLessThanEquals, iampolicy.OpNumericGreaterThan, iampolicy.OpNumericGreaterThanEquals: + if _, err := iampolicy.ParseNumber(v); err != nil { + return fmt.Errorf("statement %d: Condition %s on key %q: %q is not a number", i, op, key, v) + } } } return nil @@ -2484,13 +2607,8 @@ func validatePolicyVariables(i int, field, value string) error { } // summaryQuotaDefaults holds the static SummaryMap entries returned by -// GetAccountSummary. Spinifex's quota system (handlers/quota) only enforces -// infrastructure dimensions (vCPUs, VPCs, subnets, EIPs, EBS) and models no IAM -// entity limits, so these IAM quota values are AWS-parity constants for -// informational compatibility only, not enforced limits. Resource types -// Spinifex does not model are reported as 0 rather than omitted so CIS/audit -// tooling that reads these keys keeps working. Real per-account resource counts -// are overlaid on top of this table at call time. +// GetAccountSummary, at AWS's defaults. Unmodelled resource types report 0 so +// audit tooling finds every key; real per-account counts are overlaid at call time. var summaryQuotaDefaults = map[string]int64{ // Account-wide quotas (AWS defaults). "UsersQuota": 5000, @@ -2508,12 +2626,12 @@ var summaryQuotaDefaults = map[string]int64{ "AttachedPoliciesPerGroupQuota": 10, "AttachedPoliciesPerRoleQuota": 10, "SigningCertificatesPerUserQuota": 2, - "UserPolicySizeQuota": 2048, - "GroupPolicySizeQuota": 5120, - "PolicySizeQuota": 6144, + "UserPolicySizeQuota": userPolicySizeQuota, + "GroupPolicySizeQuota": groupPolicySizeQuota, + "PolicySizeQuota": managedPolicySizeQuota, "VersionsPerPolicyQuota": 5, "AssumeRolePolicySizeQuota": maxTrustPolicyDocumentSize, - "RolePolicySizeQuota": 10240, + "RolePolicySizeQuota": rolePolicySizeQuota, // AWS's default: STS global endpoint tokens valid only in default Regions. "GlobalEndpointTokenVersion": 1, @@ -2587,6 +2705,12 @@ func (s *IAMServiceImpl) GetAccountSummary(accountID string, _ *iam.GetAccountSu return &iam.GetAccountSummaryOutput{SummaryMap: summary}, nil } +// ListAccountAliases returns no aliases, which is what AWS returns for an account +// that has none. Spinifex does not serve CreateAccountAlias. +func (s *IAMServiceImpl) ListAccountAliases(_ string, _ *iam.ListAccountAliasesInput) (*iam.ListAccountAliasesOutput, error) { + return &iam.ListAccountAliasesOutput{AccountAliases: []*string{}}, nil +} + // countOIDCProviders counts the account's OIDC providers. AWS also counts SAML // providers under Providers; Spinifex has none. func (s *IAMServiceImpl) countOIDCProviders(ctx context.Context, accountID string) (int64, error) { diff --git a/spinifex/handlers/iam/service_impl_test.go b/spinifex/handlers/iam/service_impl_test.go index 190705f26..80e33895b 100644 --- a/spinifex/handlers/iam/service_impl_test.go +++ b/spinifex/handlers/iam/service_impl_test.go @@ -1,7 +1,9 @@ package handlers_iam import ( + "context" "encoding/hex" + "errors" awsidentifiers "github.com/mulgadc/spinifex/spinifex/foundation/aws/identifiers" "log/slog" "strings" @@ -460,10 +462,10 @@ func TestCreatePolicy_EmptyPathRefusedBeforeDocument(t *testing.T) { func TestValidatePolicyDocument_TooLarge(t *testing.T) { t.Parallel() - largeDoc := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"` + strings.Repeat("a", maxPolicyDocumentSize) + `"}]}` + largeDoc := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"` + strings.Repeat("a", maxPolicyDocumentLength) + `"}]}` _, err := ValidatePolicyDocument(largeDoc) assert.Error(t, err) - assert.Contains(t, err.Error(), "exceeds maximum size") + assert.Contains(t, err.Error(), "exceeds maximum length") } // ============================================================================ @@ -1145,7 +1147,7 @@ func TestCreatePolicy_InvalidVersion(t *testing.T) { _, err := svc.CreatePolicy(testAccountID, &iam.CreatePolicyInput{ PolicyName: aws.String("BadVersion"), - PolicyDocument: aws.String(`{"Version":"2008-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}`), + PolicyDocument: aws.String(`{"Version":"2010-01-01","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}`), }) assert.Error(t, err) assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) @@ -2243,7 +2245,7 @@ func TestValidatePolicyDocument_BadJSON(t *testing.T) { func TestValidatePolicyDocument_WrongVersion(t *testing.T) { t.Parallel() - _, err := ValidatePolicyDocument(`{"Version":"2008-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}`) + _, err := ValidatePolicyDocument(`{"Version":"2010-01-01","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}`) assert.Error(t, err) assert.Contains(t, err.Error(), "unsupported policy version") } @@ -2321,6 +2323,25 @@ func TestValidatePolicyDocument_DateOperators(t *testing.T) { } } +// Numeric values take an integer or decimal, with an optional sign and exponent, +// as a string or a JSON number, on s3:max-keys and aws:EpochTime. +func TestValidatePolicyDocument_NumericOperators(t *testing.T) { + t.Parallel() + for _, cond := range []string{ + `{"NumericLessThanEquals":{"s3:max-keys":"10"}}`, + `{"NumericGreaterThan":{"s3:max-keys":100}}`, + `{"NumericEquals":{"s3:max-keys":["+10","1e1","10.0"]}}`, + `{"NumericNotEquals":{"s3:max-keys":".5"}}`, + `{"NumericLessThan":{"aws:EpochTime":1790856000}}`, + `{"NumericGreaterThanEqualsIfExists":{"s3:max-keys":"-1.5e2"}}`, + `{"Null":{"s3:max-keys":"true"}}`, + } { + _, err := ValidatePolicyDocument(`{"Version":"2012-10-17","Statement":[{"Effect":"Allow", + "Action":"s3:*","Resource":"*","Condition":` + cond + `}]}`) + assert.NoError(t, err, cond) + } +} + func TestValidatePolicyDocument_UnsupportedConditionOperator(t *testing.T) { t.Parallel() _, err := ValidatePolicyDocument(`{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:*","Resource":"*", @@ -2443,6 +2464,14 @@ func TestValidatePolicyDocument_RejectsMalformedConditionValues(t *testing.T) { {"DateEquals variable", `{"DateEquals":{"aws:CurrentTime":"${aws:CurrentTime}"}}`, "not an ISO 8601 date or epoch seconds"}, {"DateLessThanIfExists empty", `{"DateLessThanIfExists":{"aws:EpochTime":""}}`, "not an ISO 8601 date or epoch seconds"}, {"DateGreaterThan on a string key", `{"DateGreaterThan":{"aws:username":"2026"}}`, "is not supported in this release"}, + {"NumericLessThan prose", `{"NumericLessThan":{"s3:max-keys":"ten"}}`, "is not a number"}, + {"NumericEquals hex", `{"NumericEquals":{"s3:max-keys":"0x0A"}}`, "is not a number"}, + {"NumericEquals padded", `{"NumericEquals":{"s3:max-keys":" 10"}}`, "is not a number"}, + {"NumericEquals variable", `{"NumericEquals":{"aws:EpochTime":"${aws:EpochTime}"}}`, "is not a number"}, + {"NumericGreaterThanIfExists empty", `{"NumericGreaterThanIfExists":{"s3:max-keys":""}}`, "is not a number"}, + {"NumericLessThan scale overflow", `{"NumericLessThan":{"s3:max-keys":"1e2147483648"}}`, "is not a number"}, + {"NumericLessThan on a date key", `{"NumericLessThan":{"aws:CurrentTime":"10"}}`, "is not supported in this release"}, + {"NumericLessThan on MFA age", `{"NumericLessThan":{"aws:MultiFactorAuthAge":"3600"}}`, "is not supported in this release"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -2477,7 +2506,7 @@ func TestValidateConditionValues_ArnOperators(t *testing.T) { iampolicy.OpArnEquals, iampolicy.OpArnLike, iampolicy.OpArnNotEquals, iampolicy.OpArnNotLike, } { for _, tt := range tests { - err := validateConditionValues(0, op, key, ConditionValue{tt.value}) + err := validateConditionValues(0, op, key, ConditionValue{tt.value}, true) if tt.wantErr == "" { assert.NoError(t, err, "%s %s", op, tt.name) continue @@ -2713,21 +2742,6 @@ func TestInputValidation_PathLength(t *testing.T) { assert.Error(t, err, "513-char path should be rejected") } -func TestInputValidation_PolicyDocumentSize(t *testing.T) { - t.Parallel() - // 6144 bytes — should pass - filler6144 := strings.Repeat("a", 6144-len(`{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"arn:aws:s3:::`)-len(`"}]}`)) - doc6144 := `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"arn:aws:s3:::` + filler6144 + `"}]}` - assert.Len(t, doc6144, 6144) - _, err := ValidatePolicyDocument(doc6144) - assert.NoError(t, err, "6144-byte policy document should be valid") - - // 6145 bytes — should fail - doc6145 := doc6144 + " " - _, err = ValidatePolicyDocument(doc6145) - assert.Error(t, err, "6145-byte policy document should be rejected") -} - func TestValidatePolicyDocument_OverlappingDenyAllow(t *testing.T) { t.Parallel() doc, err := ValidatePolicyDocument(`{ @@ -3004,3 +3018,78 @@ func TestAttachUserPolicy_CustomerManagedMustExist(t *testing.T) { }) require.Error(t, err) } + +// recordingRevoker records each revocation and whether the principal record was +// already gone when it ran, which is the ordering a racing mint relies on. +type recordingRevoker struct { + svc *IAMServiceImpl + err error + + calls []revocation +} + +type revocation struct { + accountID, name, id string + recordGone bool +} + +var _ SessionRevoker = (*recordingRevoker)(nil) + +func (r *recordingRevoker) RevokeUserSessions(_ context.Context, accountID, userName, userID string) (int, error) { + _, err := r.svc.GetUser(accountID, &iam.GetUserInput{UserName: aws.String(userName)}) + r.calls = append(r.calls, revocation{accountID, userName, userID, awserrors.IsErrorCode(err, awserrors.ErrorIAMNoSuchEntity)}) + return 0, r.err +} + +func (r *recordingRevoker) RevokeRoleSessions(_ context.Context, accountID, roleARN, roleID string) (int, error) { + name := roleARN[strings.LastIndex(roleARN, "/")+1:] + _, err := r.svc.GetRole(accountID, &iam.GetRoleInput{RoleName: aws.String(name)}) + r.calls = append(r.calls, revocation{accountID, roleARN, roleID, awserrors.IsErrorCode(err, awserrors.ErrorIAMNoSuchEntity)}) + return 0, r.err +} + +func TestDeleteUser_RevokesSessionsOnceRecordIsGone(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc} + svc.SetSessionRevoker(revoker) + user := createTestUser(t, svc, "leaver") + + _, err := svc.DeleteUser(testAccountID, &iam.DeleteUserInput{UserName: aws.String("leaver")}) + require.NoError(t, err) + + require.Len(t, revoker.calls, 1) + assert.Equal(t, revocation{testAccountID, "leaver", aws.StringValue(user.UserId), true}, revoker.calls[0]) +} + +func TestDeleteUser_ConflictDoesNotRevoke(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc} + svc.SetSessionRevoker(revoker) + createTestUser(t, svc, "keyholder") + _, err := svc.CreateAccessKey(testAccountID, &iam.CreateAccessKeyInput{UserName: aws.String("keyholder")}) + require.NoError(t, err) + + _, err = svc.DeleteUser(testAccountID, &iam.DeleteUserInput{UserName: aws.String("keyholder")}) + require.Error(t, err) + assert.Contains(t, err.Error(), awserrors.ErrorIAMDeleteConflict) + assert.Empty(t, revoker.calls, "a user that survives the delete keeps its sessions") +} + +// The user is already gone when revocation fails, so failing the call would +// report a delete that happened as one that did not; the janitor retries. +func TestDeleteUser_RevocationFailureKeepsDelete(t *testing.T) { + t.Parallel() + svc := setupTestIAMService(t) + revoker := &recordingRevoker{svc: svc, err: errors.New("jetstream unavailable")} + svc.SetSessionRevoker(revoker) + createTestUser(t, svc, "leaver") + + _, err := svc.DeleteUser(testAccountID, &iam.DeleteUserInput{UserName: aws.String("leaver")}) + require.NoError(t, err) + require.Len(t, revoker.calls, 1) + + _, err = svc.GetUser(testAccountID, &iam.GetUserInput{UserName: aws.String("leaver")}) + assert.True(t, awserrors.IsErrorCode(err, awserrors.ErrorIAMNoSuchEntity)) +} diff --git a/spinifex/handlers/iam/user_inline_test.go b/spinifex/handlers/iam/user_inline_test.go index 846a217e9..4b555cfcc 100644 --- a/spinifex/handlers/iam/user_inline_test.go +++ b/spinifex/handlers/iam/user_inline_test.go @@ -2,7 +2,6 @@ package handlers_iam import ( "encoding/json" - "strings" "testing" "github.com/aws/aws-sdk-go/aws" @@ -130,21 +129,6 @@ func TestPutUserPolicy_UnresolvableVariableNamesTheCause(t *testing.T) { assert.Error(t, err) } -func TestPutUserPolicy_OversizedDocument(t *testing.T) { - t.Parallel() - svc := setupTestIAMService(t) - createTestUser(t, svc, "oversized-user") - - huge := strings.Repeat("a", maxPolicyDocumentSize+1) - _, err := svc.PutUserPolicy(testAccountID, &iam.PutUserPolicyInput{ - UserName: aws.String("oversized-user"), - PolicyName: aws.String("Huge"), - PolicyDocument: aws.String(huge), - }) - assert.Error(t, err) - assert.Contains(t, err.Error(), awserrors.ErrorIAMMalformedPolicyDocument) -} - func TestPutUserPolicy_UserNotFound(t *testing.T) { t.Parallel() svc := setupTestIAMService(t) diff --git a/spinifex/handlers/rds/agent.go b/spinifex/handlers/rds/agent.go index 0c4447cc1..ef0d298c0 100644 --- a/spinifex/handlers/rds/agent.go +++ b/spinifex/handlers/rds/agent.go @@ -25,8 +25,8 @@ const ( // the same value crosses NATS as JSON and leaves the gateway as Query-protocol // XML. Optional fields are pointers so a nil renders as an absent element. -// InstanceID and DBInstanceIdentifier are set by the gateway from the caller's -// resolved identity, never from the agent's request body. +// RegisterDBInstanceInput is the agent's registration request. InstanceID and DBInstanceIdentifier +// are set by the gateway from the caller's resolved identity, never from the agent's request body. type RegisterDBInstanceInput struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier"` InstanceID string `json:"instanceId"` @@ -34,15 +34,15 @@ type RegisterDBInstanceInput struct { EngineVersion string `json:"engineVersion,omitempty"` } -// The heartbeat cadence is handed back on registration so the interval stays +// RegisterDBInstanceOutput hands the heartbeat cadence back on registration so the interval stays // control-plane-owned. type RegisterDBInstanceOutput struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier" locationName:"DBInstanceIdentifier"` HeartbeatIntervalSeconds int64 `json:"heartbeatIntervalSeconds" locationName:"HeartbeatIntervalSeconds"` } -// The periodic beat folds liveness into the state report rather than using a -// separate heartbeat call, so a healthy instance costs one round trip per tick. +// SubmitDBStateChangeInput is the agent's periodic beat. It folds liveness into the state report rather +// than using a separate heartbeat call, so a healthy instance costs one round trip per tick. type SubmitDBStateChangeInput struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier"` InstanceID string `json:"instanceId"` @@ -51,22 +51,24 @@ type SubmitDBStateChangeInput struct { Message string `json:"message,omitempty"` } -// Persisted reports whether the beat reached KV; diagnostic only, the agent -// behaves the same either way. +// SubmitDBStateChangeOutput acknowledges a beat. Persisted reports whether the beat reached KV; +// diagnostic only, the agent behaves the same either way. type SubmitDBStateChangeOutput struct { Acknowledged bool `json:"acknowledged" locationName:"Acknowledged"` Persisted bool `json:"persisted" locationName:"Persisted"` HeartbeatIntervalSeconds int64 `json:"heartbeatIntervalSeconds" locationName:"HeartbeatIntervalSeconds"` } +// GetDBBootstrapConfigInput asks for boot material on behalf of the VM at VMGeneration; the gateway +// fills the identity fields from the caller's resolved credentials. type GetDBBootstrapConfigInput struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier"` InstanceID string `json:"instanceId"` VMGeneration int64 `json:"vmGeneration"` } -// Everything rds-init needs to bootstrap or attach. The serving cert and key -// are minted per call and never persisted. +// GetDBBootstrapConfigOutput is everything rds-init needs to bootstrap or attach. The serving cert and +// key are minted per call and never persisted. type GetDBBootstrapConfigOutput struct { Mode string `json:"mode" locationName:"Mode"` DBInstanceIdentifier string `json:"dbInstanceIdentifier" locationName:"DBInstanceIdentifier"` @@ -107,10 +109,9 @@ type GetDBBootstrapConfigOutput struct { CACertificate string `json:"caCertificate,omitempty" locationName:"CACertificate"` } -// Reports that PostgreSQL durably applied the staged master password, which is -// the only thing that destroys the ciphertext. Distinct from SubmitDBStateChange -// because a heartbeat is best-effort while this must be retried until confirmed -// and denied on an identity mismatch. +// AcknowledgeDBBootstrapInput reports that PostgreSQL durably applied the staged master password, the +// only thing that destroys the ciphertext. Distinct from SubmitDBStateChange because a heartbeat is +// best-effort while this must be retried until confirmed and denied on an identity mismatch. // // DBInstanceIdentifier and InstanceID are set by the gateway from the caller's // resolved identity; the rest is the guest's own assertion, checked here. @@ -122,15 +123,15 @@ type AcknowledgeDBBootstrapInput struct { DataVolumeID string `json:"dataVolumeId,omitempty"` } -// Minimal by design: the agent needs only success to decide it may remove its -// completion receipt. +// AcknowledgeDBBootstrapOutput is minimal by design: the agent needs only success to decide it may +// remove its completion receipt. type AcknowledgeDBBootstrapOutput struct { Acknowledged bool `json:"acknowledged" locationName:"Acknowledged"` AcknowledgedAt *time.Time `json:"acknowledgedAt,omitempty" locationName:"AcknowledgedAt" type:"timestamp"` } -// One directive delivered to an agent on its long poll. Concrete types land -// with their owning phases — password apply, parameter reload, grow, quiesce. +// Command is one directive delivered to an agent on its long poll. Concrete types land with their +// owning phases — password apply, parameter reload, grow, quiesce. type Command struct { CommandID string `json:"commandId" locationName:"CommandId" xml:"CommandId"` Type string `json:"type" locationName:"Type"` @@ -138,8 +139,8 @@ type Command struct { IssuedAt *time.Time `json:"issuedAt,omitempty" locationName:"IssuedAt" type:"timestamp"` } -// The agent's result for a command from an earlier poll, carried on the next -// poll request and republished to the issuer. +// CommandReply is the agent's result for a command from an earlier poll, carried on the next poll +// request and republished to the issuer. type CommandReply struct { CommandID string `json:"commandId" locationName:"CommandId" xml:"CommandId"` Status string `json:"status" locationName:"Status"` @@ -156,8 +157,8 @@ const ( ParameterRollbackMessage = "engine did not start after a parameter change; rolled back to the last accepted set" ) -// Idempotent: re-registering is the normal case after an agent restart and -// simply refreshes the record. +// RegisterDBInstance records an agent's registration and returns the heartbeat interval. Idempotent: +// re-registering is the normal case after an agent restart and simply refreshes the record. func (s *Service) RegisterDBInstance(ctx context.Context, input *RegisterDBInstanceInput, accountID string) (*RegisterDBInstanceOutput, error) { if input.DBInstanceIdentifier == "" { return nil, errors.New(awserrors.ErrorInvalidParameterValue) @@ -212,8 +213,8 @@ func (s *Service) RegisterDBInstance(ctx context.Context, input *RegisterDBInsta }, nil } -// Persists on a change of health or message and on the slower floor, holding -// intermediate beats in memory so a steady fleet stays off the KV hot path. +// SubmitDBStateChange records an agent beat. It persists on a change of health or message and on the +// slower floor, holding intermediate beats in memory so a steady fleet stays off the KV hot path. func (s *Service) SubmitDBStateChange(ctx context.Context, input *SubmitDBStateChangeInput, accountID string) (*SubmitDBStateChangeOutput, error) { if input.DBInstanceIdentifier == "" { return nil, errors.New(awserrors.ErrorInvalidParameterValue) @@ -305,8 +306,8 @@ func (s *Service) noteBeat(accountID, dbID string, health EngineHealth, message return live.lastSeen, false } -// The in-memory beat time, fresher than the record's persisted LastSeen. False -// means this node saw no beat — normal after a leader change; fall back to KV. +// LastSeen returns the in-memory beat time, fresher than the record's persisted LastSeen. False means +// this node saw no beat — normal after a leader change; fall back to KV. func (s *Service) LastSeen(accountID, dbID string) (time.Time, bool) { s.livenessMu.Lock() defer s.livenessMu.Unlock() @@ -317,10 +318,9 @@ func (s *Service) LastSeen(accountID, dbID string) (time.Time, bool) { return live.lastSeen, true } -// Serves boot material and, while a payload is staged for the caller's -// generation, replays the master password. Nothing is mutated on the way, so a -// dropped reply, a gateway restart or a reboot before the guest applied the -// password all recover by simply asking again. +// GetDBBootstrapConfig serves boot material and, while a payload is staged for the caller's +// generation, replays the master password. Nothing is mutated on the way, so a dropped reply, a +// gateway restart or a reboot before the guest applied the password all recover by asking again. func (s *Service) GetDBBootstrapConfig(ctx context.Context, input *GetDBBootstrapConfigInput, accountID string) (*GetDBBootstrapConfigOutput, error) { if input.DBInstanceIdentifier == "" { return nil, errors.New(awserrors.ErrorInvalidParameterValue) @@ -509,10 +509,10 @@ func (s *Service) scrubLegacyBootstrap(ctx context.Context, kv *kvstore.Bucket, "this DB instance staged its master password before the password was encrypted at rest and never completed its initial bootstrap; delete and recreate it") } -// Destroys the staged ciphertext once the guest has proven PostgreSQL applied -// it. Deliberately never decrypts: a lost acknowledgement has to remain -// deliverable even after a master.key change made the payload unreadable, so the -// one operation that destroys key material must not depend on reading it. +// AcknowledgeDBBootstrap destroys the staged ciphertext once the guest has proven PostgreSQL applied +// it. Deliberately never decrypts: a lost acknowledgement has to remain deliverable even after a +// master.key change made the payload unreadable, so the one operation that destroys key material +// must not depend on reading it. func (s *Service) AcknowledgeDBBootstrap(ctx context.Context, input *AcknowledgeDBBootstrapInput, accountID string) (*AcknowledgeDBBootstrapOutput, error) { if input.DBInstanceIdentifier == "" || input.PayloadID == "" { @@ -623,7 +623,7 @@ func (s *Service) mintServingCert(rec *DBInstanceRecord) (*bootstrapCert, error) return &bootstrapCert{ServingCert: cert, caPEM: EncodeCertPEM(caCert)}, nil } -// Maps an internal EC2 instance ID to the DB instance it backs, so an agent's +// InstanceIndexEntry maps an internal EC2 instance ID to the DB instance it backs, so an agent's // credentials resolve with one Get instead of a scan across every bucket. type InstanceIndexEntry struct { AccountID string `json:"accountId"` @@ -633,7 +633,8 @@ type InstanceIndexEntry struct { VMGeneration int64 `json:"vmGeneration"` } -// Returns (nil, nil) when the instance is not an RDS VM. +// LookupInstanceIndex returns the DB instance an EC2 instance backs, or (nil, nil) when the instance +// is not an RDS VM. func (s *Service) LookupInstanceIndex(ctx context.Context, instanceID string) (*InstanceIndexEntry, error) { if instanceID == "" { return nil, nil diff --git a/spinifex/handlers/rds/arn.go b/spinifex/handlers/rds/arn.go index a493bf981..b54ab3e3d 100644 --- a/spinifex/handlers/rds/arn.go +++ b/spinifex/handlers/rds/arn.go @@ -11,12 +11,13 @@ import ( // ECS/EKS ARNs, so resource-scoped IAM policies and Terraform state round-trip // against the real service. -// The one place the ARN shape is written. +// FormatARN builds arn:aws:rds:{region}:{account}:{kind}:{identifier}; it is the one place the ARN +// shape is written. func FormatARN(kind ResourceKind, region, accountID, identifier string) string { return fmt.Sprintf("arn:aws:rds:%s:%s:%s:%s", region, accountID, kind, identifier) } -// The resource-type segment of an RDS ARN, and the key the tag registry and +// ResourceKind is the resource-type segment of an RDS ARN, and the key the tag registry and // resource-scoped authorization dispatch on. type ResourceKind string @@ -37,8 +38,8 @@ func validResourceKind(kind ResourceKind) bool { } } -// An ARN split into the parts a caller acts on. Partition and service are -// validated rather than returned: only "arn:aws:rds" is ever accepted. +// ParsedARN is an ARN split into the parts a caller acts on. Partition and service are validated rather +// than returned: only "arn:aws:rds" is ever accepted. type ParsedARN struct { Region string AccountID string @@ -49,9 +50,9 @@ type ParsedARN struct { // arn:aws:rds:{region}:{accountID}:{kind}:{identifier} const arnSegmentCount = 7 -// Parses one of the four supported RDS ARNs and validates it belongs to the caller. -// Region and account are checked here rather than at policy evaluation, so a -// foreign-account reference never reaches the evaluator at all. +// ParseARN parses one of the four supported RDS ARNs and validates it belongs to the caller. Region and +// account are checked here rather than at policy evaluation, so a foreign-account reference never +// reaches the evaluator at all. func ParseARN(arn, region, accountID string) (ParsedARN, error) { // SplitN leaves an automated snapshot's rds: prefix in the identifier. Other // resource kinds still reject that extra separator below. diff --git a/spinifex/handlers/rds/backup.go b/spinifex/handlers/rds/backup.go index 8475c35c7..24fa63b98 100644 --- a/spinifex/handlers/rds/backup.go +++ b/spinifex/handlers/rds/backup.go @@ -61,7 +61,7 @@ var ( defaultMaintenanceWindowBlock = dailyWindow{start: 11 * time.Hour, end: 19 * time.Hour} ) -// The operator-tunable backup settings: bounds and defaults, never a per-instance +// BackupPolicy holds the operator-tunable backup settings: bounds and defaults, never a per-instance // setting — those live on the DB instance record. type BackupPolicy struct { // The upper bound ModifyDBInstance and CreateDBInstance accept. Zero takes @@ -380,19 +380,21 @@ func (s *Service) runMaintenanceWindow(ctx context.Context, kv *kvstore.Bucket, return true, nil } -// AWS's own name for an automated snapshot, minute-precise so a retry inside the -// same window never collides with the attempt that failed. +// AutomatedSnapshotIdentifier returns AWS's own name for an automated snapshot, rds:{db}-{YYYY-MM-DD-HH-MM}, +// minute-precise so a retry inside the same window never collides with the attempt that failed. func AutomatedSnapshotIdentifier(dbInstanceIdentifier string, at time.Time) string { return automatedSnapshotPrefix + dbInstanceIdentifier + "-" + at.UTC().Format(automatedSnapshotTimeLayout) } +// AutomatedBackupStamp returns the fixed-width UTC timestamp keying an automated-backup index entry, so +// lexical key order is chronological order. func AutomatedBackupStamp(at time.Time) string { return at.UTC().Format(automatedBackupKeyLayout) } -// The customer's view of the automated backup set: one entry per instance that -// has automated backups, as AWS reports it. The individual snapshots stay -// listable through DescribeDBSnapshots --snapshot-type automated. +// DescribeDBInstanceAutomatedBackups returns the customer's view of the automated backup set: one entry +// per instance that has automated backups, as AWS reports it. The individual snapshots stay listable +// through DescribeDBSnapshots --snapshot-type automated. func (s *Service) DescribeDBInstanceAutomatedBackups(ctx context.Context, input *rds.DescribeDBInstanceAutomatedBackupsInput, accountID string) (*rds.DescribeDBInstanceAutomatedBackupsOutput, error) { if input == nil { diff --git a/spinifex/handlers/rds/backup_sweep.go b/spinifex/handlers/rds/backup_sweep.go index dd40af613..47e7c1e99 100644 --- a/spinifex/handlers/rds/backup_sweep.go +++ b/spinifex/handlers/rds/backup_sweep.go @@ -14,12 +14,11 @@ import ( "github.com/mulgadc/spinifex/spinifex/runtime/compute/vm" ) -// The retention sweep is a cluster-wide vm.Reaper rather than a reconciler tick, -// because it is the one part of retention that deletes customer data. The shared GC -// backstop buys it the two properties that matters most for: it is skipped -// entirely while KV is unhealthy, so it can never reap against a desired state it -// cannot read, and cluster-wide scope is leader-gated by the framework. Backup -// *creation* stays in the RDS reconciler, where the per-instance state it reads +// BackupRetentionReaper is the retention sweep, a cluster-wide vm.Reaper rather than a reconciler tick +// because it is the one part of retention that deletes customer data. The shared GC backstop buys it +// the two properties that matters most for: it is skipped entirely while KV is unhealthy, so it can +// never reap against a desired state it cannot read, and cluster-wide scope is leader-gated by the +// framework. Backup *creation* stays in the RDS reconciler, where the per-instance state it reads // already lives. type BackupRetentionReaper struct { svc *Service @@ -37,11 +36,10 @@ func (s *Service) NewBackupRetentionReaper() *BackupRetentionReaper { func (r *BackupRetentionReaper) Class() string { return "rds-backup-retention" } func (r *BackupRetentionReaper) Scope() vm.ReaperScope { return vm.ScopeClusterWide } -// Sweeps every account's automated backups past their retention, and reclaims the -// retained data volumes nothing references any more. Drives from the RDS KV index -// rather than from a snapshot scan: a bucket-wide ListObjectsV2 per pass would -// grow without bound with the fleet, and the same cost lands on viperblock's own -// GC safety scan. +// Sweep deletes every account's automated backups past their retention, and reclaims the retained data +// volumes nothing references any more. Drives from the RDS KV index rather than from a snapshot scan: a +// bucket-wide ListObjectsV2 per pass would grow without bound with the fleet, and the same cost lands +// on viperblock's own GC safety scan. func (r *BackupRetentionReaper) Sweep(ctx context.Context) (int, error) { js, err := r.svc.js() if err != nil { diff --git a/spinifex/handlers/rds/bootstrap.go b/spinifex/handlers/rds/bootstrap.go index 3bb1d585e..c5d46217a 100644 --- a/spinifex/handlers/rds/bootstrap.go +++ b/spinifex/handlers/rds/bootstrap.go @@ -25,9 +25,9 @@ const ( bootstrapPayloadIDPrefix = "bp" ) -// The cleartext wrapper, so a stale generation or a payload written under -// another master key is rejected with a legible reason rather than as a GCM -// authentication failure that reads as tampering. +// BootstrapPayloadEnvelope is the cleartext wrapper around the encrypted bootstrap payload, so a stale +// generation or a payload written under another master key is rejected with a legible reason rather +// than as a GCM authentication failure that reads as tampering. type BootstrapPayloadEnvelope struct { PayloadID string `json:"payloadId"` EnvelopeVersion int `json:"envelopeVersion"` diff --git a/spinifex/handlers/rds/commands.go b/spinifex/handlers/rds/commands.go index 22b8e179a..fde01d278 100644 --- a/spinifex/handlers/rds/commands.go +++ b/spinifex/handlers/rds/commands.go @@ -75,7 +75,7 @@ const ( commandRepublishEvery = 2 * time.Second ) -// The agent could not be reached, or did not answer inside the command's +// ErrCommandUnreachable means the agent was unreachable or missed the command's // budget. Callers that can degrade — the graceful engine stop — check for this; // callers that must not, like a password rotation, surface it as retryable. var ErrCommandUnreachable = errors.New("rds: the instance agent did not answer the command") diff --git a/spinifex/handlers/rds/create.go b/spinifex/handlers/rds/create.go index 030d38f8e..4fcea6d9f 100644 --- a/spinifex/handlers/rds/create.go +++ b/spinifex/handlers/rds/create.go @@ -21,11 +21,10 @@ const firstVMGeneration = 1 // Bounds retries when same-owner record writes race rollback cleanup. const rollbackDeleteAttempts = 3 -// Assembles a live DB instance out of the launch primitives: validate, reserve -// the identifier, place and launch the dual-NIC VM with its data volume and -// customer ENI, seed the one-shot bootstrap config, and publish the endpoint -// record. The instance is returned at status=creating; the reconciler flips it -// to available on the first healthy agent heartbeat. +// CreateDBInstance assembles a live DB instance out of the launch primitives: validate, reserve the +// identifier, place and launch the dual-NIC VM with its data volume and customer ENI, seed the +// one-shot bootstrap config, and publish the endpoint record. The instance is returned at +// status=creating; the reconciler flips it to available on the first healthy agent heartbeat. func (s *Service) CreateDBInstance(ctx context.Context, input *rds.CreateDBInstanceInput, accountID string) (out *rds.CreateDBInstanceOutput, err error) { req, err := s.validateCreateRequest(input) if err != nil { diff --git a/spinifex/handlers/rds/delete.go b/spinifex/handlers/rds/delete.go index 0ea8a2bca..75ed35530 100644 --- a/spinifex/handlers/rds/delete.go +++ b/spinifex/handlers/rds/delete.go @@ -24,9 +24,9 @@ type finalSnapshotReservation struct { revision uint64 } -// Tears the DB instance down. AWS requires the caller to choose explicitly -// between a final snapshot and none, so neither an accidental data loss nor an -// accidental retained volume can happen by omission. +// DeleteDBInstance tears the DB instance down. AWS requires the caller to choose explicitly between a +// final snapshot and none, so neither an accidental data loss nor an accidental retained volume can +// happen by omission. // // The record is moved to deleting first and every step below tolerates a // missing resource, so a retried call or a reconciler-resumed teardown diff --git a/spinifex/handlers/rds/describe.go b/spinifex/handlers/rds/describe.go index 0563c8b29..0fa1ae394 100644 --- a/spinifex/handlers/rds/describe.go +++ b/spinifex/handlers/rds/describe.go @@ -16,9 +16,8 @@ import ( // The prefix AWS gives a DB instance's immutable resource ID. const dbiResourceIDPrefix = "db" -// Named DB instances that do not exist are an error, matching AWS: a client -// polling a create would otherwise read an empty list as "gone" rather than -// "not ready". +// DescribeDBInstances errors on named DB instances that do not exist, matching AWS: a client polling a +// create would otherwise read an empty list as "gone" rather than "not ready". func (s *Service) DescribeDBInstances(ctx context.Context, input *rds.DescribeDBInstancesInput, accountID string) (*rds.DescribeDBInstancesOutput, error) { if input == nil { input = &rds.DescribeDBInstancesInput{} diff --git a/spinifex/handlers/rds/dns.go b/spinifex/handlers/rds/dns.go index 9b50088ad..dc2c2dc9a 100644 --- a/spinifex/handlers/rds/dns.go +++ b/spinifex/handlers/rds/dns.go @@ -17,11 +17,10 @@ func (s *Service) dnsName(accountID, dbInstanceIdentifier string) string { return dns.RDSName(dbInstanceIdentifier, accountID, s.region, s.deps.BaseDomain) } -// The UPSERTs for every endpoint-ready DB instance across all account buckets, -// plus whether the enumeration was authoritative. Instances live in per-account -// buckets, so a complete cross-tenant view requires reading every one: any -// failure yields ok=false, which suppresses RDS pruning rather than deleting a -// tenant's endpoint on a partial view. +// DesiredDNSChanges returns the UPSERTs for every endpoint-ready DB instance across all account +// buckets, plus whether the enumeration was authoritative. Instances live in per-account buckets, so +// a complete cross-tenant view requires reading every one: any failure yields ok=false, which +// suppresses RDS pruning rather than deleting a tenant's endpoint on a partial view. func (s *Service) DesiredDNSChanges() (changes []dns.Change, ok bool) { if s == nil || s.deps.BaseDomain == "" { return nil, false diff --git a/spinifex/handlers/rds/engine.go b/spinifex/handlers/rds/engine.go index 078275259..fceb26496 100644 --- a/spinifex/handlers/rds/engine.go +++ b/spinifex/handlers/rds/engine.go @@ -9,9 +9,9 @@ import ( "github.com/mulgadc/spinifex/spinifex/foundation/aws/errors" ) -// The control-plane half of the engine seam: what CreateDBInstance needs to -// validate a request and assemble a bootstrap config. The in-guest half — -// initdb, quiesce, live password apply — lives in rds-init and rds-agent. +// Engine is the control-plane half of the engine seam: what CreateDBInstance needs to validate a +// request and assemble a bootstrap config. The in-guest half — initdb, quiesce, live password apply — +// lives in rds-init and rds-agent. type Engine struct { Name string // Pinned for v1. A request naming another version is rejected rather than @@ -104,37 +104,38 @@ func indexEnginesByFamily(registry map[string]Engine) (map[string]Engine, error) return out, nil } -// The pinned version an AMI lookup resolves against, which is the major alone: +// EngineVersion returns the pinned version an AMI lookup resolves against, which is the major alone: // the AMI carries the major, and a minor is chosen by the image build. func (e Engine) EngineVersion() string { return e.MajorVersion } -// The engine's own name for itself, as a describe reports it. +// Description returns the engine's own name for itself, as a describe reports it. func (e Engine) Description() string { return e.description } -// The AWS licence model name, which an orderable option carries and which a +// LicenseModel returns the AWS license model name, which an orderable option carries and which a // client may filter on. func (e Engine) LicenseModel() string { return e.licenseModel } -// The parameter-group name AWS clients expect when none is named. The group is -// implicit: it is resolvable and reportable without ever having been created, -// and is neither modifiable nor deletable. +// DefaultParameterGroupName returns the parameter-group name AWS clients expect when none is named. The +// group is implicit: it is resolvable and reportable without ever having been created, and is neither +// modifiable nor deletable. func (e Engine) DefaultParameterGroupName() string { return defaultParameterGroupPrefix + e.ParameterGroupFamily() } -// The family every parameter group of this engine belongs to. v1 pins one major -// per engine, so a family is a name rather than a version axis. +// ParameterGroupFamily returns the family every parameter group of this engine belongs to. v1 pins one +// major per engine, so a family is a name rather than a version axis. func (e Engine) ParameterGroupFamily() string { return e.Name + e.MajorVersion } -// An unknown engine is rejected at validation, before any volume or ENI exists. +// LookupEngine resolves an engine name case-insensitively. An unknown engine is rejected with +// InvalidParameterValue at validation, before any volume or ENI exists. func LookupEngine(name string) (Engine, error) { engine, ok := engines[strings.ToLower(strings.TrimSpace(name))] if !ok { @@ -144,6 +145,7 @@ func LookupEngine(name string) (Engine, error) { return engine, nil } +// SupportedEngines returns the engine names CreateDBInstance accepts, sorted for stable error messages. func SupportedEngines() []string { return slices.Sorted(maps.Keys(engines)) } @@ -155,12 +157,14 @@ func engineForFamily(family string) (Engine, error) { engine, ok := enginesByFamily[normaliseFamily(family)] if !ok { return Engine{}, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, - "DBParameterGroupFamily %q is not offered; supported families are %s", + "ParameterGroupFamily %s is not a valid parameter group family. Supported families: %s.", family, strings.Join(SupportedParameterGroupFamilies(), ", ")) } return engine, nil } +// SupportedParameterGroupFamilies returns every engine's parameter group family name (e.g. postgres18), +// sorted. func SupportedParameterGroupFamilies() []string { return slices.Sorted(maps.Keys(enginesByFamily)) } @@ -169,8 +173,8 @@ func normaliseFamily(family string) string { return strings.ToLower(strings.TrimSpace(family)) } -// An empty version takes the pin. A supplied one must name the pinned major -// exactly, since the image does not promise any particular minor version. +// ValidateVersion accepts an empty version, which takes the pin. A supplied one must name the pinned +// major exactly, since the image does not promise any particular minor version. func (e Engine) ValidateVersion(version string) error { if version == "" || version == e.MajorVersion { return nil @@ -179,7 +183,7 @@ func (e Engine) ValidateVersion(version string) error { "EngineVersion %q is not available; %s %s is the only supported version", version, e.Name, e.MajorVersion) } -// Mirrors the engine's own rules rather than a generic identifier check, so a +// ValidateMasterUsername mirrors the engine's own rules rather than a generic identifier check, so a // name the control plane accepts cannot fail at initdb time inside the guest. func (e Engine) ValidateMasterUsername(username string) error { if err := validateIdentifier("MasterUsername", username, e.maxUsernameLen, false); err != nil { @@ -188,9 +192,9 @@ func (e Engine) ValidateMasterUsername(username string) error { return e.ValidateUsernameNotReserved(username) } -// The reserved-role half of the check on its own, exported for the in-guest -// agent: its live password apply runs as the cluster superuser, so it re-checks -// the name it is handed rather than trusting the control plane to have done it. +// ValidateUsernameNotReserved is the reserved-role half of the check on its own, exported for the +// in-guest agent: its live password apply runs as the cluster superuser, so it re-checks the name it +// is handed rather than trusting the control plane to have done it. func (e Engine) ValidateUsernameNotReserved(username string) error { lower := strings.ToLower(strings.TrimSpace(username)) if slices.Contains(e.reservedUsernames, lower) { @@ -206,7 +210,7 @@ func (e Engine) ValidateUsernameNotReserved(username string) error { return nil } -// The initial database, which AWS leaves optional: an empty name creates no +// ValidateDBName checks the initial database name, which AWS leaves optional: an empty name creates no // database at all rather than one named by default. func (e Engine) ValidateDBName(name string) error { return e.validateDBName(name) @@ -246,9 +250,8 @@ func validateIdentifier(field, value string, maxLen int, allowEmpty bool) error return nil } -// Bounds and the printable-ASCII range AWS accepts. The password is never -// inspected beyond this and never stored in cleartext past the first bootstrap -// fetch. +// ValidateMasterUserPassword enforces the bounds and printable-ASCII range AWS accepts. The password is +// never inspected beyond this and never stored in cleartext past the first bootstrap fetch. func ValidateMasterUserPassword(password string) error { switch { case password == "": diff --git a/spinifex/handlers/rds/events.go b/spinifex/handlers/rds/events.go index 92bec9c3b..914f9a172 100644 --- a/spinifex/handlers/rds/events.go +++ b/spinifex/handlers/rds/events.go @@ -68,7 +68,7 @@ func validEventSourceType(sourceType string) bool { } } -// One entry in a resource's ring. +// Event is one entry in a resource's ring. type Event struct { SourceIdentifier string `json:"sourceIdentifier"` SourceType string `json:"sourceType"` @@ -82,9 +82,9 @@ type eventRing struct { Events []Event `json:"events"` } -// Best-effort by design: an event is a report about work that already happened, -// so failing the operation because its narration could not be stored would turn -// a successful stop into a failed one. Failures are logged instead. +// RecordEvent appends an event to the resource's ring. Best-effort by design: failing the operation +// because its narration could not be stored would turn a successful stop into a failed one, so +// failures are logged instead. func (s *Service) RecordEvent(ctx context.Context, accountID, sourceType, sourceIdentifier, message string, categories ...string) { if err := s.appendEvent(ctx, accountID, sourceType, sourceIdentifier, message, categories); err != nil { slog.WarnContext(ctx, "rds: recording an event failed", @@ -153,9 +153,9 @@ func trimEvents(events []Event) []Event { return kept } -// The customer view of the ring. AWS scopes a read to a time window rather than -// to a resource, so an unfiltered call reports the whole account's recent -// history, including resources that have since been deleted. +// DescribeEvents returns the customer view of the ring. AWS scopes a read to a time window rather than +// to a resource, so an unfiltered call reports the whole account's recent history, including resources +// that have since been deleted. func (s *Service) DescribeEvents(ctx context.Context, input *rds.DescribeEventsInput, accountID string) (*rds.DescribeEventsOutput, error) { // AWS recognises these names. They are not applied, as recognised names are // not on the other calls documented as not supporting Filters. diff --git a/spinifex/handlers/rds/iam.go b/spinifex/handlers/rds/iam.go index 239cdc85e..06270b35d 100644 --- a/spinifex/handlers/rds/iam.go +++ b/spinifex/handlers/rds/iam.go @@ -18,9 +18,9 @@ const ( instanceRoleInlinePolicyName = "spinifex-rds-instance-internal" ) -// The agent-only actions. The gateway's principal-class gate reserves exactly -// this set, and the role below grants exactly it — one list, so adding another -// cannot leave the gate and the grant disagreeing. +// InternalAgentActions lists the agent-only actions. The gateway's principal-class +// gate reserves exactly this set and the role below grants exactly it, so adding +// another cannot leave the gate and the grant disagreeing. var InternalAgentActions = []string{ "RegisterDBInstance", "SubmitDBStateChange", @@ -50,9 +50,9 @@ func instanceRoleInlinePolicy() (string, error) { return string(doc), nil } -// Resolved per launch rather than held, mirroring EKS: the KV-backed IAM -// service has no responders until JetStream is up, so an eager build races -// daemon boot and fails permanently on the node that loses. +// IAMProvider returns the system instance-role ensurer. It is resolved per launch rather than held, +// mirroring EKS: the KV-backed IAM service has no responders until JetStream is up, so an eager build +// races daemon boot and fails permanently on the node that loses. type IAMProvider func() handlers_iam.SystemInstanceRoleEnsurer // Returns the mandatory instance-profile ARN. Unlike EKS there is no diff --git a/spinifex/handlers/rds/launch.go b/spinifex/handlers/rds/launch.go index f3df315c0..9bfbb6463 100644 --- a/spinifex/handlers/rds/launch.go +++ b/spinifex/handlers/rds/launch.go @@ -51,8 +51,8 @@ const ( rollbackTimeout = 60 * time.Second ) -// A DB VM must never fall back to another image, so callers surface this as a -// validation failure rather than launching something else. +// ErrEngineAMINotFound means no AMI exists for the engine. A DB VM must never fall +// back to another image, so callers surface this as a validation failure. var ErrEngineAMINotFound = errors.New("rds: no AMI found for engine") // The catalog registers every engine's system image under this prefix, so the @@ -115,6 +115,8 @@ type volumeAttacher interface { AttachVolume(ctx context.Context, accountID, instanceID, volumeID, device string) (string, error) } +// LaunchDeps bundles the EC2, VPC, AMI and volume services LaunchDBInstanceVM drives, so tests can +// substitute each one. type LaunchDeps struct { Config *config.Config SystemVPC systemvpc.Deps @@ -125,8 +127,8 @@ type LaunchDeps struct { Attacher volumeAttacher } -// Everything here is already validated by the caller: the launch helper -// resolves and wires, it does not police the AWS API surface. +// LaunchInput describes the DB VM to launch. Everything here is already validated by the caller: the +// launch helper resolves and wires, it does not police the AWS API surface. type LaunchInput struct { DBInstanceIdentifier string // The customer account owning the DB, subnet and customer ENI. The VM @@ -149,6 +151,8 @@ type LaunchInput struct { ExistingDataVolume string } +// LaunchOutput reports the VM, ENIs and data volume a launch produced or reused, plus an Unwind for a +// caller that fails after the launch returned. type LaunchOutput struct { InstanceID string // The system ENI is disposable — a replace makes a new one. The customer @@ -173,8 +177,9 @@ type LaunchOutput struct { Unwind func(context.Context) } -// On any failure every resource this call created is torn down, so a retried -// create does not accumulate orphan ENIs, volumes and VMs. +// LaunchDBInstanceVM resolves the engine AMI and creates the ENIs, data volume and VM backing a DB +// instance. On any failure every resource this call created is torn down, so a retried create does +// not accumulate orphan ENIs, volumes and VMs. func LaunchDBInstanceVM(ctx context.Context, deps LaunchDeps, in LaunchInput) (out *LaunchOutput, err error) { if err := validateLaunchInput(in); err != nil { return nil, err @@ -564,6 +569,8 @@ type natsVolumeAttacher struct { var _ volumeAttacher = (*natsVolumeAttacher)(nil) +// NewNATSVolumeAttacher returns a volumeAttacher that sends AttachVolume over the VM's per-instance +// ec2.cmd subject, so the node running the VM performs the attach. func NewNATSVolumeAttacher(nc *nats.Conn) volumeAttacher { return &natsVolumeAttacher{nc: nc, timeout: attachRequestTimeout} } diff --git a/spinifex/handlers/rds/lifecycle.go b/spinifex/handlers/rds/lifecycle.go index 0dfa9500f..c796912de 100644 --- a/spinifex/handlers/rds/lifecycle.go +++ b/spinifex/handlers/rds/lifecycle.go @@ -35,13 +35,13 @@ type instanceCommander interface { StartStoppedInstance(ctx context.Context, instanceID string) error } -// No node subscribes ec2.cmd.{instanceID} for this VM, so its power state can -// only be changed through the stopped-instance path. +// ErrInstanceNotOnNode means no node subscribes ec2.cmd.{instanceID} for this VM, +// so its power state can only be changed through the stopped-instance path. var ErrInstanceNotOnNode = errors.New("rds: no node is holding this DB VM") -// The owning node refused the command because the VM is not in a state for it. -// A stop gets this when something else is already stopping the VM, which is -// where the stop was going, so only the fleet view settles it. +// ErrInstanceStateRefused means the owning node refused the command for the VM's +// current state. A stop gets this when something else is already stopping the VM, +// which is where the stop was going, so only the fleet view settles it. var ErrInstanceStateRefused = errors.New("rds: the DB VM is not in a state for this command") // How long a VM stop, start or reboot may take before the command is treated as @@ -51,9 +51,9 @@ const instanceCommandTimeout = 90 * time.Second // How often the fleet is re-read while a stop is settling. const vmStopPollInterval = 500 * time.Millisecond -// Reboots the engine, applying any static parameters stored pending-reboot. -// ForceFailover is rejected outright: there is no standby to fail over -// to, and silently ignoring it would report a failover that never happened. +// RebootDBInstance reboots the engine, applying any static parameters stored pending-reboot. +// ForceFailover is rejected outright: there is no standby to fail over to, and silently ignoring it +// would report a failover that never happened. func (s *Service) RebootDBInstance(ctx context.Context, input *rds.RebootDBInstanceInput, accountID string) (*rds.RebootDBInstanceOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -97,9 +97,8 @@ func (s *Service) RebootDBInstance(ctx context.Context, input *rds.RebootDBInsta return &rds.RebootDBInstanceOutput{DBInstance: s.projectDBInstance(rec)}, nil } -// Stops the engine and then the VM. The data volume, the customer ENI and its -// IP, and the DNS record are all retained, so a start comes back on the same -// datadir at the same address. +// StopDBInstance stops the engine and then the VM. The data volume, the customer ENI and its IP, and +// the DNS record are all retained, so a start comes back on the same datadir at the same address. func (s *Service) StopDBInstance(ctx context.Context, input *rds.StopDBInstanceInput, accountID string) (*rds.StopDBInstanceOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -133,8 +132,8 @@ func (s *Service) StopDBInstance(ctx context.Context, input *rds.StopDBInstanceI return &rds.StopDBInstanceOutput{DBInstance: s.projectDBInstance(stopped)}, nil } -// Brings a stopped instance back on its retained data volume and customer ENI. -// The engine replays WAL when the graceful stop did not complete. +// StartDBInstance brings a stopped instance back on its retained data volume and customer ENI. The +// engine replays WAL when the graceful stop did not complete. func (s *Service) StartDBInstance(ctx context.Context, input *rds.StartDBInstanceInput, accountID string) (*rds.StartDBInstanceOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -411,6 +410,8 @@ type natsInstanceCommander struct { var _ instanceCommander = (*natsInstanceCommander)(nil) +// NewNATSInstanceCommander returns an instanceCommander that sends power commands over the VM's +// per-instance ec2.cmd subject, so they reach whichever node runs it. func NewNATSInstanceCommander(nc *nats.Conn) instanceCommander { return &natsInstanceCommander{nc: nc, timeout: instanceCommandTimeout} } diff --git a/spinifex/handlers/rds/modify.go b/spinifex/handlers/rds/modify.go index efe28a8ea..b60ab99f3 100644 --- a/spinifex/handlers/rds/modify.go +++ b/spinifex/handlers/rds/modify.go @@ -66,10 +66,10 @@ func (p *modifyPlan) empty() bool { return !p.disruptive() && !p.immediate() } -// Changes a live DB instance. The non-disruptive settings land immediately; a -// storage grow, a class change or a parameter-group change is applied now when -// ApplyImmediately is set and otherwise recorded in PendingModifiedValues for -// the maintenance window to drain through applyPendingModifications. +// ModifyDBInstance changes a live DB instance. The non-disruptive settings land immediately; a storage +// grow, a class change or a parameter-group change is applied now when ApplyImmediately is set and +// otherwise recorded in PendingModifiedValues for the maintenance window to drain through +// applyPendingModifications. // // The endpoint survives every path: the data volume, the customer ENI and its // address, and the DNS A-record are untouched by a grow and by a class change. diff --git a/spinifex/handlers/rds/paging.go b/spinifex/handlers/rds/paging.go index 8cf4a26f7..a4c9838bd 100644 --- a/spinifex/handlers/rds/paging.go +++ b/spinifex/handlers/rds/paging.go @@ -17,9 +17,9 @@ const defaultMaxRecords = 100 // so a key compares field by field exactly as the fields do. const pageKeySeparator = "\x00" -// One page of items, already in ascending key order. The Marker is base64 of the -// next item's key, as AWS issues it; a resume starts at the first key not below -// it, so that item's deletion skips nothing. MaxRecords outside 1-100 is 100. +// Page returns one page of items, already in ascending key order. The Marker is base64 of the next +// item's key, as AWS issues it; a resume starts at the first key not below it, so that item's deletion +// skips nothing. MaxRecords outside 1-100 is 100. func Page[T any](items []T, key func(T) string, maxRecords *int64, marker *string) ([]T, *string, error) { start := 0 if encoded := aws.StringValue(marker); encoded != "" { @@ -65,10 +65,14 @@ func parameterGroupPageKey(g *rds.DBParameterGroup) string { return aws.StringValue(g.DBParameterGroupName) } +// EngineVersionPageKey returns the engine-plus-version key a DescribeDBEngineVersions listing is +// sorted and paged by. func EngineVersionPageKey(v *rds.DBEngineVersion) string { return pageKey(aws.StringValue(v.Engine), aws.StringValue(v.EngineVersion)) } +// OrderableOptionPageKey returns the engine, version and instance class key a +// DescribeOrderableDBInstanceOptions listing is sorted and paged by. func OrderableOptionPageKey(o *rds.OrderableDBInstanceOption) string { return pageKey(aws.StringValue(o.Engine), aws.StringValue(o.EngineVersion), aws.StringValue(o.DBInstanceClass)) } diff --git a/spinifex/handlers/rds/paramcatalog.go b/spinifex/handlers/rds/paramcatalog.go index 5e9527f64..111cd9d9f 100644 --- a/spinifex/handlers/rds/paramcatalog.go +++ b/spinifex/handlers/rds/paramcatalog.go @@ -48,9 +48,9 @@ const ( ParamTypeEnum = "enum" ) -// One catalog entry. Exactly one of Default and DefaultFor is set: a literal for -// the parameters whose engine default is size-independent, and a formula over -// the instance class's memory for the ones that are not. +// ParameterSpec is one catalog entry. Exactly one of Default and DefaultFor is set: a literal for the +// parameters whose engine default is size-independent, and a formula over the instance class's memory +// for the ones that are not. type ParameterSpec struct { Name string DataType string @@ -122,16 +122,16 @@ func validateParameterCatalogs() error { return nil } -// The catalog entry for a parameter name, or false when the engine has no such +// LookupParameter returns the catalog entry for a parameter name, or false when the engine has no such // setting or it is one this platform does not expose. func (e Engine) LookupParameter(name string) (ParameterSpec, bool) { spec, ok := e.catalog[strings.ToLower(strings.TrimSpace(name))] return spec, ok } -// The spelling to write into the engine's option file for a parameter the -// customer set. A name the server does not accept there is a boot loop with the -// bad file already on the data volume, so the two names are kept apart. +// OptionFileName returns the spelling to write into the engine's option file for a parameter the +// customer set. A name the server does not accept there is a boot loop with the bad file already on +// the data volume, so the two names are kept apart. func (e Engine) OptionFileName(name string) string { spec, ok := e.LookupParameter(name) if !ok || spec.optionFileName == "" { @@ -140,21 +140,21 @@ func (e Engine) OptionFileName(name string) string { return spec.optionFileName } -// The parameter that requires TLS of a client connection, under AWS's own name -// for it. Exported for the in-guest agent, which derives enforcement from the -// installed set and has no business knowing which engine it is running. +// TLSEnforcementParameter returns the parameter that requires TLS of a client connection, under AWS's +// own name for it. Exported for the in-guest agent, which derives enforcement from the installed set +// and has no business knowing which engine it is running. func (e Engine) TLSEnforcementParameter() string { return e.tlsEnforcementParameter } -// Sorted, so a describe returns the same order on every call and Terraform does -// not read a reshuffle as drift. +// CatalogParameterNames returns the catalog's parameter names sorted, so a describe returns the same +// order on every call and Terraform does not read a reshuffle as drift. func (e Engine) CatalogParameterNames() []string { return slices.Sorted(maps.Keys(e.catalog)) } -// The engine default for one parameter at one instance class: the literal, or -// the formula evaluated against the class's memory. +// DefaultAt returns the engine default for one parameter at one instance class: the literal, or the +// formula evaluated against the class's memory. func (s ParameterSpec) DefaultAt(memoryMiB int64) string { if s.DefaultFor != nil { return s.DefaultFor(memoryMiB) @@ -162,7 +162,7 @@ func (s ParameterSpec) DefaultAt(memoryMiB int64) string { return s.Default } -// The AllowedValues string AWS reports: a range for numerics, the alternatives +// AllowedValues returns the AllowedValues string AWS reports: a range for numerics, the alternatives // for an enum or boolean. Empty for a free-form string, as AWS leaves it. func (s ParameterSpec) AllowedValues() string { switch s.DataType { @@ -344,10 +344,10 @@ func rangeError(spec ParameterSpec, value string) error { "the value %q of parameter %s is outside its allowed range %s", value, spec.Name, spec.AllowedValues()) } -// The full parameter set an instance runs with: every catalog default evaluated -// at the instance's class, overlaid with the group's stored overrides. The -// result is literals only, sorted by name so a re-resolve that changed nothing -// produces a byte-identical include, and every boolean canonicalised. +// ResolveEffectiveParameters returns the full parameter set an instance runs with: every catalog +// default evaluated at the instance's class, overlaid with the group's stored overrides. The result is +// literals only, sorted by name so a re-resolve that changed nothing produces a byte-identical include, +// and every boolean canonicalized. // // Overrides are re-validated rather than trusted: a catalog whose bounds // tightened must not keep handing the engine a value it would now reject. diff --git a/spinifex/handlers/rds/parametergroup.go b/spinifex/handlers/rds/parametergroup.go index e0880a7ff..76d50ddd9 100644 --- a/spinifex/handlers/rds/parametergroup.go +++ b/spinifex/handlers/rds/parametergroup.go @@ -23,9 +23,9 @@ const maxParametersPerModify = 20 // with it is reported and resolvable but never modifiable or deletable. const defaultParameterGroupPrefix = "default." -// Creates a customer-owned parameter group. It starts empty: every value is a -// catalog default until the customer overrides one, so a fresh group and the -// default group resolve to the same effective set. +// CreateDBParameterGroup creates a customer-owned parameter group. It starts empty: every value is a +// catalog default until the customer overrides one, so a fresh group and the default group resolve to +// the same effective set. func (s *Service) CreateDBParameterGroup(ctx context.Context, input *rds.CreateDBParameterGroupInput, accountID string) (*rds.CreateDBParameterGroupOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -80,9 +80,9 @@ func (s *Service) CreateDBParameterGroup(ctx context.Context, input *rds.CreateD return &rds.CreateDBParameterGroupOutput{DBParameterGroup: s.projectParameterGroupRecord(&rec)}, nil } -// The implicit default group is reported alongside the customer's own, whether -// or not anything has materialised it yet — a client that lists groups before -// creating its first instance must still see the one it can name. +// DescribeDBParameterGroups reports the implicit default group alongside the customer's own, whether +// or not anything has materialized it yet — a client that lists groups before creating its first +// instance must still see the one it can name. func (s *Service) DescribeDBParameterGroups(ctx context.Context, input *rds.DescribeDBParameterGroupsInput, accountID string) (*rds.DescribeDBParameterGroupsOutput, error) { if input == nil { input = &rds.DescribeDBParameterGroupsInput{} @@ -137,10 +137,9 @@ func (s *Service) DescribeDBParameterGroups(ctx context.Context, input *rds.Desc return &rds.DescribeDBParameterGroupsOutput{DBParameterGroups: groups, Marker: next}, nil } -// Stores validated overrides, one KV key per parameter, so a modify touching one -// setting cannot clobber a concurrent change to another. The whole request -// is validated before anything is written: a batch with one bad value must leave -// the group exactly as it was rather than half-applied. +// ModifyDBParameterGroup stores validated overrides, one KV key per parameter, so a modify touching +// one setting cannot clobber a concurrent change to another. The whole request is validated before +// anything is written: a batch with one bad value must leave the group exactly as it was. func (s *Service) ModifyDBParameterGroup(ctx context.Context, input *rds.ModifyDBParameterGroupInput, accountID string) (*rds.DBParameterGroupNameMessage, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -233,10 +232,9 @@ func (s *Service) propagateParameterGroup(ctx context.Context, kv *kvstore.Bucke return errors.Join(failures...) } -// Merges catalog defaults with the group's stored overrides. The defaults are -// evaluated at the smallest supported class, because a parameter group is not -// bound to an instance: a customer reading a group's values before creating -// anything has to see literals, and formulas stay off this surface. +// DescribeDBParameters merges catalog defaults with the group's stored overrides. The defaults are +// evaluated at the smallest supported class, because a parameter group is not bound to an instance: +// a customer reading a group's values before creating anything has to see literals. func (s *Service) DescribeDBParameters(ctx context.Context, input *rds.DescribeDBParametersInput, accountID string) (*rds.DescribeDBParametersOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -316,9 +314,9 @@ func parameterNameMatches(filters []Filter, param string) bool { return true } -// Refused for a default group, and while any instance still references it — -// including one that is only deleting, so a destroy that races the teardown -// fails cleanly rather than leaving a live engine's configuration unreadable. +// DeleteDBParameterGroup is refused for a default group, and while any instance still references it — +// including one that is only deleting, so a destroy that races the teardown fails cleanly rather than +// leaving a live engine's configuration unreadable. func (s *Service) DeleteDBParameterGroup(ctx context.Context, input *rds.DeleteDBParameterGroupInput, accountID string) (*rds.DeleteDBParameterGroupOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -477,13 +475,12 @@ func engineForDefaultParameterGroup(name string) (Engine, bool) { return Engine{}, false } -// An omitted family takes PostgreSQL's rather than failing, which AWS clients -// that predate a second engine depend on. The cost is that a group meant for -// another engine is created as a PostgreSQL one and is only refused a call -// later, when an instance of that engine tries to attach it. +// The family is required: defaulting it would create a group for an engine the +// caller never named, refused only later when another engine tries to attach it. func validateParameterGroupFamily(family string) (string, error) { if normaliseFamily(family) == "" { - return enginePostgres.ParameterGroupFamily(), nil + return "", awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + "The parameter ParameterGroupFamily must be provided and must not be empty.") } engine, err := engineForFamily(family) if err != nil { diff --git a/spinifex/handlers/rds/parametergroup_test.go b/spinifex/handlers/rds/parametergroup_test.go index 68dcaac26..3c3e27098 100644 --- a/spinifex/handlers/rds/parametergroup_test.go +++ b/spinifex/handlers/rds/parametergroup_test.go @@ -90,24 +90,45 @@ func TestCreateDBParameterGroup_StoresAnEmptyGroup(t *testing.T) { } } -// An omitted family can only mean the one family this platform offers, so it -// takes the pin rather than failing a Terraform config that leaves it out. -func TestCreateDBParameterGroup_DefaultsTheFamilyAndRejectsAnother(t *testing.T) { +// AWS refuses an omitted and an empty family with the same code and message. +func TestCreateDBParameterGroup_RefusesAnOmittedOrEmptyFamily(t *testing.T) { t.Parallel() h := newCreateHarness(t, testBaseDomain) - input := parameterGroupInput(testParameterGroup) - input.DBParameterGroupFamily = nil - out, err := h.svc.CreateDBParameterGroup(t.Context(), input, testAccountID) - require.NoError(t, err) - assert.Equal(t, "postgres18", aws.StringValue(out.DBParameterGroup.DBParameterGroupFamily)) + for name, family := range map[string]*string{"omitted": nil, "empty": aws.String("")} { + input := parameterGroupInput(testParameterGroup) + input.DBParameterGroupFamily = family + _, err := h.svc.CreateDBParameterGroup(t.Context(), input, testAccountID) + code, message, ok := awserrors.ResolveErrorDetail(err) + require.True(t, ok, name) + assert.Equal(t, awserrors.ErrorInvalidParameterValue, code, name) + assert.Equal(t, "The parameter ParameterGroupFamily must be provided and must not be empty.", message, name) + } + + _, err := h.svc.DescribeDBParameterGroups(t.Context(), &rds.DescribeDBParameterGroupsInput{ + DBParameterGroupName: aws.String(testParameterGroup), + }, testAccountID) + assert.Equal(t, awserrors.ErrorDBParameterGroupNotFound, awserrors.ValidErrorCodeFromError(err), + "a refused create must not leave a group behind") +} + +func TestCreateDBParameterGroup_RejectsAnUnofferedFamily(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) other := parameterGroupInput("mysql-tuned") other.DBParameterGroupFamily = aws.String("mysql8.0") - _, err = h.svc.CreateDBParameterGroup(t.Context(), other, testAccountID) + _, err := h.svc.CreateDBParameterGroup(t.Context(), other, testAccountID) require.Error(t, err) assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err), "the code has to survive resolution or the client sees a 500") + + // AWS's wording, with the offered families appended so the caller can retry. + _, message, _ := awserrors.ResolveErrorDetail(err) + const prefix = "ParameterGroupFamily mysql8.0 is not a valid parameter group family. Supported families: " + require.True(t, strings.HasPrefix(message, prefix), message) + named := strings.Split(strings.TrimSuffix(strings.TrimPrefix(message, prefix), "."), ", ") + assert.ElementsMatch(t, SupportedParameterGroupFamilies(), named) } // A customer group under the reserved prefix would be indistinguishable from the diff --git a/spinifex/handlers/rds/reconciler.go b/spinifex/handlers/rds/reconciler.go index e7eae6867..974521af4 100644 --- a/spinifex/handlers/rds/reconciler.go +++ b/spinifex/handlers/rds/reconciler.go @@ -66,15 +66,15 @@ const ( instanceStateTerminated = "terminated" ) -// The VM's EC2 lifecycle state, fanned out across every host so a DB VM is -// observed wherever it landed. Nil disables the VM half of the check. +// InstanceStateResolver reports the VM's EC2 lifecycle state, fanned out across every host so a DB VM +// is observed wherever it landed. Nil disables the VM half of the check. type InstanceStateResolver interface { InstanceState(ctx context.Context, instanceID, accountID string) (string, error) } -// The leader-elected RDS control loop. One node holds the lease and does the -// control work; every node keeps serving the API, so a leaderless gap delays a -// status transition without failing a request. +// Reconciler is the leader-elected RDS control loop. One node holds the lease and does the control +// work; every node keeps serving the API, so a leaderless gap delays a status transition without +// failing a request. // // Its responsibilities are the transitions no single API call can finish — the // ones it drives itself and the ones whose caller died partway through — plus @@ -100,7 +100,8 @@ type Reconciler struct { systemSGID string } -// holder identifies this daemon in the lease. +// NewReconciler returns a Reconciler for svc; holder identifies this daemon in the lease. A bad lease +// config is kept, and Run logs it and returns. func NewReconciler(svc *Service, holder string) *Reconciler { r := &Reconciler{svc: svc, holder: holder, reportedPending: make(map[string]string)} r.lease, r.leaseErr = kvlease.New(kvlease.Config{ @@ -115,8 +116,8 @@ func NewReconciler(svc *Service, holder string) *Reconciler { return r } -// Drives the leadership and reconcile loop until ctx is cancelled. Intended as -// a daemon-boot goroutine; panics are the caller's recover concern. +// Run drives the leadership and reconcile loop until ctx is canceled. Intended as a daemon-boot +// goroutine; panics are the caller's recover concern. func (r *Reconciler) Run(ctx context.Context) { if r.leaseErr != nil { slog.ErrorContext(ctx, "rds reconciler: lease config invalid", "holder", r.holder, "err", r.leaseErr) @@ -168,9 +169,9 @@ func (r *Reconciler) reconcilePass(ctx context.Context) (time.Duration, error) { return revisit, nil } -// The shared GC backstop's cluster-wide gate. The reconciler's lease is already -// cluster-singular and held continuously rather than claimed per sweep, so -// holding it is the whole answer and there is nothing for the caller to release. +// AcquireClusterLease is the shared GC backstop's cluster-wide gate. The reconciler's lease is already +// cluster-singular and held continuously rather than claimed per sweep, so holding it is the whole +// answer and the returned release func is a no-op. func (r *Reconciler) AcquireClusterLease() (func(), bool) { return func() {}, r.lease.Held() } @@ -870,8 +871,9 @@ type describeInstanceState struct { var _ InstanceStateResolver = (*describeInstanceState)(nil) -// The VM runs in the system account, so the describe is issued there; the -// customer account cannot see a platform-managed instance. +// NewDescribeInstanceState returns an InstanceStateResolver backed by DescribeInstances. The VM runs in +// the system account, so the describe is issued there; the customer account cannot see a +// platform-managed instance. func NewDescribeInstanceState(describe func(*ec2.DescribeInstancesInput, string) (*ec2.DescribeInstancesOutput, error)) InstanceStateResolver { return &describeInstanceState{describe: describe} } diff --git a/spinifex/handlers/rds/records.go b/spinifex/handlers/rds/records.go index b2c1a32ea..06110fcc2 100644 --- a/spinifex/handlers/rds/records.go +++ b/spinifex/handlers/rds/records.go @@ -2,8 +2,8 @@ package handlers_rds import "time" -// Fields are grouped by writer: the AWS API owns the configuration, the -// reconciler the plumbing, the agent protocol Bootstrap and Agent. +// DBInstanceRecord is the db-instances/{id} record. Fields are grouped by writer: the AWS API owns the +// configuration, the reconciler the plumbing, the agent protocol Bootstrap and Agent. type DBInstanceRecord struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier"` AccountID string `json:"accountId"` @@ -161,11 +161,10 @@ type DBInstanceRecord struct { UpdatedAt time.Time `json:"updatedAt"` } -// The disruptive half of a modify: every field here takes the engine down, so -// each is recorded before the work starts and cleared as it lands. That makes -// one structure serve both meanings AWS gives PendingModifiedValues — a -// deferred change waiting for its maintenance window, and an in-flight change a -// crashed leader has to be able to finish. +// PendingModifiedValues is the disruptive half of a modify: every field here takes the engine down, so +// each is recorded before the work starts and cleared as it lands. That makes one structure serve both +// meanings AWS gives PendingModifiedValues — a deferred change waiting for its maintenance window, and +// an in-flight change a crashed leader has to be able to finish. // // MasterUserPassword is deliberately absent: cleartext is never persisted, // and AWS applies a password change as soon as possible regardless @@ -198,10 +197,10 @@ func (p *PendingModifiedValues) growingFilesystem() bool { return p != nil && p.FilesystemGrowPending } -// Claimed for as long as a worker is applying PendingModifiedValues, and -// renewed while it works. A modify still inside its own API call and one a dead -// leader abandoned are the same record otherwise — both are modifying with -// values not yet applied — so this is the only thing that tells them apart. +// ModifyLease is claimed for as long as a worker is applying PendingModifiedValues, and renewed while +// it works. A modify still inside its own API call and one a dead leader abandoned are the same record +// otherwise — both are modifying with values not yet applied — so this is the only thing that tells +// them apart. type ModifyLease struct { // The node and the claim, so two workers on one node are still distinct. Holder string `json:"holder"` @@ -236,9 +235,9 @@ const ( BootstrapStateNone = "none" ) -// The record's view of the initial bootstrap. The master password itself lives -// encrypted under bootstrap-payloads/{id}, never here, and that key is what a -// fetch replays until the guest proves PostgreSQL applied it. +// BootstrapState is the record's view of the initial bootstrap. The master password itself lives +// encrypted under bootstrap-payloads/{id}, never here, and that key is what a fetch replays until the +// guest proves PostgreSQL applied it. type BootstrapState struct { // Kept after acknowledgement so a duplicate acknowledgement, whose payload // key is already gone, is still answerable. @@ -274,9 +273,9 @@ const ( SnapshotStatusAvailable = "available" ) -// The snapshot operation holding a DB instance, written under the same CAS that -// moves it to backing-up so a second request is rejected rather than queued. An -// An automated snapshot and a manual one serialise against each other here. +// SnapshotOperation is the snapshot operation holding a DB instance, written under the same CAS that +// moves it to backing-up so a second request is rejected rather than queued. An automated snapshot and +// a manual one serialize against each other here. type SnapshotOperation struct { DBSnapshotIdentifier string `json:"dbSnapshotIdentifier"` // Where the instance goes when the snapshot finishes. Recorded rather than @@ -286,9 +285,9 @@ type SnapshotOperation struct { StartedAt time.Time `json:"startedAt"` } -// The db-snapshots/{id} record. The EC2 snapshot holds the data; this is the -// RDS-level metadata a restore needs and DescribeDBSnapshots projects, captured -// at snapshot time because the DB instance it describes may be gone by then. +// DBSnapshotRecord is the db-snapshots/{id} record. The EC2 snapshot holds the data; this is the +// RDS-level metadata a restore needs and DescribeDBSnapshots projects, captured at snapshot time +// because the DB instance it describes may be gone by then. type DBSnapshotRecord struct { DBSnapshotIdentifier string `json:"dbSnapshotIdentifier"` DBInstanceIdentifier string `json:"dbInstanceIdentifier"` @@ -343,19 +342,19 @@ func (r *DBSnapshotRecord) GetTags() map[string]string { return r.Tags } func (r *DBSnapshotRecord) SetTags(tags map[string]string) { r.Tags = tags } -// The backups/{db}/automated/{ts} index entry. Deliberately thin: it exists so -// the retention sweep can enumerate one instance's automated backups without a -// bucket-wide snapshot scan, and everything else it needs — age, status, source -// volume — is read from the db-snapshots record this names. +// AutomatedBackupRecord is the backups/{db}/automated/{ts} index entry. Deliberately thin: it exists so +// the retention sweep can enumerate one instance's automated backups without a bucket-wide snapshot +// scan, and everything else it needs — age, status, source volume — is read from the db-snapshots +// record this names. type AutomatedBackupRecord struct { DBInstanceIdentifier string `json:"dbInstanceIdentifier"` DBSnapshotIdentifier string `json:"dbSnapshotIdentifier"` CreatedAt time.Time `json:"createdAt"` } -// A data volume that outlived its DB instance because a COW snapshot still -// references its chunks. The last DeleteDBSnapshot to empty Snapshots -// deletes it; the retention reaper is the backstop for a crash in between. +// RetainedVolumeRecord is a data volume that outlived its DB instance because a COW snapshot still +// references its chunks. The last DeleteDBSnapshot to empty Snapshots deletes it; the retention reaper +// is the backstop for a crash in between. type RetainedVolumeRecord struct { VolumeID string `json:"volumeId"` AccountID string `json:"accountId"` @@ -372,16 +371,16 @@ type RetainedVolumeRecord struct { RetainedAt time.Time `json:"retainedAt"` } -// A member list rather than a map because the XML marshaller renders a map as an -// AWS-foreign shape in nondeterministic order. +// Parameter is one name/value pair. A member list is used rather than a map because the XML marshaller +// renders a map as an AWS-foreign shape in nondeterministic order. type Parameter struct { Name string `json:"name" locationName:"Name"` Value string `json:"value" locationName:"Value"` } -// The db-subnet-groups/{name} record. The subnet list is stored verbatim rather -// than reduced to a placement, so when V2 makes AZs real the group needs no -// migration — only the code that chooses among its subnets changes. +// DBSubnetGroupRecord is the db-subnet-groups/{name} record. The subnet list is stored verbatim rather +// than reduced to a placement, so when V2 makes AZs real the group needs no migration — only the code +// that chooses among its subnets changes. type DBSubnetGroupRecord struct { Name string `json:"name"` AccountID string `json:"accountId"` @@ -399,6 +398,8 @@ type DBSubnetGroupRecord struct { UpdatedAt time.Time `json:"updatedAt"` } +// DBSubnetGroupSubnet is one subnet of a DB subnet group, with the AZ recorded on the subnet itself; +// AvailabilityZone is empty when the subnet carries none. type DBSubnetGroupSubnet struct { SubnetID string `json:"subnetId"` AvailabilityZone string `json:"availabilityZone,omitempty"` @@ -410,9 +411,9 @@ func (r *DBSubnetGroupRecord) GetTags() map[string]string { return r.Tags } func (r *DBSubnetGroupRecord) SetTags(tags map[string]string) { r.Tags = tags } -// The db-parameter-groups/{name}/meta record. The values themselves live one key -// each under .../params/, so a modify touching one parameter cannot clobber a -// concurrent change to another. +// DBParameterGroupRecord is the db-parameter-groups/{name}/meta record. The values themselves live one +// key each under .../params/, so a modify touching one parameter cannot clobber a concurrent change to +// another. type DBParameterGroupRecord struct { Name string `json:"name"` AccountID string `json:"accountId"` @@ -431,9 +432,9 @@ func (r *DBParameterGroupRecord) GetTags() map[string]string { return r.Tags } func (r *DBParameterGroupRecord) SetTags(tags map[string]string) { r.Tags = tags } -// One stored override, at db-parameter-groups/{name}/params/{key}. ApplyMethod -// is the customer's request rather than a fact: whether a change lands live is -// decided by the parameter's own ApplyType. +// DBParameterRecord is one stored override, at db-parameter-groups/{name}/params/{key}. ApplyMethod is +// the customer's request rather than a fact: whether a change lands live is decided by the parameter's +// own ApplyType. type DBParameterRecord struct { Name string `json:"name"` Value string `json:"value"` @@ -441,8 +442,8 @@ type DBParameterRecord struct { UpdatedAt time.Time `json:"updatedAt"` } -// Separate from Status: the reconciler needs both to tell "stopped because we -// stopped it" from "stopped because it died". +// EngineHealth is the agent-reported state of the database engine, separate from Status: the reconciler +// needs both to tell "stopped because we stopped it" from "stopped because it died". type EngineHealth string const ( @@ -455,7 +456,7 @@ const ( EngineHealthStopped EngineHealth = "stopped" ) -// Rejects unrecognised values at the boundary so a newer agent cannot persist a +// ValidEngineHealth rejects unrecognized values at the boundary so a newer agent cannot persist a // health the reconciler will fail to classify. func ValidEngineHealth(h EngineHealth) bool { switch h { @@ -466,7 +467,7 @@ func ValidEngineHealth(h EngineHealth) bool { } } -// Written only by RegisterDBInstance and SubmitDBStateChange. +// AgentState is the agent's last report, written only by RegisterDBInstance and SubmitDBStateChange. type AgentState struct { // A report from an instance other than the record's current one is a // superseded VM still running after a replace. diff --git a/spinifex/handlers/rds/restore.go b/spinifex/handlers/rds/restore.go index 98d34693a..9a8d66337 100644 --- a/spinifex/handlers/rds/restore.go +++ b/spinifex/handlers/rds/restore.go @@ -16,11 +16,10 @@ import ( "github.com/mulgadc/spinifex/spinifex/foundation/state/kvstore" ) -// Builds a new DB instance on a volume created from the snapshot. It is a fresh -// instance in every respect but its data: a new identifier, customer ENI, DNS -// name, serving certificate and VM. What it inherits is the datadir — which -// already holds the database, its roles and their password hashes, so the engine -// starts on it rather than running initdb. +// RestoreDBInstanceFromDBSnapshot builds a new DB instance on a volume created from the snapshot. It is +// a fresh instance in every respect but its data: a new identifier, customer ENI, DNS name, serving +// certificate and VM. What it inherits is the datadir — which already holds the database, its roles +// and their password hashes, so the engine starts on it rather than running initdb. func (s *Service) RestoreDBInstanceFromDBSnapshot(ctx context.Context, input *rds.RestoreDBInstanceFromDBSnapshotInput, accountID string) (out *rds.RestoreDBInstanceFromDBSnapshotOutput, err error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") diff --git a/spinifex/handlers/rds/service.go b/spinifex/handlers/rds/service.go index 9a2396d65..5fe22c527 100644 --- a/spinifex/handlers/rds/service.go +++ b/spinifex/handlers/rds/service.go @@ -16,7 +16,7 @@ import ( "github.com/nats-io/nats.go/jetstream" ) -// Host-side capabilities the RDS control plane needs beyond NATS. +// Deps holds the host-side capabilities the RDS control plane needs beyond NATS. type Deps struct { // The cluster CA the serving certs are signed by. Empty disables minting, // and GetDBBootstrapConfig returns no cert rather than failing the boot. @@ -77,7 +77,7 @@ type Deps struct { Backup BackupPolicy } -// The RDS control plane's KV-backed handler set. One per daemon. +// Service is the RDS control plane's KV-backed handler set. One per daemon. type Service struct { nc *nats.Conn region string @@ -103,7 +103,7 @@ type agentLiveness struct { beatsSinceKV int } -// region scopes the ARNs the Service mints. +// NewService returns a Service with no Deps; region scopes the ARNs the Service mints. func NewService(nc *nats.Conn, region string) *Service { return &Service{nc: nc, region: region, liveness: make(map[string]*agentLiveness)} } diff --git a/spinifex/handlers/rds/service_nats.go b/spinifex/handlers/rds/service_nats.go index 248b025ad..9110536bb 100644 --- a/spinifex/handlers/rds/service_nats.go +++ b/spinifex/handlers/rds/service_nats.go @@ -36,12 +36,13 @@ const ( restoreTimeout = 8 * time.Minute ) -// The gateway-side adapter that forwards each agent action as a NATS request to -// the daemon's matching subscriber. +// NATSService is the gateway-side adapter that forwards each agent action as a NATS request to the +// daemon's matching subscriber. type NATSService struct { nc *nats.Conn } +// NewNATSService returns a NATSService that issues its requests over nc. func NewNATSService(nc *nats.Conn) *NATSService { return &NATSService{nc: nc} } @@ -147,6 +148,11 @@ func (s *NATSService) DescribeDBSubnetGroups(ctx context.Context, input *rds.Des SubjectDescribeDBSubnetGroups, input, defaultTimeout, accountID) } +func (s *NATSService) ModifyDBSubnetGroup(ctx context.Context, input *rds.ModifyDBSubnetGroupInput, accountID string) (*rds.ModifyDBSubnetGroupOutput, error) { + return natsmsg.NATSRequest[rds.ModifyDBSubnetGroupOutput](ctx, s.nc, + SubjectModifyDBSubnetGroup, input, defaultTimeout, accountID) +} + func (s *NATSService) DeleteDBSubnetGroup(ctx context.Context, input *rds.DeleteDBSubnetGroupInput, accountID string) (*rds.DeleteDBSubnetGroupOutput, error) { return natsmsg.NATSRequest[rds.DeleteDBSubnetGroupOutput](ctx, s.nc, SubjectDeleteDBSubnetGroup, input, defaultTimeout, accountID) @@ -177,7 +183,7 @@ func (s *NATSService) DeleteDBParameterGroup(ctx context.Context, input *rds.Del SubjectDeleteDBParameterGroup, input, defaultTimeout, accountID) } -// Requested on the Layer-1 subject, not the bus. +// GetDBBootstrapConfig is requested on the Layer-1 subject, not the bus. func (s *NATSService) GetDBBootstrapConfig(ctx context.Context, input *GetDBBootstrapConfigInput, accountID string) (*GetDBBootstrapConfigOutput, error) { return natsmsg.NATSRequest[GetDBBootstrapConfigOutput](ctx, s.nc, SubjectGetDBBootstrapConfig, input, defaultTimeout, accountID) diff --git a/spinifex/handlers/rds/servingcert.go b/spinifex/handlers/rds/servingcert.go index 05652ad9a..55bab8df9 100644 --- a/spinifex/handlers/rds/servingcert.go +++ b/spinifex/handlers/rds/servingcert.go @@ -20,12 +20,12 @@ const ( servingCertLifetime = 90 * 24 * time.Hour ) -// Injected so tests mint from a throwaway CA, and so the file-backed -// implementation stays the only thing needing read access to ca.key. +// CALoader returns the cluster CA keypair. Injected so tests mint from a throwaway CA, and so the +// file-backed implementation stays the only thing needing read access to ca.key. type CALoader func() (*x509.Certificate, *rsa.PrivateKey, error) -// DNSName is empty on deployments without northstar, where the endpoint is the -// bare ENI IP — which is why the IP SAN is the required one. +// ServingCertRequest names the SANs of a DB serving cert. DNSName is empty on deployments without +// northstar, where the endpoint is the bare ENI IP — which is why the IP SAN is the required one. type ServingCertRequest struct { DBInstanceIdentifier string PrivateIP string @@ -35,14 +35,15 @@ type ServingCertRequest struct { KeyBits int } -// PEM-encoded, in memory only. +// ServingCert is a minted serving cert and its key, PEM-encoded, in memory only. type ServingCert struct { CertificatePEM string PrivateKeyPEM string } -// Unlike admin.GenerateSignedCert this writes no files and adds no SANs of its -// own, which would name the host rather than the database. +// MintServingCert signs a serving cert for a DB instance with the given CA. Unlike +// admin.GenerateSignedCert it writes no files and adds no SANs of its own, which would name the host +// rather than the database. func MintServingCert(caCert *x509.Certificate, caKey *rsa.PrivateKey, req ServingCertRequest) (*ServingCert, error) { if caCert == nil || caKey == nil { return nil, errors.New("rds serving cert: nil CA keypair") @@ -100,7 +101,8 @@ func MintServingCert(caCert *x509.Certificate, caKey *rsa.PrivateKey, req Servin }, nil } -// Used to hand the agent the cluster CA it should trust alongside its own cert. +// EncodeCertPEM PEM-encodes cert, or returns "" for nil. Used to hand the agent the cluster CA it +// should trust alongside its own cert. func EncodeCertPEM(cert *x509.Certificate) string { if cert == nil { return "" diff --git a/spinifex/handlers/rds/sizing.go b/spinifex/handlers/rds/sizing.go index 7641184f4..c73f3041b 100644 --- a/spinifex/handlers/rds/sizing.go +++ b/spinifex/handlers/rds/sizing.go @@ -20,8 +20,8 @@ var dbInstanceClasses = map[string]string{ "db.m5.xlarge": "m5.xlarge", } -// An unknown class is rejected here at validation rather than surfacing as a -// launch failure after the volume and ENI exist. +// InstanceTypeForClass maps a db.* instance class to the EC2 instance type backing it. An unknown class +// is rejected here at validation rather than surfacing as a launch failure after the volume and ENI exist. func InstanceTypeForClass(class string) (string, error) { instanceType, ok := dbInstanceClasses[class] if !ok { @@ -33,13 +33,14 @@ func InstanceTypeForClass(class string) (string, error) { return instanceType, nil } +// SupportedInstanceClasses returns every db.* instance class this platform offers, sorted alphabetically. func SupportedInstanceClasses() []string { return slices.Sorted(maps.Keys(dbInstanceClasses)) } -// The supported class with the least memory. Deliberately computed from the -// footprints rather than taken as the first name SupportedInstanceClasses -// reports: that list is sorted alphabetically, so its head is db.m5.large. +// SmallestInstanceClass returns the supported class with the least memory. Deliberately computed from +// the footprints rather than taken as the first name SupportedInstanceClasses reports: that list is +// sorted alphabetically, so its head is db.m5.large. func SmallestInstanceClass() string { smallest, least := "", int64(0) for _, class := range SupportedInstanceClasses() { diff --git a/spinifex/handlers/rds/snapshot.go b/spinifex/handlers/rds/snapshot.go index 95edd3e2a..02eda5ba9 100644 --- a/spinifex/handlers/rds/snapshot.go +++ b/spinifex/handlers/rds/snapshot.go @@ -42,10 +42,9 @@ const ( rdsSnapshotAccountTagKey = "spinifex:rds-db-snapshot-account" ) -// Takes a customer-requested snapshot of the instance's data volume. The engine -// is held at a checkpoint for the length of it, so the captured datadir is a -// checkpoint rather than a mid-write state — and if it cannot be, the snapshot -// is still taken and reported as crash consistent. +// CreateDBSnapshot takes a customer-requested snapshot of the instance's data volume. The engine is +// held at a checkpoint for the length of it, so the captured datadir is a checkpoint rather than a +// mid-write state — and if it cannot be, the snapshot is still taken and reported as crash consistent. func (s *Service) CreateDBSnapshot(ctx context.Context, input *rds.CreateDBSnapshotInput, accountID string) (*rds.CreateDBSnapshotOutput, error) { req, err := validateCreateSnapshotRequest(input) if err != nil { @@ -217,10 +216,9 @@ func (s *Service) releaseQuiesce(ctx context.Context, accountID, dbInstanceIdent } } -// The customer's view of one account's snapshots, filtered the three ways AWS -// scopes them. A named snapshot that does not exist is an error rather than an -// empty list, matching AWS: a client polling a create would otherwise read -// "gone" for "not ready". +// DescribeDBSnapshots returns the customer's view of one account's snapshots, filtered the three ways +// AWS scopes them. A named snapshot that does not exist is an error rather than an empty list, +// matching AWS: a client polling a create would otherwise read "gone" for "not ready". func (s *Service) DescribeDBSnapshots(ctx context.Context, input *rds.DescribeDBSnapshotsInput, accountID string) (*rds.DescribeDBSnapshotsOutput, error) { snapshotType, filters, err := validateDescribeSnapshotsRequest(input) if err != nil { @@ -292,10 +290,9 @@ func snapshotMatches(rec *DBSnapshotRecord, dbInstanceIdentifier, snapshotType s }) } -// Removes the snapshot and, when it was the last thing holding a data volume -// its DB instance already released, that volume too. A snapshot a restored -// instance still reads from is refused with the instance named, so the customer -// knows what to remove first. +// DeleteDBSnapshot removes the snapshot and, when it was the last thing holding a data volume its DB +// instance already released, that volume too. A snapshot a restored instance still reads from is +// refused with the instance named, so the customer knows what to remove first. func (s *Service) DeleteDBSnapshot(ctx context.Context, input *rds.DeleteDBSnapshotInput, accountID string) (*rds.DeleteDBSnapshotOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") diff --git a/spinifex/handlers/rds/status.go b/spinifex/handlers/rds/status.go index 9c6b3a9fb..4750b3fb2 100644 --- a/spinifex/handlers/rds/status.go +++ b/spinifex/handlers/rds/status.go @@ -2,8 +2,8 @@ package handlers_rds import "slices" -// The only instance state the API exposes, derived from the VM, data volume and -// agent heartbeat, so a customer never depends on a DB instance being a VM. +// Status is the only instance state the API exposes, derived from the VM, data volume and agent +// heartbeat, so a customer never depends on a DB instance being a VM. type Status string const ( @@ -49,15 +49,15 @@ var transitions = map[Status][]Status{ StatusDeleted: nil, } -// Anything read back from KV that fails this check was written by a newer or -// corrupted control plane, not a state to act on. +// Valid reports whether s is a known status. Anything read back from KV that fails this check was +// written by a newer or corrupted control plane, not a state to act on. func (s Status) Valid() bool { _, ok := transitions[s] return ok } -// A no-op is legal for any valid status, so a repeated observation of the same -// state is not treated as an illegal transition. +// CanTransition reports whether moving from one status to another is legal. A no-op is legal for any +// valid status, so a repeated observation of the same state is not treated as an illegal transition. func CanTransition(from, to Status) bool { if !from.Valid() || !to.Valid() { return false diff --git a/spinifex/handlers/rds/store.go b/spinifex/handlers/rds/store.go index 5475cdf98..bc30bdb38 100644 --- a/spinifex/handlers/rds/store.go +++ b/spinifex/handlers/rds/store.go @@ -54,31 +54,35 @@ const ( // Tags live inline on each resource's own record rather than in a separate key // space, so there is no tags/ prefix here. +// DBInstancesPrefix returns the per-account key prefix under which each DB instance record lives. func DBInstancesPrefix() string { return "db-instances/" } +// DBInstanceKey returns the per-account KV key of a DB instance's record. func DBInstanceKey(dbInstanceIdentifier string) string { return DBInstancesPrefix() + dbInstanceIdentifier } -// The encrypted bootstrap payload, kept out of the instance record so it has its -// own CAS domain and so a daemon that predates it cannot drop it through a +// BootstrapPayloadsPrefix returns the prefix for encrypted bootstrap payloads, kept out of the instance +// record so they have their own CAS domain and a daemon that predates them cannot drop them through a // read-modify-marshal of the record. func BootstrapPayloadsPrefix() string { return "bootstrap-payloads/" } +// BootstrapPayloadKey returns the per-account KV key of a DB instance's encrypted bootstrap payload. func BootstrapPayloadKey(dbInstanceIdentifier string) string { return BootstrapPayloadsPrefix() + dbInstanceIdentifier } -// Manual and automated snapshots share this space, distinguished by the -// snapshot type on the record. +// DBSnapshotsPrefix returns the prefix shared by manual and automated snapshots, which are +// distinguished by the snapshot type on the record. func DBSnapshotsPrefix() string { return "db-snapshots/" } +// DBSnapshotKey returns a snapshot's KV key, escaping the colon in an automated backup's rds: identifier. func DBSnapshotKey(dbSnapshotIdentifier string) string { return DBSnapshotsPrefix() + kvKeySegment(dbSnapshotIdentifier) } @@ -97,89 +101,96 @@ func kvKeySegmentIdentifier(segment string) string { return strings.ReplaceAll(segment, kvKeyColon, ":") } +// DBSubnetGroupsPrefix returns the per-account key prefix under which each DB subnet group record lives. func DBSubnetGroupsPrefix() string { return "db-subnet-groups/" } +// DBSubnetGroupKey returns the per-account KV key of a DB subnet group's record. func DBSubnetGroupKey(name string) string { return DBSubnetGroupsPrefix() + name } -// A group's own record is at .../meta and its values hang off .../params/, so -// listing groups walks the meta keys. +// DBParameterGroupsPrefix returns the parameter group prefix. A group's own record is at .../meta and +// its values hang off .../params/, so listing groups walks the meta keys. func DBParameterGroupsPrefix() string { return "db-parameter-groups/" } +// DBParameterGroupMetaKey returns the KV key of a DB parameter group's own record. func DBParameterGroupMetaKey(name string) string { return fmt.Sprintf("%s%s/meta", DBParameterGroupsPrefix(), name) } -// One key per value rather than one blob, so a ModifyDBParameterGroup touching -// a single parameter cannot clobber a concurrent change to another. +// DBParameterGroupParamsPrefix returns the prefix holding one key per parameter value rather than one +// blob, so a ModifyDBParameterGroup touching a single parameter cannot clobber a concurrent change to another. func DBParameterGroupParamsPrefix(name string) string { return fmt.Sprintf("%s%s/params/", DBParameterGroupsPrefix(), name) } +// DBParameterGroupParamKey returns the KV key of one parameter override in a DB parameter group. func DBParameterGroupParamKey(name, param string) string { return DBParameterGroupParamsPrefix(name) + param } -// Kept separate from db-snapshots/ so the retention sweep enumerates only -// automated backups, ordered lexically by their timestamp suffix. +// AutomatedBackupsRootPrefix returns the automated-backup index prefix, kept separate from db-snapshots/ +// so the retention sweep enumerates only automated backups, ordered lexically by their timestamp suffix. func AutomatedBackupsRootPrefix() string { return "backups/" } +// AutomatedBackupsPrefix returns the prefix holding one DB instance's automated-backup index entries. func AutomatedBackupsPrefix(dbInstanceIdentifier string) string { return fmt.Sprintf("%s%s/automated/", AutomatedBackupsRootPrefix(), dbInstanceIdentifier) } +// AutomatedBackupKey returns the index key of the automated backup a DB instance took at timestamp ts. func AutomatedBackupKey(dbInstanceIdentifier, ts string) string { return AutomatedBackupsPrefix(dbInstanceIdentifier) + ts } -// Data volumes held alive by surviving snapshots: a COW snapshot references its -// source volume's chunks, so deleting a DB instance cannot delete the volume. +// RetainedVolumesPrefix returns the prefix for data volumes held alive by surviving snapshots: a COW +// snapshot references its source volume's chunks, so deleting a DB instance cannot delete the volume. func RetainedVolumesPrefix() string { return "retained-volumes/" } +// RetainedVolumeKey returns the KV key recording that volumeID is retained for its snapshots. func RetainedVolumeKey(volumeID string) string { return RetainedVolumesPrefix() + volumeID } -// One bounded ring per resource rather than a key per event: DescribeEvents -// always reads a whole resource's history, and a key per event would make the -// 14-day trim a listing plus a delete per expired entry. -// -// The ring is deliberately outside the resource's own record, so a deleted DB -// instance's events survive it for the rest of the retention window. +// EventsPrefix returns the events prefix: one bounded ring per resource, since DescribeEvents reads a +// whole history and the 14-day trim would otherwise cost a delete per entry. The ring sits outside the +// resource's record, so a deleted DB instance's events outlive it for the retention window. func EventsPrefix() string { return "events/" } -// The source identifier is escaped the same way a snapshot key is: an automated -// backup's events hang off an identifier carrying a colon. +// EventRingKey returns the key of a resource's event ring. The source identifier is escaped the same +// way a snapshot key is: an automated backup's events hang off an identifier carrying a colon. func EventRingKey(sourceType, sourceIdentifier string) string { return fmt.Sprintf("%s%s/%s", EventsPrefix(), sourceType, kvKeySegment(sourceIdentifier)) } -// Entries are rewritten on every VM replace (each mints a new instance ID) and -// removed at teardown. +// InstanceIndexPrefix returns the system-bucket prefix of the instanceID to DB instance index. Entries +// are rewritten on every VM replace (each mints a new instance ID) and removed at teardown. func InstanceIndexPrefix() string { return "instance-index/" } +// InstanceIndexKey returns the system-bucket key mapping an EC2 instance ID back to its DB instance. func InstanceIndexKey(instanceID string) string { return InstanceIndexPrefix() + instanceID } +// Store holds the NATS connection the RDS KV buckets are opened from; it caches no bucket handles. type Store struct { nc *nats.Conn } -// Does not touch JetStream — buckets are created lazily by the factories below. +// NewStore returns a Store over nc, or an error when nc is nil. It does not touch JetStream; buckets +// are created lazily by the factories below. func NewStore(nc *nats.Conn) (*Store, error) { if nc == nil { return nil, errors.New("rds store: nats connection is nil") @@ -187,6 +198,7 @@ func NewStore(nc *nats.Conn) (*Store, error) { return &Store{nc: nc}, nil } +// AccountBucketName returns the name of an account's RDS KV bucket, "rds-account-{accountID}". func AccountBucketName(accountID string) string { return KVBucketRDSAccountPrefix + accountID } @@ -231,7 +243,8 @@ func SystemBucketConfig() kvstore.Config { } } -// Creates the bucket on first use; subsequent calls return the existing handle. +// GetOrCreateAccountBucket opens an account's RDS bucket, creating it and running its migrations on +// first use; subsequent calls return the existing handle. func GetOrCreateAccountBucket(ctx context.Context, js jetstream.JetStream, accountID string) (jetstream.KeyValue, error) { kv, err := kvstore.NewBucket(js, AccountBucketConfig(accountID)).KV(ctx) if err != nil { @@ -240,8 +253,8 @@ func GetOrCreateAccountBucket(ctx context.Context, js jetstream.JetStream, accou return kv, nil } -// Created lazily alongside the first DB instance rather than at daemon boot, so -// a cluster with no RDS usage carries no bucket. +// GetOrCreateSystemBucket opens the rds-system bucket, created lazily alongside the first DB instance +// rather than at daemon boot, so a cluster with no RDS usage carries no bucket. func GetOrCreateSystemBucket(ctx context.Context, js jetstream.JetStream) (jetstream.KeyValue, error) { kv, err := kvstore.NewBucket(js, SystemBucketConfig()).KV(ctx) if err != nil { @@ -260,7 +273,7 @@ func InitLeaderBucket(ctx context.Context, js jetstream.JetStream) (jetstream.Ke }) } -// Every RDS per-account bucket in the cluster. The reconciler and the DNS +// AccountBucketNames lists every RDS per-account bucket in the cluster. The reconciler and the DNS // desired-set both need a cross-tenant view, which only this provides. func AccountBucketNames(ctx context.Context, js jetstream.JetStream) ([]string, error) { all, err := kvutil.BucketNames(ctx, js) @@ -303,20 +316,20 @@ func AccountWatchBuckets(ctx context.Context, js jetstream.JetStream) ([]*kvstor return AccountBuckets(ctx, js) } -// The account a per-account bucket belongs to, for callers that enumerated -// buckets rather than starting from an account. +// AccountIDFromBucketName returns the account a per-account bucket belongs to, for callers that +// enumerated buckets rather than starting from an account. func AccountIDFromBucketName(bucket string) string { return strings.TrimPrefix(bucket, KVBucketRDSAccountPrefix) } -// The DB instance identifiers held in one account bucket. An empty bucket +// ListDBInstanceIDs returns the DB instance identifiers held in one account bucket. An empty bucket // yields no names rather than an error. func ListDBInstanceIDs(ctx context.Context, kv *kvstore.Bucket) ([]string, error) { return listNames(ctx, kv, DBInstancesPrefix()) } -// Manual and automated snapshots alike: the type is on the record, so a listing -// filtered by it still has to read every one. +// ListDBSnapshotIDs returns manual and automated snapshot identifiers alike, unescaped: the type is on +// the record, so a listing filtered by it still has to read every one. func ListDBSnapshotIDs(ctx context.Context, kv *kvstore.Bucket) ([]string, error) { names, err := listNames(ctx, kv, DBSnapshotsPrefix()) if err != nil { @@ -328,7 +341,7 @@ func ListDBSnapshotIDs(ctx context.Context, kv *kvstore.Bucket) ([]string, error return names, nil } -// Walks the .../meta keys, which is what makes a group's own record findable +// ListDBParameterGroupNames walks the .../meta keys, which is what makes a group's own record findable // among the per-parameter keys hanging off the same prefix. func ListDBParameterGroupNames(ctx context.Context, kv *kvstore.Bucket) ([]string, error) { keys, err := bucketKeys(ctx, kv) @@ -351,7 +364,7 @@ func ListDBParameterGroupNames(ctx context.Context, kv *kvstore.Bucket) ([]strin return names, nil } -// The stored overrides of one parameter group, keyed by parameter name. +// ListDBParameterOverrides returns the stored overrides of one parameter group, keyed by parameter name. func ListDBParameterOverrides(ctx context.Context, kv *kvstore.Bucket, group string) (map[string]DBParameterRecord, error) { prefix := DBParameterGroupParamsPrefix(group) names, err := listNames(ctx, kv, prefix) @@ -374,9 +387,9 @@ func ListDBParameterOverrides(ctx context.Context, kv *kvstore.Bucket, group str return out, nil } -// Every account's automated-backup index, grouped by DB instance, from one -// bucket listing: the retention sweep needs every instance's set, and a Keys call -// per instance would cost one listing each. +// ListAutomatedBackups returns the automated-backup timestamps grouped by DB instance from one bucket +// listing: the retention sweep needs every instance's set, and a Keys call per instance would cost one +// listing each. func ListAutomatedBackups(ctx context.Context, kv *kvstore.Bucket) (map[string][]string, error) { keys, err := bucketKeys(ctx, kv) if err != nil { diff --git a/spinifex/handlers/rds/subjects.go b/spinifex/handlers/rds/subjects.go index 45696f510..5b4b349b5 100644 --- a/spinifex/handlers/rds/subjects.go +++ b/spinifex/handlers/rds/subjects.go @@ -49,6 +49,7 @@ const ( // none of them drives a VM and all take the default budget. SubjectCreateDBSubnetGroup = "rds.CreateDBSubnetGroup" SubjectDescribeDBSubnetGroups = "rds.DescribeDBSubnetGroups" + SubjectModifyDBSubnetGroup = "rds.ModifyDBSubnetGroup" SubjectDeleteDBSubnetGroup = "rds.DeleteDBSubnetGroup" SubjectCreateDBParameterGroup = "rds.CreateDBParameterGroup" @@ -68,23 +69,27 @@ const ( CommandQueueGroup = "spinifex-rds-agents" ) +// BusRegisterSubject returns the agent-bus subject a DB instance's agent registers on, +// rds.bus.{accountID}.{dbInstanceIdentifier}.register. func BusRegisterSubject(accountID, dbInstanceIdentifier string) string { return fmt.Sprintf("%s%s.%s.register", busPrefix, accountID, dbInstanceIdentifier) } -// The reserved .heartbeat subject stays unused: the beat is folded into the -// state change so a healthy instance costs one round trip per tick. +// BusHealthSubject returns the subject an agent publishes its state changes on. The reserved +// .heartbeat subject stays unused: the beat is folded into the state change so a healthy instance +// costs one round trip per tick. func BusHealthSubject(accountID, dbInstanceIdentifier string) string { return fmt.Sprintf("%s%s.%s.health", busPrefix, accountID, dbInstanceIdentifier) } -// A live long poll rather than a durable queue, so a set-password that cannot -// reach the agent fails loudly instead of deferring cleartext. +// BusCommandSubject returns the subject an agent long-polls for commands. A live long poll rather than +// a durable queue, so a set-password that cannot reach the agent fails loudly instead of deferring cleartext. func BusCommandSubject(accountID, dbInstanceIdentifier string) string { return fmt.Sprintf("%s%s.%s.command", busPrefix, accountID, dbInstanceIdentifier) } -// Correlated by the issuer on CommandID. +// BusCommandReplySubject returns the subject an agent's command results are republished on, +// correlated by the issuer on CommandID. func BusCommandReplySubject(accountID, dbInstanceIdentifier string) string { return fmt.Sprintf("%s%s.%s.command-reply", busPrefix, accountID, dbInstanceIdentifier) } diff --git a/spinifex/handlers/rds/subnetgroup.go b/spinifex/handlers/rds/subnetgroup.go index d7e599429..100444980 100644 --- a/spinifex/handlers/rds/subnetgroup.go +++ b/spinifex/handlers/rds/subnetgroup.go @@ -30,11 +30,10 @@ const ( // written. const subnetGroupStatusComplete = "Complete" -// AWS requires a DB subnet group to span at least two AZs. This platform is -// single-AZ — every subnet reports the one zone — and multi-AZ is a V2 -// milestone, so the AZ-count rule is not enforced: rejecting on it would fail -// every stock Terraform module for no safety benefit. The constraint that does -// matter is enforced below, because a group spanning two VPCs cannot host an +// CreateDBSubnetGroup implements the RDS CreateDBSubnetGroup action. AWS requires a group to span at +// least two AZs, but this platform is single-AZ and multi-AZ is a V2 milestone, so that rule is not +// enforced: rejecting on it would fail every stock Terraform module for no safety benefit. The +// constraint that does matter is enforced below, because a group spanning two VPCs cannot host an // instance at all. func (s *Service) CreateDBSubnetGroup(ctx context.Context, input *rds.CreateDBSubnetGroupInput, accountID string) (*rds.CreateDBSubnetGroupOutput, error) { if input == nil { @@ -88,9 +87,8 @@ func (s *Service) CreateDBSubnetGroup(ctx context.Context, input *rds.CreateDBSu return &rds.CreateDBSubnetGroupOutput{DBSubnetGroup: s.projectSubnetGroup(&rec)}, nil } -// A named group that does not exist is an error, matching AWS; an unnamed -// request lists the account's groups. Filters is not read: AWS ignores it here, -// even an unknown or malformed entry. +// DescribeDBSubnetGroups errors on a named group that does not exist, matching AWS; an unnamed request +// lists the account's groups. Filters is not read: AWS ignores it here, even an unknown or malformed entry. func (s *Service) DescribeDBSubnetGroups(ctx context.Context, input *rds.DescribeDBSubnetGroupsInput, accountID string) (*rds.DescribeDBSubnetGroupsOutput, error) { if input == nil { input = &rds.DescribeDBSubnetGroupsInput{} @@ -132,9 +130,70 @@ func (s *Service) DescribeDBSubnetGroups(ctx context.Context, input *rds.Describ return &rds.DescribeDBSubnetGroupsOutput{DBSubnetGroups: groups, Marker: next}, nil } -// Refused while any instance still names the group, including one that is only -// deleting: releasing it early would let a teardown lose the record of where its -// ENI was placed, and would make destroy ordering ambiguous. +// ModifyDBSubnetGroup replaces the group's subnet set with SubnetIds, which must stay in the group's +// VPC, as AWS requires. An omitted or empty description keeps the stored one. A lost CAS replays +// against the fresh record, so a concurrent write is not undone. +func (s *Service) ModifyDBSubnetGroup(ctx context.Context, input *rds.ModifyDBSubnetGroupInput, accountID string) (*rds.ModifyDBSubnetGroupOutput, error) { + if input == nil { + return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") + } + name := aws.StringValue(input.DBSubnetGroupName) + if name == "" { + return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "DBSubnetGroupName is required") + } + description := aws.StringValue(input.DBSubnetGroupDescription) + if description != "" { + if err := validateDBGroupDescription("DBSubnetGroupDescription", description); err != nil { + return nil, err + } + } + + kv, err := s.bucket(ctx, accountID) + if err != nil { + return nil, err + } + // Read first so a missing group is reported as such rather than as whatever + // the subnet resolution would have objected to. + if _, _, err := getDBSubnetGroup(ctx, kv, name); err != nil { + return nil, err + } + subnets, vpcID, err := s.resolveGroupSubnets(ctx, accountID, aws.StringValueSlice(input.SubnetIds)) + if err != nil { + return nil, err + } + + key := DBSubnetGroupKey(name) + for range tagWriteAttempts { + rec, rev, err := getDBSubnetGroup(ctx, kv, name) + if err != nil { + return nil, err + } + if vpcID != rec.VpcID { + return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, + "The new Subnets are not in the same Vpc as the existing subnet group") + } + if description != "" { + rec.Description = description + } + rec.Subnets = subnets + rec.UpdatedAt = time.Now().UTC() + + err = updateJSON(ctx, kv, key, rev, rec) + if err == nil { + slog.InfoContext(ctx, "rds: DB subnet group modified", + "dbSubnetGroup", name, "accountId", accountID, "vpcId", vpcID, "subnets", len(subnets)) + return &rds.ModifyDBSubnetGroupOutput{DBSubnetGroup: s.projectSubnetGroup(rec)}, nil + } + if !errors.Is(err, kvstore.ErrConflict) { + return nil, err + } + } + return nil, fmt.Errorf("rds: update of %s contended after %d attempts", key, tagWriteAttempts) +} + +// DeleteDBSubnetGroup is refused while any instance still names the group, including one that is only +// deleting: releasing it early would let a teardown lose the record of where its ENI was placed, and +// would make destroy ordering ambiguous. func (s *Service) DeleteDBSubnetGroup(ctx context.Context, input *rds.DeleteDBSubnetGroupInput, accountID string) (*rds.DeleteDBSubnetGroupOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") diff --git a/spinifex/handlers/rds/subnetgroup_test.go b/spinifex/handlers/rds/subnetgroup_test.go index aad81165d..17ba40e0f 100644 --- a/spinifex/handlers/rds/subnetgroup_test.go +++ b/spinifex/handlers/rds/subnetgroup_test.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "encoding/xml" + "strings" "testing" "github.com/aws/aws-sdk-go/aws" @@ -336,3 +337,169 @@ func TestCreateDBInstance_RejectsAnUnknownSubnetGroup(t *testing.T) { assert.False(t, h.recordExists(t, testDBInstanceID), "a rejected create must reserve nothing") } + +func modifySubnetGroupInput(name string, subnetIDs ...string) *rds.ModifyDBSubnetGroupInput { + return &rds.ModifyDBSubnetGroupInput{ + DBSubnetGroupName: aws.String(name), + SubnetIds: aws.StringSlice(subnetIDs), + } +} + +// SubnetIds is the whole new set, as Terraform sends it, so a subnet left out +// of the request leaves the group. +func TestModifyDBSubnetGroup_ReplacesTheSubnetSetAndDescription(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) + _, err := h.svc.CreateDBSubnetGroup(t.Context(), subnetGroupInput(testSubnetGroup, "subnet-alpha"), testAccountID) + require.NoError(t, err) + + input := modifySubnetGroupInput(testSubnetGroup, "subnet-zebra") + input.DBSubnetGroupDescription = aws.String("Moved subnets") + out, err := h.svc.ModifyDBSubnetGroup(t.Context(), input, testAccountID) + require.NoError(t, err) + + group := out.DBSubnetGroup + require.NotNil(t, group) + assert.Equal(t, "Moved subnets", aws.StringValue(group.DBSubnetGroupDescription)) + assert.Equal(t, FormatARN(ResourceKindDBSubnetGroup, testRegion, testAccountID, testSubnetGroup), + aws.StringValue(group.DBSubnetGroupArn)) + require.Len(t, group.Subnets, 1) + assert.Equal(t, "subnet-zebra", aws.StringValue(group.Subnets[0].SubnetIdentifier)) + + described, err := h.svc.DescribeDBSubnetGroups(t.Context(), + &rds.DescribeDBSubnetGroupsInput{DBSubnetGroupName: aws.String(testSubnetGroup)}, testAccountID) + require.NoError(t, err) + assert.Equal(t, group, described.DBSubnetGroups[0], "the response and a later describe must agree") +} + +// Only the subnets and description are the request's to change: tags added +// through the tagging API and the creation time survive the write. +func TestModifyDBSubnetGroup_KeepsTheOmittedDescriptionTagsAndCreatedAt(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) + create := subnetGroupInput(testSubnetGroup, "subnet-alpha") + create.Tags = []*rds.Tag{{Key: aws.String("env"), Value: aws.String("prod")}} + _, err := h.svc.CreateDBSubnetGroup(t.Context(), create, testAccountID) + require.NoError(t, err) + + kv, err := h.svc.bucket(t.Context(), testAccountID) + require.NoError(t, err) + before, _, err := getDBSubnetGroup(t.Context(), kv, testSubnetGroup) + require.NoError(t, err) + + _, err = h.svc.ModifyDBSubnetGroup(t.Context(), + modifySubnetGroupInput(testSubnetGroup, "subnet-alpha", "subnet-zebra"), testAccountID) + require.NoError(t, err) + + after, _, err := getDBSubnetGroup(t.Context(), kv, testSubnetGroup) + require.NoError(t, err) + assert.Equal(t, "Database subnets", after.Description) + assert.Equal(t, map[string]string{"env": "prod"}, after.Tags) + assert.True(t, before.CreatedAt.Equal(after.CreatedAt)) + assert.False(t, after.UpdatedAt.Before(before.UpdatedAt)) + require.Len(t, after.Subnets, 2) +} + +// AWS refuses a set wholly in another VPC rather than moving the group, even +// when nothing uses it. +func TestModifyDBSubnetGroup_RefusesAMoveToAnotherVPC(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) + h.network.subnets = append(h.network.subnets, &ec2.Subnet{ + SubnetId: aws.String("subnet-other"), + VpcId: aws.String("vpc-other01"), + AvailabilityZone: aws.String(testZone), + }) + _, err := h.svc.CreateDBSubnetGroup(t.Context(), subnetGroupInput(testSubnetGroup, "subnet-alpha"), testAccountID) + require.NoError(t, err) + + _, err = h.svc.ModifyDBSubnetGroup(t.Context(), + modifySubnetGroupInput(testSubnetGroup, "subnet-other"), testAccountID) + require.Error(t, err) + assert.Equal(t, awserrors.ErrorInvalidParameterValue, awserrors.ValidErrorCodeFromError(err), + "the code has to survive resolution or the client sees a 500") + + kv, err := h.svc.bucket(t.Context(), testAccountID) + require.NoError(t, err) + rec, _, err := getDBSubnetGroup(t.Context(), kv, testSubnetGroup) + require.NoError(t, err) + assert.Equal(t, testDefaultVPC, rec.VpcID) +} + +// AWS reads an empty description on modify as absent, unlike create, where it +// is refused. +func TestModifyDBSubnetGroup_KeepsTheDescriptionWhenEmpty(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) + _, err := h.svc.CreateDBSubnetGroup(t.Context(), subnetGroupInput(testSubnetGroup, "subnet-alpha"), testAccountID) + require.NoError(t, err) + + input := modifySubnetGroupInput(testSubnetGroup, "subnet-alpha") + input.DBSubnetGroupDescription = aws.String("") + out, err := h.svc.ModifyDBSubnetGroup(t.Context(), input, testAccountID) + require.NoError(t, err) + assert.Equal(t, "Database subnets", aws.StringValue(out.DBSubnetGroup.DBSubnetGroupDescription)) +} + +// A refused modify is checked in full before the write, so the stored group is +// exactly as it was. +func TestModifyDBSubnetGroup_RejectsWhatCreateRejects(t *testing.T) { + cases := []struct { + name string + mutate func(*rds.ModifyDBSubnetGroupInput) + want string + }{ + {"NoName", func(in *rds.ModifyDBSubnetGroupInput) { in.DBSubnetGroupName = nil }, awserrors.ErrorInvalidParameterValue}, + {"LongDescription", func(in *rds.ModifyDBSubnetGroupInput) { + in.DBSubnetGroupDescription = aws.String(strings.Repeat("d", maxDBGroupDescriptionLen+1)) + }, awserrors.ErrorInvalidParameterValue}, + {"NoSubnets", func(in *rds.ModifyDBSubnetGroupInput) { in.SubnetIds = nil }, awserrors.ErrorInvalidParameterValue}, + {"MissingSubnet", func(in *rds.ModifyDBSubnetGroupInput) { + in.SubnetIds = aws.StringSlice([]string{"subnet-alpha", "subnet-nowhere"}) + }, awserrors.ErrorDBSubnetInvalid}, + {"CrossAccountSubnet", func(in *rds.ModifyDBSubnetGroupInput) { + in.SubnetIds = aws.StringSlice([]string{"subnet-foreign"}) + }, awserrors.ErrorDBSubnetInvalid}, + {"CrossVPCSet", func(in *rds.ModifyDBSubnetGroupInput) { + in.SubnetIds = aws.StringSlice([]string{"subnet-alpha", "subnet-other"}) + }, awserrors.ErrorDBSubnetInvalid}, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + h := newCreateHarness(t, testBaseDomain) + h.network.subnets = append(h.network.subnets, &ec2.Subnet{ + SubnetId: aws.String("subnet-other"), + VpcId: aws.String("vpc-other01"), + AvailabilityZone: aws.String(testZone), + }) + _, err := h.svc.CreateDBSubnetGroup(t.Context(), subnetGroupInput(testSubnetGroup, "subnet-alpha"), testAccountID) + require.NoError(t, err) + + input := modifySubnetGroupInput(testSubnetGroup, "subnet-zebra") + tc.mutate(input) + _, err = h.svc.ModifyDBSubnetGroup(t.Context(), input, testAccountID) + require.Error(t, err) + assert.Equal(t, tc.want, awserrors.ValidErrorCodeFromError(err), + "the code has to survive resolution or the client sees a 500") + + kv, err := h.svc.bucket(t.Context(), testAccountID) + require.NoError(t, err) + rec, _, err := getDBSubnetGroup(t.Context(), kv, testSubnetGroup) + require.NoError(t, err) + require.Len(t, rec.Subnets, 1) + assert.Equal(t, "subnet-alpha", rec.Subnets[0].SubnetID) + assert.Equal(t, "Database subnets", rec.Description) + }) + } +} + +func TestModifyDBSubnetGroup_RejectsAnUnknownName(t *testing.T) { + t.Parallel() + h := newCreateHarness(t, testBaseDomain) + + _, err := h.svc.ModifyDBSubnetGroup(t.Context(), modifySubnetGroupInput("absent", "subnet-alpha"), testAccountID) + require.Error(t, err) + assert.Equal(t, awserrors.ErrorDBSubnetGroupNotFound, awserrors.ValidErrorCodeFromError(err), + "the code has to survive resolution or the client sees a 500") +} diff --git a/spinifex/handlers/rds/tags.go b/spinifex/handlers/rds/tags.go index dbfddeb49..bc4b3d287 100644 --- a/spinifex/handlers/rds/tags.go +++ b/spinifex/handlers/rds/tags.go @@ -28,9 +28,9 @@ const ( // number of writers that can contend for one resource, not a timing guess. const tagWriteAttempts = 16 -// Implemented by every record whose ARN kind is registered below. Keeping the -// tag map behind an interface is what lets one mutate path serve every -// resource type without a type switch per action. +// TaggedRecord is implemented by every record whose ARN kind is registered below. Keeping the tag map +// behind an interface is what lets one mutate path serve every resource type without a type switch +// per action. type TaggedRecord interface { GetTags() map[string]string SetTags(tags map[string]string) @@ -94,8 +94,8 @@ func (s *Service) ListTagsForResource(ctx context.Context, input *rds.ListTagsFo return &rds.ListTagsForResourceOutput{TagList: tagsToAWS(rec.GetTags())}, nil } -// Adding a key that is already present overwrites it, so a repeated Terraform -// apply converges instead of failing on the second run. +// AddTagsToResource implements the RDS action of the same name. Adding a key that is already present +// overwrites it, so a repeated Terraform apply converges instead of failing on the second run. func (s *Service) AddTagsToResource(ctx context.Context, input *rds.AddTagsToResourceInput, accountID string) (*rds.AddTagsToResourceOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") @@ -131,8 +131,8 @@ func (s *Service) AddTagsToResource(ctx context.Context, input *rds.AddTagsToRes return &rds.AddTagsToResourceOutput{}, nil } -// Removing a key that is not present is a success, matching AWS: a retried -// destroy must not fail on the tags it already removed. +// RemoveTagsFromResource implements the RDS action of the same name. Removing a key that is not present +// is a success, matching AWS: a retried destroy must not fail on the tags it already removed. func (s *Service) RemoveTagsFromResource(ctx context.Context, input *rds.RemoveTagsFromResourceInput, accountID string) (*rds.RemoveTagsFromResourceOutput, error) { if input == nil { return nil, awserrors.Errorf(awserrors.ErrorInvalidParameterValue, "empty request") diff --git a/spinifex/handlers/rds/vpc.go b/spinifex/handlers/rds/vpc.go index c215fef85..bb29d91cc 100644 --- a/spinifex/handlers/rds/vpc.go +++ b/spinifex/handlers/rds/vpc.go @@ -31,20 +31,20 @@ const ( rdsSystemVPCRolePrefix = "rds" ) -// Seeds both the owner tag and the deterministic address hash, so it must stay -// stable across releases. +// SystemVPCName returns the region's RDS system VPC name. It seeds both the owner tag and the +// deterministic address hash, so it must stay stable across releases. func SystemVPCName(region string) string { return "rds-system-" + region } -// One group per region, shared by every DB VM's system ENI. The name is the -// lookup key, so it must stay stable across releases too. +// SystemSecurityGroupName returns the name of the region's one RDS system security group, shared by +// every DB VM's system ENI. The name is the lookup key, so it must stay stable across releases too. func SystemSecurityGroupName(region string) string { return "rds-system-" + region } -// cfg supplies the operator-overridable address space and subnet count; a nil -// or unset cfg falls back to the defaults. +// SystemVPCSpec builds the region's RDS system VPC spec. cfg supplies the operator-overridable address +// space and subnet count; a nil or unset cfg falls back to the defaults. func SystemVPCSpec(cfg *config.RDSConfig, region string) systemvpc.Spec { supernet := config.RDSDefaultSystemVPCSupernet privateSubnets := 1 @@ -70,11 +70,9 @@ func SystemVPCSpec(cfg *config.RDSConfig, region string) systemvpc.Spec { } } -// Idempotent. The private subnet the DB VMs sit in routes 0.0.0.0/0 to the -// VPC's NAT gateway, which is the agent's egress to the gateway wherever no -// management bridge exists. On a formed deployment one always does, and the -// agent reaches the gateway over it instead — so this path carries almost no -// required traffic. +// EnsureSystemVPC idempotently creates or finds the region's RDS system VPC. The private subnet the DB +// VMs sit in routes 0.0.0.0/0 to the VPC's NAT gateway, the agent's egress wherever no management +// bridge exists; on a formed deployment one always does, so this path carries almost no required traffic. func EnsureSystemVPC(ctx context.Context, deps systemvpc.Deps, cfg *config.RDSConfig, accountID, region string) (*systemvpc.Refs, error) { if region == "" { return nil, errors.New("rds: EnsureSystemVPC empty region") @@ -89,8 +87,8 @@ func EnsureSystemVPC(ctx context.Context, deps systemvpc.Deps, cfg *config.RDSCo return refs, nil } -// The security group every DB VM's system ENI carries, found by name or created. -// Idempotent, and shared across the region: nothing deletes it per instance. +// EnsureSystemSecurityGroup returns the security group every DB VM's system ENI carries, found by name +// or created. Idempotent, and shared across the region: nothing deletes it per instance. // // No ingress rules are authorized, and none are needed. Nothing in the platform // connects to a DB VM's system ENI — the agent long-polls outbound, the control diff --git a/spinifex/handlers/sts/service.go b/spinifex/handlers/sts/service.go index b93890d16..88af8092e 100644 --- a/spinifex/handlers/sts/service.go +++ b/spinifex/handlers/sts/service.go @@ -1,3 +1,6 @@ +// Package handlers_sts implements STS for the gateway: role assumption, web +// identity federation and session tokens, with session credentials persisted in +// JetStream KV under the master key shared with IAM. package handlers_sts import ( diff --git a/spinifex/handlers/sts/service_impl.go b/spinifex/handlers/sts/service_impl.go index 71f8600d1..6db81cb7d 100644 --- a/spinifex/handlers/sts/service_impl.go +++ b/spinifex/handlers/sts/service_impl.go @@ -34,7 +34,10 @@ type STSServiceImpl struct { masterKey []byte } -var _ STSService = (*STSServiceImpl)(nil) +var ( + _ STSService = (*STSServiceImpl)(nil) + _ handlers_iam.SessionRevoker = (*STSServiceImpl)(nil) +) // NewSTSServiceImpl constructs an STSServiceImpl. masterKey must be the 32-byte // key shared with IAMServiceImpl. The context bounds bucket creation and the diff --git a/spinifex/handlers/sts/session_credentials.go b/spinifex/handlers/sts/session_credentials.go index 2e94ef0de..fa8985544 100644 --- a/spinifex/handlers/sts/session_credentials.go +++ b/spinifex/handlers/sts/session_credentials.go @@ -155,36 +155,91 @@ func (s *STSServiceImpl) RunJanitor(ctx context.Context) { slog.Info("STS session credential janitor stopped") return case <-ticker.C: - s.sweepExpired(ctx, time.Now().UTC()) + s.sweep(ctx, time.Now().UTC()) } } } -// sweepExpired deletes all records whose ExpiresAt is past the grace period. -// Per-key errors are logged and skipped; returns the delete count. -// -// Deliberately on the raw handle rather than Store.List: the sweep needs the key -// to delete it, and one undecodable record must not stop it expiring every -// other credential. -func (s *STSServiceImpl) sweepExpired(ctx context.Context, now time.Time) int { +// sweep deletes every record past the grace period, and every unexpired record +// whose principal no longer verifies: the retry path for a failed revocation at +// deletion and for a mint that raced it. A verification fault keeps the record. +func (s *STSServiceImpl) sweep(ctx context.Context, now time.Time) int { cutoff := now.Add(-janitorGracePeriod) + var orphaned, faults int + deleted, err := s.deleteSessions(ctx, func(cred *SessionCredential) bool { + if cred.ExpiresAt.Before(cutoff) { + return true + } + _, verr := s.VerifySessionPrincipal(cred) + switch { + case verr == nil: + return false + case IsSessionPrincipalVerdict(verr): + orphaned++ + return true + default: + faults++ + return false + } + }) + if err != nil { + slog.Warn("STS janitor: sweep incomplete", "err", err) + } + if faults > 0 { + slog.Warn("STS janitor: session principal verification failed; records kept", "count", faults) + } + if deleted > 0 { + slog.Info("session credentials swept", "count", deleted, "orphaned", orphaned) + } + return deleted +} + +// RevokeUserSessions deletes the session records of a deleted user. A record +// matches on UserID or, for records predating it, on name: names are unique per +// account, so no live user can hold a session under the deleted user's name. +func (s *STSServiceImpl) RevokeUserSessions(ctx context.Context, accountID, userName, userID string) (int, error) { + return s.deleteSessions(ctx, func(cred *SessionCredential) bool { + if cred.PrincipalType != principalTypeUser || cred.AccountID != accountID { + return false + } + return (userID != "" && cred.UserID == userID) || (userName != "" && cred.SessionName == userName) + }) +} + +// RevokeRoleSessions deletes the session records of a deleted role, matching on +// RoleID or, for records predating it, on the underlying role ARN. +func (s *STSServiceImpl) RevokeRoleSessions(ctx context.Context, accountID, roleARN, roleID string) (int, error) { + return s.deleteSessions(ctx, func(cred *SessionCredential) bool { + if cred.PrincipalType == principalTypeUser || cred.AccountID != accountID { + return false + } + return (roleID != "" && cred.RoleID == roleID) || (roleARN != "" && cred.UnderlyingRoleARN == roleARN) + }) +} + +// deleteSessions scans the bucket and deletes every record match selects. The +// bucket is keyed by AKID, so selecting by anything else is a full scan. +// Per-key failures are skipped and joined, so one bad record shields no other. +// +// Deliberately on the raw handle rather than Store.List: the scan needs the key +// to delete it, and one undecodable record must not stop the rest. +func (s *STSServiceImpl) deleteSessions(ctx context.Context, match func(*SessionCredential) bool) (int, error) { bucket, err := s.sessions.KV(ctx) if err != nil { - slog.Warn("STS janitor: open session credential bucket failed", "err", err) - return 0 + return 0, fmt.Errorf("open session credential bucket: %w", err) } keys, err := kvutil.Keys(ctx, bucket) if err != nil { if errors.Is(err, jetstream.ErrNoKeysFound) { - return 0 + return 0, nil } - slog.Warn("STS janitor: list session credential keys failed", "err", err) - return 0 + return 0, fmt.Errorf("list session credential keys: %w", err) } var deleted int + var errs []error for _, key := range keys { if key == kvutil.VersionKey { continue @@ -194,32 +249,24 @@ func (s *STSServiceImpl) sweepExpired(ctx context.Context, now time.Time) int { if errors.Is(err, jetstream.ErrKeyNotFound) { continue } - slog.Warn("STS janitor: get session credential failed", - "key", key, "err", err) + errs = append(errs, fmt.Errorf("get session credential %s: %w", key, err)) continue } var cred SessionCredential if err := json.Unmarshal(entry.Value(), &cred); err != nil { - slog.Warn("STS janitor: unmarshal session credential failed", - "key", key, "err", err) + errs = append(errs, fmt.Errorf("unmarshal session credential %s: %w", key, err)) continue } - - if !cred.ExpiresAt.Before(cutoff) { + if !match(&cred) { continue } if err := bucket.Delete(ctx, key); err != nil { - slog.Warn("STS janitor: delete expired session credential failed", - "key", key, "err", err) + errs = append(errs, fmt.Errorf("delete session credential %s: %w", key, err)) continue } deleted++ } - - if deleted > 0 { - slog.Info("session credentials swept", "count", deleted) - } - return deleted + return deleted, errors.Join(errs...) } diff --git a/spinifex/handlers/sts/session_credentials_test.go b/spinifex/handlers/sts/session_credentials_test.go index 64af3a1a9..44d2c719a 100644 --- a/spinifex/handlers/sts/session_credentials_test.go +++ b/spinifex/handlers/sts/session_credentials_test.go @@ -3,12 +3,15 @@ package handlers_sts import ( "context" "errors" + awsidentifiers "github.com/mulgadc/spinifex/spinifex/foundation/aws/identifiers" "testing" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/mulgadc/spinifex/internal/testkit" "github.com/mulgadc/spinifex/spinifex/foundation/state/kvstore" "github.com/mulgadc/spinifex/spinifex/foundation/state/kvutil" + handlers_iam "github.com/mulgadc/spinifex/spinifex/handlers/iam" "github.com/nats-io/nats.go/jetstream" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -191,14 +194,22 @@ func putCredWithExpiry(t *testing.T, svc *STSServiceImpl, akid string, expiresAt func TestSweepExpired_DeletesPastGraceOnly(t *testing.T) { svc, _ := newTestSetup(t) + // The fixture's role must exist, or the sweep reaps its unexpired records as orphans. + role := createRoleInAccount(t, svc, awsidentifiers.GlobalAccountID, "app-role", trustPolicyAllowingWildcard()) + put := func(akid string, expiresAt time.Time) { + cred := newTestSessionCredential(akid) + cred.RoleID = aws.StringValue(role.RoleId) + cred.ExpiresAt = expiresAt + require.NoError(t, putSessionCredential(t.Context(), svc.sessions, cred)) + } now := time.Now().UTC() - putCredWithExpiry(t, svc, "ASIALIVE000000000001", now.Add(time.Hour)) // live - putCredWithExpiry(t, svc, "ASIAJUSTEXPIRED00002", now.Add(-30*time.Minute)) // expired, within grace - putCredWithExpiry(t, svc, "ASIAPASTGRACE0000003", now.Add(-janitorGracePeriod-time.Minute)) // past grace - putCredWithExpiry(t, svc, "ASIAANCIENT000000004", now.Add(-24*time.Hour)) // long past grace + put("ASIALIVE000000000001", now.Add(time.Hour)) // live + put("ASIAJUSTEXPIRED00002", now.Add(-30*time.Minute)) // expired, within grace + put("ASIAPASTGRACE0000003", now.Add(-janitorGracePeriod-time.Minute)) // past grace + put("ASIAANCIENT000000004", now.Add(-24*time.Hour)) // long past grace - deleted := svc.sweepExpired(t.Context(), now) + deleted := svc.sweep(t.Context(), now) assert.Equal(t, 2, deleted) // Live and within-grace must still exist; past-grace must be gone. @@ -215,13 +226,13 @@ func TestSweepExpired_DeletesPastGraceOnly(t *testing.T) { func TestSweepExpired_EmptyBucketIsNoop(t *testing.T) { svc, _ := newTestSetup(t) - assert.Equal(t, 0, svc.sweepExpired(t.Context(), time.Now().UTC())) + assert.Equal(t, 0, svc.sweep(t.Context(), time.Now().UTC())) } func TestSweepExpired_SkipsCorruptRecord(t *testing.T) { // A single unmarshalable record must not stall the sweep — neighbouring // expired records still need to be cleaned up. Asserts the per-key error - // path in sweepExpired is log-and-continue, not abort. + // path in sweep is log-and-continue, not abort. svc, _ := newTestSetup(t) now := time.Now().UTC() @@ -229,7 +240,7 @@ func TestSweepExpired_SkipsCorruptRecord(t *testing.T) { require.NoError(t, err) putCredWithExpiry(t, svc, "ASIAEXPIRED000000002", now.Add(-24*time.Hour)) - deleted := svc.sweepExpired(t.Context(), now) + deleted := svc.sweep(t.Context(), now) assert.Equal(t, 1, deleted) _, err = sessionsKV(t, svc).Get(t.Context(), "ASIAEXPIRED000000002") @@ -245,7 +256,7 @@ func TestSweepExpired_IgnoresVersionKey(t *testing.T) { // iterator must skip it (it's not a SessionCredential and unmarshal // would fail every sweep). svc, _ := newTestSetup(t) - assert.Equal(t, 0, svc.sweepExpired(t.Context(), time.Now().UTC())) + assert.Equal(t, 0, svc.sweep(t.Context(), time.Now().UTC())) _, err := sessionsKV(t, svc).Get(t.Context(), kvutil.VersionKey) require.NoError(t, err, "version key must survive the sweep") @@ -268,3 +279,127 @@ func TestRunJanitor_StopsOnContextCancel(t *testing.T) { t.Fatal("RunJanitor did not return after context cancel") } } + +// ----- Revocation at deletion -------------------------------------------- + +// wireRevoker installs svc as its IAM service's session revoker, as awsgw does. +func wireRevoker(t *testing.T, svc *STSServiceImpl) { + t.Helper() + iamSvc, ok := svc.iamSvc.(*handlers_iam.IAMServiceImpl) + require.True(t, ok) + iamSvc.SetSessionRevoker(svc) +} + +func putSession(t *testing.T, svc *STSServiceImpl, cred *SessionCredential) string { + t.Helper() + cred.ExpiresAt = time.Now().UTC().Add(time.Hour) + require.NoError(t, putSessionCredential(t.Context(), svc.sessions, cred)) + return cred.AccessKeyID +} + +func assertSessionsGone(t *testing.T, svc *STSServiceImpl, akids ...string) { + t.Helper() + for _, akid := range akids { + cred, err := svc.LookupSessionCredential(akid) + require.NoError(t, err) + assert.Nil(t, cred, "session %s must be revoked", akid) + } +} + +func assertSessionsKept(t *testing.T, svc *STSServiceImpl, akids ...string) { + t.Helper() + for _, akid := range akids { + cred, err := svc.LookupSessionCredential(akid) + require.NoError(t, err) + assert.NotNil(t, cred, "session %s must survive", akid) + } +} + +// Deleting a user removes its session records at deletion time and nothing +// else: a role session the user assumed belongs to the role, as on AWS, and a +// role session that merely shares the user's name is not the user's. +func TestDeleteUser_RevokesOnlyTheUsersSessions(t *testing.T) { + svc, _ := newTestSetup(t) + wireRevoker(t, svc) + seedUser(t, svc, testCallerAccountID, testCallerUserName) + seedUser(t, svc, testCallerAccountID, "bob") + role := createRoleInAccount(t, svc, testCallerAccountID, "app", trustPolicyAllowingUser(testCallerARN())) + + first := mintUserSession(t, svc, testCallerAccountID, testCallerUserName).AccessKeyID + second := mintUserSession(t, svc, testCallerAccountID, testCallerUserName).AccessKeyID + legacy := putSession(t, svc, &SessionCredential{ + AccessKeyID: "ASIALEGACYUSER000001", AccountID: testCallerAccountID, + PrincipalType: principalTypeUser, SessionName: testCallerUserName, + }) + bob := mintUserSession(t, svc, testCallerAccountID, "bob").AccessKeyID + assumed := mintRoleSession(t, svc, testCallerAccountID, aws.StringValue(role.Arn), testCallerUserName).AccessKeyID + otherAccount := putSession(t, svc, &SessionCredential{ + AccessKeyID: "ASIAOTHERACCOUNT0001", AccountID: testCrossAccountID, + PrincipalType: principalTypeUser, SessionName: testCallerUserName, UserID: "AIDAOTHERACCOUNT0001", + }) + + deleteUser(t, svc, testCallerAccountID, testCallerUserName) + + assertSessionsGone(t, svc, first, second, legacy) + assertSessionsKept(t, svc, bob, assumed, otherAccount) +} + +func TestDeleteRole_RevokesOnlyTheRolesSessions(t *testing.T) { + svc, _ := newTestSetup(t) + wireRevoker(t, svc) + seedUser(t, svc, testCallerAccountID, testCallerUserName) + app := createRoleInAccount(t, svc, testCallerAccountID, "app", trustPolicyAllowingUser(testCallerARN())) + other := createRoleInAccount(t, svc, testCallerAccountID, "other", trustPolicyAllowingUser(testCallerARN())) + + first := mintRoleSession(t, svc, testCallerAccountID, aws.StringValue(app.Arn), "session-1").AccessKeyID + second := mintRoleSession(t, svc, testCallerAccountID, aws.StringValue(app.Arn), "session-2").AccessKeyID + legacy := putSession(t, svc, &SessionCredential{ + AccessKeyID: "ASIALEGACYROLE000001", AccountID: testCallerAccountID, + SessionName: "session-1", UnderlyingRoleARN: aws.StringValue(app.Arn), + }) + otherRole := mintRoleSession(t, svc, testCallerAccountID, aws.StringValue(other.Arn), "session-1").AccessKeyID + user := mintUserSession(t, svc, testCallerAccountID, testCallerUserName).AccessKeyID + + deleteRole(t, svc, testCallerAccountID, "app") + + assertSessionsGone(t, svc, first, second, legacy) + assertSessionsKept(t, svc, otherRole, user) +} + +// ----- The janitor reaps what revocation missed -------------------------- + +// With no revoker wired, deletion leaves the records behind, which is the state +// a failed revocation or a mint racing the delete produces. The sweep must reap +// them well before they expire, and leave a live principal's sessions alone. +func TestSweep_ReapsSessionsOfDeletedPrincipals(t *testing.T) { + svc, _ := newTestSetup(t) + seedUser(t, svc, testCallerAccountID, testCallerUserName) + seedUser(t, svc, testCallerAccountID, "bob") + role := createRoleInAccount(t, svc, testCallerAccountID, "app", trustPolicyAllowingUser(testCallerARN())) + + orphanUser := mintUserSession(t, svc, testCallerAccountID, "bob").AccessKeyID + orphanRole := mintRoleSession(t, svc, testCallerAccountID, aws.StringValue(role.Arn), "session-1").AccessKeyID + live := mintUserSession(t, svc, testCallerAccountID, testCallerUserName).AccessKeyID + + deleteUser(t, svc, testCallerAccountID, "bob") + deleteRole(t, svc, testCallerAccountID, "app") + assertSessionsKept(t, svc, orphanUser, orphanRole) + + assert.Equal(t, 2, svc.sweep(t.Context(), time.Now().UTC())) + assertSessionsGone(t, svc, orphanUser, orphanRole) + assertSessionsKept(t, svc, live) +} + +// An IAM outage is not evidence the principal is gone; reaping on it would +// revoke every live session in the cluster. +func TestSweep_KeepsSessionsWhenVerificationFaults(t *testing.T) { + svc, _ := newTestSetup(t) + akid := putSession(t, svc, &SessionCredential{ + AccessKeyID: "ASIAFAULTUSER0000001", AccountID: testCallerAccountID, + PrincipalType: principalTypeUser, SessionName: testCallerUserName, UserID: "AIDAEXAMPLEAAAAAAAAA", + }) + svc.iamSvc = faultingIAMService{err: errors.New("jetstream unavailable")} + + assert.Equal(t, 0, svc.sweep(t.Context(), time.Now().UTC())) + assertSessionsKept(t, svc, akid) +} diff --git a/spinifex/handlers/sts/session_principal.go b/spinifex/handlers/sts/session_principal.go index c023afece..fda699c02 100644 --- a/spinifex/handlers/sts/session_principal.go +++ b/spinifex/handlers/sts/session_principal.go @@ -42,6 +42,7 @@ func IsSessionPrincipalVerdict(err error) bool { // SessionPrincipal is the live IAM record a session credential still resolves to. type SessionPrincipal struct { UserID string // user sessions + UserARN string // user sessions RoleID string // role sessions RoleName string RoleARN string @@ -85,7 +86,7 @@ func (s *STSServiceImpl) verifySessionUser(cred *SessionCredential) (*SessionPri if liveUserID != cred.UserID { return nil, ErrSessionPrincipalReplaced } - return &SessionPrincipal{UserID: liveUserID}, nil + return &SessionPrincipal{UserID: liveUserID, UserARN: aws.StringValue(out.User.Arn)}, nil } // verifySessionRole resolves the session's underlying role ARN and compares the diff --git a/spinifex/handlers/sts/session_principal_test.go b/spinifex/handlers/sts/session_principal_test.go index 00aa664bd..efc955031 100644 --- a/spinifex/handlers/sts/session_principal_test.go +++ b/spinifex/handlers/sts/session_principal_test.go @@ -77,6 +77,21 @@ func TestVerifySessionPrincipal_UnchangedUser_ReturnsLiveID(t *testing.T) { assert.Empty(t, got.RoleID) } +// A user session reports the stored ARN, path included, so a door naming the +// session's principal agrees with the IAM record. +func TestVerifySessionPrincipal_PathedUser_ReturnsStoredARN(t *testing.T) { + svc, _ := newTestSetup(t) + _, err := svc.iamSvc.CreateUser(testCallerAccountID, &iam.CreateUserInput{ + UserName: aws.String(testCallerUserName), Path: aws.String("/eng/"), + }) + require.NoError(t, err) + cred := mintUserSession(t, svc, testCallerAccountID, testCallerUserName) + + got, err := svc.VerifySessionPrincipal(cred) + require.NoError(t, err) + assert.Equal(t, "arn:aws:iam::"+testCallerAccountID+":user/eng/"+testCallerUserName, got.UserARN) +} + func TestVerifySessionPrincipal_UnchangedRole_ReturnsLiveRecord(t *testing.T) { svc, _ := newTestSetup(t) role := createRoleInAccount(t, svc, testCallerAccountID, "app", trustPolicyAllowingUser(testCallerARN())) diff --git a/spinifex/ingress/aws/query/parser.go b/spinifex/ingress/aws/query/parser.go index cb46925f1..f31b05c18 100644 --- a/spinifex/ingress/aws/query/parser.go +++ b/spinifex/ingress/aws/query/parser.go @@ -16,6 +16,9 @@ import ( // Callers should map this to AWS's MalformedQueryString error code. var ErrSliceTooLarge = errors.New("list parameter exceeds maximum entries") +// QueryParamsToStruct fills the struct out points to from flattened EC2 Query +// params, matching each field by name or locationName tag and recursing into +// dotted prefixes for nested structs and lists. out must be a struct pointer. func QueryParamsToStruct(params map[string]string, out any) error { v := reflect.ValueOf(out) diff --git a/spinifex/ingress/aws/ratelimit/limiter.go b/spinifex/ingress/aws/ratelimit/limiter.go index 21efeebb1..c7b231c63 100644 --- a/spinifex/ingress/aws/ratelimit/limiter.go +++ b/spinifex/ingress/aws/ratelimit/limiter.go @@ -1,3 +1,5 @@ +// Package ratelimit locks out client addresses that repeatedly fail AWS +// request authentication. package ratelimit import ( diff --git a/spinifex/migrate/migrate.go b/spinifex/migrate/migrate.go index 233f34300..f38976bd1 100644 --- a/spinifex/migrate/migrate.go +++ b/spinifex/migrate/migrate.go @@ -1,3 +1,5 @@ +// Package migrate runs versioned migrations over NATS KV buckets, on-disk +// config files and object-store data, recording each target's schema version. package migrate import ( diff --git a/spinifex/operator/cli/admin.go b/spinifex/operator/cli/admin.go index 758c0c0fc..8975a2980 100644 --- a/spinifex/operator/cli/admin.go +++ b/spinifex/operator/cli/admin.go @@ -428,7 +428,7 @@ func init() { mustMarkFlagRequired(adminJoinCmd, "host") mustMarkFlagRequired(adminJoinCmd, "token") - imagesImportCmd.Flags().String("tmp-dir", os.TempDir(), "Temporary directory for image import processing") + imagesImportCmd.Flags().String("tmp-dir", "", "Scratch directory for extracting the image (default: /images); must be disk-backed, not tmpfs") imagesImportCmd.Flags().String("name", "", "Import specified image by name") imagesImportCmd.Flags().String("ami-name", "", "Override the registered AMI name (DescribeImages name). Defaults to ami-{distro}-{version}-{arch}. Use for locally-built appliances (e.g. --ami-name spinifex-eks-node).") @@ -588,7 +588,6 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { var image imagecatalog.Images var imageFile string - var imageStat os.FileInfo var err error forceCmd, _ := cmd.Flags().GetBool("force") @@ -756,25 +755,59 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { os.Exit(1) } - // Next, validate if the image is raw, tar, gz, xv, etc. We need to upload the raw image - tmpDir, err := os.MkdirTemp(ostmpDir, "spinifex-image-tmp-*") + // An empty --tmp-dir scratches beside the catalog: disk-backed, unlike a + // tmpfs /tmp, and already root:spinifex 0770. + scratchRoot := ostmpDir + if scratchRoot == "" { + scratchRoot = imageDir + } + extractedImagePath, cleanupScratch, err := extractToScratch(imageFile, scratchRoot) if err != nil { - fmt.Fprintf(os.Stderr, "Could not create temp dir: %v\n", err) + fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } - extractedImagePath, err := imagecatalog.ExtractDiskImageFromFile(imageFile, imagePath) + // os.Exit skips deferred calls, so scratch is removed before any exit. + volumeId, err := registerExtractedImage(image, amiNameOverride, imagePath, extractedImagePath, sourceDigest) + cleanupScratch() if err != nil { - fmt.Fprintf(os.Stderr, "Could not extract image: %v\n", err) + fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } - imageStat, err = os.Stat(extractedImagePath) + fmt.Printf("✅ Image import complete. Image-ID (AMI): %s\n", volumeId) + fmt.Printf("✅ Source digest: %s:%s (%s)\n", sourceDigest.Algorithm, sourceDigest.Value, sourceDigest.Verification) +} +// extractToScratch extracts imageFile into a fresh hidden directory under +// scratchRoot and returns the extracted path with a cleanup that removes that +// directory. On error the directory is already removed. +func extractToScratch(imageFile, scratchRoot string) (string, func(), error) { + scratchDir, err := os.MkdirTemp(scratchRoot, ".import-*") if err != nil { - fmt.Fprintf(os.Stderr, "Could not stat image: %v\n", err) - os.Exit(1) + return "", nil, fmt.Errorf("create scratch dir under %s: %w", scratchRoot, err) + } + cleanup := func() { + if err := os.RemoveAll(scratchDir); err != nil { + fmt.Fprintf(os.Stderr, "Warning: could not remove scratch dir %s: %v\n", scratchDir, err) + } + } + + extracted, err := imagecatalog.ExtractDiskImageFromFile(imageFile, scratchDir) + if err != nil { + cleanup() + return "", nil, fmt.Errorf("extract image: %w", err) + } + return extracted, cleanup, nil +} + +// registerExtractedImage writes the AMI manifest into imagePath, imports +// extractedImagePath into storage and registers the AMI, returning its ID. +func registerExtractedImage(image imagecatalog.Images, amiNameOverride, imagePath, extractedImagePath string, sourceDigest ebsmetadata.ImageDigest) (string, error) { + imageStat, err := os.Stat(extractedImagePath) + if err != nil { + return "", fmt.Errorf("stat image: %w", err) } // Describe the image/AMI as the control-plane document it will become. @@ -813,24 +846,19 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { // Save as JSON jsonData, err := json.Marshal(ami) if err != nil { - fmt.Fprintf(os.Stderr, "Could not marshal manifest: %v\n", err) - os.Exit(1) + return "", fmt.Errorf("marshal manifest: %w", err) } manifestFilename := fmt.Sprintf("%s/%s.json", imagePath, ami.Name) // Write to file err = os.WriteFile(manifestFilename, jsonData, 0600) if err != nil { - fmt.Fprintf(os.Stderr, "Could not write manifest: %v\n", err) - os.Exit(1) + return "", fmt.Errorf("write manifest: %w", err) } - defer os.RemoveAll(tmpDir) - appConfig, nc, err := loadConfigAndConnect() if err != nil { - fmt.Fprintf(os.Stderr, "Could not connect to the cluster: %v\n", err) - os.Exit(1) + return "", fmt.Errorf("connect to the cluster: %w", err) } defer nc.Close() node := appConfig.Nodes[appConfig.Node] @@ -847,8 +875,7 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { Progress: os.Stdout, }) if err != nil { - fmt.Fprintf(os.Stderr, "Could not import image: %v\n", err) - os.Exit(1) + return "", fmt.Errorf("import image: %w", err) } // admin.ImportImage only wrote the provider's half of the snapshot (its @@ -856,8 +883,7 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { // DescribeSnapshots and GetAMISourceVolumeID cannot resolve the import. metaStore := objectstore.NewS3ObjectStoreFromConfig(node.Predastore.Host, node.Predastore.Region, node.Predastore.AccessKey, node.Predastore.SecretKey) if err := registerImportedAMISnapshot(metaStore, node.Predastore.Bucket, ami, node.AZ, node.Viperblock.EncryptionKeyFile != ""); err != nil { - fmt.Fprintf(os.Stderr, "Imported %s but could not register its snapshot: %v\n", volumeId, err) - os.Exit(1) + return "", fmt.Errorf("imported %s but could not register its snapshot: %w", volumeId, err) } // The document is what DescribeImages enumerates, so it is written last: @@ -865,12 +891,10 @@ func runimagesImportCmd(cmd *cobra.Command, args []string) { // partway leaves no half-registered image behind. ami.State = "available" if err := ebsmetadata.NewStore(metaStore, node.Predastore.Bucket).PutAMI(context.Background(), ami); err != nil { - fmt.Fprintf(os.Stderr, "Imported %s but could not register it: %v\n", volumeId, err) - os.Exit(1) + return "", fmt.Errorf("imported %s but could not register it: %w", volumeId, err) } - fmt.Printf("✅ Image import complete. Image-ID (AMI): %s\n", volumeId) - fmt.Printf("✅ Source digest: %s:%s (%s)\n", sourceDigest.Algorithm, sourceDigest.Value, sourceDigest.Verification) + return volumeId, nil } // registerImportedAMISnapshot writes the EC2 control plane's snapshot document @@ -2978,7 +3002,6 @@ func runAccountCreate(cmd *cobra.Command, args []string) { endpointHost = h } } - endpointURL := "https://" + net.JoinHostPort(endpointHost, "9999") credPath := filepath.Join(homeDir, ".aws", "credentials") configPath := filepath.Join(homeDir, ".aws", "config") @@ -2993,12 +3016,7 @@ func runAccountCreate(cmd *cobra.Command, args []string) { if region == "" { region = "ap-southeast-2" } - if err := admin.UpdateAWSINIFile(configPath, "profile "+profileName, map[string]string{ - "region": region, - "endpoint_url": endpointURL, - "ca_bundle": certPath, - "output": "json", - }); err != nil { + if err := admin.WriteAWSProfileConfig(configPath, profileName, region, certPath, endpointHost); err != nil { fmt.Fprintf(os.Stderr, "Warning: could not update AWS config: %v\n", err) } diff --git a/spinifex/operator/cli/admin_images_import_test.go b/spinifex/operator/cli/admin_images_import_test.go new file mode 100644 index 000000000..73ad4858b --- /dev/null +++ b/spinifex/operator/cli/admin_images_import_test.go @@ -0,0 +1,117 @@ +package cli + +import ( + "bytes" + "compress/gzip" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func readRawDiskFixture(t *testing.T) []byte { + t.Helper() + data, err := os.ReadFile(filepath.Join("..", "..", "..", "tests", "unit-test-disk-image.raw")) + require.NoError(t, err) + return data +} + +func gzipData(t *testing.T, data []byte) []byte { + t.Helper() + var buf bytes.Buffer + gw := gzip.NewWriter(&buf) + _, err := gw.Write(data) + require.NoError(t, err) + require.NoError(t, gw.Close()) + return buf.Bytes() +} + +func qcow2Data(t *testing.T, raw []byte) []byte { + t.Helper() + if _, err := exec.LookPath("qemu-img"); err != nil { + t.Skip("qemu-img not found") + } + dir := t.TempDir() + rawPath := filepath.Join(dir, "src.raw") + qcowPath := filepath.Join(dir, "src.qcow2") + require.NoError(t, os.WriteFile(rawPath, raw, 0o600)) + out, err := exec.Command("qemu-img", "convert", "-f", "raw", "-O", "qcow2", rawPath, qcowPath).CombinedOutput() + require.NoError(t, err, string(out)) + data, err := os.ReadFile(qcowPath) + require.NoError(t, err) + return data +} + +func dirNames(t *testing.T, dir string) []string { + t.Helper() + entries, err := os.ReadDir(dir) + require.NoError(t, err) + names := make([]string, 0, len(entries)) + for _, e := range entries { + names = append(names, e.Name()) + } + sort.Strings(names) + return names +} + +// The catalog dir doubles as the download cache, so the source lives there +// as it does for a --name import, with the images dir as the scratch root. +func TestExtractToScratch_LeavesNoIntermediateInCatalog(t *testing.T) { + raw := readRawDiskFixture(t) + + cases := []struct { + name string + source string + payload func(t *testing.T) []byte + wantErr string + }{ + { + name: "gzip raw is decompressed into scratch", + source: "disk.raw.gz", + payload: func(t *testing.T) []byte { return gzipData(t, raw) }, + }, + { + name: "qcow2 is converted into scratch", + source: "disk.qcow2", + payload: func(t *testing.T) []byte { return qcow2Data(t, raw) }, + }, + { + name: "intermediate that fails the disk sniff is removed", + source: "disk.raw.gz", + payload: func(t *testing.T) []byte { return gzipData(t, []byte("not a disk image")) }, + wantErr: "extract image", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + imagesDir := t.TempDir() + catalogDir := filepath.Join(imagesDir, "debian", "13", "x86_64") + require.NoError(t, os.MkdirAll(catalogDir, 0o770)) + source := filepath.Join(catalogDir, tc.source) + require.NoError(t, os.WriteFile(source, tc.payload(t), 0o600)) + + extracted, cleanup, err := extractToScratch(source, imagesDir) + + if tc.wantErr != "" { + require.ErrorContains(t, err, tc.wantErr) + assert.Nil(t, cleanup) + } else { + require.NoError(t, err) + scratchDir := filepath.Dir(extracted) + assert.Equal(t, imagesDir, filepath.Dir(scratchDir)) + assert.True(t, strings.HasPrefix(filepath.Base(scratchDir), ".import-"), "extracted into %s", extracted) + assert.FileExists(t, extracted) + cleanup() + } + + assert.Equal(t, []string{"debian"}, dirNames(t, imagesDir), "scratch dir must be removed") + assert.Equal(t, []string{tc.source}, dirNames(t, catalogDir), "catalog must hold only the source") + }) + } +} diff --git a/spinifex/operator/cli/admin_jsprobe_test.go b/spinifex/operator/cli/admin_jsprobe_test.go index 94aaa689a..5592e9c7f 100644 --- a/spinifex/operator/cli/admin_jsprobe_test.go +++ b/spinifex/operator/cli/admin_jsprobe_test.go @@ -61,6 +61,7 @@ func TestCanaryRoundTrip_WritesADistinctValueEachRun(t *testing.T) { // A deleted bucket stands in for the unreachable-store case: the probe must // report an error rather than treating a failed write as success. func TestCanaryRoundTrip_FailsWhenBucketIsGone(t *testing.T) { + t.Parallel() kv, js := newCanaryBucket(t) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) diff --git a/spinifex/operator/cli/admin_kv_test.go b/spinifex/operator/cli/admin_kv_test.go index 8ea2b02ed..18cf73000 100644 --- a/spinifex/operator/cli/admin_kv_test.go +++ b/spinifex/operator/cli/admin_kv_test.go @@ -215,11 +215,15 @@ func TestKVDigestClusteredReplicas(t *testing.T) { js, err := jetstream.New(nc) require.NoError(t, err) + // Each attempt gets its own deadline: before a meta leader is elected a + // create blocks for the client's default timeout instead of failing fast. var kv jetstream.KeyValue require.Eventually(t, func() bool { - kv, err = js.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "rep", History: 3, Replicas: n, TTL: time.Hour}) + attemptCtx, cancel := context.WithTimeout(ctx, 250*time.Millisecond) + defer cancel() + kv, err = js.CreateKeyValue(attemptCtx, jetstream.KeyValueConfig{Bucket: "rep", History: 3, Replicas: n, TTL: time.Hour}) return err == nil - }, 30*time.Second, 250*time.Millisecond, "clustered KV create: %v", err) + }, 30*time.Second, 20*time.Millisecond, "clustered KV create: %v", err) for i := range 5 { _, err := kv.PutString(ctx, fmt.Sprintf("k%d", i%2), fmt.Sprintf("v%d", i)) require.NoError(t, err) @@ -279,10 +283,12 @@ func TestKVDigestIgnoresExpiry(t *testing.T) { require.NoError(t, err) js, err := jetstream.New(nc) require.NoError(t, err) - kv, err := js.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "ttl", TTL: 200 * time.Millisecond}) + const ttl = 200 * time.Millisecond + kv, err := js.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "ttl", TTL: ttl}) require.NoError(t, err) _, err = kv.PutString(ctx, "k", "v") require.NoError(t, err) + putAt := time.Now() work := t.TempDir() _, metas, err := copyStreamTree(filepath.Join(parent, "jetstream"), filepath.Join(work, "jetstream")) @@ -291,7 +297,9 @@ func TestKVDigestIgnoresExpiry(t *testing.T) { ns.Shutdown() ns.WaitForShutdown() - time.Sleep(400 * time.Millisecond) + // The server stamped the message before the put returned, so it is now + // older than the TTL. + time.Sleep(time.Until(putAt.Add(ttl + 50*time.Millisecond))) d, err := digestStore(ctx, work, nil, false, metas) require.NoError(t, err) require.Len(t, d, 1) diff --git a/spinifex/operator/cli/cluster_test.go b/spinifex/operator/cli/cluster_test.go index 81869966e..a8889ece0 100644 --- a/spinifex/operator/cli/cluster_test.go +++ b/spinifex/operator/cli/cluster_test.go @@ -35,6 +35,7 @@ func fakeDrainResponder(t *testing.T, nc *nats.Conn, released int, errMsg string } func TestDrainDHCPLeasesSumsReleased(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) fakeDrainResponder(t, nc, 7, "") @@ -44,6 +45,7 @@ func TestDrainDHCPLeasesSumsReleased(t *testing.T) { } func TestDrainDHCPLeasesReportsResponderError(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) fakeDrainResponder(t, nc, 0, "list leases for drain: boom") @@ -55,6 +57,7 @@ func TestDrainDHCPLeasesReportsResponderError(t *testing.T) { } func TestDrainDHCPLeasesNoResponders(t *testing.T) { + t.Parallel() _, nc, _ := testutil.StartTestJetStream(t) // No vpcd subscribed: the collection window elapses with zero replies. @@ -281,7 +284,7 @@ func captureSlog(t *testing.T, fn func()) string { // at WARN level, and names only the running instance, not the stopped one. func TestWarnIfGuestsLeftRunningNamesRunningGuests(t *testing.T) { origTimeout := guestEnumerationTimeout - guestEnumerationTimeout = 200 * time.Millisecond + guestEnumerationTimeout = 50 * time.Millisecond t.Cleanup(func() { guestEnumerationTimeout = origTimeout }) _, nc, _ := testutil.StartTestJetStream(t) @@ -312,7 +315,7 @@ func TestWarnIfGuestsLeftRunningNamesRunningGuests(t *testing.T) { // running guests produces no warning. func TestWarnIfGuestsLeftRunningNoGuestsIsSilent(t *testing.T) { origTimeout := guestEnumerationTimeout - guestEnumerationTimeout = 200 * time.Millisecond + guestEnumerationTimeout = 50 * time.Millisecond t.Cleanup(func() { guestEnumerationTimeout = origTimeout }) _, nc, _ := testutil.StartTestJetStream(t) @@ -510,7 +513,7 @@ func TestCollectLocalShutdownACKExhaustedReturnsWithinBudget(t *testing.T) { // must log at ERROR, not WARN, and still name only the running instance. func TestReportGuestsLeftRunningSevereLogsErrorAndNamesGuests(t *testing.T) { origTimeout := guestEnumerationTimeout - guestEnumerationTimeout = 200 * time.Millisecond + guestEnumerationTimeout = 50 * time.Millisecond t.Cleanup(func() { guestEnumerationTimeout = origTimeout }) _, nc, _ := testutil.StartTestJetStream(t) diff --git a/spinifex/operator/cli/export_test.go b/spinifex/operator/cli/export_test.go index dc5ab8f0b..621b1a989 100644 --- a/spinifex/operator/cli/export_test.go +++ b/spinifex/operator/cli/export_test.go @@ -29,6 +29,13 @@ func SetFirewallApplyHelper(path string) func() { // InitCLILogger exposes initCLILogger for testing. var InitCLILogger = initCLILogger +// OutputStylingEnabled, IsTerminal and SetOutputStyling expose the spx colour guard. +var ( + OutputStylingEnabled = outputStylingEnabled + IsTerminal = isTerminal + SetOutputStyling = setOutputStyling +) + // CLILogLevel exposes the CLI logger's level var for testing. var CLILogLevel = cliLogLevel diff --git a/spinifex/operator/cli/root.go b/spinifex/operator/cli/root.go index b3eca04e8..3e64d70b6 100644 --- a/spinifex/operator/cli/root.go +++ b/spinifex/operator/cli/root.go @@ -1,12 +1,17 @@ +// Package cli defines the spx command-line interface: the cobra commands that +// install, configure, start and administer a Spinifex node and its cluster. package cli import ( "fmt" + "io" "log/slog" "os" "github.com/mulgadc/spinifex/spinifex/bootstrap/config" + "github.com/pterm/pterm" "github.com/spf13/cobra" + "golang.org/x/term" ) var ( @@ -49,6 +54,8 @@ func Execute() { cliLogLevel.Set(slog.LevelError) slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: cliLogLevel}))) + setOutputStyling(outputStylingEnabled(os.Getenv("NO_COLOR"), os.Getenv("TERM"), isTerminal(os.Stdout))) + err := rootCmd.Execute() if err != nil { fmt.Fprintln(os.Stderr, err) @@ -56,6 +63,28 @@ func Execute() { } } +// outputStylingEnabled reports whether spx may emit ANSI colour and text styling: +// only on a terminal that is not TERM=dumb, with NO_COLOR unset or empty. +func outputStylingEnabled(noColor, termName string, stdoutIsTerminal bool) bool { + return noColor == "" && termName != "dumb" && stdoutIsTerminal +} + +// isTerminal reports whether w is a file attached to a terminal. +func isTerminal(w io.Writer) bool { + f, ok := w.(*os.File) + return ok && term.IsTerminal(int(f.Fd())) +} + +// setOutputStyling switches pterm's colour and bold/underline styling for every +// printer at once. pterm forces colour on at init regardless of the terminal. +func setOutputStyling(enabled bool) { + if enabled { + pterm.EnableStyling() + } else { + pterm.DisableStyling() + } +} + // initCLILogger retunes the CLI logger from SPX_LOG_LEVEL, then --verbose so an // explicit flag wins over the environment. There is no root --debug flag: four // service subcommands already define one with a service-specific meaning, and a diff --git a/spinifex/operator/cli/root_output_test.go b/spinifex/operator/cli/root_output_test.go new file mode 100644 index 000000000..2d0b28d8f --- /dev/null +++ b/spinifex/operator/cli/root_output_test.go @@ -0,0 +1,149 @@ +package cli_test + +import ( + "bytes" + "io" + "os" + "strings" + "testing" + + "github.com/mulgadc/spinifex/spinifex/operator/cli" + "github.com/pterm/pterm" +) + +func TestOutputStylingEnabled(t *testing.T) { + tests := []struct { + name string + noColor string + term string + terminal bool + want bool + }{ + {name: "terminal keeps colour", term: "xterm-256color", terminal: true, want: true}, + {name: "unset TERM on a terminal keeps colour", terminal: true, want: true}, + {name: "TERM=dumb drops colour on a terminal", term: "dumb", terminal: true, want: false}, + {name: "pipe drops colour", terminal: false, want: false}, + {name: "NO_COLOR drops colour on a terminal", noColor: "1", terminal: true, want: false}, + {name: "any non-empty NO_COLOR counts, even 0", noColor: "0", terminal: true, want: false}, + {name: "NO_COLOR on a pipe", noColor: "1", terminal: false, want: false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := cli.OutputStylingEnabled(tt.noColor, tt.term, tt.terminal); got != tt.want { + t.Fatalf("OutputStylingEnabled(%q, %q, %v) = %v, want %v", tt.noColor, tt.term, tt.terminal, got, tt.want) + } + }) + } +} + +func TestIsTerminalFalseForNonTTYWriters(t *testing.T) { + r, w, err := os.Pipe() + if err != nil { + t.Fatal(err) + } + defer r.Close() + defer w.Close() + + f, err := os.CreateTemp(t.TempDir(), "out") + if err != nil { + t.Fatal(err) + } + defer f.Close() + + for name, wr := range map[string]io.Writer{"pipe": w, "regular file": f, "buffer": &bytes.Buffer{}} { + if cli.IsTerminal(wr) { + t.Errorf("IsTerminal(%s) = true, want false", name) + } + } +} + +// renderNodesTable renders a table shaped like `spx get nodes` through the same +// pterm.DefaultTable the CLI uses, after applying the styling decision. +func renderNodesTable(t *testing.T, noColor, termName string, terminal bool) string { + t.Helper() + t.Cleanup(func() { cli.SetOutputStyling(true) }) + cli.SetOutputStyling(cli.OutputStylingEnabled(noColor, termName, terminal)) + + var buf bytes.Buffer + data := pterm.TableData{ + {"NAME", "STATUS", "IP"}, + {"node1", "Ready", "10.0.0.1"}, + {"node-long-name", "NotReady", "10.0.0.22"}, + } + if err := pterm.DefaultTable.WithHasHeader().WithLeftAlignment().WithData(data).WithWriter(&buf).Render(); err != nil { + t.Fatalf("render: %v", err) + } + return buf.String() +} + +func TestTableOutputPlainWhenNotTerminal(t *testing.T) { + r, w, err := os.Pipe() + if err != nil { + t.Fatal(err) + } + defer r.Close() + defer w.Close() + + out := renderNodesTable(t, "", "xterm", cli.IsTerminal(w)) + assertPlainAlignedTable(t, out) +} + +func TestTableOutputPlainWithNoColorOnTerminal(t *testing.T) { + out := renderNodesTable(t, "1", "xterm", true) + assertPlainAlignedTable(t, out) +} + +func TestTableOutputPlainOnDumbTerminal(t *testing.T) { + out := renderNodesTable(t, "", "dumb", true) + assertPlainAlignedTable(t, out) +} + +func TestTableOutputStyledOnTerminal(t *testing.T) { + out := renderNodesTable(t, "", "xterm", true) + if !strings.Contains(out, "\x1b[") { + t.Fatalf("table on a terminal carries no ANSI styling, so the plain-output tests prove nothing:\n%q", out) + } +} + +func assertPlainAlignedTable(t *testing.T, out string) { + t.Helper() + if strings.ContainsRune(out, '\x1b') { + t.Fatalf("output contains an escape byte:\n%q", out) + } + + lines := strings.Split(strings.TrimRight(out, "\n"), "\n") + var rows []string + for _, l := range lines { + if strings.Contains(l, "node") || strings.HasPrefix(l, "NAME") { + rows = append(rows, l) + } + } + if len(rows) != 3 { + t.Fatalf("want header and two node rows, got %d:\n%s", len(rows), out) + } + + // Columns line up only if the width calculation saw the same bytes it printed. + statusCol := strings.Index(rows[0], "STATUS") + ipCol := strings.Index(rows[0], "IP") + for _, row := range rows[1:] { + fields := strings.Fields(row) + var status string + for _, f := range fields { + if strings.Contains(f, "Ready") { + status = f + } + } + if got := strings.Index(row, status); got != statusCol { + t.Errorf("STATUS column at %d in %q, header at %d", got, row, statusCol) + } + if got := strings.Index(row, "10.0.0."); got != ipCol { + t.Errorf("IP column at %d in %q, header at %d", got, row, ipCol) + } + } + + // grep -w Ready must match: the byte before the word is not a word character. + ready := strings.Index(rows[1], "Ready") + if ready <= 0 || rows[1][ready-1] != ' ' { + t.Errorf("Ready is not preceded by a space in %q", rows[1]) + } +} diff --git a/spinifex/operator/host/systemd/reconcile.go b/spinifex/operator/host/systemd/reconcile.go index 192a8e4a5..02ac451fc 100644 --- a/spinifex/operator/host/systemd/reconcile.go +++ b/spinifex/operator/host/systemd/reconcile.go @@ -4,6 +4,8 @@ // //go:generate go run generate.go +// Package systemd installs the embedded Spinifex systemd units and reconciles +// them against the copies already on the host. package systemd import ( diff --git a/spinifex/operator/imagecatalog/images.go b/spinifex/operator/imagecatalog/images.go index d37c307ca..8dbfb8b7e 100644 --- a/spinifex/operator/imagecatalog/images.go +++ b/spinifex/operator/imagecatalog/images.go @@ -1,3 +1,5 @@ +// Package imagecatalog lists the machine images an operator can import, and +// downloads, verifies and extracts their disk images. package imagecatalog import ( @@ -321,6 +323,8 @@ func hashImageFile(imagePath string, hasher hash.Hash) (string, error) { return hex.EncodeToString(hasher.Sum(nil)), nil } +// Images describes one importable cloud image in the AvailableImages catalog: +// where to download it, how to verify its checksum, and the AMI metadata it gets. type Images struct { Name string `json:"name"` Description string `json:"description"` diff --git a/spinifex/operator/imagecatalog/images_test.go b/spinifex/operator/imagecatalog/images_test.go index 59e18453f..164a50cd7 100644 --- a/spinifex/operator/imagecatalog/images_test.go +++ b/spinifex/operator/imagecatalog/images_test.go @@ -333,7 +333,8 @@ func TestDecompressXz_WritesSparseHoles(t *testing.T) { const zeroRun = 8 << 20 payload := append([]byte("MULGA-SPARSE-FIXTURE-HEADER"), make([]byte, zeroRun)...) - compressed := pipeCompress(t, "xz", []string{"-z", "-c"}, payload) + // The preset only affects how fast the fixture compresses, not the decompress path under test. + compressed := pipeCompress(t, "xz", []string{"-0", "-z", "-c"}, payload) srcDir := t.TempDir() outDir := t.TempDir() diff --git a/spinifex/operator/progress/download_test.go b/spinifex/operator/progress/download_test.go new file mode 100644 index 000000000..557b6c12b --- /dev/null +++ b/spinifex/operator/progress/download_test.go @@ -0,0 +1,107 @@ +package progress + +import ( + "bytes" + "io" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strconv" + "strings" + "testing" + + "github.com/pterm/pterm" + "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" +) + +// captureFD1 redirects file descriptor 1 for the duration of fn, so it also +// catches writers that captured os.Stdout at init (pterm's cursor and colour). +func captureFD1(t *testing.T, fn func()) string { + t.Helper() + r, w, err := os.Pipe() + require.NoError(t, err) + saved, err := unix.Dup(1) + require.NoError(t, err) + + done := make(chan []byte) + go func() { + b, _ := io.ReadAll(r) + done <- b + }() + + func() { + defer func() { + require.NoError(t, unix.Dup2(saved, 1)) + _ = unix.Close(saved) + _ = w.Close() + }() + require.NoError(t, unix.Dup2(int(w.Fd()), 1)) + fn() + }() + + out := <-done + _ = r.Close() + return string(out) +} + +func TestDownloadFileWithProgressPlainWhenStylingDisabled(t *testing.T) { + wasRaw := pterm.RawOutput + t.Cleanup(func() { + if wasRaw { + pterm.DisableStyling() + } else { + pterm.EnableStyling() + } + }) + pterm.DisableStyling() + + const chunk = 32 * 1024 + const chunks = 64 + payload := bytes.Repeat([]byte("spinifex"), chunk*chunks/8) + + tests := []struct { + name string + contentLength bool + wantStart string + }{ + {name: "content length", contentLength: true, wantStart: "Downloading img (2.0 MiB) ..."}, + {name: "chunked without content length", contentLength: false, wantStart: "Downloading img (size unknown) ..."}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + if tt.contentLength { + w.Header().Set("Content-Length", strconv.Itoa(len(payload))) + } + flusher, ok := w.(http.Flusher) + if !ok { + t.Error("response writer cannot flush") + return + } + for off := 0; off < len(payload); off += chunk { + _, _ = w.Write(payload[off : off+chunk]) + flusher.Flush() + } + })) + defer srv.Close() + + dest := filepath.Join(t.TempDir(), "img.raw") + var dlErr error + out := captureFD1(t, func() { + dlErr = DownloadFileWithProgress(srv.URL, "img", dest, 0) + }) + require.NoError(t, dlErr) + + got, err := os.ReadFile(dest) + require.NoError(t, err) + require.True(t, bytes.Equal(payload, got), "downloaded file differs from served payload") + + require.NotContains(t, out, "\x1b", "plain output carries an escape sequence") + require.NotContains(t, out, "\r", "plain output redraws a line") + lines := strings.Split(strings.TrimRight(out, "\n"), "\n") + require.Equal(t, []string{tt.wantStart, "Downloaded img (2.0 MiB)"}, lines) + }) + } +} diff --git a/spinifex/operator/progress/progress.go b/spinifex/operator/progress/progress.go index 5971bd874..ce1e44075 100644 --- a/spinifex/operator/progress/progress.go +++ b/spinifex/operator/progress/progress.go @@ -47,6 +47,12 @@ func DownloadFileWithProgress(url, name, filename string, timeout time.Duration) } defer f.Close() + // The bar and spinner write cursor escapes and per-write lines even with + // styling disabled, so plain output gets one start and one done line. + if pterm.RawOutput { + return downloadPlain(f, resp.Body, name, resp.ContentLength) + } + if resp.ContentLength > 0 { total := safecast.Int64ToUint64(resp.ContentLength) bar, update := NewByteProgressBar(fmt.Sprintf("Downloading %s", name), total) @@ -87,6 +93,21 @@ func DownloadFileWithProgress(url, name, filename string, timeout time.Duration) return nil } +func downloadPlain(dst io.Writer, src io.Reader, name string, contentLength int64) error { + size := "size unknown" + if contentLength > 0 { + size = HumanBytes(safecast.Int64ToUint64(contentLength)) + } + pterm.Printfln("Downloading %s (%s) ...", name, size) + + written, err := io.Copy(dst, src) + if err != nil { + return fmt.Errorf("copy error: %w", err) + } + pterm.Printfln("Downloaded %s (%s)", name, HumanBytes(safecast.Int64ToUint64(written))) + return nil +} + // progressWriter turns byte counts into a callback for UI updates. type progressWriter func(n int) diff --git a/spinifex/providers/cloud/oci/apiclient_test.go b/spinifex/providers/cloud/oci/apiclient_test.go index 2be86031f..ac7340350 100644 --- a/spinifex/providers/cloud/oci/apiclient_test.go +++ b/spinifex/providers/cloud/oci/apiclient_test.go @@ -217,3 +217,94 @@ func TestGetPublicIPByPrivateIPIDAsksByPrivateIP(t *testing.T) { assert.Equal(t, "q1", got.ID) assert.Equal(t, "p1", (*seen)[0].body["privateIpId"]) } + +// The subnet read is the allocator's authorisation probe, so the request has to +// address one subnet by OCID. A GET of the collection would answer from a +// different permission and report a credential as working when it is not. +func TestGetSubnetAddressesOneSubnetByOCID(t *testing.T) { + c, seen := testClient(t, func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte(`{"id":"ocid1.subnet.oc1..s1","cidrBlock":"10.200.0.0/23"}`)) + }) + + got, err := c.GetSubnet(context.Background(), "ocid1.subnet.oc1..s1") + require.NoError(t, err) + assert.Equal(t, "ocid1.subnet.oc1..s1", got.ID) + assert.Equal(t, "10.200.0.0/23", got.CIDRBlock) + require.Len(t, *seen, 1) + assert.Equal(t, http.MethodGet, (*seen)[0].method) + assert.Equal(t, "/20160918/subnets/ocid1.subnet.oc1..s1", (*seen)[0].path) +} + +// A subnet with no CIDR is not an error: the probe only needs the call to be +// authorised, and treating a sparse response as a failure would report a +// working credential as broken. +func TestGetSubnetKeepsTheOCIDWhenTheBodyHasNoCIDR(t *testing.T) { + c, _ := testClient(t, func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte(`{"id":"ocid1.subnet.oc1..s1"}`)) + }) + + got, err := c.GetSubnet(context.Background(), "ocid1.subnet.oc1..s1") + require.NoError(t, err) + assert.Equal(t, "ocid1.subnet.oc1..s1", got.ID) + assert.Empty(t, got.CIDRBlock) +} + +// The 404 OCI returns for an unauthorised call has to arrive as ErrNotFound, or +// the allocator's check cannot tell it from a transport failure and would retry +// a verdict that will never change. +func TestGetSubnetMapsTheUnauthorisedFourOhFour(t *testing.T) { + c, _ := testClient(t, func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusNotFound) + _, _ = w.Write([]byte(`{"code":"NotAuthorizedOrNotFound","message":"Authorization failed or requested resource not found."}`)) + }) + + _, err := c.GetSubnet(context.Background(), "ocid1.subnet.oc1..s1") + require.Error(t, err) + assert.ErrorIs(t, err, oci.ErrNotFound) + assert.Contains(t, err.Error(), "GetSubnet") +} + +// The only call that can see an address no VNIC references. Both filters are +// load bearing: without REGION scope it answers for one availability domain, +// and without RESERVED it returns ephemeral addresses nothing may delete. +func TestListReservedPublicIPsFiltersToReservedRegionalAndPages(t *testing.T) { + page := 0 + c, seen := testClient(t, func(w http.ResponseWriter, _ *http.Request) { + page++ + if page == 1 { + w.Header().Set("Opc-Next-Page", "p2") + _, _ = w.Write([]byte(`[{"id":"q1","ipAddress":"203.0.113.1","lifecycleState":"AVAILABLE","lifetime":"RESERVED","timeCreated":"2026-10-01T00:00:00.000Z"}]`)) + return + } + _, _ = w.Write([]byte(`[{"id":"q2","ipAddress":"203.0.113.2","lifecycleState":"ASSIGNED","lifetime":"RESERVED"}]`)) + }) + + got, err := c.ListReservedPublicIPs(context.Background(), "ocid1.compartment.oc1..c1") + require.NoError(t, err) + + require.Len(t, got, 2) + assert.Equal(t, "q1", got[0].ID) + assert.Equal(t, "q2", got[1].ID) + assert.Equal(t, 2026, got[0].TimeCreated.Year(), "the creation time is what the orphan grace period is measured from") + assert.True(t, got[1].TimeCreated.IsZero(), "a response with no creation time must not read as the zero epoch") + + require.Len(t, *seen, 2) + q := (*seen)[0].query + assert.Equal(t, "REGION", q.Get("scope")) + assert.Equal(t, "RESERVED", q.Get("lifetime")) + assert.Equal(t, "ocid1.compartment.oc1..c1", q.Get("compartmentId")) + assert.Equal(t, "p2", (*seen)[1].query.Get("page")) +} + +// A credential without `read public-ips` gets the same 404 as a missing +// compartment, and reconcile distinguishes them by not treating either as fatal. +func TestListReservedPublicIPsMapsTheUnauthorisedFourOhFour(t *testing.T) { + c, _ := testClient(t, func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusNotFound) + _, _ = w.Write([]byte(`{"code":"NotAuthorizedOrNotFound","message":"nope"}`)) + }) + + _, err := c.ListReservedPublicIPs(context.Background(), "ocid1.compartment.oc1..c1") + require.Error(t, err) + assert.ErrorIs(t, err, oci.ErrNotFound) +} diff --git a/spinifex/providers/cloud/oci/client.go b/spinifex/providers/cloud/oci/client.go index a3e4836bd..88c729ef5 100644 --- a/spinifex/providers/cloud/oci/client.go +++ b/spinifex/providers/cloud/oci/client.go @@ -33,6 +33,11 @@ type Client interface { GetPrivateIP(ctx context.Context, privateIPID string) (PrivateIP, error) ListPrivateIPs(ctx context.Context, vnicID string) ([]PrivateIP, error) + // GetSubnet reads one subnet. The allocator calls it at startup to prove + // its credential holds a subnet permission, since AssignPrivateIP needs + // SUBNET_ATTACH from the same verb and is otherwise refused as a 404. + GetSubnet(ctx context.Context, subnetID string) (Subnet, error) + // CreatePublicIP creates a RESERVED public IP in compartmentID and, when // privateIPID is non-empty, attaches it in the same call. CreatePublicIP(ctx context.Context, compartmentID, privateIPID, displayName string) (PublicIP, error) @@ -45,6 +50,10 @@ type Client interface { // GetPublicIPByPrivateIPID returns the public IP attached to a private IP, // or ErrNotFound when it has none. GetPublicIPByPrivateIPID(ctx context.Context, privateIPID string) (PublicIP, error) + // ListReservedPublicIPs lists every reserved regional public IP in the + // compartment. A detached one is on no VNIC, so this is the only call that + // can see an address nothing references but the tenancy quota still counts. + ListReservedPublicIPs(ctx context.Context, compartmentID string) ([]PublicIP, error) } // apiClient is the real implementation over the OCI Go SDK. @@ -56,9 +65,8 @@ var _ Client = (*apiClient)(nil) // NewInstancePrincipalClient authenticates as the instance itself, using the // certificate the metadata service serves at /opc/v2/identity/cert.pem. No key -// material on disk and nothing to rotate, which is why this is the only -// constructor offered for the daemon path — a node that can reach its own -// metadata service is already proving it is the instance it claims to be. +// material on disk and nothing to rotate; the cost is a dynamic group and an IAM +// policy, which only a tenancy admin can write. Selected by oci_auth. func NewInstancePrincipalClient() (Client, error) { provider, err := auth.InstancePrincipalConfigurationProvider() if err != nil { @@ -83,11 +91,8 @@ const DefaultConfigProfile = "DEFAULT" // NewConfigFileClient authenticates from an API-key config file — the same // ~/.oci/config the oci CLI uses. // -// This is the v1 path, deliberately in preference to instance principal. It -// needs no dynamic group and no IAM policy written by a tenancy admin, and it -// never reads the instance metadata service, which matters because Spinifex's -// own per-instance IMDS endpoints claim 169.254.169.254 on the host and take -// the cloud's own metadata service with it. +// The default, because it needs nothing from a tenancy admin. It costs a private +// key on every node, which NewInstancePrincipalClient avoids. func NewConfigFileClient(path, profile string) (Client, error) { if path == "" { path = DefaultConfigFile @@ -192,6 +197,45 @@ func (c *apiClient) ListPrivateIPs(ctx context.Context, vnicID string) ([]Privat } } +func (c *apiClient) ListReservedPublicIPs(ctx context.Context, compartmentID string) ([]PublicIP, error) { + var out []PublicIP + var page *string + for { + resp, err := c.net.ListPublicIps(ctx, core.ListPublicIpsRequest{ + CompartmentId: &compartmentID, + Scope: core.ListPublicIpsScopeRegion, + Lifetime: core.ListPublicIpsLifetimeReserved, + Page: page, + }) + if err != nil { + return nil, wrap("ListReservedPublicIPs", err) + } + for _, item := range resp.Items { + ip, err := toPublicIP(item) + if err != nil { + return nil, err + } + out = append(out, ip) + } + if resp.OpcNextPage == nil { + return out, nil + } + page = resp.OpcNextPage + } +} + +func (c *apiClient) GetSubnet(ctx context.Context, subnetID string) (Subnet, error) { + resp, err := c.net.GetSubnet(ctx, core.GetSubnetRequest{SubnetId: &subnetID}) + if err != nil { + return Subnet{}, wrap("GetSubnet", err) + } + out := Subnet{ID: subnetID} + if resp.CidrBlock != nil { + out.CIDRBlock = *resp.CidrBlock + } + return out, nil +} + func (c *apiClient) CreatePublicIP(ctx context.Context, compartmentID, privateIPID, displayName string) (PublicIP, error) { details := core.CreatePublicIpDetails{ CompartmentId: &compartmentID, @@ -285,6 +329,9 @@ func toPublicIP(p core.PublicIp) (PublicIP, error) { Lifetime: string(p.Lifetime), LifecycleState: string(p.LifecycleState), } + if p.TimeCreated != nil { + out.TimeCreated = p.TimeCreated.Time + } if s := deref(p.IpAddress); s != "" { addr, err := netip.ParseAddr(s) if err != nil { diff --git a/spinifex/providers/cloud/oci/fake.go b/spinifex/providers/cloud/oci/fake.go index efefc15b9..2a0e04d68 100644 --- a/spinifex/providers/cloud/oci/fake.go +++ b/spinifex/providers/cloud/oci/fake.go @@ -7,6 +7,7 @@ import ( "net/netip" "slices" "sync" + "time" ) // Fake is an in-memory Client for tests. It is in the production package @@ -83,6 +84,24 @@ func (f *Fake) PublicIPs() []PublicIP { return slices.Collect(maps.Values(f.publicIPs)) } +// ListReservedPublicIPs returns the fake's RESERVED public IPs. Compartments +// are not modelled, so every reserved IP reads back whatever compartment is +// asked for. Only the lifetime filter is real. +func (f *Fake) ListReservedPublicIPs(_ context.Context, _ string) ([]PublicIP, error) { + f.mu.Lock() + defer f.mu.Unlock() + if err := f.take("ListReservedPublicIPs"); err != nil { + return nil, err + } + var out []PublicIP + for _, p := range f.publicIPs { + if p.Lifetime == LifetimeReserved { + out = append(out, p) + } + } + return out, nil +} + // FailOp stages err for the next call to op. Locked, so a test may stage one // against a Fake that a loop under test is already calling. func (f *Fake) FailOp(op string, err error) { @@ -214,6 +233,18 @@ func (f *Fake) ListPrivateIPs(_ context.Context, vnicID string) ([]PrivateIP, er return out, nil } +// GetSubnet returns a fixed 10.200.0.0/23 subnet: subnets are not modelled, so +// any OCID reads back. FailWith["GetSubnet"] is how a test reproduces the +// credential that holds no subnet permission. +func (f *Fake) GetSubnet(_ context.Context, subnetID string) (Subnet, error) { + f.mu.Lock() + defer f.mu.Unlock() + if err := f.take("GetSubnet"); err != nil { + return Subnet{}, err + } + return Subnet{ID: subnetID, CIDRBlock: "10.200.0.0/23"}, nil +} + func (f *Fake) CreatePublicIP(_ context.Context, compartmentID, privateIPID, displayName string) (PublicIP, error) { f.mu.Lock() defer f.mu.Unlock() @@ -230,6 +261,7 @@ func (f *Fake) CreatePublicIP(_ context.Context, compartmentID, privateIPID, dis DisplayName: displayName, Lifetime: LifetimeReserved, LifecycleState: LifecycleStateAssigned, + TimeCreated: time.Now(), } if privateIPID == "" { p.LifecycleState = LifecycleStateAvailable diff --git a/spinifex/providers/cloud/oci/fake_test.go b/spinifex/providers/cloud/oci/fake_test.go index c9cd4ed04..6c33b5875 100644 --- a/spinifex/providers/cloud/oci/fake_test.go +++ b/spinifex/providers/cloud/oci/fake_test.go @@ -205,3 +205,48 @@ func TestFakeSeedHelpersExposeStateReconcileTestsNeed(t *testing.T) { assert.Len(t, f.PublicIPs(), 1) assert.True(t, f.PrivateIPs()[0].IsPrimary) } + +// Subnets are not modelled, so the fake reads any OCID back. What matters is +// that FailWith reaches it, because a credential holding no subnet permission is +// the only way the allocator's authorisation check can fail usefully. +func TestFakeGetSubnetReadsBackAndHonoursFailWith(t *testing.T) { + ctx := context.Background() + f := oci.NewFake() + + got, err := f.GetSubnet(ctx, "ocid1.subnet.oc1..s1") + require.NoError(t, err) + assert.Equal(t, "ocid1.subnet.oc1..s1", got.ID) + assert.NotEmpty(t, got.CIDRBlock) + + denied := errors.New("NotAuthorizedOrNotFound") + f.FailWith["GetSubnet"] = denied + _, err = f.GetSubnet(ctx, "ocid1.subnet.oc1..s1") + assert.ErrorIs(t, err, denied) +} + +// The fake's list has to honour the lifetime filter, or a test asserting that +// reconcile leaves ephemeral addresses alone would pass for the wrong reason. +func TestFakeListReservedPublicIPsReturnsOnlyReservedOnes(t *testing.T) { + ctx := context.Background() + f := oci.NewFake() + f.SeedPublicIP(oci.PublicIP{ID: "q-reserved", Lifetime: oci.LifetimeReserved}) + f.SeedPublicIP(oci.PublicIP{ID: "q-ephemeral", Lifetime: "EPHEMERAL"}) + + got, err := f.ListReservedPublicIPs(ctx, "any-compartment") + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, "q-reserved", got[0].ID) + + f.FailWith["ListReservedPublicIPs"] = oci.ErrNotFound + _, err = f.ListReservedPublicIPs(ctx, "any-compartment") + assert.ErrorIs(t, err, oci.ErrNotFound) +} + +// CreatePublicIP has to date what it makes, or every address it creates is +// immediately eligible for the orphan sweep. +func TestFakeCreatePublicIPDatesTheAddress(t *testing.T) { + f := oci.NewFake() + p, err := f.CreatePublicIP(context.Background(), "c1", "", "spinifex-eni-1") + require.NoError(t, err) + assert.False(t, p.TimeCreated.IsZero()) +} diff --git a/spinifex/providers/cloud/oci/types.go b/spinifex/providers/cloud/oci/types.go index f54f27394..e92152458 100644 --- a/spinifex/providers/cloud/oci/types.go +++ b/spinifex/providers/cloud/oci/types.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" "net/netip" + "time" ) // PrivateIP is a VCN private IP object on a VNIC. The OCID, not the address, @@ -35,6 +36,14 @@ type PrivateIP struct { IsPrimary bool } +// Subnet is the VCN subnet a VNIC's private IPs live in. Reading one is the +// cheapest call needing a subnet permission, which is why the allocator uses it +// to prove its credential: CreatePrivateIp is refused without SUBNET_ATTACH. +type Subnet struct { + ID string + CIDRBlock string +} + // PublicIP is an OCI public IP object. PrivateIPID is empty when the address // is reserved but not currently attached to anything — the state an allocated // but unassociated AWS EIP maps onto. @@ -45,6 +54,9 @@ type PublicIP struct { DisplayName string Lifetime string LifecycleState string + // TimeCreated is how a detached address is told from one still being + // attached, since both report no private IP and only age separates them. + TimeCreated time.Time } // IsAssigned reports whether the public IP has finished provisioning and is diff --git a/spinifex/providers/ebs/errors.go b/spinifex/providers/ebs/errors.go index 925cd7757..ed17ec88d 100644 --- a/spinifex/providers/ebs/errors.go +++ b/spinifex/providers/ebs/errors.go @@ -28,6 +28,8 @@ var ( ErrUnavailable = errors.New("provider is temporarily unable to answer") ) +// ErrorCode is the wire form of a provider error in ProviderError. Unwrap maps +// every code but internal back to the matching Err sentinel. type ErrorCode string const ( diff --git a/spinifex/providers/ebs/memory.go b/spinifex/providers/ebs/memory.go index 3cfb87ec8..11c485cba 100644 --- a/spinifex/providers/ebs/memory.go +++ b/spinifex/providers/ebs/memory.go @@ -31,6 +31,8 @@ type memoryVolume struct { var _ EBSProvider = (*MemoryProvider)(nil) +// NewMemoryProvider returns an empty in-process provider advertising +// capabilities. An unset exclusion scope is filled in as ExclusionScopeNode. func NewMemoryProvider(capabilities Capabilities) *MemoryProvider { // Publication lives in this process's map, so node is what this provider // does whatever the caller passed. An unset scope is filled rather than diff --git a/spinifex/providers/ebs/nats.go b/spinifex/providers/ebs/nats.go index f784602df..ea48bfda0 100644 --- a/spinifex/providers/ebs/nats.go +++ b/spinifex/providers/ebs/nats.go @@ -92,6 +92,9 @@ func SnapshotSubject(volumeID string) (string, error) { return SnapshotCreateSubjectPrefix + volumeID, nil } +// SnapshotCompletionSubject returns the subject the provider publishes a +// snapshot's final CreateSnapshotResponse on once its data is captured. It +// fails with ErrInvalidArgument if snapshotID is not a valid subject token. func SnapshotCompletionSubject(snapshotID string) (string, error) { if err := validateSubjectToken(snapshotID); err != nil { return "", err @@ -99,6 +102,8 @@ func SnapshotCompletionSubject(snapshotID string) (string, error) { return "ebs.provider.v1.snapshot.response." + snapshotID, nil } +// PublishSubject returns nodeID's per-node mount subject +// (ebs.provider.v1..mount), which serves PublishVolume on that node. func PublishSubject(nodeID string) (string, error) { if err := validateSubjectToken(nodeID); err != nil { return "", err @@ -106,6 +111,8 @@ func PublishSubject(nodeID string) (string, error) { return subjectPrefix + nodeID + ".mount", nil } +// UnpublishSubject returns nodeID's per-node unmount subject +// (ebs.provider.v1..unmount), which serves UnpublishVolume on that node. func UnpublishSubject(nodeID string) (string, error) { if err := validateSubjectToken(nodeID); err != nil { return "", err @@ -137,18 +144,26 @@ func OwnerSubject(volumeID, verb string) (string, error) { return ownerSubjectPrefix + volumeID + "." + verb, nil } +// SnapshotCreateOwnerSubject returns the owner-routed CreateSnapshot subject +// for volumeID; see OwnerSubject. func SnapshotCreateOwnerSubject(volumeID string) (string, error) { return OwnerSubject(volumeID, verbSnapshotCreate) } +// SnapshotCopyOwnerSubject returns the owner-routed CopySnapshot subject for +// volumeID, the snapshot's source volume; see OwnerSubject. func SnapshotCopyOwnerSubject(volumeID string) (string, error) { return OwnerSubject(volumeID, verbSnapshotCopy) } +// ExpandVolumeOwnerSubject returns the owner-routed ExpandVolume subject for +// volumeID; see OwnerSubject. func ExpandVolumeOwnerSubject(volumeID string) (string, error) { return OwnerSubject(volumeID, verbVolumeExpand) } +// GetVolumeOwnerSubject returns the owner-routed GetVolume subject for +// volumeID; see OwnerSubject. func GetVolumeOwnerSubject(volumeID string) (string, error) { return OwnerSubject(volumeID, verbVolumeDescribe) } @@ -184,6 +199,8 @@ type NATSProvider struct { var _ EBSProvider = (*NATSProvider)(nil) +// NewNATSProvider returns a provider client over conn. A non-positive +// requestTimeout takes the 30s default; data-moving subjects get at least 180s. func NewNATSProvider(conn *nats.Conn, requestTimeout time.Duration) *NATSProvider { if requestTimeout <= 0 { requestTimeout = defaultRequestTimeout diff --git a/spinifex/providers/ebs/natsserve/server_test.go b/spinifex/providers/ebs/natsserve/server_test.go index 6462a27c6..7effaece2 100644 --- a/spinifex/providers/ebs/natsserve/server_test.go +++ b/spinifex/providers/ebs/natsserve/server_test.go @@ -20,7 +20,6 @@ func spansByKind(t *testing.T, recorder *tracetest.SpanRecorder) (client, server t.Helper() client, server = testutil.SpansByKind(t, recorder) require.NotNil(t, client, "no client span recorded") - require.NotNil(t, server, "no server span recorded") return client, server } diff --git a/spinifex/providers/ebs/provider.go b/spinifex/providers/ebs/provider.go index cb855cf78..55d2d4b1c 100644 --- a/spinifex/providers/ebs/provider.go +++ b/spinifex/providers/ebs/provider.go @@ -20,6 +20,8 @@ type Versioned struct { SchemaVersion uint16 `json:"schema_version"` } +// NewVersioned returns a Versioned stamped with this build's SchemaVersion, for +// embedding in an outgoing request or response. func NewVersioned() Versioned { return Versioned{SchemaVersion: SchemaVersion} } // EBSProvider is the block-storage controller contract consumed by Spinifex. @@ -132,8 +134,12 @@ func (e ExclusionSemantics) SingleWriter() bool { return e.Scope == ExclusionScopeCluster } +// GetCapabilitiesRequest asks the provider what it supports, over +// CapabilitiesSubject. type GetCapabilitiesRequest struct{ Versioned } +// GetCapabilitiesResponse is the reply to GetCapabilitiesRequest. A non-nil +// Error means Capabilities is not set. type GetCapabilitiesResponse struct { Versioned @@ -148,6 +154,7 @@ type CapacityRange struct { LimitBytes int64 `json:"limit_bytes,omitempty"` } +// VolumeState is a volume's attachment state, using the EC2 volume state names. type VolumeState string const ( @@ -171,6 +178,8 @@ type Volume struct { // inside the 1MB NATS max_payload the cluster runs with. const MaxSeedBytes = 640 * 1024 +// CreateVolumeRequest creates VolumeID, empty or from SourceSnapshotID, over +// CreateVolumeSubject. Parameters are provider-specific and passed through opaque. type CreateVolumeRequest struct { Versioned @@ -201,6 +210,8 @@ func ValidateSeedData(seed []byte) error { return nil } +// CreateVolumeResponse is the reply to CreateVolumeRequest: the created volume, +// or Error. type CreateVolumeResponse struct { Versioned @@ -208,6 +219,8 @@ type CreateVolumeResponse struct { Error *ProviderError `json:"error,omitempty"` } +// GetVolumeRequest describes one volume over GetVolumeSubject. Handle, when +// set, is the opaque handle the provider returned at create. type GetVolumeRequest struct { Versioned @@ -215,6 +228,7 @@ type GetVolumeRequest struct { Handle string `json:"handle,omitempty"` } +// GetVolumeResponse is the reply to GetVolumeRequest: the volume, or Error. type GetVolumeResponse struct { Versioned @@ -263,6 +277,7 @@ func (r ListVolumesRequest) PageSize() int32 { return r.MaxResults } +// ExpandVolumeRequest grows a volume to CapacityRange over ExpandVolumeSubject. type ExpandVolumeRequest struct { Versioned @@ -271,6 +286,8 @@ type ExpandVolumeRequest struct { CapacityRange CapacityRange `json:"capacity_range"` } +// ExpandVolumeResponse is the reply to ExpandVolumeRequest: the resized volume, +// or Error. type ExpandVolumeResponse struct { Versioned @@ -278,6 +295,8 @@ type ExpandVolumeResponse struct { Error *ProviderError `json:"error,omitempty"` } +// DeleteVolumeRequest deletes a volume over DeleteVolumeSubject. Deleting a +// volume that does not exist succeeds; a published one fails as in use. type DeleteVolumeRequest struct { Versioned @@ -285,12 +304,16 @@ type DeleteVolumeRequest struct { Handle string `json:"handle,omitempty"` } +// DeleteVolumeResponse is the reply to DeleteVolumeRequest. A nil Error means +// the volume is gone. type DeleteVolumeResponse struct { Versioned Error *ProviderError `json:"error,omitempty"` } +// SnapshotState is a snapshot's lifecycle state, using the EC2 snapshot state +// names. type SnapshotState string const ( @@ -299,6 +322,8 @@ const ( SnapshotStateError SnapshotState = "error" ) +// Snapshot is the provider-neutral view of a snapshot. Handle is opaque and +// must be passed back uninterpreted. type Snapshot struct { ID string `json:"id"` SourceVolumeID string `json:"source_volume_id"` @@ -308,6 +333,8 @@ type Snapshot struct { Handle string `json:"handle"` } +// CreateSnapshotRequest snapshots VolumeID as SnapshotID. It is sent to the +// volume's owner node first, then to SnapshotSubject. type CreateSnapshotRequest struct { Versioned @@ -328,6 +355,7 @@ type CreateSnapshotResponse struct { Error *ProviderError `json:"error,omitempty"` } +// DeleteSnapshotRequest deletes a snapshot over DeleteSnapshotSubject. type DeleteSnapshotRequest struct { Versioned @@ -335,6 +363,8 @@ type DeleteSnapshotRequest struct { Handle string `json:"handle,omitempty"` } +// DeleteSnapshotResponse is the reply to DeleteSnapshotRequest. A nil Error +// means the snapshot is gone. type DeleteSnapshotResponse struct { Versioned @@ -354,6 +384,8 @@ type CopySnapshotRequest struct { VolumeID string `json:"volume_id"` } +// CopySnapshotResponse is the reply to CopySnapshotRequest: the new snapshot, +// or Error. type CopySnapshotResponse struct { Versioned @@ -400,6 +432,8 @@ func (r ListSnapshotsRequest) PageSize() int32 { return r.MaxResults } +// PublishVolumeRequest mounts a volume on NodeID so a VM there can attach it, +// over that node's PublishSubject. type PublishVolumeRequest struct { Versioned @@ -409,12 +443,16 @@ type PublishVolumeRequest struct { ReadOnly bool `json:"read_only,omitempty"` } +// PublishedVolume is where a published volume is served: the NBD URI on NodeID +// that QEMU connects to. type PublishedVolume struct { VolumeID string `json:"volume_id"` NodeID string `json:"node_id"` NBDURI string `json:"nbd_uri"` } +// PublishVolumeResponse is the reply to PublishVolumeRequest: the mount, or +// Error. type PublishVolumeResponse struct { Versioned @@ -422,6 +460,8 @@ type PublishVolumeResponse struct { Error *ProviderError `json:"error,omitempty"` } +// UnpublishVolumeRequest unmounts a volume from NodeID, over that node's +// UnpublishSubject. type UnpublishVolumeRequest struct { Versioned @@ -430,6 +470,8 @@ type UnpublishVolumeRequest struct { NodeID string `json:"node_id"` } +// UnpublishVolumeResponse is the reply to UnpublishVolumeRequest. A nil Error +// means the volume is no longer published on the node. type UnpublishVolumeResponse struct { Versioned diff --git a/spinifex/runtime/compute/gpu/manager.go b/spinifex/runtime/compute/gpu/manager.go index 260464805..7dcf82536 100644 --- a/spinifex/runtime/compute/gpu/manager.go +++ b/spinifex/runtime/compute/gpu/manager.go @@ -1,3 +1,5 @@ +// Package gpu discovers host GPUs, binds them to vfio-pci, manages NVIDIA MIG +// partitions and tracks which instance holds each device for passthrough. package gpu import ( diff --git a/spinifex/runtime/compute/nbd/endpoint_test.go b/spinifex/runtime/compute/nbd/endpoint_test.go index 0e408e02c..6c48db59e 100644 --- a/spinifex/runtime/compute/nbd/endpoint_test.go +++ b/spinifex/runtime/compute/nbd/endpoint_test.go @@ -30,7 +30,9 @@ func TestGenerateSocketFile(t *testing.T) { } func TestWaitForNBDReady(t *testing.T) { + t.Parallel() t.Run("unix socket ready", func(t *testing.T) { + t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "nbd.sock") ln, err := net.Listen("unix", path) @@ -41,6 +43,7 @@ func TestWaitForNBDReady(t *testing.T) { }) t.Run("unix socket times out", func(t *testing.T) { + t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "missing.sock") err := WaitForNBDReady(FormatNBDSocketURI(path), 100*time.Millisecond) @@ -48,6 +51,7 @@ func TestWaitForNBDReady(t *testing.T) { }) t.Run("tcp listener ready", func(t *testing.T) { + t.Parallel() ln, err := net.Listen("tcp", "127.0.0.1:0") require.NoError(t, err) t.Cleanup(func() { _ = ln.Close() }) @@ -60,12 +64,14 @@ func TestWaitForNBDReady(t *testing.T) { }) t.Run("tcp listener times out", func(t *testing.T) { + t.Parallel() // Port 1 is unprivileged-bind reserved; nothing will be listening. err := WaitForNBDReady(FormatNBDTCPURI("127.0.0.1", 1), 100*time.Millisecond) require.Error(t, err) }) t.Run("rejects malformed uri", func(t *testing.T) { + t.Parallel() err := WaitForNBDReady("garbage://nope", time.Second) require.Error(t, err) }) diff --git a/spinifex/runtime/compute/nbd/nbd.go b/spinifex/runtime/compute/nbd/nbd.go index d44ea5582..ad30160b4 100644 --- a/spinifex/runtime/compute/nbd/nbd.go +++ b/spinifex/runtime/compute/nbd/nbd.go @@ -1,3 +1,5 @@ +// Package nbd launches nbdkit processes that serve viperblock volumes as NBD +// exports. package nbd import ( @@ -16,6 +18,9 @@ const ( secretKeyEnv = "VB_SECRET_KEY" //nolint:gosec // G101 false positive: env var name, not a credential value ) +// NBDKitConfig describes one nbdkit process serving a viperblock volume as an +// NBD export over a Unix socket or TCP. S3 credentials reach the child through +// its environment, not argv. type NBDKitConfig struct { Port int `json:"port"` // TCP port (when using TCP transport) Socket string `json:"socket"` // Unix socket path (when using socket transport) diff --git a/spinifex/runtime/compute/qmp/qmp.go b/spinifex/runtime/compute/qmp/qmp.go index b362812b8..793d20288 100644 --- a/spinifex/runtime/compute/qmp/qmp.go +++ b/spinifex/runtime/compute/qmp/qmp.go @@ -1,3 +1,5 @@ +// Package qmp is a client for the QEMU Machine Protocol and the typed responses +// of the QMP commands Spinifex issues. package qmp import ( @@ -55,17 +57,23 @@ type BalloonInfo struct { Actual int64 `json:"actual"` } +// Status is the query-status response: the VM run state (running, paused, +// shutdown and so on) and whether vCPUs are executing. type Status struct { Status string `json:"status"` Singlestep bool `json:"singlestep"` Running bool `json:"running"` } +// QMPQueryBlockResponse is the full query-block reply envelope: the block +// devices, or a QMP error. type QMPQueryBlockResponse struct { Return []BlockDevice `json:"return"` Error *QMPError `json:"error,omitempty"` } +// BlockDevice is one device entry from query-block. Inserted is nil when no +// medium is present, such as an empty CD-ROM drive. type BlockDevice struct { IOStatus string `json:"io-status,omitempty"` Device string `json:"device"` @@ -77,6 +85,8 @@ type BlockDevice struct { Type string `json:"type"` } +// BlockInserted describes the medium inserted in a query-block device: its +// image, driver, cache mode and I/O throttle limits. type BlockInserted struct { IOPSRead int `json:"iops_rd"` IOPSWrite int `json:"iops_wr"` @@ -96,24 +106,30 @@ type BlockInserted struct { Cache BlockCache `json:"cache"` } +// BlockImage is the image backing a query-block medium. VirtualSize is the +// guest-visible size in bytes. type BlockImage struct { VirtualSize int64 `json:"virtual-size"` Filename string `json:"filename"` Format string `json:"format"` } +// BlockCache is a query-block medium's cache mode flags. type BlockCache struct { NoFlush bool `json:"no-flush"` Direct bool `json:"direct"` Writeback bool `json:"writeback"` } +// QMPError is the error object QEMU returns in place of a result, with its +// error class (such as GenericError) and description. type QMPError struct { Class string `json:"class"` Desc string `json:"desc"` } -// QMP greeting on connect. +// QMPGreeting is the banner QEMU sends on connect, carrying its version and +// QMP capabilities. type QMPGreeting struct { QMP struct { Version struct { @@ -126,16 +142,22 @@ type QMPGreeting struct { } `json:"QMP"` } +// QMPCommand is one request sent to QEMU: the command name in Execute and its +// optional arguments. type QMPCommand struct { Execute string `json:"execute"` Arguments map[string]any `json:"arguments,omitempty"` } +// QMPResponse is QEMU's reply to a command. Return is left raw for the caller +// to decode; Error is set instead when the command failed. type QMPResponse struct { Return json.RawMessage `json:"return"` Error *QMPError `json:"error,omitempty"` } +// QMPClient is a connection to one QEMU QMP Unix socket. Mu serializes +// commands on the shared Encoder/Decoder stream. type QMPClient struct { Conn net.Conn Decoder *json.Decoder @@ -156,6 +178,8 @@ type QMPClient struct { // NewQMPClientWithGreetingTimeout. const DefaultGreetingTimeout = 30 * time.Second +// NewQMPClient dials the QMP socket at path and reads the greeting within +// DefaultGreetingTimeout. It does not send qmp_capabilities; callers do. func NewQMPClient(path string) (*QMPClient, error) { return NewQMPClientWithGreetingTimeout(path, DefaultGreetingTimeout) } diff --git a/spinifex/runtime/compute/vm/fence.go b/spinifex/runtime/compute/vm/fence.go index 833998a46..72ad4a00d 100644 --- a/spinifex/runtime/compute/vm/fence.go +++ b/spinifex/runtime/compute/vm/fence.go @@ -13,6 +13,21 @@ import ( // recover the guest" from "another node owns this guest's disks now". const fenceStateReasonCode = "Server.VolumeFenced" +// VolumeFenced reports whether this is the record of an instance a fence +// stopped. It reads the projection because that is where the fence writes the +// reason, and both the node's own VM and the cluster record carry one. +// +// It exists to keep a fenced instance out of every automatic relaunch. A fence +// deliberately does not seal, so the volumes it leaves behind are a state +// nothing has proven mountable, and relaunching is how that becomes permanent. +// Restarting one is an operator's decision made against the volumes. +func VolumeFenced(projection *ec2.Instance) bool { + if projection == nil || projection.StateReason == nil { + return false + } + return aws.StringValue(projection.StateReason.Code) == fenceStateReasonCode +} + // FenceVolume stops the guest running against volumeID on this node, because // the volume's lease has moved and this node is no longer its owner. // diff --git a/spinifex/runtime/compute/vm/fence_test.go b/spinifex/runtime/compute/vm/fence_test.go index 521968eaa..f63c03976 100644 --- a/spinifex/runtime/compute/vm/fence_test.go +++ b/spinifex/runtime/compute/vm/fence_test.go @@ -5,7 +5,9 @@ package vm import ( "testing" + "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -100,6 +102,44 @@ func TestFenceVolume_LeavesATerminalInstanceAlone(t *testing.T) { } } +// TestResumeRecoveryFailed_RefusesAFencedInstance is the relaunch a daemon +// start would otherwise perform. The fence does not seal, so the volumes are a +// state nothing has shown is mountable, and relaunching makes that permanent. +func TestResumeRecoveryFailed_RefusesAFencedInstance(t *testing.T) { + m := NewManagerWithDeps(Deps{NodeID: "node-a"}) + instance := vmUsingVolume("i-fenced", "vol-fenced") + m.Insert(instance) + + m.FenceVolume(t.Context(), "vol-fenced", "lease moved to node-b") + m.goroutineWg.Wait() + + // Older than RestartWindow with the budget already spent, which is the state + // a fence days in the past leaves: the window resets and reports a budget, + // so nothing else in this path would refuse the relaunch. + m.Inspect(instance, func(v *VM) { + v.Health.FirstCrashTime = time.Now().Add(-10 * RestartWindow) + v.Health.CrashCount = MaxRestartsInWindow + 1 + }) + + assert.False(t, m.resumeRecoveryFailed(instance)) + assert.Equal(t, StateError, m.Status(instance), + "a refused resume has to leave the instance where the fence left it") +} + +// The refusal has to be narrower than StateError. A recovery that failed for its +// own reasons is what the restart budget exists for, and reading every error as +// a fence would make StateError permanent for all of them. +func TestResumeRecoveryFailed_StillRetriesAnErrorThatIsNotAFence(t *testing.T) { + m := NewManagerWithDeps(Deps{NodeID: "node-a"}) + instance := vmUsingVolume("i-failed", "vol-failed") + instance.Status = StateError + instance.Instance.StateReason = &ec2.StateReason{Code: aws.String("Server.RecoveryFailed")} + m.Insert(instance) + + assert.True(t, m.resumeRecoveryFailed(instance)) + assert.Equal(t, StatePending, m.Status(instance)) +} + // TestInstanceUsingVolume_MatchesOnAnyAttachedVolume covers the lookup. A guest // is fenced for its data disk as readily as its root, so a match on any // attached volume has to count. diff --git a/spinifex/runtime/compute/vm/lifecycle.go b/spinifex/runtime/compute/vm/lifecycle.go index fba446dfb..47447b3aa 100644 --- a/spinifex/runtime/compute/vm/lifecycle.go +++ b/spinifex/runtime/compute/vm/lifecycle.go @@ -103,10 +103,11 @@ func (m *Manager) Start(ctx context.Context, id string) error { return m.launch(ctx, instance) } -const ( - rebootRunningTimeout = 4 * time.Second - rebootStatusPollInterval = 100 * time.Millisecond -) +const rebootRunningTimeout = 4 * time.Second + +// rebootStatusPollInterval is how often Reboot samples the run state after +// system_reset. A var so tests need not wait out the real interval. +var rebootStatusPollInterval = 100 * time.Millisecond // rebootPowerdownTimeout is how long the guest gets to shut itself down before // it is reset under. Nova's shutdown_timeout, and the same shape as the hard @@ -927,7 +928,7 @@ func removeStaleQMPSocket(path string) error { func dialQMPWithRetry(path string, greetingTimeout time.Duration) (*qmp.QMPClient, error) { deadline := time.Now().Add(qmpDialTimeout) for { - client, err := qmp.NewQMPClientWithGreetingTimeout(path, greetingTimeout) + client, err := qmpDial(path, greetingTimeout) if err == nil { return client, nil } @@ -938,6 +939,10 @@ func dialQMPWithRetry(path string, greetingTimeout time.Duration) (*qmp.QMPClien } } +// qmpDial is a test seam over the single QMP connect+greeting attempt, so a +// test can count how many times dialQMPWithRetry dialled. +var qmpDial = qmp.NewQMPClientWithGreetingTimeout + // isTransientDialError reports whether a QMP connect failed because the listener // is not up yet: connection refused (bound but pre-listen, or a stale dead // inode), the socket momentarily absent between unlink and rebind, or the peer diff --git a/spinifex/runtime/compute/vm/lifecycle_test.go b/spinifex/runtime/compute/vm/lifecycle_test.go index 0165a7056..04ff0e759 100644 --- a/spinifex/runtime/compute/vm/lifecycle_test.go +++ b/spinifex/runtime/compute/vm/lifecycle_test.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "sync" + "sync/atomic" "syscall" "testing" "time" @@ -1437,7 +1438,15 @@ func TestNewQMPClientWithHandshake_RetriesTransientConnect(t *testing.T) { unixLn.SetUnlinkOnClose(false) require.NoError(t, stale.Close()) - stop := startDelayedQMPListener(t, sockPath, 150*time.Millisecond) + var dials atomic.Int32 + orig := qmpDial + t.Cleanup(func() { qmpDial = orig }) + qmpDial = func(path string, greetingTimeout time.Duration) (*qmp.QMPClient, error) { + dials.Add(1) + return orig(path, greetingTimeout) + } + + stop := startDelayedQMPListener(t, sockPath, 60*time.Millisecond) defer stop() instance := &VM{ID: "i-retry", Config: Config{QMPSocket: sockPath}} @@ -1445,6 +1454,8 @@ func TestNewQMPClientWithHandshake_RetriesTransientConnect(t *testing.T) { require.NoError(t, err, "dial must retry past the refused window") require.NotNil(t, client) _ = client.Conn.Close() + assert.Greater(t, dials.Load(), int32(1), + "the first dial must hit the refused window, so success needs a retry") } // startRecordingQMPListener is startWorkingQMPListener with a tally: it counts diff --git a/spinifex/runtime/compute/vm/orphan_qemu_reaper_test.go b/spinifex/runtime/compute/vm/orphan_qemu_reaper_test.go index dec098e18..65aa31d7d 100644 --- a/spinifex/runtime/compute/vm/orphan_qemu_reaper_test.go +++ b/spinifex/runtime/compute/vm/orphan_qemu_reaper_test.go @@ -5,6 +5,7 @@ import ( "os/exec" "sync" "testing" + "time" hostprocess "github.com/mulgadc/spinifex/spinifex/runtime/host/process" "github.com/stretchr/testify/assert" @@ -21,6 +22,7 @@ func newOrphanReaperManager(t *testing.T) (*OrphanQEMUReaper, *fakeStateStore) { } func TestOrphanQEMUReaper(t *testing.T) { + hostprocess.ShortenProcessExitPollForTest(t, 5*time.Millisecond) t.Run("kills live QEMU for a terminated instance and removes its PID file", func(t *testing.T) { reaper, store := newOrphanReaperManager(t) @@ -34,9 +36,9 @@ func TestOrphanQEMUReaper(t *testing.T) { require.NoError(t, hostprocess.WritePidFile(id, pid)) store.terminated[id] = &VM{ID: id, Status: StateTerminated} + t.Cleanup(func() { _ = cmd.Process.Kill(); wg.Wait() }) reaped, err := reaper.Sweep(context.Background()) require.NoError(t, err) - wg.Wait() assert.Equal(t, 1, reaped, "the orphan QEMU for a terminated instance must be reaped") assert.False(t, hostprocess.ProcessAlive(pid), diff --git a/spinifex/runtime/compute/vm/qmp_device.go b/spinifex/runtime/compute/vm/qmp_device.go index 5fa4d325a..a8510c550 100644 --- a/spinifex/runtime/compute/vm/qmp_device.go +++ b/spinifex/runtime/compute/vm/qmp_device.go @@ -38,6 +38,8 @@ type QMPDeviceController struct { var _ DeviceController = (*QMPDeviceController)(nil) +// NewQMPDeviceController returns a DeviceController issuing commands over +// client for instanceID. Its QMP spans start from Background until bound. func NewQMPDeviceController(client *qmp.QMPClient, instanceID string) *QMPDeviceController { return &QMPDeviceController{client: client, instanceID: instanceID} } @@ -150,6 +152,8 @@ type StubCall struct { Args map[string]any } +// NewStubDeviceController returns an empty in-memory DeviceController that +// records every call, for tests. func NewStubDeviceController() *StubDeviceController { return &StubDeviceController{ devices: make(map[string]map[string]any), diff --git a/spinifex/runtime/compute/vm/restore.go b/spinifex/runtime/compute/vm/restore.go index 9f64fd5cc..73de81bf5 100644 --- a/spinifex/runtime/compute/vm/restore.go +++ b/spinifex/runtime/compute/vm/restore.go @@ -249,7 +249,16 @@ func (m *Manager) classifyRestoredInstances() []*VM { // restore relaunches it, spending one restart from the same window a crash // restart spends. Returns false when the window has run out, which is what // keeps a genuinely broken instance from relaunching on every daemon start. +// +// A fenced instance is refused outright rather than budgeted. The window +// forgives on a clock, so days after a fence it reports a full budget and would +// relaunch a guest against volumes nothing has shown are mountable. func (m *Manager) resumeRecoveryFailed(instance *VM) bool { + if VolumeFenced(instance.Instance) { + slog.Warn("Instance was fenced, so this restore leaves it alone (operator must retry or terminate)", + "instance", instance.ID, "lastNode", instance.LastNode) + return false + } if !rollRestartWindow(instance, time.Now()) { return false } diff --git a/spinifex/runtime/compute/vm/restore_test.go b/spinifex/runtime/compute/vm/restore_test.go index 2d6980892..349172dae 100644 --- a/spinifex/runtime/compute/vm/restore_test.go +++ b/spinifex/runtime/compute/vm/restore_test.go @@ -274,6 +274,7 @@ func spawnLiveChild(t *testing.T) int { // guest can outlive the daemon when it refuses to power down, and reconnecting to // it silently discarded the terminate and re-advertised the instance as running. func TestClassifyRestoredInstances_ShuttingDownWithLiveQEMUTerminates(t *testing.T) { + hostprocess.ShortenProcessExitPollForTest(t, 5*time.Millisecond) m, store, _ := classifyTestManager(t) t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) v := &VM{ID: "i-shutdown-live", Status: StateShuttingDown, InstanceType: "t3.micro"} @@ -292,6 +293,7 @@ func TestClassifyRestoredInstances_ShuttingDownWithLiveQEMUTerminates(t *testing // to Stopped rather than reconnect, so a guest that ignored the power button does // not come back running. func TestClassifyRestoredInstances_StoppingWithLiveQEMUStops(t *testing.T) { + hostprocess.ShortenProcessExitPollForTest(t, 5*time.Millisecond) m, store, _ := classifyTestManager(t) t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) v := &VM{ID: "i-stopping-live", Status: StateStopping, InstanceType: "t3.micro"} @@ -562,6 +564,7 @@ func TestIsInstanceProcessRunning(t *testing.T) { } func TestKillOrphanedQEMU(t *testing.T) { + hostprocess.ShortenProcessExitPollForTest(t, 5*time.Millisecond) t.Run("ReadPidFile fails returns false without kill", func(t *testing.T) { t.Setenv("XDG_RUNTIME_DIR", t.TempDir()) instance := &VM{ID: "i-no-pidfile"} diff --git a/spinifex/runtime/compute/vm/shutdown.go b/spinifex/runtime/compute/vm/shutdown.go index 3ef0065e6..c8aea2c05 100644 --- a/spinifex/runtime/compute/vm/shutdown.go +++ b/spinifex/runtime/compute/vm/shutdown.go @@ -26,14 +26,15 @@ const ( // whose acpid has not started yet never sees the first one, so a single // signal is not a shutdown request — it is a bet on the guest being ready. powerdownResendInterval = 10 * time.Second - // powerdownPollInterval is how often the guest's run state is sampled - // while it shuts down. - powerdownPollInterval = 500 * time.Millisecond // qmpStatusShutdown is the run state QEMU reports once a guest has powered // itself off under -action shutdown=pause: stopped, but not yet gone. qmpStatusShutdown = "shutdown" ) +// powerdownPollInterval is how often the guest's run state is sampled while it +// shuts down. A var so tests need not wait out the real interval. +var powerdownPollInterval = 500 * time.Millisecond + // errPowerdownTimedOut reports a guest still running at the end of its budget. // Callers escalate: Stop to SIGKILL, Reboot to a hard reset. var errPowerdownTimedOut = errors.New("guest did not power down within its budget") diff --git a/spinifex/runtime/compute/vm/shutdown_test.go b/spinifex/runtime/compute/vm/shutdown_test.go index 0513a103b..410c5fec5 100644 --- a/spinifex/runtime/compute/vm/shutdown_test.go +++ b/spinifex/runtime/compute/vm/shutdown_test.go @@ -1473,7 +1473,7 @@ func TestShutdownAndUnmount_PIDFileRemovedBeforeTimeout_NoForceKill(t *testing.T m := NewManagerWithDeps(Deps{VolumeMounter: mounter}) go func() { - time.Sleep(150 * time.Millisecond) + time.Sleep(20 * time.Millisecond) _ = hostprocess.RemovePidFile("i-pid-removed") }() diff --git a/spinifex/runtime/compute/vm/stuck_terminate_reaper_test.go b/spinifex/runtime/compute/vm/stuck_terminate_reaper_test.go index 2ed660271..866ff0569 100644 --- a/spinifex/runtime/compute/vm/stuck_terminate_reaper_test.go +++ b/spinifex/runtime/compute/vm/stuck_terminate_reaper_test.go @@ -23,6 +23,7 @@ func newStuckTerminateReaper(t *testing.T, cleaner InstanceCleaner) (*StuckTermi } func TestStuckTerminateReaper(t *testing.T) { + hostprocess.ShortenProcessExitPollForTest(t, 5*time.Millisecond) t.Run("force-completes a terminate wedged past the timeout, reclaiming DoT volume space", func(t *testing.T) { cleaner := &recordingInstanceCleaner{} reaper, store := newStuckTerminateReaper(t, cleaner) @@ -46,9 +47,9 @@ func TestStuckTerminateReaper(t *testing.T) { ShuttingDownAt: time.Now().Add(-(stuckTerminateTimeout + time.Minute)), }) + t.Cleanup(func() { _ = cmd.Process.Kill(); wg.Wait() }) reaped, err := reaper.Sweep(context.Background()) require.NoError(t, err) - wg.Wait() assert.Equal(t, 1, reaped, "a terminate wedged past the timeout must be force-completed") assert.False(t, hostprocess.ProcessAlive(pid), "the wedged QEMU must be force-killed") diff --git a/spinifex/runtime/compute/vm/vm.go b/spinifex/runtime/compute/vm/vm.go index 9e2cb7138..2bafacf7e 100644 --- a/spinifex/runtime/compute/vm/vm.go +++ b/spinifex/runtime/compute/vm/vm.go @@ -1,3 +1,6 @@ +// Package vm manages the QEMU virtual machines on a node: their lifecycle, +// devices, volumes and ENIs, plus the crash recovery and reapers that clean +// up after them. package vm import ( @@ -80,6 +83,9 @@ const ( DesiredStopped DesiredState = "stopped" ) +// VM is one EC2 instance on this node: its observed and desired state, QEMU +// Config, attached volumes and ENIs, and the EC2 API records returned for it. +// It is persisted as JSON, minus the live QMPClient and unexported fields. type VM struct { ID string `json:"id"` Status InstanceState `json:"status"` @@ -307,14 +313,18 @@ func (v *VM) IsTerminationProtected() bool { return aws.BoolValue(v.RunInstancesInput.DisableApiTermination) } +// NetDev is one QEMU -netdev argument, rendered verbatim from Value. type NetDev struct { Value string `json:"value"` } +// Device is one QEMU -device argument, rendered verbatim from Value. type Device struct { Value string `json:"value"` } +// Drive is one QEMU -drive entry, used for boot, EFI and pflash firmware +// drives. Each set field becomes a key=value option. type Drive struct { File string `json:"file"` Format string `json:"format"` @@ -338,6 +348,8 @@ type Drive struct { ReadOnly bool `json:"readonly,omitempty"` } +// IOThread is one QEMU iothread object (-object iothread,id=ID) a device can +// run its I/O on. type IOThread struct { ID string `json:"id"` } @@ -352,6 +364,8 @@ type Blockdev struct { Value string `json:"value"` } +// Config is the QEMU command line for one instance, built by Execute. Memory +// is in MiB. type Config struct { Name string `json:"name"` PIDFile string `json:"pid_file"` diff --git a/spinifex/runtime/compute/vm/volumes_test.go b/spinifex/runtime/compute/vm/volumes_test.go index 29049d4c4..348e86c0f 100644 --- a/spinifex/runtime/compute/vm/volumes_test.go +++ b/spinifex/runtime/compute/vm/volumes_test.go @@ -707,6 +707,9 @@ func TestReboot_QMPFailureSurfacesError(t *testing.T) { // that needs cont before its vCPUs run again. func TestReboot_ResumesPausedRunstates(t *testing.T) { pausingGuest(t) + previous := rebootStatusPollInterval + rebootStatusPollInterval = 5 * time.Millisecond + t.Cleanup(func() { rebootStatusPollInterval = previous }) for _, runstate := range []string{"paused", "prelaunch"} { t.Run(runstate, func(t *testing.T) { recorder := &qmpRecorder{} @@ -1498,7 +1501,7 @@ func TestDetachVolume_WaitsForDeviceDeletedBeforeBlockdevDel(t *testing.T) { }, }) - const releaseDelay = 100 * time.Millisecond + const releaseDelay = 20 * time.Millisecond go func() { time.Sleep(releaseDelay) close(releaseEvent) @@ -1640,6 +1643,9 @@ func TestReboot_WedgedGuestFallsBackToHardReset(t *testing.T) { previous := rebootPowerdownTimeout rebootPowerdownTimeout = 30 * time.Millisecond t.Cleanup(func() { rebootPowerdownTimeout = previous }) + previousPoll := powerdownPollInterval + powerdownPollInterval = 5 * time.Millisecond + t.Cleanup(func() { powerdownPollInterval = previousPoll }) recorder := &qmpRecorder{} qmpClient, cancel := newMockQMPClient(t, func(cmd qmp.QMPCommand) map[string]any { diff --git a/spinifex/runtime/compute/vm/watchdog_test.go b/spinifex/runtime/compute/vm/watchdog_test.go index 386c77cee..f4590d3a9 100644 --- a/spinifex/runtime/compute/vm/watchdog_test.go +++ b/spinifex/runtime/compute/vm/watchdog_test.go @@ -187,9 +187,9 @@ func TestGoleakParsesElidedFrameStacks(t *testing.T) { <-ready assert.NotPanics(t, func() { - // Find legitimately reports the parked goroutine as a leak; - // only a panic escaping the call is a failure here. - _ = goleak.Find() + // Ignoring the parked goroutine still parses its whole stack, but stops + // Find retrying it as a leak; only an escaping panic is a failure here. + _ = goleak.Find(goleak.IgnoreAnyFunction("github.com/mulgadc/spinifex/spinifex/runtime/compute/vm.deepRecurse")) }) close(block) diff --git a/spinifex/runtime/formation/formation.go b/spinifex/runtime/formation/formation.go index 9fbb9e954..15ff11dd4 100644 --- a/spinifex/runtime/formation/formation.go +++ b/spinifex/runtime/formation/formation.go @@ -1,3 +1,6 @@ +// Package formation coordinates cluster formation: an HTTPS server that nodes +// join with a token, which hands each the shared credentials and the topology +// of the formed cluster. package formation import ( diff --git a/spinifex/runtime/host/command/command.go b/spinifex/runtime/host/command/command.go index 71c4fbc0b..2a75bf5dc 100644 --- a/spinifex/runtime/host/command/command.go +++ b/spinifex/runtime/host/command/command.go @@ -12,10 +12,10 @@ import ( "time" ) -const ( - commandOutputLimit = 64 * 1024 - commandWaitDelay = time.Second -) +const commandOutputLimit = 64 * 1024 + +// commandWaitDelay is a var only so tests can shorten the wait for output holders. +var commandWaitDelay = time.Second // RunCommandWithTimeout runs a host command with bounded output and execution. // The command gets its own process group so timeout cleanup also kills child diff --git a/spinifex/runtime/host/command/command_test.go b/spinifex/runtime/host/command/command_test.go index c8ca9f942..fa92bd029 100644 --- a/spinifex/runtime/host/command/command_test.go +++ b/spinifex/runtime/host/command/command_test.go @@ -33,6 +33,10 @@ func TestRunCommandWithTimeoutKillsProcessGroup(t *testing.T) { } func TestRunCommandWithTimeoutKillsDetachedOutputHolder(t *testing.T) { + prev := commandWaitDelay + commandWaitDelay = 100 * time.Millisecond + t.Cleanup(func() { commandWaitDelay = prev }) + started := time.Now() output, err := RunCommandWithTimeout(5*time.Second, "sh", "-c", "sleep 10 & echo child=$!") if !errors.Is(err, exec.ErrWaitDelay) { diff --git a/spinifex/runtime/host/process/pidfile.go b/spinifex/runtime/host/process/pidfile.go index c20bb81c0..6ba2bca8d 100644 --- a/spinifex/runtime/host/process/pidfile.go +++ b/spinifex/runtime/host/process/pidfile.go @@ -7,10 +7,14 @@ import ( "os" "path/filepath" "strconv" + "sync/atomic" "syscall" + "testing" "time" ) +// ReadPidFile reads the PID from .pid in RuntimeDir. A missing file +// returns the os.ReadFile error, so callers can treat it as not running. func ReadPidFile(name string) (int, error) { pidPath := RuntimeDir() @@ -25,6 +29,8 @@ func ReadPidFile(name string) (int, error) { return strconv.Atoi(string(pidFile)) } +// GeneratePidFile returns the path of .pid in RuntimeDir without touching +// the filesystem. It errors if name is empty. func GeneratePidFile(name string) (string, error) { if name == "" { return "", errors.New("name is required") @@ -39,6 +45,8 @@ func GeneratePidFile(name string) (string, error) { return filepath.Join(pidPath, fmt.Sprintf("%s.pid", name)), nil } +// WritePidFile writes pid to .pid in RuntimeDir, truncating any existing +// file. Use WritePidFileTo for a per-service directory. func WritePidFile(name string, pid int) error { pidFilename, err := GeneratePidFile(name) @@ -125,6 +133,8 @@ func StopProcessAt(dir string, name string) error { return killErr } +// RemovePidFile deletes .pid from RuntimeDir. A missing file is +// returned as an error. func RemovePidFile(serviceName string) error { pidPath := RuntimeDir() @@ -150,9 +160,12 @@ func RuntimeDir() string { // WaitForProcessExit polls until the PID is no longer alive or timeout expires. // Uses kill(pid,0) — works after SIGKILL where the process can't clean up its PID file. func WaitForProcessExit(pid int, timeout time.Duration) error { + if !processAlive(pid) { + return nil + } timer := time.NewTimer(timeout) defer timer.Stop() - ticker := time.NewTicker(100 * time.Millisecond) + ticker := time.NewTicker(time.Duration(processExitPollNanos.Load())) defer ticker.Stop() for { @@ -160,17 +173,32 @@ func WaitForProcessExit(pid int, timeout time.Duration) error { case <-timer.C: return fmt.Errorf("timeout waiting for process %d to exit", pid) case <-ticker.C: - proc, err := os.FindProcess(pid) - if err != nil { - return nil // process gone - } - if proc.Signal(syscall.Signal(0)) != nil { - return nil // process no longer alive + if !processAlive(pid) { + return nil } } } } +// processExitPollNanos is how often WaitForProcessExit checks the PID. Atomic so a +// test in another package can shorten it while earlier tests' waiters still run. +var processExitPollNanos atomic.Int64 + +func init() { processExitPollNanos.Store(int64(100 * time.Millisecond)) } + +// ShortenProcessExitPollForTest shortens the WaitForProcessExit poll for one test. +func ShortenProcessExitPollForTest(tb testing.TB, d time.Duration) { + tb.Helper() + prev := processExitPollNanos.Swap(int64(d)) + tb.Cleanup(func() { processExitPollNanos.Store(prev) }) +} + +// processAlive reports whether kill(pid,0) still reaches the process. +func processAlive(pid int) bool { + proc, err := os.FindProcess(pid) + return err == nil && proc.Signal(syscall.Signal(0)) == nil +} + // WaitForPidFile polls until QEMU writes its pidfile or the timeout expires. // A short poll avoids premature failure cascades under recovery load while keeping fast-start latency. func WaitForPidFile(instanceID string, timeout time.Duration) (int, error) { @@ -204,7 +232,12 @@ func WaitForUnixSocket(path string, timeout time.Duration) error { } } +// WaitForPidFileRemoval polls every 100ms until .pid in RuntimeDir +// can no longer be read, erroring after timeout. An absent file returns at once. func WaitForPidFileRemoval(instanceID string, timeout time.Duration) error { + if _, err := ReadPidFile(instanceID); err != nil { + return nil + } timeoutCh := time.After(timeout) ticker := time.NewTicker(100 * time.Millisecond) defer ticker.Stop() diff --git a/spinifex/runtime/host/process/pidfile_test.go b/spinifex/runtime/host/process/pidfile_test.go index 7aa7ab72c..eb9f142a5 100644 --- a/spinifex/runtime/host/process/pidfile_test.go +++ b/spinifex/runtime/host/process/pidfile_test.go @@ -100,7 +100,9 @@ func TestExecProcessAndKill(t *testing.T) { } func TestWaitForPidFile(t *testing.T) { + t.Parallel() t.Run("returns pid when file appears within timeout", func(t *testing.T) { + t.Parallel() const name = "wait-pidfile-appears" _ = RemovePidFile(name) t.Cleanup(func() { _ = RemovePidFile(name) }) @@ -116,6 +118,7 @@ func TestWaitForPidFile(t *testing.T) { }) t.Run("returns error when timeout expires", func(t *testing.T) { + t.Parallel() const name = "wait-pidfile-missing" _ = RemovePidFile(name) @@ -124,6 +127,7 @@ func TestWaitForPidFile(t *testing.T) { }) t.Run("returns immediately when file already present", func(t *testing.T) { + t.Parallel() const name = "wait-pidfile-present" require.NoError(t, WritePidFile(name, 7777)) t.Cleanup(func() { _ = RemovePidFile(name) }) @@ -136,8 +140,19 @@ func TestWaitForPidFile(t *testing.T) { }) } +func TestWaitForPidFileRemoval_AlreadyGoneReturnsBeforeFirstPoll(t *testing.T) { + t.Parallel() + const name = "wait-pidfile-removal-absent" + _ = RemovePidFile(name) + + // The poll ticks every 100ms, so this timeout fails unless absence is seen up front. + require.NoError(t, WaitForPidFileRemoval(name, 20*time.Millisecond)) +} + func TestWaitForUnixSocket(t *testing.T) { + t.Parallel() t.Run("returns nil when socket appears within timeout", func(t *testing.T) { + t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "appears.sock") @@ -149,6 +164,7 @@ func TestWaitForUnixSocket(t *testing.T) { }) t.Run("returns error when timeout expires", func(t *testing.T) { + t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "missing.sock") @@ -157,6 +173,7 @@ func TestWaitForUnixSocket(t *testing.T) { }) t.Run("waits for socket created after a delay", func(t *testing.T) { + t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "delayed.sock") @@ -435,18 +452,20 @@ func TestReadPidFileFrom_EmptyDir(t *testing.T) { } func TestWaitForProcessExit_ProcessAlreadyDead(t *testing.T) { + t.Parallel() cmd := exec.Command("true") require.NoError(t, cmd.Start()) pid := cmd.Process.Pid require.NoError(t, cmd.Wait()) - // `true` has exited and been reaped — WaitForProcessExit should return - // nil immediately on the first tick. - err := WaitForProcessExit(pid, 2*time.Second) + // `true` has exited and been reaped. A timeout shorter than one poll fails + // unless WaitForProcessExit checks the PID before its first tick. + err := WaitForProcessExit(pid, time.Duration(processExitPollNanos.Load())/2) assert.NoError(t, err) } func TestWaitForProcessExit_ProcessExitsBeforeTimeout(t *testing.T) { + t.Parallel() cmd := exec.Command("sleep", "0.1") require.NoError(t, cmd.Start()) pid := cmd.Process.Pid @@ -459,6 +478,7 @@ func TestWaitForProcessExit_ProcessExitsBeforeTimeout(t *testing.T) { } func TestWaitForProcessExit_Timeout(t *testing.T) { + t.Parallel() cmd := exec.Command("sleep", "30") require.NoError(t, cmd.Start()) defer func() { diff --git a/spinifex/runtime/host/process/process.go b/spinifex/runtime/host/process/process.go index 0a6b83ac6..197b2f2b1 100644 --- a/spinifex/runtime/host/process/process.go +++ b/spinifex/runtime/host/process/process.go @@ -1,3 +1,5 @@ +// Package process starts, signals and waits on host processes, and manages +// the PID files that track them. package process import ( @@ -87,6 +89,9 @@ const ( killProcessGracePeriod = 120 * time.Second ) +// KillProcess sends SIGTERM to pid and waits up to 120s for it to exit before +// sending SIGKILL. It errors if the process cannot be signaled, including one +// that has already exited. func KillProcess(pid int) error { return killProcessWithTiming(pid, killProcessPollInterval, killProcessGracePeriod) } diff --git a/spinifex/runtime/host/process/process_terminate_test.go b/spinifex/runtime/host/process/process_terminate_test.go index ea643599a..579f39a5b 100644 --- a/spinifex/runtime/host/process/process_terminate_test.go +++ b/spinifex/runtime/host/process/process_terminate_test.go @@ -40,6 +40,7 @@ func TestTerminateProcessReturnsAsSoonAsTheProcessExits(t *testing.T) { // the caller escalates to ForceKillProcess, and can only do that if this // returns. func TestTerminateProcessGivesUpAtTheGraceAndDoesNotKill(t *testing.T) { + t.Parallel() cmd := exec.Command("sh", "-c", "trap '' TERM; echo ready; while true; do sleep 1; done") stdout, err := cmd.StdoutPipe() require.NoError(t, err) diff --git a/spinifex/runtime/roles/awsgw/awsgw.go b/spinifex/runtime/roles/awsgw/awsgw.go index b194de66c..ae673d87f 100644 --- a/spinifex/runtime/roles/awsgw/awsgw.go +++ b/spinifex/runtime/roles/awsgw/awsgw.go @@ -1,3 +1,5 @@ +// Package awsgw runs the AWS gateway service: the TLS, SigV4-authenticated +// endpoint that routes AWS API calls to the service handlers over NATS. package awsgw import ( @@ -68,10 +70,14 @@ func SetBuildInfo(v, c string) { commit = c } +// Service runs the AWS gateway: the TLS, SigV4-authenticated endpoint that +// routes AWS API calls to the service handlers over NATS. type Service struct { Config *config.ClusterConfig } +// New returns the gateway service. cfg must be a *config.ClusterConfig; +// anything else errors. func New(cfg any) (svc *Service, err error) { c, ok := cfg.(*config.ClusterConfig) if !ok { @@ -219,6 +225,9 @@ func launchService(config *config.ClusterConfig) error { return fmt.Errorf("initialize STS service: %w", err) } + // DeleteUser and DeleteRole revoke the deleted principal's sessions through STS. + iamService.SetSessionRevoker(stsService) + // Janitor sweeps expired session credentials. go stsService.RunJanitor(janitorCtx) diff --git a/spinifex/runtime/roles/nats/nats.go b/spinifex/runtime/roles/nats/nats.go index 911994ee0..a2e6ad611 100644 --- a/spinifex/runtime/roles/nats/nats.go +++ b/spinifex/runtime/roles/nats/nats.go @@ -1,3 +1,5 @@ +// Package nats runs the embedded NATS server Spinifex components talk over, +// including the JetStream store reserve that keeps a full disk recoverable. package nats import ( @@ -11,6 +13,9 @@ import ( var serviceName = "nats" +// Config configures the embedded NATS server. A non-empty ConfigFile is used +// on its own and the other fields are ignored; otherwise Port defaults to 4222 +// and Host to 0.0.0.0. type Config struct { ConfigFile string `json:"config_file"` Port int `json:"port"` @@ -21,10 +26,14 @@ type Config struct { JetStream bool `json:"jetstream"` } +// Service runs an embedded NATS server, the message bus every Spinifex +// component talks over. type Service struct { Config *Config } +// New returns the NATS service. config must be a *Config; anything else +// errors. func New(config any) (svc *Service, err error) { cfg, ok := config.(*Config) if !ok { diff --git a/spinifex/runtime/roles/nats/nats_test.go b/spinifex/runtime/roles/nats/nats_test.go index 7a4104aa2..1be99002a 100644 --- a/spinifex/runtime/roles/nats/nats_test.go +++ b/spinifex/runtime/roles/nats/nats_test.go @@ -33,7 +33,9 @@ func TestRenderedConfig_EnforcesAuth(t *testing.T) { tmpDir := t.TempDir() confPath := filepath.Join(tmpDir, "nats.conf") - // Generate test CA and server certs for TLS. + // Generate test CA and server certs for TLS. Key strength is irrelevant to + // what this proves, so skip the slow production key size. + admin.ShortenCertKeyBitsForTest(t, 2048) caCertPath := filepath.Join(tmpDir, "ca.pem") caKeyPath := filepath.Join(tmpDir, "ca.key") require.NoError(t, admin.GenerateCACert(caCertPath, caKeyPath)) diff --git a/spinifex/runtime/roles/northstar/northstar.go b/spinifex/runtime/roles/northstar/northstar.go index 528628b62..54e89a752 100644 --- a/spinifex/runtime/roles/northstar/northstar.go +++ b/spinifex/runtime/roles/northstar/northstar.go @@ -1,3 +1,5 @@ +// Package northstar runs the northstar DNS server as a Spinifex service and +// bootstraps the cluster's base zone. package northstar import ( diff --git a/spinifex/runtime/roles/predastore/predastore.go b/spinifex/runtime/roles/predastore/predastore.go index 88fa8469a..65de5ba47 100644 --- a/spinifex/runtime/roles/predastore/predastore.go +++ b/spinifex/runtime/roles/predastore/predastore.go @@ -1,3 +1,4 @@ +// Package predastore runs one predastore S3 storage host as a Spinifex service. package predastore import ( diff --git a/spinifex/runtime/roles/qemunbdd/service.go b/spinifex/runtime/roles/qemunbdd/service.go index 29a9e2486..a727a0757 100644 --- a/spinifex/runtime/roles/qemunbdd/service.go +++ b/spinifex/runtime/roles/qemunbdd/service.go @@ -36,6 +36,8 @@ type Service struct { Config *Config } +// New returns the qemunbdd service. config must be a *Config; anything else +// errors. func New(config any) (svc *Service, err error) { cfg, ok := config.(*Config) if !ok { diff --git a/spinifex/runtime/roles/spinifex/spinifex.go b/spinifex/runtime/roles/spinifex/spinifex.go index f4b1c6992..d33b5597f 100644 --- a/spinifex/runtime/roles/spinifex/spinifex.go +++ b/spinifex/runtime/roles/spinifex/spinifex.go @@ -1,3 +1,4 @@ +// Package spinifex runs the per-node Spinifex daemon as a Spinifex service. package spinifex import ( @@ -12,11 +13,15 @@ import ( var serviceName = "spinifex" +// Service runs this node's Spinifex daemon from the cluster config. ConfigPath +// is the spinifex.toml the daemon was loaded from, set via SetConfigPath. type Service struct { Config *config.ClusterConfig ConfigPath string } +// New returns the daemon service. cfg must be a *config.ClusterConfig; +// anything else errors. func New(cfg any) (svc *Service, err error) { c, ok := cfg.(*config.ClusterConfig) if !ok { diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-DiInIGjk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-2TVGaTYe.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-DiInIGjk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-2TVGaTYe.js index 2dab5c9f9..7e3544e68 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-DiInIGjk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/DialogTitle-2TVGaTYe.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{i as r,l as i}from"./useValueAsRef-F56m8WbP.js";import{a,n as o,u as s}from"./dist-BKgR2qk6.js";import{o as c,r as l}from"./button-BarTr35m.js";import{C as u,S as d,r as f,s as p,t as m,w as h}from"./createBaseUIEventDetails-DL-8egB9.js";import{A as g,C as _,E as v,N as y,S as b,T as x,_ as S,b as C,c as w,ct as T,h as E,k as D,m as O,n as k,p as A,r as j,st as M,t as N,v as ee,x as P,y as F}from"./useScrollLock-NX6x9Pv8.js";var I=t(n(),1),L=I.createContext(void 0);function R(e){let t=I.useContext(L);if(!e&&t===void 0)throw Error(s(27));return t}var z=I.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...s}=e,c=R(),l=c.useState(`open`),u=c.useState(`nested`),d=c.useState(`mounted`),f={open:l,transitionStatus:c.useState(`transitionStatus`)};return o(`div`,e,{state:f,ref:[c.context.backdropRef,t],stateAttributesMapping:T,props:[{role:`presentation`,hidden:!d,style:{userSelect:`none`,WebkitUserSelect:`none`}},s],enabled:a||!u})}),B=I.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:s=!0,...c}=e,u=R(),d=u.useState(`open`),{getButtonProps:p,buttonRef:h}=l({disabled:a,native:s}),g={disabled:a};function _(e){d&&u.setOpen(!1,m(f,e.nativeEvent))}return o(`button`,e,{state:g,ref:[t,h],props:[{onClick:_},c,p]})}),V=I.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,c=R(),l=h(a);return c.useSyncedValueWithCleanup(`descriptionElementId`,l),o(`p`,e,{ref:t,props:[{id:l},s]})});function H(e,t,n=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new x({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:t,syncOnly:!0,nested:n,onOpenChange:void 0}),floatingId:t,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:a,inactiveTriggerProps:a,popupProps:a}}var U=e=>e.triggerIdProp??e.activeTriggerId,W=e=>e.openProp??e.open,G=e=>(e.popupElement?.id??e.floatingId)||void 0;function K(e,t){return t!==void 0&&W(e)&&U(e)===t}function q(e,t){return K(e,t)?!0:t!==void 0&&W(e)&&U(e)==null&&e.triggerCount===1}var J={open:W,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:U,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:G,isTriggerActive:(e,t)=>t!==void 0&&U(e)===t,isOpenedByTrigger:(e,t)=>K(e,t),isMountedByTrigger:(e,t)=>t!==void 0&&U(e)===t&&e.mounted,triggerProps:(e,t)=>t?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,t)=>q(e,t)?G(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement},Y=I.createContext(void 0);function X(){let e=I.useContext(Y);if(e===void 0)throw Error(s(26));return e}var Z=`--nested-dialogs`,Q=`data-nested-dialog-open`,te={...M,...i,nestedDialogOpen(e){return e?{[Q]:``}:null}},$=e(),ne=I.forwardRef(function(e,t){let{render:n,className:i,style:a,finalFocus:s,initialFocus:c,...l}=e,u=R(),d=u.useState(`descriptionElementId`),f=u.useState(`disablePointerDismissal`),p=u.useState(`floatingRootContext`),m=u.useState(`popupProps`),h=u.useState(`modal`),_=u.useState(`mounted`),v=u.useState(`nested`),y=u.useState(`nestedOpenDialogCount`),b=u.useState(`open`),x=u.useState(`openMethod`),C=u.useState(`titleElementId`),T=u.useState(`transitionStatus`),E=u.useState(`role`),D=p.useState(`floatingId`);X(),r({open:b,ref:u.context.popupRef,onComplete(){b&&u.context.onOpenChangeComplete?.(!0)}});let k=c===void 0?S(u.context.popupRef):c,A=y>0,j=u.useStateSetter(`popupElement`),M=o(`div`,e,{state:{open:b,nested:v,transitionStatus:T,nestedDialogOpen:A},props:[m,{id:D,"aria-labelledby":C,"aria-describedby":d,role:E,...O,hidden:!_,onKeyDown(e){w.has(e.key)&&e.stopPropagation()},style:{[Z]:y}},l],ref:[t,u.context.popupRef,j],stateAttributesMapping:te});return(0,$.jsx)(g,{context:p,openInteractionType:x,disabled:!_,closeOnFocusOut:!f,initialFocus:k,returnFocus:s,modal:h!==!1,restoreFocus:`popup`,children:M})}),re=I.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,i=R(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,$.jsx)(Y.Provider,{value:n,children:(0,$.jsxs)(y,{ref:t,...r,children:[a&&o===!0&&(0,$.jsx)(k,{ref:i.context.internalBackdropRef,inert:j(!s)}),e.children]})}):null});function ie({store:e,parentContext:t,isDrawer:n}){let r=e.useState(`open`),i=e.useState(`disablePointerDismissal`),a=e.useState(`modal`),o=e.useState(`popupElement`),s=e.useState(`floatingRootContext`),[l,f]=I.useState(0),[p,m]=I.useState(0),h=l===0,g=D(s,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:a===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0)return!1;if(`touches`in t){if(t.type===`touchend`){if(t.changedTouches.length!==1||t.touches.length!==0)return!1}else if(t.touches.length!==1)return!1}let n=u(t);if(h&&!i){if(a){let t=e.context.internalBackdropRef.current,r=e.context.backdropRef.current;return t||r?t===n||r===n||d(n,o)&&!n?.hasAttribute(`data-base-ui-portal`):!0}return!0}return!1},escapeKey:h});return N(r&&a===!0,o),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{f(e),m(t)}),c(()=>(t?.onNestedDialogOpen&&(r?t.onNestedDialogOpen(l+1,p+ +!!n):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&r&&t.onNestedDialogOpen(0,0)}),[n,r,l,p,t]),P(e,{activeTriggerProps:g.reference,inactiveTriggerProps:g.trigger,popupProps:g.floating,nestedOpenDialogCount:l,nestedOpenDrawerCount:p}),null}var ae={...J,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role},oe=class extends v{constructor(e,t,n){let r=new A,i=se(e,r,t,n);super(i,ce(r),ae)}setOpen=(e,t)=>{t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),!t.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(e,t),this.update(ee(this.state,e,t.trigger)))}};function se(e,t,n,r=!1){return{...H(t,n,r),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function ce(e){return{popupRef:I.createRef(),backdropRef:I.createRef(),internalBackdropRef:I.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function le(e,t){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=t,h=e===`drawer`,g=e===`alert-dialog`,v=g?!0:c,y=g||s,x=g?`alertdialog`:`dialog`,S=R(!0),w={modal:v,disablePointerDismissal:y,nested:S!=null,role:x},T=b((e,t)=>new oe({open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...w},e,t),!0);T.useControlledProp(`openProp`,r),T.useControlledProp(`triggerIdProp`,d),T.useSyncedValues(w),T.useContextCallback(`onOpenChange`,a),T.useContextCallback(`onOpenChangeComplete`,o);let D=T.useState(`open`),O=T.useState(`mounted`),k=T.useState(`payload`);_(T,D),F(T);let{forceUnmount:A}=C(D,T);I.useImperativeHandle(l,()=>({unmount:A,close:()=>T.setOpen(!1,m(p))}),[A,T]);let j=D||O;return(0,$.jsxs)(L.Provider,{value:T,children:[u&&(0,$.jsx)(E,{handle:u,store:T}),j&&(0,$.jsx)(ie,{store:T,parentContext:S?.context,isDrawer:h}),typeof n==`function`?n({payload:k}):n]})}var ue=I.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,c=R(),l=h(a);return c.useSyncedValueWithCleanup(`titleElementId`,l),o(`h2`,e,{ref:t,props:[{id:l},s]})});export{H as a,B as c,ne as i,z as l,le as n,J as o,re as r,V as s,ue as t}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{i as r,l as i}from"./useValueAsRef-hoe2gsyn.js";import{a,n as o,u as s}from"./dist-DeC3TnAR.js";import{o as c,r as l}from"./button-qf9lLJ2x.js";import{C as u,S as d,r as f,s as p,t as m,w as h}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{A as g,C as _,E as v,N as y,S as b,T as x,_ as S,b as C,c as w,ct as T,h as E,k as D,m as O,n as k,p as A,r as j,st as M,t as N,v as ee,x as P,y as F}from"./useScrollLock-UqEMT494.js";var I=t(n(),1),L=I.createContext(void 0);function R(e){let t=I.useContext(L);if(!e&&t===void 0)throw Error(s(27));return t}var z=I.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...s}=e,c=R(),l=c.useState(`open`),u=c.useState(`nested`),d=c.useState(`mounted`),f={open:l,transitionStatus:c.useState(`transitionStatus`)};return o(`div`,e,{state:f,ref:[c.context.backdropRef,t],stateAttributesMapping:T,props:[{role:`presentation`,hidden:!d,style:{userSelect:`none`,WebkitUserSelect:`none`}},s],enabled:a||!u})}),B=I.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:s=!0,...c}=e,u=R(),d=u.useState(`open`),{getButtonProps:p,buttonRef:h}=l({disabled:a,native:s}),g={disabled:a};function _(e){d&&u.setOpen(!1,m(f,e.nativeEvent))}return o(`button`,e,{state:g,ref:[t,h],props:[{onClick:_},c,p]})}),V=I.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,c=R(),l=h(a);return c.useSyncedValueWithCleanup(`descriptionElementId`,l),o(`p`,e,{ref:t,props:[{id:l},s]})});function H(e,t,n=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new x({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:t,syncOnly:!0,nested:n,onOpenChange:void 0}),floatingId:t,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:a,inactiveTriggerProps:a,popupProps:a}}var U=e=>e.triggerIdProp??e.activeTriggerId,W=e=>e.openProp??e.open,G=e=>(e.popupElement?.id??e.floatingId)||void 0;function K(e,t){return t!==void 0&&W(e)&&U(e)===t}function q(e,t){return K(e,t)?!0:t!==void 0&&W(e)&&U(e)==null&&e.triggerCount===1}var J={open:W,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:U,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:G,isTriggerActive:(e,t)=>t!==void 0&&U(e)===t,isOpenedByTrigger:(e,t)=>K(e,t),isMountedByTrigger:(e,t)=>t!==void 0&&U(e)===t&&e.mounted,triggerProps:(e,t)=>t?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,t)=>q(e,t)?G(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement},Y=I.createContext(void 0);function X(){let e=I.useContext(Y);if(e===void 0)throw Error(s(26));return e}var Z=`--nested-dialogs`,Q=`data-nested-dialog-open`,te={...M,...i,nestedDialogOpen(e){return e?{[Q]:``}:null}},$=e(),ne=I.forwardRef(function(e,t){let{render:n,className:i,style:a,finalFocus:s,initialFocus:c,...l}=e,u=R(),d=u.useState(`descriptionElementId`),f=u.useState(`disablePointerDismissal`),p=u.useState(`floatingRootContext`),m=u.useState(`popupProps`),h=u.useState(`modal`),_=u.useState(`mounted`),v=u.useState(`nested`),y=u.useState(`nestedOpenDialogCount`),b=u.useState(`open`),x=u.useState(`openMethod`),C=u.useState(`titleElementId`),T=u.useState(`transitionStatus`),E=u.useState(`role`),D=p.useState(`floatingId`);X(),r({open:b,ref:u.context.popupRef,onComplete(){b&&u.context.onOpenChangeComplete?.(!0)}});let k=c===void 0?S(u.context.popupRef):c,A=y>0,j=u.useStateSetter(`popupElement`),M=o(`div`,e,{state:{open:b,nested:v,transitionStatus:T,nestedDialogOpen:A},props:[m,{id:D,"aria-labelledby":C,"aria-describedby":d,role:E,...O,hidden:!_,onKeyDown(e){w.has(e.key)&&e.stopPropagation()},style:{[Z]:y}},l],ref:[t,u.context.popupRef,j],stateAttributesMapping:te});return(0,$.jsx)(g,{context:p,openInteractionType:x,disabled:!_,closeOnFocusOut:!f,initialFocus:k,returnFocus:s,modal:h!==!1,restoreFocus:`popup`,children:M})}),re=I.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,i=R(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,$.jsx)(Y.Provider,{value:n,children:(0,$.jsxs)(y,{ref:t,...r,children:[a&&o===!0&&(0,$.jsx)(k,{ref:i.context.internalBackdropRef,inert:j(!s)}),e.children]})}):null});function ie({store:e,parentContext:t,isDrawer:n}){let r=e.useState(`open`),i=e.useState(`disablePointerDismissal`),a=e.useState(`modal`),o=e.useState(`popupElement`),s=e.useState(`floatingRootContext`),[l,f]=I.useState(0),[p,m]=I.useState(0),h=l===0,g=D(s,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:a===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0)return!1;if(`touches`in t){if(t.type===`touchend`){if(t.changedTouches.length!==1||t.touches.length!==0)return!1}else if(t.touches.length!==1)return!1}let n=u(t);if(h&&!i){if(a){let t=e.context.internalBackdropRef.current,r=e.context.backdropRef.current;return t||r?t===n||r===n||d(n,o)&&!n?.hasAttribute(`data-base-ui-portal`):!0}return!0}return!1},escapeKey:h});return N(r&&a===!0,o),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{f(e),m(t)}),c(()=>(t?.onNestedDialogOpen&&(r?t.onNestedDialogOpen(l+1,p+ +!!n):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&r&&t.onNestedDialogOpen(0,0)}),[n,r,l,p,t]),P(e,{activeTriggerProps:g.reference,inactiveTriggerProps:g.trigger,popupProps:g.floating,nestedOpenDialogCount:l,nestedOpenDrawerCount:p}),null}var ae={...J,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role},oe=class extends v{constructor(e,t,n){let r=new A,i=se(e,r,t,n);super(i,ce(r),ae)}setOpen=(e,t)=>{t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),!t.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(e,t),this.update(ee(this.state,e,t.trigger)))}};function se(e,t,n,r=!1){return{...H(t,n,r),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function ce(e){return{popupRef:I.createRef(),backdropRef:I.createRef(),internalBackdropRef:I.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function le(e,t){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=t,h=e===`drawer`,g=e===`alert-dialog`,v=g?!0:c,y=g||s,x=g?`alertdialog`:`dialog`,S=R(!0),w={modal:v,disablePointerDismissal:y,nested:S!=null,role:x},T=b((e,t)=>new oe({open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...w},e,t),!0);T.useControlledProp(`openProp`,r),T.useControlledProp(`triggerIdProp`,d),T.useSyncedValues(w),T.useContextCallback(`onOpenChange`,a),T.useContextCallback(`onOpenChangeComplete`,o);let D=T.useState(`open`),O=T.useState(`mounted`),k=T.useState(`payload`);_(T,D),F(T);let{forceUnmount:A}=C(D,T);I.useImperativeHandle(l,()=>({unmount:A,close:()=>T.setOpen(!1,m(p))}),[A,T]);let j=D||O;return(0,$.jsxs)(L.Provider,{value:T,children:[u&&(0,$.jsx)(E,{handle:u,store:T}),j&&(0,$.jsx)(ie,{store:T,parentContext:S?.context,isDrawer:h}),typeof n==`function`?n({payload:k}):n]})}var ue=I.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,c=R(),l=h(a);return c.useSyncedValueWithCleanup(`titleElementId`,l),o(`h2`,e,{ref:t,props:[{id:l},s]})});export{H as a,B as c,ne as i,z as l,le as n,J as o,re as r,V as s,ue as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-D6VSR81X.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-D6VSR81X.js new file mode 100644 index 000000000..78a897e3f --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-D6VSR81X.js @@ -0,0 +1 @@ +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{n as r}from"./matchContext-DjfNTEDZ.js";import{i,n as a,t as o}from"./useSelector-C6_B_5v6.js";function s(e={}){if(e.isNotFound=!0,e.throw)throw e;return e}function c(e){return e?.isNotFound===!0}var l=t(n(),1),u=e(),d=class extends l.Component{constructor(...e){super(...e),this.state={error:0},this.reset=()=>{this.setState({error:0})}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:0}:{resetKey:n}}static getDerivedStateFromError(e){return{error:[e]}}componentDidCatch(e,t){this.props.onCatch?.(e,t)}render(){let e=this.state.error;return e?l.createElement(this.props.errorComponent??f,{error:e[0],reset:this.reset}):this.props.children}};function f({error:e}){let[t,n]=l.useState(!1);return(0,u.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,u.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,u.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,u.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,u.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,u.jsx)(`div`,{children:(0,u.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e?.message?(0,u.jsx)(`code`,{children:e.message}):null})}):null]})}function p(e){let t=a(),n=`not-found-${o(t.stores.location,e=>e.pathname)}-${o(t.stores.status)}`;return(0,u.jsx)(d,{getResetKey:()=>n,onCatch:(t,n)=>{if(c(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(c(t))return e.fallback?.(t);throw t},children:e.children})}function m(){return(0,u.jsx)(`p`,{children:`Not Found`})}function h(e,t,n){return t.options.notFoundComponent?(0,u.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,u.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,u.jsx)(m,{})}function g(e,t){let n=t?.options.pendingComponent??e.options.defaultPendingComponent;return n?(0,u.jsx)(n,{}):null}var _=(e,t)=>e[0]===t[0]&&e[1]===t[1],v=(e,t,n)=>!t.isRoot||t.options.shellComponent||t.options.wrapInSuspense||n===!1||n===`data-only`||!e.ssr,y=l.memo(function({routeId:e}){let t=a();return(0,u.jsx)(b,{router:t,match:o(t.stores.getMatchStore(e))})});function b({router:e,match:t}){let n=e.routesById[t.routeId],a=g(e,n),o=n.options.errorComponent??e.options.defaultErrorComponent,s=n.options.onCatch??e.options.defaultOnCatch,f=n.isRoot?n.options.notFoundComponent??e.options.notFoundRoute?.options.component:n.options.notFoundComponent,m=t.ssr===!1||t.ssr===`data-only`,h=v(e,n,t.ssr)&&(n.options.wrapInSuspense??a??(n.options.errorComponent?.preload||m)),_=(0,u.jsx)(x,{match:t});m&&(_=(0,u.jsx)(i,{fallback:a,children:_})),f&&(_=(0,u.jsx)(p,{fallback:e=>{if(e.routeId??=t.routeId,e.routeId!==t.routeId)throw e;return l.createElement(f,e)},children:_})),o&&(_=(0,u.jsx)(d,{getResetKey:()=>t,errorComponent:o,onCatch:(e,n)=>{if(c(e))throw e.routeId??=t.routeId,e;s?.(e,n)},children:_})),h&&(_=(0,u.jsx)(l.Suspense,{fallback:a,children:_}));let y=n.isRoot?n.options.shellComponent:void 0;return(0,u.jsx)(r.Provider,{value:t.routeId,children:y?(0,u.jsxs)(y,{children:[_,null]}):(0,u.jsxs)(u.Fragment,{children:[_,null]})})}var x=l.memo(function({match:e}){let t=a(),n=e.routeId,r=t.routesById[n],i=l.useMemo(()=>{let i=(r.options.remountDeps??t.options.defaultRemountDeps)?.({routeId:n,loaderDeps:e.loaderDeps,params:e._strictParams,search:e._strictSearch});return i?JSON.stringify(i):void 0},[n,e.loaderDeps,e._strictParams,e._strictSearch,r.options.remountDeps,t.options.defaultRemountDeps]),o=l.useMemo(()=>{let e=r.options.component??t.options.defaultComponent;return e?(0,u.jsx)(e,{},i):(0,u.jsx)(S,{})},[i,r.options.component,t.options.defaultComponent]);if(e.status===`pending`){if(t.ssr&&!v(t,r,e.ssr))return o;if(t._tx)throw t._tx[5];return g(t,r)}if(e.status===`notFound`)return h(t,r,e.error);if(e.status===`error`)throw e.error;return o}),S=l.memo(function(){let e=a(),t=l.useContext(r),n,i,s;{let r=e.stores.getMatchStore(t);[n,i]=o(r,e=>[!!e._notFound,e.error],{compare:_}),s=o(e.stores.ids,e=>e[e.indexOf(t)+1])}if(n)return h(e,e.routesById[t],i);if(!s)return null;let c=(0,u.jsx)(y,{routeId:s});return t===`__root__`?(0,u.jsx)(l.Suspense,{fallback:g(e),children:c}):c});export{c as a,d as i,S as n,s as o,g as r,y as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-Q4m9gh_H.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-Q4m9gh_H.js deleted file mode 100644 index 0c598ecee..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/Match-Q4m9gh_H.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{n as r}from"./matchContext-DjfNTEDZ.js";import{i,n as a,t as o}from"./useSelector-CRh8wCTv.js";function s(e={}){if(e.isNotFound=!0,e.throw)throw e;return e}function c(e){return e?.isNotFound===!0}var l=t(n(),1),u=e(),d=class extends l.Component{constructor(...e){super(...e),this.state={error:0},this.reset=()=>{this.setState({error:0})}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:0}:{resetKey:n}}static getDerivedStateFromError(e){return{error:[e]}}componentDidCatch(e,t){this.props.onCatch?.(e,t)}render(){let e=this.state.error;return e?l.createElement(this.props.errorComponent??f,{error:e[0],reset:this.reset}):this.props.children}};function f({error:e}){let[t,n]=l.useState(!1);return(0,u.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,u.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,u.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,u.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,u.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,u.jsx)(`div`,{children:(0,u.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e?.message?(0,u.jsx)(`code`,{children:e.message}):null})}):null]})}function p(e){let t=a(),n=`not-found-${o(t.stores.location,e=>e.pathname)}-${o(t.stores.status)}`;return(0,u.jsx)(d,{getResetKey:()=>n,onCatch:(t,n)=>{if(c(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(c(t))return e.fallback?.(t);throw t},children:e.children})}function m(){return(0,u.jsx)(`p`,{children:`Not Found`})}function h(e){return(0,u.jsx)(u.Fragment,{children:e.children})}function g(e,t,n){return t.options.notFoundComponent?(0,u.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,u.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,u.jsx)(m,{})}function _(e,t){let n=t?.options.pendingComponent??e.options.defaultPendingComponent;return n?(0,u.jsx)(n,{}):null}var v=(e,t)=>e[0]===t[0]&&e[1]===t[1],y=(e,t,n)=>!t.isRoot||t.options.shellComponent||t.options.wrapInSuspense||n===!1||n===`data-only`||!e.ssr,b=l.memo(function({routeId:e}){let t=a();return(0,u.jsx)(x,{router:t,match:o(t.stores.getMatchStore(e))})});function x({router:e,match:t}){let n=e.routesById[t.routeId],a=_(e,n),o=n.options.errorComponent??e.options.defaultErrorComponent,s=n.options.onCatch??e.options.defaultOnCatch,f=n.isRoot?n.options.notFoundComponent??e.options.notFoundRoute?.options.component:n.options.notFoundComponent,m=t.ssr===!1||t.ssr===`data-only`,g=y(e,n,t.ssr)&&(n.options.wrapInSuspense??a??(n.options.errorComponent?.preload||m))?l.Suspense:h,v=o?d:h,b=f?p:h;return(0,u.jsxs)(n.isRoot?n.options.shellComponent??h:h,{children:[(0,u.jsx)(r.Provider,{value:t.routeId,children:(0,u.jsx)(g,{fallback:a,children:(0,u.jsx)(v,{getResetKey:()=>t,errorComponent:o,onCatch:(e,n)=>{if(c(e))throw e.routeId??=t.routeId,e;s?.(e,n)},children:(0,u.jsx)(b,{fallback:e=>{if(e.routeId??=t.routeId,e.routeId!==t.routeId)throw e;return l.createElement(f,e)},children:m?(0,u.jsx)(i,{fallback:a,children:(0,u.jsx)(S,{match:t})}):(0,u.jsx)(S,{match:t})})})})}),null]})}var S=l.memo(function({match:e}){let t=a(),n=e.routeId,r=t.routesById[n],i=l.useMemo(()=>{let i=(r.options.remountDeps??t.options.defaultRemountDeps)?.({routeId:n,loaderDeps:e.loaderDeps,params:e._strictParams,search:e._strictSearch});return i?JSON.stringify(i):void 0},[n,e.loaderDeps,e._strictParams,e._strictSearch,r.options.remountDeps,t.options.defaultRemountDeps]),o=l.useMemo(()=>{let e=r.options.component??t.options.defaultComponent;return e?(0,u.jsx)(e,{},i):(0,u.jsx)(C,{})},[i,r.options.component,t.options.defaultComponent]);if(e.status===`pending`){if(t.ssr&&!y(t,r,e.ssr))return o;if(t._tx)throw t._tx[5];return _(t,r)}if(e.status===`notFound`)return g(t,r,e.error);if(e.status===`error`)throw e.error;return o}),C=l.memo(function(){let e=a(),t=l.useContext(r),n,i,s;{let r=e.stores.getMatchStore(t);[n,i]=o(r,e=>[!!e._notFound,e.error],{compare:v}),s=o(e.stores.ids,e=>e[e.indexOf(t)+1])}if(n)return g(e,e.routesById[t],i);if(!s)return null;let c=(0,u.jsx)(b,{routeId:s});return t===`__root__`?(0,u.jsx)(l.Suspense,{fallback:_(e),children:c}):c});export{d as a,h as i,C as n,c as o,_ as r,s,b as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-BBModIMM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-BBModIMM.js new file mode 100644 index 000000000..9e6297ab2 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-BBModIMM.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_-DzKMaZrf.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/upload-button-D1_Hb-WX.js","assets/download-B-6MA128.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/s3-D7lLgKWv.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/s3-ClpClaoT.js","assets/queryOptions-Dfvzj6n2.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{rn as n,tn as r,ut as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./s3-ClpClaoT.js";var o=e(`/_auth/s3/ls/$bucket/$`)({loader:async({context:e,params:t})=>{let r=n(t._splat??``);await e.queryClient.query({...a(t.bucket,r),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${r(e._splat??``,`${e.bucket}/`)} | S3 | Mulga`}]}),component:t(()=>i(()=>import(`./_-DzKMaZrf.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DN9VaV2B.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DN9VaV2B.js deleted file mode 100644 index 8f33746d8..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DN9VaV2B.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_-B0VsTkr1.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/upload-button-BZcdmGoQ.js","assets/download-B-6MA128.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/s3-DaPUyf7s.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/s3-DFfxBBj-.js","assets/queryOptions-Dfvzj6n2.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{en as n,lt as r,nn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./s3-DFfxBBj-.js";var o=e(`/_auth/s3/ls/$bucket/$`)({loader:async({context:e,params:t})=>{let n=i(t._splat??``);await e.queryClient.query({...a(t.bucket,n),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e._splat??``,`${e.bucket}/`)} | S3 | Mulga`}]}),component:t(()=>r(()=>import(`./_-B0VsTkr1.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-B0VsTkr1.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DzKMaZrf.js similarity index 85% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-B0VsTkr1.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DzKMaZrf.js index 6e0607e63..cda147943 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-B0VsTkr1.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_-DzKMaZrf.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{cn as i,en as a,nn as o,rn as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./back-link-CjKy1JE5.js";import{n as l,r as u,t as d}from"./upload-button-BZcdmGoQ.js";import{r as f}from"./s3-DaPUyf7s.js";import{t as p}from"./s3-DFfxBBj-.js";import{t as m}from"./_-DN9VaV2B.js";import{t as h}from"./error-banner-DeOeVBKS.js";var g=t(),_=e();function v(){let e=(0,g.c)(26),{bucket:t,_splat:v}=m.useParams(),y=o(v??``),{data:b}=n(p(t,y)),x=f(),S;e[0]===b.Contents?S=e[1]:(S=b.Contents??[],e[0]=b.Contents,e[1]=S);let C=S,w;e[2]===b.CommonPrefixes?w=e[3]:(w=b.CommonPrefixes??[],e[2]=b.CommonPrefixes,e[3]=w);let T=w,E=y.split(`/`).filter(Boolean),D=[{name:t,path:`/s3/ls/${t}`},...E.map((e,n)=>{let r=`${E.slice(0,n+1).join(`/`)}/`;return{name:e,path:`/s3/ls/${t}/${r}`}})],O=`${E.slice(0,-1).join(`/`)}/`,k;e[4]!==t||e[5]!==O||e[6]!==E.length?(k=E.length>1?(0,_.jsx)(c,{params:{bucket:t,_splat:O},to:`/s3/ls/$bucket/$`,children:`Back`}):(0,_.jsx)(c,{params:{bucket:t},to:`/s3/ls/$bucket`,children:`Back`}),e[4]=t,e[5]=O,e[6]=E.length,e[7]=k):k=e[7];let A;e[8]!==t||e[9]!==y||e[10]!==x.isPending||e[11]!==x.mutateAsync?(A=(0,_.jsx)(d,{bucket:t,isPending:x.isPending,onUpload:x.mutateAsync,prefix:y}),e[8]=t,e[9]=y,e[10]=x.isPending,e[11]=x.mutateAsync,e[12]=A):A=e[12];let j;e[13]===x.error?j=e[14]:(j=x.error&&(0,_.jsx)(h,{error:x.error,msg:`Failed to upload object`}),e[13]=x.error,e[14]=j);let M;e[15]!==t||e[16]!==T||e[17]!==y?(M=T.length>0&&(0,_.jsxs)(`div`,{className:`mb-6`,children:[(0,_.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Folders`}),(0,_.jsx)(`div`,{className:`space-y-2`,children:T.map(e=>{if(!e.Prefix)return null;let n=i(s(e.Prefix,y)),r=a(e.Prefix,y);return(0,_.jsx)(u,{bucketName:t,folderName:n,fullPrefix:r},e.Prefix)})})]}),e[15]=t,e[16]=T,e[17]=y,e[18]=M):M=e[18];let N;e[19]!==t||e[20]!==C||e[21]!==y?(N=C.length>0&&(0,_.jsxs)(`div`,{className:`space-y-2`,children:[(0,_.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Objects`}),C.map(e=>{if(!e.Key)return null;let n=s(e.Key,y),r=a(e.Key,y);return(0,_.jsx)(l,{bucketName:t,displayName:n,fullKey:r,object:e},e.Key)})]}),e[19]=t,e[20]=C,e[21]=y,e[22]=N):N=e[22];let P;return e[23]!==T.length||e[24]!==C.length?(P=C.length===0&&T.length===0&&(0,_.jsx)(`p`,{className:`text-muted-foreground`,children:`No objects found in this folder.`}),e[23]=T.length,e[24]=C.length,e[25]=P):P=e[25],(0,_.jsxs)(_.Fragment,{children:[k,(0,_.jsx)(`div`,{className:`mb-6`,children:(0,_.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,_.jsx)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:D.map((e,t)=>(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[t>0&&(0,_.jsx)(`span`,{children:`/`}),t===D.length-1?(0,_.jsx)(`span`,{className:`text-foreground`,children:e.name}):(0,_.jsx)(r,{className:`hover:text-foreground`,to:e.path,children:e.name})]},e.path))}),A]})}),j,M,N,P]})}export{v as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{in as i,ln as a,rn as o,tn as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./back-link-wsXUoJ12.js";import{n as l,r as u,t as d}from"./upload-button-D1_Hb-WX.js";import{r as f}from"./s3-D7lLgKWv.js";import{t as p}from"./s3-ClpClaoT.js";import{t as m}from"./_-BBModIMM.js";import{t as h}from"./error-banner-DeOeVBKS.js";var g=t(),_=e();function v(){let e=(0,g.c)(26),{bucket:t,_splat:v}=m.useParams(),y=o(v??``),{data:b}=n(p(t,y)),x=f(),S;e[0]===b.Contents?S=e[1]:(S=b.Contents??[],e[0]=b.Contents,e[1]=S);let C=S,w;e[2]===b.CommonPrefixes?w=e[3]:(w=b.CommonPrefixes??[],e[2]=b.CommonPrefixes,e[3]=w);let T=w,E=y.split(`/`).filter(Boolean),D=[{name:t,path:`/s3/ls/${t}`},...E.map((e,n)=>{let r=`${E.slice(0,n+1).join(`/`)}/`;return{name:e,path:`/s3/ls/${t}/${r}`}})],O=`${E.slice(0,-1).join(`/`)}/`,k;e[4]!==t||e[5]!==O||e[6]!==E.length?(k=E.length>1?(0,_.jsx)(c,{params:{bucket:t,_splat:O},to:`/s3/ls/$bucket/$`,children:`Back`}):(0,_.jsx)(c,{params:{bucket:t},to:`/s3/ls/$bucket`,children:`Back`}),e[4]=t,e[5]=O,e[6]=E.length,e[7]=k):k=e[7];let A;e[8]!==t||e[9]!==y||e[10]!==x.isPending||e[11]!==x.mutateAsync?(A=(0,_.jsx)(d,{bucket:t,isPending:x.isPending,onUpload:x.mutateAsync,prefix:y}),e[8]=t,e[9]=y,e[10]=x.isPending,e[11]=x.mutateAsync,e[12]=A):A=e[12];let j;e[13]===x.error?j=e[14]:(j=x.error&&(0,_.jsx)(h,{error:x.error,msg:`Failed to upload object`}),e[13]=x.error,e[14]=j);let M;e[15]!==t||e[16]!==T||e[17]!==y?(M=T.length>0&&(0,_.jsxs)(`div`,{className:`mb-6`,children:[(0,_.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Folders`}),(0,_.jsx)(`div`,{className:`space-y-2`,children:T.map(e=>{if(!e.Prefix)return null;let n=a(i(e.Prefix,y)),r=s(e.Prefix,y);return(0,_.jsx)(u,{bucketName:t,folderName:n,fullPrefix:r},e.Prefix)})})]}),e[15]=t,e[16]=T,e[17]=y,e[18]=M):M=e[18];let N;e[19]!==t||e[20]!==C||e[21]!==y?(N=C.length>0&&(0,_.jsxs)(`div`,{className:`space-y-2`,children:[(0,_.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Objects`}),C.map(e=>{if(!e.Key)return null;let n=i(e.Key,y),r=s(e.Key,y);return(0,_.jsx)(l,{bucketName:t,displayName:n,fullKey:r,object:e},e.Key)})]}),e[19]=t,e[20]=C,e[21]=y,e[22]=N):N=e[22];let P;return e[23]!==T.length||e[24]!==C.length?(P=C.length===0&&T.length===0&&(0,_.jsx)(`p`,{className:`text-muted-foreground`,children:`No objects found in this folder.`}),e[23]=T.length,e[24]=C.length,e[25]=P):P=e[25],(0,_.jsxs)(_.Fragment,{children:[k,(0,_.jsx)(`div`,{className:`mb-6`,children:(0,_.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,_.jsx)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:D.map((e,t)=>(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[t>0&&(0,_.jsx)(`span`,{children:`/`}),t===D.length-1?(0,_.jsx)(`span`,{className:`text-foreground`,children:e.name}):(0,_.jsx)(r,{className:`hover:text-foreground`,to:e.path,children:e.name})]},e.path))}),A]})}),j,M,N,P]})}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg86DRhs.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg3v0g0g.js similarity index 97% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg86DRhs.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg3v0g0g.js index 788561d83..a90cf7ba9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg86DRhs.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_auth-Cg3v0g0g.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./link-Dhy4xOXd.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./chevron-down-Dt4q6d24.js";import{t as l}from"./chevron-right-c57whaks.js";import{a as u,i as d,n as f,o as p,r as ee,s as m,t as h}from"./waypoints-DE7eIn9V.js";import{t as g}from"./network-RAx0KOlf.js";import{n as te}from"./admin-context-CXmiyIcc.js";import{A as ne,M as _,_ as re,d as v,l as ie,n as y,p as ae,w as b}from"./ec2-CWEplLq4.js";import{n as x}from"./s3-DFfxBBj-.js";import{t as S}from"./page-heading-vksh_67w.js";import{t as oe}from"./badge-B_ExXcw2.js";import{a as se,n as C,o as w,r as T,s as ce,t as E}from"./card-BXl0Qff8.js";import{o as le,r as D}from"./admin-BUkrFIlI.js";import{a as O,c as k,i as A,l as j,n as ue,o as M,s as N,t as P}from"./alert-dialog-kCQ1W4Rz.js";import{t as F}from"./state-badge-D1Z6q_OA.js";var I={name:`box`,size:24,node:[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]};I.node;var L=s(I),R={name:`flask-conical`,size:24,node:[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]};R.node;var z=s(R),B={name:`folder-open`,size:24,node:[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]};B.node;var V=s(B),H={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};H.node;var de=s(H),U={name:`monitor`,size:24,node:[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]};U.node;var fe=s(U),W={name:`ship`,size:24,node:[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 9.189V13`,key:`yp40p3`}],[`path`,{d:`M19 12V6a2 2 0 00-2-2H7a2 2 0 00-2 2v6`,key:`1wcigf`}],[`path`,{d:`M19.38 19A11.6 11.6 0 0021 13l-8.188-3.639a2 2 0 00-1.624 0L3 13.001a11.6 11.6 0 002.81 7.76`,key:`1kdp0u`}],[`path`,{d:`M2 20c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1`,key:`1l8w7g`}]]};W.node;var pe=s(W),G=r(),K=t(n(),1),q=e(),me=[{name:`Air-gap Support`,key:`airgap`},{name:`NVIDIA Bluefield DPU`,key:`bluefield`},{name:`NVIDIA MIG Support`,key:`mig`}];function J(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600);if(t>0)return`${t}d ${n}h`;let r=Math.floor(e%3600/60);return n>0?`${n}h ${r}m`:`${r}m`}function he(){let e=(0,G.c)(129),{isAdmin:t,version:n,license:r}=te(),[a,o]=(0,K.useState)(!1),s;e[0]===t?s=e[1]:(s={...D,enabled:t},e[0]=t,e[1]=s);let{data:u}=i(s),d;e[2]===t?d=e[3]:(d={...le,enabled:t},e[2]=t,e[3]=d);let{data:f}=i(d);if(!t||!n)return null;let p;e[4]===u?.nodes?p=e[5]:(p=u?.nodes??[],e[4]=u?.nodes,e[5]=p);let m=p,h;e[6]===f?.vms?h=e[7]:(h=f?.vms??[],e[6]=f?.vms,e[7]=h);let g=h,ne=u?.cluster_mode??`single-node`,_=r===`open-source`,re=m[0]?.region??null,v;e[8]===m?v=e[9]:(v=m.reduce(ye,0),e[8]=m,e[9]=v);let ie=v,y;e[10]===m?y=e[11]:(y=m.reduce(ve,0),e[10]=m,e[11]=y);let ae=y,b,x,S,se,C,O,k,A,j,ue,M,N,P,F,I,L,R;if(e[12]!==ae||e[13]!==ne||e[14]!==_||e[15]!==m||e[16]!==re||e[17]!==ie||e[18]!==n.arch||e[19]!==n.commit||e[20]!==n.os||e[21]!==n.version||e[22]!==g.length){let t=m.reduce(_e,0),r=m.reduce(ge,0);P=`mb-6 space-y-4`,ue=`grid grid-cols-1 gap-4 md:grid-cols-3`;let i;e[40]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsxs)(ce,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(fe,{className:`size-3.5`}),`Spinifex Info`]})}),e[40]=i):i=e[40];let a;e[41]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Version`}),e[41]=a):a=e[41];let o;e[42]===n.version?o=e[43]:(o=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[a,(0,q.jsx)(`span`,{className:`font-mono`,children:n.version})]}),e[42]=n.version,e[43]=o);let s;e[44]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Commit`}),e[44]=s):s=e[44];let c;e[45]===n.commit?c=e[46]:(c=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[s,(0,q.jsx)(`span`,{className:`font-mono`,children:n.commit})]}),e[45]=n.commit,e[46]=c);let l;e[47]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Platform`}),e[47]=l):l=e[47];let u;e[48]!==n.arch||e[49]!==n.os?(u=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[l,(0,q.jsxs)(`span`,{children:[n.os,`/`,n.arch]})]}),e[48]=n.arch,e[49]=n.os,e[50]=u):u=e[50];let d;e[51]===re?d=e[52]:(d=re&&(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Region`}),(0,q.jsx)(`span`,{children:re})]}),e[51]=re,e[52]=d),e[53]!==o||e[54]!==c||e[55]!==u||e[56]!==d?(M=(0,q.jsxs)(E,{children:[i,(0,q.jsxs)(T,{className:`space-y-1 text-xs`,children:[o,c,u,d]})]}),e[53]=o,e[54]=c,e[55]=u,e[56]=d,e[57]=M):M=e[57];let f;e[58]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsx)(ce,{className:`text-sm`,children:`License & Support`})}),e[58]=f):f=e[58];let p;e[59]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`License`}),e[59]=p):p=e[59];let h=_?`secondary`:`default`,te=_?`Open Source (AGPLv3)`:`Commercial`,v;e[60]!==h||e[61]!==te?(v=(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[p,(0,q.jsx)(oe,{variant:h,children:te})]}),e[60]=h,e[61]=te,e[62]=v):v=e[62];let y;e[63]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Support`}),e[63]=y):y=e[63];let le=_?`Community`:`Standard`,D;e[64]===le?D=e[65]:(D=(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[y,(0,q.jsx)(`span`,{children:le})]}),e[64]=le,e[65]=D);let z;e[66]===_?z=e[67]:(z=_&&(0,q.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:`mt-2 block text-xs font-medium text-primary hover:underline`,children:`Upgrade to Commercial →`}),e[66]=_,e[67]=z),e[68]!==v||e[69]!==D||e[70]!==z?(N=(0,q.jsxs)(E,{children:[f,(0,q.jsxs)(T,{className:`space-y-2 text-xs`,children:[v,D,z]})]}),e[68]=v,e[69]=D,e[70]=z,e[71]=N):N=e[71],x=E,e[72]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsxs)(ce,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(ee,{className:`size-3.5`}),`Cluster Status`]})}),e[72]=j):j=e[72],b=T,se=`space-y-2 text-xs`,e[73]===ne?C=e[74]:(C=(0,q.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,q.jsx)(oe,{variant:`outline`,children:ne})}),e[73]=ne,e[74]=C);let B;e[75]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Nodes`}),e[75]=B):B=e[75],e[76]===m.length?O=e[77]:(O=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[B,(0,q.jsx)(`span`,{children:m.length})]}),e[76]=m.length,e[77]=O);let V;e[78]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Instances`}),e[78]=V):V=e[78],e[79]===g.length?k=e[80]:(k=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[V,(0,q.jsx)(`span`,{children:g.length})]}),e[79]=g.length,e[80]=k);let H;e[81]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`vCPU`}),e[81]=H):H=e[81],e[82]!==ae||e[83]!==ie?(A=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[H,(0,q.jsxs)(`span`,{children:[ae,` / `,ie]})]}),e[82]=ae,e[83]=ie,e[84]=A):A=e[84],R=`flex justify-between`,e[85]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Memory`}),e[85]=S):S=e[85],F=r.toFixed(1),I=` / `,L=t.toFixed(1),e[12]=ae,e[13]=ne,e[14]=_,e[15]=m,e[16]=re,e[17]=ie,e[18]=n.arch,e[19]=n.commit,e[20]=n.os,e[21]=n.version,e[22]=g.length,e[23]=b,e[24]=x,e[25]=S,e[26]=se,e[27]=C,e[28]=O,e[29]=k,e[30]=A,e[31]=j,e[32]=ue,e[33]=M,e[34]=N,e[35]=P,e[36]=F,e[37]=I,e[38]=L,e[39]=R}else b=e[23],x=e[24],S=e[25],se=e[26],C=e[27],O=e[28],k=e[29],A=e[30],j=e[31],ue=e[32],M=e[33],N=e[34],P=e[35],F=e[36],I=e[37],L=e[38],R=e[39];let z;e[86]!==F||e[87]!==I||e[88]!==L?(z=(0,q.jsxs)(`span`,{children:[F,I,L,` GB`]}),e[86]=F,e[87]=I,e[88]=L,e[89]=z):z=e[89];let B;e[90]!==S||e[91]!==z||e[92]!==R?(B=(0,q.jsxs)(`div`,{className:R,children:[S,z]}),e[90]=S,e[91]=z,e[92]=R,e[93]=B):B=e[93];let V;e[94]!==b||e[95]!==se||e[96]!==C||e[97]!==O||e[98]!==k||e[99]!==A||e[100]!==B?(V=(0,q.jsxs)(b,{className:se,children:[C,O,k,A,B]}),e[94]=b,e[95]=se,e[96]=C,e[97]=O,e[98]=k,e[99]=A,e[100]=B,e[101]=V):V=e[101];let H;e[102]!==x||e[103]!==j||e[104]!==V?(H=(0,q.jsxs)(x,{children:[j,V]}),e[102]=x,e[103]=j,e[104]=V,e[105]=H):H=e[105];let U;e[106]!==ue||e[107]!==M||e[108]!==N||e[109]!==H?(U=(0,q.jsxs)(`div`,{className:ue,children:[M,N,H]}),e[106]=ue,e[107]=M,e[108]=N,e[109]=H,e[110]=U):U=e[110];let W;e[111]!==m||e[112]!==a?(W=m.length>0&&(0,q.jsxs)(E,{children:[(0,q.jsx)(w,{className:`pb-0`,children:(0,q.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 text-sm font-medium`,onClick:()=>{o(!a)},children:[a?(0,q.jsx)(c,{className:`size-3.5`}):(0,q.jsx)(l,{className:`size-3.5`}),`Nodes (`,m.length,`)`]})}),a&&(0,q.jsx)(T,{className:`pt-2`,children:(0,q.jsx)(be,{nodes:m})})]}),e[111]=m,e[112]=a,e[113]=W):W=e[113];let pe;e[114]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsx)(ce,{className:`text-sm`,children:`Commercial Add-ons`})}),e[114]=pe):pe=e[114];let J;e[115]===_?J=e[116]:(J=me.map(e=>(0,q.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,q.jsx)(`span`,{className:_?`text-muted-foreground`:void 0,children:e.name}),_?(0,q.jsx)(de,{className:`size-3 text-muted-foreground`}):(0,q.jsx)(oe,{variant:`outline`,className:`text-[0.625rem]`,children:`Active`})]},e.key)),e[115]=_,e[116]=J);let he;e[117]===J?he=e[118]:(he=(0,q.jsx)(`div`,{className:`space-y-2`,children:J}),e[117]=J,e[118]=he);let xe;e[119]===_?xe=e[120]:(xe=_&&(0,q.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:`mt-3 block text-xs font-medium text-primary hover:underline`,children:`Learn more about commercial features →`}),e[119]=_,e[120]=xe);let Se;e[121]!==he||e[122]!==xe?(Se=(0,q.jsxs)(E,{children:[pe,(0,q.jsxs)(T,{children:[he,xe]})]}),e[121]=he,e[122]=xe,e[123]=Se):Se=e[123];let Ce;return e[124]!==P||e[125]!==U||e[126]!==W||e[127]!==Se?(Ce=(0,q.jsxs)(`div`,{className:P,children:[U,W,Se]}),e[124]=P,e[125]=U,e[126]=W,e[127]=Se,e[128]=Ce):Ce=e[128],Ce}function ge(e,t){return e+t.alloc_mem_gb}function _e(e,t){return e+t.total_mem_gb}function ve(e,t){return e+t.alloc_vcpu}function ye(e,t){return e+t.total_vcpu}function be(e){let t=(0,G.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Roles`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`IP`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Region`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`AZ`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Uptime`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`EC2`}),(0,q.jsx)(`th`,{className:`pb-1 font-medium`,children:`Services`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(xe),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,q.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function xe(e){return(0,q.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,q.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,q.jsx)(oe,{variant:e.status===`Ready`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,q.jsxs)(`div`,{className:`flex gap-1`,children:[e.nats_role&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`nats:`,e.nats_role]}),e.predastore_role&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`ps:`,e.predastore_role]})]})}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.region}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.az}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:J(e.uptime)}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vm_count}),(0,q.jsx)(`td`,{className:`py-1.5`,children:(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.services.length})})]},e.node)}var Se=`console.spx3.com`,Ce=`spinifex:v1:sandbox-welcome`,we=[{to:`/ec2/run-instances`,icon:(0,q.jsx)(p,{className:`size-3.5`}),label:`Launch an instance`,hint:`Boot a VM on real hardware`},{to:`/s3/ls`,icon:(0,q.jsx)(V,{className:`size-3.5`}),label:`Create a bucket`,hint:`S3-compatible object storage`},{to:`/ec2/describe-vpcs`,icon:(0,q.jsx)(g,{className:`size-3.5`}),label:`Networking`,hint:`VPCs, subnets and security groups`},{to:`/eks/list-clusters`,icon:(0,q.jsx)(pe,{className:`size-3.5`}),label:`Kubernetes`,hint:`Managed EKS-compatible clusters`},{to:`/iam/list-users`,icon:(0,q.jsx)(u,{className:`size-3.5`}),label:`Access keys`,hint:`Credentials for the AWS CLI and SDKs`}];function Te(){try{return localStorage.getItem(Ce)!==null}catch{}return!1}function Ee(){try{localStorage.setItem(Ce,`1`)}catch{}}function De(){let e=(0,G.c)(7),[t,n]=(0,K.useState)(Oe),r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=e=>{e||Ee(),n(e)},e[0]=r):r=e[0];let i=r,o;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,q.jsxs)(N,{children:[(0,q.jsx)(k,{children:(0,q.jsx)(z,{className:`text-primary`})}),(0,q.jsx)(j,{children:`Welcome to the Mulga sandbox`}),(0,q.jsx)(O,{children:`You have a real account on a shared evaluation cluster. The APIs are the AWS ones, so the CLI and the SDKs work against it unchanged. Resources here may be reclaimed, so please don't keep anything you need in it.`})]}),e[1]=o):o=e[1];let s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(`div`,{className:`space-y-0.5`,children:we.map(e=>(0,q.jsxs)(a,{className:`flex items-center gap-2 rounded-md px-2 py-1.5 text-xs hover:bg-muted`,onClick:()=>{i(!1)},to:e.to,children:[e.icon,(0,q.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.hint})]},e.to))}),e[2]=s):s=e[2];let c;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,q.jsx)(`a`,{className:`text-xs text-muted-foreground underline underline-offset-3 hover:text-foreground sm:mr-auto sm:self-center`,href:`https://docs.mulgadc.com`,rel:`noreferrer`,target:`_blank`,children:`Read the docs`}),e[3]=c):c=e[3];let l;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsxs)(A,{className:`max-w-lg`,children:[o,s,(0,q.jsxs)(M,{children:[c,(0,q.jsx)(ue,{onClick:()=>{i(!1)},children:`Get started`})]})]}),e[4]=l):l=e[4];let u;return e[5]===t?u=e[6]:(u=(0,q.jsx)(P,{onOpenChange:i,open:t,children:l}),e[5]=t,e[6]=u),u}function Oe(){return window.location.hostname===Se&&!Te()}var Y=5;function ke(){let e=(0,G.c)(12),t,n,r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,q.jsx)(S,{title:`Dashboard`}),n=(0,q.jsx)(De,{}),r=(0,q.jsx)(he,{}),e[0]=t,e[1]=n,e[2]=r):(t=e[0],n=e[1],r=e[2]);let i;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Ae,{})}),e[3]=i):i=e[3];let a;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Le,{})}),e[4]=a):a=e[4];let o;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(He,{})}),e[5]=o):o=e[5];let s;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(We,{})}),e[6]=s):s=e[6];let c;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Ke,{})}),e[7]=c):c=e[7];let l;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Je,{})}),e[8]=l):l=e[8];let u;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Xe,{})}),e[9]=u):u=e[9];let d;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(et,{})}),e[10]=d):d=e[10];let f;return e[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,q.jsxs)(q.Fragment,{children:[t,n,r,(0,q.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`,children:[i,a,o,s,c,l,u,d,(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Qe,{})})]})]}),e[11]=f):f=e[11],f}function X(){let e=(0,G.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,q.jsx)(w,{children:(0,q.jsx)(`div`,{className:`h-4 w-32 animate-pulse rounded bg-muted`})}),e[0]=t):t=e[0];let n;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsxs)(E,{children:[t,(0,q.jsx)(T,{children:(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(`div`,{className:`h-3 w-48 animate-pulse rounded bg-muted`}),(0,q.jsx)(`div`,{className:`h-3 w-36 animate-pulse rounded bg-muted`})]})})]}),e[1]=n):n=e[1],n}function Z(e){let t=(0,G.c)(16),{title:n,icon:r,count:i,to:o,children:s}=e,c;t[0]!==r||t[1]!==n?(c=(0,q.jsxs)(ce,{className:`flex items-center gap-2`,children:[r,n]}),t[0]=r,t[1]=n,t[2]=c):c=t[2];let l;t[3]===i?l=t[4]:(l=(0,q.jsx)(C,{children:(0,q.jsx)(`span`,{className:`rounded-md bg-muted px-2 py-0.5 text-xs font-semibold tabular-nums`,children:i})}),t[3]=i,t[4]=l);let u;t[5]!==c||t[6]!==l?(u=(0,q.jsxs)(w,{children:[c,l]}),t[5]=c,t[6]=l,t[7]=u):u=t[7];let d;t[8]===s?d=t[9]:(d=(0,q.jsx)(T,{children:s}),t[8]=s,t[9]=d);let f;t[10]===o?f=t[11]:(f=(0,q.jsx)(se,{children:(0,q.jsx)(a,{to:o,className:`text-xs font-medium text-primary hover:underline`,children:`View all →`})}),t[10]=o,t[11]=f);let p;return t[12]!==u||t[13]!==d||t[14]!==f?(p=(0,q.jsxs)(E,{children:[u,d,f]}),t[12]=u,t[13]=d,t[14]=f,t[15]=p):p=t[15],p}function Q(e){let t=(0,G.c)(2),{total:n}=e;if(n<=Y)return null;let r=n-Y,i;return t[0]===r?i=t[1]:(i=(0,q.jsxs)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:[`+`,r,` more`]}),t[0]=r,t[1]=i),i}function $(e){let t=(0,G.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,q.jsx)(`div`,{className:`flex items-center justify-between py-0.5 text-xs`,children:n}),t[0]=n,t[1]=r),r}function Ae(){let e=(0,G.c)(16),{data:t}=i(ie),n,r,a,o,s;if(e[0]!==t?.Reservations){let i=t?.Reservations?.flatMap(Ie)??[];n=i.filter(Fe),a=i.filter(Pe),o=i.filter(Ne),r=i.filter(Me),s=[...a,...r].slice(0,Y),e[0]=t?.Reservations,e[1]=n,e[2]=r,e[3]=a,e[4]=o,e[5]=s}else n=e[1],r=e[2],a=e[3],o=e[4],s=e[5];let c=s,l;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(p,{className:`size-3.5`}),e[6]=l):l=e[6];let u;e[7]!==n.length||e[8]!==c||e[9]!==r||e[10]!==a||e[11]!==o?(u=n.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`mb-2 flex gap-3 text-[0.625rem] text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[a.length,` running`]}),(0,q.jsxs)(`span`,{children:[o.length,` stopped`]})]}),(0,q.jsx)(`div`,{className:`space-y-0.5`,children:c.map(je)}),(0,q.jsx)(Q,{total:a.length+r.length})]}),e[7]=n.length,e[8]=c,e[9]=r,e[10]=a,e[11]=o,e[12]=u):u=e[12];let d;return e[13]!==n.length||e[14]!==u?(d=(0,q.jsx)(Z,{title:`Instances`,icon:l,count:n.length,to:`/ec2/describe-instances`,children:u}),e[13]=n.length,e[14]=u,e[15]=d):d=e[15],d}function je(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.InstanceId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.InstanceType})]},e.InstanceId)}function Me(e){return e.State?.Name===`pending`}function Ne(e){return e.State?.Name===`stopped`}function Pe(e){return e.State?.Name===`running`}function Fe(e){return e.State?.Name!==`terminated`}function Ie(e){return e.Instances??[]}function Le(){let e=(0,G.c)(14),{data:t}=i(ne),n;e[0]===t?.Volumes?n=e[1]:(n=t?.Volumes??[],e[0]=t?.Volumes,e[1]=n);let r=n,a;e[2]===r?a=e[3]:(a=r.reduce(Ve,0),e[2]=r,e[3]=a);let o=a,s;e[4]===r?s=e[5]:(s=r.filter(Be),e[4]=r,e[5]=s);let c=s,l;e[6]===r?l=e[7]:(l=r.filter(ze),e[6]=r,e[7]=l);let u=l,d;if(e[8]!==u||e[9]!==c||e[10]!==o||e[11]!==r){let t=r.slice(0,Y),n;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(L,{className:`size-3.5`}),e[13]=n):n=e[13],d=(0,q.jsx)(Z,{title:`Volumes`,icon:n,count:r.length,to:`/ec2/describe-volumes`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No volumes`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`mb-2 flex gap-3 text-[0.625rem] text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[o,` GiB total`]}),(0,q.jsxs)(`span`,{children:[c.length,` in-use`]}),(0,q.jsxs)(`span`,{children:[u.length,` available`]})]}),(0,q.jsx)(`div`,{className:`space-y-0.5`,children:t.map(Re)}),(0,q.jsx)(Q,{total:r.length})]})}),e[8]=u,e[9]=c,e[10]=o,e[11]=r,e[12]=d}else d=e[12];return d}function Re(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.VolumeId}),(0,q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.Size,` GiB`]}),(0,q.jsx)(F,{state:e.State})]})]},e.VolumeId)}function ze(e){return e.State===`available`}function Be(e){return e.State===`in-use`}function Ve(e,t){return e+(t.Size??0)}function He(){let e=(0,G.c)(5),{data:t}=i(_),n;e[0]===t?.Vpcs?n=e[1]:(n=t?.Vpcs??[],e[0]=t?.Vpcs,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(g,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`VPCs`,icon:n,count:r.length,to:`/ec2/describe-vpcs`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No VPCs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ue),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ue(e){let t=o(e.Tags);return(0,q.jsxs)($,{children:[(0,q.jsxs)(`span`,{className:`font-mono`,children:[e.VpcId,t&&(0,q.jsxs)(`span`,{className:`ml-1 font-sans text-muted-foreground`,children:[`(`,t,`)`]})]}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.CidrBlock})]},e.VpcId)}function We(){let e=(0,G.c)(5),{data:t}=i(ae),n;e[0]===t?.KeyPairs?n=e[1]:(n=t?.KeyPairs??[],e[0]=t?.KeyPairs,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(u,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Key Pairs`,icon:n,count:r.length,to:`/ec2/describe-key-pairs`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No key pairs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ge),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ge(e){return(0,q.jsx)($,{children:(0,q.jsx)(`span`,{className:`font-mono`,children:e.KeyName})},e.KeyPairId)}function Ke(){let e=(0,G.c)(5),{data:t}=i(x),n;e[0]===t?.Buckets?n=e[1]:(n=t?.Buckets??[],e[0]=t?.Buckets,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(V,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`S3 Buckets`,icon:n,count:r.length,to:`/s3/ls`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No buckets`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(qe),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function qe(e){return(0,q.jsx)($,{children:(0,q.jsx)(`span`,{className:`font-mono`,children:e.Name})},e.Name)}function Je(){let e=(0,G.c)(5),{data:t}=i(b),n;e[0]===t?.SecurityGroups?n=e[1]:(n=t?.SecurityGroups??[],e[0]=t?.SecurityGroups,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(f,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Security Groups`,icon:n,count:r.length,to:`/ec2/describe-security-groups`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ye),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ye(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.GroupName}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.VpcId})]},e.GroupId)}function Xe(){let e=(0,G.c)(5),{data:t}=i(re),n;e[0]===t?.NatGateways?n=e[1]:(n=t?.NatGateways??[],e[0]=t?.NatGateways,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(h,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`NAT Gateways`,icon:n,count:r.length,to:`/ec2/describe-nat-gateways`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No NAT gateways`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ze),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ze(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.NatGatewayId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.State})]},e.NatGatewayId)}function Qe(){let e=(0,G.c)(5),{data:t}=i(v),n;e[0]===t?.InternetGateways?n=e[1]:(n=t?.InternetGateways??[],e[0]=t?.InternetGateways,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(d,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Internet Gateways`,icon:n,count:r.length,to:`/ec2/describe-internet-gateways`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No internet gateways`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map($e),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function $e(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.InternetGatewayId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.Attachments?.[0]?.VpcId?`attached`:`detached`})]},e.InternetGatewayId)}function et(){let e=(0,G.c)(5),{data:t}=i(y),n;e[0]===t?.Addresses?n=e[1]:(n=t?.Addresses??[],e[0]=t?.Addresses,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(m,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Elastic IPs`,icon:n,count:r.length,to:`/ec2/describe-addresses`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No Elastic IPs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(tt),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function tt(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.PublicIp}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.AssociationId?`associated`:`available`})]},e.AllocationId)}export{ke as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./link-BokOReHc.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./chevron-down-Dt4q6d24.js";import{t as l}from"./chevron-right-c57whaks.js";import{a as u,i as d,n as f,o as p,r as ee,s as m,t as h}from"./waypoints-DE7eIn9V.js";import{t as g}from"./network-RAx0KOlf.js";import{n as te}from"./admin-context-C7nTf-ee.js";import{A as ne,M as _,_ as re,d as v,l as ie,n as y,p as ae,w as b}from"./ec2-DYgBhYCJ.js";import{n as x}from"./s3-ClpClaoT.js";import{t as S}from"./page-heading-vksh_67w.js";import{t as oe}from"./badge-6vbuGFqk.js";import{a as se,n as C,o as w,r as T,s as ce,t as E}from"./card-xPs7xSYh.js";import{o as le,r as D}from"./admin-JuLSsFKq.js";import{a as O,c as k,i as A,l as j,n as ue,o as M,s as N,t as P}from"./alert-dialog-jxylPXwR.js";import{t as F}from"./state-badge-pn00UE1d.js";var I={name:`box`,size:24,node:[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]};I.node;var L=s(I),R={name:`flask-conical`,size:24,node:[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]};R.node;var z=s(R),B={name:`folder-open`,size:24,node:[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]};B.node;var V=s(B),H={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};H.node;var de=s(H),U={name:`monitor`,size:24,node:[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]};U.node;var fe=s(U),W={name:`ship`,size:24,node:[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 9.189V13`,key:`yp40p3`}],[`path`,{d:`M19 12V6a2 2 0 00-2-2H7a2 2 0 00-2 2v6`,key:`1wcigf`}],[`path`,{d:`M19.38 19A11.6 11.6 0 0021 13l-8.188-3.639a2 2 0 00-1.624 0L3 13.001a11.6 11.6 0 002.81 7.76`,key:`1kdp0u`}],[`path`,{d:`M2 20c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1`,key:`1l8w7g`}]]};W.node;var pe=s(W),G=r(),K=t(n(),1),q=e(),me=[{name:`Air-gap Support`,key:`airgap`},{name:`NVIDIA Bluefield DPU`,key:`bluefield`},{name:`NVIDIA MIG Support`,key:`mig`}];function J(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600);if(t>0)return`${t}d ${n}h`;let r=Math.floor(e%3600/60);return n>0?`${n}h ${r}m`:`${r}m`}function he(){let e=(0,G.c)(129),{isAdmin:t,version:n,license:r}=te(),[a,o]=(0,K.useState)(!1),s;e[0]===t?s=e[1]:(s={...D,enabled:t},e[0]=t,e[1]=s);let{data:u}=i(s),d;e[2]===t?d=e[3]:(d={...le,enabled:t},e[2]=t,e[3]=d);let{data:f}=i(d);if(!t||!n)return null;let p;e[4]===u?.nodes?p=e[5]:(p=u?.nodes??[],e[4]=u?.nodes,e[5]=p);let m=p,h;e[6]===f?.vms?h=e[7]:(h=f?.vms??[],e[6]=f?.vms,e[7]=h);let g=h,ne=u?.cluster_mode??`single-node`,_=r===`open-source`,re=m[0]?.region??null,v;e[8]===m?v=e[9]:(v=m.reduce(ye,0),e[8]=m,e[9]=v);let ie=v,y;e[10]===m?y=e[11]:(y=m.reduce(ve,0),e[10]=m,e[11]=y);let ae=y,b,x,S,se,C,O,k,A,j,ue,M,N,P,F,I,L,R;if(e[12]!==ae||e[13]!==ne||e[14]!==_||e[15]!==m||e[16]!==re||e[17]!==ie||e[18]!==n.arch||e[19]!==n.commit||e[20]!==n.os||e[21]!==n.version||e[22]!==g.length){let t=m.reduce(_e,0),r=m.reduce(ge,0);P=`mb-6 space-y-4`,ue=`grid grid-cols-1 gap-4 md:grid-cols-3`;let i;e[40]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsxs)(ce,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(fe,{className:`size-3.5`}),`Spinifex Info`]})}),e[40]=i):i=e[40];let a;e[41]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Version`}),e[41]=a):a=e[41];let o;e[42]===n.version?o=e[43]:(o=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[a,(0,q.jsx)(`span`,{className:`font-mono`,children:n.version})]}),e[42]=n.version,e[43]=o);let s;e[44]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Commit`}),e[44]=s):s=e[44];let c;e[45]===n.commit?c=e[46]:(c=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[s,(0,q.jsx)(`span`,{className:`font-mono`,children:n.commit})]}),e[45]=n.commit,e[46]=c);let l;e[47]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Platform`}),e[47]=l):l=e[47];let u;e[48]!==n.arch||e[49]!==n.os?(u=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[l,(0,q.jsxs)(`span`,{children:[n.os,`/`,n.arch]})]}),e[48]=n.arch,e[49]=n.os,e[50]=u):u=e[50];let d;e[51]===re?d=e[52]:(d=re&&(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Region`}),(0,q.jsx)(`span`,{children:re})]}),e[51]=re,e[52]=d),e[53]!==o||e[54]!==c||e[55]!==u||e[56]!==d?(M=(0,q.jsxs)(E,{children:[i,(0,q.jsxs)(T,{className:`space-y-1 text-xs`,children:[o,c,u,d]})]}),e[53]=o,e[54]=c,e[55]=u,e[56]=d,e[57]=M):M=e[57];let f;e[58]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsx)(ce,{className:`text-sm`,children:`License & Support`})}),e[58]=f):f=e[58];let p;e[59]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`License`}),e[59]=p):p=e[59];let h=_?`secondary`:`default`,te=_?`Open Source (AGPLv3)`:`Commercial`,v;e[60]!==h||e[61]!==te?(v=(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[p,(0,q.jsx)(oe,{variant:h,children:te})]}),e[60]=h,e[61]=te,e[62]=v):v=e[62];let y;e[63]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Support`}),e[63]=y):y=e[63];let le=_?`Community`:`Standard`,D;e[64]===le?D=e[65]:(D=(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[y,(0,q.jsx)(`span`,{children:le})]}),e[64]=le,e[65]=D);let z;e[66]===_?z=e[67]:(z=_&&(0,q.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:`mt-2 block text-xs font-medium text-primary hover:underline`,children:`Upgrade to Commercial →`}),e[66]=_,e[67]=z),e[68]!==v||e[69]!==D||e[70]!==z?(N=(0,q.jsxs)(E,{children:[f,(0,q.jsxs)(T,{className:`space-y-2 text-xs`,children:[v,D,z]})]}),e[68]=v,e[69]=D,e[70]=z,e[71]=N):N=e[71],x=E,e[72]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsxs)(ce,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(ee,{className:`size-3.5`}),`Cluster Status`]})}),e[72]=j):j=e[72],b=T,se=`space-y-2 text-xs`,e[73]===ne?C=e[74]:(C=(0,q.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,q.jsx)(oe,{variant:`outline`,children:ne})}),e[73]=ne,e[74]=C);let B;e[75]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Nodes`}),e[75]=B):B=e[75],e[76]===m.length?O=e[77]:(O=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[B,(0,q.jsx)(`span`,{children:m.length})]}),e[76]=m.length,e[77]=O);let V;e[78]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Instances`}),e[78]=V):V=e[78],e[79]===g.length?k=e[80]:(k=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[V,(0,q.jsx)(`span`,{children:g.length})]}),e[79]=g.length,e[80]=k);let H;e[81]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`vCPU`}),e[81]=H):H=e[81],e[82]!==ae||e[83]!==ie?(A=(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[H,(0,q.jsxs)(`span`,{children:[ae,` / `,ie]})]}),e[82]=ae,e[83]=ie,e[84]=A):A=e[84],R=`flex justify-between`,e[85]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`Memory`}),e[85]=S):S=e[85],F=r.toFixed(1),I=` / `,L=t.toFixed(1),e[12]=ae,e[13]=ne,e[14]=_,e[15]=m,e[16]=re,e[17]=ie,e[18]=n.arch,e[19]=n.commit,e[20]=n.os,e[21]=n.version,e[22]=g.length,e[23]=b,e[24]=x,e[25]=S,e[26]=se,e[27]=C,e[28]=O,e[29]=k,e[30]=A,e[31]=j,e[32]=ue,e[33]=M,e[34]=N,e[35]=P,e[36]=F,e[37]=I,e[38]=L,e[39]=R}else b=e[23],x=e[24],S=e[25],se=e[26],C=e[27],O=e[28],k=e[29],A=e[30],j=e[31],ue=e[32],M=e[33],N=e[34],P=e[35],F=e[36],I=e[37],L=e[38],R=e[39];let z;e[86]!==F||e[87]!==I||e[88]!==L?(z=(0,q.jsxs)(`span`,{children:[F,I,L,` GB`]}),e[86]=F,e[87]=I,e[88]=L,e[89]=z):z=e[89];let B;e[90]!==S||e[91]!==z||e[92]!==R?(B=(0,q.jsxs)(`div`,{className:R,children:[S,z]}),e[90]=S,e[91]=z,e[92]=R,e[93]=B):B=e[93];let V;e[94]!==b||e[95]!==se||e[96]!==C||e[97]!==O||e[98]!==k||e[99]!==A||e[100]!==B?(V=(0,q.jsxs)(b,{className:se,children:[C,O,k,A,B]}),e[94]=b,e[95]=se,e[96]=C,e[97]=O,e[98]=k,e[99]=A,e[100]=B,e[101]=V):V=e[101];let H;e[102]!==x||e[103]!==j||e[104]!==V?(H=(0,q.jsxs)(x,{children:[j,V]}),e[102]=x,e[103]=j,e[104]=V,e[105]=H):H=e[105];let U;e[106]!==ue||e[107]!==M||e[108]!==N||e[109]!==H?(U=(0,q.jsxs)(`div`,{className:ue,children:[M,N,H]}),e[106]=ue,e[107]=M,e[108]=N,e[109]=H,e[110]=U):U=e[110];let W;e[111]!==m||e[112]!==a?(W=m.length>0&&(0,q.jsxs)(E,{children:[(0,q.jsx)(w,{className:`pb-0`,children:(0,q.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 text-sm font-medium`,onClick:()=>{o(!a)},children:[a?(0,q.jsx)(c,{className:`size-3.5`}):(0,q.jsx)(l,{className:`size-3.5`}),`Nodes (`,m.length,`)`]})}),a&&(0,q.jsx)(T,{className:`pt-2`,children:(0,q.jsx)(be,{nodes:m})})]}),e[111]=m,e[112]=a,e[113]=W):W=e[113];let pe;e[114]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,q.jsx)(w,{className:`pb-2`,children:(0,q.jsx)(ce,{className:`text-sm`,children:`Commercial Add-ons`})}),e[114]=pe):pe=e[114];let J;e[115]===_?J=e[116]:(J=me.map(e=>(0,q.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,q.jsx)(`span`,{className:_?`text-muted-foreground`:void 0,children:e.name}),_?(0,q.jsx)(de,{className:`size-3 text-muted-foreground`}):(0,q.jsx)(oe,{variant:`outline`,className:`text-[0.625rem]`,children:`Active`})]},e.key)),e[115]=_,e[116]=J);let he;e[117]===J?he=e[118]:(he=(0,q.jsx)(`div`,{className:`space-y-2`,children:J}),e[117]=J,e[118]=he);let xe;e[119]===_?xe=e[120]:(xe=_&&(0,q.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:`mt-3 block text-xs font-medium text-primary hover:underline`,children:`Learn more about commercial features →`}),e[119]=_,e[120]=xe);let Se;e[121]!==he||e[122]!==xe?(Se=(0,q.jsxs)(E,{children:[pe,(0,q.jsxs)(T,{children:[he,xe]})]}),e[121]=he,e[122]=xe,e[123]=Se):Se=e[123];let Ce;return e[124]!==P||e[125]!==U||e[126]!==W||e[127]!==Se?(Ce=(0,q.jsxs)(`div`,{className:P,children:[U,W,Se]}),e[124]=P,e[125]=U,e[126]=W,e[127]=Se,e[128]=Ce):Ce=e[128],Ce}function ge(e,t){return e+t.alloc_mem_gb}function _e(e,t){return e+t.total_mem_gb}function ve(e,t){return e+t.alloc_vcpu}function ye(e,t){return e+t.total_vcpu}function be(e){let t=(0,G.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Roles`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`IP`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Region`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`AZ`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Uptime`}),(0,q.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`EC2`}),(0,q.jsx)(`th`,{className:`pb-1 font-medium`,children:`Services`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(xe),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,q.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function xe(e){return(0,q.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,q.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,q.jsx)(oe,{variant:e.status===`Ready`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,q.jsxs)(`div`,{className:`flex gap-1`,children:[e.nats_role&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`nats:`,e.nats_role]}),e.predastore_role&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`ps:`,e.predastore_role]})]})}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.region}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.az}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:J(e.uptime)}),(0,q.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vm_count}),(0,q.jsx)(`td`,{className:`py-1.5`,children:(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.services.length})})]},e.node)}var Se=`console.spx3.com`,Ce=`spinifex:v1:sandbox-welcome`,we=[{to:`/ec2/run-instances`,icon:(0,q.jsx)(p,{className:`size-3.5`}),label:`Launch an instance`,hint:`Boot a VM on real hardware`},{to:`/s3/ls`,icon:(0,q.jsx)(V,{className:`size-3.5`}),label:`Create a bucket`,hint:`S3-compatible object storage`},{to:`/ec2/describe-vpcs`,icon:(0,q.jsx)(g,{className:`size-3.5`}),label:`Networking`,hint:`VPCs, subnets and security groups`},{to:`/eks/list-clusters`,icon:(0,q.jsx)(pe,{className:`size-3.5`}),label:`Kubernetes`,hint:`Managed EKS-compatible clusters`},{to:`/iam/list-users`,icon:(0,q.jsx)(u,{className:`size-3.5`}),label:`Access keys`,hint:`Credentials for the AWS CLI and SDKs`}];function Te(){try{return localStorage.getItem(Ce)!==null}catch{}return!1}function Ee(){try{localStorage.setItem(Ce,`1`)}catch{}}function De(){let e=(0,G.c)(7),[t,n]=(0,K.useState)(Oe),r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=e=>{e||Ee(),n(e)},e[0]=r):r=e[0];let i=r,o;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,q.jsxs)(N,{children:[(0,q.jsx)(k,{children:(0,q.jsx)(z,{className:`text-primary`})}),(0,q.jsx)(j,{children:`Welcome to the Mulga sandbox`}),(0,q.jsx)(O,{children:`You have a real account on a shared evaluation cluster. The APIs are the AWS ones, so the CLI and the SDKs work against it unchanged. Resources here may be reclaimed, so please don't keep anything you need in it.`})]}),e[1]=o):o=e[1];let s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(`div`,{className:`space-y-0.5`,children:we.map(e=>(0,q.jsxs)(a,{className:`flex items-center gap-2 rounded-md px-2 py-1.5 text-xs hover:bg-muted`,onClick:()=>{i(!1)},to:e.to,children:[e.icon,(0,q.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.hint})]},e.to))}),e[2]=s):s=e[2];let c;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,q.jsx)(`a`,{className:`text-xs text-muted-foreground underline underline-offset-3 hover:text-foreground sm:mr-auto sm:self-center`,href:`https://docs.mulgadc.com`,rel:`noreferrer`,target:`_blank`,children:`Read the docs`}),e[3]=c):c=e[3];let l;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsxs)(A,{className:`max-w-lg`,children:[o,s,(0,q.jsxs)(M,{children:[c,(0,q.jsx)(ue,{onClick:()=>{i(!1)},children:`Get started`})]})]}),e[4]=l):l=e[4];let u;return e[5]===t?u=e[6]:(u=(0,q.jsx)(P,{onOpenChange:i,open:t,children:l}),e[5]=t,e[6]=u),u}function Oe(){return window.location.hostname===Se&&!Te()}var Y=5;function ke(){let e=(0,G.c)(12),t,n,r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,q.jsx)(S,{title:`Dashboard`}),n=(0,q.jsx)(De,{}),r=(0,q.jsx)(he,{}),e[0]=t,e[1]=n,e[2]=r):(t=e[0],n=e[1],r=e[2]);let i;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Ae,{})}),e[3]=i):i=e[3];let a;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Le,{})}),e[4]=a):a=e[4];let o;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(He,{})}),e[5]=o):o=e[5];let s;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(We,{})}),e[6]=s):s=e[6];let c;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Ke,{})}),e[7]=c):c=e[7];let l;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Je,{})}),e[8]=l):l=e[8];let u;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Xe,{})}),e[9]=u):u=e[9];let d;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(et,{})}),e[10]=d):d=e[10];let f;return e[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,q.jsxs)(q.Fragment,{children:[t,n,r,(0,q.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`,children:[i,a,o,s,c,l,u,d,(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(X,{}),children:(0,q.jsx)(Qe,{})})]})]}),e[11]=f):f=e[11],f}function X(){let e=(0,G.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,q.jsx)(w,{children:(0,q.jsx)(`div`,{className:`h-4 w-32 animate-pulse rounded bg-muted`})}),e[0]=t):t=e[0];let n;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsxs)(E,{children:[t,(0,q.jsx)(T,{children:(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(`div`,{className:`h-3 w-48 animate-pulse rounded bg-muted`}),(0,q.jsx)(`div`,{className:`h-3 w-36 animate-pulse rounded bg-muted`})]})})]}),e[1]=n):n=e[1],n}function Z(e){let t=(0,G.c)(16),{title:n,icon:r,count:i,to:o,children:s}=e,c;t[0]!==r||t[1]!==n?(c=(0,q.jsxs)(ce,{className:`flex items-center gap-2`,children:[r,n]}),t[0]=r,t[1]=n,t[2]=c):c=t[2];let l;t[3]===i?l=t[4]:(l=(0,q.jsx)(C,{children:(0,q.jsx)(`span`,{className:`rounded-md bg-muted px-2 py-0.5 text-xs font-semibold tabular-nums`,children:i})}),t[3]=i,t[4]=l);let u;t[5]!==c||t[6]!==l?(u=(0,q.jsxs)(w,{children:[c,l]}),t[5]=c,t[6]=l,t[7]=u):u=t[7];let d;t[8]===s?d=t[9]:(d=(0,q.jsx)(T,{children:s}),t[8]=s,t[9]=d);let f;t[10]===o?f=t[11]:(f=(0,q.jsx)(se,{children:(0,q.jsx)(a,{to:o,className:`text-xs font-medium text-primary hover:underline`,children:`View all →`})}),t[10]=o,t[11]=f);let p;return t[12]!==u||t[13]!==d||t[14]!==f?(p=(0,q.jsxs)(E,{children:[u,d,f]}),t[12]=u,t[13]=d,t[14]=f,t[15]=p):p=t[15],p}function Q(e){let t=(0,G.c)(2),{total:n}=e;if(n<=Y)return null;let r=n-Y,i;return t[0]===r?i=t[1]:(i=(0,q.jsxs)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:[`+`,r,` more`]}),t[0]=r,t[1]=i),i}function $(e){let t=(0,G.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,q.jsx)(`div`,{className:`flex items-center justify-between py-0.5 text-xs`,children:n}),t[0]=n,t[1]=r),r}function Ae(){let e=(0,G.c)(16),{data:t}=i(ie),n,r,a,o,s;if(e[0]!==t?.Reservations){let i=t?.Reservations?.flatMap(Ie)??[];n=i.filter(Fe),a=i.filter(Pe),o=i.filter(Ne),r=i.filter(Me),s=[...a,...r].slice(0,Y),e[0]=t?.Reservations,e[1]=n,e[2]=r,e[3]=a,e[4]=o,e[5]=s}else n=e[1],r=e[2],a=e[3],o=e[4],s=e[5];let c=s,l;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,q.jsx)(p,{className:`size-3.5`}),e[6]=l):l=e[6];let u;e[7]!==n.length||e[8]!==c||e[9]!==r||e[10]!==a||e[11]!==o?(u=n.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`mb-2 flex gap-3 text-[0.625rem] text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[a.length,` running`]}),(0,q.jsxs)(`span`,{children:[o.length,` stopped`]})]}),(0,q.jsx)(`div`,{className:`space-y-0.5`,children:c.map(je)}),(0,q.jsx)(Q,{total:a.length+r.length})]}),e[7]=n.length,e[8]=c,e[9]=r,e[10]=a,e[11]=o,e[12]=u):u=e[12];let d;return e[13]!==n.length||e[14]!==u?(d=(0,q.jsx)(Z,{title:`Instances`,icon:l,count:n.length,to:`/ec2/describe-instances`,children:u}),e[13]=n.length,e[14]=u,e[15]=d):d=e[15],d}function je(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.InstanceId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.InstanceType})]},e.InstanceId)}function Me(e){return e.State?.Name===`pending`}function Ne(e){return e.State?.Name===`stopped`}function Pe(e){return e.State?.Name===`running`}function Fe(e){return e.State?.Name!==`terminated`}function Ie(e){return e.Instances??[]}function Le(){let e=(0,G.c)(14),{data:t}=i(ne),n;e[0]===t?.Volumes?n=e[1]:(n=t?.Volumes??[],e[0]=t?.Volumes,e[1]=n);let r=n,a;e[2]===r?a=e[3]:(a=r.reduce(Ve,0),e[2]=r,e[3]=a);let o=a,s;e[4]===r?s=e[5]:(s=r.filter(Be),e[4]=r,e[5]=s);let c=s,l;e[6]===r?l=e[7]:(l=r.filter(ze),e[6]=r,e[7]=l);let u=l,d;if(e[8]!==u||e[9]!==c||e[10]!==o||e[11]!==r){let t=r.slice(0,Y),n;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(L,{className:`size-3.5`}),e[13]=n):n=e[13],d=(0,q.jsx)(Z,{title:`Volumes`,icon:n,count:r.length,to:`/ec2/describe-volumes`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No volumes`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`mb-2 flex gap-3 text-[0.625rem] text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[o,` GiB total`]}),(0,q.jsxs)(`span`,{children:[c.length,` in-use`]}),(0,q.jsxs)(`span`,{children:[u.length,` available`]})]}),(0,q.jsx)(`div`,{className:`space-y-0.5`,children:t.map(Re)}),(0,q.jsx)(Q,{total:r.length})]})}),e[8]=u,e[9]=c,e[10]=o,e[11]=r,e[12]=d}else d=e[12];return d}function Re(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.VolumeId}),(0,q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.Size,` GiB`]}),(0,q.jsx)(F,{state:e.State})]})]},e.VolumeId)}function ze(e){return e.State===`available`}function Be(e){return e.State===`in-use`}function Ve(e,t){return e+(t.Size??0)}function He(){let e=(0,G.c)(5),{data:t}=i(_),n;e[0]===t?.Vpcs?n=e[1]:(n=t?.Vpcs??[],e[0]=t?.Vpcs,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(g,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`VPCs`,icon:n,count:r.length,to:`/ec2/describe-vpcs`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No VPCs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ue),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ue(e){let t=o(e.Tags);return(0,q.jsxs)($,{children:[(0,q.jsxs)(`span`,{className:`font-mono`,children:[e.VpcId,t&&(0,q.jsxs)(`span`,{className:`ml-1 font-sans text-muted-foreground`,children:[`(`,t,`)`]})]}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.CidrBlock})]},e.VpcId)}function We(){let e=(0,G.c)(5),{data:t}=i(ae),n;e[0]===t?.KeyPairs?n=e[1]:(n=t?.KeyPairs??[],e[0]=t?.KeyPairs,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(u,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Key Pairs`,icon:n,count:r.length,to:`/ec2/describe-key-pairs`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No key pairs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ge),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ge(e){return(0,q.jsx)($,{children:(0,q.jsx)(`span`,{className:`font-mono`,children:e.KeyName})},e.KeyPairId)}function Ke(){let e=(0,G.c)(5),{data:t}=i(x),n;e[0]===t?.Buckets?n=e[1]:(n=t?.Buckets??[],e[0]=t?.Buckets,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(V,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`S3 Buckets`,icon:n,count:r.length,to:`/s3/ls`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No buckets`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(qe),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function qe(e){return(0,q.jsx)($,{children:(0,q.jsx)(`span`,{className:`font-mono`,children:e.Name})},e.Name)}function Je(){let e=(0,G.c)(5),{data:t}=i(b),n;e[0]===t?.SecurityGroups?n=e[1]:(n=t?.SecurityGroups??[],e[0]=t?.SecurityGroups,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(f,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Security Groups`,icon:n,count:r.length,to:`/ec2/describe-security-groups`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ye),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ye(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.GroupName}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.VpcId})]},e.GroupId)}function Xe(){let e=(0,G.c)(5),{data:t}=i(re),n;e[0]===t?.NatGateways?n=e[1]:(n=t?.NatGateways??[],e[0]=t?.NatGateways,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(h,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`NAT Gateways`,icon:n,count:r.length,to:`/ec2/describe-nat-gateways`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No NAT gateways`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(Ze),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function Ze(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.NatGatewayId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.State})]},e.NatGatewayId)}function Qe(){let e=(0,G.c)(5),{data:t}=i(v),n;e[0]===t?.InternetGateways?n=e[1]:(n=t?.InternetGateways??[],e[0]=t?.InternetGateways,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(d,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Internet Gateways`,icon:n,count:r.length,to:`/ec2/describe-internet-gateways`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No internet gateways`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map($e),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function $e(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.InternetGatewayId}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.Attachments?.[0]?.VpcId?`attached`:`detached`})]},e.InternetGatewayId)}function et(){let e=(0,G.c)(5),{data:t}=i(y),n;e[0]===t?.Addresses?n=e[1]:(n=t?.Addresses??[],e[0]=t?.Addresses,e[1]=n);let r=n,a;if(e[2]!==r){let t=r.slice(0,Y),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,q.jsx)(m,{className:`size-3.5`}),e[4]=n):n=e[4],a=(0,q.jsx)(Z,{title:`Elastic IPs`,icon:n,count:r.length,to:`/ec2/describe-addresses`,children:r.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No Elastic IPs`}):(0,q.jsxs)(`div`,{className:`space-y-0.5`,children:[t.map(tt),(0,q.jsx)(Q,{total:r.length})]})}),e[2]=r,e[3]=a}else a=e[3];return a}function tt(e){return(0,q.jsxs)($,{children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.PublicIp}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.AssociationId?`associated`:`available`})]},e.AllocationId)}export{ke as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CkOBR5mi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CkOBR5mi.js deleted file mode 100644 index 23dacf5a8..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CkOBR5mi.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_bucket-CLnjEgQx.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/createLucideIcon-BQgzNCBR.js","assets/upload-button-BZcdmGoQ.js","assets/download-B-6MA128.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/s3-DaPUyf7s.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/s3-DFfxBBj-.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./s3-DFfxBBj-.js";var i=e(`/_auth/s3/ls/$bucket/`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.bucket),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.bucket} | S3 | Mulga`}]}),component:t(()=>n(()=>import(`./_bucket-CLnjEgQx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DQCindTO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DQCindTO.js new file mode 100644 index 000000000..7d53abb5e --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DQCindTO.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_bucket-DsJzdlcH.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/createLucideIcon-BQgzNCBR.js","assets/upload-button-D1_Hb-WX.js","assets/download-B-6MA128.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/s3-D7lLgKWv.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/s3-ClpClaoT.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./s3-ClpClaoT.js";var i=e(`/_auth/s3/ls/$bucket/`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.bucket),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.bucket} | S3 | Mulga`}]}),component:t(()=>n(()=>import(`./_bucket-DsJzdlcH.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CLnjEgQx.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DsJzdlcH.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CLnjEgQx.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DsJzdlcH.js index 69aed3ae0..5bfa69399 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-CLnjEgQx.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_bucket-DsJzdlcH.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{cn as r}from"./cluster-config-xw_Q7X1e.js";import{t as i}from"./back-link-CjKy1JE5.js";import{n as a,r as o,t as s}from"./upload-button-BZcdmGoQ.js";import{r as c}from"./s3-DaPUyf7s.js";import{t as l}from"./s3-DFfxBBj-.js";import{t as u}from"./_bucket-CkOBR5mi.js";import{t as d}from"./page-heading-vksh_67w.js";import{t as f}from"./error-banner-DeOeVBKS.js";var p=t(),m=e();function h(){let e=(0,p.c)(31),{bucket:t}=u.useParams(),h;e[0]===t?h=e[1]:(h=l(t),e[0]=t,e[1]=h);let{data:g}=n(h),_=c(),v;e[2]===g.Contents?v=e[3]:(v=g.Contents??[],e[2]=g.Contents,e[3]=v);let y=v,b;e[4]===g.CommonPrefixes?b=e[5]:(b=g.CommonPrefixes??[],e[4]=g.CommonPrefixes,e[5]=b);let x=b,S;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,m.jsx)(i,{to:`/s3/ls`,children:`Back to buckets`}),e[6]=S):S=e[6];let C;e[7]!==t||e[8]!==_.isPending||e[9]!==_.mutateAsync?(C=(0,m.jsx)(s,{bucket:t,isPending:_.isPending,onUpload:_.mutateAsync}),e[7]=t,e[8]=_.isPending,e[9]=_.mutateAsync,e[10]=C):C=e[10];let w;e[11]!==t||e[12]!==C?(w=(0,m.jsx)(d,{actions:C,title:t}),e[11]=t,e[12]=C,e[13]=w):w=e[13];let T;e[14]===_.error?T=e[15]:(T=_.error&&(0,m.jsx)(f,{error:_.error,msg:`Failed to upload object`}),e[14]=_.error,e[15]=T);let E;e[16]!==t||e[17]!==x?(E=x.length>0&&(0,m.jsxs)(`div`,{className:`mb-6`,children:[(0,m.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Folders`}),(0,m.jsx)(`div`,{className:`space-y-2`,children:x.map(e=>{if(!e.Prefix)return null;let n=r(e.Prefix);return(0,m.jsx)(o,{bucketName:t,folderName:n,fullPrefix:e.Prefix},e.Prefix)})})]}),e[16]=t,e[17]=x,e[18]=E):E=e[18];let D;e[19]!==t||e[20]!==y?(D=y.length>0&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Objects`}),y.map(e=>e.Key?(0,m.jsx)(a,{bucketName:t,displayName:e.Key,fullKey:e.Key,object:e},e.Key):null)]}),e[19]=t,e[20]=y,e[21]=D):D=e[21];let O;e[22]!==x.length||e[23]!==y.length?(O=y.length===0&&x.length===0&&(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No objects found in this bucket.`}),e[22]=x.length,e[23]=y.length,e[24]=O):O=e[24];let k;return e[25]!==w||e[26]!==T||e[27]!==E||e[28]!==D||e[29]!==O?(k=(0,m.jsxs)(m.Fragment,{children:[S,w,T,E,D,O]}),e[25]=w,e[26]=T,e[27]=E,e[28]=D,e[29]=O,e[30]=k):k=e[30],k}export{h as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{ln as r}from"./cluster-config-DkOiY8HH.js";import{t as i}from"./back-link-wsXUoJ12.js";import{n as a,r as o,t as s}from"./upload-button-D1_Hb-WX.js";import{r as c}from"./s3-D7lLgKWv.js";import{t as l}from"./s3-ClpClaoT.js";import{t as u}from"./_bucket-DQCindTO.js";import{t as d}from"./page-heading-vksh_67w.js";import{t as f}from"./error-banner-DeOeVBKS.js";var p=t(),m=e();function h(){let e=(0,p.c)(31),{bucket:t}=u.useParams(),h;e[0]===t?h=e[1]:(h=l(t),e[0]=t,e[1]=h);let{data:g}=n(h),_=c(),v;e[2]===g.Contents?v=e[3]:(v=g.Contents??[],e[2]=g.Contents,e[3]=v);let y=v,b;e[4]===g.CommonPrefixes?b=e[5]:(b=g.CommonPrefixes??[],e[4]=g.CommonPrefixes,e[5]=b);let x=b,S;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,m.jsx)(i,{to:`/s3/ls`,children:`Back to buckets`}),e[6]=S):S=e[6];let C;e[7]!==t||e[8]!==_.isPending||e[9]!==_.mutateAsync?(C=(0,m.jsx)(s,{bucket:t,isPending:_.isPending,onUpload:_.mutateAsync}),e[7]=t,e[8]=_.isPending,e[9]=_.mutateAsync,e[10]=C):C=e[10];let w;e[11]!==t||e[12]!==C?(w=(0,m.jsx)(d,{actions:C,title:t}),e[11]=t,e[12]=C,e[13]=w):w=e[13];let T;e[14]===_.error?T=e[15]:(T=_.error&&(0,m.jsx)(f,{error:_.error,msg:`Failed to upload object`}),e[14]=_.error,e[15]=T);let E;e[16]!==t||e[17]!==x?(E=x.length>0&&(0,m.jsxs)(`div`,{className:`mb-6`,children:[(0,m.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Folders`}),(0,m.jsx)(`div`,{className:`space-y-2`,children:x.map(e=>{if(!e.Prefix)return null;let n=r(e.Prefix);return(0,m.jsx)(o,{bucketName:t,folderName:n,fullPrefix:e.Prefix},e.Prefix)})})]}),e[16]=t,e[17]=x,e[18]=E):E=e[18];let D;e[19]!==t||e[20]!==y?(D=y.length>0&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`h2`,{className:`mb-3 text-lg font-semibold`,children:`Objects`}),y.map(e=>e.Key?(0,m.jsx)(a,{bucketName:t,displayName:e.Key,fullKey:e.Key,object:e},e.Key):null)]}),e[19]=t,e[20]=y,e[21]=D):D=e[21];let O;e[22]!==x.length||e[23]!==y.length?(O=y.length===0&&x.length===0&&(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No objects found in this bucket.`}),e[22]=x.length,e[23]=y.length,e[24]=O):O=e[24];let k;return e[25]!==w||e[26]!==T||e[27]!==E||e[28]!==D||e[29]!==O?(k=(0,m.jsxs)(m.Fragment,{children:[S,w,T,E,D,O]}),e[25]=w,e[26]=T,e[27]=E,e[28]=D,e[29]=O,e[30]=k):k=e[30],k}export{h as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-B64Oml-i.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-B64Oml-i.js new file mode 100644 index 000000000..c575c2225 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-B64Oml-i.js @@ -0,0 +1 @@ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{t as c}from"./back-link-wsXUoJ12.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-qf9lLJ2x.js";import{t as d}from"./input-D3aUBtS6.js";import{O as f,c as p,p as m,w as h}from"./ec2-DYgBhYCJ.js";import{i as g,r as _,s as v,t as y}from"./ecs-BmKTMTV2.js";import{i as b,l as x,o as S,r as C,u as w}from"./ecs-Bz1Yh-WL.js";import{t as T}from"./_clusterName-DRa210J1.js";import{t as E}from"./page-heading-vksh_67w.js";import{t as ee}from"./error-banner-DeOeVBKS.js";import{s as D,t as O}from"./field-CS-ql6du.js";import{a as k,i as A,l as j,n as M,o as N,r as te,s as P,t as ne}from"./alert-dialog-jxylPXwR.js";import{t as F}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as re,t as I}from"./detail-row-DNBRlVeK.js";import{t as ie}from"./state-badge-pn00UE1d.js";import{t as L}from"./gpu-instance-type-select-DMxBayBV.js";import{i as R,n as ae,r as z,t as oe}from"./tabs-BMSqRmVw.js";var se=r(),B=t(n(),1),V=e(),H=`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`;function U(e){let t=(0,se.c)(79),{clusterName:n,open:r,onOpenChange:a}=e,o=S(),{data:s}=i(f),{data:c}=i(h),{data:l}=i(m),{data:u}=i(p),g;t[0]===s?.Subnets?g=t[1]:(g=s?.Subnets??[],t[0]=s?.Subnets,t[1]=g);let _=g,v;t[2]===c?.SecurityGroups?v=t[3]:(v=c?.SecurityGroups??[],t[2]=c?.SecurityGroups,t[3]=v);let y=v,b;t[4]===l?.KeyPairs?b=t[5]:(b=l?.KeyPairs??[],t[4]=l?.KeyPairs,t[5]=b);let x=b,C;t[6]===u?.InstanceTypes?C=t[7]:(C=u?.InstanceTypes??[],t[6]=u?.InstanceTypes,t[7]=C);let w=C,[T,E]=(0,B.useState)(`t3.small`),[F,re]=(0,B.useState)(1),[I,ie]=(0,B.useState)(``),[R,ae]=(0,B.useState)(``),[z,oe]=(0,B.useState)(``),U;t[8]!==a||t[9]!==o?(U=function(e){e||(E(`t3.small`),re(1),ie(``),ae(``),oe(``),o.reset()),a(e)},t[8]=a,t[9]=o,t[10]=U):U=t[10];let q=U,J;t[11]!==n||t[12]!==F||t[13]!==q||t[14]!==T||t[15]!==z||t[16]!==o||t[17]!==R||t[18]!==I?(J=async function(){try{await o.mutateAsync({Cluster:n,InstanceType:T||void 0,Count:F,SubnetID:I,SecurityGroupID:R,KeyName:z||void 0}),q(!1)}catch{}},t[11]=n,t[12]=F,t[13]=q,t[14]=T,t[15]=z,t[16]=o,t[17]=R,t[18]=I,t[19]=J):J=t[19];let ce=J,Y=o.isPending||I===``||R===``,le;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(le=(0,V.jsx)(j,{children:`Provision EC2 capacity`}),t[20]=le):le=t[20];let X;t[21]===n?X=t[22]:(X=(0,V.jsxs)(P,{children:[le,(0,V.jsxs)(k,{children:[`Launch container instances into cluster “`,n,`”. They register automatically once booted.`]})]}),t[21]=n,t[22]=X);let ue;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,V.jsx)(D,{children:(0,V.jsx)(`label`,{htmlFor:`provision-instance-type`,children:`Instance type`})}),t[23]=ue):ue=t[23];let Z;t[24]!==T||t[25]!==w?(Z=(0,V.jsxs)(O,{children:[ue,(0,V.jsx)(L,{id:`provision-instance-type`,instanceTypes:w,onValueChange:E,value:T})]}),t[24]=T,t[25]=w,t[26]=Z):Z=t[26];let de;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(de=(0,V.jsx)(D,{children:(0,V.jsx)(`label`,{htmlFor:`provision-count`,children:`Count`})}),t[27]=de):de=t[27];let fe;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(fe=e=>{re(Number(e.target.value))},t[28]=fe):fe=t[28];let pe;t[29]===F?pe=t[30]:(pe=(0,V.jsxs)(O,{children:[de,(0,V.jsx)(d,{id:`provision-count`,max:10,min:1,onChange:fe,type:`number`,value:F})]}),t[29]=F,t[30]=pe);let me;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(me=(0,V.jsx)(D,{children:(0,V.jsx)(`label`,{htmlFor:`provision-subnet`,children:`Subnet`})}),t[31]=me):me=t[31];let he;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(he=e=>{ie(e.target.value)},t[32]=he):he=t[32];let ge;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(ge=(0,V.jsx)(`option`,{value:``,children:`Select a subnet`}),t[33]=ge):ge=t[33];let _e;t[34]===_?_e=t[35]:(_e=_.map(K),t[34]=_,t[35]=_e);let ve;t[36]!==I||t[37]!==_e?(ve=(0,V.jsxs)(O,{children:[me,(0,V.jsxs)(`select`,{className:H,id:`provision-subnet`,onChange:he,value:I,children:[ge,_e]})]}),t[36]=I,t[37]=_e,t[38]=ve):ve=t[38];let ye;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,V.jsx)(D,{children:(0,V.jsx)(`label`,{htmlFor:`provision-sg`,children:`Security group`})}),t[39]=ye):ye=t[39];let be;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(be=e=>{ae(e.target.value)},t[40]=be):be=t[40];let xe;t[41]===Symbol.for(`react.memo_cache_sentinel`)?(xe=(0,V.jsx)(`option`,{value:``,children:`Select a security group`}),t[41]=xe):xe=t[41];let Se;t[42]===y?Se=t[43]:(Se=y.map(G),t[42]=y,t[43]=Se);let Ce;t[44]!==R||t[45]!==Se?(Ce=(0,V.jsxs)(O,{children:[ye,(0,V.jsxs)(`select`,{className:H,id:`provision-sg`,onChange:be,value:R,children:[xe,Se]})]}),t[44]=R,t[45]=Se,t[46]=Ce):Ce=t[46];let we;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,V.jsx)(D,{children:(0,V.jsx)(`label`,{htmlFor:`provision-key`,children:`Key pair`})}),t[47]=we):we=t[47];let Te;t[48]===Symbol.for(`react.memo_cache_sentinel`)?(Te=e=>{oe(e.target.value)},t[48]=Te):Te=t[48];let Ee;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,V.jsx)(`option`,{value:``,children:`None`}),t[49]=Ee):Ee=t[49];let De;t[50]===x?De=t[51]:(De=x.map(W),t[50]=x,t[51]=De);let Oe;t[52]!==z||t[53]!==De?(Oe=(0,V.jsxs)(O,{children:[we,(0,V.jsxs)(`select`,{className:H,id:`provision-key`,onChange:Te,value:z,children:[Ee,De]})]}),t[52]=z,t[53]=De,t[54]=Oe):Oe=t[54];let ke;t[55]!==Z||t[56]!==pe||t[57]!==ve||t[58]!==Ce||t[59]!==Oe?(ke=(0,V.jsxs)(`div`,{className:`space-y-4`,children:[Z,pe,ve,Ce,Oe]}),t[55]=Z,t[56]=pe,t[57]=ve,t[58]=Ce,t[59]=Oe,t[60]=ke):ke=t[60];let Q;t[61]===o.error?Q=t[62]:(Q=o.error&&(0,V.jsx)(ee,{error:o.error instanceof Error?o.error:void 0,msg:`Failed to provision capacity.`}),t[61]=o.error,t[62]=Q);let Ae;t[63]===Symbol.for(`react.memo_cache_sentinel`)?(Ae=(0,V.jsx)(te,{children:`Cancel`}),t[63]=Ae):Ae=t[63];let je;t[64]===ce?je=t[65]:(je=e=>{e.preventDefault(),ce()},t[64]=ce,t[65]=je);let Me=o.isPending?`Provisioning…`:`Provision`,Ne;t[66]!==Y||t[67]!==je||t[68]!==Me?(Ne=(0,V.jsxs)(N,{children:[Ae,(0,V.jsx)(M,{disabled:Y,onClick:je,children:Me})]}),t[66]=Y,t[67]=je,t[68]=Me,t[69]=Ne):Ne=t[69];let $;t[70]!==ke||t[71]!==Q||t[72]!==Ne||t[73]!==X?($=(0,V.jsxs)(A,{className:`max-h-[85vh] overflow-y-auto`,children:[X,ke,Q,Ne]}),t[70]=ke,t[71]=Q,t[72]=Ne,t[73]=X,t[74]=$):$=t[74];let Pe;return t[75]!==q||t[76]!==r||t[77]!==$?(Pe=(0,V.jsx)(ne,{onOpenChange:q,open:r,children:$}),t[75]=q,t[76]=r,t[77]=$,t[78]=Pe):Pe=t[78],Pe}function W(e){return(0,V.jsx)(`option`,{value:e.KeyName??``,children:e.KeyName},e.KeyPairId)}function G(e){return(0,V.jsxs)(`option`,{value:e.GroupId??``,children:[e.GroupId,` (`,e.GroupName,`)`]},e.GroupId)}function K(e){return(0,V.jsxs)(`option`,{value:e.SubnetId??``,children:[e.SubnetId,` (`,e.CidrBlock,e.AvailabilityZone?`, ${e.AvailabilityZone}`:``,`)`]},e.SubnetId)}var q={drain:`Drain`,activate:`Activate`,deregister:`Deregister`},J={drain:`Draining force-stops the service-owned tasks on this instance so it can be retired.`,activate:`This returns the instance to ACTIVE so the scheduler can place tasks on it again.`,deregister:`This force-removes the container instance record. Any tasks it still holds are stopped.`};function ce(e){let t=(0,se.c)(29),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=_(n),t[0]=n,t[1]=r);let{data:i}=a(r),o=w(),s=b(),[c,l]=(0,B.useState)(null),[d,f]=(0,B.useState)(!1),p;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(p=()=>{l(null)},t[2]=p):p=t[2];let m=p,h;t[3]!==n||t[4]!==s||t[5]!==c||t[6]!==o?(h=function(){if(c){if(c.action===`deregister`){s.mutate({cluster:n,containerInstance:c.arn},{onSuccess:m});return}o.mutate({cluster:n,containerInstance:c.arn,status:c.action===`drain`?`DRAINING`:`ACTIVE`},{onSuccess:m})}},t[3]=n,t[4]=s,t[5]=c,t[6]=o,t[7]=h):h=t[7];let g=h,v=o.isError||s.isError,y=o.error??s.error,x=o.isPending||s.isPending,S;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,V.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,V.jsx)(u,{onClick:()=>{f(!0)},size:`sm`,children:`Provision EC2 capacity`})}),t[8]=S):S=t[8];let C;t[9]!==y||t[10]!==v?(C=v&&(0,V.jsx)(ee,{error:y instanceof Error?y:void 0,msg:`Container instance action failed.`}),t[9]=y,t[10]=v,t[11]=C):C=t[11];let T;t[12]===i?T=t[13]:(T=i.length===0?(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No container instances found.`}):(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`EC2 Instance`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,V.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,V.jsx)(`tbody`,{children:i.map(e=>{let t=e.containerInstanceArn??``,n=e.status===`DRAINING`;return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.ec2InstanceId}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:(0,V.jsx)(ie,{state:e.status})}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.runningTasksCount??0}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingTasksCount??0}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,V.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,V.jsx)(u,{"aria-label":n?`Activate container instance`:`Drain container instance`,onClick:()=>{l({arn:t,action:n?`activate`:`drain`})},size:`sm`,variant:`outline`,children:n?`Activate`:`Drain`}),(0,V.jsx)(u,{onClick:()=>{l({arn:t,action:`deregister`})},size:`sm`,variant:`destructive`,children:`Deregister`})]})})]},t)})})]})}),t[12]=i,t[13]=T);let E;t[14]!==n||t[15]!==d?(E=(0,V.jsx)(U,{clusterName:n,onOpenChange:f,open:d}),t[14]=n,t[15]=d,t[16]=E):E=t[16];let D=c?q[c.action]:`Confirm`,O=c?J[c.action]:``,k;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(k=e=>{e||l(null)},t[17]=k):k=t[17];let A=c!==null,j;t[18]!==g||t[19]!==x||t[20]!==A||t[21]!==D||t[22]!==O?(j=(0,V.jsx)(F,{confirmLabel:D,description:O,isPending:x,onConfirm:g,onOpenChange:k,open:A,title:`Container instance`}),t[18]=g,t[19]=x,t[20]=A,t[21]=D,t[22]=O,t[23]=j):j=t[23];let M;return t[24]!==j||t[25]!==C||t[26]!==T||t[27]!==E?(M=(0,V.jsxs)(V.Fragment,{children:[S,C,T,E,j]}),t[24]=j,t[25]=C,t[26]=T,t[27]=E,t[28]=M):M=t[28],M}function Y(e){return e?.split(`/`).at(-1)??``}function le(e){let t=(0,se.c)(13),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=g(n),t[0]=n,t[1]=r);let{data:i}=a(r),s;t[2]===n?s=t[3]:(s={cluster:n},t[2]=n,t[3]=s);let c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,V.jsx)(u,{size:`sm`,children:`Create service`}),t[4]=c):c=t[4];let l;t[5]===s?l=t[6]:(l=(0,V.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,V.jsx)(o,{search:s,to:`/ecs/create-service`,children:c})}),t[5]=s,t[6]=l);let d;t[7]!==n||t[8]!==i?(d=i.length===0?(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No services found.`}):(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task Definition`})]})}),(0,V.jsx)(`tbody`,{children:i.map(e=>(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,V.jsx)(o,{className:`underline`,params:{clusterName:n,serviceName:e.serviceName??``},to:`/ecs/list-clusters/$clusterName/services/$serviceName`,children:e.serviceName})}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:(0,V.jsx)(ie,{state:e.status})}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredCount??0}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.runningCount??0}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingCount??0}),(0,V.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:Y(e.taskDefinition)})]},e.serviceArn??e.serviceName))})]})}),t[7]=n,t[8]=i,t[9]=d):d=t[9];let f;return t[10]!==l||t[11]!==d?(f=(0,V.jsxs)(V.Fragment,{children:[l,d]}),t[10]=l,t[11]=d,t[12]=f):f=t[12],f}function X(e){return e?.split(`/`).at(-1)??``}function ue(e){let t=(0,se.c)(27),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=v(n),t[0]=n,t[1]=r);let{data:i}=a(r),s=x(),[c,l]=(0,B.useState)(null),d;t[2]!==n||t[3]!==c||t[4]!==s?(d=function(){c&&s.mutate({cluster:n,task:c},{onSuccess:()=>{l(null)}})},t[2]=n,t[3]=c,t[4]=s,t[5]=d):d=t[5];let f=d,p;t[6]===n?p=t[7]:(p={cluster:n},t[6]=n,t[7]=p);let m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,V.jsx)(u,{size:`sm`,children:`Run task`}),t[8]=m):m=t[8];let h;t[9]===p?h=t[10]:(h=(0,V.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,V.jsx)(o,{search:p,to:`/ecs/run-task`,children:m})}),t[9]=p,t[10]=h);let g;t[11]!==s.error||t[12]!==s.isError?(g=s.isError&&(0,V.jsx)(ee,{error:s.error instanceof Error?s.error:void 0,msg:`Failed to stop task.`}),t[11]=s.error,t[12]=s.isError,t[13]=g):g=t[13];let _;t[14]!==n||t[15]!==i?(_=i.length===0?(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No tasks found.`}):(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Last Status`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired Status`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Group`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,V.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,V.jsx)(`tbody`,{children:i.map(e=>{let t=X(e.taskArn),r=e.lastStatus!==`STOPPED`;return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,V.jsx)(o,{className:`underline`,params:{clusterName:n,taskId:t},to:`/ecs/list-clusters/$clusterName/tasks/$taskId`,children:t})}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:(0,V.jsx)(ie,{state:e.lastStatus})}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredStatus}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.group}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-right`,children:r&&(0,V.jsx)(u,{onClick:()=>{l(e.taskArn??t)},size:`sm`,variant:`destructive`,children:`Stop`})})]},t)})})]})}),t[14]=n,t[15]=i,t[16]=_):_=t[16];let y;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>{e||l(null)},t[17]=y):y=t[17];let b=c!==null,S;t[18]!==f||t[19]!==s.isPending||t[20]!==b?(S=(0,V.jsx)(F,{confirmLabel:`Stop task`,description:`This stops the task and releases its ENI and reserved capacity.`,isPending:s.isPending,onConfirm:f,onOpenChange:y,open:b,pendingLabel:`Stopping…`,title:`Stop task`}),t[18]=f,t[19]=s.isPending,t[20]=b,t[21]=S):S=t[21];let C;return t[22]!==S||t[23]!==h||t[24]!==g||t[25]!==_?(C=(0,V.jsxs)(V.Fragment,{children:[h,g,_,S]}),t[22]=S,t[23]=h,t[24]=g,t[25]=_,t[26]=C):C=t[26],C}function Z(e){let t=(0,se.c)(70),{clusterName:n}=e,r=s(),[i,o]=(0,B.useState)(!1),d;t[0]===n?d=t[1]:(d=y(n),t[0]=n,t[1]=d);let{data:f}=a(d),p=C(),m;t[2]!==n||t[3]!==p||t[4]!==r?(m=function(){p.mutate(n,{onSuccess:()=>{r({to:`/ecs/list-clusters`})}})},t[2]=n,t[3]=p,t[4]=r,t[5]=m):m=t[5];let h=m;if(!f){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,V.jsx)(c,{to:`/ecs/list-clusters`,children:`Clusters`}),t[6]=e):e=t[6];let r;t[7]===n?r=t[8]:(r=(0,V.jsx)(E,{subtitle:`Cluster Details`,title:n}),t[7]=n,t[8]=r);let i;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`Cluster not found.`}),t[9]=i):i=t[9];let a;return t[10]===r?a=t[11]:(a=(0,V.jsxs)(V.Fragment,{children:[e,r,i]}),t[10]=r,t[11]=a),a}let g;t[12]===f.tags?g=t[13]:(g=f.tags??[],t[12]=f.tags,t[13]=g);let _=g,v;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,V.jsx)(c,{to:`/ecs/list-clusters`,children:`Clusters`}),t[14]=v):v=t[14];let b;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(b=()=>{o(!0)},t[15]=b):b=t[15];let x;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,V.jsxs)(u,{onClick:b,size:`sm`,variant:`destructive`,children:[(0,V.jsx)(l,{className:`size-4`}),`Delete`]}),t[16]=x):x=t[16];let S;t[17]===f.status?S=t[18]:(S=(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[x,(0,V.jsx)(ie,{state:f.status})]}),t[17]=f.status,t[18]=S);let w;t[19]!==n||t[20]!==S?(w=(0,V.jsx)(E,{actions:S,subtitle:`Cluster Details`,title:n}),t[19]=n,t[20]=S,t[21]=w):w=t[21];let T;t[22]!==p.error||t[23]!==p.isError?(T=p.isError&&(0,V.jsx)(ee,{error:p.error instanceof Error?p.error:void 0,msg:`Failed to delete cluster.`}),t[22]=p.error,t[23]=p.isError,t[24]=T):T=t[24];let D;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,V.jsx)(re.Header,{children:`Overview`}),t[25]=D):D=t[25];let O;t[26]===f.clusterArn?O=t[27]:(O=(0,V.jsx)(I,{label:`ARN`,value:f.clusterArn}),t[26]=f.clusterArn,t[27]=O);let k;t[28]===f.status?k=t[29]:(k=(0,V.jsx)(I,{label:`Status`,value:f.status}),t[28]=f.status,t[29]=k);let A=String(f.activeServicesCount??0),j;t[30]===A?j=t[31]:(j=(0,V.jsx)(I,{label:`Active services`,value:A}),t[30]=A,t[31]=j);let M=String(f.runningTasksCount??0),N;t[32]===M?N=t[33]:(N=(0,V.jsx)(I,{label:`Running tasks`,value:M}),t[32]=M,t[33]=N);let te=String(f.pendingTasksCount??0),P;t[34]===te?P=t[35]:(P=(0,V.jsx)(I,{label:`Pending tasks`,value:te}),t[34]=te,t[35]=P);let ne=String(f.registeredContainerInstancesCount??0),L;t[36]===ne?L=t[37]:(L=(0,V.jsx)(I,{label:`Registered instances`,value:ne}),t[36]=ne,t[37]=L);let H;t[38]!==O||t[39]!==k||t[40]!==j||t[41]!==N||t[42]!==P||t[43]!==L?(H=(0,V.jsxs)(re,{children:[D,(0,V.jsxs)(re.Content,{children:[O,k,j,N,P,L]})]}),t[38]=O,t[39]=k,t[40]=j,t[41]=N,t[42]=P,t[43]=L,t[44]=H):H=t[44];let U;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,V.jsxs)(ae,{children:[(0,V.jsx)(R,{value:`services`,children:`Services`}),(0,V.jsx)(R,{value:`tasks`,children:`Tasks`}),(0,V.jsx)(R,{value:`infrastructure`,children:`Infrastructure`}),(0,V.jsx)(R,{value:`tags`,children:`Tags`})]}),t[45]=U):U=t[45];let W;t[46]===n?W=t[47]:(W=(0,V.jsx)(z,{value:`services`,children:(0,V.jsx)(le,{clusterName:n})}),t[46]=n,t[47]=W);let G;t[48]===n?G=t[49]:(G=(0,V.jsx)(z,{value:`tasks`,children:(0,V.jsx)(ue,{clusterName:n})}),t[48]=n,t[49]=G);let K;t[50]===n?K=t[51]:(K=(0,V.jsx)(z,{value:`infrastructure`,children:(0,V.jsx)(ce,{clusterName:n})}),t[50]=n,t[51]=K);let q;t[52]===_?q=t[53]:(q=(0,V.jsx)(z,{value:`tags`,children:_.length===0?(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No tags.`}):(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Key`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Value`})]})}),(0,V.jsx)(`tbody`,{children:_.map(de)})]})})}),t[52]=_,t[53]=q);let J;t[54]!==W||t[55]!==G||t[56]!==K||t[57]!==q?(J=(0,V.jsxs)(oe,{className:`mt-6`,defaultValue:`services`,children:[U,W,G,K,q]}),t[54]=W,t[55]=G,t[56]=K,t[57]=q,t[58]=J):J=t[58];let Y=`This permanently deletes cluster "${n}" and force-stops every task it holds. This cannot be undone.`,X;t[59]!==p.isPending||t[60]!==h||t[61]!==i||t[62]!==Y?(X=(0,V.jsx)(F,{description:Y,isPending:p.isPending,onConfirm:h,onOpenChange:o,open:i,title:`Delete cluster`}),t[59]=p.isPending,t[60]=h,t[61]=i,t[62]=Y,t[63]=X):X=t[63];let Z;return t[64]!==H||t[65]!==J||t[66]!==X||t[67]!==w||t[68]!==T?(Z=(0,V.jsxs)(V.Fragment,{children:[v,w,T,H,J,X]}),t[64]=H,t[65]=J,t[66]=X,t[67]=w,t[68]=T,t[69]=Z):Z=t[69],Z}function de(e){return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.key}),(0,V.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.value})]},e.key)}function fe(){let e=(0,se.c)(2),{clusterName:t}=T.useParams(),n;return e[0]===t?n=e[1]:(n=(0,V.jsx)(Z,{clusterName:t}),e[0]=t,e[1]=n),n}export{fe as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Bkhppjj7.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Bkhppjj7.js deleted file mode 100644 index 6df135693..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Bkhppjj7.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{in as c,t as l}from"./cluster-config-xw_Q7X1e.js";import{t as u}from"./back-link-CjKy1JE5.js";import{t as d}from"./circle-arrow-up-Bs5cB5tN.js";import{n as f,t as p}from"./_clusterName-CoDfUrWf.js";import{t as m}from"./cli-command-panel-CLiFy1rG.js";import{t as h}from"./trash-DVab4pEz.js";import{t as g}from"./triangle-alert-DcjzeKLg.js";import{t as _}from"./button-BarTr35m.js";import{t as v}from"./input-6kdUb_DH.js";import{O as y,c as b}from"./ec2-CWEplLq4.js";import{C as x,S,T as C,_ as w,b as T,c as E,f as D,h as O,i as k,l as A,m as j,n as M,p as N,r as P,s as F,u as I,v as L,w as R,x as z,y as B}from"./eks-C1P60riG.js";import{a as V,i as H,l as U,n as W,o as ee,r as te,s as ne,t as G,u as re}from"./eks-CC8GhK3R.js";import{y as ie}from"./iam-CVg27y22.js";import{t as ae}from"./page-heading-vksh_67w.js";import{t as oe}from"./badge-B_ExXcw2.js";import{a as se,i as ce,n as le,t as ue}from"./zod-DF_n2ejy.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{n as fe,r as pe,s as K,t as q}from"./field-c7GHI5st.js";import{i as me,l as he,n as ge,o as _e,r as ve,s as ye,t as be}from"./alert-dialog-kCQ1W4Rz.js";import{t as xe}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as J,t as Y}from"./detail-row-DNBRlVeK.js";import{n as Se,t as Ce}from"./gpu-instance-type-select-BD2r8UcO.js";import{i as we,n as Te,r as Ee,t as De}from"./tabs-t6sDAEVZ.js";import{t as Oe}from"./json-editor-Bwbz8mfn.js";var ke=r(),X=t(n(),1),Z=e();function Ae(e){return e?.split(`/`).pop()??e??``}function Q(e){let t=(0,ke.c)(56),{clusterName:n,principalArn:r,onDelete:a}=e,o;t[0]!==n||t[1]!==r?(o=W(n,r),t[0]=n,t[1]=r,t[2]=o):o=t[2];let{data:s}=i(o),c;t[3]!==n||t[4]!==r?(c=ee(n,r),t[3]=n,t[4]=r,t[5]=c):c=t[5];let{data:l}=i(c),u=N(),d=S(),[f,p]=(0,X.useState)(M[0].arn),m=s?.accessEntry,g;t[6]===l?.associatedAccessPolicies?g=t[7]:(g=l?.associatedAccessPolicies??[],t[6]=l?.associatedAccessPolicies,t[7]=g);let v=g,y;t[8]===r?y=t[9]:(y=(0,Z.jsx)(`span`,{className:`truncate font-mono text-xs`,children:r}),t[8]=r,t[9]=y);let b;t[10]!==a||t[11]!==r?(b=()=>{a(r)},t[10]=a,t[11]=r,t[12]=b):b=t[12];let x,C;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,Z.jsx)(h,{className:`size-4`}),C=(0,Z.jsx)(`span`,{className:`sr-only`,children:`Delete access entry`}),t[13]=x,t[14]=C):(x=t[13],C=t[14]);let w;t[15]===b?w=t[16]:(w=(0,Z.jsxs)(_,{onClick:b,size:`icon`,variant:`ghost`,children:[x,C]}),t[15]=b,t[16]=w);let T;t[17]!==y||t[18]!==w?(T=(0,Z.jsx)(J.Header,{children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[y,w]})}),t[17]=y,t[18]=w,t[19]=T):T=t[19];let E=m?.type,D;t[20]===E?D=t[21]:(D=(0,Z.jsx)(Y,{label:`Type`,value:E}),t[20]=E,t[21]=D);let O;t[22]===m?O=t[23]:(O=m?.kubernetesGroups?.length?m.kubernetesGroups.join(`, `):`—`,t[22]=m,t[23]=O);let k;t[24]===O?k=t[25]:(k=(0,Z.jsx)(Y,{label:`Kubernetes groups`,value:O}),t[24]=O,t[25]=k);let A;t[26]!==v||t[27]!==n||t[28]!==d||t[29]!==r?(A=v.length>0?(0,Z.jsx)(`div`,{className:`space-y-1`,children:v.map(e=>(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Z.jsx)(`span`,{children:Ae(e.policyArn)}),(0,Z.jsx)(_,{onClick:()=>{d.mutate({clusterName:n,principalArn:r,policyArn:e.policyArn??``})},size:`sm`,variant:`ghost`,children:`Remove`})]},e.policyArn))}):`—`,t[26]=v,t[27]=n,t[28]=d,t[29]=r,t[30]=A):A=t[30];let j;t[31]===A?j=t[32]:(j=(0,Z.jsx)(Y,{label:`Access policies`,value:A}),t[31]=A,t[32]=j);let P;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(P=e=>{p(e.target.value)},t[33]=P):P=t[33];let F;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(F=M.map(je),t[34]=F):F=t[34];let I;t[35]===f?I=t[36]:(I=(0,Z.jsx)(`select`,{"aria-label":`Access policy`,className:`h-7 flex-1 rounded-md border border-input bg-input/20 px-2 text-sm`,onChange:P,value:f,children:F}),t[35]=f,t[36]=I);let L;t[37]!==u||t[38]!==n||t[39]!==f||t[40]!==r?(L=()=>{u.mutate({clusterName:n,principalArn:r,policyArn:f,accessScopeType:`cluster`})},t[37]=u,t[38]=n,t[39]=f,t[40]=r,t[41]=L):L=t[41];let R;t[42]!==u.isPending||t[43]!==L?(R=(0,Z.jsx)(_,{disabled:u.isPending,onClick:L,size:`sm`,children:`Associate`}),t[42]=u.isPending,t[43]=L,t[44]=R):R=t[44];let z;t[45]!==I||t[46]!==R?(z=(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 pt-2`,children:[I,R]}),t[45]=I,t[46]=R,t[47]=z):z=t[47];let B;t[48]!==D||t[49]!==k||t[50]!==j||t[51]!==z?(B=(0,Z.jsxs)(J.Content,{children:[D,k,j,z]}),t[48]=D,t[49]=k,t[50]=j,t[51]=z,t[52]=B):B=t[52];let V;return t[53]!==B||t[54]!==T?(V=(0,Z.jsxs)(J,{children:[T,B]}),t[53]=B,t[54]=T,t[55]=V):V=t[55],V}function je(e){return(0,Z.jsx)(`option`,{value:e.arn,children:e.name},e.arn)}function $(e){let t=(0,ke.c)(41),{clusterName:n,open:r,onOpenChange:i}=e,a=j(),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:ue(A),defaultValues:{principalArn:``,kubernetesGroups:``}},t[0]=o):o=t[0];let{formState:s,handleSubmit:c,register:l,reset:u}=ce(o),{errors:d}=s,f;t[1]!==n||t[2]!==a||t[3]!==i||t[4]!==u?(f=async e=>{await a.mutateAsync({clusterName:n,principalArn:e.principalArn,kubernetesGroups:e.kubernetesGroups.split(`,`).map(Me).filter(Boolean)}),u(),i(!1)},t[1]=n,t[2]=a,t[3]=i,t[4]=u,t[5]=f):f=t[5];let p=f,m;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,Z.jsx)(ye,{children:(0,Z.jsx)(he,{children:`Add access entry`})}),t[6]=m):m=t[6];let h;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ae-principal`,children:`IAM principal ARN`})}),t[7]=h):h=t[7];let g=!!d.principalArn,_;t[8]===l?_=t[9]:(_=l(`principalArn`),t[8]=l,t[9]=_);let y;t[10]!==g||t[11]!==_?(y=(0,Z.jsx)(v,{"aria-invalid":g,id:`ae-principal`,placeholder:`arn:aws:iam::000000000000:role/my-role`,..._}),t[10]=g,t[11]=_,t[12]=y):y=t[12];let b;t[13]===d.principalArn?b=t[14]:(b=(0,Z.jsx)(pe,{errors:[d.principalArn]}),t[13]=d.principalArn,t[14]=b);let x;t[15]!==y||t[16]!==b?(x=(0,Z.jsxs)(q,{children:[h,y,b]}),t[15]=y,t[16]=b,t[17]=x):x=t[17];let S;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ae-groups`,children:`Kubernetes groups`})}),t[18]=S):S=t[18];let C;t[19]===l?C=t[20]:(C=l(`kubernetesGroups`),t[19]=l,t[20]=C);let w;t[21]===C?w=t[22]:(w=(0,Z.jsxs)(q,{children:[S,(0,Z.jsx)(v,{id:`ae-groups`,placeholder:`system:masters`,...C})]}),t[21]=C,t[22]=w);let T;t[23]!==x||t[24]!==w?(T=(0,Z.jsxs)(`form`,{className:`space-y-4`,id:`add-access-entry-form`,children:[x,w]}),t[23]=x,t[24]=w,t[25]=T):T=t[25];let E;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,Z.jsx)(ve,{children:`Cancel`}),t[26]=E):E=t[26];let D;t[27]!==c||t[28]!==p?(D=e=>{e.preventDefault(),c(p)()},t[27]=c,t[28]=p,t[29]=D):D=t[29];let O=a.isPending?`Creating…`:`Create`,k;t[30]!==a.isPending||t[31]!==D||t[32]!==O?(k=(0,Z.jsxs)(_e,{children:[E,(0,Z.jsx)(ge,{disabled:a.isPending,onClick:D,children:O})]}),t[30]=a.isPending,t[31]=D,t[32]=O,t[33]=k):k=t[33];let M;t[34]!==T||t[35]!==k?(M=(0,Z.jsxs)(me,{children:[m,T,k]}),t[34]=T,t[35]=k,t[36]=M):M=t[36];let N;return t[37]!==i||t[38]!==r||t[39]!==M?(N=(0,Z.jsx)(be,{onOpenChange:i,open:r,children:M}),t[37]=i,t[38]=r,t[39]=M,t[40]=N):N=t[40],N}function Me(e){return e.trim()}function Ne(e){let t=(0,ke.c)(25),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=G(n),t[0]=n,t[1]=r);let{data:i}=a(r),o=L(),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(),d;t[2]===i.accessEntries?d=t[3]:(d=i.accessEntries??[],t[2]=i.accessEntries,t[3]=d);let f=d,p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,Z.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,Z.jsx)(_,{onClick:()=>{c(!0)},size:`sm`,children:`Add access entry`})}),t[4]=p):p=t[4];let m;t[5]!==n||t[6]!==f?(m=f.length>0?(0,Z.jsx)(`div`,{className:`space-y-4`,children:f.map(e=>(0,Z.jsx)(Q,{clusterName:n,onDelete:u,principalArn:e},e))}):(0,Z.jsx)(`p`,{className:`text-muted-foreground`,children:`No access entries.`}),t[5]=n,t[6]=f,t[7]=m):m=t[7];let h;t[8]!==n||t[9]!==s?(h=(0,Z.jsx)($,{clusterName:n,onOpenChange:c,open:s}),t[8]=n,t[9]=s,t[10]=h):h=t[10];let g=`Delete access entry for "${l??``}"?`,v;t[11]!==n||t[12]!==o||t[13]!==l?(v=()=>{l&&o.mutate({clusterName:n,principalArn:l},{onSuccess:()=>{u(void 0)}})},t[11]=n,t[12]=o,t[13]=l,t[14]=v):v=t[14];let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>{e||u(void 0)},t[15]=y):y=t[15];let b=l!==void 0,x;t[16]!==o.isPending||t[17]!==g||t[18]!==v||t[19]!==b?(x=(0,Z.jsx)(xe,{description:g,isPending:o.isPending,onConfirm:v,onOpenChange:y,open:b,title:`Delete access entry`}),t[16]=o.isPending,t[17]=g,t[18]=v,t[19]=b,t[20]=x):x=t[20];let S;return t[21]!==x||t[22]!==m||t[23]!==h?(S=(0,Z.jsxs)(Z.Fragment,{children:[p,m,h,x]}),t[21]=x,t[22]=m,t[23]=h,t[24]=S):S=t[24],S}var Pe=new Set([`CREATING`,`UPDATING`,`DELETING`]),Fe=5e3,Ie=`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`;function Le(e){let t=(0,ke.c)(97),{clusterName:n,catalog:r,installed:i,open:a,onOpenChange:o}=e,s=O(),c;t[0]===i?c=t[1]:(c=new Set(i),t[0]=i,t[1]=c);let l=c,u;t[2]===l?u=t[3]:(u=e=>!l.has(e.addonName??``),t[2]=l,t[3]=u);let d=r.filter(u),f;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(f={resolver:ue(I),defaultValues:{addonName:``,addonVersion:``,serviceAccountRoleArn:``,configurationValues:``}},t[4]=f):f=t[4];let{control:p,formState:m,handleSubmit:h,register:g,reset:_,setValue:y}=ce(f),{errors:b}=m,x;t[5]===p?x=t[6]:(x={control:p,name:`addonName`},t[5]=p,t[6]=x);let S=se(x),C;t[7]===p?C=t[8]:(C={control:p,name:`addonVersion`},t[7]=p,t[8]=C);let w=se(C),T;t[9]===S?T=t[10]:(T=e=>e.addonName===S,t[9]=S,t[10]=T);let E=r.find(T)?.addonVersions??[],D;t[11]===w?D=t[12]:(D=e=>e.addonVersion===w,t[11]=w,t[12]=D);let k=E.find(D)?.requiresIamPermissions??!1,A;t[13]!==r||t[14]!==y?(A=e=>{let t=r.find(t=>t.addonName===e)?.addonVersions?.[0]?.addonVersion??``;y(`addonName`,e,{shouldValidate:!0}),y(`addonVersion`,t,{shouldValidate:!0})},t[13]=r,t[14]=y,t[15]=A):A=t[15];let j=A,M;t[16]!==n||t[17]!==s||t[18]!==o||t[19]!==_?(M=async e=>{await s.mutateAsync({clusterName:n,addonName:e.addonName,addonVersion:e.addonVersion||void 0,serviceAccountRoleArn:e.serviceAccountRoleArn.trim()||void 0,configurationValues:e.configurationValues.trim()||void 0}),_(),o(!1)},t[16]=n,t[17]=s,t[18]=o,t[19]=_,t[20]=M):M=t[20];let N=M,P=be,F=me,L;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,Z.jsx)(ye,{children:(0,Z.jsx)(he,{children:`Add add-on`})}),t[21]=L):L=t[21];let R;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`addon-name`,children:`Add-on`})}),t[22]=R):R=t[22];let z=!!b.addonName,B;t[23]===j?B=t[24]:(B=e=>{j(e.target.value)},t[23]=j,t[24]=B);let V;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,Z.jsx)(`option`,{value:``,children:`Select add-on`}),t[25]=V):V=t[25];let H=d.map(ze),U;t[26]!==S||t[27]!==z||t[28]!==B||t[29]!==H?(U=(0,Z.jsxs)(`select`,{"aria-invalid":z,className:Ie,id:`addon-name`,onChange:B,value:S,children:[V,H]}),t[26]=S,t[27]=z,t[28]=B,t[29]=H,t[30]=U):U=t[30];let W;t[31]===b.addonName?W=t[32]:(W=(0,Z.jsx)(pe,{errors:[b.addonName]}),t[31]=b.addonName,t[32]=W);let ee;t[33]!==U||t[34]!==W?(ee=(0,Z.jsxs)(q,{children:[R,U,W]}),t[33]=U,t[34]=W,t[35]=ee):ee=t[35];let te=q,ne;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(ne=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`addon-version`,children:`Version`})}),t[36]=ne):ne=t[36];let G=!!b.addonVersion,re=Ie,ie=E.length===0,ae;t[37]===y?ae=t[38]:(ae=e=>{y(`addonVersion`,e.target.value,{shouldValidate:!0})},t[37]=y,t[38]=ae);let oe=E.map(Re),de;t[39]!==w||t[40]!==G||t[41]!==re||t[42]!==ie||t[43]!==ae||t[44]!==oe?(de=(0,Z.jsx)(`select`,{"aria-invalid":G,className:re,disabled:ie,id:`addon-version`,onChange:ae,value:w,children:oe}),t[39]=w,t[40]=G,t[41]=re,t[42]=ie,t[43]=ae,t[44]=oe,t[45]=de):de=t[45];let fe;t[46]===b.addonVersion?fe=t[47]:(fe=(0,Z.jsx)(pe,{errors:[b.addonVersion]}),t[46]=b.addonVersion,t[47]=fe);let xe;t[48]!==te||t[49]!==ne||t[50]!==de||t[51]!==fe?(xe=(0,Z.jsxs)(te,{children:[ne,de,fe]}),t[48]=te,t[49]=ne,t[50]=de,t[51]=fe,t[52]=xe):xe=t[52];let J;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`addon-role`,children:`Service account IAM role ARN`})}),t[53]=J):J=t[53];let Y;t[54]===g?Y=t[55]:(Y=g(`serviceAccountRoleArn`),t[54]=g,t[55]=Y);let Se;t[56]===Y?Se=t[57]:(Se=(0,Z.jsx)(v,{id:`addon-role`,placeholder:`arn:aws:iam::…:role/…`,...Y}),t[56]=Y,t[57]=Se);let Ce;t[58]===k?Ce=t[59]:(Ce=k&&(0,Z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This add-on needs IAM permissions — provide an IRSA role ARN.`}),t[58]=k,t[59]=Ce);let we;t[60]!==Se||t[61]!==Ce?(we=(0,Z.jsxs)(q,{children:[J,Se,Ce]}),t[60]=Se,t[61]=Ce,t[62]=we):we=t[62];let Te;t[63]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`addon-config`,children:`Configuration values (JSON)`})}),t[63]=Te):Te=t[63];let Ee;t[64]===b.configurationValues?Ee=t[65]:(Ee=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,Z.jsx)(Oe,{error:!!b.configurationValues,id:`addon-config`,onBlur:n,onChange:r,placeholder:`{"replicaCount": 2}`,ref:i,rows:4,value:a})},t[64]=b.configurationValues,t[65]=Ee);let De;t[66]!==p||t[67]!==Ee?(De=(0,Z.jsx)(le,{control:p,name:`configurationValues`,render:Ee}),t[66]=p,t[67]=Ee,t[68]=De):De=t[68];let X;t[69]===b.configurationValues?X=t[70]:(X=(0,Z.jsx)(pe,{errors:[b.configurationValues]}),t[69]=b.configurationValues,t[70]=X);let Ae;t[71]!==De||t[72]!==X?(Ae=(0,Z.jsxs)(q,{children:[Te,De,X]}),t[71]=De,t[72]=X,t[73]=Ae):Ae=t[73];let Q;t[74]!==ee||t[75]!==xe||t[76]!==we||t[77]!==Ae?(Q=(0,Z.jsxs)(`form`,{className:`space-y-4`,id:`add-addon-form`,children:[ee,xe,we,Ae]}),t[74]=ee,t[75]=xe,t[76]=we,t[77]=Ae,t[78]=Q):Q=t[78];let je;t[79]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,Z.jsx)(ve,{children:`Cancel`}),t[79]=je):je=t[79];let $;t[80]!==h||t[81]!==N?($=e=>{e.preventDefault(),h(N)()},t[80]=h,t[81]=N,t[82]=$):$=t[82];let Me=s.isPending?`Adding…`:`Add`,Ne;t[83]!==s.isPending||t[84]!==$||t[85]!==Me?(Ne=(0,Z.jsxs)(_e,{children:[je,(0,Z.jsx)(ge,{disabled:s.isPending,onClick:$,children:Me})]}),t[83]=s.isPending,t[84]=$,t[85]=Me,t[86]=Ne):Ne=t[86];let Pe;t[87]!==F||t[88]!==L||t[89]!==Q||t[90]!==Ne?(Pe=(0,Z.jsxs)(F,{className:`max-h-[85vh] overflow-y-auto`,children:[L,Q,Ne]}),t[87]=F,t[88]=L,t[89]=Q,t[90]=Ne,t[91]=Pe):Pe=t[91];let Fe;return t[92]!==P||t[93]!==o||t[94]!==a||t[95]!==Pe?(Fe=(0,Z.jsx)(P,{onOpenChange:o,open:a,children:Pe}),t[92]=P,t[93]=o,t[94]=a,t[95]=Pe,t[96]=Fe):Fe=t[96],Fe}function Re(e,t){return(0,Z.jsxs)(`option`,{value:e.addonVersion??``,children:[e.addonVersion,t===0?` (latest)`:``]},e.addonVersion)}function ze(e){return(0,Z.jsx)(`option`,{value:e.addonName??``,children:e.addonName},e.addonName)}function Be(e){let t=(0,ke.c)(48),{clusterName:n,addonName:r,current:i,versions:a,open:o,onOpenChange:s}=e,c=R(),[l,u]=(0,X.useState)(i.addonVersion??``),[d,f]=(0,X.useState)(i.serviceAccountRoleArn??``),[p,m]=(0,X.useState)(i.configurationValues??``),[h,g]=(0,X.useState)(),[_,y]=(0,X.useState)(o);o!==_&&(y(o),o&&(u(i.addonVersion??``),f(i.serviceAccountRoleArn??``),m(i.configurationValues??``),g(void 0)));let b;t[0]!==r||t[1]!==n||t[2]!==p||t[3]!==s||t[4]!==d||t[5]!==c||t[6]!==l?(b=()=>{let e=F.safeParse(p);if(!e.success){g(e.error.issues[0]?.message??`Configuration must be valid JSON`);return}g(void 0),c.mutate({clusterName:n,addonName:r,addonVersion:l||void 0,serviceAccountRoleArn:d.trim()||void 0,configurationValues:p.trim()||void 0},{onSuccess:()=>{s(!1)}})},t[0]=r,t[1]=n,t[2]=p,t[3]=s,t[4]=d,t[5]=c,t[6]=l,t[7]=b):b=t[7];let x=b,S;t[8]===r?S=t[9]:(S=(0,Z.jsx)(ye,{children:(0,Z.jsxs)(he,{children:[`Update `,r]})}),t[8]=r,t[9]=S);let C;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`update-addon-version`,children:`Version`})}),t[10]=C):C=t[10];let w=a.length===0,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=e=>{u(e.target.value)},t[11]=T):T=t[11];let E;t[12]===a?E=t[13]:(E=a.map(Ve),t[12]=a,t[13]=E);let D;t[14]!==w||t[15]!==E||t[16]!==l?(D=(0,Z.jsxs)(q,{children:[C,(0,Z.jsx)(`select`,{className:Ie,disabled:w,id:`update-addon-version`,onChange:T,value:l,children:E})]}),t[14]=w,t[15]=E,t[16]=l,t[17]=D):D=t[17];let O;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`update-addon-role`,children:`Service account IAM role ARN`})}),t[18]=O):O=t[18];let k;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(k=e=>{f(e.target.value)},t[19]=k):k=t[19];let A;t[20]===d?A=t[21]:(A=(0,Z.jsxs)(q,{children:[O,(0,Z.jsx)(v,{id:`update-addon-role`,onChange:k,placeholder:`arn:aws:iam::…:role/…`,value:d})]}),t[20]=d,t[21]=A);let j;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`update-addon-config`,children:`Configuration values (JSON)`})}),t[22]=j):j=t[22];let M=!!h,N;t[23]!==p||t[24]!==M?(N=(0,Z.jsxs)(q,{children:[j,(0,Z.jsx)(Oe,{error:M,id:`update-addon-config`,onChange:m,rows:4,value:p})]}),t[23]=p,t[24]=M,t[25]=N):N=t[25];let P;t[26]!==A||t[27]!==N||t[28]!==D?(P=(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[D,A,N]}),t[26]=A,t[27]=N,t[28]=D,t[29]=P):P=t[29];let I;t[30]===h?I=t[31]:(I=h&&(0,Z.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:h}),t[30]=h,t[31]=I);let L;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,Z.jsx)(ve,{children:`Cancel`}),t[32]=L):L=t[32];let z;t[33]===x?z=t[34]:(z=e=>{e.preventDefault(),x()},t[33]=x,t[34]=z);let B=c.isPending?`Updating…`:`Update`,V;t[35]!==z||t[36]!==B||t[37]!==c.isPending?(V=(0,Z.jsxs)(_e,{children:[L,(0,Z.jsx)(ge,{disabled:c.isPending,onClick:z,children:B})]}),t[35]=z,t[36]=B,t[37]=c.isPending,t[38]=V):V=t[38];let H;t[39]!==P||t[40]!==I||t[41]!==V||t[42]!==S?(H=(0,Z.jsxs)(me,{className:`max-h-[85vh] overflow-y-auto`,children:[S,P,I,V]}),t[39]=P,t[40]=I,t[41]=V,t[42]=S,t[43]=H):H=t[43];let U;return t[44]!==s||t[45]!==o||t[46]!==H?(U=(0,Z.jsx)(be,{onOpenChange:s,open:o,children:H}),t[44]=s,t[45]=o,t[46]=H,t[47]=U):U=t[47],U}function Ve(e){return(0,Z.jsx)(`option`,{value:e,children:e},e)}function He(e){let t=(0,ke.c)(53),{clusterName:n,addonName:r,catalog:a,onDelete:o}=e,s;t[0]!==r||t[1]!==n?(s=te(n,r),t[0]=r,t[1]=n,t[2]=s):s=t[2];let c;t[3]===s?c=t[4]:(c={...s,refetchInterval:We},t[3]=s,t[4]=c);let{data:l}=i(c),[u,f]=(0,X.useState)(!1),p=l?.addon,m=p?.health?.issues?.[0]?.message,g;t[5]!==r||t[6]!==a?(g=a.find(e=>e.addonName===r)?.addonVersions?.map(Ue).filter(Boolean)??[],t[5]=r,t[6]=a,t[7]=g):g=t[7];let v=g,y;t[8]===r?y=t[9]:(y=(0,Z.jsx)(`span`,{children:r}),t[8]=r,t[9]=y);let b=p?.status,x;t[10]===b?x=t[11]:(x=E(b),t[10]=b,t[11]=x);let S=p?.status??`UNKNOWN`,C;t[12]!==x||t[13]!==S?(C=(0,Z.jsx)(oe,{variant:x,children:S}),t[12]=x,t[13]=S,t[14]=C):C=t[14];let w;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(w=()=>{f(!0)},t[15]=w):w=t[15];let T;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,Z.jsx)(_,{"aria-label":`Update add-on`,onClick:w,size:`icon`,variant:`ghost`,children:(0,Z.jsx)(d,{className:`size-4`})}),t[16]=T):T=t[16];let D;t[17]!==r||t[18]!==o?(D=()=>{o(r)},t[17]=r,t[18]=o,t[19]=D):D=t[19];let O;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,Z.jsx)(h,{className:`size-4`}),t[20]=O):O=t[20];let k;t[21]===D?k=t[22]:(k=(0,Z.jsx)(_,{"aria-label":`Remove add-on`,onClick:D,size:`icon`,variant:`ghost`,children:O}),t[21]=D,t[22]=k);let A;t[23]!==k||t[24]!==C?(A=(0,Z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[C,T,k]}),t[23]=k,t[24]=C,t[25]=A):A=t[25];let j;t[26]!==A||t[27]!==y?(j=(0,Z.jsx)(J.Header,{children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[y,A]})}),t[26]=A,t[27]=y,t[28]=j):j=t[28];let M=p?.addonVersion,N;t[29]===M?N=t[30]:(N=(0,Z.jsx)(Y,{label:`Version`,value:M}),t[29]=M,t[30]=N);let P=p?.serviceAccountRoleArn,F;t[31]===P?F=t[32]:(F=(0,Z.jsx)(Y,{label:`IRSA role`,value:P}),t[31]=P,t[32]=F);let I;t[33]===m?I=t[34]:(I=m&&(0,Z.jsx)(Y,{label:`Issue`,value:(0,Z.jsx)(`span`,{className:`text-destructive`,children:m})}),t[33]=m,t[34]=I);let L;t[35]!==N||t[36]!==F||t[37]!==I?(L=(0,Z.jsxs)(J.Content,{children:[N,F,I]}),t[35]=N,t[36]=F,t[37]=I,t[38]=L):L=t[38];let R=p?.addonVersion,z=p?.serviceAccountRoleArn,B=p?.configurationValues,V;t[39]!==R||t[40]!==z||t[41]!==B?(V={addonVersion:R,serviceAccountRoleArn:z,configurationValues:B},t[39]=R,t[40]=z,t[41]=B,t[42]=V):V=t[42];let H;t[43]!==r||t[44]!==n||t[45]!==u||t[46]!==V||t[47]!==v?(H=(0,Z.jsx)(Be,{addonName:r,clusterName:n,current:V,onOpenChange:f,open:u,versions:v}),t[43]=r,t[44]=n,t[45]=u,t[46]=V,t[47]=v,t[48]=H):H=t[48];let U;return t[49]!==j||t[50]!==L||t[51]!==H?(U=(0,Z.jsxs)(J,{children:[j,L,H]}),t[49]=j,t[50]=L,t[51]=H,t[52]=U):U=t[52],U}function Ue(e){return e.addonVersion??``}function We(e){return Pe.has(e.state.data?.addon?.status??``)?Fe:!1}function Ge(e){let t=(0,ke.c)(31),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=V(n),t[0]=n,t[1]=r);let{data:o}=a(r),{data:s}=i(H),c=B(),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(),p;t[2]===o.addons?p=t[3]:(p=o.addons??[],t[2]=o.addons,t[3]=p);let m=p,h;t[4]===s?.addons?h=t[5]:(h=s?.addons??[],t[4]=s?.addons,t[5]=h);let g=h,v;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,Z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Add-on manifests are staged; activation completes when the cluster reports the workload ready.`}),t[6]=v):v=t[6];let y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,Z.jsxs)(`div`,{className:`mb-4 flex items-center justify-between gap-4`,children:[v,(0,Z.jsx)(_,{onClick:()=>{u(!0)},size:`sm`,children:`Add add-on`})]}),t[7]=y):y=t[7];let b;t[8]!==m||t[9]!==g||t[10]!==n?(b=m.length>0?(0,Z.jsx)(`div`,{className:`space-y-4`,children:m.map(e=>(0,Z.jsx)(He,{addonName:e,catalog:g,clusterName:n,onDelete:f},e))}):(0,Z.jsx)(`p`,{className:`text-muted-foreground`,children:`No add-ons installed.`}),t[8]=m,t[9]=g,t[10]=n,t[11]=b):b=t[11];let x;t[12]!==m||t[13]!==g||t[14]!==n||t[15]!==l?(x=(0,Z.jsx)(Le,{catalog:g,clusterName:n,installed:m,onOpenChange:u,open:l}),t[12]=m,t[13]=g,t[14]=n,t[15]=l,t[16]=x):x=t[16];let S=`Remove add-on "${d??``}" from the cluster?`,C;t[17]!==n||t[18]!==c||t[19]!==d?(C=()=>{d&&c.mutate({clusterName:n,addonName:d},{onSuccess:()=>{f(void 0)}})},t[17]=n,t[18]=c,t[19]=d,t[20]=C):C=t[20];let w;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(w=e=>{e||f(void 0)},t[21]=w):w=t[21];let T=d!==void 0,E;t[22]!==c.isPending||t[23]!==T||t[24]!==S||t[25]!==C?(E=(0,Z.jsx)(xe,{confirmLabel:`Remove`,description:S,isPending:c.isPending,onConfirm:C,onOpenChange:w,open:T,pendingLabel:`Removing…`,title:`Remove add-on`}),t[22]=c.isPending,t[23]=T,t[24]=S,t[25]=C,t[26]=E):E=t[26];let D;return t[27]!==E||t[28]!==b||t[29]!==x?(D=(0,Z.jsxs)(Z.Fragment,{children:[y,b,x,E]}),t[27]=E,t[28]=b,t[29]=x,t[30]=D):D=t[30],D}function Ke(e){let t=(0,ke.c)(6),{to:n,id:r}=e,i;t[0]===r?i=t[1]:(i={id:r},t[0]=r,t[1]=i);let a;return t[2]!==r||t[3]!==i||t[4]!==n?(a=(0,Z.jsx)(o,{className:`font-mono text-primary underline-offset-2 hover:underline`,params:i,to:n,children:r}),t[2]=r,t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function qe(e){let t=(0,ke.c)(45),{cluster:n}=e,r=n?.resourcesVpcConfig,i;t[0]===r?.subnetIds?i=t[1]:(i=r?.subnetIds??[],t[0]=r?.subnetIds,t[1]=i);let a=i,o;t[2]===r?.securityGroupIds?o=t[3]:(o=r?.securityGroupIds??[],t[2]=r?.securityGroupIds,t[3]=o);let s=o,c;t[4]===r?.publicAccessCidrs?c=t[5]:(c=r?.publicAccessCidrs??[],t[4]=r?.publicAccessCidrs,t[5]=c);let l=c,u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,Z.jsx)(J.Header,{children:`VPC`}),t[6]=u):u=t[6];let d;t[7]===r?d=t[8]:(d=r?.vpcId?(0,Z.jsx)(Ke,{id:r.vpcId,to:`/ec2/describe-vpcs/$id`}):void 0,t[7]=r,t[8]=d);let f;t[9]===d?f=t[10]:(f=(0,Z.jsx)(Y,{label:`VPC`,value:d}),t[9]=d,t[10]=f);let p=n?.endpoint,m;t[11]===p?m=t[12]:(m=(0,Z.jsx)(Y,{label:`API server endpoint`,value:p}),t[11]=p,t[12]=m);let h=r?.endpointPublicAccess?`Enabled`:`Disabled`,g;t[13]===h?g=t[14]:(g=(0,Z.jsx)(Y,{label:`Public access`,value:h}),t[13]=h,t[14]=g);let _=r?.endpointPrivateAccess?`Enabled`:`Disabled`,v;t[15]===_?v=t[16]:(v=(0,Z.jsx)(Y,{label:`Private access`,value:_}),t[15]=_,t[16]=v);let y;t[17]!==l||t[18]!==r?.endpointPublicAccess?(y=r?.endpointPublicAccess&&(0,Z.jsx)(Y,{label:`Public access CIDRs`,value:l.length>0?(0,Z.jsx)(`div`,{className:`space-y-1 font-mono text-xs`,children:l.map(Xe)}):`Any (0.0.0.0/0)`}),t[17]=l,t[18]=r?.endpointPublicAccess,t[19]=y):y=t[19];let b;t[20]!==g||t[21]!==v||t[22]!==y||t[23]!==f||t[24]!==m?(b=(0,Z.jsxs)(J,{children:[u,(0,Z.jsxs)(J.Content,{children:[f,m,g,v,y]})]}),t[20]=g,t[21]=v,t[22]=y,t[23]=f,t[24]=m,t[25]=b):b=t[25];let x;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,Z.jsx)(J.Header,{children:`Subnets`}),t[26]=x):x=t[26];let S;t[27]===a?S=t[28]:(S=(0,Z.jsxs)(J,{children:[x,(0,Z.jsx)(J.Content,{children:a.length>0?(0,Z.jsx)(`div`,{className:`space-y-1`,children:a.map(Ye)}):(0,Z.jsx)(`p`,{className:`text-muted-foreground`,children:`No subnets.`})})]}),t[27]=a,t[28]=S);let C;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,Z.jsx)(J.Header,{children:`Security groups`}),t[29]=C):C=t[29];let w;t[30]===r?w=t[31]:(w=r?.clusterSecurityGroupId?(0,Z.jsx)(Ke,{id:r.clusterSecurityGroupId,to:`/ec2/describe-security-groups/$id`}):void 0,t[30]=r,t[31]=w);let T;t[32]===w?T=t[33]:(T=(0,Z.jsx)(Y,{label:`Cluster security group`,value:w}),t[32]=w,t[33]=T);let E;t[34]===s?E=t[35]:(E=s.length>0?(0,Z.jsx)(`div`,{className:`space-y-1`,children:s.map(Je)}):`—`,t[34]=s,t[35]=E);let D;t[36]===E?D=t[37]:(D=(0,Z.jsx)(Y,{label:`Additional security groups`,value:E}),t[36]=E,t[37]=D);let O;t[38]!==T||t[39]!==D?(O=(0,Z.jsxs)(J,{children:[C,(0,Z.jsxs)(J.Content,{children:[T,D]})]}),t[38]=T,t[39]=D,t[40]=O):O=t[40];let k;return t[41]!==b||t[42]!==S||t[43]!==O?(k=(0,Z.jsxs)(Z.Fragment,{children:[b,S,O]}),t[41]=b,t[42]=S,t[43]=O,t[44]=k):k=t[44],k}function Je(e){return(0,Z.jsx)(Ke,{id:e,to:`/ec2/describe-security-groups/$id`},e)}function Ye(e){return(0,Z.jsx)(Ke,{id:e,to:`/ec2/describe-subnets/$id`},e)}function Xe(e){return(0,Z.jsx)(`div`,{children:e},e)}function Ze(e){return!!e&&(e.endsWith(`_GPU`)||e.endsWith(`_NVIDIA`))}function Qe(e,t){let n=t.find(t=>t.InstanceType===e);return!!n&&Se(n)}function $e(e){let t=(0,ke.c)(44),{clusterName:n,nodegroupName:r,current:i,open:a,onOpenChange:o}=e,s=x(),[c,l]=(0,X.useState)(i.minSize??0),[u,d]=(0,X.useState)(i.desiredSize??0),[f,p]=(0,X.useState)(i.maxSize??0),[m,h]=(0,X.useState)(),[g,_]=(0,X.useState)(a);a!==g&&(_(a),a&&(l(i.minSize??0),d(i.desiredSize??0),p(i.maxSize??0),h(void 0)));let y;t[0]!==n||t[1]!==u||t[2]!==f||t[3]!==c||t[4]!==r||t[5]!==o||t[6]!==s?(y=()=>{if(!(c<=u&&u<=f)){h(`Sizes must satisfy min ≤ desired ≤ max`);return}s.mutate({clusterName:n,nodegroupName:r,minSize:c,desiredSize:u,maxSize:f},{onSuccess:()=>{o(!1)}})},t[0]=n,t[1]=u,t[2]=f,t[3]=c,t[4]=r,t[5]=o,t[6]=s,t[7]=y):y=t[7];let b=y,S;t[8]===r?S=t[9]:(S=(0,Z.jsx)(ye,{children:(0,Z.jsxs)(he,{children:[`Scale `,r]})}),t[8]=r,t[9]=S);let C;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`scale-min`,children:`Min`})}),t[10]=C):C=t[10];let w;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(w=e=>{l(Number(e.target.value))},t[11]=w):w=t[11];let T;t[12]===c?T=t[13]:(T=(0,Z.jsxs)(q,{children:[C,(0,Z.jsx)(v,{id:`scale-min`,onChange:w,type:`number`,value:c})]}),t[12]=c,t[13]=T);let E;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`scale-desired`,children:`Desired`})}),t[14]=E):E=t[14];let D;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(D=e=>{d(Number(e.target.value))},t[15]=D):D=t[15];let O;t[16]===u?O=t[17]:(O=(0,Z.jsxs)(q,{children:[E,(0,Z.jsx)(v,{id:`scale-desired`,onChange:D,type:`number`,value:u})]}),t[16]=u,t[17]=O);let k;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`scale-max`,children:`Max`})}),t[18]=k):k=t[18];let A;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(A=e=>{p(Number(e.target.value))},t[19]=A):A=t[19];let j;t[20]===f?j=t[21]:(j=(0,Z.jsxs)(q,{children:[k,(0,Z.jsx)(v,{id:`scale-max`,onChange:A,type:`number`,value:f})]}),t[20]=f,t[21]=j);let M;t[22]!==j||t[23]!==T||t[24]!==O?(M=(0,Z.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[T,O,j]}),t[22]=j,t[23]=T,t[24]=O,t[25]=M):M=t[25];let N;t[26]===m?N=t[27]:(N=m&&(0,Z.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:m}),t[26]=m,t[27]=N);let P;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,Z.jsx)(ve,{children:`Cancel`}),t[28]=P):P=t[28];let F;t[29]===b?F=t[30]:(F=e=>{e.preventDefault(),b()},t[29]=b,t[30]=F);let I=s.isPending?`Scaling…`:`Scale`,L;t[31]!==s.isPending||t[32]!==F||t[33]!==I?(L=(0,Z.jsxs)(_e,{children:[P,(0,Z.jsx)(ge,{disabled:s.isPending,onClick:F,children:I})]}),t[31]=s.isPending,t[32]=F,t[33]=I,t[34]=L):L=t[34];let R;t[35]!==M||t[36]!==N||t[37]!==L||t[38]!==S?(R=(0,Z.jsxs)(me,{children:[S,M,N,L]}),t[35]=M,t[36]=N,t[37]=L,t[38]=S,t[39]=R):R=t[39];let z;return t[40]!==o||t[41]!==a||t[42]!==R?(z=(0,Z.jsx)(be,{onOpenChange:o,open:a,children:R}),t[40]=o,t[41]=a,t[42]=R,t[43]=z):z=t[43],z}function et(e){let t=(0,ke.c)(71),{clusterName:n,clusterVersion:r,nodegroupName:a,onDelete:o}=e,s;t[0]!==n||t[1]!==a?(s=U(n,a),t[0]=n,t[1]=a,t[2]=s):s=t[2];let{data:c}=i(s),l=C(),u=c?.nodegroup,p=u?.scalingConfig,[m,g]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),b=!!r&&!!u?.version&&u.version!==r,x=u?.amiType,S;t[3]===x?S=t[4]:(S=Ze(x),t[3]=x,t[4]=S);let w=S,T;t[5]===a?T=t[6]:(T=(0,Z.jsx)(`span`,{children:a}),t[5]=a,t[6]=T);let E;t[7]===w?E=t[8]:(E=w&&(0,Z.jsx)(oe,{variant:`secondary`,children:`GPU`}),t[7]=w,t[8]=E);let D;t[9]!==T||t[10]!==E?(D=(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[T,E]}),t[9]=T,t[10]=E,t[11]=D):D=t[11];let O;t[12]===b?O=t[13]:(O=b&&(0,Z.jsx)(_,{"aria-label":`Update node group version`,onClick:()=>{y(!0)},size:`icon`,variant:`ghost`,children:(0,Z.jsx)(d,{className:`size-4`})}),t[12]=b,t[13]=O);let k;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(k=()=>{g(!0)},t[14]=k):k=t[14];let A;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,Z.jsx)(_,{"aria-label":`Scale node group`,onClick:k,size:`icon`,variant:`ghost`,children:(0,Z.jsx)(f,{className:`size-4`})}),t[15]=A):A=t[15];let j;t[16]!==a||t[17]!==o?(j=()=>{o(a)},t[16]=a,t[17]=o,t[18]=j):j=t[18];let M;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,Z.jsx)(h,{className:`size-4`}),t[19]=M):M=t[19];let N;t[20]===j?N=t[21]:(N=(0,Z.jsx)(_,{"aria-label":`Delete node group`,onClick:j,size:`icon`,variant:`ghost`,children:M}),t[20]=j,t[21]=N);let P;t[22]!==N||t[23]!==O?(P=(0,Z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[O,A,N]}),t[22]=N,t[23]=O,t[24]=P):P=t[24];let F;t[25]!==P||t[26]!==D?(F=(0,Z.jsx)(J.Header,{children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[D,P]})}),t[25]=P,t[26]=D,t[27]=F):F=t[27];let I=u?.status,L;t[28]===I?L=t[29]:(L=(0,Z.jsx)(Y,{label:`Status`,value:I}),t[28]=I,t[29]=L);let R=b?`${u?.version} (cluster on ${r})`:u?.version,z;t[30]===R?z=t[31]:(z=(0,Z.jsx)(Y,{label:`Kubernetes version`,value:R}),t[30]=R,t[31]=z);let B;t[32]===u?.instanceTypes?B=t[33]:(B=u?.instanceTypes?.join(`, `),t[32]=u?.instanceTypes,t[33]=B);let V;t[34]===B?V=t[35]:(V=(0,Z.jsx)(Y,{label:`Instance types`,value:B}),t[34]=B,t[35]=V);let H=u?.amiType,W;t[36]===H?W=t[37]:(W=(0,Z.jsx)(Y,{label:`AMI type`,value:H}),t[36]=H,t[37]=W);let ee=u?.capacityType,te;t[38]===ee?te=t[39]:(te=(0,Z.jsx)(Y,{label:`Capacity type`,value:ee}),t[38]=ee,t[39]=te);let ne=p?`${p.minSize} / ${p.desiredSize} / ${p.maxSize}`:void 0,G;t[40]===ne?G=t[41]:(G=(0,Z.jsx)(Y,{label:`Scaling (min / desired / max)`,value:ne}),t[40]=ne,t[41]=G);let re;t[42]!==L||t[43]!==z||t[44]!==V||t[45]!==W||t[46]!==te||t[47]!==G?(re=(0,Z.jsxs)(J.Content,{children:[L,z,V,W,te,G]}),t[42]=L,t[43]=z,t[44]=V,t[45]=W,t[46]=te,t[47]=G,t[48]=re):re=t[48];let ie;t[49]===p?ie=t[50]:(ie=p??{},t[49]=p,t[50]=ie);let ae;t[51]!==n||t[52]!==a||t[53]!==m||t[54]!==ie?(ae=(0,Z.jsx)($e,{clusterName:n,current:ie,nodegroupName:a,onOpenChange:g,open:m}),t[51]=n,t[52]=a,t[53]=m,t[54]=ie,t[55]=ae):ae=t[55];let se=`Update node group "${a}" from ${u?.version} to ${r}? Nodes are replaced in a rolling update.`,ce;t[56]!==n||t[57]!==r||t[58]!==a||t[59]!==l?(ce=()=>{l.mutate({clusterName:n,nodegroupName:a,version:r},{onSuccess:()=>{y(!1)}})},t[56]=n,t[57]=r,t[58]=a,t[59]=l,t[60]=ce):ce=t[60];let le;t[61]!==v||t[62]!==se||t[63]!==ce||t[64]!==l.isPending?(le=(0,Z.jsx)(xe,{confirmLabel:`Update`,description:se,isPending:l.isPending,onConfirm:ce,onOpenChange:y,open:v,title:`Update node group version`}),t[61]=v,t[62]=se,t[63]=ce,t[64]=l.isPending,t[65]=le):le=t[65];let ue;return t[66]!==F||t[67]!==re||t[68]!==ae||t[69]!==le?(ue=(0,Z.jsxs)(J,{children:[F,re,ae,le]}),t[66]=F,t[67]=re,t[68]=ae,t[69]=le,t[70]=ue):ue=t[70],ue}function tt(e){let t=(0,ke.c)(145),{clusterName:n,vpcId:r,open:a,onOpenChange:o}=e,{data:s}=i(ie),{data:c}=i(y),{data:l}=i(b),u=w(),d;t[0]===s?.Roles?d=t[1]:(d=s?.Roles??[],t[0]=s?.Roles,t[1]=d);let f=d,p;t[2]===c?.Subnets?p=t[3]:(p=c?.Subnets??[],t[2]=c?.Subnets,t[3]=p);let m;t[4]===r?m=t[5]:(m=e=>e.VpcId===r,t[4]=r,t[5]=m);let h=p.filter(m),g;t[6]===l?.InstanceTypes?g=t[7]:(g=l?.InstanceTypes??[],t[6]=l?.InstanceTypes,t[7]=g);let _=g,x;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(x=ue(D),t[8]=x):x=t[8];let S;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:x,defaultValues:{nodegroupName:``,nodeRole:``,subnetIds:[],instanceTypes:`t3.medium`,amiType:`AL2_x86_64`,capacityType:`ON_DEMAND`,diskSize:20,minSize:1,desiredSize:2,maxSize:3}},t[9]=S):S=t[9];let{control:C,formState:T,handleSubmit:E,register:O,reset:A,setValue:j}=ce(S),{errors:M}=T,N;t[10]===C?N=t[11]:(N={control:C,name:`subnetIds`},t[10]=C,t[11]=N);let F=se(N),I;t[12]===F?I=t[13]:(I=new Set(F),t[12]=F,t[13]=I);let L=I,R;t[14]===C?R=t[15]:(R={control:C,name:`instanceTypes`},t[14]=C,t[15]=R);let z=se(R),B;t[16]!==_||t[17]!==z?(B=Qe(z,_),t[16]=_,t[17]=z,t[18]=B):B=t[18];let V=B,H;t[19]!==F||t[20]!==j?(H=e=>{let t=F.includes(e)?F.filter(t=>t!==e):[...F,e];j(`subnetIds`,t,{shouldValidate:!0})},t[19]=F,t[20]=j,t[21]=H):H=t[21];let U=H,W;t[22]!==n||t[23]!==u||t[24]!==o||t[25]!==A?(W=async e=>{await u.mutateAsync({clusterName:n,nodegroupName:e.nodegroupName,nodeRole:e.nodeRole,subnetIds:e.subnetIds,instanceTypes:e.instanceTypes.split(`,`).map(at).filter(Boolean),amiType:e.amiType,capacityType:e.capacityType,diskSize:e.diskSize,minSize:e.minSize,desiredSize:e.desiredSize,maxSize:e.maxSize}),A(),o(!1)},t[22]=n,t[23]=u,t[24]=o,t[25]=A,t[26]=W):W=t[26];let ee=W,te=be,ne=me,G;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,Z.jsx)(ye,{children:(0,Z.jsx)(he,{children:`Add node group`})}),t[27]=G):G=t[27];let re;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(re=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-name`,children:`Name`})}),t[28]=re):re=t[28];let ae=!!M.nodegroupName,oe;t[29]===O?oe=t[30]:(oe=O(`nodegroupName`),t[29]=O,t[30]=oe);let de;t[31]!==ae||t[32]!==oe?(de=(0,Z.jsx)(v,{"aria-invalid":ae,id:`ng-name`,placeholder:`my-nodegroup`,...oe}),t[31]=ae,t[32]=oe,t[33]=de):de=t[33];let xe;t[34]===M.nodegroupName?xe=t[35]:(xe=(0,Z.jsx)(pe,{errors:[M.nodegroupName]}),t[34]=M.nodegroupName,t[35]=xe);let J;t[36]!==de||t[37]!==xe?(J=(0,Z.jsxs)(q,{children:[re,de,xe]}),t[36]=de,t[37]=xe,t[38]=J):J=t[38];let Y;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(Y=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-role`,children:`Node IAM role`})}),t[39]=Y):Y=t[39];let Se=!!M.nodeRole,we;t[40]===O?we=t[41]:(we=O(`nodeRole`),t[40]=O,t[41]=we);let Te;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,Z.jsx)(`option`,{value:``,children:`Select role`}),t[42]=Te):Te=t[42];let Ee;t[43]===f?Ee=t[44]:(Ee=f.map(it),t[43]=f,t[44]=Ee);let De;t[45]!==Se||t[46]!==we||t[47]!==Ee?(De=(0,Z.jsxs)(`select`,{"aria-invalid":Se,className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-role`,...we,children:[Te,Ee]}),t[45]=Se,t[46]=we,t[47]=Ee,t[48]=De):De=t[48];let Oe;t[49]===M.nodeRole?Oe=t[50]:(Oe=(0,Z.jsx)(pe,{errors:[M.nodeRole]}),t[49]=M.nodeRole,t[50]=Oe);let X;t[51]!==De||t[52]!==Oe?(X=(0,Z.jsxs)(q,{children:[Y,De,Oe]}),t[51]=De,t[52]=Oe,t[53]=X):X=t[53];let Ae=q,Q;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(Q=(0,Z.jsx)(K,{children:`Subnets`}),t[54]=Q):Q=t[54];let je=h.length===0?(0,Z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the cluster VPC.`}):(0,Z.jsx)(`div`,{className:`space-y-1`,children:h.map(e=>(0,Z.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Z.jsx)(`input`,{"aria-label":`Subnet ${e.SubnetId}`,checked:L.has(e.SubnetId??``),onChange:()=>{U(e.SubnetId??``)},type:`checkbox`}),(0,Z.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` · `,e.CidrBlock]})]},e.SubnetId))}),$;t[55]===M.subnetIds?$=t[56]:($=(0,Z.jsx)(pe,{errors:[M.subnetIds]}),t[55]=M.subnetIds,t[56]=$);let Me;t[57]!==Ae||t[58]!==Q||t[59]!==je||t[60]!==$?(Me=(0,Z.jsxs)(Ae,{children:[Q,je,$]}),t[57]=Ae,t[58]=Q,t[59]=je,t[60]=$,t[61]=Me):Me=t[61];let Ne;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-instance-type`,children:`Instance type`})}),t[62]=Ne):Ne=t[62];let Pe;t[63]!==M.instanceTypes||t[64]!==_?(Pe=e=>{let{field:t}=e;return(0,Z.jsx)(Ce,{"aria-invalid":!!M.instanceTypes,id:`ng-instance-type`,instanceTypes:_,onValueChange:t.onChange,value:t.value})},t[63]=M.instanceTypes,t[64]=_,t[65]=Pe):Pe=t[65];let Fe;t[66]!==C||t[67]!==Pe?(Fe=(0,Z.jsx)(le,{control:C,name:`instanceTypes`,render:Pe}),t[66]=C,t[67]=Pe,t[68]=Fe):Fe=t[68];let Ie;t[69]===V?Ie=t[70]:(Ie=V&&(0,Z.jsxs)(fe,{children:[`GPU node AMI is auto-selected for this instance type. This node group is tainted `,(0,Z.jsx)(`code`,{children:`nvidia.com/gpu=present:NoSchedule`}),` `,`by default, so ordinary pods won't schedule onto GPU workers.`]}),t[69]=V,t[70]=Ie);let Le;t[71]===M.instanceTypes?Le=t[72]:(Le=(0,Z.jsx)(pe,{errors:[M.instanceTypes]}),t[71]=M.instanceTypes,t[72]=Le);let Re;t[73]!==Fe||t[74]!==Ie||t[75]!==Le?(Re=(0,Z.jsxs)(q,{children:[Ne,Fe,Ie,Le]}),t[73]=Fe,t[74]=Ie,t[75]=Le,t[76]=Re):Re=t[76];let ze;t[77]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-ami`,children:`AMI type`})}),t[77]=ze):ze=t[77];let Be;t[78]===O?Be=t[79]:(Be=O(`amiType`),t[78]=O,t[79]=Be);let Ve;t[80]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=P.map(rt),t[80]=Ve):Ve=t[80];let He;t[81]===Be?He=t[82]:(He=(0,Z.jsxs)(q,{children:[ze,(0,Z.jsx)(`select`,{className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-ami`,...Be,children:Ve})]}),t[81]=Be,t[82]=He);let Ue;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-capacity`,children:`Capacity type`})}),t[83]=Ue):Ue=t[83];let We;t[84]===O?We=t[85]:(We=O(`capacityType`),t[84]=O,t[85]=We);let Ge;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(Ge=k.map(nt),t[86]=Ge):Ge=t[86];let Ke;t[87]===We?Ke=t[88]:(Ke=(0,Z.jsxs)(q,{children:[Ue,(0,Z.jsx)(`select`,{className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-capacity`,...We,children:Ge})]}),t[87]=We,t[88]=Ke);let qe;t[89]!==He||t[90]!==Ke?(qe=(0,Z.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[He,Ke]}),t[89]=He,t[90]=Ke,t[91]=qe):qe=t[91];let Je;t[92]===Symbol.for(`react.memo_cache_sentinel`)?(Je=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-disk`,children:`Disk (GB)`})}),t[92]=Je):Je=t[92];let Ye;t[93]===O?Ye=t[94]:(Ye=O(`diskSize`,{valueAsNumber:!0}),t[93]=O,t[94]=Ye);let Xe;t[95]===Ye?Xe=t[96]:(Xe=(0,Z.jsxs)(q,{children:[Je,(0,Z.jsx)(v,{id:`ng-disk`,type:`number`,...Ye})]}),t[95]=Ye,t[96]=Xe);let Ze;t[97]===Symbol.for(`react.memo_cache_sentinel`)?(Ze=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-min`,children:`Min`})}),t[97]=Ze):Ze=t[97];let $e;t[98]===O?$e=t[99]:($e=O(`minSize`,{valueAsNumber:!0}),t[98]=O,t[99]=$e);let et;t[100]===$e?et=t[101]:(et=(0,Z.jsxs)(q,{children:[Ze,(0,Z.jsx)(v,{id:`ng-min`,type:`number`,...$e})]}),t[100]=$e,t[101]=et);let tt;t[102]===Symbol.for(`react.memo_cache_sentinel`)?(tt=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-desired`,children:`Desired`})}),t[102]=tt):tt=t[102];let ot;t[103]===O?ot=t[104]:(ot=O(`desiredSize`,{valueAsNumber:!0}),t[103]=O,t[104]=ot);let st;t[105]===ot?st=t[106]:(st=(0,Z.jsxs)(q,{children:[tt,(0,Z.jsx)(v,{id:`ng-desired`,type:`number`,...ot})]}),t[105]=ot,t[106]=st);let ct;t[107]===Symbol.for(`react.memo_cache_sentinel`)?(ct=(0,Z.jsx)(K,{children:(0,Z.jsx)(`label`,{htmlFor:`ng-max`,children:`Max`})}),t[107]=ct):ct=t[107];let lt;t[108]===O?lt=t[109]:(lt=O(`maxSize`,{valueAsNumber:!0}),t[108]=O,t[109]=lt);let ut;t[110]===lt?ut=t[111]:(ut=(0,Z.jsxs)(q,{children:[ct,(0,Z.jsx)(v,{id:`ng-max`,type:`number`,...lt})]}),t[110]=lt,t[111]=ut);let dt;t[112]!==Xe||t[113]!==et||t[114]!==st||t[115]!==ut?(dt=(0,Z.jsxs)(`div`,{className:`grid grid-cols-4 gap-3`,children:[Xe,et,st,ut]}),t[112]=Xe,t[113]=et,t[114]=st,t[115]=ut,t[116]=dt):dt=t[116];let ft;t[117]===M.desiredSize?ft=t[118]:(ft=(0,Z.jsx)(pe,{errors:[M.desiredSize]}),t[117]=M.desiredSize,t[118]=ft);let pt;t[119]!==J||t[120]!==X||t[121]!==Me||t[122]!==Re||t[123]!==qe||t[124]!==dt||t[125]!==ft?(pt=(0,Z.jsxs)(`form`,{className:`space-y-4`,id:`add-nodegroup-form`,children:[J,X,Me,Re,qe,dt,ft]}),t[119]=J,t[120]=X,t[121]=Me,t[122]=Re,t[123]=qe,t[124]=dt,t[125]=ft,t[126]=pt):pt=t[126];let mt;t[127]===Symbol.for(`react.memo_cache_sentinel`)?(mt=(0,Z.jsx)(ve,{children:`Cancel`}),t[127]=mt):mt=t[127];let ht;t[128]!==E||t[129]!==ee?(ht=e=>{e.preventDefault(),E(ee)()},t[128]=E,t[129]=ee,t[130]=ht):ht=t[130];let gt=u.isPending?`Creating…`:`Create`,_t;t[131]!==u.isPending||t[132]!==ht||t[133]!==gt?(_t=(0,Z.jsxs)(_e,{children:[mt,(0,Z.jsx)(ge,{disabled:u.isPending,onClick:ht,children:gt})]}),t[131]=u.isPending,t[132]=ht,t[133]=gt,t[134]=_t):_t=t[134];let vt;t[135]!==ne||t[136]!==G||t[137]!==pt||t[138]!==_t?(vt=(0,Z.jsxs)(ne,{className:`max-h-[85vh] overflow-y-auto`,children:[G,pt,_t]}),t[135]=ne,t[136]=G,t[137]=pt,t[138]=_t,t[139]=vt):vt=t[139];let yt;return t[140]!==te||t[141]!==o||t[142]!==a||t[143]!==vt?(yt=(0,Z.jsx)(te,{onOpenChange:o,open:a,children:vt}),t[140]=te,t[141]=o,t[142]=a,t[143]=vt,t[144]=yt):yt=t[144],yt}function nt(e){return(0,Z.jsx)(`option`,{value:e,children:e},e)}function rt(e){return(0,Z.jsx)(`option`,{value:e,children:e},e)}function it(e){return(0,Z.jsx)(`option`,{value:e.Arn??``,children:e.RoleName},e.Arn)}function at(e){return e.trim()}function ot(e){let t=(0,ke.c)(27),{clusterName:n,clusterVersion:r,vpcId:i}=e,o;t[0]===n?o=t[1]:(o=re(n),t[0]=n,t[1]=o);let{data:s}=a(o),c=z(),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(),p;t[2]===s.nodegroups?p=t[3]:(p=s.nodegroups??[],t[2]=s.nodegroups,t[3]=p);let m=p,h;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,Z.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,Z.jsx)(_,{onClick:()=>{u(!0)},size:`sm`,children:`Add node group`})}),t[4]=h):h=t[4];let g;t[5]!==n||t[6]!==r||t[7]!==m?(g=m.length>0?(0,Z.jsx)(`div`,{className:`space-y-4`,children:m.map(e=>(0,Z.jsx)(et,{clusterName:n,clusterVersion:r,nodegroupName:e,onDelete:f},e))}):(0,Z.jsx)(`p`,{className:`text-muted-foreground`,children:`No node groups.`}),t[5]=n,t[6]=r,t[7]=m,t[8]=g):g=t[8];let v;t[9]!==n||t[10]!==l||t[11]!==i?(v=(0,Z.jsx)(tt,{clusterName:n,onOpenChange:u,open:l,vpcId:i}),t[9]=n,t[10]=l,t[11]=i,t[12]=v):v=t[12];let y=`Delete node group "${d??``}"? This terminates its nodes.`,b;t[13]!==n||t[14]!==c||t[15]!==d?(b=()=>{d&&c.mutate({clusterName:n,nodegroupName:d},{onSuccess:()=>{f(void 0)}})},t[13]=n,t[14]=c,t[15]=d,t[16]=b):b=t[16];let x;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(x=e=>{e||f(void 0)},t[17]=x):x=t[17];let S=d!==void 0,C;t[18]!==c.isPending||t[19]!==y||t[20]!==b||t[21]!==S?(C=(0,Z.jsx)(xe,{description:y,isPending:c.isPending,onConfirm:b,onOpenChange:x,open:S,title:`Delete node group`}),t[18]=c.isPending,t[19]=y,t[20]=b,t[21]=S,t[22]=C):C=t[22];let w;return t[23]!==C||t[24]!==g||t[25]!==v?(w=(0,Z.jsxs)(Z.Fragment,{children:[h,g,v,C]}),t[23]=C,t[24]=g,t[25]=v,t[26]=w):w=t[26],w}function st(e){switch(e??``){case`ACTIVE`:return`default`;case`FAILED`:return`destructive`;default:return`secondary`}}function ct(e){let t=(0,ke.c)(101),{clusterName:n}=e,r=s(),[i,o]=(0,X.useState)(!1),d;t[0]===n?d=t[1]:(d=ne(n),t[0]=n,t[1]=d);let{data:f}=a(d),p=T(),{cluster:v}=f,y;t[2]===v?.health?.issues?y=t[3]:(y=v?.health?.issues??[],t[2]=v?.health?.issues,t[3]=y);let b=y,x;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(x={type:`bin`,value:`aws eks update-kubeconfig`},t[4]=x):x=t[4];let S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S={type:`flag`,value:` --name `},t[5]=S):S=t[5];let C;t[6]===n?C=t[7]:(C={type:`value`,value:n},t[6]=n,t[7]=C);let w;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(w={type:`flag`,value:` --region `},t[8]=w):w=t[8];let E;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(E={type:`value`,value:l()},t[9]=E):E=t[9];let D;t[10]===C?D=t[11]:(D={label:`Configure kubectl`,parts:[x,S,C,w,E]},t[10]=C,t[11]=D);let O;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(O={label:`Verify access`,parts:[{type:`bin`,value:`kubectl get nodes`}]},t[12]=O):O=t[12];let k;t[13]===D?k=t[14]:(k=[D,O],t[13]=D,t[14]=k);let A=k,j;t[15]!==n||t[16]!==p||t[17]!==r?(j=function(){p.mutate(n,{onSuccess:()=>{r({to:`/eks/list-clusters`})}})},t[15]=n,t[16]=p,t[17]=r,t[18]=j):j=t[18];let M=j,N;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,Z.jsx)(u,{to:`/eks/list-clusters`,children:`Clusters`}),t[19]=N):N=t[19];let P;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(P=()=>{o(!0)},t[20]=P):P=t[20];let F;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,Z.jsxs)(_,{onClick:P,size:`sm`,variant:`destructive`,children:[(0,Z.jsx)(h,{className:`size-4`}),`Delete`]}),t[21]=F):F=t[21];let I=v?.status,L;t[22]===I?L=t[23]:(L=st(I),t[22]=I,t[23]=L);let R=v?.status??`UNKNOWN`,z;t[24]!==L||t[25]!==R?(z=(0,Z.jsx)(oe,{variant:L,children:R}),t[24]=L,t[25]=R,t[26]=z):z=t[26];let B;t[27]===b.length?B=t[28]:(B=b.length>0&&(0,Z.jsxs)(oe,{variant:`destructive`,children:[(0,Z.jsx)(g,{className:`size-3`}),b.length===1?`1 health issue`:`${b.length} health issues`]}),t[27]=b.length,t[28]=B);let V;t[29]!==z||t[30]!==B?(V=(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[F,z,B]}),t[29]=z,t[30]=B,t[31]=V):V=t[31];let H;t[32]!==n||t[33]!==V?(H=(0,Z.jsx)(ae,{actions:V,subtitle:`Cluster Details`,title:n}),t[32]=n,t[33]=V,t[34]=H):H=t[34];let U;t[35]!==p.error||t[36]!==p.isError?(U=p.isError&&(0,Z.jsx)(de,{error:p.error instanceof Error?p.error:void 0,msg:`Failed to delete cluster.`}),t[35]=p.error,t[36]=p.isError,t[37]=U):U=t[37];let W;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,Z.jsxs)(Te,{children:[(0,Z.jsx)(we,{value:`overview`,children:`Overview`}),(0,Z.jsx)(we,{value:`compute`,children:`Compute`}),(0,Z.jsx)(we,{value:`addons`,children:`Add-ons`}),(0,Z.jsx)(we,{value:`access`,children:`Access`}),(0,Z.jsx)(we,{value:`networking`,children:`Networking`}),(0,Z.jsx)(we,{value:`connect`,children:`Connect`})]}),t[38]=W):W=t[38];let ee;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(ee=(0,Z.jsx)(J.Header,{children:`Cluster`}),t[39]=ee):ee=t[39];let te=v?.arn,G;t[40]===te?G=t[41]:(G=(0,Z.jsx)(Y,{label:`ARN`,value:te}),t[40]=te,t[41]=G);let re=v?.status,ie;t[42]===re?ie=t[43]:(ie=(0,Z.jsx)(Y,{label:`Status`,value:re}),t[42]=re,t[43]=ie);let se;t[44]===b?se=t[45]:(se=b.length>0?b.map(lt).filter(Boolean).join(`; `):`OK`,t[44]=b,t[45]=se);let ce;t[46]===se?ce=t[47]:(ce=(0,Z.jsx)(Y,{label:`Health`,value:se}),t[46]=se,t[47]=ce);let le=v?.version,ue;t[48]===le?ue=t[49]:(ue=(0,Z.jsx)(Y,{label:`Kubernetes version`,value:le}),t[48]=le,t[49]=ue);let fe=v?.platformVersion,pe;t[50]===fe?pe=t[51]:(pe=(0,Z.jsx)(Y,{label:`Platform version`,value:fe}),t[50]=fe,t[51]=pe);let K=v?.endpoint,q;t[52]===K?q=t[53]:(q=(0,Z.jsx)(Y,{label:`Endpoint`,value:K}),t[52]=K,t[53]=q);let me=v?.identity?.oidc?.issuer,he;t[54]===me?he=t[55]:(he=(0,Z.jsx)(Y,{label:`OIDC issuer`,value:me}),t[54]=me,t[55]=he);let ge=v?.resourcesVpcConfig?.vpcId,_e;t[56]===ge?_e=t[57]:(_e=(0,Z.jsx)(Y,{label:`VPC`,value:ge}),t[56]=ge,t[57]=_e);let ve=v?.createdAt,ye;t[58]===ve?ye=t[59]:(ye=c(ve),t[58]=ve,t[59]=ye);let be;t[60]===ye?be=t[61]:(be=(0,Z.jsx)(Y,{label:`Created at`,value:ye}),t[60]=ye,t[61]=be);let Se;t[62]!==G||t[63]!==ie||t[64]!==ce||t[65]!==ue||t[66]!==pe||t[67]!==q||t[68]!==he||t[69]!==_e||t[70]!==be?(Se=(0,Z.jsx)(Ee,{value:`overview`,children:(0,Z.jsxs)(J,{children:[ee,(0,Z.jsxs)(J.Content,{children:[G,ie,ce,ue,pe,q,he,_e,be]})]})}),t[62]=G,t[63]=ie,t[64]=ce,t[65]=ue,t[66]=pe,t[67]=q,t[68]=he,t[69]=_e,t[70]=be,t[71]=Se):Se=t[71];let Ce=v?.version,Oe=v?.resourcesVpcConfig?.vpcId,Ae;t[72]!==n||t[73]!==Ce||t[74]!==Oe?(Ae=(0,Z.jsx)(Ee,{value:`compute`,children:(0,Z.jsx)(ot,{clusterName:n,clusterVersion:Ce,vpcId:Oe})}),t[72]=n,t[73]=Ce,t[74]=Oe,t[75]=Ae):Ae=t[75];let Q;t[76]===n?Q=t[77]:(Q=(0,Z.jsx)(Ee,{value:`addons`,children:(0,Z.jsx)(Ge,{clusterName:n})}),t[76]=n,t[77]=Q);let je;t[78]===n?je=t[79]:(je=(0,Z.jsx)(Ee,{value:`access`,children:(0,Z.jsx)(Ne,{clusterName:n})}),t[78]=n,t[79]=je);let $;t[80]===v?$=t[81]:($=(0,Z.jsx)(Ee,{value:`networking`,children:(0,Z.jsx)(qe,{cluster:v})}),t[80]=v,t[81]=$);let Me;t[82]===A?Me=t[83]:(Me=(0,Z.jsx)(Ee,{value:`connect`,children:(0,Z.jsx)(m,{commands:A})}),t[82]=A,t[83]=Me);let Pe;t[84]!==Se||t[85]!==Ae||t[86]!==Q||t[87]!==je||t[88]!==$||t[89]!==Me?(Pe=(0,Z.jsxs)(De,{defaultValue:`overview`,children:[W,Se,Ae,Q,je,$,Me]}),t[84]=Se,t[85]=Ae,t[86]=Q,t[87]=je,t[88]=$,t[89]=Me,t[90]=Pe):Pe=t[90];let Fe=`This permanently deletes cluster "${n}" and its control plane. This cannot be undone.`,Ie;t[91]!==p.isPending||t[92]!==M||t[93]!==i||t[94]!==Fe?(Ie=(0,Z.jsx)(xe,{description:Fe,isPending:p.isPending,onConfirm:M,onOpenChange:o,open:i,title:`Delete cluster`}),t[91]=p.isPending,t[92]=M,t[93]=i,t[94]=Fe,t[95]=Ie):Ie=t[95];let Le;return t[96]!==H||t[97]!==U||t[98]!==Pe||t[99]!==Ie?(Le=(0,Z.jsxs)(Z.Fragment,{children:[N,H,U,Pe,Ie]}),t[96]=H,t[97]=U,t[98]=Pe,t[99]=Ie,t[100]=Le):Le=t[100],Le}function lt(e){return e.message}function ut(){let e=(0,ke.c)(2),{clusterName:t}=p.useParams(),n;return e[0]===t?n=e[1]:(n=(0,Z.jsx)(ct,{clusterName:t}),e[0]=t,e[1]=n),n}export{ut as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CCxZlFIF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CCxZlFIF.js deleted file mode 100644 index 87a1d6390..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CCxZlFIF.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{t as c}from"./back-link-CjKy1JE5.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-BarTr35m.js";import{t as d}from"./input-6kdUb_DH.js";import{O as f,c as p,p as m,w as h}from"./ec2-CWEplLq4.js";import{i as g,r as _,s as v,t as y}from"./ecs-gqt7DXoF.js";import{i as b,l as x,o as S,r as C,u as w}from"./ecs-8RzYyUs4.js";import{t as T}from"./_clusterName-Dsur-gaB.js";import{t as E}from"./page-heading-vksh_67w.js";import{t as ee}from"./error-banner-DeOeVBKS.js";import{s as D,t as O}from"./field-c7GHI5st.js";import{a as k,i as A,l as j,n as te,o as M,r as ne,s as N,t as re}from"./alert-dialog-kCQ1W4Rz.js";import{t as P}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as ie,t as F}from"./detail-row-DNBRlVeK.js";import{t as I}from"./state-badge-D1Z6q_OA.js";import{t as L}from"./gpu-instance-type-select-BD2r8UcO.js";import{i as R,n as ae,r as z,t as oe}from"./tabs-t6sDAEVZ.js";var B=r(),V=t(n(),1),H=e(),U=`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`;function W(e){let t=(0,B.c)(79),{clusterName:n,open:r,onOpenChange:a}=e,o=S(),{data:s}=i(f),{data:c}=i(h),{data:l}=i(m),{data:u}=i(p),g;t[0]===s?.Subnets?g=t[1]:(g=s?.Subnets??[],t[0]=s?.Subnets,t[1]=g);let _=g,v;t[2]===c?.SecurityGroups?v=t[3]:(v=c?.SecurityGroups??[],t[2]=c?.SecurityGroups,t[3]=v);let y=v,b;t[4]===l?.KeyPairs?b=t[5]:(b=l?.KeyPairs??[],t[4]=l?.KeyPairs,t[5]=b);let x=b,C;t[6]===u?.InstanceTypes?C=t[7]:(C=u?.InstanceTypes??[],t[6]=u?.InstanceTypes,t[7]=C);let w=C,[T,E]=(0,V.useState)(`t3.small`),[P,ie]=(0,V.useState)(1),[F,I]=(0,V.useState)(``),[R,ae]=(0,V.useState)(``),[z,oe]=(0,V.useState)(``),W;t[8]!==a||t[9]!==o?(W=function(e){e||(E(`t3.small`),ie(1),I(``),ae(``),oe(``),o.reset()),a(e)},t[8]=a,t[9]=o,t[10]=W):W=t[10];let J=W,Y;t[11]!==n||t[12]!==P||t[13]!==J||t[14]!==T||t[15]!==z||t[16]!==o||t[17]!==R||t[18]!==F?(Y=async function(){try{await o.mutateAsync({Cluster:n,InstanceType:T||void 0,Count:P,SubnetID:F,SecurityGroupID:R,KeyName:z||void 0}),J(!1)}catch{}},t[11]=n,t[12]=P,t[13]=J,t[14]=T,t[15]=z,t[16]=o,t[17]=R,t[18]=F,t[19]=Y):Y=t[19];let se=Y,X=o.isPending||F===``||R===``,ce;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(ce=(0,H.jsx)(j,{children:`Provision EC2 capacity`}),t[20]=ce):ce=t[20];let Z;t[21]===n?Z=t[22]:(Z=(0,H.jsxs)(N,{children:[ce,(0,H.jsxs)(k,{children:[`Launch container instances into cluster “`,n,`”. They register automatically once booted.`]})]}),t[21]=n,t[22]=Z);let le;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(le=(0,H.jsx)(D,{children:(0,H.jsx)(`label`,{htmlFor:`provision-instance-type`,children:`Instance type`})}),t[23]=le):le=t[23];let Q;t[24]!==T||t[25]!==w?(Q=(0,H.jsxs)(O,{children:[le,(0,H.jsx)(L,{id:`provision-instance-type`,instanceTypes:w,onValueChange:E,value:T})]}),t[24]=T,t[25]=w,t[26]=Q):Q=t[26];let ue;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,H.jsx)(D,{children:(0,H.jsx)(`label`,{htmlFor:`provision-count`,children:`Count`})}),t[27]=ue):ue=t[27];let de;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(de=e=>{ie(Number(e.target.value))},t[28]=de):de=t[28];let fe;t[29]===P?fe=t[30]:(fe=(0,H.jsxs)(O,{children:[ue,(0,H.jsx)(d,{id:`provision-count`,max:10,min:1,onChange:de,type:`number`,value:P})]}),t[29]=P,t[30]=fe);let pe;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,H.jsx)(D,{children:(0,H.jsx)(`label`,{htmlFor:`provision-subnet`,children:`Subnet`})}),t[31]=pe):pe=t[31];let me;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(me=e=>{I(e.target.value)},t[32]=me):me=t[32];let he;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(he=(0,H.jsx)(`option`,{value:``,children:`Select a subnet`}),t[33]=he):he=t[33];let ge;t[34]===_?ge=t[35]:(ge=_.map(q),t[34]=_,t[35]=ge);let _e;t[36]!==F||t[37]!==ge?(_e=(0,H.jsxs)(O,{children:[pe,(0,H.jsxs)(`select`,{className:U,id:`provision-subnet`,onChange:me,value:F,children:[he,ge]})]}),t[36]=F,t[37]=ge,t[38]=_e):_e=t[38];let ve;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(ve=(0,H.jsx)(D,{children:(0,H.jsx)(`label`,{htmlFor:`provision-sg`,children:`Security group`})}),t[39]=ve):ve=t[39];let ye;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(ye=e=>{ae(e.target.value)},t[40]=ye):ye=t[40];let be;t[41]===Symbol.for(`react.memo_cache_sentinel`)?(be=(0,H.jsx)(`option`,{value:``,children:`Select a security group`}),t[41]=be):be=t[41];let xe;t[42]===y?xe=t[43]:(xe=y.map(K),t[42]=y,t[43]=xe);let Se;t[44]!==R||t[45]!==xe?(Se=(0,H.jsxs)(O,{children:[ve,(0,H.jsxs)(`select`,{className:U,id:`provision-sg`,onChange:ye,value:R,children:[be,xe]})]}),t[44]=R,t[45]=xe,t[46]=Se):Se=t[46];let Ce;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(Ce=(0,H.jsx)(D,{children:(0,H.jsx)(`label`,{htmlFor:`provision-key`,children:`Key pair`})}),t[47]=Ce):Ce=t[47];let we;t[48]===Symbol.for(`react.memo_cache_sentinel`)?(we=e=>{oe(e.target.value)},t[48]=we):we=t[48];let Te;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,H.jsx)(`option`,{value:``,children:`None`}),t[49]=Te):Te=t[49];let Ee;t[50]===x?Ee=t[51]:(Ee=x.map(G),t[50]=x,t[51]=Ee);let $;t[52]!==z||t[53]!==Ee?($=(0,H.jsxs)(O,{children:[Ce,(0,H.jsxs)(`select`,{className:U,id:`provision-key`,onChange:we,value:z,children:[Te,Ee]})]}),t[52]=z,t[53]=Ee,t[54]=$):$=t[54];let De;t[55]!==Q||t[56]!==fe||t[57]!==_e||t[58]!==Se||t[59]!==$?(De=(0,H.jsxs)(`div`,{className:`space-y-4`,children:[Q,fe,_e,Se,$]}),t[55]=Q,t[56]=fe,t[57]=_e,t[58]=Se,t[59]=$,t[60]=De):De=t[60];let Oe;t[61]===o.error?Oe=t[62]:(Oe=o.error&&(0,H.jsx)(ee,{error:o.error instanceof Error?o.error:void 0,msg:`Failed to provision capacity.`}),t[61]=o.error,t[62]=Oe);let ke;t[63]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,H.jsx)(ne,{children:`Cancel`}),t[63]=ke):ke=t[63];let Ae;t[64]===se?Ae=t[65]:(Ae=e=>{e.preventDefault(),se()},t[64]=se,t[65]=Ae);let je=o.isPending?`Provisioning…`:`Provision`,Me;t[66]!==X||t[67]!==Ae||t[68]!==je?(Me=(0,H.jsxs)(M,{children:[ke,(0,H.jsx)(te,{disabled:X,onClick:Ae,children:je})]}),t[66]=X,t[67]=Ae,t[68]=je,t[69]=Me):Me=t[69];let Ne;t[70]!==De||t[71]!==Oe||t[72]!==Me||t[73]!==Z?(Ne=(0,H.jsxs)(A,{className:`max-h-[85vh] overflow-y-auto`,children:[Z,De,Oe,Me]}),t[70]=De,t[71]=Oe,t[72]=Me,t[73]=Z,t[74]=Ne):Ne=t[74];let Pe;return t[75]!==J||t[76]!==r||t[77]!==Ne?(Pe=(0,H.jsx)(re,{onOpenChange:J,open:r,children:Ne}),t[75]=J,t[76]=r,t[77]=Ne,t[78]=Pe):Pe=t[78],Pe}function G(e){return(0,H.jsx)(`option`,{value:e.KeyName??``,children:e.KeyName},e.KeyPairId)}function K(e){return(0,H.jsxs)(`option`,{value:e.GroupId??``,children:[e.GroupId,` (`,e.GroupName,`)`]},e.GroupId)}function q(e){return(0,H.jsxs)(`option`,{value:e.SubnetId??``,children:[e.SubnetId,` (`,e.CidrBlock,e.AvailabilityZone?`, ${e.AvailabilityZone}`:``,`)`]},e.SubnetId)}var J={drain:`Drain`,activate:`Activate`,deregister:`Deregister`},Y={drain:`Draining force-stops the service-owned tasks on this instance so it can be retired.`,activate:`This returns the instance to ACTIVE so the scheduler can place tasks on it again.`,deregister:`This force-removes the container instance record. Any tasks it still holds are stopped.`};function se(e){let t=(0,B.c)(28),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=_(n),t[0]=n,t[1]=r);let{data:i}=a(r),o=w(),s=b(),[c,l]=(0,V.useState)(null),[d,f]=(0,V.useState)(!1),p;t[2]!==n||t[3]!==s||t[4]!==c||t[5]!==o?(p=function(){if(!c)return;let e=()=>{l(null)};if(c.action===`deregister`){s.mutate({cluster:n,containerInstance:c.arn},{onSuccess:e});return}o.mutate({cluster:n,containerInstance:c.arn,status:c.action===`drain`?`DRAINING`:`ACTIVE`},{onSuccess:e})},t[2]=n,t[3]=s,t[4]=c,t[5]=o,t[6]=p):p=t[6];let m=p,h=o.isError||s.isError,g=o.error??s.error,v=o.isPending||s.isPending,y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,H.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,H.jsx)(u,{onClick:()=>{f(!0)},size:`sm`,children:`Provision EC2 capacity`})}),t[7]=y):y=t[7];let x;t[8]!==g||t[9]!==h?(x=h&&(0,H.jsx)(ee,{error:g instanceof Error?g:void 0,msg:`Container instance action failed.`}),t[8]=g,t[9]=h,t[10]=x):x=t[10];let S;t[11]===i?S=t[12]:(S=i.length===0?(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`No container instances found.`}):(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,H.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`EC2 Instance`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,H.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,H.jsx)(`tbody`,{children:i.map(e=>{let t=e.containerInstanceArn??``,n=e.status===`DRAINING`;return(0,H.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,H.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.ec2InstanceId}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:(0,H.jsx)(I,{state:e.status})}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.runningTasksCount??0}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingTasksCount??0}),(0,H.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,H.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,H.jsx)(u,{"aria-label":n?`Activate container instance`:`Drain container instance`,onClick:()=>{l({arn:t,action:n?`activate`:`drain`})},size:`sm`,variant:`outline`,children:n?`Activate`:`Drain`}),(0,H.jsx)(u,{onClick:()=>{l({arn:t,action:`deregister`})},size:`sm`,variant:`destructive`,children:`Deregister`})]})})]},t)})})]})}),t[11]=i,t[12]=S);let C;t[13]!==n||t[14]!==d?(C=(0,H.jsx)(W,{clusterName:n,onOpenChange:f,open:d}),t[13]=n,t[14]=d,t[15]=C):C=t[15];let T=c?J[c.action]:`Confirm`,E=c?Y[c.action]:``,D;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(D=e=>{e||l(null)},t[16]=D):D=t[16];let O=c!==null,k;t[17]!==m||t[18]!==v||t[19]!==O||t[20]!==T||t[21]!==E?(k=(0,H.jsx)(P,{confirmLabel:T,description:E,isPending:v,onConfirm:m,onOpenChange:D,open:O,title:`Container instance`}),t[17]=m,t[18]=v,t[19]=O,t[20]=T,t[21]=E,t[22]=k):k=t[22];let A;return t[23]!==k||t[24]!==x||t[25]!==S||t[26]!==C?(A=(0,H.jsxs)(H.Fragment,{children:[y,x,S,C,k]}),t[23]=k,t[24]=x,t[25]=S,t[26]=C,t[27]=A):A=t[27],A}function X(e){return e?.split(`/`).at(-1)??``}function ce(e){let t=(0,B.c)(13),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=g(n),t[0]=n,t[1]=r);let{data:i}=a(r),s;t[2]===n?s=t[3]:(s={cluster:n},t[2]=n,t[3]=s);let c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,H.jsx)(u,{size:`sm`,children:`Create service`}),t[4]=c):c=t[4];let l;t[5]===s?l=t[6]:(l=(0,H.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,H.jsx)(o,{search:s,to:`/ecs/create-service`,children:c})}),t[5]=s,t[6]=l);let d;t[7]!==n||t[8]!==i?(d=i.length===0?(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`No services found.`}):(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,H.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task Definition`})]})}),(0,H.jsx)(`tbody`,{children:i.map(e=>(0,H.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,H.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,H.jsx)(o,{className:`underline`,params:{clusterName:n,serviceName:e.serviceName??``},to:`/ecs/list-clusters/$clusterName/services/$serviceName`,children:e.serviceName})}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:(0,H.jsx)(I,{state:e.status})}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredCount??0}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.runningCount??0}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingCount??0}),(0,H.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:X(e.taskDefinition)})]},e.serviceArn??e.serviceName))})]})}),t[7]=n,t[8]=i,t[9]=d):d=t[9];let f;return t[10]!==l||t[11]!==d?(f=(0,H.jsxs)(H.Fragment,{children:[l,d]}),t[10]=l,t[11]=d,t[12]=f):f=t[12],f}function Z(e){return e?.split(`/`).at(-1)??``}function le(e){let t=(0,B.c)(27),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=v(n),t[0]=n,t[1]=r);let{data:i}=a(r),s=x(),[c,l]=(0,V.useState)(null),d;t[2]!==n||t[3]!==c||t[4]!==s?(d=function(){c&&s.mutate({cluster:n,task:c},{onSuccess:()=>{l(null)}})},t[2]=n,t[3]=c,t[4]=s,t[5]=d):d=t[5];let f=d,p;t[6]===n?p=t[7]:(p={cluster:n},t[6]=n,t[7]=p);let m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,H.jsx)(u,{size:`sm`,children:`Run task`}),t[8]=m):m=t[8];let h;t[9]===p?h=t[10]:(h=(0,H.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,H.jsx)(o,{search:p,to:`/ecs/run-task`,children:m})}),t[9]=p,t[10]=h);let g;t[11]!==s.error||t[12]!==s.isError?(g=s.isError&&(0,H.jsx)(ee,{error:s.error instanceof Error?s.error:void 0,msg:`Failed to stop task.`}),t[11]=s.error,t[12]=s.isError,t[13]=g):g=t[13];let _;t[14]!==n||t[15]!==i?(_=i.length===0?(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`No tasks found.`}):(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,H.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Last Status`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired Status`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Group`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,H.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,H.jsx)(`tbody`,{children:i.map(e=>{let t=Z(e.taskArn),r=e.lastStatus!==`STOPPED`;return(0,H.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,H.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,H.jsx)(o,{className:`underline`,params:{clusterName:n,taskId:t},to:`/ecs/list-clusters/$clusterName/tasks/$taskId`,children:t})}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:(0,H.jsx)(I,{state:e.lastStatus})}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredStatus}),(0,H.jsx)(`td`,{className:`px-4 py-2`,children:e.group}),(0,H.jsx)(`td`,{className:`px-4 py-2 text-right`,children:r&&(0,H.jsx)(u,{onClick:()=>{l(e.taskArn??t)},size:`sm`,variant:`destructive`,children:`Stop`})})]},t)})})]})}),t[14]=n,t[15]=i,t[16]=_):_=t[16];let y;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>{e||l(null)},t[17]=y):y=t[17];let b=c!==null,S;t[18]!==f||t[19]!==s.isPending||t[20]!==b?(S=(0,H.jsx)(P,{confirmLabel:`Stop task`,description:`This stops the task and releases its ENI and reserved capacity.`,isPending:s.isPending,onConfirm:f,onOpenChange:y,open:b,pendingLabel:`Stopping…`,title:`Stop task`}),t[18]=f,t[19]=s.isPending,t[20]=b,t[21]=S):S=t[21];let C;return t[22]!==S||t[23]!==h||t[24]!==g||t[25]!==_?(C=(0,H.jsxs)(H.Fragment,{children:[h,g,_,S]}),t[22]=S,t[23]=h,t[24]=g,t[25]=_,t[26]=C):C=t[26],C}function Q(e){let t=(0,B.c)(70),{clusterName:n}=e,r=s(),[i,o]=(0,V.useState)(!1),d;t[0]===n?d=t[1]:(d=y(n),t[0]=n,t[1]=d);let{data:f}=a(d),p=C(),m;t[2]!==n||t[3]!==p||t[4]!==r?(m=function(){p.mutate(n,{onSuccess:()=>{r({to:`/ecs/list-clusters`})}})},t[2]=n,t[3]=p,t[4]=r,t[5]=m):m=t[5];let h=m;if(!f){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,H.jsx)(c,{to:`/ecs/list-clusters`,children:`Clusters`}),t[6]=e):e=t[6];let r;t[7]===n?r=t[8]:(r=(0,H.jsx)(E,{subtitle:`Cluster Details`,title:n}),t[7]=n,t[8]=r);let i;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`Cluster not found.`}),t[9]=i):i=t[9];let a;return t[10]===r?a=t[11]:(a=(0,H.jsxs)(H.Fragment,{children:[e,r,i]}),t[10]=r,t[11]=a),a}let g;t[12]===f.tags?g=t[13]:(g=f.tags??[],t[12]=f.tags,t[13]=g);let _=g,v;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,H.jsx)(c,{to:`/ecs/list-clusters`,children:`Clusters`}),t[14]=v):v=t[14];let b;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(b=()=>{o(!0)},t[15]=b):b=t[15];let x;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,H.jsxs)(u,{onClick:b,size:`sm`,variant:`destructive`,children:[(0,H.jsx)(l,{className:`size-4`}),`Delete`]}),t[16]=x):x=t[16];let S;t[17]===f.status?S=t[18]:(S=(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[x,(0,H.jsx)(I,{state:f.status})]}),t[17]=f.status,t[18]=S);let w;t[19]!==n||t[20]!==S?(w=(0,H.jsx)(E,{actions:S,subtitle:`Cluster Details`,title:n}),t[19]=n,t[20]=S,t[21]=w):w=t[21];let T;t[22]!==p.error||t[23]!==p.isError?(T=p.isError&&(0,H.jsx)(ee,{error:p.error instanceof Error?p.error:void 0,msg:`Failed to delete cluster.`}),t[22]=p.error,t[23]=p.isError,t[24]=T):T=t[24];let D;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,H.jsx)(ie.Header,{children:`Overview`}),t[25]=D):D=t[25];let O;t[26]===f.clusterArn?O=t[27]:(O=(0,H.jsx)(F,{label:`ARN`,value:f.clusterArn}),t[26]=f.clusterArn,t[27]=O);let k;t[28]===f.status?k=t[29]:(k=(0,H.jsx)(F,{label:`Status`,value:f.status}),t[28]=f.status,t[29]=k);let A=String(f.activeServicesCount??0),j;t[30]===A?j=t[31]:(j=(0,H.jsx)(F,{label:`Active services`,value:A}),t[30]=A,t[31]=j);let te=String(f.runningTasksCount??0),M;t[32]===te?M=t[33]:(M=(0,H.jsx)(F,{label:`Running tasks`,value:te}),t[32]=te,t[33]=M);let ne=String(f.pendingTasksCount??0),N;t[34]===ne?N=t[35]:(N=(0,H.jsx)(F,{label:`Pending tasks`,value:ne}),t[34]=ne,t[35]=N);let re=String(f.registeredContainerInstancesCount??0),L;t[36]===re?L=t[37]:(L=(0,H.jsx)(F,{label:`Registered instances`,value:re}),t[36]=re,t[37]=L);let U;t[38]!==O||t[39]!==k||t[40]!==j||t[41]!==M||t[42]!==N||t[43]!==L?(U=(0,H.jsxs)(ie,{children:[D,(0,H.jsxs)(ie.Content,{children:[O,k,j,M,N,L]})]}),t[38]=O,t[39]=k,t[40]=j,t[41]=M,t[42]=N,t[43]=L,t[44]=U):U=t[44];let W;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,H.jsxs)(ae,{children:[(0,H.jsx)(R,{value:`services`,children:`Services`}),(0,H.jsx)(R,{value:`tasks`,children:`Tasks`}),(0,H.jsx)(R,{value:`infrastructure`,children:`Infrastructure`}),(0,H.jsx)(R,{value:`tags`,children:`Tags`})]}),t[45]=W):W=t[45];let G;t[46]===n?G=t[47]:(G=(0,H.jsx)(z,{value:`services`,children:(0,H.jsx)(ce,{clusterName:n})}),t[46]=n,t[47]=G);let K;t[48]===n?K=t[49]:(K=(0,H.jsx)(z,{value:`tasks`,children:(0,H.jsx)(le,{clusterName:n})}),t[48]=n,t[49]=K);let q;t[50]===n?q=t[51]:(q=(0,H.jsx)(z,{value:`infrastructure`,children:(0,H.jsx)(se,{clusterName:n})}),t[50]=n,t[51]=q);let J;t[52]===_?J=t[53]:(J=(0,H.jsx)(z,{value:`tags`,children:_.length===0?(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`No tags.`}):(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,H.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Key`}),(0,H.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Value`})]})}),(0,H.jsx)(`tbody`,{children:_.map(ue)})]})})}),t[52]=_,t[53]=J);let Y;t[54]!==G||t[55]!==K||t[56]!==q||t[57]!==J?(Y=(0,H.jsxs)(oe,{className:`mt-6`,defaultValue:`services`,children:[W,G,K,q,J]}),t[54]=G,t[55]=K,t[56]=q,t[57]=J,t[58]=Y):Y=t[58];let X=`This permanently deletes cluster "${n}" and force-stops every task it holds. This cannot be undone.`,Z;t[59]!==p.isPending||t[60]!==h||t[61]!==i||t[62]!==X?(Z=(0,H.jsx)(P,{description:X,isPending:p.isPending,onConfirm:h,onOpenChange:o,open:i,title:`Delete cluster`}),t[59]=p.isPending,t[60]=h,t[61]=i,t[62]=X,t[63]=Z):Z=t[63];let Q;return t[64]!==U||t[65]!==Y||t[66]!==Z||t[67]!==w||t[68]!==T?(Q=(0,H.jsxs)(H.Fragment,{children:[v,w,T,U,Y,Z]}),t[64]=U,t[65]=Y,t[66]=Z,t[67]=w,t[68]=T,t[69]=Q):Q=t[69],Q}function ue(e){return(0,H.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,H.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.key}),(0,H.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.value})]},e.key)}function de(){let e=(0,B.c)(2),{clusterName:t}=T.useParams(),n;return e[0]===t?n=e[1]:(n=(0,H.jsx)(Q,{clusterName:t}),e[0]=t,e[1]=n),n}export{de as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CoDfUrWf.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CoDfUrWf.js deleted file mode 100644 index d84b59910..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-CoDfUrWf.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_clusterName-Bkhppjj7.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/circle-arrow-up-Bs5cB5tN.js","assets/cli-command-panel-CLiFy1rG.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/eks-C1P60riG.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/commandBuilder-DOzu_YCE.js","assets/json-DsgWHaZY.js","assets/subnet-calculator-BlCTyGtY.js","assets/eks-CC8GhK3R.js","assets/iam-CVg27y22.js","assets/commandBuilder-CoLHZwsC.js","assets/page-heading-vksh_67w.js","assets/badge-B_ExXcw2.js","assets/useRender-2pqPQOAE.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/gpu-instance-type-select-BD2r8UcO.js","assets/select-B01jpDaX.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/tabs-t6sDAEVZ.js","assets/json-editor-Bwbz8mfn.js","assets/textarea-n04EavUm.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{s as i,t as a,u as o}from"./eks-CC8GhK3R.js";var s={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]};s.node;var c=r(s),l=e(`/_auth/eks/(clusters)/list-clusters/$clusterName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.clusterName),staleTime:`static`}),e.queryClient.query({...o(t.clusterName),staleTime:`static`}),e.queryClient.query({...a(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.clusterName} | EKS | Mulga`}]}),component:t(()=>n(()=>import(`./_clusterName-Bkhppjj7.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62])),`component`)});export{c as n,l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-D8hCnxwC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-D8hCnxwC.js new file mode 100644 index 000000000..913184894 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-D8hCnxwC.js @@ -0,0 +1 @@ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{an as c,t as l}from"./cluster-config-DkOiY8HH.js";import{t as u}from"./back-link-wsXUoJ12.js";import{t as d}from"./circle-arrow-up-Bs5cB5tN.js";import{n as f,t as p}from"./_clusterName-DSoBTvQE.js";import{t as m}from"./cli-command-panel-DavMY-tN.js";import{t as h}from"./trash-DVab4pEz.js";import{t as g}from"./triangle-alert-DcjzeKLg.js";import{t as _}from"./button-qf9lLJ2x.js";import{t as v}from"./input-D3aUBtS6.js";import{O as y,c as b}from"./ec2-DYgBhYCJ.js";import{C as x,S,_ as C,b as w,c as T,f as E,h as D,i as O,l as k,m as A,n as j,p as M,r as N,s as P,u as F,v as I,w as L,x as R,y as z}from"./eks-DOTzV24J.js";import{a as B,i as V,l as H,n as U,o as W,r as ee,s as te,t as ne,u as re}from"./eks-Ba3nNOPR.js";import{y as ie}from"./iam-DmtL7LFe.js";import{t as ae}from"./page-heading-vksh_67w.js";import{t as oe}from"./badge-6vbuGFqk.js";import{a as se,i as ce,n as le,t as ue}from"./zod-A4qtKH_p.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{n as fe,r as pe,s as G,t as K}from"./field-CS-ql6du.js";import{i as me,l as he,n as ge,o as _e,r as ve,s as ye,t as be}from"./alert-dialog-jxylPXwR.js";import{t as xe}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as q,t as J}from"./detail-row-DNBRlVeK.js";import{n as Se,t as Ce}from"./gpu-instance-type-select-DMxBayBV.js";import{i as we,n as Te,r as Ee,t as De}from"./tabs-BMSqRmVw.js";import{t as Oe}from"./json-editor-02czSrbA.js";var ke=r(),Y=t(n(),1),X=e();function Ae(e){return e?.split(`/`).pop()??e??``}function je(e){let t=(0,ke.c)(56),{clusterName:n,principalArn:r,onDelete:a}=e,o;t[0]!==n||t[1]!==r?(o=U(n,r),t[0]=n,t[1]=r,t[2]=o):o=t[2];let{data:s}=i(o),c;t[3]!==n||t[4]!==r?(c=W(n,r),t[3]=n,t[4]=r,t[5]=c):c=t[5];let{data:l}=i(c),u=M(),d=S(),[f,p]=(0,Y.useState)(j[0].arn),m=s?.accessEntry,g;t[6]===l?.associatedAccessPolicies?g=t[7]:(g=l?.associatedAccessPolicies??[],t[6]=l?.associatedAccessPolicies,t[7]=g);let v=g,y;t[8]===r?y=t[9]:(y=(0,X.jsx)(`span`,{className:`truncate font-mono text-xs`,children:r}),t[8]=r,t[9]=y);let b;t[10]!==a||t[11]!==r?(b=()=>{a(r)},t[10]=a,t[11]=r,t[12]=b):b=t[12];let x,C;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,X.jsx)(h,{className:`size-4`}),C=(0,X.jsx)(`span`,{className:`sr-only`,children:`Delete access entry`}),t[13]=x,t[14]=C):(x=t[13],C=t[14]);let w;t[15]===b?w=t[16]:(w=(0,X.jsxs)(_,{onClick:b,size:`icon`,variant:`ghost`,children:[x,C]}),t[15]=b,t[16]=w);let T;t[17]!==y||t[18]!==w?(T=(0,X.jsx)(q.Header,{children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[y,w]})}),t[17]=y,t[18]=w,t[19]=T):T=t[19];let E=m?.type,D;t[20]===E?D=t[21]:(D=(0,X.jsx)(J,{label:`Type`,value:E}),t[20]=E,t[21]=D);let O;t[22]===m?O=t[23]:(O=m?.kubernetesGroups?.length?m.kubernetesGroups.join(`, `):`—`,t[22]=m,t[23]=O);let k;t[24]===O?k=t[25]:(k=(0,X.jsx)(J,{label:`Kubernetes groups`,value:O}),t[24]=O,t[25]=k);let A;t[26]!==v||t[27]!==n||t[28]!==d||t[29]!==r?(A=v.length>0?(0,X.jsx)(`div`,{className:`space-y-1`,children:v.map(e=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{children:Ae(e.policyArn)}),(0,X.jsx)(_,{onClick:()=>{d.mutate({clusterName:n,principalArn:r,policyArn:e.policyArn??``})},size:`sm`,variant:`ghost`,children:`Remove`})]},e.policyArn))}):`—`,t[26]=v,t[27]=n,t[28]=d,t[29]=r,t[30]=A):A=t[30];let N;t[31]===A?N=t[32]:(N=(0,X.jsx)(J,{label:`Access policies`,value:A}),t[31]=A,t[32]=N);let P;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(P=e=>{p(e.target.value)},t[33]=P):P=t[33];let F;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(F=j.map(Z),t[34]=F):F=t[34];let I;t[35]===f?I=t[36]:(I=(0,X.jsx)(`select`,{"aria-label":`Access policy`,className:`h-7 flex-1 rounded-md border border-input bg-input/20 px-2 text-sm`,onChange:P,value:f,children:F}),t[35]=f,t[36]=I);let L;t[37]!==u||t[38]!==n||t[39]!==f||t[40]!==r?(L=()=>{u.mutate({clusterName:n,principalArn:r,policyArn:f,accessScopeType:`cluster`})},t[37]=u,t[38]=n,t[39]=f,t[40]=r,t[41]=L):L=t[41];let R;t[42]!==u.isPending||t[43]!==L?(R=(0,X.jsx)(_,{disabled:u.isPending,onClick:L,size:`sm`,children:`Associate`}),t[42]=u.isPending,t[43]=L,t[44]=R):R=t[44];let z;t[45]!==I||t[46]!==R?(z=(0,X.jsxs)(`div`,{className:`flex items-center gap-2 pt-2`,children:[I,R]}),t[45]=I,t[46]=R,t[47]=z):z=t[47];let B;t[48]!==D||t[49]!==k||t[50]!==N||t[51]!==z?(B=(0,X.jsxs)(q.Content,{children:[D,k,N,z]}),t[48]=D,t[49]=k,t[50]=N,t[51]=z,t[52]=B):B=t[52];let V;return t[53]!==B||t[54]!==T?(V=(0,X.jsxs)(q,{children:[T,B]}),t[53]=B,t[54]=T,t[55]=V):V=t[55],V}function Z(e){return(0,X.jsx)(`option`,{value:e.arn,children:e.name},e.arn)}function Me(e){let t=(0,ke.c)(41),{clusterName:n,open:r,onOpenChange:i}=e,a=A(),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:ue(k),defaultValues:{principalArn:``,kubernetesGroups:``}},t[0]=o):o=t[0];let{formState:s,handleSubmit:c,register:l,reset:u}=ce(o),{errors:d}=s,f;t[1]!==n||t[2]!==a||t[3]!==i||t[4]!==u?(f=async e=>{await a.mutateAsync({clusterName:n,principalArn:e.principalArn,kubernetesGroups:e.kubernetesGroups.split(`,`).map(Q).filter(Boolean)}),u(),i(!1)},t[1]=n,t[2]=a,t[3]=i,t[4]=u,t[5]=f):f=t[5];let p=f,m;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,X.jsx)(ye,{children:(0,X.jsx)(he,{children:`Add access entry`})}),t[6]=m):m=t[6];let h;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ae-principal`,children:`IAM principal ARN`})}),t[7]=h):h=t[7];let g=!!d.principalArn,_;t[8]===l?_=t[9]:(_=l(`principalArn`),t[8]=l,t[9]=_);let y;t[10]!==g||t[11]!==_?(y=(0,X.jsx)(v,{"aria-invalid":g,id:`ae-principal`,placeholder:`arn:aws:iam::000000000000:role/my-role`,..._}),t[10]=g,t[11]=_,t[12]=y):y=t[12];let b;t[13]===d.principalArn?b=t[14]:(b=(0,X.jsx)(pe,{errors:[d.principalArn]}),t[13]=d.principalArn,t[14]=b);let x;t[15]!==y||t[16]!==b?(x=(0,X.jsxs)(K,{children:[h,y,b]}),t[15]=y,t[16]=b,t[17]=x):x=t[17];let S;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ae-groups`,children:`Kubernetes groups`})}),t[18]=S):S=t[18];let C;t[19]===l?C=t[20]:(C=l(`kubernetesGroups`),t[19]=l,t[20]=C);let w;t[21]===C?w=t[22]:(w=(0,X.jsxs)(K,{children:[S,(0,X.jsx)(v,{id:`ae-groups`,placeholder:`system:masters`,...C})]}),t[21]=C,t[22]=w);let T;t[23]!==x||t[24]!==w?(T=(0,X.jsxs)(`form`,{className:`space-y-4`,id:`add-access-entry-form`,children:[x,w]}),t[23]=x,t[24]=w,t[25]=T):T=t[25];let E;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,X.jsx)(ve,{children:`Cancel`}),t[26]=E):E=t[26];let D;t[27]!==c||t[28]!==p?(D=e=>{e.preventDefault(),c(p)()},t[27]=c,t[28]=p,t[29]=D):D=t[29];let O=a.isPending?`Creating…`:`Create`,j;t[30]!==a.isPending||t[31]!==D||t[32]!==O?(j=(0,X.jsxs)(_e,{children:[E,(0,X.jsx)(ge,{disabled:a.isPending,onClick:D,children:O})]}),t[30]=a.isPending,t[31]=D,t[32]=O,t[33]=j):j=t[33];let M;t[34]!==T||t[35]!==j?(M=(0,X.jsxs)(me,{children:[m,T,j]}),t[34]=T,t[35]=j,t[36]=M):M=t[36];let N;return t[37]!==i||t[38]!==r||t[39]!==M?(N=(0,X.jsx)(be,{onOpenChange:i,open:r,children:M}),t[37]=i,t[38]=r,t[39]=M,t[40]=N):N=t[40],N}function Q(e){return e.trim()}function Ne(e){let t=(0,ke.c)(25),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=ne(n),t[0]=n,t[1]=r);let{data:i}=a(r),o=I(),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(),d;t[2]===i.accessEntries?d=t[3]:(d=i.accessEntries??[],t[2]=i.accessEntries,t[3]=d);let f=d,p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,X.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,X.jsx)(_,{onClick:()=>{c(!0)},size:`sm`,children:`Add access entry`})}),t[4]=p):p=t[4];let m;t[5]!==n||t[6]!==f?(m=f.length>0?(0,X.jsx)(`div`,{className:`space-y-4`,children:f.map(e=>(0,X.jsx)(je,{clusterName:n,onDelete:u,principalArn:e},e))}):(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`No access entries.`}),t[5]=n,t[6]=f,t[7]=m):m=t[7];let h;t[8]!==n||t[9]!==s?(h=(0,X.jsx)(Me,{clusterName:n,onOpenChange:c,open:s}),t[8]=n,t[9]=s,t[10]=h):h=t[10];let g=`Delete access entry for "${l??``}"?`,v;t[11]!==n||t[12]!==o||t[13]!==l?(v=()=>{l&&o.mutate({clusterName:n,principalArn:l},{onSuccess:()=>{u(void 0)}})},t[11]=n,t[12]=o,t[13]=l,t[14]=v):v=t[14];let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=e=>{e||u(void 0)},t[15]=y):y=t[15];let b=l!==void 0,x;t[16]!==o.isPending||t[17]!==g||t[18]!==v||t[19]!==b?(x=(0,X.jsx)(xe,{description:g,isPending:o.isPending,onConfirm:v,onOpenChange:y,open:b,title:`Delete access entry`}),t[16]=o.isPending,t[17]=g,t[18]=v,t[19]=b,t[20]=x):x=t[20];let S;return t[21]!==x||t[22]!==m||t[23]!==h?(S=(0,X.jsxs)(X.Fragment,{children:[p,m,h,x]}),t[21]=x,t[22]=m,t[23]=h,t[24]=S):S=t[24],S}var Pe=new Set([`CREATING`,`UPDATING`,`DELETING`]),$=5e3,Fe=`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`;function Ie(e){let t=(0,ke.c)(97),{clusterName:n,catalog:r,installed:i,open:a,onOpenChange:o}=e,s=D(),c;t[0]===i?c=t[1]:(c=new Set(i),t[0]=i,t[1]=c);let l=c,u;t[2]===l?u=t[3]:(u=e=>!l.has(e.addonName??``),t[2]=l,t[3]=u);let d=r.filter(u),f;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(f={resolver:ue(F),defaultValues:{addonName:``,addonVersion:``,serviceAccountRoleArn:``,configurationValues:``}},t[4]=f):f=t[4];let{control:p,formState:m,handleSubmit:h,register:g,reset:_,setValue:y}=ce(f),{errors:b}=m,x;t[5]===p?x=t[6]:(x={control:p,name:`addonName`},t[5]=p,t[6]=x);let S=se(x),C;t[7]===p?C=t[8]:(C={control:p,name:`addonVersion`},t[7]=p,t[8]=C);let w=se(C),T;t[9]===S?T=t[10]:(T=e=>e.addonName===S,t[9]=S,t[10]=T);let E=r.find(T)?.addonVersions??[],O;t[11]===w?O=t[12]:(O=e=>e.addonVersion===w,t[11]=w,t[12]=O);let k=E.find(O)?.requiresIamPermissions??!1,A;t[13]!==r||t[14]!==y?(A=e=>{let t=r.find(t=>t.addonName===e)?.addonVersions?.[0]?.addonVersion??``;y(`addonName`,e,{shouldValidate:!0}),y(`addonVersion`,t,{shouldValidate:!0})},t[13]=r,t[14]=y,t[15]=A):A=t[15];let j=A,M;t[16]!==n||t[17]!==s||t[18]!==o||t[19]!==_?(M=async e=>{await s.mutateAsync({clusterName:n,addonName:e.addonName,addonVersion:e.addonVersion||void 0,serviceAccountRoleArn:e.serviceAccountRoleArn.trim()||void 0,configurationValues:e.configurationValues.trim()||void 0}),_(),o(!1)},t[16]=n,t[17]=s,t[18]=o,t[19]=_,t[20]=M):M=t[20];let N=M,P=be,I=me,L;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,X.jsx)(ye,{children:(0,X.jsx)(he,{children:`Add add-on`})}),t[21]=L):L=t[21];let R;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`addon-name`,children:`Add-on`})}),t[22]=R):R=t[22];let z=!!b.addonName,B;t[23]===j?B=t[24]:(B=e=>{j(e.target.value)},t[23]=j,t[24]=B);let V;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,X.jsx)(`option`,{value:``,children:`Select add-on`}),t[25]=V):V=t[25];let H=d.map(Re),U;t[26]!==S||t[27]!==z||t[28]!==B||t[29]!==H?(U=(0,X.jsxs)(`select`,{"aria-invalid":z,className:Fe,id:`addon-name`,onChange:B,value:S,children:[V,H]}),t[26]=S,t[27]=z,t[28]=B,t[29]=H,t[30]=U):U=t[30];let W;t[31]===b.addonName?W=t[32]:(W=(0,X.jsx)(pe,{errors:[b.addonName]}),t[31]=b.addonName,t[32]=W);let ee;t[33]!==U||t[34]!==W?(ee=(0,X.jsxs)(K,{children:[R,U,W]}),t[33]=U,t[34]=W,t[35]=ee):ee=t[35];let te=K,ne;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(ne=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`addon-version`,children:`Version`})}),t[36]=ne):ne=t[36];let re=!!b.addonVersion,ie=Fe,ae=E.length===0,oe;t[37]===y?oe=t[38]:(oe=e=>{y(`addonVersion`,e.target.value,{shouldValidate:!0})},t[37]=y,t[38]=oe);let de=E.map(Le),fe;t[39]!==w||t[40]!==re||t[41]!==ie||t[42]!==ae||t[43]!==oe||t[44]!==de?(fe=(0,X.jsx)(`select`,{"aria-invalid":re,className:ie,disabled:ae,id:`addon-version`,onChange:oe,value:w,children:de}),t[39]=w,t[40]=re,t[41]=ie,t[42]=ae,t[43]=oe,t[44]=de,t[45]=fe):fe=t[45];let xe;t[46]===b.addonVersion?xe=t[47]:(xe=(0,X.jsx)(pe,{errors:[b.addonVersion]}),t[46]=b.addonVersion,t[47]=xe);let q;t[48]!==te||t[49]!==ne||t[50]!==fe||t[51]!==xe?(q=(0,X.jsxs)(te,{children:[ne,fe,xe]}),t[48]=te,t[49]=ne,t[50]=fe,t[51]=xe,t[52]=q):q=t[52];let J;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`addon-role`,children:`Service account IAM role ARN`})}),t[53]=J):J=t[53];let Se;t[54]===g?Se=t[55]:(Se=g(`serviceAccountRoleArn`),t[54]=g,t[55]=Se);let Ce;t[56]===Se?Ce=t[57]:(Ce=(0,X.jsx)(v,{id:`addon-role`,placeholder:`arn:aws:iam::…:role/…`,...Se}),t[56]=Se,t[57]=Ce);let we;t[58]===k?we=t[59]:(we=k&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This add-on needs IAM permissions — provide an IRSA role ARN.`}),t[58]=k,t[59]=we);let Te;t[60]!==Ce||t[61]!==we?(Te=(0,X.jsxs)(K,{children:[J,Ce,we]}),t[60]=Ce,t[61]=we,t[62]=Te):Te=t[62];let Ee;t[63]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`addon-config`,children:`Configuration values (JSON)`})}),t[63]=Ee):Ee=t[63];let De;t[64]===b.configurationValues?De=t[65]:(De=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,X.jsx)(Oe,{error:!!b.configurationValues,id:`addon-config`,onBlur:n,onChange:r,placeholder:`{"replicaCount": 2}`,ref:i,rows:4,value:a})},t[64]=b.configurationValues,t[65]=De);let Y;t[66]!==p||t[67]!==De?(Y=(0,X.jsx)(le,{control:p,name:`configurationValues`,render:De}),t[66]=p,t[67]=De,t[68]=Y):Y=t[68];let Ae;t[69]===b.configurationValues?Ae=t[70]:(Ae=(0,X.jsx)(pe,{errors:[b.configurationValues]}),t[69]=b.configurationValues,t[70]=Ae);let je;t[71]!==Y||t[72]!==Ae?(je=(0,X.jsxs)(K,{children:[Ee,Y,Ae]}),t[71]=Y,t[72]=Ae,t[73]=je):je=t[73];let Z;t[74]!==ee||t[75]!==q||t[76]!==Te||t[77]!==je?(Z=(0,X.jsxs)(`form`,{className:`space-y-4`,id:`add-addon-form`,children:[ee,q,Te,je]}),t[74]=ee,t[75]=q,t[76]=Te,t[77]=je,t[78]=Z):Z=t[78];let Me;t[79]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,X.jsx)(ve,{children:`Cancel`}),t[79]=Me):Me=t[79];let Q;t[80]!==h||t[81]!==N?(Q=e=>{e.preventDefault(),h(N)()},t[80]=h,t[81]=N,t[82]=Q):Q=t[82];let Ne=s.isPending?`Adding…`:`Add`,Pe;t[83]!==s.isPending||t[84]!==Q||t[85]!==Ne?(Pe=(0,X.jsxs)(_e,{children:[Me,(0,X.jsx)(ge,{disabled:s.isPending,onClick:Q,children:Ne})]}),t[83]=s.isPending,t[84]=Q,t[85]=Ne,t[86]=Pe):Pe=t[86];let $;t[87]!==I||t[88]!==L||t[89]!==Z||t[90]!==Pe?($=(0,X.jsxs)(I,{className:`max-h-[85vh] overflow-y-auto`,children:[L,Z,Pe]}),t[87]=I,t[88]=L,t[89]=Z,t[90]=Pe,t[91]=$):$=t[91];let Ie;return t[92]!==P||t[93]!==o||t[94]!==a||t[95]!==$?(Ie=(0,X.jsx)(P,{onOpenChange:o,open:a,children:$}),t[92]=P,t[93]=o,t[94]=a,t[95]=$,t[96]=Ie):Ie=t[96],Ie}function Le(e,t){return(0,X.jsxs)(`option`,{value:e.addonVersion??``,children:[e.addonVersion,t===0?` (latest)`:``]},e.addonVersion)}function Re(e){return(0,X.jsx)(`option`,{value:e.addonName??``,children:e.addonName},e.addonName)}function ze(e){let t=(0,ke.c)(48),{clusterName:n,addonName:r,current:i,versions:a,open:o,onOpenChange:s}=e,c=L(),[l,u]=(0,Y.useState)(i.addonVersion??``),[d,f]=(0,Y.useState)(i.serviceAccountRoleArn??``),[p,m]=(0,Y.useState)(i.configurationValues??``),[h,g]=(0,Y.useState)(),[_,y]=(0,Y.useState)(o);o!==_&&(y(o),o&&(u(i.addonVersion??``),f(i.serviceAccountRoleArn??``),m(i.configurationValues??``),g(void 0)));let b;t[0]!==r||t[1]!==n||t[2]!==p||t[3]!==s||t[4]!==d||t[5]!==c||t[6]!==l?(b=()=>{let e=P.safeParse(p);if(!e.success){g(e.error.issues[0]?.message??`Configuration must be valid JSON`);return}g(void 0),c.mutate({clusterName:n,addonName:r,addonVersion:l||void 0,serviceAccountRoleArn:d.trim()||void 0,configurationValues:p.trim()||void 0},{onSuccess:()=>{s(!1)}})},t[0]=r,t[1]=n,t[2]=p,t[3]=s,t[4]=d,t[5]=c,t[6]=l,t[7]=b):b=t[7];let x=b,S;t[8]===r?S=t[9]:(S=(0,X.jsx)(ye,{children:(0,X.jsxs)(he,{children:[`Update `,r]})}),t[8]=r,t[9]=S);let C;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`update-addon-version`,children:`Version`})}),t[10]=C):C=t[10];let w=a.length===0,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=e=>{u(e.target.value)},t[11]=T):T=t[11];let E;t[12]===a?E=t[13]:(E=a.map(Be),t[12]=a,t[13]=E);let D;t[14]!==w||t[15]!==E||t[16]!==l?(D=(0,X.jsxs)(K,{children:[C,(0,X.jsx)(`select`,{className:Fe,disabled:w,id:`update-addon-version`,onChange:T,value:l,children:E})]}),t[14]=w,t[15]=E,t[16]=l,t[17]=D):D=t[17];let O;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`update-addon-role`,children:`Service account IAM role ARN`})}),t[18]=O):O=t[18];let k;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(k=e=>{f(e.target.value)},t[19]=k):k=t[19];let A;t[20]===d?A=t[21]:(A=(0,X.jsxs)(K,{children:[O,(0,X.jsx)(v,{id:`update-addon-role`,onChange:k,placeholder:`arn:aws:iam::…:role/…`,value:d})]}),t[20]=d,t[21]=A);let j;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`update-addon-config`,children:`Configuration values (JSON)`})}),t[22]=j):j=t[22];let M=!!h,N;t[23]!==p||t[24]!==M?(N=(0,X.jsxs)(K,{children:[j,(0,X.jsx)(Oe,{error:M,id:`update-addon-config`,onChange:m,rows:4,value:p})]}),t[23]=p,t[24]=M,t[25]=N):N=t[25];let F;t[26]!==A||t[27]!==N||t[28]!==D?(F=(0,X.jsxs)(`div`,{className:`space-y-4`,children:[D,A,N]}),t[26]=A,t[27]=N,t[28]=D,t[29]=F):F=t[29];let I;t[30]===h?I=t[31]:(I=h&&(0,X.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:h}),t[30]=h,t[31]=I);let R;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,X.jsx)(ve,{children:`Cancel`}),t[32]=R):R=t[32];let z;t[33]===x?z=t[34]:(z=e=>{e.preventDefault(),x()},t[33]=x,t[34]=z);let B=c.isPending?`Updating…`:`Update`,V;t[35]!==z||t[36]!==B||t[37]!==c.isPending?(V=(0,X.jsxs)(_e,{children:[R,(0,X.jsx)(ge,{disabled:c.isPending,onClick:z,children:B})]}),t[35]=z,t[36]=B,t[37]=c.isPending,t[38]=V):V=t[38];let H;t[39]!==F||t[40]!==I||t[41]!==V||t[42]!==S?(H=(0,X.jsxs)(me,{className:`max-h-[85vh] overflow-y-auto`,children:[S,F,I,V]}),t[39]=F,t[40]=I,t[41]=V,t[42]=S,t[43]=H):H=t[43];let U;return t[44]!==s||t[45]!==o||t[46]!==H?(U=(0,X.jsx)(be,{onOpenChange:s,open:o,children:H}),t[44]=s,t[45]=o,t[46]=H,t[47]=U):U=t[47],U}function Be(e){return(0,X.jsx)(`option`,{value:e,children:e},e)}function Ve(e){let t=(0,ke.c)(53),{clusterName:n,addonName:r,catalog:a,onDelete:o}=e,s;t[0]!==r||t[1]!==n?(s=ee(n,r),t[0]=r,t[1]=n,t[2]=s):s=t[2];let c;t[3]===s?c=t[4]:(c={...s,refetchInterval:Ue},t[3]=s,t[4]=c);let{data:l}=i(c),[u,f]=(0,Y.useState)(!1),p=l?.addon,m=p?.health?.issues?.[0]?.message,g;t[5]!==r||t[6]!==a?(g=a.find(e=>e.addonName===r)?.addonVersions?.map(He).filter(Boolean)??[],t[5]=r,t[6]=a,t[7]=g):g=t[7];let v=g,y;t[8]===r?y=t[9]:(y=(0,X.jsx)(`span`,{children:r}),t[8]=r,t[9]=y);let b=p?.status,x;t[10]===b?x=t[11]:(x=T(b),t[10]=b,t[11]=x);let S=p?.status??`UNKNOWN`,C;t[12]!==x||t[13]!==S?(C=(0,X.jsx)(oe,{variant:x,children:S}),t[12]=x,t[13]=S,t[14]=C):C=t[14];let w;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(w=()=>{f(!0)},t[15]=w):w=t[15];let E;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,X.jsx)(_,{"aria-label":`Update add-on`,onClick:w,size:`icon`,variant:`ghost`,children:(0,X.jsx)(d,{className:`size-4`})}),t[16]=E):E=t[16];let D;t[17]!==r||t[18]!==o?(D=()=>{o(r)},t[17]=r,t[18]=o,t[19]=D):D=t[19];let O;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,X.jsx)(h,{className:`size-4`}),t[20]=O):O=t[20];let k;t[21]===D?k=t[22]:(k=(0,X.jsx)(_,{"aria-label":`Remove add-on`,onClick:D,size:`icon`,variant:`ghost`,children:O}),t[21]=D,t[22]=k);let A;t[23]!==k||t[24]!==C?(A=(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[C,E,k]}),t[23]=k,t[24]=C,t[25]=A):A=t[25];let j;t[26]!==A||t[27]!==y?(j=(0,X.jsx)(q.Header,{children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[y,A]})}),t[26]=A,t[27]=y,t[28]=j):j=t[28];let M=p?.addonVersion,N;t[29]===M?N=t[30]:(N=(0,X.jsx)(J,{label:`Version`,value:M}),t[29]=M,t[30]=N);let P=p?.serviceAccountRoleArn,F;t[31]===P?F=t[32]:(F=(0,X.jsx)(J,{label:`IRSA role`,value:P}),t[31]=P,t[32]=F);let I;t[33]===m?I=t[34]:(I=m&&(0,X.jsx)(J,{label:`Issue`,value:(0,X.jsx)(`span`,{className:`text-destructive`,children:m})}),t[33]=m,t[34]=I);let L;t[35]!==N||t[36]!==F||t[37]!==I?(L=(0,X.jsxs)(q.Content,{children:[N,F,I]}),t[35]=N,t[36]=F,t[37]=I,t[38]=L):L=t[38];let R=p?.addonVersion,z=p?.serviceAccountRoleArn,B=p?.configurationValues,V;t[39]!==R||t[40]!==z||t[41]!==B?(V={addonVersion:R,serviceAccountRoleArn:z,configurationValues:B},t[39]=R,t[40]=z,t[41]=B,t[42]=V):V=t[42];let H;t[43]!==r||t[44]!==n||t[45]!==u||t[46]!==V||t[47]!==v?(H=(0,X.jsx)(ze,{addonName:r,clusterName:n,current:V,onOpenChange:f,open:u,versions:v}),t[43]=r,t[44]=n,t[45]=u,t[46]=V,t[47]=v,t[48]=H):H=t[48];let U;return t[49]!==j||t[50]!==L||t[51]!==H?(U=(0,X.jsxs)(q,{children:[j,L,H]}),t[49]=j,t[50]=L,t[51]=H,t[52]=U):U=t[52],U}function He(e){return e.addonVersion??``}function Ue(e){return Pe.has(e.state.data?.addon?.status??``)?$:!1}function We(e){let t=(0,ke.c)(31),{clusterName:n}=e,r;t[0]===n?r=t[1]:(r=B(n),t[0]=n,t[1]=r);let{data:o}=a(r),{data:s}=i(V),c=z(),[l,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(),p;t[2]===o.addons?p=t[3]:(p=o.addons??[],t[2]=o.addons,t[3]=p);let m=p,h;t[4]===s?.addons?h=t[5]:(h=s?.addons??[],t[4]=s?.addons,t[5]=h);let g=h,v;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Add-on manifests are staged; activation completes when the cluster reports the workload ready.`}),t[6]=v):v=t[6];let y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,X.jsxs)(`div`,{className:`mb-4 flex items-center justify-between gap-4`,children:[v,(0,X.jsx)(_,{onClick:()=>{u(!0)},size:`sm`,children:`Add add-on`})]}),t[7]=y):y=t[7];let b;t[8]!==m||t[9]!==g||t[10]!==n?(b=m.length>0?(0,X.jsx)(`div`,{className:`space-y-4`,children:m.map(e=>(0,X.jsx)(Ve,{addonName:e,catalog:g,clusterName:n,onDelete:f},e))}):(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`No add-ons installed.`}),t[8]=m,t[9]=g,t[10]=n,t[11]=b):b=t[11];let x;t[12]!==m||t[13]!==g||t[14]!==n||t[15]!==l?(x=(0,X.jsx)(Ie,{catalog:g,clusterName:n,installed:m,onOpenChange:u,open:l}),t[12]=m,t[13]=g,t[14]=n,t[15]=l,t[16]=x):x=t[16];let S=`Remove add-on "${d??``}" from the cluster?`,C;t[17]!==n||t[18]!==c||t[19]!==d?(C=()=>{d&&c.mutate({clusterName:n,addonName:d},{onSuccess:()=>{f(void 0)}})},t[17]=n,t[18]=c,t[19]=d,t[20]=C):C=t[20];let w;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(w=e=>{e||f(void 0)},t[21]=w):w=t[21];let T=d!==void 0,E;t[22]!==c.isPending||t[23]!==T||t[24]!==S||t[25]!==C?(E=(0,X.jsx)(xe,{confirmLabel:`Remove`,description:S,isPending:c.isPending,onConfirm:C,onOpenChange:w,open:T,pendingLabel:`Removing…`,title:`Remove add-on`}),t[22]=c.isPending,t[23]=T,t[24]=S,t[25]=C,t[26]=E):E=t[26];let D;return t[27]!==E||t[28]!==b||t[29]!==x?(D=(0,X.jsxs)(X.Fragment,{children:[y,b,x,E]}),t[27]=E,t[28]=b,t[29]=x,t[30]=D):D=t[30],D}function Ge(e){let t=(0,ke.c)(6),{to:n,id:r}=e,i;t[0]===r?i=t[1]:(i={id:r},t[0]=r,t[1]=i);let a;return t[2]!==r||t[3]!==i||t[4]!==n?(a=(0,X.jsx)(o,{className:`font-mono text-primary underline-offset-2 hover:underline`,params:i,to:n,children:r}),t[2]=r,t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function Ke(e){let t=(0,ke.c)(45),{cluster:n}=e,r=n?.resourcesVpcConfig,i;t[0]===r?.subnetIds?i=t[1]:(i=r?.subnetIds??[],t[0]=r?.subnetIds,t[1]=i);let a=i,o;t[2]===r?.securityGroupIds?o=t[3]:(o=r?.securityGroupIds??[],t[2]=r?.securityGroupIds,t[3]=o);let s=o,c;t[4]===r?.publicAccessCidrs?c=t[5]:(c=r?.publicAccessCidrs??[],t[4]=r?.publicAccessCidrs,t[5]=c);let l=c,u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,X.jsx)(q.Header,{children:`VPC`}),t[6]=u):u=t[6];let d;t[7]===r?d=t[8]:(d=r?.vpcId?(0,X.jsx)(Ge,{id:r.vpcId,to:`/ec2/describe-vpcs/$id`}):void 0,t[7]=r,t[8]=d);let f;t[9]===d?f=t[10]:(f=(0,X.jsx)(J,{label:`VPC`,value:d}),t[9]=d,t[10]=f);let p=n?.endpoint,m;t[11]===p?m=t[12]:(m=(0,X.jsx)(J,{label:`API server endpoint`,value:p}),t[11]=p,t[12]=m);let h=r?.endpointPublicAccess?`Enabled`:`Disabled`,g;t[13]===h?g=t[14]:(g=(0,X.jsx)(J,{label:`Public access`,value:h}),t[13]=h,t[14]=g);let _=r?.endpointPrivateAccess?`Enabled`:`Disabled`,v;t[15]===_?v=t[16]:(v=(0,X.jsx)(J,{label:`Private access`,value:_}),t[15]=_,t[16]=v);let y;t[17]!==l||t[18]!==r?.endpointPublicAccess?(y=r?.endpointPublicAccess&&(0,X.jsx)(J,{label:`Public access CIDRs`,value:l.length>0?(0,X.jsx)(`div`,{className:`space-y-1 font-mono text-xs`,children:l.map(Ye)}):`Any (0.0.0.0/0)`}),t[17]=l,t[18]=r?.endpointPublicAccess,t[19]=y):y=t[19];let b;t[20]!==g||t[21]!==v||t[22]!==y||t[23]!==f||t[24]!==m?(b=(0,X.jsxs)(q,{children:[u,(0,X.jsxs)(q.Content,{children:[f,m,g,v,y]})]}),t[20]=g,t[21]=v,t[22]=y,t[23]=f,t[24]=m,t[25]=b):b=t[25];let x;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,X.jsx)(q.Header,{children:`Subnets`}),t[26]=x):x=t[26];let S;t[27]===a?S=t[28]:(S=(0,X.jsxs)(q,{children:[x,(0,X.jsx)(q.Content,{children:a.length>0?(0,X.jsx)(`div`,{className:`space-y-1`,children:a.map(Je)}):(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`No subnets.`})})]}),t[27]=a,t[28]=S);let C;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,X.jsx)(q.Header,{children:`Security groups`}),t[29]=C):C=t[29];let w;t[30]===r?w=t[31]:(w=r?.clusterSecurityGroupId?(0,X.jsx)(Ge,{id:r.clusterSecurityGroupId,to:`/ec2/describe-security-groups/$id`}):void 0,t[30]=r,t[31]=w);let T;t[32]===w?T=t[33]:(T=(0,X.jsx)(J,{label:`Cluster security group`,value:w}),t[32]=w,t[33]=T);let E;t[34]===s?E=t[35]:(E=s.length>0?(0,X.jsx)(`div`,{className:`space-y-1`,children:s.map(qe)}):`—`,t[34]=s,t[35]=E);let D;t[36]===E?D=t[37]:(D=(0,X.jsx)(J,{label:`Additional security groups`,value:E}),t[36]=E,t[37]=D);let O;t[38]!==T||t[39]!==D?(O=(0,X.jsxs)(q,{children:[C,(0,X.jsxs)(q.Content,{children:[T,D]})]}),t[38]=T,t[39]=D,t[40]=O):O=t[40];let k;return t[41]!==b||t[42]!==S||t[43]!==O?(k=(0,X.jsxs)(X.Fragment,{children:[b,S,O]}),t[41]=b,t[42]=S,t[43]=O,t[44]=k):k=t[44],k}function qe(e){return(0,X.jsx)(Ge,{id:e,to:`/ec2/describe-security-groups/$id`},e)}function Je(e){return(0,X.jsx)(Ge,{id:e,to:`/ec2/describe-subnets/$id`},e)}function Ye(e){return(0,X.jsx)(`div`,{children:e},e)}function Xe(e){return!!e&&(e.endsWith(`_GPU`)||e.endsWith(`_NVIDIA`))}function Ze(e,t){let n=t.find(t=>t.InstanceType===e);return!!n&&Se(n)}function Qe(e){let t=(0,ke.c)(44),{clusterName:n,nodegroupName:r,current:i,open:a,onOpenChange:o}=e,s=x(),[c,l]=(0,Y.useState)(i.minSize??0),[u,d]=(0,Y.useState)(i.desiredSize??0),[f,p]=(0,Y.useState)(i.maxSize??0),[m,h]=(0,Y.useState)(),[g,_]=(0,Y.useState)(a);a!==g&&(_(a),a&&(l(i.minSize??0),d(i.desiredSize??0),p(i.maxSize??0),h(void 0)));let y;t[0]!==n||t[1]!==u||t[2]!==f||t[3]!==c||t[4]!==r||t[5]!==o||t[6]!==s?(y=()=>{if(!(c<=u&&u<=f)){h(`Sizes must satisfy min ≤ desired ≤ max`);return}s.mutate({clusterName:n,nodegroupName:r,minSize:c,desiredSize:u,maxSize:f},{onSuccess:()=>{o(!1)}})},t[0]=n,t[1]=u,t[2]=f,t[3]=c,t[4]=r,t[5]=o,t[6]=s,t[7]=y):y=t[7];let b=y,S;t[8]===r?S=t[9]:(S=(0,X.jsx)(ye,{children:(0,X.jsxs)(he,{children:[`Scale `,r]})}),t[8]=r,t[9]=S);let C;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`scale-min`,children:`Min`})}),t[10]=C):C=t[10];let w;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(w=e=>{l(Number(e.target.value))},t[11]=w):w=t[11];let T;t[12]===c?T=t[13]:(T=(0,X.jsxs)(K,{children:[C,(0,X.jsx)(v,{id:`scale-min`,onChange:w,type:`number`,value:c})]}),t[12]=c,t[13]=T);let E;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`scale-desired`,children:`Desired`})}),t[14]=E):E=t[14];let D;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(D=e=>{d(Number(e.target.value))},t[15]=D):D=t[15];let O;t[16]===u?O=t[17]:(O=(0,X.jsxs)(K,{children:[E,(0,X.jsx)(v,{id:`scale-desired`,onChange:D,type:`number`,value:u})]}),t[16]=u,t[17]=O);let k;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`scale-max`,children:`Max`})}),t[18]=k):k=t[18];let A;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(A=e=>{p(Number(e.target.value))},t[19]=A):A=t[19];let j;t[20]===f?j=t[21]:(j=(0,X.jsxs)(K,{children:[k,(0,X.jsx)(v,{id:`scale-max`,onChange:A,type:`number`,value:f})]}),t[20]=f,t[21]=j);let M;t[22]!==j||t[23]!==T||t[24]!==O?(M=(0,X.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[T,O,j]}),t[22]=j,t[23]=T,t[24]=O,t[25]=M):M=t[25];let N;t[26]===m?N=t[27]:(N=m&&(0,X.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:m}),t[26]=m,t[27]=N);let P;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,X.jsx)(ve,{children:`Cancel`}),t[28]=P):P=t[28];let F;t[29]===b?F=t[30]:(F=e=>{e.preventDefault(),b()},t[29]=b,t[30]=F);let I=s.isPending?`Scaling…`:`Scale`,L;t[31]!==s.isPending||t[32]!==F||t[33]!==I?(L=(0,X.jsxs)(_e,{children:[P,(0,X.jsx)(ge,{disabled:s.isPending,onClick:F,children:I})]}),t[31]=s.isPending,t[32]=F,t[33]=I,t[34]=L):L=t[34];let R;t[35]!==M||t[36]!==N||t[37]!==L||t[38]!==S?(R=(0,X.jsxs)(me,{children:[S,M,N,L]}),t[35]=M,t[36]=N,t[37]=L,t[38]=S,t[39]=R):R=t[39];let z;return t[40]!==o||t[41]!==a||t[42]!==R?(z=(0,X.jsx)(be,{onOpenChange:o,open:a,children:R}),t[40]=o,t[41]=a,t[42]=R,t[43]=z):z=t[43],z}function $e(e){let t=(0,ke.c)(55),{clusterName:n,clusterVersion:r,nodegroupName:a,onDelete:o}=e,s;t[0]!==n||t[1]!==a?(s=H(n,a),t[0]=n,t[1]=a,t[2]=s):s=t[2];let{data:c}=i(s),l=c?.nodegroup,u=l?.scalingConfig,[d,p]=(0,Y.useState)(!1),m=!!r&&!!l?.version&&l.version!==r,g=l?.amiType,v;t[3]===g?v=t[4]:(v=Xe(g),t[3]=g,t[4]=v);let y=v,b;t[5]===a?b=t[6]:(b=(0,X.jsx)(`span`,{children:a}),t[5]=a,t[6]=b);let x;t[7]===y?x=t[8]:(x=y&&(0,X.jsx)(oe,{variant:`secondary`,children:`GPU`}),t[7]=y,t[8]=x);let S;t[9]!==b||t[10]!==x?(S=(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[b,x]}),t[9]=b,t[10]=x,t[11]=S):S=t[11];let C;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(C=()=>{p(!0)},t[12]=C):C=t[12];let w;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,X.jsx)(_,{"aria-label":`Scale node group`,onClick:C,size:`icon`,variant:`ghost`,children:(0,X.jsx)(f,{className:`size-4`})}),t[13]=w):w=t[13];let T;t[14]!==a||t[15]!==o?(T=()=>{o(a)},t[14]=a,t[15]=o,t[16]=T):T=t[16];let E;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,X.jsx)(h,{className:`size-4`}),t[17]=E):E=t[17];let D;t[18]===T?D=t[19]:(D=(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[w,(0,X.jsx)(_,{"aria-label":`Delete node group`,onClick:T,size:`icon`,variant:`ghost`,children:E})]}),t[18]=T,t[19]=D);let O;t[20]!==D||t[21]!==S?(O=(0,X.jsx)(q.Header,{children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[S,D]})}),t[20]=D,t[21]=S,t[22]=O):O=t[22];let k=l?.status,A;t[23]===k?A=t[24]:(A=(0,X.jsx)(J,{label:`Status`,value:k}),t[23]=k,t[24]=A);let j=m?`${l?.version} (cluster on ${r})`:l?.version,M;t[25]===j?M=t[26]:(M=(0,X.jsx)(J,{label:`Kubernetes version`,value:j}),t[25]=j,t[26]=M);let N;t[27]===l?.instanceTypes?N=t[28]:(N=l?.instanceTypes?.join(`, `),t[27]=l?.instanceTypes,t[28]=N);let P;t[29]===N?P=t[30]:(P=(0,X.jsx)(J,{label:`Instance types`,value:N}),t[29]=N,t[30]=P);let F=l?.amiType,I;t[31]===F?I=t[32]:(I=(0,X.jsx)(J,{label:`AMI type`,value:F}),t[31]=F,t[32]=I);let L=l?.capacityType,R;t[33]===L?R=t[34]:(R=(0,X.jsx)(J,{label:`Capacity type`,value:L}),t[33]=L,t[34]=R);let z=u?`${u.minSize} / ${u.desiredSize} / ${u.maxSize}`:void 0,B;t[35]===z?B=t[36]:(B=(0,X.jsx)(J,{label:`Scaling (min / desired / max)`,value:z}),t[35]=z,t[36]=B);let V;t[37]!==A||t[38]!==M||t[39]!==P||t[40]!==I||t[41]!==R||t[42]!==B?(V=(0,X.jsxs)(q.Content,{children:[A,M,P,I,R,B]}),t[37]=A,t[38]=M,t[39]=P,t[40]=I,t[41]=R,t[42]=B,t[43]=V):V=t[43];let U;t[44]===u?U=t[45]:(U=u??{},t[44]=u,t[45]=U);let W;t[46]!==n||t[47]!==a||t[48]!==d||t[49]!==U?(W=(0,X.jsx)(Qe,{clusterName:n,current:U,nodegroupName:a,onOpenChange:p,open:d}),t[46]=n,t[47]=a,t[48]=d,t[49]=U,t[50]=W):W=t[50];let ee;return t[51]!==O||t[52]!==V||t[53]!==W?(ee=(0,X.jsxs)(q,{children:[O,V,W]}),t[51]=O,t[52]=V,t[53]=W,t[54]=ee):ee=t[54],ee}function et(e){let t=(0,ke.c)(145),{clusterName:n,vpcId:r,open:a,onOpenChange:o}=e,{data:s}=i(ie),{data:c}=i(y),{data:l}=i(b),u=C(),d;t[0]===s?.Roles?d=t[1]:(d=s?.Roles??[],t[0]=s?.Roles,t[1]=d);let f=d,p;t[2]===c?.Subnets?p=t[3]:(p=c?.Subnets??[],t[2]=c?.Subnets,t[3]=p);let m;t[4]===r?m=t[5]:(m=e=>e.VpcId===r,t[4]=r,t[5]=m);let h=p.filter(m),g;t[6]===l?.InstanceTypes?g=t[7]:(g=l?.InstanceTypes??[],t[6]=l?.InstanceTypes,t[7]=g);let _=g,x;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(x=ue(E),t[8]=x):x=t[8];let S;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:x,defaultValues:{nodegroupName:``,nodeRole:``,subnetIds:[],instanceTypes:`t3.medium`,amiType:`AL2_x86_64`,capacityType:`ON_DEMAND`,diskSize:20,minSize:1,desiredSize:2,maxSize:3}},t[9]=S):S=t[9];let{control:w,formState:T,handleSubmit:D,register:k,reset:A,setValue:j}=ce(S),{errors:M}=T,P;t[10]===w?P=t[11]:(P={control:w,name:`subnetIds`},t[10]=w,t[11]=P);let F=se(P),I;t[12]===F?I=t[13]:(I=new Set(F),t[12]=F,t[13]=I);let L=I,R;t[14]===w?R=t[15]:(R={control:w,name:`instanceTypes`},t[14]=w,t[15]=R);let z=se(R),B;t[16]!==_||t[17]!==z?(B=Ze(z,_),t[16]=_,t[17]=z,t[18]=B):B=t[18];let V=B,H;t[19]!==F||t[20]!==j?(H=e=>{let t=F.includes(e)?F.filter(t=>t!==e):[...F,e];j(`subnetIds`,t,{shouldValidate:!0})},t[19]=F,t[20]=j,t[21]=H):H=t[21];let U=H,W;t[22]!==n||t[23]!==u||t[24]!==o||t[25]!==A?(W=async e=>{await u.mutateAsync({clusterName:n,nodegroupName:e.nodegroupName,nodeRole:e.nodeRole,subnetIds:e.subnetIds,instanceTypes:e.instanceTypes.split(`,`).map(it).filter(Boolean),amiType:e.amiType,capacityType:e.capacityType,diskSize:e.diskSize,minSize:e.minSize,desiredSize:e.desiredSize,maxSize:e.maxSize}),A(),o(!1)},t[22]=n,t[23]=u,t[24]=o,t[25]=A,t[26]=W):W=t[26];let ee=W,te=be,ne=me,re;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(re=(0,X.jsx)(ye,{children:(0,X.jsx)(he,{children:`Add node group`})}),t[27]=re):re=t[27];let ae;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-name`,children:`Name`})}),t[28]=ae):ae=t[28];let oe=!!M.nodegroupName,de;t[29]===k?de=t[30]:(de=k(`nodegroupName`),t[29]=k,t[30]=de);let xe;t[31]!==oe||t[32]!==de?(xe=(0,X.jsx)(v,{"aria-invalid":oe,id:`ng-name`,placeholder:`my-nodegroup`,...de}),t[31]=oe,t[32]=de,t[33]=xe):xe=t[33];let q;t[34]===M.nodegroupName?q=t[35]:(q=(0,X.jsx)(pe,{errors:[M.nodegroupName]}),t[34]=M.nodegroupName,t[35]=q);let J;t[36]!==xe||t[37]!==q?(J=(0,X.jsxs)(K,{children:[ae,xe,q]}),t[36]=xe,t[37]=q,t[38]=J):J=t[38];let Se;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-role`,children:`Node IAM role`})}),t[39]=Se):Se=t[39];let we=!!M.nodeRole,Te;t[40]===k?Te=t[41]:(Te=k(`nodeRole`),t[40]=k,t[41]=Te);let Ee;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,X.jsx)(`option`,{value:``,children:`Select role`}),t[42]=Ee):Ee=t[42];let De;t[43]===f?De=t[44]:(De=f.map(rt),t[43]=f,t[44]=De);let Oe;t[45]!==we||t[46]!==Te||t[47]!==De?(Oe=(0,X.jsxs)(`select`,{"aria-invalid":we,className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-role`,...Te,children:[Ee,De]}),t[45]=we,t[46]=Te,t[47]=De,t[48]=Oe):Oe=t[48];let Y;t[49]===M.nodeRole?Y=t[50]:(Y=(0,X.jsx)(pe,{errors:[M.nodeRole]}),t[49]=M.nodeRole,t[50]=Y);let Ae;t[51]!==Oe||t[52]!==Y?(Ae=(0,X.jsxs)(K,{children:[Se,Oe,Y]}),t[51]=Oe,t[52]=Y,t[53]=Ae):Ae=t[53];let je=K,Z;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(Z=(0,X.jsx)(G,{children:`Subnets`}),t[54]=Z):Z=t[54];let Me=h.length===0?(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the cluster VPC.`}):(0,X.jsx)(`div`,{className:`space-y-1`,children:h.map(e=>(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{"aria-label":`Subnet ${e.SubnetId}`,checked:L.has(e.SubnetId??``),onChange:()=>{U(e.SubnetId??``)},type:`checkbox`}),(0,X.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` · `,e.CidrBlock]})]},e.SubnetId))}),Q;t[55]===M.subnetIds?Q=t[56]:(Q=(0,X.jsx)(pe,{errors:[M.subnetIds]}),t[55]=M.subnetIds,t[56]=Q);let Ne;t[57]!==je||t[58]!==Z||t[59]!==Me||t[60]!==Q?(Ne=(0,X.jsxs)(je,{children:[Z,Me,Q]}),t[57]=je,t[58]=Z,t[59]=Me,t[60]=Q,t[61]=Ne):Ne=t[61];let Pe;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(Pe=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-instance-type`,children:`Instance type`})}),t[62]=Pe):Pe=t[62];let $;t[63]!==M.instanceTypes||t[64]!==_?($=e=>{let{field:t}=e;return(0,X.jsx)(Ce,{"aria-invalid":!!M.instanceTypes,id:`ng-instance-type`,instanceTypes:_,onValueChange:t.onChange,value:t.value})},t[63]=M.instanceTypes,t[64]=_,t[65]=$):$=t[65];let Fe;t[66]!==w||t[67]!==$?(Fe=(0,X.jsx)(le,{control:w,name:`instanceTypes`,render:$}),t[66]=w,t[67]=$,t[68]=Fe):Fe=t[68];let Ie;t[69]===V?Ie=t[70]:(Ie=V&&(0,X.jsxs)(fe,{children:[`GPU node AMI is auto-selected for this instance type. This node group is tainted `,(0,X.jsx)(`code`,{children:`nvidia.com/gpu=present:NoSchedule`}),` `,`by default, so ordinary pods won't schedule onto GPU workers.`]}),t[69]=V,t[70]=Ie);let Le;t[71]===M.instanceTypes?Le=t[72]:(Le=(0,X.jsx)(pe,{errors:[M.instanceTypes]}),t[71]=M.instanceTypes,t[72]=Le);let Re;t[73]!==Fe||t[74]!==Ie||t[75]!==Le?(Re=(0,X.jsxs)(K,{children:[Pe,Fe,Ie,Le]}),t[73]=Fe,t[74]=Ie,t[75]=Le,t[76]=Re):Re=t[76];let ze;t[77]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-ami`,children:`AMI type`})}),t[77]=ze):ze=t[77];let Be;t[78]===k?Be=t[79]:(Be=k(`amiType`),t[78]=k,t[79]=Be);let Ve;t[80]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=N.map(nt),t[80]=Ve):Ve=t[80];let He;t[81]===Be?He=t[82]:(He=(0,X.jsxs)(K,{children:[ze,(0,X.jsx)(`select`,{className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-ami`,...Be,children:Ve})]}),t[81]=Be,t[82]=He);let Ue;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-capacity`,children:`Capacity type`})}),t[83]=Ue):Ue=t[83];let We;t[84]===k?We=t[85]:(We=k(`capacityType`),t[84]=k,t[85]=We);let Ge;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(Ge=O.map(tt),t[86]=Ge):Ge=t[86];let Ke;t[87]===We?Ke=t[88]:(Ke=(0,X.jsxs)(K,{children:[Ue,(0,X.jsx)(`select`,{className:`h-7 w-full rounded-md border border-input bg-input/20 px-2 text-sm`,id:`ng-capacity`,...We,children:Ge})]}),t[87]=We,t[88]=Ke);let qe;t[89]!==He||t[90]!==Ke?(qe=(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[He,Ke]}),t[89]=He,t[90]=Ke,t[91]=qe):qe=t[91];let Je;t[92]===Symbol.for(`react.memo_cache_sentinel`)?(Je=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-disk`,children:`Disk (GB)`})}),t[92]=Je):Je=t[92];let Ye;t[93]===k?Ye=t[94]:(Ye=k(`diskSize`,{valueAsNumber:!0}),t[93]=k,t[94]=Ye);let Xe;t[95]===Ye?Xe=t[96]:(Xe=(0,X.jsxs)(K,{children:[Je,(0,X.jsx)(v,{id:`ng-disk`,type:`number`,...Ye})]}),t[95]=Ye,t[96]=Xe);let Qe;t[97]===Symbol.for(`react.memo_cache_sentinel`)?(Qe=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-min`,children:`Min`})}),t[97]=Qe):Qe=t[97];let $e;t[98]===k?$e=t[99]:($e=k(`minSize`,{valueAsNumber:!0}),t[98]=k,t[99]=$e);let et;t[100]===$e?et=t[101]:(et=(0,X.jsxs)(K,{children:[Qe,(0,X.jsx)(v,{id:`ng-min`,type:`number`,...$e})]}),t[100]=$e,t[101]=et);let at;t[102]===Symbol.for(`react.memo_cache_sentinel`)?(at=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-desired`,children:`Desired`})}),t[102]=at):at=t[102];let ot;t[103]===k?ot=t[104]:(ot=k(`desiredSize`,{valueAsNumber:!0}),t[103]=k,t[104]=ot);let st;t[105]===ot?st=t[106]:(st=(0,X.jsxs)(K,{children:[at,(0,X.jsx)(v,{id:`ng-desired`,type:`number`,...ot})]}),t[105]=ot,t[106]=st);let ct;t[107]===Symbol.for(`react.memo_cache_sentinel`)?(ct=(0,X.jsx)(G,{children:(0,X.jsx)(`label`,{htmlFor:`ng-max`,children:`Max`})}),t[107]=ct):ct=t[107];let lt;t[108]===k?lt=t[109]:(lt=k(`maxSize`,{valueAsNumber:!0}),t[108]=k,t[109]=lt);let ut;t[110]===lt?ut=t[111]:(ut=(0,X.jsxs)(K,{children:[ct,(0,X.jsx)(v,{id:`ng-max`,type:`number`,...lt})]}),t[110]=lt,t[111]=ut);let dt;t[112]!==Xe||t[113]!==et||t[114]!==st||t[115]!==ut?(dt=(0,X.jsxs)(`div`,{className:`grid grid-cols-4 gap-3`,children:[Xe,et,st,ut]}),t[112]=Xe,t[113]=et,t[114]=st,t[115]=ut,t[116]=dt):dt=t[116];let ft;t[117]===M.desiredSize?ft=t[118]:(ft=(0,X.jsx)(pe,{errors:[M.desiredSize]}),t[117]=M.desiredSize,t[118]=ft);let pt;t[119]!==J||t[120]!==Ae||t[121]!==Ne||t[122]!==Re||t[123]!==qe||t[124]!==dt||t[125]!==ft?(pt=(0,X.jsxs)(`form`,{className:`space-y-4`,id:`add-nodegroup-form`,children:[J,Ae,Ne,Re,qe,dt,ft]}),t[119]=J,t[120]=Ae,t[121]=Ne,t[122]=Re,t[123]=qe,t[124]=dt,t[125]=ft,t[126]=pt):pt=t[126];let mt;t[127]===Symbol.for(`react.memo_cache_sentinel`)?(mt=(0,X.jsx)(ve,{children:`Cancel`}),t[127]=mt):mt=t[127];let ht;t[128]!==D||t[129]!==ee?(ht=e=>{e.preventDefault(),D(ee)()},t[128]=D,t[129]=ee,t[130]=ht):ht=t[130];let gt=u.isPending?`Creating…`:`Create`,_t;t[131]!==u.isPending||t[132]!==ht||t[133]!==gt?(_t=(0,X.jsxs)(_e,{children:[mt,(0,X.jsx)(ge,{disabled:u.isPending,onClick:ht,children:gt})]}),t[131]=u.isPending,t[132]=ht,t[133]=gt,t[134]=_t):_t=t[134];let vt;t[135]!==ne||t[136]!==re||t[137]!==pt||t[138]!==_t?(vt=(0,X.jsxs)(ne,{className:`max-h-[85vh] overflow-y-auto`,children:[re,pt,_t]}),t[135]=ne,t[136]=re,t[137]=pt,t[138]=_t,t[139]=vt):vt=t[139];let yt;return t[140]!==te||t[141]!==o||t[142]!==a||t[143]!==vt?(yt=(0,X.jsx)(te,{onOpenChange:o,open:a,children:vt}),t[140]=te,t[141]=o,t[142]=a,t[143]=vt,t[144]=yt):yt=t[144],yt}function tt(e){return(0,X.jsx)(`option`,{value:e,children:e},e)}function nt(e){return(0,X.jsx)(`option`,{value:e,children:e},e)}function rt(e){return(0,X.jsx)(`option`,{value:e.Arn??``,children:e.RoleName},e.Arn)}function it(e){return e.trim()}function at(e){let t=(0,ke.c)(27),{clusterName:n,clusterVersion:r,vpcId:i}=e,o;t[0]===n?o=t[1]:(o=re(n),t[0]=n,t[1]=o);let{data:s}=a(o),c=R(),[l,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(),p;t[2]===s.nodegroups?p=t[3]:(p=s.nodegroups??[],t[2]=s.nodegroups,t[3]=p);let m=p,h;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,X.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,X.jsx)(_,{onClick:()=>{u(!0)},size:`sm`,children:`Add node group`})}),t[4]=h):h=t[4];let g;t[5]!==n||t[6]!==r||t[7]!==m?(g=m.length>0?(0,X.jsx)(`div`,{className:`space-y-4`,children:m.map(e=>(0,X.jsx)($e,{clusterName:n,clusterVersion:r,nodegroupName:e,onDelete:f},e))}):(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`No node groups.`}),t[5]=n,t[6]=r,t[7]=m,t[8]=g):g=t[8];let v;t[9]!==n||t[10]!==l||t[11]!==i?(v=(0,X.jsx)(et,{clusterName:n,onOpenChange:u,open:l,vpcId:i}),t[9]=n,t[10]=l,t[11]=i,t[12]=v):v=t[12];let y=`Delete node group "${d??``}"? This terminates its nodes.`,b;t[13]!==n||t[14]!==c||t[15]!==d?(b=()=>{d&&c.mutate({clusterName:n,nodegroupName:d},{onSuccess:()=>{f(void 0)}})},t[13]=n,t[14]=c,t[15]=d,t[16]=b):b=t[16];let x;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(x=e=>{e||f(void 0)},t[17]=x):x=t[17];let S=d!==void 0,C;t[18]!==c.isPending||t[19]!==y||t[20]!==b||t[21]!==S?(C=(0,X.jsx)(xe,{description:y,isPending:c.isPending,onConfirm:b,onOpenChange:x,open:S,title:`Delete node group`}),t[18]=c.isPending,t[19]=y,t[20]=b,t[21]=S,t[22]=C):C=t[22];let w;return t[23]!==C||t[24]!==g||t[25]!==v?(w=(0,X.jsxs)(X.Fragment,{children:[h,g,v,C]}),t[23]=C,t[24]=g,t[25]=v,t[26]=w):w=t[26],w}function ot(e){switch(e??``){case`ACTIVE`:return`default`;case`FAILED`:return`destructive`;default:return`secondary`}}function st(e){let t=(0,ke.c)(101),{clusterName:n}=e,r=s(),[i,o]=(0,Y.useState)(!1),d;t[0]===n?d=t[1]:(d=te(n),t[0]=n,t[1]=d);let{data:f}=a(d),p=w(),{cluster:v}=f,y;t[2]===v?.health?.issues?y=t[3]:(y=v?.health?.issues??[],t[2]=v?.health?.issues,t[3]=y);let b=y,x;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(x={type:`bin`,value:`aws eks update-kubeconfig`},t[4]=x):x=t[4];let S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S={type:`flag`,value:` --name `},t[5]=S):S=t[5];let C;t[6]===n?C=t[7]:(C={type:`value`,value:n},t[6]=n,t[7]=C);let T;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(T={type:`flag`,value:` --region `},t[8]=T):T=t[8];let E;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(E={type:`value`,value:l()},t[9]=E):E=t[9];let D;t[10]===C?D=t[11]:(D={label:`Configure kubectl`,parts:[x,S,C,T,E]},t[10]=C,t[11]=D);let O;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(O={label:`Verify access`,parts:[{type:`bin`,value:`kubectl get nodes`}]},t[12]=O):O=t[12];let k;t[13]===D?k=t[14]:(k=[D,O],t[13]=D,t[14]=k);let A=k,j;t[15]!==n||t[16]!==p||t[17]!==r?(j=function(){p.mutate(n,{onSuccess:()=>{r({to:`/eks/list-clusters`})}})},t[15]=n,t[16]=p,t[17]=r,t[18]=j):j=t[18];let M=j,N;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,X.jsx)(u,{to:`/eks/list-clusters`,children:`Clusters`}),t[19]=N):N=t[19];let P;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(P=()=>{o(!0)},t[20]=P):P=t[20];let F;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,X.jsxs)(_,{onClick:P,size:`sm`,variant:`destructive`,children:[(0,X.jsx)(h,{className:`size-4`}),`Delete`]}),t[21]=F):F=t[21];let I=v?.status,L;t[22]===I?L=t[23]:(L=ot(I),t[22]=I,t[23]=L);let R=v?.status??`UNKNOWN`,z;t[24]!==L||t[25]!==R?(z=(0,X.jsx)(oe,{variant:L,children:R}),t[24]=L,t[25]=R,t[26]=z):z=t[26];let B;t[27]===b.length?B=t[28]:(B=b.length>0&&(0,X.jsxs)(oe,{variant:`destructive`,children:[(0,X.jsx)(g,{className:`size-3`}),b.length===1?`1 health issue`:`${b.length} health issues`]}),t[27]=b.length,t[28]=B);let V;t[29]!==z||t[30]!==B?(V=(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[F,z,B]}),t[29]=z,t[30]=B,t[31]=V):V=t[31];let H;t[32]!==n||t[33]!==V?(H=(0,X.jsx)(ae,{actions:V,subtitle:`Cluster Details`,title:n}),t[32]=n,t[33]=V,t[34]=H):H=t[34];let U;t[35]!==p.error||t[36]!==p.isError?(U=p.isError&&(0,X.jsx)(de,{error:p.error instanceof Error?p.error:void 0,msg:`Failed to delete cluster.`}),t[35]=p.error,t[36]=p.isError,t[37]=U):U=t[37];let W;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,X.jsxs)(Te,{children:[(0,X.jsx)(we,{value:`overview`,children:`Overview`}),(0,X.jsx)(we,{value:`compute`,children:`Compute`}),(0,X.jsx)(we,{value:`addons`,children:`Add-ons`}),(0,X.jsx)(we,{value:`access`,children:`Access`}),(0,X.jsx)(we,{value:`networking`,children:`Networking`}),(0,X.jsx)(we,{value:`connect`,children:`Connect`})]}),t[38]=W):W=t[38];let ee;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(ee=(0,X.jsx)(q.Header,{children:`Cluster`}),t[39]=ee):ee=t[39];let ne=v?.arn,re;t[40]===ne?re=t[41]:(re=(0,X.jsx)(J,{label:`ARN`,value:ne}),t[40]=ne,t[41]=re);let ie=v?.status,se;t[42]===ie?se=t[43]:(se=(0,X.jsx)(J,{label:`Status`,value:ie}),t[42]=ie,t[43]=se);let ce;t[44]===b?ce=t[45]:(ce=b.length>0?b.map(ct).filter(Boolean).join(`; `):`OK`,t[44]=b,t[45]=ce);let le;t[46]===ce?le=t[47]:(le=(0,X.jsx)(J,{label:`Health`,value:ce}),t[46]=ce,t[47]=le);let ue=v?.version,fe;t[48]===ue?fe=t[49]:(fe=(0,X.jsx)(J,{label:`Kubernetes version`,value:ue}),t[48]=ue,t[49]=fe);let pe=v?.platformVersion,G;t[50]===pe?G=t[51]:(G=(0,X.jsx)(J,{label:`Platform version`,value:pe}),t[50]=pe,t[51]=G);let K=v?.endpoint,me;t[52]===K?me=t[53]:(me=(0,X.jsx)(J,{label:`Endpoint`,value:K}),t[52]=K,t[53]=me);let he=v?.identity?.oidc?.issuer,ge;t[54]===he?ge=t[55]:(ge=(0,X.jsx)(J,{label:`OIDC issuer`,value:he}),t[54]=he,t[55]=ge);let _e=v?.resourcesVpcConfig?.vpcId,ve;t[56]===_e?ve=t[57]:(ve=(0,X.jsx)(J,{label:`VPC`,value:_e}),t[56]=_e,t[57]=ve);let ye=v?.createdAt,be;t[58]===ye?be=t[59]:(be=c(ye),t[58]=ye,t[59]=be);let Se;t[60]===be?Se=t[61]:(Se=(0,X.jsx)(J,{label:`Created at`,value:be}),t[60]=be,t[61]=Se);let Ce;t[62]!==re||t[63]!==se||t[64]!==le||t[65]!==fe||t[66]!==G||t[67]!==me||t[68]!==ge||t[69]!==ve||t[70]!==Se?(Ce=(0,X.jsx)(Ee,{value:`overview`,children:(0,X.jsxs)(q,{children:[ee,(0,X.jsxs)(q.Content,{children:[re,se,le,fe,G,me,ge,ve,Se]})]})}),t[62]=re,t[63]=se,t[64]=le,t[65]=fe,t[66]=G,t[67]=me,t[68]=ge,t[69]=ve,t[70]=Se,t[71]=Ce):Ce=t[71];let Oe=v?.version,Ae=v?.resourcesVpcConfig?.vpcId,je;t[72]!==n||t[73]!==Oe||t[74]!==Ae?(je=(0,X.jsx)(Ee,{value:`compute`,children:(0,X.jsx)(at,{clusterName:n,clusterVersion:Oe,vpcId:Ae})}),t[72]=n,t[73]=Oe,t[74]=Ae,t[75]=je):je=t[75];let Z;t[76]===n?Z=t[77]:(Z=(0,X.jsx)(Ee,{value:`addons`,children:(0,X.jsx)(We,{clusterName:n})}),t[76]=n,t[77]=Z);let Me;t[78]===n?Me=t[79]:(Me=(0,X.jsx)(Ee,{value:`access`,children:(0,X.jsx)(Ne,{clusterName:n})}),t[78]=n,t[79]=Me);let Q;t[80]===v?Q=t[81]:(Q=(0,X.jsx)(Ee,{value:`networking`,children:(0,X.jsx)(Ke,{cluster:v})}),t[80]=v,t[81]=Q);let Pe;t[82]===A?Pe=t[83]:(Pe=(0,X.jsx)(Ee,{value:`connect`,children:(0,X.jsx)(m,{commands:A})}),t[82]=A,t[83]=Pe);let $;t[84]!==Ce||t[85]!==je||t[86]!==Z||t[87]!==Me||t[88]!==Q||t[89]!==Pe?($=(0,X.jsxs)(De,{defaultValue:`overview`,children:[W,Ce,je,Z,Me,Q,Pe]}),t[84]=Ce,t[85]=je,t[86]=Z,t[87]=Me,t[88]=Q,t[89]=Pe,t[90]=$):$=t[90];let Fe=`This permanently deletes cluster "${n}" and its control plane. This cannot be undone.`,Ie;t[91]!==p.isPending||t[92]!==M||t[93]!==i||t[94]!==Fe?(Ie=(0,X.jsx)(xe,{description:Fe,isPending:p.isPending,onConfirm:M,onOpenChange:o,open:i,title:`Delete cluster`}),t[91]=p.isPending,t[92]=M,t[93]=i,t[94]=Fe,t[95]=Ie):Ie=t[95];let Le;return t[96]!==H||t[97]!==U||t[98]!==$||t[99]!==Ie?(Le=(0,X.jsxs)(X.Fragment,{children:[N,H,U,$,Ie]}),t[96]=H,t[97]=U,t[98]=$,t[99]=Ie,t[100]=Le):Le=t[100],Le}function ct(e){return e.message}function lt(){let e=(0,ke.c)(2),{clusterName:t}=p.useParams(),n;return e[0]===t?n=e[1]:(n=(0,X.jsx)(st,{clusterName:t}),e[0]=t,e[1]=n),n}export{lt as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DRa210J1.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DRa210J1.js new file mode 100644 index 000000000..589d1a9bb --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DRa210J1.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_clusterName-B64Oml-i.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ecs-BmKTMTV2.js","assets/ecs-Bz1Yh-WL.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-C_pG4AOx.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/gpu-instance-type-select-DMxBayBV.js","assets/select-Cn66OoPn.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/tabs-BMSqRmVw.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{i as r,s as i,t as a}from"./ecs-BmKTMTV2.js";var o=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...a(t.clusterName),staleTime:`static`}),e.queryClient.query({...r(t.clusterName),staleTime:`static`}),e.queryClient.query({...i(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.clusterName} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_clusterName-B64Oml-i.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DSoBTvQE.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DSoBTvQE.js new file mode 100644 index 000000000..4f2c66a9f --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-DSoBTvQE.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_clusterName-D8hCnxwC.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/circle-arrow-up-Bs5cB5tN.js","assets/cli-command-panel-DavMY-tN.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/eks-DOTzV24J.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/commandBuilder-CU-BmScO.js","assets/json-hjud9BaA.js","assets/subnet-calculator-BlCTyGtY.js","assets/eks-Ba3nNOPR.js","assets/iam-DmtL7LFe.js","assets/commandBuilder-BKyTM0Ga.js","assets/page-heading-vksh_67w.js","assets/badge-6vbuGFqk.js","assets/useRender-C4GZPWLS.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/gpu-instance-type-select-DMxBayBV.js","assets/select-Cn66OoPn.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/tabs-BMSqRmVw.js","assets/json-editor-02czSrbA.js","assets/textarea-DV1UO8hv.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{s as i,t as a,u as o}from"./eks-Ba3nNOPR.js";var s={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]};s.node;var c=r(s),l=e(`/_auth/eks/(clusters)/list-clusters/$clusterName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.clusterName),staleTime:`static`}),e.queryClient.query({...o(t.clusterName),staleTime:`static`}),e.queryClient.query({...a(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.clusterName} | EKS | Mulga`}]}),component:t(()=>n(()=>import(`./_clusterName-D8hCnxwC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62])),`component`)});export{c as n,l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Dsur-gaB.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Dsur-gaB.js deleted file mode 100644 index 097489954..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_clusterName-Dsur-gaB.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_clusterName-CCxZlFIF.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ecs-gqt7DXoF.js","assets/ecs-8RzYyUs4.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-B-FFW93q.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/gpu-instance-type-select-BD2r8UcO.js","assets/select-B01jpDaX.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/tabs-t6sDAEVZ.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{i as r,s as i,t as a}from"./ecs-gqt7DXoF.js";var o=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...a(t.clusterName),staleTime:`static`}),e.queryClient.query({...r(t.clusterName),staleTime:`static`}),e.queryClient.query({...i(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.clusterName} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_clusterName-CCxZlFIF.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CVBZhXic.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-C9--FuBt.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CVBZhXic.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-C9--FuBt.js index d2d96093d..ab09a388c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CVBZhXic.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-C9--FuBt.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{O as u,n as d,p as f}from"./iam-CKOkzDco.js";import{C as p,s as m}from"./iam-CVg27y22.js";import{t as h}from"./_groupName-ybM6rgP-.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as y,t as b}from"./detail-row-DNBRlVeK.js";import{n as x,t as S}from"./inline-policies-panel-CppMS52c.js";var C=t(n()),w=e();function T(){let{groupName:e}=h.useParams(),t=a(),{data:n}=r(m(e)),{data:T}=r(p),E=f(),D=d(),O=u(),[k,A]=(0,C.useState)(!1),[j,M]=(0,C.useState)(!1),[N,P]=(0,C.useState)(null),F=n.Group,I=n.Users??[],L=T.Users??[],R=new Set(I.map(e=>e.UserName)),z=L.filter(e=>e.UserName&&!R.has(e.UserName)),B=async()=>{try{await E.mutateAsync(e),t({to:`/iam/list-groups`})}finally{A(!1)}},V=async t=>{await D.mutateAsync({groupName:e,userName:t}),M(!1)},H=async t=>{P(t);try{await O.mutateAsync({groupName:e,userName:t})}finally{P(null)}};return F?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{to:`/iam/list-groups`,children:`Back to groups`}),E.error&&(0,w.jsx)(_,{error:E.error,msg:`Failed to delete group`}),D.error&&(0,w.jsx)(_,{error:D.error,msg:`Failed to add user`}),O.error&&(0,w.jsx)(_,{error:O.error,msg:`Failed to remove user`}),(0,w.jsxs)(`div`,{className:`space-y-6`,children:[(0,w.jsx)(g,{actions:(0,w.jsxs)(l,{onClick:()=>{A(!0)},size:`sm`,variant:`destructive`,children:[(0,w.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Group Details`,title:F.GroupName??``}),(0,w.jsxs)(y,{children:[(0,w.jsx)(y.Header,{children:`Group Information`}),(0,w.jsxs)(y.Content,{children:[(0,w.jsx)(b,{label:`Group Name`,value:F.GroupName}),(0,w.jsx)(b,{label:`Group ID`,value:F.GroupId}),(0,w.jsx)(b,{label:`ARN`,value:F.Arn}),(0,w.jsx)(b,{label:`Path`,value:F.Path}),(0,w.jsx)(b,{label:`Created`,value:o(F.CreateDate)})]})]}),(0,w.jsxs)(y,{children:[(0,w.jsx)(y.Header,{children:(0,w.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,w.jsx)(`span`,{children:`Members`}),(0,w.jsx)(l,{onClick:()=>{M(!j)},size:`sm`,children:`Add User`})]})}),(0,w.jsxs)(y.Content,{children:[j&&z.length>0&&(0,w.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,w.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a user to add:`}),(0,w.jsx)(`div`,{className:`space-y-1`,children:z.map(e=>(0,w.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:D.isPending,onClick:()=>{e.UserName&&V(e.UserName)},type:`button`,children:[(0,w.jsx)(`span`,{children:e.UserName}),(0,w.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.UserName))})]}),j&&z.length===0&&(0,w.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No users available to add.`}),I.length>0?(0,w.jsx)(`div`,{className:`col-span-2 space-y-3`,children:I.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,w.jsx)(i,{className:`text-sm font-medium hover:underline`,params:{userName:e.UserName??``},to:`/iam/list-users/$userName`,children:e.UserName}),(0,w.jsx)(l,{disabled:N===e.UserName,onClick:()=>{e.UserName&&H(e.UserName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.UserName))}):(0,w.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No members.`})]})]}),(0,w.jsx)(x,{kind:`group`,name:e}),(0,w.jsx)(S,{kind:`group`,name:e})]}),(0,w.jsx)(v,{description:`Are you sure you want to delete the group "${e}"? This action cannot be undone. You must remove all members and detach all policies first.`,isPending:E.isPending,onConfirm:B,onOpenChange:A,open:k,title:`Delete Group`})]}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{to:`/iam/list-groups`,children:`Back to groups`}),(0,w.jsx)(`p`,{className:`text-muted-foreground`,children:`Group not found.`})]})}export{T as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{O as u,n as d,p as f}from"./iam-DpkrYySm.js";import{C as p,s as m}from"./iam-DmtL7LFe.js";import{t as h}from"./_groupName-CXVunn1Z.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as y,t as b}from"./detail-row-DNBRlVeK.js";import{n as x,t as S}from"./inline-policies-panel-Bd1RyDcb.js";var C=t(n()),w=e();function T(){let{groupName:e}=h.useParams(),t=a(),{data:n}=r(m(e)),{data:T}=r(p),E=f(),D=d(),O=u(),[k,A]=(0,C.useState)(!1),[j,M]=(0,C.useState)(!1),[N,P]=(0,C.useState)(null),F=n.Group,I=n.Users??[],L=T.Users??[],R=new Set(I.map(e=>e.UserName)),z=L.filter(e=>e.UserName&&!R.has(e.UserName)),B=async()=>{try{await E.mutateAsync(e),t({to:`/iam/list-groups`})}finally{A(!1)}},V=async t=>{await D.mutateAsync({groupName:e,userName:t}),M(!1)},H=async t=>{P(t);try{await O.mutateAsync({groupName:e,userName:t})}finally{P(null)}};return F?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{to:`/iam/list-groups`,children:`Back to groups`}),E.error&&(0,w.jsx)(_,{error:E.error,msg:`Failed to delete group`}),D.error&&(0,w.jsx)(_,{error:D.error,msg:`Failed to add user`}),O.error&&(0,w.jsx)(_,{error:O.error,msg:`Failed to remove user`}),(0,w.jsxs)(`div`,{className:`space-y-6`,children:[(0,w.jsx)(g,{actions:(0,w.jsxs)(l,{onClick:()=>{A(!0)},size:`sm`,variant:`destructive`,children:[(0,w.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Group Details`,title:F.GroupName??``}),(0,w.jsxs)(y,{children:[(0,w.jsx)(y.Header,{children:`Group Information`}),(0,w.jsxs)(y.Content,{children:[(0,w.jsx)(b,{label:`Group Name`,value:F.GroupName}),(0,w.jsx)(b,{label:`Group ID`,value:F.GroupId}),(0,w.jsx)(b,{label:`ARN`,value:F.Arn}),(0,w.jsx)(b,{label:`Path`,value:F.Path}),(0,w.jsx)(b,{label:`Created`,value:o(F.CreateDate)})]})]}),(0,w.jsxs)(y,{children:[(0,w.jsx)(y.Header,{children:(0,w.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,w.jsx)(`span`,{children:`Members`}),(0,w.jsx)(l,{onClick:()=>{M(!j)},size:`sm`,children:`Add User`})]})}),(0,w.jsxs)(y.Content,{children:[j&&z.length>0&&(0,w.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,w.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a user to add:`}),(0,w.jsx)(`div`,{className:`space-y-1`,children:z.map(e=>(0,w.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:D.isPending,onClick:()=>{e.UserName&&V(e.UserName)},type:`button`,children:[(0,w.jsx)(`span`,{children:e.UserName}),(0,w.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.UserName))})]}),j&&z.length===0&&(0,w.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No users available to add.`}),I.length>0?(0,w.jsx)(`div`,{className:`col-span-2 space-y-3`,children:I.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,w.jsx)(i,{className:`text-sm font-medium hover:underline`,params:{userName:e.UserName??``},to:`/iam/list-users/$userName`,children:e.UserName}),(0,w.jsx)(l,{disabled:N===e.UserName,onClick:()=>{e.UserName&&H(e.UserName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.UserName))}):(0,w.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No members.`})]})]}),(0,w.jsx)(x,{kind:`group`,name:e}),(0,w.jsx)(S,{kind:`group`,name:e})]}),(0,w.jsx)(v,{description:`Are you sure you want to delete the group "${e}"? This action cannot be undone. You must remove all members and detach all policies first.`,isPending:E.isPending,onConfirm:B,onOpenChange:A,open:k,title:`Delete Group`})]}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{to:`/iam/list-groups`,children:`Back to groups`}),(0,w.jsx)(`p`,{className:`text-muted-foreground`,children:`Group not found.`})]})}export{T as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CXVunn1Z.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CXVunn1Z.js new file mode 100644 index 000000000..42fac3d55 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-CXVunn1Z.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_groupName-C9--FuBt.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/iam-DpkrYySm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/queryOptions-Dfvzj6n2.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/inline-policies-panel-Bd1RyDcb.js","assets/useQuery-2EKf7AyV.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/json-editor-02czSrbA.js","assets/textarea-DV1UO8hv.js","assets/iam-DpUWI3xh.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{C as r,a as i,n as a,p as o,s}from"./iam-DmtL7LFe.js";var c=e(`/_auth/iam/(groups)/list-groups/$groupName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...s(t.groupName),staleTime:`static`}),e.queryClient.query({...a(t.groupName),staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`}),e.queryClient.query({...i(t.groupName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.groupName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_groupName-C9--FuBt.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-ybM6rgP-.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-ybM6rgP-.js deleted file mode 100644 index 066994ad8..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_groupName-ybM6rgP-.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_groupName-CVBZhXic.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/iam-CKOkzDco.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/queryOptions-Dfvzj6n2.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/inline-policies-panel-CppMS52c.js","assets/useQuery-2EKf7AyV.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/json-editor-Bwbz8mfn.js","assets/textarea-n04EavUm.js","assets/iam-Cgrr-Iit.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{C as r,a as i,n as a,p as o,s}from"./iam-CVg27y22.js";var c=e(`/_auth/iam/(groups)/list-groups/$groupName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...s(t.groupName),staleTime:`static`}),e.queryClient.query({...a(t.groupName),staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`}),e.queryClient.query({...i(t.groupName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.groupName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_groupName-CVBZhXic.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B0KNJrXP.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B0KNJrXP.js deleted file mode 100644 index 595dbcfa3..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B0KNJrXP.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_guardrailId.edit-oLdZ7a5f.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/bedrock-7XDhMm-7.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CyJu3wq4.js","assets/bedrock-Ct-f5HCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/guardrail-form-page-C6v-izo3.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/tags-field-array-Dk9nPDzt.js","assets/textarea-n04EavUm.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{n as r}from"./bedrock-Ct-f5HCJ.js";var i=e(`/_auth/bedrock/(guardrails)/list-guardrails/$guardrailId/edit`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.guardrailId),staleTime:`static`})},head:({params:e})=>({meta:[{title:`Edit ${e.guardrailId} | Guardrail | Mulga`}]}),component:t(()=>n(()=>import(`./_guardrailId.edit-oLdZ7a5f.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B8ea2pKG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B8ea2pKG.js new file mode 100644 index 000000000..efea8c7e4 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-B8ea2pKG.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_guardrailId.edit-EzvuqMgb.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/bedrock-ktyVzA00.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-D0AzsM22.js","assets/bedrock-BF8FfWcf.js","assets/queryOptions-Dfvzj6n2.js","assets/guardrail-form-page-BDQeV5zm.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/tags-field-array-Bjg8Nmui.js","assets/textarea-DV1UO8hv.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{n as r}from"./bedrock-BF8FfWcf.js";var i=e(`/_auth/bedrock/(guardrails)/list-guardrails/$guardrailId/edit`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.guardrailId),staleTime:`static`})},head:({params:e})=>({meta:[{title:`Edit ${e.guardrailId} | Guardrail | Mulga`}]}),component:t(()=>n(()=>import(`./_guardrailId.edit-EzvuqMgb.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-oLdZ7a5f.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-EzvuqMgb.js similarity index 68% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-oLdZ7a5f.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-EzvuqMgb.js index c646f5d89..4539f4da1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-oLdZ7a5f.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.edit-EzvuqMgb.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{f as r}from"./bedrock-7XDhMm-7.js";import{n as i}from"./bedrock-Ct-f5HCJ.js";import{t as a}from"./_guardrailId.edit-B0KNJrXP.js";import{t as o}from"./guardrail-form-page-C6v-izo3.js";var s=t(),c=e();function l(){let e=(0,s.c)(7),{guardrailId:t}=a.useParams(),l;e[0]===t?l=e[1]:(l=i(t),e[0]=t,e[1]=l);let{data:u}=n(l),d;e[2]===u?d=e[3]:(d=r(u),e[2]=u,e[3]=d);let f;return e[4]!==t||e[5]!==d?(f=(0,c.jsx)(o,{defaultValues:d,guardrailId:t,mode:`edit`}),e[4]=t,e[5]=d,e[6]=f):f=e[6],f}export{l as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{f as r}from"./bedrock-ktyVzA00.js";import{n as i}from"./bedrock-BF8FfWcf.js";import{t as a}from"./_guardrailId.edit-B8ea2pKG.js";import{t as o}from"./guardrail-form-page-BDQeV5zm.js";var s=t(),c=e();function l(){let e=(0,s.c)(7),{guardrailId:t}=a.useParams(),l;e[0]===t?l=e[1]:(l=i(t),e[0]=t,e[1]=l);let{data:u}=n(l),d;e[2]===u?d=e[3]:(d=r(u),e[2]=u,e[3]=d);let f;return e[4]!==t||e[5]!==d?(f=(0,c.jsx)(o,{defaultValues:d,guardrailId:t,mode:`edit`}),e[4]=t,e[5]=d,e[6]=f):f=e[6],f}export{l as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-D-j5LmDO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-D-j5LmDO.js deleted file mode 100644 index c46af8fb5..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-D-j5LmDO.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_guardrailId.index-TwlT6FIq.js","assets/compiler-runtime-D_vZfn79.js","assets/useMutation-6rdxVQpi.js","assets/removable-Dwr9otKB.js","assets/mutation-BziiWz5u.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/pencil-BhhTGjjd.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/bedrock-7XDhMm-7.js","assets/commandBuilder-CyJu3wq4.js","assets/bedrock-Ct-f5HCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/commandBuilder-BLgOdGhm.js","assets/page-heading-vksh_67w.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{n as r,r as i}from"./bedrock-Ct-f5HCJ.js";var a=e(`/_auth/bedrock/(guardrails)/list-guardrails/$guardrailId/`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.guardrailId),staleTime:`static`}),e.queryClient.query({...i(t.guardrailId),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.guardrailId} | Guardrail | Mulga`}]}),component:t(()=>n(()=>import(`./_guardrailId.index-TwlT6FIq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-TwlT6FIq.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-DgiT87X2.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-TwlT6FIq.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-DgiT87X2.js index aa5048ec5..7f0b815b8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-TwlT6FIq.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-DgiT87X2.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useMutation-6rdxVQpi.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{in as c}from"./cluster-config-xw_Q7X1e.js";import{t as l}from"./back-link-CjKy1JE5.js";import{t as u}from"./pencil-BhhTGjjd.js";import{t as d}from"./trash-DVab4pEz.js";import{n as f,t as ee}from"./button-BarTr35m.js";import{t as p}from"./input-6kdUb_DH.js";import{ha as m,o as h}from"./awsClient-b0hcP1Iz.js";import{n as g,r as _}from"./bedrock-7XDhMm-7.js";import{n as v,r as y}from"./bedrock-Ct-f5HCJ.js";import{n as b,r as x,t as S}from"./commandBuilder-BLgOdGhm.js";import{t as C}from"./_guardrailId.index-D-j5LmDO.js";import{t as w}from"./page-heading-vksh_67w.js";import{c as te,s as T,t as E}from"./field-c7GHI5st.js";import{t as ne}from"./textarea-n04EavUm.js";import{t as D}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{t as A}from"./state-badge-D1Z6q_OA.js";var j=class extends x(S,b,`ApplyGuardrail`,m){},re=t(n(),1),M=r();function N(){let e=(0,M.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:ie},e[0]=t):t=e[0],i(t)}async function ie(e){let{guardrailIdentifier:t,guardrailVersion:n,source:r,text:i}=e,a=new j({guardrailIdentifier:t,guardrailVersion:n,source:r,content:[{text:{text:i}}]});return await h().send(a)}var P=e(),F=[`INPUT`,`OUTPUT`];function ae(e){return(e.topicPolicy?.topics??[]).filter(e=>e.detected===!0||e.action===`BLOCKED`).map(e=>e.name??`unknown topic`)}function I(e){let t=e.wordPolicy?.customWords??[],n=e.wordPolicy?.managedWordLists??[];return[...t,...n].filter(e=>e.detected===!0||e.action===`BLOCKED`).map(e=>e.match??`unknown word`)}function oe(e){let t=(0,M.c)(9),{assessment:n}=e,r,i,a,o;if(t[0]!==n){o=Symbol.for(`react.early_return_sentinel`);bb0:{let e=ae(n),t=I(n);if(e.length===0&&t.length===0){o=null;break bb0}r=`rounded-md border p-3 text-sm`,i=e.length>0&&(0,P.jsxs)(`p`,{children:[(0,P.jsx)(`span`,{className:`font-medium`,children:`Blocked topics: `}),e.join(`, `)]}),a=t.length>0&&(0,P.jsxs)(`p`,{children:[(0,P.jsx)(`span`,{className:`font-medium`,children:`Blocked words: `}),t.join(`, `)]})}t[0]=n,t[1]=r,t[2]=i,t[3]=a,t[4]=o}else r=t[1],i=t[2],a=t[3],o=t[4];if(o!==Symbol.for(`react.early_return_sentinel`))return o;let s;return t[5]!==r||t[6]!==i||t[7]!==a?(s=(0,P.jsxs)(`div`,{className:r,children:[i,a]}),t[5]=r,t[6]=i,t[7]=a,t[8]=s):s=t[8],s}function se(e){let t=(0,M.c)(47),{guardrailId:n,guardrailVersion:r}=e,[i,a]=(0,re.useState)(``),[o,s]=(0,re.useState)(`INPUT`),c=N(),l;t[0]!==c||t[1]!==n||t[2]!==r||t[3]!==o||t[4]!==i?(l=async function(){if(i.trim().length!==0)try{await c.mutateAsync({guardrailIdentifier:n,guardrailVersion:r,source:o,text:i})}catch{}},t[0]=c,t[1]=n,t[2]=r,t[3]=o,t[4]=i,t[5]=l):l=t[5];let u=l,d;t[6]===c.data?.outputs?d=t[7]:(d=c.data?.outputs??[],t[6]=c.data?.outputs,t[7]=d);let f=d,p;t[8]===c.data?.assessments?p=t[9]:(p=c.data?.assessments??[],t[8]=c.data?.assessments,t[9]=p);let m=p,h=c.data?.action,g;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,P.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Guardrail tester`}),t[10]=g):g=t[10];let _;t[11]===r?_=t[12]:(_=(0,P.jsxs)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:[`Apply this guardrail (version `,r,`) to sample content and see whether it intervenes.`]}),t[11]=r,t[12]=_);let v;t[13]===u?v=t[14]:(v=e=>{e.preventDefault(),u()},t[13]=u,t[14]=v);let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,P.jsx)(`legend`,{className:`sr-only`,children:`Content source`}),t[15]=y):y=t[15];let b;t[16]===o?b=t[17]:(b=F.map(e=>(0,P.jsx)(ee,{"aria-pressed":o===e,onClick:()=>{s(e)},type:`button`,variant:o===e?`default`:`outline`,children:e},e)),t[16]=o,t[17]=b);let x;t[18]===b?x=t[19]:(x=(0,P.jsxs)(`fieldset`,{className:`flex items-center gap-1 border-0 p-0`,children:[y,b]}),t[18]=b,t[19]=x);let S;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,P.jsx)(te,{htmlFor:`guardrail-content`,children:`Content`}),t[20]=S):S=t[20];let C;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(C=e=>{a(e.target.value)},t[21]=C):C=t[21];let w;t[22]===i?w=t[23]:(w=(0,P.jsx)(ne,{id:`guardrail-content`,onChange:C,placeholder:`Enter content to evaluate against this guardrail`,rows:4,value:i}),t[22]=i,t[23]=w);let T;t[24]!==c.isPending||t[25]!==i?(T=c.isPending||i.trim().length===0,t[24]=c.isPending,t[25]=i,t[26]=T):T=t[26];let E=c.isPending?`Applying…`:`Apply guardrail`,D;t[27]!==T||t[28]!==E?(D=(0,P.jsx)(ee,{disabled:T,type:`submit`,children:E}),t[27]=T,t[28]=E,t[29]=D):D=t[29];let O;t[30]!==w||t[31]!==D||t[32]!==v||t[33]!==x?(O=(0,P.jsxs)(`form`,{className:`space-y-2`,onSubmit:v,children:[x,S,w,D]}),t[30]=w,t[31]=D,t[32]=v,t[33]=x,t[34]=O):O=t[34];let k;t[35]===c.error?k=t[36]:(k=c.error&&(0,P.jsx)(`p`,{className:`mt-4 text-sm text-destructive`,children:c.error.message}),t[35]=c.error,t[36]=k);let A;t[37]!==h||t[38]!==c.isSuccess||t[39]!==m||t[40]!==f?(A=c.isSuccess&&(0,P.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,P.jsxs)(`h3`,{className:`text-sm font-medium`,children:[`Action:`,` `,(0,P.jsx)(`span`,{className:h===`GUARDRAIL_INTERVENED`?`text-destructive`:`text-green-600 dark:text-green-400`,children:h})]}),m.length>0&&(0,P.jsx)(`div`,{className:`space-y-2`,children:m.map(L)}),f.length>0&&(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(`h4`,{className:`text-xs font-medium text-muted-foreground`,children:`Output`}),f.map(ce)]})]}),t[37]=h,t[38]=c.isSuccess,t[39]=m,t[40]=f,t[41]=A):A=t[41];let j;return t[42]!==O||t[43]!==k||t[44]!==A||t[45]!==_?(j=(0,P.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[g,_,O,k,A]}),t[42]=O,t[43]=k,t[44]=A,t[45]=_,t[46]=j):j=t[46],j}function ce(e,t){return(0,P.jsx)(`pre`,{className:`max-h-80 overflow-auto rounded bg-muted p-2 font-mono text-xs break-words whitespace-pre-wrap`,children:e.text??`(no text)`},t)}function L(e,t){return(0,P.jsx)(oe,{assessment:e},t)}function le(e){let t=(0,M.c)(15),{topic:n}=e,r;t[0]===n.name?r=t[1]:(r=(0,P.jsx)(`span`,{className:`font-semibold`,children:n.name}),t[0]=n.name,t[1]=r);let i=n.type??`DENY`,a;t[2]===i?a=t[3]:(a=(0,P.jsx)(`span`,{className:`rounded-full bg-muted px-2 py-0.5 text-xs`,children:i}),t[2]=i,t[3]=a);let o;t[4]!==r||t[5]!==a?(o=(0,P.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[r,a]}),t[4]=r,t[5]=a,t[6]=o):o=t[6];let s;t[7]===n.definition?s=t[8]:(s=(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:n.definition}),t[7]=n.definition,t[8]=s);let c;t[9]===n.examples?c=t[10]:(c=n.examples&&n.examples.length>0&&(0,P.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-xs text-muted-foreground`,children:n.examples.map(R)}),t[9]=n.examples,t[10]=c);let l;return t[11]!==o||t[12]!==s||t[13]!==c?(l=(0,P.jsxs)(`div`,{className:`rounded-md border p-3 text-sm`,children:[o,s,c]}),t[11]=o,t[12]=s,t[13]=c,t[14]=l):l=t[14],l}function R(e){return(0,P.jsx)(`li`,{children:e},e)}function ue(e){let t=(0,M.c)(7),{version:n}=e,r;t[0]===n.version?r=t[1]:(r=(0,P.jsx)(`span`,{className:`font-mono`,children:n.version}),t[0]=n.version,t[1]=r);let i;t[2]===n.status?i=t[3]:(i=(0,P.jsx)(A,{state:n.status}),t[2]=n.status,t[3]=i);let a;return t[4]!==r||t[5]!==i?(a=(0,P.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-2 text-sm`,children:[r,i]}),t[4]=r,t[5]=i,t[6]=a):a=t[6],a}function de(e){let t=(0,M.c)(26),{guardrailId:n}=e,[r,i]=(0,re.useState)(``),a=g(),o;t[0]!==a||t[1]!==r||t[2]!==n?(o=async function(){try{await a.mutateAsync({description:r.length>0?r:void 0,guardrailIdentifier:n}),i(``)}catch{}},t[0]=a,t[1]=r,t[2]=n,t[3]=o):o=t[3];let s=o,c,l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,P.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Create version`}),l=(0,P.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:`Snapshots the current DRAFT as a new immutable version.`}),t[4]=c,t[5]=l):(c=t[4],l=t[5]);let u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,P.jsx)(T,{children:(0,P.jsx)(`label`,{htmlFor:`version-description`,children:`Description`})}),t[6]=u):u=t[6];let d;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=e=>{i(e.target.value)},t[7]=d):d=t[7];let f;t[8]===r?f=t[9]:(f=(0,P.jsxs)(E,{children:[u,(0,P.jsx)(p,{id:`version-description`,onChange:d,placeholder:`Optional`,value:r})]}),t[8]=r,t[9]=f);let m;t[10]===s?m=t[11]:(m=()=>{s()},t[10]=s,t[11]=m);let h=a.isPending?`Creating…`:`Create version`,_;t[12]!==a.isPending||t[13]!==m||t[14]!==h?(_=(0,P.jsx)(ee,{className:`mt-3`,disabled:a.isPending,onClick:m,size:`sm`,children:h}),t[12]=a.isPending,t[13]=m,t[14]=h,t[15]=_):_=t[15];let v;t[16]===a.error?v=t[17]:(v=a.error&&(0,P.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:a.error.message}),t[16]=a.error,t[17]=v);let y;t[18]!==a.data||t[19]!==a.isSuccess?(y=a.isSuccess&&(0,P.jsxs)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:[`Version `,a.data.version,` created.`]}),t[18]=a.data,t[19]=a.isSuccess,t[20]=y):y=t[20];let b;return t[21]!==v||t[22]!==y||t[23]!==f||t[24]!==_?(b=(0,P.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[c,l,f,_,v,y]}),t[21]=v,t[22]=y,t[23]=f,t[24]=_,t[25]=b):b=t[25],b}function z(e){let t=(0,M.c)(98),{guardrailId:n}=e,r=s(),[i,p]=(0,re.useState)(!1),m;t[0]===n?m=t[1]:(m=v(n),t[0]=n,t[1]=m);let{data:h}=a(m),g;t[2]===n?g=t[3]:(g=y(n),t[2]=n,t[3]=g);let{data:b}=a(g),x=_(),S;t[4]===b.guardrails?S=t[5]:(S=b.guardrails??[],t[4]=b.guardrails,t[5]=S);let C=S,te;t[6]===h.topicPolicy?.topics?te=t[7]:(te=h.topicPolicy?.topics??[],t[6]=h.topicPolicy?.topics,t[7]=te);let T=te,E;t[8]!==x||t[9]!==n||t[10]!==r?(E=async function(){try{await x.mutateAsync(n),p(!1),await r({to:`/bedrock/list-guardrails`})}catch{}},t[8]=x,t[9]=n,t[10]=r,t[11]=E):E=t[11];let ne=E,j;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,P.jsx)(l,{to:`/bedrock/list-guardrails`,children:`Back to guardrails`}),t[12]=j):j=t[12];let N;t[13]===h.status?N=t[14]:(N=(0,P.jsx)(A,{state:h.status}),t[13]=h.status,t[14]=N);let ie;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(ie=f({size:`sm`,variant:`outline`}),t[15]=ie):ie=t[15];let F;t[16]===n?F=t[17]:(F={guardrailId:n},t[16]=n,t[17]=F);let ae;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,P.jsx)(u,{className:`size-4`}),t[18]=ae):ae=t[18];let I;t[19]===F?I=t[20]:(I=(0,P.jsxs)(o,{className:ie,params:F,to:`/bedrock/list-guardrails/$guardrailId/edit`,children:[ae,`Edit`]}),t[19]=F,t[20]=I);let oe;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(oe=()=>{p(!0)},t[21]=oe):oe=t[21];let ce;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(ce=(0,P.jsxs)(ee,{onClick:oe,size:`sm`,variant:`destructive`,children:[(0,P.jsx)(d,{className:`size-4`}),`Delete`]}),t[22]=ce):ce=t[22];let L;t[23]!==I||t[24]!==N?(L=(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[N,I,ce]}),t[23]=I,t[24]=N,t[25]=L):L=t[25];let le=h.name??n,R;t[26]!==L||t[27]!==le?(R=(0,P.jsx)(w,{actions:L,subtitle:`Guardrail Details`,title:le}),t[26]=L,t[27]=le,t[28]=R):R=t[28];let ue;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,P.jsx)(O.Header,{children:`Guardrail Information`}),t[29]=ue):ue=t[29];let z;t[30]===h.guardrailId?z=t[31]:(z=(0,P.jsx)(k,{label:`Guardrail ID`,value:h.guardrailId}),t[30]=h.guardrailId,t[31]=z);let B;t[32]===h.guardrailArn?B=t[33]:(B=(0,P.jsx)(k,{label:`ARN`,value:h.guardrailArn}),t[32]=h.guardrailArn,t[33]=B);let V;t[34]===h.version?V=t[35]:(V=(0,P.jsx)(k,{label:`Version`,value:h.version}),t[34]=h.version,t[35]=V);let me=h.description??`-`,H;t[36]===me?H=t[37]:(H=(0,P.jsx)(k,{label:`Description`,value:me}),t[36]=me,t[37]=H);let U;t[38]===h.createdAt?U=t[39]:(U=c(h.createdAt),t[38]=h.createdAt,t[39]=U);let W;t[40]===U?W=t[41]:(W=(0,P.jsx)(k,{label:`Created`,value:U}),t[40]=U,t[41]=W);let G;t[42]===h.updatedAt?G=t[43]:(G=c(h.updatedAt),t[42]=h.updatedAt,t[43]=G);let K;t[44]===G?K=t[45]:(K=(0,P.jsx)(k,{label:`Updated`,value:G}),t[44]=G,t[45]=K);let he;t[46]===h.statusReasons?he=t[47]:(he=h.statusReasons&&h.statusReasons.length>0&&(0,P.jsx)(k,{label:`Status Reasons`,value:h.statusReasons.join(`; `)}),t[46]=h.statusReasons,t[47]=he);let q;t[48]!==z||t[49]!==B||t[50]!==V||t[51]!==H||t[52]!==W||t[53]!==K||t[54]!==he?(q=(0,P.jsxs)(O,{children:[ue,(0,P.jsxs)(O.Content,{children:[z,B,V,H,W,K,he]})]}),t[48]=z,t[49]=B,t[50]=V,t[51]=H,t[52]=W,t[53]=K,t[54]=he,t[55]=q):q=t[55];let ge;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(ge=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Denied topics`}),t[56]=ge):ge=t[56];let J;t[57]===T?J=t[58]:(J=(0,P.jsxs)(`div`,{children:[ge,T.length>0?(0,P.jsx)(`div`,{className:`space-y-2`,children:T.map(pe)}):(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`No topic policy configured for this guardrail.`})]}),t[57]=T,t[58]=J);let _e;t[59]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Other policies`}),t[59]=_e):_e=t[59];let ve=(h.wordPolicy?.words?.length??0)>0||(h.wordPolicy?.managedWordLists?.length??0)>0?`configured`:`not configured`,Y;t[60]===ve?Y=t[61]:(Y=(0,P.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-1 text-xs`,children:[`Word policy:`,` `,ve]}),t[60]=ve,t[61]=Y);let ye=(h.sensitiveInformationPolicy?.piiEntities?.length??0)>0||(h.sensitiveInformationPolicy?.regexes?.length??0)>0?`configured`:`not configured`,X;t[62]===ye?X=t[63]:(X=(0,P.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-1 text-xs`,children:[`Sensitive information policy:`,` `,ye]}),t[62]=ye,t[63]=X);let Z;t[64]!==Y||t[65]!==X?(Z=(0,P.jsxs)(`div`,{children:[_e,(0,P.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[Y,X]})]}),t[64]=Y,t[65]=X,t[66]=Z):Z=t[66];let be;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(be=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Versions`}),t[67]=be):be=t[67];let xe;t[68]===C?xe=t[69]:(xe=(0,P.jsxs)(`div`,{children:[be,C.length>0?(0,P.jsx)(`div`,{className:`space-y-2`,children:C.map(fe)}):(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`No versions found for this guardrail.`})]}),t[68]=C,t[69]=xe);let Q;t[70]===n?Q=t[71]:(Q=(0,P.jsx)(de,{guardrailId:n}),t[70]=n,t[71]=Q);let Se=h.version??`DRAFT`,Ce;t[72]!==n||t[73]!==Se?(Ce=(0,P.jsx)(se,{guardrailId:n,guardrailVersion:Se}),t[72]=n,t[73]=Se,t[74]=Ce):Ce=t[74];let we;t[75]!==R||t[76]!==q||t[77]!==J||t[78]!==Z||t[79]!==xe||t[80]!==Q||t[81]!==Ce?(we=(0,P.jsxs)(`div`,{className:`space-y-6`,children:[R,q,J,Z,xe,Q,Ce]}),t[75]=R,t[76]=q,t[77]=J,t[78]=Z,t[79]=xe,t[80]=Q,t[81]=Ce,t[82]=we):we=t[82];let Te=`This tears down "${h.name??n}" and all of its versions. It cannot be undone.`,Ee;t[83]===x.error?Ee=t[84]:(Ee=x.error&&(0,P.jsx)(`span`,{className:`mt-2 block text-destructive`,children:x.error.message}),t[83]=x.error,t[84]=Ee);let De;t[85]!==Te||t[86]!==Ee?(De=(0,P.jsxs)(P.Fragment,{children:[Te,Ee]}),t[85]=Te,t[86]=Ee,t[87]=De):De=t[87];let Oe;t[88]===ne?Oe=t[89]:(Oe=()=>{ne()},t[88]=ne,t[89]=Oe);let $;t[90]!==x.isPending||t[91]!==i||t[92]!==De||t[93]!==Oe?($=(0,P.jsx)(D,{description:De,isPending:x.isPending,onConfirm:Oe,onOpenChange:p,open:i,title:`Delete Guardrail`}),t[90]=x.isPending,t[91]=i,t[92]=De,t[93]=Oe,t[94]=$):$=t[94];let ke;return t[95]!==we||t[96]!==$?(ke=(0,P.jsxs)(P.Fragment,{children:[j,we,$]}),t[95]=we,t[96]=$,t[97]=ke):ke=t[97],ke}function fe(e){return(0,P.jsx)(ue,{version:e},e.version)}function pe(e){return(0,P.jsx)(le,{topic:e},e.name)}function B(){let e=(0,M.c)(2),{guardrailId:t}=C.useParams(),n;return e[0]===t?n=e[1]:(n=(0,P.jsx)(z,{guardrailId:t}),e[0]=t,e[1]=n),n}export{B as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useMutation-6rdxVQpi.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{an as c}from"./cluster-config-DkOiY8HH.js";import{t as l}from"./back-link-wsXUoJ12.js";import{t as u}from"./pencil-BhhTGjjd.js";import{t as d}from"./trash-DVab4pEz.js";import{n as f,t as ee}from"./button-qf9lLJ2x.js";import{t as p}from"./input-D3aUBtS6.js";import{ma as m,o as h}from"./awsClient-Cqp6x3OY.js";import{n as g,r as _}from"./bedrock-ktyVzA00.js";import{n as v,r as y}from"./bedrock-BF8FfWcf.js";import{n as b,r as x,t as S}from"./commandBuilder-D669HwKx.js";import{t as C}from"./_guardrailId.index-gNwMyQy3.js";import{t as w}from"./page-heading-vksh_67w.js";import{c as te,s as T,t as E}from"./field-CS-ql6du.js";import{t as ne}from"./textarea-DV1UO8hv.js";import{t as D}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{t as A}from"./state-badge-pn00UE1d.js";var j=class extends x(S,b,`ApplyGuardrail`,m){},re=t(n(),1),M=r();function N(){let e=(0,M.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:ie},e[0]=t):t=e[0],i(t)}async function ie(e){let{guardrailIdentifier:t,guardrailVersion:n,source:r,text:i}=e,a=new j({guardrailIdentifier:t,guardrailVersion:n,source:r,content:[{text:{text:i}}]});return await h().send(a)}var P=e(),F=[`INPUT`,`OUTPUT`];function ae(e){return(e.topicPolicy?.topics??[]).filter(e=>e.detected===!0||e.action===`BLOCKED`).map(e=>e.name??`unknown topic`)}function I(e){let t=e.wordPolicy?.customWords??[],n=e.wordPolicy?.managedWordLists??[];return[...t,...n].filter(e=>e.detected===!0||e.action===`BLOCKED`).map(e=>e.match??`unknown word`)}function oe(e){let t=(0,M.c)(9),{assessment:n}=e,r,i,a,o;if(t[0]!==n){o=Symbol.for(`react.early_return_sentinel`);bb0:{let e=ae(n),t=I(n);if(e.length===0&&t.length===0){o=null;break bb0}r=`rounded-md border p-3 text-sm`,i=e.length>0&&(0,P.jsxs)(`p`,{children:[(0,P.jsx)(`span`,{className:`font-medium`,children:`Blocked topics: `}),e.join(`, `)]}),a=t.length>0&&(0,P.jsxs)(`p`,{children:[(0,P.jsx)(`span`,{className:`font-medium`,children:`Blocked words: `}),t.join(`, `)]})}t[0]=n,t[1]=r,t[2]=i,t[3]=a,t[4]=o}else r=t[1],i=t[2],a=t[3],o=t[4];if(o!==Symbol.for(`react.early_return_sentinel`))return o;let s;return t[5]!==r||t[6]!==i||t[7]!==a?(s=(0,P.jsxs)(`div`,{className:r,children:[i,a]}),t[5]=r,t[6]=i,t[7]=a,t[8]=s):s=t[8],s}function se(e){let t=(0,M.c)(47),{guardrailId:n,guardrailVersion:r}=e,[i,a]=(0,re.useState)(``),[o,s]=(0,re.useState)(`INPUT`),c=N(),l;t[0]!==c||t[1]!==n||t[2]!==r||t[3]!==o||t[4]!==i?(l=async function(){if(i.trim().length!==0)try{await c.mutateAsync({guardrailIdentifier:n,guardrailVersion:r,source:o,text:i})}catch{}},t[0]=c,t[1]=n,t[2]=r,t[3]=o,t[4]=i,t[5]=l):l=t[5];let u=l,d;t[6]===c.data?.outputs?d=t[7]:(d=c.data?.outputs??[],t[6]=c.data?.outputs,t[7]=d);let f=d,p;t[8]===c.data?.assessments?p=t[9]:(p=c.data?.assessments??[],t[8]=c.data?.assessments,t[9]=p);let m=p,h=c.data?.action,g;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,P.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Guardrail tester`}),t[10]=g):g=t[10];let _;t[11]===r?_=t[12]:(_=(0,P.jsxs)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:[`Apply this guardrail (version `,r,`) to sample content and see whether it intervenes.`]}),t[11]=r,t[12]=_);let v;t[13]===u?v=t[14]:(v=e=>{e.preventDefault(),u()},t[13]=u,t[14]=v);let y;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,P.jsx)(`legend`,{className:`sr-only`,children:`Content source`}),t[15]=y):y=t[15];let b;t[16]===o?b=t[17]:(b=F.map(e=>(0,P.jsx)(ee,{"aria-pressed":o===e,onClick:()=>{s(e)},type:`button`,variant:o===e?`default`:`outline`,children:e},e)),t[16]=o,t[17]=b);let x;t[18]===b?x=t[19]:(x=(0,P.jsxs)(`fieldset`,{className:`flex items-center gap-1 border-0 p-0`,children:[y,b]}),t[18]=b,t[19]=x);let S;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,P.jsx)(te,{htmlFor:`guardrail-content`,children:`Content`}),t[20]=S):S=t[20];let C;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(C=e=>{a(e.target.value)},t[21]=C):C=t[21];let w;t[22]===i?w=t[23]:(w=(0,P.jsx)(ne,{id:`guardrail-content`,onChange:C,placeholder:`Enter content to evaluate against this guardrail`,rows:4,value:i}),t[22]=i,t[23]=w);let T;t[24]!==c.isPending||t[25]!==i?(T=c.isPending||i.trim().length===0,t[24]=c.isPending,t[25]=i,t[26]=T):T=t[26];let E=c.isPending?`Applying…`:`Apply guardrail`,D;t[27]!==T||t[28]!==E?(D=(0,P.jsx)(ee,{disabled:T,type:`submit`,children:E}),t[27]=T,t[28]=E,t[29]=D):D=t[29];let O;t[30]!==w||t[31]!==D||t[32]!==v||t[33]!==x?(O=(0,P.jsxs)(`form`,{className:`space-y-2`,onSubmit:v,children:[x,S,w,D]}),t[30]=w,t[31]=D,t[32]=v,t[33]=x,t[34]=O):O=t[34];let k;t[35]===c.error?k=t[36]:(k=c.error&&(0,P.jsx)(`p`,{className:`mt-4 text-sm text-destructive`,children:c.error.message}),t[35]=c.error,t[36]=k);let A;t[37]!==h||t[38]!==c.isSuccess||t[39]!==m||t[40]!==f?(A=c.isSuccess&&(0,P.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,P.jsxs)(`h3`,{className:`text-sm font-medium`,children:[`Action:`,` `,(0,P.jsx)(`span`,{className:h===`GUARDRAIL_INTERVENED`?`text-destructive`:`text-green-600 dark:text-green-400`,children:h})]}),m.length>0&&(0,P.jsx)(`div`,{className:`space-y-2`,children:m.map(L)}),f.length>0&&(0,P.jsxs)(`div`,{className:`space-y-2`,children:[(0,P.jsx)(`h4`,{className:`text-xs font-medium text-muted-foreground`,children:`Output`}),f.map(ce)]})]}),t[37]=h,t[38]=c.isSuccess,t[39]=m,t[40]=f,t[41]=A):A=t[41];let j;return t[42]!==O||t[43]!==k||t[44]!==A||t[45]!==_?(j=(0,P.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[g,_,O,k,A]}),t[42]=O,t[43]=k,t[44]=A,t[45]=_,t[46]=j):j=t[46],j}function ce(e,t){return(0,P.jsx)(`pre`,{className:`max-h-80 overflow-auto rounded bg-muted p-2 font-mono text-xs break-words whitespace-pre-wrap`,children:e.text??`(no text)`},t)}function L(e,t){return(0,P.jsx)(oe,{assessment:e},t)}function le(e){let t=(0,M.c)(15),{topic:n}=e,r;t[0]===n.name?r=t[1]:(r=(0,P.jsx)(`span`,{className:`font-semibold`,children:n.name}),t[0]=n.name,t[1]=r);let i=n.type??`DENY`,a;t[2]===i?a=t[3]:(a=(0,P.jsx)(`span`,{className:`rounded-full bg-muted px-2 py-0.5 text-xs`,children:i}),t[2]=i,t[3]=a);let o;t[4]!==r||t[5]!==a?(o=(0,P.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[r,a]}),t[4]=r,t[5]=a,t[6]=o):o=t[6];let s;t[7]===n.definition?s=t[8]:(s=(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:n.definition}),t[7]=n.definition,t[8]=s);let c;t[9]===n.examples?c=t[10]:(c=n.examples&&n.examples.length>0&&(0,P.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-xs text-muted-foreground`,children:n.examples.map(R)}),t[9]=n.examples,t[10]=c);let l;return t[11]!==o||t[12]!==s||t[13]!==c?(l=(0,P.jsxs)(`div`,{className:`rounded-md border p-3 text-sm`,children:[o,s,c]}),t[11]=o,t[12]=s,t[13]=c,t[14]=l):l=t[14],l}function R(e){return(0,P.jsx)(`li`,{children:e},e)}function ue(e){let t=(0,M.c)(7),{version:n}=e,r;t[0]===n.version?r=t[1]:(r=(0,P.jsx)(`span`,{className:`font-mono`,children:n.version}),t[0]=n.version,t[1]=r);let i;t[2]===n.status?i=t[3]:(i=(0,P.jsx)(A,{state:n.status}),t[2]=n.status,t[3]=i);let a;return t[4]!==r||t[5]!==i?(a=(0,P.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-2 text-sm`,children:[r,i]}),t[4]=r,t[5]=i,t[6]=a):a=t[6],a}function de(e){let t=(0,M.c)(26),{guardrailId:n}=e,[r,i]=(0,re.useState)(``),a=g(),o;t[0]!==a||t[1]!==r||t[2]!==n?(o=async function(){try{await a.mutateAsync({description:r.length>0?r:void 0,guardrailIdentifier:n}),i(``)}catch{}},t[0]=a,t[1]=r,t[2]=n,t[3]=o):o=t[3];let s=o,c,l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,P.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Create version`}),l=(0,P.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:`Snapshots the current DRAFT as a new immutable version.`}),t[4]=c,t[5]=l):(c=t[4],l=t[5]);let u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,P.jsx)(T,{children:(0,P.jsx)(`label`,{htmlFor:`version-description`,children:`Description`})}),t[6]=u):u=t[6];let d;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=e=>{i(e.target.value)},t[7]=d):d=t[7];let f;t[8]===r?f=t[9]:(f=(0,P.jsxs)(E,{children:[u,(0,P.jsx)(p,{id:`version-description`,onChange:d,placeholder:`Optional`,value:r})]}),t[8]=r,t[9]=f);let m;t[10]===s?m=t[11]:(m=()=>{s()},t[10]=s,t[11]=m);let h=a.isPending?`Creating…`:`Create version`,_;t[12]!==a.isPending||t[13]!==m||t[14]!==h?(_=(0,P.jsx)(ee,{className:`mt-3`,disabled:a.isPending,onClick:m,size:`sm`,children:h}),t[12]=a.isPending,t[13]=m,t[14]=h,t[15]=_):_=t[15];let v;t[16]===a.error?v=t[17]:(v=a.error&&(0,P.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:a.error.message}),t[16]=a.error,t[17]=v);let y;t[18]!==a.data||t[19]!==a.isSuccess?(y=a.isSuccess&&(0,P.jsxs)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:[`Version `,a.data.version,` created.`]}),t[18]=a.data,t[19]=a.isSuccess,t[20]=y):y=t[20];let b;return t[21]!==v||t[22]!==y||t[23]!==f||t[24]!==_?(b=(0,P.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[c,l,f,_,v,y]}),t[21]=v,t[22]=y,t[23]=f,t[24]=_,t[25]=b):b=t[25],b}function z(e){let t=(0,M.c)(98),{guardrailId:n}=e,r=s(),[i,p]=(0,re.useState)(!1),m;t[0]===n?m=t[1]:(m=v(n),t[0]=n,t[1]=m);let{data:h}=a(m),g;t[2]===n?g=t[3]:(g=y(n),t[2]=n,t[3]=g);let{data:b}=a(g),x=_(),S;t[4]===b.guardrails?S=t[5]:(S=b.guardrails??[],t[4]=b.guardrails,t[5]=S);let C=S,te;t[6]===h.topicPolicy?.topics?te=t[7]:(te=h.topicPolicy?.topics??[],t[6]=h.topicPolicy?.topics,t[7]=te);let T=te,E;t[8]!==x||t[9]!==n||t[10]!==r?(E=async function(){try{await x.mutateAsync(n),p(!1),await r({to:`/bedrock/list-guardrails`})}catch{}},t[8]=x,t[9]=n,t[10]=r,t[11]=E):E=t[11];let ne=E,j;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,P.jsx)(l,{to:`/bedrock/list-guardrails`,children:`Back to guardrails`}),t[12]=j):j=t[12];let N;t[13]===h.status?N=t[14]:(N=(0,P.jsx)(A,{state:h.status}),t[13]=h.status,t[14]=N);let ie;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(ie=f({size:`sm`,variant:`outline`}),t[15]=ie):ie=t[15];let F;t[16]===n?F=t[17]:(F={guardrailId:n},t[16]=n,t[17]=F);let ae;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,P.jsx)(u,{className:`size-4`}),t[18]=ae):ae=t[18];let I;t[19]===F?I=t[20]:(I=(0,P.jsxs)(o,{className:ie,params:F,to:`/bedrock/list-guardrails/$guardrailId/edit`,children:[ae,`Edit`]}),t[19]=F,t[20]=I);let oe;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(oe=()=>{p(!0)},t[21]=oe):oe=t[21];let ce;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(ce=(0,P.jsxs)(ee,{onClick:oe,size:`sm`,variant:`destructive`,children:[(0,P.jsx)(d,{className:`size-4`}),`Delete`]}),t[22]=ce):ce=t[22];let L;t[23]!==I||t[24]!==N?(L=(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[N,I,ce]}),t[23]=I,t[24]=N,t[25]=L):L=t[25];let le=h.name??n,R;t[26]!==L||t[27]!==le?(R=(0,P.jsx)(w,{actions:L,subtitle:`Guardrail Details`,title:le}),t[26]=L,t[27]=le,t[28]=R):R=t[28];let ue;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,P.jsx)(O.Header,{children:`Guardrail Information`}),t[29]=ue):ue=t[29];let z;t[30]===h.guardrailId?z=t[31]:(z=(0,P.jsx)(k,{label:`Guardrail ID`,value:h.guardrailId}),t[30]=h.guardrailId,t[31]=z);let B;t[32]===h.guardrailArn?B=t[33]:(B=(0,P.jsx)(k,{label:`ARN`,value:h.guardrailArn}),t[32]=h.guardrailArn,t[33]=B);let V;t[34]===h.version?V=t[35]:(V=(0,P.jsx)(k,{label:`Version`,value:h.version}),t[34]=h.version,t[35]=V);let me=h.description??`-`,H;t[36]===me?H=t[37]:(H=(0,P.jsx)(k,{label:`Description`,value:me}),t[36]=me,t[37]=H);let U;t[38]===h.createdAt?U=t[39]:(U=c(h.createdAt),t[38]=h.createdAt,t[39]=U);let W;t[40]===U?W=t[41]:(W=(0,P.jsx)(k,{label:`Created`,value:U}),t[40]=U,t[41]=W);let G;t[42]===h.updatedAt?G=t[43]:(G=c(h.updatedAt),t[42]=h.updatedAt,t[43]=G);let K;t[44]===G?K=t[45]:(K=(0,P.jsx)(k,{label:`Updated`,value:G}),t[44]=G,t[45]=K);let he;t[46]===h.statusReasons?he=t[47]:(he=h.statusReasons&&h.statusReasons.length>0&&(0,P.jsx)(k,{label:`Status Reasons`,value:h.statusReasons.join(`; `)}),t[46]=h.statusReasons,t[47]=he);let q;t[48]!==z||t[49]!==B||t[50]!==V||t[51]!==H||t[52]!==W||t[53]!==K||t[54]!==he?(q=(0,P.jsxs)(O,{children:[ue,(0,P.jsxs)(O.Content,{children:[z,B,V,H,W,K,he]})]}),t[48]=z,t[49]=B,t[50]=V,t[51]=H,t[52]=W,t[53]=K,t[54]=he,t[55]=q):q=t[55];let ge;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(ge=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Denied topics`}),t[56]=ge):ge=t[56];let J;t[57]===T?J=t[58]:(J=(0,P.jsxs)(`div`,{children:[ge,T.length>0?(0,P.jsx)(`div`,{className:`space-y-2`,children:T.map(pe)}):(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`No topic policy configured for this guardrail.`})]}),t[57]=T,t[58]=J);let _e;t[59]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Other policies`}),t[59]=_e):_e=t[59];let ve=(h.wordPolicy?.words?.length??0)>0||(h.wordPolicy?.managedWordLists?.length??0)>0?`configured`:`not configured`,Y;t[60]===ve?Y=t[61]:(Y=(0,P.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-1 text-xs`,children:[`Word policy:`,` `,ve]}),t[60]=ve,t[61]=Y);let ye=(h.sensitiveInformationPolicy?.piiEntities?.length??0)>0||(h.sensitiveInformationPolicy?.regexes?.length??0)>0?`configured`:`not configured`,X;t[62]===ye?X=t[63]:(X=(0,P.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-1 text-xs`,children:[`Sensitive information policy:`,` `,ye]}),t[62]=ye,t[63]=X);let Z;t[64]!==Y||t[65]!==X?(Z=(0,P.jsxs)(`div`,{children:[_e,(0,P.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[Y,X]})]}),t[64]=Y,t[65]=X,t[66]=Z):Z=t[66];let be;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(be=(0,P.jsx)(`h2`,{className:`mb-3 font-semibold`,children:`Versions`}),t[67]=be):be=t[67];let xe;t[68]===C?xe=t[69]:(xe=(0,P.jsxs)(`div`,{children:[be,C.length>0?(0,P.jsx)(`div`,{className:`space-y-2`,children:C.map(fe)}):(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`No versions found for this guardrail.`})]}),t[68]=C,t[69]=xe);let Q;t[70]===n?Q=t[71]:(Q=(0,P.jsx)(de,{guardrailId:n}),t[70]=n,t[71]=Q);let Se=h.version??`DRAFT`,Ce;t[72]!==n||t[73]!==Se?(Ce=(0,P.jsx)(se,{guardrailId:n,guardrailVersion:Se}),t[72]=n,t[73]=Se,t[74]=Ce):Ce=t[74];let we;t[75]!==R||t[76]!==q||t[77]!==J||t[78]!==Z||t[79]!==xe||t[80]!==Q||t[81]!==Ce?(we=(0,P.jsxs)(`div`,{className:`space-y-6`,children:[R,q,J,Z,xe,Q,Ce]}),t[75]=R,t[76]=q,t[77]=J,t[78]=Z,t[79]=xe,t[80]=Q,t[81]=Ce,t[82]=we):we=t[82];let Te=`This tears down "${h.name??n}" and all of its versions. It cannot be undone.`,Ee;t[83]===x.error?Ee=t[84]:(Ee=x.error&&(0,P.jsx)(`span`,{className:`mt-2 block text-destructive`,children:x.error.message}),t[83]=x.error,t[84]=Ee);let De;t[85]!==Te||t[86]!==Ee?(De=(0,P.jsxs)(P.Fragment,{children:[Te,Ee]}),t[85]=Te,t[86]=Ee,t[87]=De):De=t[87];let Oe;t[88]===ne?Oe=t[89]:(Oe=()=>{ne()},t[88]=ne,t[89]=Oe);let $;t[90]!==x.isPending||t[91]!==i||t[92]!==De||t[93]!==Oe?($=(0,P.jsx)(D,{description:De,isPending:x.isPending,onConfirm:Oe,onOpenChange:p,open:i,title:`Delete Guardrail`}),t[90]=x.isPending,t[91]=i,t[92]=De,t[93]=Oe,t[94]=$):$=t[94];let ke;return t[95]!==we||t[96]!==$?(ke=(0,P.jsxs)(P.Fragment,{children:[j,we,$]}),t[95]=we,t[96]=$,t[97]=ke):ke=t[97],ke}function fe(e){return(0,P.jsx)(ue,{version:e},e.version)}function pe(e){return(0,P.jsx)(le,{topic:e},e.name)}function B(){let e=(0,M.c)(2),{guardrailId:t}=C.useParams(),n;return e[0]===t?n=e[1]:(n=(0,P.jsx)(z,{guardrailId:t}),e[0]=t,e[1]=n),n}export{B as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-gNwMyQy3.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-gNwMyQy3.js new file mode 100644 index 000000000..a8d53d316 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_guardrailId.index-gNwMyQy3.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_guardrailId.index-DgiT87X2.js","assets/compiler-runtime-D_vZfn79.js","assets/useMutation-6rdxVQpi.js","assets/removable-Dwr9otKB.js","assets/mutation-BziiWz5u.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/pencil-BhhTGjjd.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/bedrock-ktyVzA00.js","assets/commandBuilder-D0AzsM22.js","assets/bedrock-BF8FfWcf.js","assets/queryOptions-Dfvzj6n2.js","assets/commandBuilder-D669HwKx.js","assets/page-heading-vksh_67w.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{n as r,r as i}from"./bedrock-BF8FfWcf.js";var a=e(`/_auth/bedrock/(guardrails)/list-guardrails/$guardrailId/`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.guardrailId),staleTime:`static`}),e.queryClient.query({...i(t.guardrailId),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.guardrailId} | Guardrail | Mulga`}]}),component:t(()=>n(()=>import(`./_guardrailId.index-DgiT87X2.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id--x_QHBJa.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id--x_QHBJa.js deleted file mode 100644 index da3daeed2..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id--x_QHBJa.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DMT7VmB9.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DhWukC79.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{C as i}from"./ec2-CWEplLq4.js";var a={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};a.node;var o=r(a),s=e(`/_auth/ec2/(security-groups)/describe-security-groups/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...i(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | Security Group | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DMT7VmB9.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47])),`component`)});export{o as n,s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-1XMcJG7p.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-1XMcJG7p.js deleted file mode 100644 index 839c9bacf..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-1XMcJG7p.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DtrBrF9B.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{g as r}from"./ec2-CWEplLq4.js";var i=e(`/_auth/ec2/(nat-gateways)/describe-nat-gateways/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | NAT Gateway | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DtrBrF9B.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-98ZkQ3qn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-98ZkQ3qn.js new file mode 100644 index 000000000..dd62836bd --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-98ZkQ3qn.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DZbN2hXo.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{D as r}from"./ec2-DYgBhYCJ.js";var i=e(`/_auth/ec2/(subnet)/describe-subnets/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | Subnet | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DZbN2hXo.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B-3dqH3s.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B-3dqH3s.js new file mode 100644 index 000000000..9d8ddb04e --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B-3dqH3s.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CQqSp1m-.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/badge-6vbuGFqk.js","assets/useRender-C4GZPWLS.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DqNqPeiA.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{O as r,_ as i,d as a,x as o}from"./ec2-DYgBhYCJ.js";var s=e(`/_auth/ec2/(route-tables)/describe-route-tables/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...o(t.id),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Route Table | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CQqSp1m-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJy6boRC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B4WLpFz6.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJy6boRC.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B4WLpFz6.js index f6a8b1b49..691ccecb5 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJy6boRC.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B4WLpFz6.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./back-link-CjKy1JE5.js";import{c as l,i as u,n as d,s as f,t as p}from"./select-B01jpDaX.js";import{t as m}from"./trash-DVab4pEz.js";import{t as h}from"./button-BarTr35m.js";import{t as g}from"./input-6kdUb_DH.js";import{h as _,m as v}from"./ec2-CWEplLq4.js";import{A as y,Y as b,g as ee,k as x}from"./ec2-Ctto2xjU.js";import{t as te}from"./_id-UPy9yakk.js";import{t as ne}from"./page-heading-vksh_67w.js";import{t as S}from"./badge-B_ExXcw2.js";import{i as C,t as w}from"./zod-DF_n2ejy.js";import{t as T}from"./error-banner-DeOeVBKS.js";import{s as E,t as D}from"./field-c7GHI5st.js";import{t as re}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{c as A}from"./ec2-DhWukC79.js";import{t as j}from"./launch-template-data-fields-BXmKXe0L.js";var M={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};M.node;var N=s(M),P={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]};P.node;var F=s(P),I=t(n()),L=e();function R(e){if(!e)return``;try{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;et.LaunchTemplateId===e),G=(s.LaunchTemplateVersions??[]).toSorted((e,t)=>(t.VersionNumber??0)-(e.VersionNumber??0)),{control:K,handleSubmit:q,register:J,getValues:Y,reset:X,formState:{errors:ie,isSubmitting:Z}}=C({resolver:w(A),defaultValues:{versionDescription:``,...B}});if(!W?.LaunchTemplateId)return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(c,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),(0,L.jsx)(`p`,{className:`text-muted-foreground`,children:`Launch template not found.`})]});let Q=W.DefaultVersionNumber,ae=e=>{if(e===`none`){X({...Y(),sourceVersion:void 0,...B});return}let t=G.find(t=>String(t.VersionNumber)===e);X({...Y(),sourceVersion:e,...z(t?.LaunchTemplateData)})},oe=async t=>{await M.mutateAsync({launchTemplateId:e,defaultVersion:String(t)})},se=async t=>{await P.mutateAsync({launchTemplateId:e,versions:[String(t)]})},ce=async()=>{try{await R.mutateAsync(e),t({to:`/ec2/describe-launch-templates`})}finally{U(!1)}},le=async t=>{await V.mutateAsync({...t,launchTemplateId:e}),X({versionDescription:``,sourceVersion:void 0,...B})},$=M.error??P.error;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(c,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),R.error&&(0,L.jsx)(T,{error:R.error,msg:`Failed to delete launch template`}),(0,L.jsxs)(`div`,{className:`space-y-6`,children:[(0,L.jsx)(ne,{actions:(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsxs)(h,{disabled:R.isPending,onClick:()=>{U(!0)},size:`sm`,variant:`destructive`,children:[(0,L.jsx)(m,{className:`size-4`}),`Delete`]}),(0,L.jsxs)(S,{variant:`secondary`,children:[`default v`,Q]})]}),subtitle:`Launch Template Details`,title:W.LaunchTemplateName??W.LaunchTemplateId}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Launch Template Information`}),(0,L.jsxs)(O.Content,{children:[(0,L.jsx)(k,{label:`Launch Template ID`,value:W.LaunchTemplateId}),(0,L.jsx)(k,{label:`Name`,value:W.LaunchTemplateName}),(0,L.jsx)(k,{label:`Default Version`,value:String(W.DefaultVersionNumber)}),(0,L.jsx)(k,{label:`Latest Version`,value:String(W.LatestVersionNumber)}),(0,L.jsx)(k,{label:`Created`,value:o(W.CreateTime)})]})]}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Versions`}),(0,L.jsxs)(`div`,{className:`space-y-4 p-4`,children:[$&&(0,L.jsx)(T,{error:$,msg:`Failed to update version`}),(0,L.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,L.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,L.jsx)(`thead`,{className:`bg-muted/50 text-left text-muted-foreground`,children:(0,L.jsxs)(`tr`,{children:[(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Version`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Description`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Default`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Created`}),(0,L.jsx)(`th`,{className:`p-2`,children:(0,L.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,L.jsx)(`tbody`,{children:G.map(t=>{let n=t.VersionNumber,r=n===Q;return(0,L.jsxs)(`tr`,{className:`border-t`,children:[(0,L.jsx)(`td`,{className:`p-2 font-mono`,children:n}),(0,L.jsx)(`td`,{className:`p-2`,children:t.VersionDescription??`—`}),(0,L.jsx)(`td`,{className:`p-2`,children:r?(0,L.jsx)(S,{variant:`secondary`,children:`Default`}):`—`}),(0,L.jsx)(`td`,{className:`p-2`,children:o(t.CreateTime)}),(0,L.jsx)(`td`,{className:`p-2`,children:(0,L.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,L.jsx)(i,{search:{launchTemplateId:e,launchTemplateVersion:String(n)},to:`/ec2/run-instances`,children:(0,L.jsxs)(h,{size:`sm`,variant:`ghost`,children:[(0,L.jsx)(N,{className:`size-4`}),`Launch`]})}),!r&&n!==void 0&&(0,L.jsxs)(h,{disabled:M.isPending,onClick:async()=>{await oe(n)},size:`sm`,variant:`ghost`,children:[(0,L.jsx)(F,{className:`size-4`}),`Set default`]}),(0,L.jsx)(h,{disabled:r||P.isPending||n===void 0,onClick:async()=>{n!==void 0&&await se(n)},size:`sm`,variant:`ghost`,children:(0,L.jsx)(m,{className:`size-4`})})]})})]},n)})})]})})]})]}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Create Version`}),(0,L.jsxs)(`div`,{className:`p-4`,children:[V.error&&(0,L.jsx)(T,{error:V.error,msg:`Failed to create version`}),(0,L.jsxs)(`form`,{className:`space-y-6`,onSubmit:q(le),children:[(0,L.jsxs)(D,{children:[(0,L.jsx)(E,{children:(0,L.jsx)(`label`,{htmlFor:`sourceVersion`,children:`Clone from version`})}),(0,L.jsxs)(p,{onValueChange:e=>{ae(e??`none`)},value:Y(`sourceVersion`)??`none`,children:[(0,L.jsx)(f,{className:`w-full`,id:`sourceVersion`,children:(0,L.jsx)(l,{})}),(0,L.jsxs)(d,{children:[(0,L.jsx)(u,{value:`none`,children:`none (start blank)`}),G.map(e=>(0,L.jsxs)(u,{value:String(e.VersionNumber),children:[`v`,e.VersionNumber,e.VersionDescription?` — ${e.VersionDescription}`:``]},e.VersionNumber))]})]})]}),(0,L.jsxs)(D,{children:[(0,L.jsx)(E,{children:(0,L.jsx)(`label`,{htmlFor:`versionDescription`,children:`Version Description`})}),(0,L.jsx)(g,{id:`versionDescription`,placeholder:`What changed in this version`,...J(`versionDescription`)})]}),(0,L.jsx)(j,{control:K,errors:ie,register:J}),(0,L.jsx)(h,{disabled:Z||V.isPending,type:`submit`,children:Z||V.isPending?`Creating…`:`Create Version`})]})]})]})]}),(0,L.jsx)(re,{description:`Are you sure you want to delete the launch template "${W.LaunchTemplateName??W.LaunchTemplateId}"? All versions will be deleted. This action cannot be undone.`,isPending:R.isPending,onConfirm:ce,onOpenChange:U,open:H,title:`Delete Launch Template`})]})}export{V as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./back-link-wsXUoJ12.js";import{c as l,i as u,n as d,s as f,t as p}from"./select-Cn66OoPn.js";import{t as m}from"./trash-DVab4pEz.js";import{t as h}from"./button-qf9lLJ2x.js";import{t as g}from"./input-D3aUBtS6.js";import{h as _,m as v}from"./ec2-DYgBhYCJ.js";import{A as y,Y as b,g as ee,k as x}from"./ec2-Csn1kwZ8.js";import{t as te}from"./_id-DpdFBQia.js";import{t as ne}from"./page-heading-vksh_67w.js";import{t as S}from"./badge-6vbuGFqk.js";import{i as C,t as w}from"./zod-A4qtKH_p.js";import{t as T}from"./error-banner-DeOeVBKS.js";import{s as E,t as D}from"./field-CS-ql6du.js";import{t as re}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{c as A}from"./ec2-DqNqPeiA.js";import{t as j}from"./launch-template-data-fields-PZ1Q44UQ.js";var M={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};M.node;var N=s(M),P={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]};P.node;var F=s(P),I=t(n()),L=e();function R(e){if(!e)return``;try{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;et.LaunchTemplateId===e),G=(s.LaunchTemplateVersions??[]).toSorted((e,t)=>(t.VersionNumber??0)-(e.VersionNumber??0)),{control:K,handleSubmit:q,register:J,getValues:Y,reset:X,formState:{errors:ie,isSubmitting:Z}}=C({resolver:w(A),defaultValues:{versionDescription:``,...B}});if(!W?.LaunchTemplateId)return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(c,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),(0,L.jsx)(`p`,{className:`text-muted-foreground`,children:`Launch template not found.`})]});let Q=W.DefaultVersionNumber,ae=e=>{if(e===`none`){X({...Y(),sourceVersion:void 0,...B});return}let t=G.find(t=>String(t.VersionNumber)===e);X({...Y(),sourceVersion:e,...z(t?.LaunchTemplateData)})},oe=async t=>{await M.mutateAsync({launchTemplateId:e,defaultVersion:String(t)})},se=async t=>{await P.mutateAsync({launchTemplateId:e,versions:[String(t)]})},ce=async()=>{try{await R.mutateAsync(e),t({to:`/ec2/describe-launch-templates`})}finally{U(!1)}},le=async t=>{await V.mutateAsync({...t,launchTemplateId:e}),X({versionDescription:``,sourceVersion:void 0,...B})},$=M.error??P.error;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(c,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),R.error&&(0,L.jsx)(T,{error:R.error,msg:`Failed to delete launch template`}),(0,L.jsxs)(`div`,{className:`space-y-6`,children:[(0,L.jsx)(ne,{actions:(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsxs)(h,{disabled:R.isPending,onClick:()=>{U(!0)},size:`sm`,variant:`destructive`,children:[(0,L.jsx)(m,{className:`size-4`}),`Delete`]}),(0,L.jsxs)(S,{variant:`secondary`,children:[`default v`,Q]})]}),subtitle:`Launch Template Details`,title:W.LaunchTemplateName??W.LaunchTemplateId}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Launch Template Information`}),(0,L.jsxs)(O.Content,{children:[(0,L.jsx)(k,{label:`Launch Template ID`,value:W.LaunchTemplateId}),(0,L.jsx)(k,{label:`Name`,value:W.LaunchTemplateName}),(0,L.jsx)(k,{label:`Default Version`,value:String(W.DefaultVersionNumber)}),(0,L.jsx)(k,{label:`Latest Version`,value:String(W.LatestVersionNumber)}),(0,L.jsx)(k,{label:`Created`,value:o(W.CreateTime)})]})]}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Versions`}),(0,L.jsxs)(`div`,{className:`space-y-4 p-4`,children:[$&&(0,L.jsx)(T,{error:$,msg:`Failed to update version`}),(0,L.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,L.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,L.jsx)(`thead`,{className:`bg-muted/50 text-left text-muted-foreground`,children:(0,L.jsxs)(`tr`,{children:[(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Version`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Description`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Default`}),(0,L.jsx)(`th`,{className:`p-2 font-medium`,children:`Created`}),(0,L.jsx)(`th`,{className:`p-2`,children:(0,L.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,L.jsx)(`tbody`,{children:G.map(t=>{let n=t.VersionNumber,r=n===Q;return(0,L.jsxs)(`tr`,{className:`border-t`,children:[(0,L.jsx)(`td`,{className:`p-2 font-mono`,children:n}),(0,L.jsx)(`td`,{className:`p-2`,children:t.VersionDescription??`—`}),(0,L.jsx)(`td`,{className:`p-2`,children:r?(0,L.jsx)(S,{variant:`secondary`,children:`Default`}):`—`}),(0,L.jsx)(`td`,{className:`p-2`,children:o(t.CreateTime)}),(0,L.jsx)(`td`,{className:`p-2`,children:(0,L.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,L.jsx)(i,{search:{launchTemplateId:e,launchTemplateVersion:String(n)},to:`/ec2/run-instances`,children:(0,L.jsxs)(h,{size:`sm`,variant:`ghost`,children:[(0,L.jsx)(N,{className:`size-4`}),`Launch`]})}),!r&&n!==void 0&&(0,L.jsxs)(h,{disabled:M.isPending,onClick:async()=>{await oe(n)},size:`sm`,variant:`ghost`,children:[(0,L.jsx)(F,{className:`size-4`}),`Set default`]}),(0,L.jsx)(h,{disabled:r||P.isPending||n===void 0,onClick:async()=>{n!==void 0&&await se(n)},size:`sm`,variant:`ghost`,children:(0,L.jsx)(m,{className:`size-4`})})]})})]},n)})})]})})]})]}),(0,L.jsxs)(O,{children:[(0,L.jsx)(O.Header,{children:`Create Version`}),(0,L.jsxs)(`div`,{className:`p-4`,children:[V.error&&(0,L.jsx)(T,{error:V.error,msg:`Failed to create version`}),(0,L.jsxs)(`form`,{className:`space-y-6`,onSubmit:q(le),children:[(0,L.jsxs)(D,{children:[(0,L.jsx)(E,{children:(0,L.jsx)(`label`,{htmlFor:`sourceVersion`,children:`Clone from version`})}),(0,L.jsxs)(p,{onValueChange:e=>{ae(e??`none`)},value:Y(`sourceVersion`)??`none`,children:[(0,L.jsx)(f,{className:`w-full`,id:`sourceVersion`,children:(0,L.jsx)(l,{})}),(0,L.jsxs)(d,{children:[(0,L.jsx)(u,{value:`none`,children:`none (start blank)`}),G.map(e=>(0,L.jsxs)(u,{value:String(e.VersionNumber),children:[`v`,e.VersionNumber,e.VersionDescription?` — ${e.VersionDescription}`:``]},e.VersionNumber))]})]})]}),(0,L.jsxs)(D,{children:[(0,L.jsx)(E,{children:(0,L.jsx)(`label`,{htmlFor:`versionDescription`,children:`Version Description`})}),(0,L.jsx)(g,{id:`versionDescription`,placeholder:`What changed in this version`,...J(`versionDescription`)})]}),(0,L.jsx)(j,{control:K,errors:ie,register:J}),(0,L.jsx)(h,{disabled:Z||V.isPending,type:`submit`,children:Z||V.isPending?`Creating…`:`Create Version`})]})]})]})]}),(0,L.jsx)(re,{description:`Are you sure you want to delete the launch template "${W.LaunchTemplateName??W.LaunchTemplateId}"? All versions will be deleted. This action cannot be undone.`,isPending:R.isPending,onConfirm:ce,onOpenChange:U,open:H,title:`Delete Launch Template`})]})}export{V as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bk7BwvKZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BITDLGQb.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bk7BwvKZ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BITDLGQb.js index 1b49af773..ca91534f5 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bk7BwvKZ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BITDLGQb.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{in as ee,ln as te}from"./cluster-config-xw_Q7X1e.js";import{t as ne}from"./back-link-CjKy1JE5.js";import{t as re}from"./camera-bmANKZ8M.js";import{t as ie}from"./pencil-BhhTGjjd.js";import{t as ae}from"./cli-command-panel-CLiFy1rG.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{t as u}from"./input-6kdUb_DH.js";import{w as d}from"./ec2-CWEplLq4.js";import{S as oe,a as f,c as se,d as ce,f as le,l as ue,m as de,p as fe,u as pe}from"./rds-CE3126Ga.js";import{d as p,l as m,m as h,p as me}from"./rds-BkKLEWPo.js";import{c as he,d as ge,l as _e,n as g,o as ve,s as ye,t as _}from"./rds-CyiqRExv.js";import{t as v}from"./_id-BY8BuAtk.js";import{t as be}from"./page-heading-vksh_67w.js";import{a as xe,i as y,n as Se,t as Ce}from"./zod-DF_n2ejy.js";import{t as we}from"./error-banner-DeOeVBKS.js";import{t as b}from"./form-actions-BUM37An0.js";import{n as Te,r as Ee,s as De,t as x}from"./field-c7GHI5st.js";import{a as Oe,i as S,l as ke,s as Ae,t as je}from"./alert-dialog-kCQ1W4Rz.js";import{n as C,t as w}from"./detail-row-DNBRlVeK.js";import{t as Me}from"./state-badge-D1Z6q_OA.js";import{i as T,n as Ne,r as Pe,t as Fe}from"./tabs-t6sDAEVZ.js";import{n as Ie,t as Le}from"./picker-notice-tK9XfUSR.js";import{a as Re,o as ze,s as Be,t as Ve}from"./security-group-checkboxes-BkxIRro9.js";import{t as He}from"./create-db-snapshot-dialog-CiBeyQ69.js";import{t as Ue}from"./delete-db-snapshot-dialog-D3b3mehr.js";import{t as We}from"./rds-events-panel-Di-44bfP.js";import{t as Ge}from"./rds-tags-tab-CD2X7nDN.js";import{t as Ke}from"./delete-db-instance-dialog-BdhZGMA5.js";var E=t(n(),1),qe=r(),D=e(),Je=[{label:`Identifier`,note:`The identifier is the endpoint hostname and the certificate subject; renaming in place is not implemented.`},{label:`Engine version`,note:`There is no in-place engine-version upgrade.`},{label:`Port`,note:`The port is fixed at create; changing it would break every client and the serving certificate.`},{label:`DB subnet group`,note:`The endpoint ENI is placed at create; moving it would change the address clients resolve.`}];function O(e){let t=(0,qe.c)(222),{open:n,onOpenChange:r,instance:a}=e,o=m(),s=i(ge),ee=i(d),te=i(ve),ne=a.Engine??``,re;t[0]===ne?re=t[1]:(re=_e(ne),t[0]=ne,t[1]=re);let ie=i(re),ae=a.DBInstanceIdentifier??``,c=a.AllocatedStorage??0,l;t[2]===a.VpcSecurityGroups?l=t[3]:(l=a.VpcSecurityGroups?.map(et).filter(Boolean)??[],t[2]=a.VpcSecurityGroups,t[3]=l);let f=l,se;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(se=Ce(oe),t[4]=se):se=t[4];let ce=a.DBInstanceClass??``,le=a.DBParameterGroups?.[0]?.DBParameterGroupName??``,ue=a.DeletionProtection??!1,de=a.BackupRetentionPeriod??0,fe=a.PreferredBackupWindow??``,pe=a.PreferredMaintenanceWindow??``,p;t[5]!==f||t[6]!==c||t[7]!==pe||t[8]!==ce||t[9]!==le||t[10]!==ue||t[11]!==de||t[12]!==fe?(p={resolver:se,defaultValues:{currentAllocatedStorage:c,dbInstanceClass:ce,allocatedStorage:c,dbParameterGroupName:le,vpcSecurityGroupIds:f,deletionProtection:ue,backupRetentionPeriod:de,preferredBackupWindow:fe,preferredMaintenanceWindow:pe,masterUserPassword:``,applyImmediately:!1}},t[5]=f,t[6]=c,t[7]=pe,t[8]=ce,t[9]=le,t[10]=ue,t[11]=de,t[12]=fe,t[13]=p):p=t[13];let{control:h,formState:me,handleSubmit:he,register:g,setValue:ye}=y(p),{errors:_,isSubmitting:v}=me,be;t[14]===h?be=t[15]:(be={control:h},t[14]=h,t[15]=be);let C=xe(be),w=C.dbInstanceClass??``,Me=C.allocatedStorage??c,T;t[16]===C.vpcSecurityGroupIds?T=t[17]:(T=C.vpcSecurityGroupIds??[],t[16]=C.vpcSecurityGroupIds,t[17]=T);let Ne=T,Pe;t[18]===ie.data?.OrderableDBInstanceOptions?Pe=t[19]:(Pe=ie.data?.OrderableDBInstanceOptions??[],t[18]=ie.data?.OrderableDBInstanceOptions,t[19]=Pe);let Fe;t[20]===Pe?Fe=t[21]:(Fe=new Set(Pe.map($e).filter(Boolean)),t[20]=Pe,t[21]=Fe);let He;t[22]===Fe?He=t[23]:(He=[...Fe],t[22]=Fe,t[23]=He);let Ue=He,We,Ge,Ke,E,O,k,tt,nt,A,rt,it,at,ot,st,ct,lt,j,M,ut,N;if(t[24]!==h||t[25]!==c||t[26]!==te.data?.DBEngineVersions||t[27]!==_.allocatedStorage||t[28]!==he||t[29]!==ae||t[30]!==a.DBInstanceClass||t[31]!==a.DBSubnetGroup?.VpcId||t[32]!==a.Engine||t[33]!==Ue||t[34]!==o||t[35]!==r||t[36]!==n||t[37]!==ie||t[38]!==s||t[39]!==g||t[40]!==ee||t[41]!==w||t[42]!==Me||t[43]!==ye){let e;t[64]===s.data?.DBParameterGroups?e=t[65]:(e=s.data?.DBParameterGroups??[],t[64]=s.data?.DBParameterGroups,t[65]=e);let i;t[66]===te.data?.DBEngineVersions?i=t[67]:(i=te.data?.DBEngineVersions??[],t[66]=te.data?.DBEngineVersions,t[67]=i);let ne=Be(e,i,a.Engine??``),re=a.DBSubnetGroup?.VpcId,l;t[68]===ee.data?.SecurityGroups?l=t[69]:(l=ee.data?.SecurityGroups??[],t[68]=ee.data?.SecurityGroups,t[69]=l);let d;if(t[70]!==re||t[71]!==l){let e;t[73]===re?e=t[74]:(e=e=>re===void 0||e.VpcId===re,t[73]=re,t[74]=e),d=l.filter(e),t[70]=re,t[71]=l,t[72]=d}else d=t[72];O=d;let oe=w!==a.DBInstanceClass,f=Me!==c,se=Ue.length===0,ce=`No instance class this cluster's nodes can run is available for ${a.Engine}.`,le;t[75]!==ie||t[76]!==se||t[77]!==ce?(le=Ie(ie,se,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:ce}),t[75]=ie,t[76]=se,t[77]=ce,t[78]=le):le=t[78];let ue=le,de=ne.length===0,fe;t[79]!==s||t[80]!==de?(fe=Ie(s,de,{loading:`Loading the parameter groups…`,failed:`Could not read the parameter groups`,empty:`No parameter group of this instance's engine family exists.`}),t[79]=s,t[80]=de,t[81]=fe):fe=t[81];let pe=fe,p=O.length===0,m;t[82]!==ee||t[83]!==p?(m=Ie(ee,p,{loading:`Loading the security groups…`,failed:`Could not read the security groups`,empty:`No security group in this instance's VPC is available.`}),t[82]=ee,t[83]=p,t[84]=m):m=t[84],E=m;let me;t[85]===ye?me=t[86]:(me=e=>{ye(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},t[85]=ye,t[86]=me),k=me;let ge;t[87]!==ae||t[88]!==o||t[89]!==r?(ge=async e=>{await o.mutateAsync({...e,dbInstanceIdentifier:ae}),r(!1)},t[87]=ae,t[88]=o,t[89]=r,t[90]=ge):ge=t[90];let _e=ge;Ke=je,ut=r,N=n,Ge=S,j=`max-h-[85vh] overflow-y-auto`;let ve;t[91]===ae?ve=t[92]:(ve=(0,D.jsxs)(ke,{children:[`Modify `,ae]}),t[91]=ae,t[92]=ve);let v;t[93]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,D.jsx)(Oe,{children:`Changes apply in the maintenance window unless you apply them immediately.`}),t[93]=v):v=t[93],t[94]===ve?M=t[95]:(M=(0,D.jsxs)(Ae,{children:[ve,v]}),t[94]=ve,t[95]=M),ot=`space-y-4`,t[96]!==he||t[97]!==_e?(st=he(_e),t[96]=he,t[97]=_e,t[98]=st):st=t[98];let be;t[99]===Ue?be=t[100]:(be=Ue.map(Qe),t[99]=Ue,t[100]=be);let xe=oe&&`Changing the class replaces the VM. The database is unavailable while it does.`;t[101]!==ue||t[102]!==h||t[103]!==be||t[104]!==xe?(ct=(0,D.jsx)(ze,{control:h,id:`modify-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:ue,options:be,placeholder:`Select an instance class`,warning:xe}),t[101]=ue,t[102]=h,t[103]=be,t[104]=xe,t[105]=ct):ct=t[105];let y;t[106]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-storage`,children:`Allocated storage (GiB)`})}),t[106]=y):y=t[106];let Se=!!_.allocatedStorage,Ce;t[107]===g?Ce=t[108]:(Ce=g(`allocatedStorage`,{valueAsNumber:!0}),t[107]=g,t[108]=Ce);let we;t[109]!==c||t[110]!==Se||t[111]!==Ce?(we=(0,D.jsx)(u,{"aria-invalid":Se,id:`modify-storage`,min:c,type:`number`,...Ce}),t[109]=c,t[110]=Se,t[111]=Ce,t[112]=we):we=t[112];let b;t[113]===c?b=t[114]:(b=(0,D.jsxs)(Te,{children:[`Currently `,c,` GiB. Storage grows only.`]}),t[113]=c,t[114]=b);let C;t[115]===f?C=t[116]:(C=f&&(0,D.jsx)(`p`,{className:`text-xs text-tactical-amber`,children:`Growing storage stops and starts the instance to extend the filesystem.`}),t[115]=f,t[116]=C);let T;t[117]===_.allocatedStorage?T=t[118]:(T=(0,D.jsx)(Ee,{errors:[_.allocatedStorage]}),t[117]=_.allocatedStorage,t[118]=T),t[119]!==we||t[120]!==b||t[121]!==C||t[122]!==T?(lt=(0,D.jsxs)(x,{children:[y,we,b,C,T]}),t[119]=we,t[120]=b,t[121]=C,t[122]=T,t[123]=lt):lt=t[123],We=ze,tt=h,nt=`modify-parameter-group`,A=`DB parameter group`,rt=`dbParameterGroupName`,it=pe,at=ne.map(Ze),t[24]=h,t[25]=c,t[26]=te.data?.DBEngineVersions,t[27]=_.allocatedStorage,t[28]=he,t[29]=ae,t[30]=a.DBInstanceClass,t[31]=a.DBSubnetGroup?.VpcId,t[32]=a.Engine,t[33]=Ue,t[34]=o,t[35]=r,t[36]=n,t[37]=ie,t[38]=s,t[39]=g,t[40]=ee,t[41]=w,t[42]=Me,t[43]=ye,t[44]=We,t[45]=Ge,t[46]=Ke,t[47]=E,t[48]=O,t[49]=k,t[50]=tt,t[51]=nt,t[52]=A,t[53]=rt,t[54]=it,t[55]=at,t[56]=ot,t[57]=st,t[58]=ct,t[59]=lt,t[60]=j,t[61]=M,t[62]=ut,t[63]=N}else We=t[44],Ge=t[45],Ke=t[46],E=t[47],O=t[48],k=t[49],tt=t[50],nt=t[51],A=t[52],rt=t[53],it=t[54],at=t[55],ot=t[56],st=t[57],ct=t[58],lt=t[59],j=t[60],M=t[61],ut=t[62],N=t[63];let P;t[124]!==We||t[125]!==tt||t[126]!==nt||t[127]!==A||t[128]!==rt||t[129]!==it||t[130]!==at?(P=(0,D.jsx)(We,{control:tt,id:nt,label:A,name:rt,notice:it,options:at,placeholder:`Engine default group`}),t[124]=We,t[125]=tt,t[126]=nt,t[127]=A,t[128]=rt,t[129]=it,t[130]=at,t[131]=P):P=t[131];let dt;t[132]===Symbol.for(`react.memo_cache_sentinel`)?(dt=(0,D.jsx)(De,{children:`VPC security groups`}),t[132]=dt):dt=t[132];let F;t[133]!==E||t[134]!==O||t[135]!==Ne||t[136]!==k?(F=(0,D.jsxs)(x,{children:[dt,E?(0,D.jsx)(Le,{notice:E}):(0,D.jsx)(Ve,{emptyText:`No security group in this instance's VPC is available.`,groups:O,onChange:k,selected:Ne})]}),t[133]=E,t[134]=O,t[135]=Ne,t[136]=k,t[137]=F):F=t[137];let ft;t[138]===Symbol.for(`react.memo_cache_sentinel`)?(ft=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-retention`,children:`Backup retention (days)`})}),t[138]=ft):ft=t[138];let pt=!!_.backupRetentionPeriod,mt;t[139]===g?mt=t[140]:(mt=g(`backupRetentionPeriod`,{valueAsNumber:!0}),t[139]=g,t[140]=mt);let I;t[141]!==pt||t[142]!==mt?(I=(0,D.jsx)(u,{"aria-invalid":pt,id:`modify-retention`,max:7,min:0,type:`number`,...mt}),t[141]=pt,t[142]=mt,t[143]=I):I=t[143];let L;t[144]===_.backupRetentionPeriod?L=t[145]:(L=(0,D.jsx)(Ee,{errors:[_.backupRetentionPeriod]}),t[144]=_.backupRetentionPeriod,t[145]=L);let R;t[146]!==I||t[147]!==L?(R=(0,D.jsxs)(x,{children:[ft,I,L]}),t[146]=I,t[147]=L,t[148]=R):R=t[148];let z;t[149]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-backup-window`,children:`Preferred backup window`})}),t[149]=z):z=t[149];let ht=!!_.preferredBackupWindow,B;t[150]===g?B=t[151]:(B=g(`preferredBackupWindow`),t[150]=g,t[151]=B);let V;t[152]!==ht||t[153]!==B?(V=(0,D.jsx)(u,{"aria-invalid":ht,id:`modify-backup-window`,placeholder:`hh24:mi-hh24:mi in UTC`,...B}),t[152]=ht,t[153]=B,t[154]=V):V=t[154];let H;t[155]===_.preferredBackupWindow?H=t[156]:(H=(0,D.jsx)(Ee,{errors:[_.preferredBackupWindow]}),t[155]=_.preferredBackupWindow,t[156]=H);let U;t[157]!==V||t[158]!==H?(U=(0,D.jsxs)(x,{children:[z,V,H]}),t[157]=V,t[158]=H,t[159]=U):U=t[159];let W;t[160]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-maintenance-window`,children:`Preferred maintenance window`})}),t[160]=W):W=t[160];let G=!!_.preferredMaintenanceWindow,K;t[161]===g?K=t[162]:(K=g(`preferredMaintenanceWindow`),t[161]=g,t[162]=K);let q;t[163]!==G||t[164]!==K?(q=(0,D.jsx)(u,{"aria-invalid":G,id:`modify-maintenance-window`,placeholder:`ddd:hh24:mi-ddd:hh24:mi in UTC`,...K}),t[163]=G,t[164]=K,t[165]=q):q=t[165];let J;t[166]===_.preferredMaintenanceWindow?J=t[167]:(J=(0,D.jsx)(Ee,{errors:[_.preferredMaintenanceWindow]}),t[166]=_.preferredMaintenanceWindow,t[167]=J);let Y;t[168]!==q||t[169]!==J?(Y=(0,D.jsxs)(x,{children:[W,q,J]}),t[168]=q,t[169]=J,t[170]=Y):Y=t[170];let X;t[171]===Symbol.for(`react.memo_cache_sentinel`)?(X=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-password`,children:`Reset master password`})}),t[171]=X):X=t[171];let gt=!!_.masterUserPassword,Z;t[172]===g?Z=t[173]:(Z=g(`masterUserPassword`),t[172]=g,t[173]=Z);let Q;t[174]!==gt||t[175]!==Z?(Q=(0,D.jsx)(u,{"aria-invalid":gt,id:`modify-password`,type:`password`,...Z}),t[174]=gt,t[175]=Z,t[176]=Q):Q=t[176];let _t;t[177]===Symbol.for(`react.memo_cache_sentinel`)?(_t=(0,D.jsx)(Te,{children:`Leave blank to keep the current password.`}),t[177]=_t):_t=t[177];let $;t[178]===_.masterUserPassword?$=t[179]:($=(0,D.jsx)(Ee,{errors:[_.masterUserPassword]}),t[178]=_.masterUserPassword,t[179]=$);let vt;t[180]!==Q||t[181]!==$?(vt=(0,D.jsxs)(x,{children:[X,Q,_t,$]}),t[180]=Q,t[181]=$,t[182]=vt):vt=t[182];let yt;t[183]===h?yt=t[184]:(yt=(0,D.jsx)(Re,{control:h,name:`deletionProtection`}),t[183]=h,t[184]=yt);let bt;t[185]===Symbol.for(`react.memo_cache_sentinel`)?(bt=(0,D.jsx)(De,{children:`Apply immediately`}),t[185]=bt):bt=t[185];let xt;t[186]===h?xt=t[187]:(xt=(0,D.jsxs)(x,{children:[bt,(0,D.jsx)(Se,{control:h,name:`applyImmediately`,render:Xe})]}),t[186]=h,t[187]=xt);let St;t[188]===Symbol.for(`react.memo_cache_sentinel`)?(St=(0,D.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-3`,children:[(0,D.jsx)(`h3`,{className:`text-xs font-medium`,children:`Fixed at create`}),Je.map(Ye)]}),t[188]=St):St=t[188];let Ct;t[189]===o.error?Ct=t[190]:(Ct=o.error&&(0,D.jsx)(we,{error:o.error,msg:`Failed to modify the DB instance`}),t[189]=o.error,t[190]=Ct);let wt;t[191]===r?wt=t[192]:(wt=()=>{r(!1)},t[191]=r,t[192]=wt);let Tt;t[193]!==v||t[194]!==o.isPending||t[195]!==wt?(Tt=(0,D.jsx)(`div`,{className:`flex justify-end`,children:(0,D.jsx)(b,{isPending:o.isPending,isSubmitting:v,onCancel:wt,pendingLabel:`Saving…`,submitLabel:`Save Changes`})}),t[193]=v,t[194]=o.isPending,t[195]=wt,t[196]=Tt):Tt=t[196];let Et;t[197]!==ot||t[198]!==st||t[199]!==ct||t[200]!==lt||t[201]!==P||t[202]!==F||t[203]!==R||t[204]!==U||t[205]!==Y||t[206]!==vt||t[207]!==yt||t[208]!==xt||t[209]!==Ct||t[210]!==Tt?(Et=(0,D.jsxs)(`form`,{className:ot,onSubmit:st,children:[ct,lt,P,F,R,U,Y,vt,yt,xt,St,Ct,Tt]}),t[197]=ot,t[198]=st,t[199]=ct,t[200]=lt,t[201]=P,t[202]=F,t[203]=R,t[204]=U,t[205]=Y,t[206]=vt,t[207]=yt,t[208]=xt,t[209]=Ct,t[210]=Tt,t[211]=Et):Et=t[211];let Dt;t[212]!==Ge||t[213]!==j||t[214]!==M||t[215]!==Et?(Dt=(0,D.jsxs)(Ge,{className:j,children:[M,Et]}),t[212]=Ge,t[213]=j,t[214]=M,t[215]=Et,t[216]=Dt):Dt=t[216];let Ot;return t[217]!==Ke||t[218]!==ut||t[219]!==N||t[220]!==Dt?(Ot=(0,D.jsx)(Ke,{onOpenChange:ut,open:N,children:Dt}),t[217]=Ke,t[218]=ut,t[219]=N,t[220]=Dt,t[221]=Ot):Ot=t[221],Ot}function Ye(e){return(0,D.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,D.jsx)(`span`,{className:`font-medium`,children:e.label}),` —`,` `,e.note]},e.label)}function Xe(e){let{field:t}=e;return(0,D.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,D.jsx)(`input`,{"aria-label":`Apply immediately`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),(0,D.jsx)(`span`,{children:`Apply now instead of waiting for the maintenance window`})]})}function Ze(e){return{value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``}}function Qe(e){return{value:e,label:e}}function $e(e){return e.DBInstanceClass??``}function et(e){return e.VpcSecurityGroupId??``}function k(e,t){return e.EventCategories?.includes(t)??!1}function tt(e,t){return e.filter(t).toSorted((e,t)=>(e.Date?.getTime()??0)-(t.Date?.getTime()??0)).at(-1)}function nt(e){let t=e.Endpoint?.Address;if(!t)return[];let n=e.Endpoint?.Port??e.DbInstancePort,r=e.MasterUsername??``,i=e.DBName??r;return e.Engine===`postgres`?[{label:`Connect`,parts:[{type:`bin`,value:`psql`},{type:`value`,value:` "host=${t} port=${n} dbname=${i} user=${r} sslmode=require"`}]}]:[{label:`Connect`,parts:[{type:`bin`,value:`mariadb`},{type:`flag`,value:` --host`},{type:`value`,value:`=${t}`},{type:`flag`,value:` --port`},{type:`value`,value:`=${n}`},{type:`flag`,value:` --user`},{type:`value`,value:`=${r}`},{type:`flag`,value:` --ssl`},{type:`value`,value:` ${i}`}]}]}function A(e){let t=(0,qe.c)(266),{dbInstanceIdentifier:n}=e,r=s(),i;t[0]===n?i=t[1]:(i=g(n),t[0]=n,t[1]=i);let{data:te}=a(i),u=te.DBInstances?.[0],d=u?.DBInstanceArn??``,oe;t[2]===n?oe=t[3]:(oe=ye(n),t[2]=n,t[3]=oe);let{data:f}=a(oe),m;t[4]===n?m=t[5]:(m=he(n),t[4]=n,t[5]=m);let{data:ge}=a(m),_e;t[6]===n?_e=t[7]:(_e=_(n),t[6]=n,t[7]=_e);let{data:ve}=a(_e),v=me(),xe=h(),y=p(),[Se,Ce]=(0,E.useState)(!1),[b,Te]=(0,E.useState)(!1),[Ee,De]=(0,E.useState)(!1),[x,Oe]=(0,E.useState)(null);if(!u?.DBInstanceIdentifier){let e;return t[8]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(ne,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`DB instance not found.`})]}),t[8]=e):e=t[8],e}let S=u.DBInstanceStatus,ke;t[9]===f.Events?ke=t[10]:(ke=f.Events??[],t[9]=f.Events,t[10]=ke);let Ae=ke,je=v.error??xe.error??y.error,Ie,Le,Re,ze,Be,Ve,Je,Ye,Xe,Ze,Qe,$e,et,k,A,j,M,ut,N,P,dt,F,ft,pt,mt,I;if(t[11]!==ve.DBInstanceAutomatedBackups?.[0]||t[12]!==n||t[13]!==Ae||t[14]!==u||t[15]!==je||t[16]!==y||t[17]!==ge.DBSnapshots||t[18]!==v||t[19]!==S||t[20]!==xe){let e=tt(Ae,lt),r=tt(Ae,ct),i;t[47]===ge.DBSnapshots?i=t[48]:(i=ge.DBSnapshots??[],t[47]=ge.DBSnapshots,t[48]=i),Ve=i;let a=Ve.filter(st).toSorted(ot).at(-1),o=ve.DBInstanceAutomatedBackups?.[0],s=u.PendingModifiedValues,te=s?.AllocatedStorage!==void 0||s?.DBInstanceClass!==void 0;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(dt=(0,D.jsx)(ne,{to:`/rds/describe-db-instances`,children:`Back to databases`}),t[49]=dt):dt=t[49],t[50]===je?F=t[51]:(F=je&&(0,D.jsx)(we,{error:je,msg:`Failed to change the DB instance state.`}),t[50]=je,t[51]=F),ut=`space-y-6`;let d;t[52]!==v.isPending||t[53]!==S?(d=!fe(S)||v.isPending,t[52]=v.isPending,t[53]=S,t[54]=d):d=t[54];let oe;t[55]!==n||t[56]!==v?(oe=()=>{v.mutate(n)},t[55]=n,t[56]=v,t[57]=oe):oe=t[57];let f;t[58]!==d||t[59]!==oe?(f=(0,D.jsx)(l,{disabled:d,onClick:oe,size:`sm`,variant:`outline`,children:`Start`}),t[58]=d,t[59]=oe,t[60]=f):f=t[60];let ce;t[61]!==S||t[62]!==xe.isPending?(ce=!de(S)||xe.isPending,t[61]=S,t[62]=xe.isPending,t[63]=ce):ce=t[63];let ue;t[64]!==n||t[65]!==xe?(ue=()=>{xe.mutate(n)},t[64]=n,t[65]=xe,t[66]=ue):ue=t[66];let p;t[67]!==ce||t[68]!==ue?(p=(0,D.jsx)(l,{disabled:ce,onClick:ue,size:`sm`,variant:`outline`,children:`Stop`}),t[67]=ce,t[68]=ue,t[69]=p):p=t[69];let m;t[70]!==y.isPending||t[71]!==S?(m=!pe(S)||y.isPending,t[70]=y.isPending,t[71]=S,t[72]=m):m=t[72];let h;t[73]!==n||t[74]!==y?(h=()=>{y.mutate(n)},t[73]=n,t[74]=y,t[75]=h):h=t[75];let me;t[76]!==m||t[77]!==h?(me=(0,D.jsx)(l,{disabled:m,onClick:h,size:`sm`,variant:`outline`,children:`Reboot`}),t[76]=m,t[77]=h,t[78]=me):me=t[78];let he;t[79]===S?he=t[80]:(he=le(S),t[79]=S,t[80]=he);let _e=!he,g;t[81]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{De(!0)},t[81]=g):g=t[81];let ye;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,D.jsx)(re,{className:`size-4`}),t[82]=ye):ye=t[82];let _;t[83]===_e?_=t[84]:(_=(0,D.jsxs)(l,{disabled:_e,onClick:g,size:`sm`,variant:`outline`,children:[ye,`Take Snapshot`]}),t[83]=_e,t[84]=_);let Se;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(Se=()=>{Te(!0)},t[85]=Se):Se=t[85];let b;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,D.jsxs)(l,{onClick:Se,size:`sm`,variant:`outline`,children:[(0,D.jsx)(ie,{className:`size-4`}),`Modify`]}),t[86]=b):b=t[86];let Ee;t[87]===S?Ee=t[88]:(Ee=se(S),t[87]=S,t[88]=Ee);let x=!Ee,Oe;t[89]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=()=>{Ce(!0)},t[89]=Oe):Oe=t[89];let ke;t[90]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,D.jsx)(c,{className:`size-4`}),t[90]=ke):ke=t[90];let He;t[91]===x?He=t[92]:(He=(0,D.jsxs)(l,{disabled:x,onClick:Oe,size:`sm`,variant:`destructive`,children:[ke,`Delete`]}),t[91]=x,t[92]=He);let Ue;t[93]!==f||t[94]!==p||t[95]!==me||t[96]!==_||t[97]!==He?(Ue=(0,D.jsxs)(`div`,{className:`flex gap-2`,children:[f,p,me,_,b,He]}),t[93]=f,t[94]=p,t[95]=me,t[96]=_,t[97]=He,t[98]=Ue):Ue=t[98],t[99]!==n||t[100]!==Ue?(N=(0,D.jsx)(be,{actions:Ue,subtitle:`DB Instance`,title:n}),t[99]=n,t[100]=Ue,t[101]=N):N=t[101];let We;t[102]===S?We=t[103]:(We=(0,D.jsx)(Me,{state:S}),t[102]=S,t[103]=We);let Ge;t[104]===u.StatusInfos?Ge=t[105]:(Ge=u.StatusInfos?.map(at),t[104]=u.StatusInfos,t[105]=Ge),t[106]!==We||t[107]!==Ge?(P=(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[We,Ge]}),t[106]=We,t[107]=Ge,t[108]=P):P=t[108],Be=Fe,k=`connectivity`,t[109]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,D.jsxs)(Ne,{children:[(0,D.jsx)(T,{value:`connectivity`,children:`Connectivity`}),(0,D.jsx)(T,{value:`configuration`,children:`Configuration`}),(0,D.jsx)(T,{value:`backups`,children:`Backups`}),(0,D.jsx)(T,{value:`tags`,children:`Tags`}),(0,D.jsx)(T,{value:`events`,children:`Events`})]}),t[109]=A):A=t[109];let Ke;t[110]===Symbol.for(`react.memo_cache_sentinel`)?(Ke=(0,D.jsx)(C.Header,{children:`Endpoint`}),t[110]=Ke):Ke=t[110];let E=u.Endpoint?.Address,qe;t[111]===E?qe=t[112]:(qe=(0,D.jsx)(w,{label:`Address`,value:E}),t[111]=E,t[112]=qe);let O;t[113]!==u.DbInstancePort||t[114]!==u.Endpoint?.Port?(O=(u.Endpoint?.Port??u.DbInstancePort)?.toString(),t[113]=u.DbInstancePort,t[114]=u.Endpoint?.Port,t[115]=O):O=t[115];let L;t[116]===O?L=t[117]:(L=(0,D.jsx)(w,{label:`Port`,value:O}),t[116]=O,t[117]=L);let R=u.DBSubnetGroup?.VpcId,z;t[118]===R?z=t[119]:(z=(0,D.jsx)(w,{label:`VPC`,value:R}),t[118]=R,t[119]=z);let ht=u.DBSubnetGroup?.DBSubnetGroupName,B;t[120]===ht?B=t[121]:(B=(0,D.jsx)(w,{label:`DB subnet group`,value:ht}),t[120]=ht,t[121]=B);let V;t[122]===u.VpcSecurityGroups?V=t[123]:(V=u.VpcSecurityGroups?.map(it).join(`, `),t[122]=u.VpcSecurityGroups,t[123]=V);let H;t[124]===V?H=t[125]:(H=(0,D.jsx)(w,{label:`Security groups`,value:V}),t[124]=V,t[125]=H);let U;t[126]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,D.jsx)(w,{label:`Publicly accessible`,value:`No — private VPC address`}),t[126]=U):U=t[126];let W;t[127]!==qe||t[128]!==L||t[129]!==z||t[130]!==B||t[131]!==H?(W=(0,D.jsxs)(C,{children:[Ke,(0,D.jsxs)(C.Content,{children:[qe,L,z,B,H,U]})]}),t[127]=qe,t[128]=L,t[129]=z,t[130]=B,t[131]=H,t[132]=W):W=t[132];let G;t[133]===u?G=t[134]:(G=nt(u),t[133]=u,t[134]=G);let K;t[135]===G?K=t[136]:(K=(0,D.jsx)(ae,{commands:G}),t[135]=G,t[136]=K),t[137]!==W||t[138]!==K?(j=(0,D.jsx)(Pe,{value:`connectivity`,children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[W,K]})}),t[137]=W,t[138]=K,t[139]=j):j=t[139];let q;t[140]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,D.jsx)(C.Header,{children:`Configuration`}),t[140]=q):q=t[140];let J;t[141]===u.Engine?J=t[142]:(J=(0,D.jsx)(w,{label:`Engine`,value:u.Engine}),t[141]=u.Engine,t[142]=J);let Y;t[143]===u.EngineVersion?Y=t[144]:(Y=(0,D.jsx)(w,{label:`Version`,value:u.EngineVersion}),t[143]=u.EngineVersion,t[144]=Y);let X;t[145]===u.DBInstanceClass?X=t[146]:(X=(0,D.jsx)(w,{label:`Instance class`,value:u.DBInstanceClass}),t[145]=u.DBInstanceClass,t[146]=X);let gt=u.AllocatedStorage?`${u.AllocatedStorage} GiB`:void 0,Z;t[147]===gt?Z=t[148]:(Z=(0,D.jsx)(w,{label:`Allocated storage`,value:gt}),t[147]=gt,t[148]=Z);let Q;t[149]===u.StorageType?Q=t[150]:(Q=(0,D.jsx)(w,{label:`Storage type`,value:u.StorageType}),t[149]=u.StorageType,t[150]=Q);let _t=u.StorageEncrypted?`Encrypted — always on`:`Not encrypted`,$;t[151]===_t?$=t[152]:($=(0,D.jsx)(w,{label:`Encryption`,value:_t}),t[151]=_t,t[152]=$);let vt;t[153]===u.DBParameterGroups?vt=t[154]:(vt=u.DBParameterGroups?.map(rt).join(`, `),t[153]=u.DBParameterGroups,t[154]=vt);let yt;t[155]===vt?yt=t[156]:(yt=(0,D.jsx)(w,{label:`Parameter group`,value:vt}),t[155]=vt,t[156]=yt);let bt;t[157]===u.MasterUsername?bt=t[158]:(bt=(0,D.jsx)(w,{label:`Master username`,value:u.MasterUsername}),t[157]=u.MasterUsername,t[158]=bt);let xt;t[159]===u.DBName?xt=t[160]:(xt=(0,D.jsx)(w,{label:`Initial database`,value:u.DBName}),t[159]=u.DBName,t[160]=xt);let St=u.DeletionProtection?`On`:`Off`,Ct;t[161]===St?Ct=t[162]:(Ct=(0,D.jsx)(w,{label:`Deletion protection`,value:St}),t[161]=St,t[162]=Ct);let wt;t[163]===u.InstanceCreateTime?wt=t[164]:(wt=ee(u.InstanceCreateTime),t[163]=u.InstanceCreateTime,t[164]=wt);let Tt;t[165]===wt?Tt=t[166]:(Tt=(0,D.jsx)(w,{label:`Created`,value:wt}),t[165]=wt,t[166]=Tt);let Et;t[167]!==J||t[168]!==Y||t[169]!==X||t[170]!==Z||t[171]!==Q||t[172]!==$||t[173]!==yt||t[174]!==bt||t[175]!==xt||t[176]!==Ct||t[177]!==Tt?(Et=(0,D.jsxs)(C,{children:[q,(0,D.jsxs)(C.Content,{children:[J,Y,X,Z,Q,$,yt,bt,xt,Ct,Tt]})]}),t[167]=J,t[168]=Y,t[169]=X,t[170]=Z,t[171]=Q,t[172]=$,t[173]=yt,t[174]=bt,t[175]=xt,t[176]=Ct,t[177]=Tt,t[178]=Et):Et=t[178];let Dt;t[179]!==te||t[180]!==s?(Dt=te&&(0,D.jsxs)(C,{children:[(0,D.jsx)(C.Header,{children:`Pending Changes`}),(0,D.jsxs)(C.Content,{children:[(0,D.jsx)(w,{label:`Instance class`,value:s?.DBInstanceClass}),(0,D.jsx)(w,{label:`Allocated storage`,value:s?.AllocatedStorage?`${s.AllocatedStorage} GiB`:void 0})]})]}),t[179]=te,t[180]=s,t[181]=Dt):Dt=t[181],t[182]!==Et||t[183]!==Dt?(M=(0,D.jsx)(Pe,{value:`configuration`,children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[Et,Dt]})}),t[182]=Et,t[183]=Dt,t[184]=M):M=t[184],ze=Pe,et=`backups`,Ze=`space-y-4`,Qe=e&&(0,D.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`alert`,children:[(0,D.jsx)(`p`,{className:`font-medium`,children:`An automated backup failed`}),(0,D.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.Message,` (`,ee(e.Date),`)`]})]}),$e=r&&(0,D.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`alert`,children:[(0,D.jsx)(`p`,{className:`font-medium`,children:`A backup raised a warning`}),(0,D.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[r.Message,` (`,ee(r.Date),`)`]})]}),Re=C,t[185]===Symbol.for(`react.memo_cache_sentinel`)?(Xe=(0,D.jsx)(C.Header,{children:`Automated Backups`}),t[185]=Xe):Xe=t[185],Le=C.Content;let Ot=u.BackupRetentionPeriod===0?`Disabled`:`${u.BackupRetentionPeriod} days`;t[186]===Ot?mt=t[187]:(mt=(0,D.jsx)(w,{label:`Retention`,value:Ot}),t[186]=Ot,t[187]=mt);let kt=o?.Status??`None — automated backups are off`;t[188]===kt?I=t[189]:(I=(0,D.jsx)(w,{label:`Status`,value:kt}),t[188]=kt,t[189]=I),t[190]===u.PreferredBackupWindow?Je=t[191]:(Je=(0,D.jsx)(w,{label:`Preferred backup window`,value:u.PreferredBackupWindow}),t[190]=u.PreferredBackupWindow,t[191]=Je),t[192]===u.PreferredMaintenanceWindow?Ye=t[193]:(Ye=(0,D.jsx)(w,{label:`Preferred maintenance window`,value:u.PreferredMaintenanceWindow}),t[192]=u.PreferredMaintenanceWindow,t[193]=Ye),Ie=w,ft=`Last backup`,pt=a?.SnapshotCreateTime&&ee(a.SnapshotCreateTime),t[11]=ve.DBInstanceAutomatedBackups?.[0],t[12]=n,t[13]=Ae,t[14]=u,t[15]=je,t[16]=y,t[17]=ge.DBSnapshots,t[18]=v,t[19]=S,t[20]=xe,t[21]=Ie,t[22]=Le,t[23]=Re,t[24]=ze,t[25]=Be,t[26]=Ve,t[27]=Je,t[28]=Ye,t[29]=Xe,t[30]=Ze,t[31]=Qe,t[32]=$e,t[33]=et,t[34]=k,t[35]=A,t[36]=j,t[37]=M,t[38]=ut,t[39]=N,t[40]=P,t[41]=dt,t[42]=F,t[43]=ft,t[44]=pt,t[45]=mt,t[46]=I}else Ie=t[21],Le=t[22],Re=t[23],ze=t[24],Be=t[25],Ve=t[26],Je=t[27],Ye=t[28],Xe=t[29],Ze=t[30],Qe=t[31],$e=t[32],et=t[33],k=t[34],A=t[35],j=t[36],M=t[37],ut=t[38],N=t[39],P=t[40],dt=t[41],F=t[42],ft=t[43],pt=t[44],mt=t[45],I=t[46];let L;t[194]!==Ie||t[195]!==ft||t[196]!==pt?(L=(0,D.jsx)(Ie,{label:ft,value:pt}),t[194]=Ie,t[195]=ft,t[196]=pt,t[197]=L):L=t[197];let R;t[198]!==Le||t[199]!==Je||t[200]!==Ye||t[201]!==L||t[202]!==mt||t[203]!==I?(R=(0,D.jsxs)(Le,{children:[mt,I,Je,Ye,L]}),t[198]=Le,t[199]=Je,t[200]=Ye,t[201]=L,t[202]=mt,t[203]=I,t[204]=R):R=t[204];let z;t[205]!==Re||t[206]!==Xe||t[207]!==R?(z=(0,D.jsxs)(Re,{children:[Xe,R]}),t[205]=Re,t[206]=Xe,t[207]=R,t[208]=z):z=t[208];let ht;t[209]===Symbol.for(`react.memo_cache_sentinel`)?(ht=(0,D.jsx)(`h3`,{className:`text-sm font-medium`,children:`Snapshots`}),t[209]=ht):ht=t[209];let B;t[210]!==r||t[211]!==Ve?(B=(0,D.jsxs)(`div`,{className:`space-y-2`,children:[ht,Ve.length>0?(0,D.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,D.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,D.jsx)(`thead`,{children:(0,D.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,D.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,D.jsx)(`tbody`,{children:Ve.map(e=>{let t=e.DBSnapshotIdentifier;return t?(0,D.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,D.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,D.jsx)(o,{className:`text-primary hover:underline`,params:{id:t},to:`/rds/describe-db-snapshots/$id`,children:t})}),(0,D.jsx)(`td`,{className:`px-4 py-2`,children:e.SnapshotType}),(0,D.jsx)(`td`,{className:`px-4 py-2`,children:(0,D.jsx)(Me,{state:e.Status})}),(0,D.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:ee(e.SnapshotCreateTime)}),(0,D.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,D.jsx)(l,{disabled:!ce(e.Status),onClick:async()=>{await r({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:t}})},size:`sm`,variant:`outline`,children:`Restore`}),(0,D.jsx)(l,{disabled:!ue(e.Status,e.SnapshotType),onClick:()=>{Oe(t)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},t):null})})]})}):(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`No snapshots of this instance.`})]}),t[210]=r,t[211]=Ve,t[212]=B):B=t[212];let V;t[213]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,D.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Automated backups are daily snapshots taken in the backup window, deleted by retention rather than by hand. There is no point-in-time restore.`}),t[213]=V):V=t[213];let H;t[214]!==Ze||t[215]!==Qe||t[216]!==$e||t[217]!==z||t[218]!==B?(H=(0,D.jsxs)(`div`,{className:Ze,children:[Qe,$e,z,B,V]}),t[214]=Ze,t[215]=Qe,t[216]=$e,t[217]=z,t[218]=B,t[219]=H):H=t[219];let U;t[220]!==ze||t[221]!==et||t[222]!==H?(U=(0,D.jsx)(ze,{value:et,children:H}),t[220]=ze,t[221]=et,t[222]=H,t[223]=U):U=t[223];let W;t[224]===d?W=t[225]:(W=(0,D.jsx)(Pe,{value:`tags`,children:(0,D.jsx)(Ge,{arn:d})}),t[224]=d,t[225]=W);let G;t[226]===Ae?G=t[227]:(G=(0,D.jsx)(Pe,{value:`events`,children:(0,D.jsx)(We,{events:Ae})}),t[226]=Ae,t[227]=G);let K;t[228]!==Be||t[229]!==k||t[230]!==A||t[231]!==j||t[232]!==M||t[233]!==U||t[234]!==W||t[235]!==G?(K=(0,D.jsxs)(Be,{defaultValue:k,children:[A,j,M,U,W,G]}),t[228]=Be,t[229]=k,t[230]=A,t[231]=j,t[232]=M,t[233]=U,t[234]=W,t[235]=G,t[236]=K):K=t[236];let q;t[237]!==ut||t[238]!==N||t[239]!==P||t[240]!==K?(q=(0,D.jsxs)(`div`,{className:ut,children:[N,P,K]}),t[237]=ut,t[238]=N,t[239]=P,t[240]=K,t[241]=q):q=t[241];let J;t[242]!==u||t[243]!==b?(J=b&&(0,D.jsx)(O,{instance:u,onOpenChange:Te,open:!0}),t[242]=u,t[243]=b,t[244]=J):J=t[244];let Y;t[245]!==n||t[246]!==Ee?(Y=Ee&&(0,D.jsx)(He,{dbInstanceIdentifier:n,onOpenChange:De,open:!0}),t[245]=n,t[246]=Ee,t[247]=Y):Y=t[247];let X;t[248]===x?X=t[249]:(X=x&&(0,D.jsx)(Ue,{dbSnapshotIdentifier:x,onOpenChange:e=>{e||Oe(null)},open:!0}),t[248]=x,t[249]=X);let gt=u.DeletionProtection??!1,Z;t[250]===r?Z=t[251]:(Z=async()=>{await r({to:`/rds/describe-db-instances`})},t[250]=r,t[251]=Z);let Q;t[252]===Symbol.for(`react.memo_cache_sentinel`)?(Q=()=>{Ce(!1),Te(!0)},t[252]=Q):Q=t[252];let _t;t[253]!==n||t[254]!==Se||t[255]!==gt||t[256]!==Z?(_t=(0,D.jsx)(Ke,{dbInstanceIdentifier:n,deletionProtection:gt,onDeleted:Z,onModify:Q,onOpenChange:Ce,open:Se}),t[253]=n,t[254]=Se,t[255]=gt,t[256]=Z,t[257]=_t):_t=t[257];let $;return t[258]!==dt||t[259]!==F||t[260]!==q||t[261]!==J||t[262]!==Y||t[263]!==X||t[264]!==_t?($=(0,D.jsxs)(D.Fragment,{children:[dt,F,q,J,Y,X,_t]}),t[258]=dt,t[259]=F,t[260]=q,t[261]=J,t[262]=Y,t[263]=X,t[264]=_t,t[265]=$):$=t[265],$}function rt(e){return`${e.DBParameterGroupName} (${e.ParameterApplyStatus})`}function it(e){return e.VpcSecurityGroupId}function at(e){return(0,D.jsxs)(`span`,{className:`text-xs text-tactical-amber`,children:[e.StatusType,`: `,e.Message??e.Status]},`${e.StatusType}-${e.Status}`)}function ot(e,t){return(e.SnapshotCreateTime?.getTime()??0)-(t.SnapshotCreateTime?.getTime()??0)}function st(e){return e.SnapshotType===f}function ct(e){return k(e,`backup`)&&k(e,`notification`)}function lt(e){return k(e,`backup`)&&k(e,`failure`)}function j(){let e=(0,qe.c)(4),{id:t}=v.useParams(),n;e[0]===t?n=e[1]:(n=te(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,D.jsx)(A,{dbInstanceIdentifier:n}),e[2]=n,e[3]=r),r}export{j as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{an as ee,un as te}from"./cluster-config-DkOiY8HH.js";import{t as ne}from"./back-link-wsXUoJ12.js";import{t as re}from"./camera-bmANKZ8M.js";import{t as ie}from"./pencil-BhhTGjjd.js";import{t as ae}from"./cli-command-panel-DavMY-tN.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{t as u}from"./input-D3aUBtS6.js";import{w as d}from"./ec2-DYgBhYCJ.js";import{S as oe,a as f,c as se,d as ce,f as le,l as ue,m as de,p as fe,u as pe}from"./rds-DIuGt87z.js";import{d as p,l as m,m as h,p as me}from"./rds-DbPUva_R.js";import{c as he,d as ge,l as _e,n as g,o as ve,s as ye,t as _}from"./rds-Ca8CaJkU.js";import{t as v}from"./_id-D_-BlrQG.js";import{t as be}from"./page-heading-vksh_67w.js";import{a as xe,i as y,n as Se,t as Ce}from"./zod-A4qtKH_p.js";import{t as we}from"./error-banner-DeOeVBKS.js";import{t as b}from"./form-actions-DXvy9CQI.js";import{n as Te,r as Ee,s as De,t as x}from"./field-CS-ql6du.js";import{a as Oe,i as S,l as ke,s as Ae,t as je}from"./alert-dialog-jxylPXwR.js";import{n as C,t as w}from"./detail-row-DNBRlVeK.js";import{t as Me}from"./state-badge-pn00UE1d.js";import{i as T,n as Ne,r as Pe,t as Fe}from"./tabs-BMSqRmVw.js";import{n as Ie,t as Le}from"./picker-notice-tK9XfUSR.js";import{a as Re,o as ze,s as Be,t as Ve}from"./security-group-checkboxes-DFjvW5uT.js";import{t as He}from"./create-db-snapshot-dialog-5YPk6G0l.js";import{t as Ue}from"./delete-db-snapshot-dialog-elwW83vt.js";import{t as We}from"./rds-events-panel-BwYPSAd5.js";import{t as Ge}from"./rds-tags-tab-cQPAmoTz.js";import{t as Ke}from"./delete-db-instance-dialog-lxcaswKe.js";var E=t(n(),1),qe=r(),D=e(),Je=[{label:`Identifier`,note:`The identifier is the endpoint hostname and the certificate subject; renaming in place is not implemented.`},{label:`Engine version`,note:`There is no in-place engine-version upgrade.`},{label:`Port`,note:`The port is fixed at create; changing it would break every client and the serving certificate.`},{label:`DB subnet group`,note:`The endpoint ENI is placed at create; moving it would change the address clients resolve.`}];function O(e){let t=(0,qe.c)(222),{open:n,onOpenChange:r,instance:a}=e,o=m(),s=i(ge),ee=i(d),te=i(ve),ne=a.Engine??``,re;t[0]===ne?re=t[1]:(re=_e(ne),t[0]=ne,t[1]=re);let ie=i(re),ae=a.DBInstanceIdentifier??``,c=a.AllocatedStorage??0,l;t[2]===a.VpcSecurityGroups?l=t[3]:(l=a.VpcSecurityGroups?.map(et).filter(Boolean)??[],t[2]=a.VpcSecurityGroups,t[3]=l);let f=l,se;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(se=Ce(oe),t[4]=se):se=t[4];let ce=a.DBInstanceClass??``,le=a.DBParameterGroups?.[0]?.DBParameterGroupName??``,ue=a.DeletionProtection??!1,de=a.BackupRetentionPeriod??0,fe=a.PreferredBackupWindow??``,pe=a.PreferredMaintenanceWindow??``,p;t[5]!==f||t[6]!==c||t[7]!==pe||t[8]!==ce||t[9]!==le||t[10]!==ue||t[11]!==de||t[12]!==fe?(p={resolver:se,defaultValues:{currentAllocatedStorage:c,dbInstanceClass:ce,allocatedStorage:c,dbParameterGroupName:le,vpcSecurityGroupIds:f,deletionProtection:ue,backupRetentionPeriod:de,preferredBackupWindow:fe,preferredMaintenanceWindow:pe,masterUserPassword:``,applyImmediately:!1}},t[5]=f,t[6]=c,t[7]=pe,t[8]=ce,t[9]=le,t[10]=ue,t[11]=de,t[12]=fe,t[13]=p):p=t[13];let{control:h,formState:me,handleSubmit:he,register:g,setValue:ye}=y(p),{errors:_,isSubmitting:v}=me,be;t[14]===h?be=t[15]:(be={control:h},t[14]=h,t[15]=be);let C=xe(be),w=C.dbInstanceClass??``,Me=C.allocatedStorage??c,T;t[16]===C.vpcSecurityGroupIds?T=t[17]:(T=C.vpcSecurityGroupIds??[],t[16]=C.vpcSecurityGroupIds,t[17]=T);let Ne=T,Pe;t[18]===ie.data?.OrderableDBInstanceOptions?Pe=t[19]:(Pe=ie.data?.OrderableDBInstanceOptions??[],t[18]=ie.data?.OrderableDBInstanceOptions,t[19]=Pe);let Fe;t[20]===Pe?Fe=t[21]:(Fe=new Set(Pe.map($e).filter(Boolean)),t[20]=Pe,t[21]=Fe);let He;t[22]===Fe?He=t[23]:(He=[...Fe],t[22]=Fe,t[23]=He);let Ue=He,We,Ge,Ke,E,O,k,tt,nt,A,rt,it,at,ot,st,ct,lt,j,M,ut,N;if(t[24]!==h||t[25]!==c||t[26]!==te.data?.DBEngineVersions||t[27]!==_.allocatedStorage||t[28]!==he||t[29]!==ae||t[30]!==a.DBInstanceClass||t[31]!==a.DBSubnetGroup?.VpcId||t[32]!==a.Engine||t[33]!==Ue||t[34]!==o||t[35]!==r||t[36]!==n||t[37]!==ie||t[38]!==s||t[39]!==g||t[40]!==ee||t[41]!==w||t[42]!==Me||t[43]!==ye){let e;t[64]===s.data?.DBParameterGroups?e=t[65]:(e=s.data?.DBParameterGroups??[],t[64]=s.data?.DBParameterGroups,t[65]=e);let i;t[66]===te.data?.DBEngineVersions?i=t[67]:(i=te.data?.DBEngineVersions??[],t[66]=te.data?.DBEngineVersions,t[67]=i);let ne=Be(e,i,a.Engine??``),re=a.DBSubnetGroup?.VpcId,l;t[68]===ee.data?.SecurityGroups?l=t[69]:(l=ee.data?.SecurityGroups??[],t[68]=ee.data?.SecurityGroups,t[69]=l);let d;if(t[70]!==re||t[71]!==l){let e;t[73]===re?e=t[74]:(e=e=>re===void 0||e.VpcId===re,t[73]=re,t[74]=e),d=l.filter(e),t[70]=re,t[71]=l,t[72]=d}else d=t[72];O=d;let oe=w!==a.DBInstanceClass,f=Me!==c,se=Ue.length===0,ce=`No instance class this cluster's nodes can run is available for ${a.Engine}.`,le;t[75]!==ie||t[76]!==se||t[77]!==ce?(le=Ie(ie,se,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:ce}),t[75]=ie,t[76]=se,t[77]=ce,t[78]=le):le=t[78];let ue=le,de=ne.length===0,fe;t[79]!==s||t[80]!==de?(fe=Ie(s,de,{loading:`Loading the parameter groups…`,failed:`Could not read the parameter groups`,empty:`No parameter group of this instance's engine family exists.`}),t[79]=s,t[80]=de,t[81]=fe):fe=t[81];let pe=fe,p=O.length===0,m;t[82]!==ee||t[83]!==p?(m=Ie(ee,p,{loading:`Loading the security groups…`,failed:`Could not read the security groups`,empty:`No security group in this instance's VPC is available.`}),t[82]=ee,t[83]=p,t[84]=m):m=t[84],E=m;let me;t[85]===ye?me=t[86]:(me=e=>{ye(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},t[85]=ye,t[86]=me),k=me;let ge;t[87]!==ae||t[88]!==o||t[89]!==r?(ge=async e=>{await o.mutateAsync({...e,dbInstanceIdentifier:ae}),r(!1)},t[87]=ae,t[88]=o,t[89]=r,t[90]=ge):ge=t[90];let _e=ge;Ke=je,ut=r,N=n,Ge=S,j=`max-h-[85vh] overflow-y-auto`;let ve;t[91]===ae?ve=t[92]:(ve=(0,D.jsxs)(ke,{children:[`Modify `,ae]}),t[91]=ae,t[92]=ve);let v;t[93]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,D.jsx)(Oe,{children:`Changes apply in the maintenance window unless you apply them immediately.`}),t[93]=v):v=t[93],t[94]===ve?M=t[95]:(M=(0,D.jsxs)(Ae,{children:[ve,v]}),t[94]=ve,t[95]=M),ot=`space-y-4`,t[96]!==he||t[97]!==_e?(st=he(_e),t[96]=he,t[97]=_e,t[98]=st):st=t[98];let be;t[99]===Ue?be=t[100]:(be=Ue.map(Qe),t[99]=Ue,t[100]=be);let xe=oe&&`Changing the class replaces the VM. The database is unavailable while it does.`;t[101]!==ue||t[102]!==h||t[103]!==be||t[104]!==xe?(ct=(0,D.jsx)(ze,{control:h,id:`modify-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:ue,options:be,placeholder:`Select an instance class`,warning:xe}),t[101]=ue,t[102]=h,t[103]=be,t[104]=xe,t[105]=ct):ct=t[105];let y;t[106]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-storage`,children:`Allocated storage (GiB)`})}),t[106]=y):y=t[106];let Se=!!_.allocatedStorage,Ce;t[107]===g?Ce=t[108]:(Ce=g(`allocatedStorage`,{valueAsNumber:!0}),t[107]=g,t[108]=Ce);let we;t[109]!==c||t[110]!==Se||t[111]!==Ce?(we=(0,D.jsx)(u,{"aria-invalid":Se,id:`modify-storage`,min:c,type:`number`,...Ce}),t[109]=c,t[110]=Se,t[111]=Ce,t[112]=we):we=t[112];let b;t[113]===c?b=t[114]:(b=(0,D.jsxs)(Te,{children:[`Currently `,c,` GiB. Storage grows only.`]}),t[113]=c,t[114]=b);let C;t[115]===f?C=t[116]:(C=f&&(0,D.jsx)(`p`,{className:`text-xs text-tactical-amber`,children:`Growing storage stops and starts the instance to extend the filesystem.`}),t[115]=f,t[116]=C);let T;t[117]===_.allocatedStorage?T=t[118]:(T=(0,D.jsx)(Ee,{errors:[_.allocatedStorage]}),t[117]=_.allocatedStorage,t[118]=T),t[119]!==we||t[120]!==b||t[121]!==C||t[122]!==T?(lt=(0,D.jsxs)(x,{children:[y,we,b,C,T]}),t[119]=we,t[120]=b,t[121]=C,t[122]=T,t[123]=lt):lt=t[123],We=ze,tt=h,nt=`modify-parameter-group`,A=`DB parameter group`,rt=`dbParameterGroupName`,it=pe,at=ne.map(Ze),t[24]=h,t[25]=c,t[26]=te.data?.DBEngineVersions,t[27]=_.allocatedStorage,t[28]=he,t[29]=ae,t[30]=a.DBInstanceClass,t[31]=a.DBSubnetGroup?.VpcId,t[32]=a.Engine,t[33]=Ue,t[34]=o,t[35]=r,t[36]=n,t[37]=ie,t[38]=s,t[39]=g,t[40]=ee,t[41]=w,t[42]=Me,t[43]=ye,t[44]=We,t[45]=Ge,t[46]=Ke,t[47]=E,t[48]=O,t[49]=k,t[50]=tt,t[51]=nt,t[52]=A,t[53]=rt,t[54]=it,t[55]=at,t[56]=ot,t[57]=st,t[58]=ct,t[59]=lt,t[60]=j,t[61]=M,t[62]=ut,t[63]=N}else We=t[44],Ge=t[45],Ke=t[46],E=t[47],O=t[48],k=t[49],tt=t[50],nt=t[51],A=t[52],rt=t[53],it=t[54],at=t[55],ot=t[56],st=t[57],ct=t[58],lt=t[59],j=t[60],M=t[61],ut=t[62],N=t[63];let P;t[124]!==We||t[125]!==tt||t[126]!==nt||t[127]!==A||t[128]!==rt||t[129]!==it||t[130]!==at?(P=(0,D.jsx)(We,{control:tt,id:nt,label:A,name:rt,notice:it,options:at,placeholder:`Engine default group`}),t[124]=We,t[125]=tt,t[126]=nt,t[127]=A,t[128]=rt,t[129]=it,t[130]=at,t[131]=P):P=t[131];let dt;t[132]===Symbol.for(`react.memo_cache_sentinel`)?(dt=(0,D.jsx)(De,{children:`VPC security groups`}),t[132]=dt):dt=t[132];let F;t[133]!==E||t[134]!==O||t[135]!==Ne||t[136]!==k?(F=(0,D.jsxs)(x,{children:[dt,E?(0,D.jsx)(Le,{notice:E}):(0,D.jsx)(Ve,{emptyText:`No security group in this instance's VPC is available.`,groups:O,onChange:k,selected:Ne})]}),t[133]=E,t[134]=O,t[135]=Ne,t[136]=k,t[137]=F):F=t[137];let ft;t[138]===Symbol.for(`react.memo_cache_sentinel`)?(ft=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-retention`,children:`Backup retention (days)`})}),t[138]=ft):ft=t[138];let pt=!!_.backupRetentionPeriod,mt;t[139]===g?mt=t[140]:(mt=g(`backupRetentionPeriod`,{valueAsNumber:!0}),t[139]=g,t[140]=mt);let I;t[141]!==pt||t[142]!==mt?(I=(0,D.jsx)(u,{"aria-invalid":pt,id:`modify-retention`,max:7,min:0,type:`number`,...mt}),t[141]=pt,t[142]=mt,t[143]=I):I=t[143];let L;t[144]===_.backupRetentionPeriod?L=t[145]:(L=(0,D.jsx)(Ee,{errors:[_.backupRetentionPeriod]}),t[144]=_.backupRetentionPeriod,t[145]=L);let R;t[146]!==I||t[147]!==L?(R=(0,D.jsxs)(x,{children:[ft,I,L]}),t[146]=I,t[147]=L,t[148]=R):R=t[148];let z;t[149]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-backup-window`,children:`Preferred backup window`})}),t[149]=z):z=t[149];let ht=!!_.preferredBackupWindow,B;t[150]===g?B=t[151]:(B=g(`preferredBackupWindow`),t[150]=g,t[151]=B);let V;t[152]!==ht||t[153]!==B?(V=(0,D.jsx)(u,{"aria-invalid":ht,id:`modify-backup-window`,placeholder:`hh24:mi-hh24:mi in UTC`,...B}),t[152]=ht,t[153]=B,t[154]=V):V=t[154];let H;t[155]===_.preferredBackupWindow?H=t[156]:(H=(0,D.jsx)(Ee,{errors:[_.preferredBackupWindow]}),t[155]=_.preferredBackupWindow,t[156]=H);let U;t[157]!==V||t[158]!==H?(U=(0,D.jsxs)(x,{children:[z,V,H]}),t[157]=V,t[158]=H,t[159]=U):U=t[159];let W;t[160]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-maintenance-window`,children:`Preferred maintenance window`})}),t[160]=W):W=t[160];let G=!!_.preferredMaintenanceWindow,K;t[161]===g?K=t[162]:(K=g(`preferredMaintenanceWindow`),t[161]=g,t[162]=K);let q;t[163]!==G||t[164]!==K?(q=(0,D.jsx)(u,{"aria-invalid":G,id:`modify-maintenance-window`,placeholder:`ddd:hh24:mi-ddd:hh24:mi in UTC`,...K}),t[163]=G,t[164]=K,t[165]=q):q=t[165];let J;t[166]===_.preferredMaintenanceWindow?J=t[167]:(J=(0,D.jsx)(Ee,{errors:[_.preferredMaintenanceWindow]}),t[166]=_.preferredMaintenanceWindow,t[167]=J);let Y;t[168]!==q||t[169]!==J?(Y=(0,D.jsxs)(x,{children:[W,q,J]}),t[168]=q,t[169]=J,t[170]=Y):Y=t[170];let X;t[171]===Symbol.for(`react.memo_cache_sentinel`)?(X=(0,D.jsx)(De,{children:(0,D.jsx)(`label`,{htmlFor:`modify-password`,children:`Reset master password`})}),t[171]=X):X=t[171];let gt=!!_.masterUserPassword,Z;t[172]===g?Z=t[173]:(Z=g(`masterUserPassword`),t[172]=g,t[173]=Z);let Q;t[174]!==gt||t[175]!==Z?(Q=(0,D.jsx)(u,{"aria-invalid":gt,id:`modify-password`,type:`password`,...Z}),t[174]=gt,t[175]=Z,t[176]=Q):Q=t[176];let _t;t[177]===Symbol.for(`react.memo_cache_sentinel`)?(_t=(0,D.jsx)(Te,{children:`Leave blank to keep the current password.`}),t[177]=_t):_t=t[177];let $;t[178]===_.masterUserPassword?$=t[179]:($=(0,D.jsx)(Ee,{errors:[_.masterUserPassword]}),t[178]=_.masterUserPassword,t[179]=$);let vt;t[180]!==Q||t[181]!==$?(vt=(0,D.jsxs)(x,{children:[X,Q,_t,$]}),t[180]=Q,t[181]=$,t[182]=vt):vt=t[182];let yt;t[183]===h?yt=t[184]:(yt=(0,D.jsx)(Re,{control:h,name:`deletionProtection`}),t[183]=h,t[184]=yt);let bt;t[185]===Symbol.for(`react.memo_cache_sentinel`)?(bt=(0,D.jsx)(De,{children:`Apply immediately`}),t[185]=bt):bt=t[185];let xt;t[186]===h?xt=t[187]:(xt=(0,D.jsxs)(x,{children:[bt,(0,D.jsx)(Se,{control:h,name:`applyImmediately`,render:Xe})]}),t[186]=h,t[187]=xt);let St;t[188]===Symbol.for(`react.memo_cache_sentinel`)?(St=(0,D.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-3`,children:[(0,D.jsx)(`h3`,{className:`text-xs font-medium`,children:`Fixed at create`}),Je.map(Ye)]}),t[188]=St):St=t[188];let Ct;t[189]===o.error?Ct=t[190]:(Ct=o.error&&(0,D.jsx)(we,{error:o.error,msg:`Failed to modify the DB instance`}),t[189]=o.error,t[190]=Ct);let wt;t[191]===r?wt=t[192]:(wt=()=>{r(!1)},t[191]=r,t[192]=wt);let Tt;t[193]!==v||t[194]!==o.isPending||t[195]!==wt?(Tt=(0,D.jsx)(`div`,{className:`flex justify-end`,children:(0,D.jsx)(b,{isPending:o.isPending,isSubmitting:v,onCancel:wt,pendingLabel:`Saving…`,submitLabel:`Save Changes`})}),t[193]=v,t[194]=o.isPending,t[195]=wt,t[196]=Tt):Tt=t[196];let Et;t[197]!==ot||t[198]!==st||t[199]!==ct||t[200]!==lt||t[201]!==P||t[202]!==F||t[203]!==R||t[204]!==U||t[205]!==Y||t[206]!==vt||t[207]!==yt||t[208]!==xt||t[209]!==Ct||t[210]!==Tt?(Et=(0,D.jsxs)(`form`,{className:ot,onSubmit:st,children:[ct,lt,P,F,R,U,Y,vt,yt,xt,St,Ct,Tt]}),t[197]=ot,t[198]=st,t[199]=ct,t[200]=lt,t[201]=P,t[202]=F,t[203]=R,t[204]=U,t[205]=Y,t[206]=vt,t[207]=yt,t[208]=xt,t[209]=Ct,t[210]=Tt,t[211]=Et):Et=t[211];let Dt;t[212]!==Ge||t[213]!==j||t[214]!==M||t[215]!==Et?(Dt=(0,D.jsxs)(Ge,{className:j,children:[M,Et]}),t[212]=Ge,t[213]=j,t[214]=M,t[215]=Et,t[216]=Dt):Dt=t[216];let Ot;return t[217]!==Ke||t[218]!==ut||t[219]!==N||t[220]!==Dt?(Ot=(0,D.jsx)(Ke,{onOpenChange:ut,open:N,children:Dt}),t[217]=Ke,t[218]=ut,t[219]=N,t[220]=Dt,t[221]=Ot):Ot=t[221],Ot}function Ye(e){return(0,D.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,D.jsx)(`span`,{className:`font-medium`,children:e.label}),` —`,` `,e.note]},e.label)}function Xe(e){let{field:t}=e;return(0,D.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,D.jsx)(`input`,{"aria-label":`Apply immediately`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),(0,D.jsx)(`span`,{children:`Apply now instead of waiting for the maintenance window`})]})}function Ze(e){return{value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``}}function Qe(e){return{value:e,label:e}}function $e(e){return e.DBInstanceClass??``}function et(e){return e.VpcSecurityGroupId??``}function k(e,t){return e.EventCategories?.includes(t)??!1}function tt(e,t){return e.filter(t).toSorted((e,t)=>(e.Date?.getTime()??0)-(t.Date?.getTime()??0)).at(-1)}function nt(e){let t=e.Endpoint?.Address;if(!t)return[];let n=e.Endpoint?.Port??e.DbInstancePort,r=e.MasterUsername??``,i=e.DBName??r;return e.Engine===`postgres`?[{label:`Connect`,parts:[{type:`bin`,value:`psql`},{type:`value`,value:` "host=${t} port=${n} dbname=${i} user=${r} sslmode=require"`}]}]:[{label:`Connect`,parts:[{type:`bin`,value:`mariadb`},{type:`flag`,value:` --host`},{type:`value`,value:`=${t}`},{type:`flag`,value:` --port`},{type:`value`,value:`=${n}`},{type:`flag`,value:` --user`},{type:`value`,value:`=${r}`},{type:`flag`,value:` --ssl`},{type:`value`,value:` ${i}`}]}]}function A(e){let t=(0,qe.c)(266),{dbInstanceIdentifier:n}=e,r=s(),i;t[0]===n?i=t[1]:(i=g(n),t[0]=n,t[1]=i);let{data:te}=a(i),u=te.DBInstances?.[0],d=u?.DBInstanceArn??``,oe;t[2]===n?oe=t[3]:(oe=ye(n),t[2]=n,t[3]=oe);let{data:f}=a(oe),m;t[4]===n?m=t[5]:(m=he(n),t[4]=n,t[5]=m);let{data:ge}=a(m),_e;t[6]===n?_e=t[7]:(_e=_(n),t[6]=n,t[7]=_e);let{data:ve}=a(_e),v=me(),xe=h(),y=p(),[Se,Ce]=(0,E.useState)(!1),[b,Te]=(0,E.useState)(!1),[Ee,De]=(0,E.useState)(!1),[x,Oe]=(0,E.useState)(null);if(!u?.DBInstanceIdentifier){let e;return t[8]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(ne,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`DB instance not found.`})]}),t[8]=e):e=t[8],e}let S=u.DBInstanceStatus,ke;t[9]===f.Events?ke=t[10]:(ke=f.Events??[],t[9]=f.Events,t[10]=ke);let Ae=ke,je=v.error??xe.error??y.error,Ie,Le,Re,ze,Be,Ve,Je,Ye,Xe,Ze,Qe,$e,et,k,A,j,M,ut,N,P,dt,F,ft,pt,mt,I;if(t[11]!==ve.DBInstanceAutomatedBackups?.[0]||t[12]!==n||t[13]!==Ae||t[14]!==u||t[15]!==je||t[16]!==y||t[17]!==ge.DBSnapshots||t[18]!==v||t[19]!==S||t[20]!==xe){let e=tt(Ae,lt),r=tt(Ae,ct),i;t[47]===ge.DBSnapshots?i=t[48]:(i=ge.DBSnapshots??[],t[47]=ge.DBSnapshots,t[48]=i),Ve=i;let a=Ve.filter(st).toSorted(ot).at(-1),o=ve.DBInstanceAutomatedBackups?.[0],s=u.PendingModifiedValues,te=s?.AllocatedStorage!==void 0||s?.DBInstanceClass!==void 0;t[49]===Symbol.for(`react.memo_cache_sentinel`)?(dt=(0,D.jsx)(ne,{to:`/rds/describe-db-instances`,children:`Back to databases`}),t[49]=dt):dt=t[49],t[50]===je?F=t[51]:(F=je&&(0,D.jsx)(we,{error:je,msg:`Failed to change the DB instance state.`}),t[50]=je,t[51]=F),ut=`space-y-6`;let d;t[52]!==v.isPending||t[53]!==S?(d=!fe(S)||v.isPending,t[52]=v.isPending,t[53]=S,t[54]=d):d=t[54];let oe;t[55]!==n||t[56]!==v?(oe=()=>{v.mutate(n)},t[55]=n,t[56]=v,t[57]=oe):oe=t[57];let f;t[58]!==d||t[59]!==oe?(f=(0,D.jsx)(l,{disabled:d,onClick:oe,size:`sm`,variant:`outline`,children:`Start`}),t[58]=d,t[59]=oe,t[60]=f):f=t[60];let ce;t[61]!==S||t[62]!==xe.isPending?(ce=!de(S)||xe.isPending,t[61]=S,t[62]=xe.isPending,t[63]=ce):ce=t[63];let ue;t[64]!==n||t[65]!==xe?(ue=()=>{xe.mutate(n)},t[64]=n,t[65]=xe,t[66]=ue):ue=t[66];let p;t[67]!==ce||t[68]!==ue?(p=(0,D.jsx)(l,{disabled:ce,onClick:ue,size:`sm`,variant:`outline`,children:`Stop`}),t[67]=ce,t[68]=ue,t[69]=p):p=t[69];let m;t[70]!==y.isPending||t[71]!==S?(m=!pe(S)||y.isPending,t[70]=y.isPending,t[71]=S,t[72]=m):m=t[72];let h;t[73]!==n||t[74]!==y?(h=()=>{y.mutate(n)},t[73]=n,t[74]=y,t[75]=h):h=t[75];let me;t[76]!==m||t[77]!==h?(me=(0,D.jsx)(l,{disabled:m,onClick:h,size:`sm`,variant:`outline`,children:`Reboot`}),t[76]=m,t[77]=h,t[78]=me):me=t[78];let he;t[79]===S?he=t[80]:(he=le(S),t[79]=S,t[80]=he);let _e=!he,g;t[81]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{De(!0)},t[81]=g):g=t[81];let ye;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,D.jsx)(re,{className:`size-4`}),t[82]=ye):ye=t[82];let _;t[83]===_e?_=t[84]:(_=(0,D.jsxs)(l,{disabled:_e,onClick:g,size:`sm`,variant:`outline`,children:[ye,`Take Snapshot`]}),t[83]=_e,t[84]=_);let Se;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(Se=()=>{Te(!0)},t[85]=Se):Se=t[85];let b;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,D.jsxs)(l,{onClick:Se,size:`sm`,variant:`outline`,children:[(0,D.jsx)(ie,{className:`size-4`}),`Modify`]}),t[86]=b):b=t[86];let Ee;t[87]===S?Ee=t[88]:(Ee=se(S),t[87]=S,t[88]=Ee);let x=!Ee,Oe;t[89]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=()=>{Ce(!0)},t[89]=Oe):Oe=t[89];let ke;t[90]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,D.jsx)(c,{className:`size-4`}),t[90]=ke):ke=t[90];let He;t[91]===x?He=t[92]:(He=(0,D.jsxs)(l,{disabled:x,onClick:Oe,size:`sm`,variant:`destructive`,children:[ke,`Delete`]}),t[91]=x,t[92]=He);let Ue;t[93]!==f||t[94]!==p||t[95]!==me||t[96]!==_||t[97]!==He?(Ue=(0,D.jsxs)(`div`,{className:`flex gap-2`,children:[f,p,me,_,b,He]}),t[93]=f,t[94]=p,t[95]=me,t[96]=_,t[97]=He,t[98]=Ue):Ue=t[98],t[99]!==n||t[100]!==Ue?(N=(0,D.jsx)(be,{actions:Ue,subtitle:`DB Instance`,title:n}),t[99]=n,t[100]=Ue,t[101]=N):N=t[101];let We;t[102]===S?We=t[103]:(We=(0,D.jsx)(Me,{state:S}),t[102]=S,t[103]=We);let Ge;t[104]===u.StatusInfos?Ge=t[105]:(Ge=u.StatusInfos?.map(at),t[104]=u.StatusInfos,t[105]=Ge),t[106]!==We||t[107]!==Ge?(P=(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[We,Ge]}),t[106]=We,t[107]=Ge,t[108]=P):P=t[108],Be=Fe,k=`connectivity`,t[109]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,D.jsxs)(Ne,{children:[(0,D.jsx)(T,{value:`connectivity`,children:`Connectivity`}),(0,D.jsx)(T,{value:`configuration`,children:`Configuration`}),(0,D.jsx)(T,{value:`backups`,children:`Backups`}),(0,D.jsx)(T,{value:`tags`,children:`Tags`}),(0,D.jsx)(T,{value:`events`,children:`Events`})]}),t[109]=A):A=t[109];let Ke;t[110]===Symbol.for(`react.memo_cache_sentinel`)?(Ke=(0,D.jsx)(C.Header,{children:`Endpoint`}),t[110]=Ke):Ke=t[110];let E=u.Endpoint?.Address,qe;t[111]===E?qe=t[112]:(qe=(0,D.jsx)(w,{label:`Address`,value:E}),t[111]=E,t[112]=qe);let O;t[113]!==u.DbInstancePort||t[114]!==u.Endpoint?.Port?(O=(u.Endpoint?.Port??u.DbInstancePort)?.toString(),t[113]=u.DbInstancePort,t[114]=u.Endpoint?.Port,t[115]=O):O=t[115];let L;t[116]===O?L=t[117]:(L=(0,D.jsx)(w,{label:`Port`,value:O}),t[116]=O,t[117]=L);let R=u.DBSubnetGroup?.VpcId,z;t[118]===R?z=t[119]:(z=(0,D.jsx)(w,{label:`VPC`,value:R}),t[118]=R,t[119]=z);let ht=u.DBSubnetGroup?.DBSubnetGroupName,B;t[120]===ht?B=t[121]:(B=(0,D.jsx)(w,{label:`DB subnet group`,value:ht}),t[120]=ht,t[121]=B);let V;t[122]===u.VpcSecurityGroups?V=t[123]:(V=u.VpcSecurityGroups?.map(it).join(`, `),t[122]=u.VpcSecurityGroups,t[123]=V);let H;t[124]===V?H=t[125]:(H=(0,D.jsx)(w,{label:`Security groups`,value:V}),t[124]=V,t[125]=H);let U;t[126]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,D.jsx)(w,{label:`Publicly accessible`,value:`No — private VPC address`}),t[126]=U):U=t[126];let W;t[127]!==qe||t[128]!==L||t[129]!==z||t[130]!==B||t[131]!==H?(W=(0,D.jsxs)(C,{children:[Ke,(0,D.jsxs)(C.Content,{children:[qe,L,z,B,H,U]})]}),t[127]=qe,t[128]=L,t[129]=z,t[130]=B,t[131]=H,t[132]=W):W=t[132];let G;t[133]===u?G=t[134]:(G=nt(u),t[133]=u,t[134]=G);let K;t[135]===G?K=t[136]:(K=(0,D.jsx)(ae,{commands:G}),t[135]=G,t[136]=K),t[137]!==W||t[138]!==K?(j=(0,D.jsx)(Pe,{value:`connectivity`,children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[W,K]})}),t[137]=W,t[138]=K,t[139]=j):j=t[139];let q;t[140]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,D.jsx)(C.Header,{children:`Configuration`}),t[140]=q):q=t[140];let J;t[141]===u.Engine?J=t[142]:(J=(0,D.jsx)(w,{label:`Engine`,value:u.Engine}),t[141]=u.Engine,t[142]=J);let Y;t[143]===u.EngineVersion?Y=t[144]:(Y=(0,D.jsx)(w,{label:`Version`,value:u.EngineVersion}),t[143]=u.EngineVersion,t[144]=Y);let X;t[145]===u.DBInstanceClass?X=t[146]:(X=(0,D.jsx)(w,{label:`Instance class`,value:u.DBInstanceClass}),t[145]=u.DBInstanceClass,t[146]=X);let gt=u.AllocatedStorage?`${u.AllocatedStorage} GiB`:void 0,Z;t[147]===gt?Z=t[148]:(Z=(0,D.jsx)(w,{label:`Allocated storage`,value:gt}),t[147]=gt,t[148]=Z);let Q;t[149]===u.StorageType?Q=t[150]:(Q=(0,D.jsx)(w,{label:`Storage type`,value:u.StorageType}),t[149]=u.StorageType,t[150]=Q);let _t=u.StorageEncrypted?`Encrypted — always on`:`Not encrypted`,$;t[151]===_t?$=t[152]:($=(0,D.jsx)(w,{label:`Encryption`,value:_t}),t[151]=_t,t[152]=$);let vt;t[153]===u.DBParameterGroups?vt=t[154]:(vt=u.DBParameterGroups?.map(rt).join(`, `),t[153]=u.DBParameterGroups,t[154]=vt);let yt;t[155]===vt?yt=t[156]:(yt=(0,D.jsx)(w,{label:`Parameter group`,value:vt}),t[155]=vt,t[156]=yt);let bt;t[157]===u.MasterUsername?bt=t[158]:(bt=(0,D.jsx)(w,{label:`Master username`,value:u.MasterUsername}),t[157]=u.MasterUsername,t[158]=bt);let xt;t[159]===u.DBName?xt=t[160]:(xt=(0,D.jsx)(w,{label:`Initial database`,value:u.DBName}),t[159]=u.DBName,t[160]=xt);let St=u.DeletionProtection?`On`:`Off`,Ct;t[161]===St?Ct=t[162]:(Ct=(0,D.jsx)(w,{label:`Deletion protection`,value:St}),t[161]=St,t[162]=Ct);let wt;t[163]===u.InstanceCreateTime?wt=t[164]:(wt=ee(u.InstanceCreateTime),t[163]=u.InstanceCreateTime,t[164]=wt);let Tt;t[165]===wt?Tt=t[166]:(Tt=(0,D.jsx)(w,{label:`Created`,value:wt}),t[165]=wt,t[166]=Tt);let Et;t[167]!==J||t[168]!==Y||t[169]!==X||t[170]!==Z||t[171]!==Q||t[172]!==$||t[173]!==yt||t[174]!==bt||t[175]!==xt||t[176]!==Ct||t[177]!==Tt?(Et=(0,D.jsxs)(C,{children:[q,(0,D.jsxs)(C.Content,{children:[J,Y,X,Z,Q,$,yt,bt,xt,Ct,Tt]})]}),t[167]=J,t[168]=Y,t[169]=X,t[170]=Z,t[171]=Q,t[172]=$,t[173]=yt,t[174]=bt,t[175]=xt,t[176]=Ct,t[177]=Tt,t[178]=Et):Et=t[178];let Dt;t[179]!==te||t[180]!==s?(Dt=te&&(0,D.jsxs)(C,{children:[(0,D.jsx)(C.Header,{children:`Pending Changes`}),(0,D.jsxs)(C.Content,{children:[(0,D.jsx)(w,{label:`Instance class`,value:s?.DBInstanceClass}),(0,D.jsx)(w,{label:`Allocated storage`,value:s?.AllocatedStorage?`${s.AllocatedStorage} GiB`:void 0})]})]}),t[179]=te,t[180]=s,t[181]=Dt):Dt=t[181],t[182]!==Et||t[183]!==Dt?(M=(0,D.jsx)(Pe,{value:`configuration`,children:(0,D.jsxs)(`div`,{className:`space-y-4`,children:[Et,Dt]})}),t[182]=Et,t[183]=Dt,t[184]=M):M=t[184],ze=Pe,et=`backups`,Ze=`space-y-4`,Qe=e&&(0,D.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`alert`,children:[(0,D.jsx)(`p`,{className:`font-medium`,children:`An automated backup failed`}),(0,D.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.Message,` (`,ee(e.Date),`)`]})]}),$e=r&&(0,D.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`alert`,children:[(0,D.jsx)(`p`,{className:`font-medium`,children:`A backup raised a warning`}),(0,D.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[r.Message,` (`,ee(r.Date),`)`]})]}),Re=C,t[185]===Symbol.for(`react.memo_cache_sentinel`)?(Xe=(0,D.jsx)(C.Header,{children:`Automated Backups`}),t[185]=Xe):Xe=t[185],Le=C.Content;let Ot=u.BackupRetentionPeriod===0?`Disabled`:`${u.BackupRetentionPeriod} days`;t[186]===Ot?mt=t[187]:(mt=(0,D.jsx)(w,{label:`Retention`,value:Ot}),t[186]=Ot,t[187]=mt);let kt=o?.Status??`None — automated backups are off`;t[188]===kt?I=t[189]:(I=(0,D.jsx)(w,{label:`Status`,value:kt}),t[188]=kt,t[189]=I),t[190]===u.PreferredBackupWindow?Je=t[191]:(Je=(0,D.jsx)(w,{label:`Preferred backup window`,value:u.PreferredBackupWindow}),t[190]=u.PreferredBackupWindow,t[191]=Je),t[192]===u.PreferredMaintenanceWindow?Ye=t[193]:(Ye=(0,D.jsx)(w,{label:`Preferred maintenance window`,value:u.PreferredMaintenanceWindow}),t[192]=u.PreferredMaintenanceWindow,t[193]=Ye),Ie=w,ft=`Last backup`,pt=a?.SnapshotCreateTime&&ee(a.SnapshotCreateTime),t[11]=ve.DBInstanceAutomatedBackups?.[0],t[12]=n,t[13]=Ae,t[14]=u,t[15]=je,t[16]=y,t[17]=ge.DBSnapshots,t[18]=v,t[19]=S,t[20]=xe,t[21]=Ie,t[22]=Le,t[23]=Re,t[24]=ze,t[25]=Be,t[26]=Ve,t[27]=Je,t[28]=Ye,t[29]=Xe,t[30]=Ze,t[31]=Qe,t[32]=$e,t[33]=et,t[34]=k,t[35]=A,t[36]=j,t[37]=M,t[38]=ut,t[39]=N,t[40]=P,t[41]=dt,t[42]=F,t[43]=ft,t[44]=pt,t[45]=mt,t[46]=I}else Ie=t[21],Le=t[22],Re=t[23],ze=t[24],Be=t[25],Ve=t[26],Je=t[27],Ye=t[28],Xe=t[29],Ze=t[30],Qe=t[31],$e=t[32],et=t[33],k=t[34],A=t[35],j=t[36],M=t[37],ut=t[38],N=t[39],P=t[40],dt=t[41],F=t[42],ft=t[43],pt=t[44],mt=t[45],I=t[46];let L;t[194]!==Ie||t[195]!==ft||t[196]!==pt?(L=(0,D.jsx)(Ie,{label:ft,value:pt}),t[194]=Ie,t[195]=ft,t[196]=pt,t[197]=L):L=t[197];let R;t[198]!==Le||t[199]!==Je||t[200]!==Ye||t[201]!==L||t[202]!==mt||t[203]!==I?(R=(0,D.jsxs)(Le,{children:[mt,I,Je,Ye,L]}),t[198]=Le,t[199]=Je,t[200]=Ye,t[201]=L,t[202]=mt,t[203]=I,t[204]=R):R=t[204];let z;t[205]!==Re||t[206]!==Xe||t[207]!==R?(z=(0,D.jsxs)(Re,{children:[Xe,R]}),t[205]=Re,t[206]=Xe,t[207]=R,t[208]=z):z=t[208];let ht;t[209]===Symbol.for(`react.memo_cache_sentinel`)?(ht=(0,D.jsx)(`h3`,{className:`text-sm font-medium`,children:`Snapshots`}),t[209]=ht):ht=t[209];let B;t[210]!==r||t[211]!==Ve?(B=(0,D.jsxs)(`div`,{className:`space-y-2`,children:[ht,Ve.length>0?(0,D.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,D.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,D.jsx)(`thead`,{children:(0,D.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,D.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,D.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,D.jsx)(`tbody`,{children:Ve.map(e=>{let t=e.DBSnapshotIdentifier;return t?(0,D.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,D.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,D.jsx)(o,{className:`text-primary hover:underline`,params:{id:t},to:`/rds/describe-db-snapshots/$id`,children:t})}),(0,D.jsx)(`td`,{className:`px-4 py-2`,children:e.SnapshotType}),(0,D.jsx)(`td`,{className:`px-4 py-2`,children:(0,D.jsx)(Me,{state:e.Status})}),(0,D.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:ee(e.SnapshotCreateTime)}),(0,D.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,D.jsx)(l,{disabled:!ce(e.Status),onClick:async()=>{await r({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:t}})},size:`sm`,variant:`outline`,children:`Restore`}),(0,D.jsx)(l,{disabled:!ue(e.Status,e.SnapshotType),onClick:()=>{Oe(t)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},t):null})})]})}):(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`No snapshots of this instance.`})]}),t[210]=r,t[211]=Ve,t[212]=B):B=t[212];let V;t[213]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,D.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Automated backups are daily snapshots taken in the backup window, deleted by retention rather than by hand. There is no point-in-time restore.`}),t[213]=V):V=t[213];let H;t[214]!==Ze||t[215]!==Qe||t[216]!==$e||t[217]!==z||t[218]!==B?(H=(0,D.jsxs)(`div`,{className:Ze,children:[Qe,$e,z,B,V]}),t[214]=Ze,t[215]=Qe,t[216]=$e,t[217]=z,t[218]=B,t[219]=H):H=t[219];let U;t[220]!==ze||t[221]!==et||t[222]!==H?(U=(0,D.jsx)(ze,{value:et,children:H}),t[220]=ze,t[221]=et,t[222]=H,t[223]=U):U=t[223];let W;t[224]===d?W=t[225]:(W=(0,D.jsx)(Pe,{value:`tags`,children:(0,D.jsx)(Ge,{arn:d})}),t[224]=d,t[225]=W);let G;t[226]===Ae?G=t[227]:(G=(0,D.jsx)(Pe,{value:`events`,children:(0,D.jsx)(We,{events:Ae})}),t[226]=Ae,t[227]=G);let K;t[228]!==Be||t[229]!==k||t[230]!==A||t[231]!==j||t[232]!==M||t[233]!==U||t[234]!==W||t[235]!==G?(K=(0,D.jsxs)(Be,{defaultValue:k,children:[A,j,M,U,W,G]}),t[228]=Be,t[229]=k,t[230]=A,t[231]=j,t[232]=M,t[233]=U,t[234]=W,t[235]=G,t[236]=K):K=t[236];let q;t[237]!==ut||t[238]!==N||t[239]!==P||t[240]!==K?(q=(0,D.jsxs)(`div`,{className:ut,children:[N,P,K]}),t[237]=ut,t[238]=N,t[239]=P,t[240]=K,t[241]=q):q=t[241];let J;t[242]!==u||t[243]!==b?(J=b&&(0,D.jsx)(O,{instance:u,onOpenChange:Te,open:!0}),t[242]=u,t[243]=b,t[244]=J):J=t[244];let Y;t[245]!==n||t[246]!==Ee?(Y=Ee&&(0,D.jsx)(He,{dbInstanceIdentifier:n,onOpenChange:De,open:!0}),t[245]=n,t[246]=Ee,t[247]=Y):Y=t[247];let X;t[248]===x?X=t[249]:(X=x&&(0,D.jsx)(Ue,{dbSnapshotIdentifier:x,onOpenChange:e=>{e||Oe(null)},open:!0}),t[248]=x,t[249]=X);let gt=u.DeletionProtection??!1,Z;t[250]===r?Z=t[251]:(Z=async()=>{await r({to:`/rds/describe-db-instances`})},t[250]=r,t[251]=Z);let Q;t[252]===Symbol.for(`react.memo_cache_sentinel`)?(Q=()=>{Ce(!1),Te(!0)},t[252]=Q):Q=t[252];let _t;t[253]!==n||t[254]!==Se||t[255]!==gt||t[256]!==Z?(_t=(0,D.jsx)(Ke,{dbInstanceIdentifier:n,deletionProtection:gt,onDeleted:Z,onModify:Q,onOpenChange:Ce,open:Se}),t[253]=n,t[254]=Se,t[255]=gt,t[256]=Z,t[257]=_t):_t=t[257];let $;return t[258]!==dt||t[259]!==F||t[260]!==q||t[261]!==J||t[262]!==Y||t[263]!==X||t[264]!==_t?($=(0,D.jsxs)(D.Fragment,{children:[dt,F,q,J,Y,X,_t]}),t[258]=dt,t[259]=F,t[260]=q,t[261]=J,t[262]=Y,t[263]=X,t[264]=_t,t[265]=$):$=t[265],$}function rt(e){return`${e.DBParameterGroupName} (${e.ParameterApplyStatus})`}function it(e){return e.VpcSecurityGroupId}function at(e){return(0,D.jsxs)(`span`,{className:`text-xs text-tactical-amber`,children:[e.StatusType,`: `,e.Message??e.Status]},`${e.StatusType}-${e.Status}`)}function ot(e,t){return(e.SnapshotCreateTime?.getTime()??0)-(t.SnapshotCreateTime?.getTime()??0)}function st(e){return e.SnapshotType===f}function ct(e){return k(e,`backup`)&&k(e,`notification`)}function lt(e){return k(e,`backup`)&&k(e,`failure`)}function j(){let e=(0,qe.c)(4),{id:t}=v.useParams(),n;e[0]===t?n=e[1]:(n=te(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,D.jsx)(A,{dbInstanceIdentifier:n}),e[2]=n,e[3]=r),r}export{j as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BXeH_hZi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BXeH_hZi.js new file mode 100644 index 000000000..bb040eeb1 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BXeH_hZi.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DP_DlrXy.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/pencil-BhhTGjjd.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/acm-DlvuctCR.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/certificate-import-dialog-B6IZXuGX.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/ec2-DYgBhYCJ.js","assets/elbv2-D0Z7QbU2.js","assets/commandBuilder-BIU1eEwl.js","assets/elbv2-CmXUhudd.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/elbv2-DqjEJ4Pi.js","assets/attributes-editor-B4H40Gb9.js","assets/tags-editor-1LzJEWry.js","assets/plus-BodhJT2v.js","assets/tabs-BMSqRmVw.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{O as i}from"./ec2-DYgBhYCJ.js";import{i as a,n as o,r as s,s as c,u as l}from"./elbv2-CmXUhudd.js";var u=e(`/_auth/ec2/(load-balancers)/describe-load-balancers/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...c([r]),staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Load Balancer | Mulga`}]}),component:t(()=>r(()=>import(`./_id-DP_DlrXy.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BY8BuAtk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BY8BuAtk.js deleted file mode 100644 index 5906c4cde..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BY8BuAtk.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Bk7BwvKZ.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/camera-bmANKZ8M.js","assets/pencil-BhhTGjjd.js","assets/cli-command-panel-CLiFy1rG.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/rds-CE3126Ga.js","assets/rds-BkKLEWPo.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-CyiqRExv.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/tabs-t6sDAEVZ.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-BkxIRro9.js","assets/select-B01jpDaX.js","assets/usePositioner-DUsvphCt.js","assets/create-db-snapshot-dialog-CiBeyQ69.js","assets/tags-field-array-Dk9nPDzt.js","assets/plus-BodhJT2v.js","assets/delete-db-snapshot-dialog-D3b3mehr.js","assets/rds-delete-dialog-BtEPTeBR.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/rds-events-panel-Di-44bfP.js","assets/rds-tags-tab-CD2X7nDN.js","assets/tags-editor-BxxtIXTE.js","assets/delete-db-instance-dialog-BdhZGMA5.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{c as i,g as a,n as o,s,t as c}from"./rds-CyiqRExv.js";var l=e(`/_auth/rds/(db-instances)/describe-db-instances/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id),[l]=await Promise.all([e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...i(r),staleTime:`static`}),e.queryClient.query({...c(r),staleTime:`static`})]),u=l.DBInstances?.[0]?.DBInstanceArn??``;await e.queryClient.query({...a(u),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-Bk7BwvKZ.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66])),`component`)});export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CiH9rPYs.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BbrdZrWP.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CiH9rPYs.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BbrdZrWP.js index d5f4c8bcc..e07be3fd8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CiH9rPYs.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BbrdZrWP.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{ln as s,sn as c,tn as l}from"./cluster-config-xw_Q7X1e.js";import{t as u}from"./back-link-CjKy1JE5.js";import{t as d}from"./trash-DVab4pEz.js";import{t as f}from"./button-BarTr35m.js";import{t as p}from"./input-6kdUb_DH.js";import{l as m}from"./ec2-CWEplLq4.js";import{_ as h,c as g,l as _,m as v,p as y}from"./elbv2-K4aD09h6.js";import{c as b,d as x,l as S,s as C}from"./elbv2-DSjTzB2q.js";import{t as w}from"./_id-CjZcD-rB.js";import{t as T}from"./page-heading-vksh_67w.js";import{t as E}from"./error-banner-DeOeVBKS.js";import{a as D,i as O,l as k,n as A,o as j,r as M,s as N,t as P}from"./alert-dialog-kCQ1W4Rz.js";import{t as F}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as I,t as L}from"./detail-row-DNBRlVeK.js";import{r as R,t as z}from"./attributes-editor-B4A8SZjs.js";import{t as B}from"./tags-editor-BxxtIXTE.js";import{i as V,n as H,r as U,t as W}from"./tabs-t6sDAEVZ.js";var G=r(),K=t(n(),1),q=e();function J(e){let t=e.trim();if(t===``)return;let n=Number(t);if(!(!Number.isInteger(n)||n<1||n>65535))return n}function Y(e){let t=(0,G.c)(33),{open:n,onOpenChange:r,instances:i,defaultPort:a,isPending:o,onConfirm:s}=e,l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l={},t[0]=l):l=t[0];let[u,d]=(0,K.useState)(l),[f,m]=(0,K.useState)(),[h,g]=(0,K.useState)(n);n!==h&&(g(n),n||(d({}),m(void 0)));let _;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(_=e=>{d(t=>{let n=t[e];return n?.checked?{...t,[e]:{...n,checked:!1}}:{...t,[e]:{checked:!0,port:n?.port??``}}})},t[1]=_):_=t[1];let v=_,y;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(y=(e,t)=>{d(n=>({...n,[e]:{checked:n[e]?.checked??!0,port:t}}))},t[2]=y):y=t[2];let b=y,x;t[3]!==s||t[4]!==u?(x=()=>{let e=Object.entries(u).filter(X);if(e.length===0){m(`Select at least one instance.`);return}let t=[];for(let[n,r]of e){if(r.port.trim()===``){t.push({id:n});continue}let e=J(r.port);if(e===void 0){m(`Port for ${n} must be an integer between 1 and 65535.`);return}t.push({id:n,port:e})}m(void 0),s(t)},t[3]=s,t[4]=u,t[5]=x):x=t[5];let S=x,C;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,q.jsx)(k,{children:`Register targets`}),t[6]=C):C=t[6];let w;t[7]===a?w=t[8]:(w=(0,q.jsxs)(N,{children:[C,(0,q.jsxs)(D,{children:[`Select instances to register. Leave port blank to use the target group port (`,a,`).`]})]}),t[7]=a,t[8]=w);let T;t[9]!==a||t[10]!==i||t[11]!==u?(T=i.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances available in this VPC.`}):(0,q.jsx)(`div`,{className:`max-h-72 space-y-1 overflow-y-auto`,children:i.map(e=>{let t=e.InstanceId??``,n=u[t],r=n?.checked??!1,i=c(e.Tags);return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded px-1 py-1 text-xs hover:bg-accent`,children:[(0,q.jsx)(`input`,{"aria-label":`Register target ${t}`,checked:r,id:`register-target-${t}`,onChange:()=>{v(t)},type:`checkbox`}),(0,q.jsxs)(`label`,{className:`flex flex-1 items-center gap-2`,htmlFor:`register-target-${t}`,children:[(0,q.jsx)(`span`,{className:`font-mono`,children:t}),i&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,i,`)`]}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.State?.Name??``})]}),r&&(0,q.jsx)(p,{"aria-label":`Port override for ${t}`,className:`w-24`,onChange:e=>{b(t,e.target.value)},placeholder:String(a),value:n?.port??``})]},t)})}),t[9]=a,t[10]=i,t[11]=u,t[12]=T):T=t[12];let E;t[13]===f?E=t[14]:(E=f&&(0,q.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:f}),t[13]=f,t[14]=E);let F;t[15]===o?F=t[16]:(F=(0,q.jsx)(M,{disabled:o,children:`Cancel`}),t[15]=o,t[16]=F);let I=o?`Registering…`:`Register`,L;t[17]!==S||t[18]!==o||t[19]!==I?(L=(0,q.jsx)(A,{disabled:o,onClick:S,children:I}),t[17]=S,t[18]=o,t[19]=I,t[20]=L):L=t[20];let R;t[21]!==L||t[22]!==F?(R=(0,q.jsxs)(j,{children:[F,L]}),t[21]=L,t[22]=F,t[23]=R):R=t[23];let z;t[24]!==R||t[25]!==w||t[26]!==T||t[27]!==E?(z=(0,q.jsxs)(O,{className:`sm:max-w-lg`,children:[w,T,E,R]}),t[24]=R,t[25]=w,t[26]=T,t[27]=E,t[28]=z):z=t[28];let B;return t[29]!==r||t[30]!==n||t[31]!==z?(B=(0,q.jsx)(P,{onOpenChange:r,open:n,children:z}),t[29]=r,t[30]=n,t[31]=z,t[32]=B):B=t[32],B}function X(e){let[,t]=e;return t.checked&&t!==void 0}var Z=5e3,Q=new Set([`healthy`]),$=new Set([`unhealthy`,`unavailable`]),ee=new Set([`initial`,`draining`]);function te(e){return e&&Q.has(e)?`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100`:e&&$.has(e)?`bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100`:e&&ee.has(e)?`bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100`:`bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-100`}function ne(e){return`${e.Id??``}:${e.Port??``}`}function re({targetGroupArn:e,vpcId:t,defaultPort:n,isActive:r}){let{data:o}=a(m),{data:s,isLoading:c,error:u}=i({...x(e),refetchInterval:r?Z:!1,refetchIntervalInBackground:!1}),p=v(),h=_(),[g,y]=(0,K.useState)(!1),[b,S]=(0,K.useState)(),C=(o.Reservations?.flatMap(e=>e.Instances??[])??[]).filter(e=>e.VpcId===t&&e.State?.Name!==`terminated`),w=s?.TargetHealthDescriptions??[];return(0,q.jsxs)(`div`,{className:`space-y-3`,children:[p.error&&(0,q.jsx)(E,{error:p.error,msg:`Failed to register targets`}),h.error&&(0,q.jsx)(E,{error:h.error,msg:`Failed to deregister target`}),u&&(0,q.jsx)(E,{error:u,msg:`Failed to load target health`}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:c?`Loading target health…`:`${w.length} target${w.length===1?``:`s`}`}),(0,q.jsx)(f,{onClick:()=>{y(!0)},size:`sm`,children:`Register targets`})]}),w.length===0?(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:`No targets registered.`}):(0,q.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,q.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`AZ`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Reason`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,q.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,q.jsx)(`tbody`,{children:w.map(e=>{let t=e.Target??{Id:``},n=e.TargetHealth?.State;return(0,q.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,q.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t.Id??``}),(0,q.jsx)(`td`,{className:`px-4 py-2`,children:t.Port??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:t.AvailabilityZone??``}),(0,q.jsx)(`td`,{className:`px-4 py-2`,children:(0,q.jsx)(`span`,{className:l(`rounded-full px-2 py-0.5 text-xs`,te(n)),children:n??`unknown`})}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.TargetHealth?.Reason??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.TargetHealth?.Description??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,q.jsx)(f,{"aria-label":`Deregister ${t.Id}`,onClick:()=>{S(t)},size:`sm`,variant:`ghost`,children:(0,q.jsx)(d,{className:`size-4`})})})]},ne(t))})})]})}),(0,q.jsx)(Y,{defaultPort:n,instances:C,isPending:p.isPending,onConfirm:async t=>{try{await p.mutateAsync({targetGroupArn:e,targets:t}),y(!1)}catch{}},onOpenChange:y,open:g}),(0,q.jsx)(F,{description:b?`Deregister ${b.Id}${b.Port?`:${b.Port}`:``} from this target group?`:``,isPending:h.isPending,onConfirm:async()=>{if(b?.Id)try{await h.mutateAsync({targetGroupArn:e,targets:[{id:b.Id,port:b.Port}]})}finally{S(void 0)}},onOpenChange:e=>{e||S(void 0)},open:b!==void 0,title:`Deregister target`})]})}function ie({arn:e}){let t=o(),{data:n}=a(S(e)),{data:r}=a(b(e)),{data:i}=a(C([e])),s=g(),c=y(),l=h(),[p,m]=(0,K.useState)(!1),[_,v]=(0,K.useState)(`overview`),x=n.TargetGroups?.[0];if(!x?.TargetGroupArn)return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(u,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:`Target group not found.`})]});let w=async()=>{try{await s.mutateAsync(e),t({to:`/ec2/describe-target-groups`})}finally{m(!1)}},D=r.Attributes??[],O=i?.TagDescriptions?.find(t=>t.ResourceArn===e)?.Tags??[];return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(u,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),s.error&&(0,q.jsx)(E,{error:s.error,msg:`Failed to delete target group`}),(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(T,{actions:(0,q.jsxs)(f,{onClick:()=>{m(!0)},size:`sm`,variant:`destructive`,children:[(0,q.jsx)(d,{className:`size-4`}),`Delete`]}),subtitle:`Target Group Details`,title:x.TargetGroupName??x.TargetGroupArn}),(0,q.jsxs)(W,{onValueChange:v,value:_,children:[(0,q.jsxs)(H,{children:[(0,q.jsx)(V,{value:`overview`,children:`Overview`}),(0,q.jsx)(V,{value:`targets`,children:`Targets`}),(0,q.jsx)(V,{value:`health-checks`,children:`Health checks`}),(0,q.jsx)(V,{value:`attributes`,children:`Attributes`}),(0,q.jsx)(V,{value:`tags`,children:`Tags`})]}),(0,q.jsx)(U,{value:`overview`,children:(0,q.jsxs)(I,{children:[(0,q.jsx)(I.Header,{children:`Target group`}),(0,q.jsxs)(I.Content,{children:[(0,q.jsx)(L,{label:`ARN`,value:x.TargetGroupArn}),(0,q.jsx)(L,{label:`Protocol`,value:x.Protocol}),(0,q.jsx)(L,{label:`Port`,value:x.Port?.toString()}),(0,q.jsx)(L,{label:`VPC`,value:x.VpcId}),(0,q.jsx)(L,{label:`Target type`,value:x.TargetType}),(0,q.jsx)(L,{label:`Protocol version`,value:x.ProtocolVersion}),(0,q.jsx)(L,{label:`IP address type`,value:x.IpAddressType})]})]})}),(0,q.jsx)(U,{value:`targets`,children:(0,q.jsx)(re,{defaultPort:x.Port??80,isActive:_===`targets`,targetGroupArn:x.TargetGroupArn,vpcId:x.VpcId})}),(0,q.jsxs)(U,{value:`health-checks`,children:[(0,q.jsx)(`p`,{className:`mb-3 text-sm text-muted-foreground`,children:`Health-check settings are set at creation time. Editing lands in a future enhancement.`}),(0,q.jsxs)(I,{children:[(0,q.jsx)(I.Header,{children:`Health check`}),(0,q.jsxs)(I.Content,{children:[(0,q.jsx)(L,{label:`Enabled`,value:x.HealthCheckEnabled===void 0?void 0:String(x.HealthCheckEnabled)}),(0,q.jsx)(L,{label:`Protocol`,value:x.HealthCheckProtocol}),(0,q.jsx)(L,{label:`Path`,value:x.HealthCheckPath}),(0,q.jsx)(L,{label:`Port`,value:x.HealthCheckPort}),(0,q.jsx)(L,{label:`Interval (s)`,value:x.HealthCheckIntervalSeconds?.toString()}),(0,q.jsx)(L,{label:`Timeout (s)`,value:x.HealthCheckTimeoutSeconds?.toString()}),(0,q.jsx)(L,{label:`Healthy threshold`,value:x.HealthyThresholdCount?.toString()}),(0,q.jsx)(L,{label:`Unhealthy threshold`,value:x.UnhealthyThresholdCount?.toString()}),(0,q.jsx)(L,{label:`Matcher (HTTP codes)`,value:x.Matcher?.HttpCode??x.Matcher?.GrpcCode})]})]})]}),(0,q.jsx)(U,{value:`attributes`,children:(0,q.jsx)(z,{attributes:D,error:c.error,isPending:c.isPending,isSuccess:c.isSuccess,onSubmit:t=>{c.mutate({targetGroupArn:e,attributes:t})},specs:R})}),(0,q.jsx)(U,{value:`tags`,children:(0,q.jsx)(B,{error:l.error,isPending:l.isPending,isSuccess:l.isSuccess,onSubmit:t=>{l.mutate({resourceArn:e,tags:t,initialKeys:O.map(e=>e.Key??``).filter(e=>e.length>0)})},tags:O})})]})]}),(0,q.jsx)(F,{description:`Are you sure you want to delete target group "${x.TargetGroupName??x.TargetGroupArn}"? This action cannot be undone.`,isPending:s.isPending,onConfirm:w,onOpenChange:m,open:p,title:`Delete Target Group`})]})}function ae(){let e=(0,G.c)(4),{id:t}=w.useParams(),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,q.jsx)(ie,{arn:n}),e[2]=n,e[3]=r),r}export{ae as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{cn as s,nn as c,un as l}from"./cluster-config-DkOiY8HH.js";import{t as u}from"./back-link-wsXUoJ12.js";import{t as d}from"./trash-DVab4pEz.js";import{t as f}from"./button-qf9lLJ2x.js";import{t as p}from"./input-D3aUBtS6.js";import{l as m}from"./ec2-DYgBhYCJ.js";import{_ as h,c as g,l as _,m as v,p as y}from"./elbv2-D0Z7QbU2.js";import{c as b,d as x,l as S,s as C}from"./elbv2-CmXUhudd.js";import{t as w}from"./_id-f81dZUoo.js";import{t as T}from"./page-heading-vksh_67w.js";import{t as E}from"./error-banner-DeOeVBKS.js";import{a as D,i as O,l as k,n as A,o as j,r as M,s as N,t as P}from"./alert-dialog-jxylPXwR.js";import{t as F}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as I,t as L}from"./detail-row-DNBRlVeK.js";import{r as R,t as z}from"./attributes-editor-B4H40Gb9.js";import{t as B}from"./tags-editor-1LzJEWry.js";import{i as V,n as H,r as U,t as W}from"./tabs-BMSqRmVw.js";var G=r(),K=t(n(),1),q=e();function J(e){let t=e.trim();if(t===``)return;let n=Number(t);if(!(!Number.isInteger(n)||n<1||n>65535))return n}function Y(e){let t=(0,G.c)(33),{open:n,onOpenChange:r,instances:i,defaultPort:a,isPending:o,onConfirm:c}=e,l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l={},t[0]=l):l=t[0];let[u,d]=(0,K.useState)(l),[f,m]=(0,K.useState)(),[h,g]=(0,K.useState)(n);n!==h&&(g(n),n||(d({}),m(void 0)));let _;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(_=e=>{d(t=>{let n=t[e];return n?.checked?{...t,[e]:{...n,checked:!1}}:{...t,[e]:{checked:!0,port:n?.port??``}}})},t[1]=_):_=t[1];let v=_,y;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(y=(e,t)=>{d(n=>({...n,[e]:{checked:n[e]?.checked??!0,port:t}}))},t[2]=y):y=t[2];let b=y,x;t[3]!==c||t[4]!==u?(x=()=>{let e=Object.entries(u).filter(X);if(e.length===0){m(`Select at least one instance.`);return}let t=[];for(let[n,r]of e){if(r.port.trim()===``){t.push({id:n});continue}let e=J(r.port);if(e===void 0){m(`Port for ${n} must be an integer between 1 and 65535.`);return}t.push({id:n,port:e})}m(void 0),c(t)},t[3]=c,t[4]=u,t[5]=x):x=t[5];let S=x,C;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,q.jsx)(k,{children:`Register targets`}),t[6]=C):C=t[6];let w;t[7]===a?w=t[8]:(w=(0,q.jsxs)(N,{children:[C,(0,q.jsxs)(D,{children:[`Select instances to register. Leave port blank to use the target group port (`,a,`).`]})]}),t[7]=a,t[8]=w);let T;t[9]!==a||t[10]!==i||t[11]!==u?(T=i.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances available in this VPC.`}):(0,q.jsx)(`div`,{className:`max-h-72 space-y-1 overflow-y-auto`,children:i.map(e=>{let t=e.InstanceId??``,n=u[t],r=n?.checked??!1,i=s(e.Tags);return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded px-1 py-1 text-xs hover:bg-accent`,children:[(0,q.jsx)(`input`,{"aria-label":`Register target ${t}`,checked:r,id:`register-target-${t}`,onChange:()=>{v(t)},type:`checkbox`}),(0,q.jsxs)(`label`,{className:`flex flex-1 items-center gap-2`,htmlFor:`register-target-${t}`,children:[(0,q.jsx)(`span`,{className:`font-mono`,children:t}),i&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,i,`)`]}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e.State?.Name??``})]}),r&&(0,q.jsx)(p,{"aria-label":`Port override for ${t}`,className:`w-24`,onChange:e=>{b(t,e.target.value)},placeholder:String(a),value:n?.port??``})]},t)})}),t[9]=a,t[10]=i,t[11]=u,t[12]=T):T=t[12];let E;t[13]===f?E=t[14]:(E=f&&(0,q.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:f}),t[13]=f,t[14]=E);let F;t[15]===o?F=t[16]:(F=(0,q.jsx)(M,{disabled:o,children:`Cancel`}),t[15]=o,t[16]=F);let I=o?`Registering…`:`Register`,L;t[17]!==S||t[18]!==o||t[19]!==I?(L=(0,q.jsx)(A,{disabled:o,onClick:S,children:I}),t[17]=S,t[18]=o,t[19]=I,t[20]=L):L=t[20];let R;t[21]!==L||t[22]!==F?(R=(0,q.jsxs)(j,{children:[F,L]}),t[21]=L,t[22]=F,t[23]=R):R=t[23];let z;t[24]!==R||t[25]!==w||t[26]!==T||t[27]!==E?(z=(0,q.jsxs)(O,{className:`sm:max-w-lg`,children:[w,T,E,R]}),t[24]=R,t[25]=w,t[26]=T,t[27]=E,t[28]=z):z=t[28];let B;return t[29]!==r||t[30]!==n||t[31]!==z?(B=(0,q.jsx)(P,{onOpenChange:r,open:n,children:z}),t[29]=r,t[30]=n,t[31]=z,t[32]=B):B=t[32],B}function X(e){let[,t]=e;return t.checked&&t!==void 0}var Z=5e3,Q=new Set([`healthy`]),$=new Set([`unhealthy`,`unavailable`]),ee=new Set([`initial`,`draining`]);function te(e){return e&&Q.has(e)?`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100`:e&&$.has(e)?`bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100`:e&&ee.has(e)?`bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100`:`bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-100`}function ne(e){return`${e.Id??``}:${e.Port??``}`}function re({targetGroupArn:e,vpcId:t,defaultPort:n,isActive:r}){let{data:o}=a(m),{data:s,isLoading:l,error:u}=i({...x(e),refetchInterval:r?Z:!1,refetchIntervalInBackground:!1}),p=v(),h=_(),[g,y]=(0,K.useState)(!1),[b,S]=(0,K.useState)(),C=(o.Reservations?.flatMap(e=>e.Instances??[])??[]).filter(e=>e.VpcId===t&&e.State?.Name!==`terminated`),w=s?.TargetHealthDescriptions??[];return(0,q.jsxs)(`div`,{className:`space-y-3`,children:[p.error&&(0,q.jsx)(E,{error:p.error,msg:`Failed to register targets`}),h.error&&(0,q.jsx)(E,{error:h.error,msg:`Failed to deregister target`}),u&&(0,q.jsx)(E,{error:u,msg:`Failed to load target health`}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l?`Loading target health…`:`${w.length} target${w.length===1?``:`s`}`}),(0,q.jsx)(f,{onClick:()=>{y(!0)},size:`sm`,children:`Register targets`})]}),w.length===0?(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:`No targets registered.`}):(0,q.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,q.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`AZ`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Reason`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,q.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,q.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,q.jsx)(`tbody`,{children:w.map(e=>{let t=e.Target??{Id:``},n=e.TargetHealth?.State;return(0,q.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,q.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t.Id??``}),(0,q.jsx)(`td`,{className:`px-4 py-2`,children:t.Port??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:t.AvailabilityZone??``}),(0,q.jsx)(`td`,{className:`px-4 py-2`,children:(0,q.jsx)(`span`,{className:c(`rounded-full px-2 py-0.5 text-xs`,te(n)),children:n??`unknown`})}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.TargetHealth?.Reason??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.TargetHealth?.Description??``}),(0,q.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,q.jsx)(f,{"aria-label":`Deregister ${t.Id}`,onClick:()=>{S(t)},size:`sm`,variant:`ghost`,children:(0,q.jsx)(d,{className:`size-4`})})})]},ne(t))})})]})}),(0,q.jsx)(Y,{defaultPort:n,instances:C,isPending:p.isPending,onConfirm:async t=>{try{await p.mutateAsync({targetGroupArn:e,targets:t}),y(!1)}catch{}},onOpenChange:y,open:g}),(0,q.jsx)(F,{description:b?`Deregister ${b.Id}${b.Port?`:${b.Port}`:``} from this target group?`:``,isPending:h.isPending,onConfirm:async()=>{if(b?.Id)try{await h.mutateAsync({targetGroupArn:e,targets:[{id:b.Id,port:b.Port}]})}finally{S(void 0)}},onOpenChange:e=>{e||S(void 0)},open:b!==void 0,title:`Deregister target`})]})}function ie({arn:e}){let t=o(),{data:n}=a(S(e)),{data:r}=a(b(e)),{data:i}=a(C([e])),s=g(),c=y(),l=h(),[p,m]=(0,K.useState)(!1),[_,v]=(0,K.useState)(`overview`),x=n.TargetGroups?.[0];if(!x?.TargetGroupArn)return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(u,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),(0,q.jsx)(`p`,{className:`text-muted-foreground`,children:`Target group not found.`})]});let w=async()=>{try{await s.mutateAsync(e),t({to:`/ec2/describe-target-groups`})}finally{m(!1)}},D=r.Attributes??[],O=i?.TagDescriptions?.find(t=>t.ResourceArn===e)?.Tags??[];return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(u,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),s.error&&(0,q.jsx)(E,{error:s.error,msg:`Failed to delete target group`}),(0,q.jsxs)(`div`,{className:`space-y-6`,children:[(0,q.jsx)(T,{actions:(0,q.jsxs)(f,{onClick:()=>{m(!0)},size:`sm`,variant:`destructive`,children:[(0,q.jsx)(d,{className:`size-4`}),`Delete`]}),subtitle:`Target Group Details`,title:x.TargetGroupName??x.TargetGroupArn}),(0,q.jsxs)(W,{onValueChange:v,value:_,children:[(0,q.jsxs)(H,{children:[(0,q.jsx)(V,{value:`overview`,children:`Overview`}),(0,q.jsx)(V,{value:`targets`,children:`Targets`}),(0,q.jsx)(V,{value:`health-checks`,children:`Health checks`}),(0,q.jsx)(V,{value:`attributes`,children:`Attributes`}),(0,q.jsx)(V,{value:`tags`,children:`Tags`})]}),(0,q.jsx)(U,{value:`overview`,children:(0,q.jsxs)(I,{children:[(0,q.jsx)(I.Header,{children:`Target group`}),(0,q.jsxs)(I.Content,{children:[(0,q.jsx)(L,{label:`ARN`,value:x.TargetGroupArn}),(0,q.jsx)(L,{label:`Protocol`,value:x.Protocol}),(0,q.jsx)(L,{label:`Port`,value:x.Port?.toString()}),(0,q.jsx)(L,{label:`VPC`,value:x.VpcId}),(0,q.jsx)(L,{label:`Target type`,value:x.TargetType}),(0,q.jsx)(L,{label:`Protocol version`,value:x.ProtocolVersion}),(0,q.jsx)(L,{label:`IP address type`,value:x.IpAddressType})]})]})}),(0,q.jsx)(U,{value:`targets`,children:(0,q.jsx)(re,{defaultPort:x.Port??80,isActive:_===`targets`,targetGroupArn:x.TargetGroupArn,vpcId:x.VpcId})}),(0,q.jsxs)(U,{value:`health-checks`,children:[(0,q.jsx)(`p`,{className:`mb-3 text-sm text-muted-foreground`,children:`Health-check settings are set at creation time. Editing lands in a future enhancement.`}),(0,q.jsxs)(I,{children:[(0,q.jsx)(I.Header,{children:`Health check`}),(0,q.jsxs)(I.Content,{children:[(0,q.jsx)(L,{label:`Enabled`,value:x.HealthCheckEnabled===void 0?void 0:String(x.HealthCheckEnabled)}),(0,q.jsx)(L,{label:`Protocol`,value:x.HealthCheckProtocol}),(0,q.jsx)(L,{label:`Path`,value:x.HealthCheckPath}),(0,q.jsx)(L,{label:`Port`,value:x.HealthCheckPort}),(0,q.jsx)(L,{label:`Interval (s)`,value:x.HealthCheckIntervalSeconds?.toString()}),(0,q.jsx)(L,{label:`Timeout (s)`,value:x.HealthCheckTimeoutSeconds?.toString()}),(0,q.jsx)(L,{label:`Healthy threshold`,value:x.HealthyThresholdCount?.toString()}),(0,q.jsx)(L,{label:`Unhealthy threshold`,value:x.UnhealthyThresholdCount?.toString()}),(0,q.jsx)(L,{label:`Matcher (HTTP codes)`,value:x.Matcher?.HttpCode??x.Matcher?.GrpcCode})]})]})]}),(0,q.jsx)(U,{value:`attributes`,children:(0,q.jsx)(z,{attributes:D,error:c.error,isPending:c.isPending,isSuccess:c.isSuccess,onSubmit:t=>{c.mutate({targetGroupArn:e,attributes:t})},specs:R})}),(0,q.jsx)(U,{value:`tags`,children:(0,q.jsx)(B,{error:l.error,isPending:l.isPending,isSuccess:l.isSuccess,onSubmit:t=>{l.mutate({resourceArn:e,tags:t,initialKeys:O.map(e=>e.Key??``).filter(e=>e.length>0)})},tags:O})})]})]}),(0,q.jsx)(F,{description:`Are you sure you want to delete target group "${x.TargetGroupName??x.TargetGroupArn}"? This action cannot be undone.`,isPending:s.isPending,onConfirm:w,onOpenChange:m,open:p,title:`Delete Target Group`})]})}function ae(){let e=(0,G.c)(4),{id:t}=w.useParams(),n;e[0]===t?n=e[1]:(n=l(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,q.jsx)(ie,{arn:n}),e[2]=n,e[3]=r),r}export{ae as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BkDfjUwp.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BkDfjUwp.js new file mode 100644 index 000000000..42068f36a --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BkDfjUwp.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DK5n4Uf2.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/copy-CamWo-pg.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{T as i,b as a}from"./ec2-DYgBhYCJ.js";var o={name:`image`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]};o.node;var s=r(o),c=e(`/_auth/ec2/(snapshots)/describe-snapshots/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DK5n4Uf2.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{s as n,c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BnnKVvOl.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BnnKVvOl.js deleted file mode 100644 index 07f978f5e..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BnnKVvOl.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-B86MkOXo.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{l as r,v as i}from"./ec2-CWEplLq4.js";var a=e(`/_auth/ec2/(placement-groups)/describe-placement-groups/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-B86MkOXo.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-TfRi_Jai.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-ByloTwZY.js similarity index 85% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-TfRi_Jai.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-ByloTwZY.js index 8e306c689..aec65d96d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-TfRi_Jai.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-ByloTwZY.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{c,i as l,n as u,s as d,t as f}from"./select-B01jpDaX.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-BarTr35m.js";import{M as h,u as g}from"./ec2-CWEplLq4.js";import{D as _,V as v,o as y}from"./ec2-Ctto2xjU.js";import{t as b}from"./_id-DpCiHWsF.js";import{t as x}from"./page-heading-vksh_67w.js";import{t as S}from"./error-banner-DeOeVBKS.js";import{t as C}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as w,t as T}from"./detail-row-DNBRlVeK.js";var E=t(n()),D=e();function O(){let{id:e}=b.useParams(),t=a(),{data:n}=r(g(e)),{data:O}=r(h),k=y(),A=v(),j=_(),[M,N]=(0,E.useState)(!1),[P,F]=(0,E.useState)(``),I=n.InternetGateways?.[0],L=O.Vpcs??[],R=async()=>{try{await j.mutateAsync(e),t({to:`/ec2/describe-internet-gateways`})}finally{N(!1)}},z=async()=>{P&&await k.mutateAsync({internetGatewayId:e,vpcId:P})},B=async t=>{await A.mutateAsync({internetGatewayId:e,vpcId:t})};if(!I?.InternetGatewayId)return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(s,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`Internet Gateway not found.`})]});let V=I.Attachments?.[0],H=!!V?.VpcId,U=o(I.Tags);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(s,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),(j.error??k.error??A.error)&&(0,D.jsx)(S,{error:j.error??k.error??A.error??void 0,msg:`Internet Gateway action failed`}),(0,D.jsxs)(`div`,{className:`space-y-6`,children:[(0,D.jsx)(x,{actions:(0,D.jsxs)(m,{disabled:H||j.isPending,onClick:()=>{N(!0)},size:`sm`,variant:`destructive`,children:[(0,D.jsx)(p,{className:`size-4`}),`Delete`]}),subtitle:`Internet Gateway Details`,title:U?`${I.InternetGatewayId} (${U})`:I.InternetGatewayId}),(0,D.jsxs)(w,{children:[(0,D.jsx)(w.Header,{children:`Internet Gateway Information`}),(0,D.jsxs)(w.Content,{children:[(0,D.jsx)(T,{label:`Internet Gateway ID`,value:I.InternetGatewayId}),(0,D.jsx)(T,{label:`Owner ID`,value:I.OwnerId??`—`}),(0,D.jsx)(T,{label:`State`,value:V?.State??`detached`})]})]}),(0,D.jsxs)(w,{children:[(0,D.jsx)(w.Header,{children:`VPC Attachment`}),(0,D.jsx)(w.Content,{children:H?(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsx)(i,{className:`text-primary hover:underline`,params:{id:V.VpcId??``},to:`/ec2/describe-vpcs/$id`,children:V.VpcId}),(0,D.jsx)(m,{disabled:A.isPending,onClick:async()=>{await B(V.VpcId??``)},size:`sm`,variant:`outline`,children:`Detach`})]}):(0,D.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,D.jsx)(`div`,{className:`flex-1`,children:(0,D.jsxs)(f,{onValueChange:e=>{F(e??``)},value:P,children:[(0,D.jsx)(d,{className:`w-full`,children:(0,D.jsx)(c,{placeholder:`Select a VPC`})}),(0,D.jsx)(u,{children:L.map(e=>{let t=o(e.Tags);return(0,D.jsx)(l,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)})})]})}),(0,D.jsx)(m,{disabled:!P||k.isPending,onClick:z,size:`sm`,children:`Attach`})]})})]})]}),(0,D.jsx)(C,{description:`Are you sure you want to delete the Internet Gateway "${I.InternetGatewayId}"? This action cannot be undone.`,isPending:j.isPending,onConfirm:R,onOpenChange:N,open:M,title:`Delete Internet Gateway`})]})}export{O as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{c,i as l,n as u,s as d,t as f}from"./select-Cn66OoPn.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-qf9lLJ2x.js";import{M as h,u as g}from"./ec2-DYgBhYCJ.js";import{D as _,V as v,o as y}from"./ec2-Csn1kwZ8.js";import{t as b}from"./_id-Ch9414Sv.js";import{t as x}from"./page-heading-vksh_67w.js";import{t as S}from"./error-banner-DeOeVBKS.js";import{t as C}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as w,t as T}from"./detail-row-DNBRlVeK.js";var E=t(n()),D=e();function O(){let{id:e}=b.useParams(),t=a(),{data:n}=r(g(e)),{data:O}=r(h),k=y(),A=v(),j=_(),[M,N]=(0,E.useState)(!1),[P,F]=(0,E.useState)(``),I=n.InternetGateways?.[0],L=O.Vpcs??[],R=async()=>{try{await j.mutateAsync(e),t({to:`/ec2/describe-internet-gateways`})}finally{N(!1)}},z=async()=>{P&&await k.mutateAsync({internetGatewayId:e,vpcId:P})},B=async t=>{await A.mutateAsync({internetGatewayId:e,vpcId:t})};if(!I?.InternetGatewayId)return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(s,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),(0,D.jsx)(`p`,{className:`text-muted-foreground`,children:`Internet Gateway not found.`})]});let V=I.Attachments?.[0],H=!!V?.VpcId,U=o(I.Tags);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(s,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),(j.error??k.error??A.error)&&(0,D.jsx)(S,{error:j.error??k.error??A.error??void 0,msg:`Internet Gateway action failed`}),(0,D.jsxs)(`div`,{className:`space-y-6`,children:[(0,D.jsx)(x,{actions:(0,D.jsxs)(m,{disabled:H||j.isPending,onClick:()=>{N(!0)},size:`sm`,variant:`destructive`,children:[(0,D.jsx)(p,{className:`size-4`}),`Delete`]}),subtitle:`Internet Gateway Details`,title:U?`${I.InternetGatewayId} (${U})`:I.InternetGatewayId}),(0,D.jsxs)(w,{children:[(0,D.jsx)(w.Header,{children:`Internet Gateway Information`}),(0,D.jsxs)(w.Content,{children:[(0,D.jsx)(T,{label:`Internet Gateway ID`,value:I.InternetGatewayId}),(0,D.jsx)(T,{label:`Owner ID`,value:I.OwnerId??`—`}),(0,D.jsx)(T,{label:`State`,value:V?.State??`detached`})]})]}),(0,D.jsxs)(w,{children:[(0,D.jsx)(w.Header,{children:`VPC Attachment`}),(0,D.jsx)(w.Content,{children:H?(0,D.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,D.jsx)(i,{className:`text-primary hover:underline`,params:{id:V.VpcId??``},to:`/ec2/describe-vpcs/$id`,children:V.VpcId}),(0,D.jsx)(m,{disabled:A.isPending,onClick:async()=>{await B(V.VpcId??``)},size:`sm`,variant:`outline`,children:`Detach`})]}):(0,D.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,D.jsx)(`div`,{className:`flex-1`,children:(0,D.jsxs)(f,{onValueChange:e=>{F(e??``)},value:P,children:[(0,D.jsx)(d,{className:`w-full`,children:(0,D.jsx)(c,{placeholder:`Select a VPC`})}),(0,D.jsx)(u,{children:L.map(e=>{let t=o(e.Tags);return(0,D.jsx)(l,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)})})]})}),(0,D.jsx)(m,{disabled:!P||k.isPending,onClick:z,size:`sm`,children:`Attach`})]})})]})]}),(0,D.jsx)(C,{description:`Are you sure you want to delete the Internet Gateway "${I.InternetGatewayId}"? This action cannot be undone.`,isPending:j.isPending,onConfirm:R,onOpenChange:N,open:M,title:`Delete Internet Gateway`})]})}export{O as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C2FbO4pF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C2FbO4pF.js new file mode 100644 index 000000000..11f99a9d9 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C2FbO4pF.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-D7j6h3JU.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/input-D3aUBtS6.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ec2-DqNqPeiA.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{k as r}from"./ec2-DYgBhYCJ.js";var i=e(`/_auth/ec2/(volumes)/modify-volume/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`Resize ${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-D7j6h3JU.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C7Cm9Wp_.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C7Cm9Wp_.js new file mode 100644 index 000000000..d7890fb1a --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C7Cm9Wp_.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CS4Fo2ZG.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{f as r}from"./ec2-DYgBhYCJ.js";var i=e(`/_auth/ec2/(key)/describe-key-pairs/$id`)({loader:async({context:e,params:t})=>await e.queryClient.query({...r(t.id),staleTime:`static`}),head:({loaderData:e})=>({meta:[{title:`${e?.KeyPairs?.[0]?.KeyName??`Key Pair`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CS4Fo2ZG.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bg1Viy9x.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CCjrSa5z.js similarity index 79% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bg1Viy9x.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CCjrSa5z.js index 5a068d2e2..3424f9455 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Bg1Viy9x.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CCjrSa5z.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o,sn as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./createLucideIcon-BQgzNCBR.js";import{t as l}from"./back-link-CjKy1JE5.js";import{t as ee}from"./camera-bmANKZ8M.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-B01jpDaX.js";import{t as h}from"./trash-DVab4pEz.js";import{n as g,t as _}from"./button-BarTr35m.js";import{t as v}from"./input-6kdUb_DH.js";import{k as y,l as te}from"./ec2-CWEplLq4.js";import{H as ne,R as re,s as b}from"./ec2-Ctto2xjU.js";import{t as ie}from"./_id-NWQukwhC.js";import{t as x}from"./page-heading-vksh_67w.js";import{t as S}from"./error-banner-DeOeVBKS.js";import{s as C,t as w}from"./field-c7GHI5st.js";import{a as T,i as E,l as D,n as O,o as k,r as A,s as j,t as M}from"./alert-dialog-kCQ1W4Rz.js";import{t as ae}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as N,t as P}from"./detail-row-DNBRlVeK.js";import{t as F}from"./state-badge-D1Z6q_OA.js";var I={name:`link-2-off`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7`,key:`10o201`}],[`path`,{d:`M15 7h2a5 5 0 0 1 4 8`,key:`1d3206`}],[`line`,{x1:`8`,x2:`12`,y1:`12`,y2:`12`,key:`rvw6j4`}],[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}]]};I.node;var L=c(I),R={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};R.node;var z=c(R),B=t(n()),V=e();function H(){let{id:e}=ie.useParams(),t=a(),{data:n}=r(y(e)),{data:c}=r(te),I=n.Volumes?.[0],R=re(),H=b(),U=ne(),[W,G]=(0,B.useState)(null),[K,q]=(0,B.useState)(``),[J,Y]=(0,B.useState)(``),[X,Z]=(0,B.useState)(!1),oe=c.Reservations?.flatMap(e=>e.Instances?.filter(e=>e.State?.Name===`running`)??[])??[],Q=I?.State===`available`&&(!I.Attachments||I.Attachments.length===0),$=()=>{G(null)};return I?.VolumeId?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),R.error&&(0,V.jsx)(S,{error:R.error,msg:`Failed to delete volume`}),H.error&&(0,V.jsx)(S,{error:H.error,msg:`Failed to attach volume`}),U.error&&(0,V.jsx)(S,{error:U.error,msg:`Failed to detach volume`}),(0,V.jsxs)(`div`,{className:`space-y-6`,children:[(0,V.jsx)(x,{actions:(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(_,{disabled:!Q,onClick:()=>{G(`delete`)},size:`sm`,variant:`destructive`,children:[(0,V.jsx)(h,{className:`size-4`}),`Delete`]}),Q?(0,V.jsx)(i,{className:g({variant:`outline`}),params:{id:I.VolumeId},to:`/ec2/modify-volume/$id`,children:`Resize Volume`}):(0,V.jsx)(_,{disabled:!0,variant:`outline`,children:`Resize Volume`}),Q?(0,V.jsxs)(_,{onClick:()=>{G(`attach`)},size:`sm`,variant:`outline`,children:[(0,V.jsx)(z,{className:`size-4`}),`Attach`]}):null,I.Attachments&&I.Attachments.length>0?(0,V.jsxs)(_,{onClick:()=>{G(`detach`)},size:`sm`,variant:`outline`,children:[(0,V.jsx)(L,{className:`size-4`}),`Detach`]}):null,(0,V.jsxs)(i,{className:g({variant:`outline`,size:`sm`}),search:{volumeId:I.VolumeId},to:`/ec2/create-snapshot`,children:[(0,V.jsx)(ee,{className:`size-4`}),`Create Snapshot`]}),(0,V.jsx)(F,{state:I.State})]}),subtitle:`Volume Details`,title:I.VolumeId}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Volume Information`}),(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`Volume ID`,value:I.VolumeId}),(0,V.jsx)(P,{label:`Size`,value:`${I.Size} GiB`}),(0,V.jsx)(P,{label:`Volume Type`,value:I.VolumeType}),(0,V.jsx)(P,{label:`State`,value:I.State}),(0,V.jsx)(P,{label:`Availability Zone`,value:I.AvailabilityZone}),(0,V.jsx)(P,{label:`Create Time`,value:o(I.CreateTime)}),(0,V.jsx)(P,{label:`Encrypted`,value:I.Encrypted?`Yes`:`No`}),(0,V.jsx)(P,{label:`KMS Key ID`,value:I.KmsKeyId})]})]}),I.Attachments&&I.Attachments.length>0&&(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Attachments`}),I.Attachments.map(e=>(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`Instance ID`,value:e.InstanceId?(0,V.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.InstanceId},to:`/ec2/describe-instances/$id`,children:e.InstanceId}):void 0}),(0,V.jsx)(P,{label:`Device`,value:e.Device}),(0,V.jsx)(P,{label:`Status`,value:e.State}),(0,V.jsx)(P,{label:`Attach Time`,value:o(e.AttachTime)}),(0,V.jsx)(P,{label:`Delete on Termination`,value:e.DeleteOnTermination?`Yes`:`No`})]},e.InstanceId))]})]}),(0,V.jsx)(ae,{description:`Are you sure you want to delete the volume "${I.VolumeId}"? This action cannot be undone.`,isPending:R.isPending,onConfirm:async()=>{try{await R.mutateAsync(e),t({to:`/ec2/describe-volumes`})}finally{$()}},onOpenChange:e=>{e||$()},open:W===`delete`,title:`Delete Volume`}),(0,V.jsx)(M,{onOpenChange:e=>{e||($(),q(``),Y(``))},open:W===`attach`,children:(0,V.jsxs)(E,{children:[(0,V.jsxs)(j,{children:[(0,V.jsx)(D,{children:`Attach Volume`}),(0,V.jsx)(T,{children:`Attach this volume to a running instance.`})]}),(0,V.jsxs)(w,{children:[(0,V.jsx)(C,{children:(0,V.jsx)(`label`,{htmlFor:`attachInstance`,children:`Instance`})}),(0,V.jsxs)(m,{onValueChange:e=>{q(e??``)},value:K,children:[(0,V.jsx)(p,{className:`w-full`,id:`attachInstance`,children:(0,V.jsx)(u,{placeholder:`Select an instance`})}),(0,V.jsx)(f,{children:oe.map(e=>{let t=s(e.Tags);return(0,V.jsxs)(d,{value:e.InstanceId??``,children:[e.InstanceId,t?` (${t})`:``]},e.InstanceId)})})]})]}),(0,V.jsxs)(w,{children:[(0,V.jsx)(C,{children:(0,V.jsx)(`label`,{htmlFor:`attachDevice`,children:`Device (optional)`})}),(0,V.jsx)(v,{id:`attachDevice`,onChange:e=>{Y(e.target.value)},placeholder:`/dev/sdf`,value:J})]}),(0,V.jsxs)(k,{children:[(0,V.jsx)(A,{children:`Cancel`}),(0,V.jsx)(O,{disabled:H.isPending||!K,onClick:async()=>{try{await H.mutateAsync({volumeId:e,instanceId:K,device:J||void 0}),$(),q(``),Y(``)}catch{}},children:H.isPending?`Attaching…`:`Attach`})]})]})}),(0,V.jsx)(M,{onOpenChange:e=>{e||($(),Z(!1))},open:W===`detach`,children:(0,V.jsxs)(E,{children:[(0,V.jsxs)(j,{children:[(0,V.jsx)(D,{children:`Detach Volume`}),(0,V.jsxs)(T,{children:[`Are you sure you want to detach the volume "`,I.VolumeId,`" from instance "`,I.Attachments?.[0]?.InstanceId,`"?`]})]}),(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(`input`,{"aria-label":`Force detach`,checked:X,onChange:e=>{Z(e.target.checked)},type:`checkbox`}),`Force detach`]}),(0,V.jsxs)(k,{children:[(0,V.jsx)(A,{children:`Cancel`}),(0,V.jsx)(O,{disabled:U.isPending,onClick:async()=>{let t=I?.Attachments?.[0]?.InstanceId;try{await U.mutateAsync({volumeId:e,instanceId:t??void 0,force:X||void 0}),$(),Z(!1)}catch{}},children:U.isPending?`Detaching…`:`Detach`})]})]})})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`Volume not found.`})]})}export{H as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o,cn as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./createLucideIcon-BQgzNCBR.js";import{t as l}from"./back-link-wsXUoJ12.js";import{t as ee}from"./camera-bmANKZ8M.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-Cn66OoPn.js";import{t as h}from"./trash-DVab4pEz.js";import{n as g,t as _}from"./button-qf9lLJ2x.js";import{t as v}from"./input-D3aUBtS6.js";import{k as y,l as te}from"./ec2-DYgBhYCJ.js";import{H as ne,R as re,s as b}from"./ec2-Csn1kwZ8.js";import{t as ie}from"./_id-DeKRZoaO.js";import{t as x}from"./page-heading-vksh_67w.js";import{t as S}from"./error-banner-DeOeVBKS.js";import{s as C,t as w}from"./field-CS-ql6du.js";import{a as T,i as E,l as D,n as O,o as k,r as A,s as j,t as M}from"./alert-dialog-jxylPXwR.js";import{t as ae}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as N,t as P}from"./detail-row-DNBRlVeK.js";import{t as F}from"./state-badge-pn00UE1d.js";var I={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};I.node;var L=c(I),R={name:`link-2-off`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7`,key:`10o201`}],[`path`,{d:`M15 7h2a5 5 0 0 1 4 8`,key:`1d3206`}],[`line`,{x1:`8`,x2:`12`,y1:`12`,y2:`12`,key:`rvw6j4`}],[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}]]};R.node;var z=c(R),B=t(n()),V=e();function H(){let{id:e}=ie.useParams(),t=a(),{data:n}=r(y(e)),{data:c}=r(te),I=n.Volumes?.[0],R=re(),H=b(),U=ne(),[W,G]=(0,B.useState)(null),[K,q]=(0,B.useState)(``),[J,Y]=(0,B.useState)(``),[X,Z]=(0,B.useState)(!1),oe=c.Reservations?.flatMap(e=>e.Instances?.filter(e=>e.State?.Name===`running`)??[])??[],Q=I?.State===`available`&&(!I.Attachments||I.Attachments.length===0),$=()=>{G(null)};return I?.VolumeId?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),R.error&&(0,V.jsx)(S,{error:R.error,msg:`Failed to delete volume`}),H.error&&(0,V.jsx)(S,{error:H.error,msg:`Failed to attach volume`}),U.error&&(0,V.jsx)(S,{error:U.error,msg:`Failed to detach volume`}),(0,V.jsxs)(`div`,{className:`space-y-6`,children:[(0,V.jsx)(x,{actions:(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(_,{disabled:!Q,onClick:()=>{G(`delete`)},size:`sm`,variant:`destructive`,children:[(0,V.jsx)(h,{className:`size-4`}),`Delete`]}),Q?(0,V.jsx)(i,{className:g({variant:`outline`}),params:{id:I.VolumeId},to:`/ec2/modify-volume/$id`,children:`Resize Volume`}):(0,V.jsx)(_,{disabled:!0,variant:`outline`,children:`Resize Volume`}),Q?(0,V.jsxs)(_,{onClick:()=>{G(`attach`)},size:`sm`,variant:`outline`,children:[(0,V.jsx)(L,{className:`size-4`}),`Attach`]}):null,I.Attachments&&I.Attachments.length>0?(0,V.jsxs)(_,{onClick:()=>{G(`detach`)},size:`sm`,variant:`outline`,children:[(0,V.jsx)(z,{className:`size-4`}),`Detach`]}):null,(0,V.jsxs)(i,{className:g({variant:`outline`,size:`sm`}),search:{volumeId:I.VolumeId},to:`/ec2/create-snapshot`,children:[(0,V.jsx)(ee,{className:`size-4`}),`Create Snapshot`]}),(0,V.jsx)(F,{state:I.State})]}),subtitle:`Volume Details`,title:I.VolumeId}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Volume Information`}),(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`Volume ID`,value:I.VolumeId}),(0,V.jsx)(P,{label:`Size`,value:`${I.Size} GiB`}),(0,V.jsx)(P,{label:`Volume Type`,value:I.VolumeType}),(0,V.jsx)(P,{label:`State`,value:I.State}),(0,V.jsx)(P,{label:`Availability Zone`,value:I.AvailabilityZone}),(0,V.jsx)(P,{label:`Create Time`,value:o(I.CreateTime)}),(0,V.jsx)(P,{label:`Encrypted`,value:I.Encrypted?`Yes`:`No`}),(0,V.jsx)(P,{label:`KMS Key ID`,value:I.KmsKeyId})]})]}),I.Attachments&&I.Attachments.length>0&&(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Attachments`}),I.Attachments.map(e=>(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`Instance ID`,value:e.InstanceId?(0,V.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.InstanceId},to:`/ec2/describe-instances/$id`,children:e.InstanceId}):void 0}),(0,V.jsx)(P,{label:`Device`,value:e.Device}),(0,V.jsx)(P,{label:`Status`,value:e.State}),(0,V.jsx)(P,{label:`Attach Time`,value:o(e.AttachTime)}),(0,V.jsx)(P,{label:`Delete on Termination`,value:e.DeleteOnTermination?`Yes`:`No`})]},e.InstanceId))]})]}),(0,V.jsx)(ae,{description:`Are you sure you want to delete the volume "${I.VolumeId}"? This action cannot be undone.`,isPending:R.isPending,onConfirm:async()=>{try{await R.mutateAsync(e),t({to:`/ec2/describe-volumes`})}finally{$()}},onOpenChange:e=>{e||$()},open:W===`delete`,title:`Delete Volume`}),(0,V.jsx)(M,{onOpenChange:e=>{e||($(),q(``),Y(``))},open:W===`attach`,children:(0,V.jsxs)(E,{children:[(0,V.jsxs)(j,{children:[(0,V.jsx)(D,{children:`Attach Volume`}),(0,V.jsx)(T,{children:`Attach this volume to a running instance.`})]}),(0,V.jsxs)(w,{children:[(0,V.jsx)(C,{children:(0,V.jsx)(`label`,{htmlFor:`attachInstance`,children:`Instance`})}),(0,V.jsxs)(m,{onValueChange:e=>{q(e??``)},value:K,children:[(0,V.jsx)(p,{className:`w-full`,id:`attachInstance`,children:(0,V.jsx)(u,{placeholder:`Select an instance`})}),(0,V.jsx)(f,{children:oe.map(e=>{let t=s(e.Tags);return(0,V.jsxs)(d,{value:e.InstanceId??``,children:[e.InstanceId,t?` (${t})`:``]},e.InstanceId)})})]})]}),(0,V.jsxs)(w,{children:[(0,V.jsx)(C,{children:(0,V.jsx)(`label`,{htmlFor:`attachDevice`,children:`Device (optional)`})}),(0,V.jsx)(v,{id:`attachDevice`,onChange:e=>{Y(e.target.value)},placeholder:`/dev/sdf`,value:J})]}),(0,V.jsxs)(k,{children:[(0,V.jsx)(A,{children:`Cancel`}),(0,V.jsx)(O,{disabled:H.isPending||!K,onClick:async()=>{try{await H.mutateAsync({volumeId:e,instanceId:K,device:J||void 0}),$(),q(``),Y(``)}catch{}},children:H.isPending?`Attaching…`:`Attach`})]})]})}),(0,V.jsx)(M,{onOpenChange:e=>{e||($(),Z(!1))},open:W===`detach`,children:(0,V.jsxs)(E,{children:[(0,V.jsxs)(j,{children:[(0,V.jsx)(D,{children:`Detach Volume`}),(0,V.jsxs)(T,{children:[`Are you sure you want to detach the volume "`,I.VolumeId,`" from instance "`,I.Attachments?.[0]?.InstanceId,`"?`]})]}),(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(`input`,{"aria-label":`Force detach`,checked:X,onChange:e=>{Z(e.target.checked)},type:`checkbox`}),`Force detach`]}),(0,V.jsxs)(k,{children:[(0,V.jsx)(A,{children:`Cancel`}),(0,V.jsx)(O,{disabled:U.isPending,onClick:async()=>{let t=I?.Attachments?.[0]?.InstanceId;try{await U.mutateAsync({volumeId:e,instanceId:t??void 0,force:X||void 0}),$(),Z(!1)}catch{}},children:U.isPending?`Detaching…`:`Detach`})]})]})})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`Volume not found.`})]})}export{H as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CFuJGRSt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CFuJGRSt.js new file mode 100644 index 000000000..1c4686320 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CFuJGRSt.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-D5TyhwCX.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{l as r,t as i}from"./ec2-DYgBhYCJ.js";var a=e(`/_auth/ec2/(elastic-ips)/describe-addresses/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Elastic IP | Mulga`}]}),component:t(()=>n(()=>import(`./_id-D5TyhwCX.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CHu8CrA0.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CHu8CrA0.js deleted file mode 100644 index 75bd96755..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CHu8CrA0.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DJjABFwx.js","assets/compiler-runtime-D_vZfn79.js","assets/removable-Dwr9otKB.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/cli-command-panel-CLiFy1rG.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/rds-CE3126Ga.js","assets/rds-BkKLEWPo.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-CyiqRExv.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/tags-field-array-Dk9nPDzt.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/detail-row-DNBRlVeK.js","assets/system-managed-Dk7ySh_E.js","assets/system-image-required-PXuPdEKF.js","assets/rotate-cw-FTUcK_f-.js","assets/triangle-alert-DcjzeKLg.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-BkxIRro9.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{o as i,w as a}from"./ec2-CWEplLq4.js";import{d as o,h as s,i as c,o as l}from"./rds-CyiqRExv.js";var u=e(`/_auth/rds/(snapshots)/restore-db-instance-from-db-snapshot/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...c(n(t.id)),staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`Restore ${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-DJjABFwx.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CNkL0BtN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CNkL0BtN.js new file mode 100644 index 000000000..b5b586216 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CNkL0BtN.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Dwv2H6B-.js","assets/compiler-runtime-D_vZfn79.js","assets/removable-Dwr9otKB.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/cli-command-panel-DavMY-tN.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/rds-DIuGt87z.js","assets/rds-DbPUva_R.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-Ca8CaJkU.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/tags-field-array-Bjg8Nmui.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/detail-row-DNBRlVeK.js","assets/system-managed-Dk7ySh_E.js","assets/system-image-required-D20bojgG.js","assets/rotate-cw-FTUcK_f-.js","assets/triangle-alert-DcjzeKLg.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-DFjvW5uT.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{o as i,w as a}from"./ec2-DYgBhYCJ.js";import{d as o,h as s,i as c,o as l}from"./rds-Ca8CaJkU.js";var u=e(`/_auth/rds/(snapshots)/restore-db-instance-from-db-snapshot/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...c(n(t.id)),staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`Restore ${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-Dwv2H6B-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Gaouu0Ns.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CQqSp1m-.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Gaouu0Ns.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CQqSp1m-.js index 67c500dda..02c184eb3 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Gaouu0Ns.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CQqSp1m-.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{c,i as l,n as u,s as d,t as f}from"./select-B01jpDaX.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-BarTr35m.js";import{t as h}from"./input-6kdUb_DH.js";import{O as ee,_ as te,d as ne,x as re}from"./ec2-CWEplLq4.js";import{G as ie,N as ae,P as oe,a as g,y as _}from"./ec2-Ctto2xjU.js";import{t as v}from"./_id-CjFrz8tY.js";import{t as y}from"./page-heading-vksh_67w.js";import{t as b}from"./badge-B_ExXcw2.js";import{a as x,i as S,n as C,t as w}from"./zod-DF_n2ejy.js";import{t as T}from"./error-banner-DeOeVBKS.js";import{r as E,s as D,t as O}from"./field-c7GHI5st.js";import{t as se}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as k,t as A}from"./detail-row-DNBRlVeK.js";import{d as ce,r as j}from"./ec2-DhWukC79.js";var M=t(n()),N=e();function P(e){return e.GatewayId??e.NatGatewayId??e.NetworkInterfaceId??e.InstanceId??e.VpcPeeringConnectionId??`—`}function F(){let{id:e}=v.useParams(),t=a(),{data:n}=r(re(e)),{data:F}=r(ne),{data:I}=r(te),{data:L}=r(ee),R=oe(),z=_(),B=ae(),V=g(),H=ie(),[U,W]=(0,M.useState)(!1),G=n.RouteTables?.[0],K=S({resolver:w(ce),defaultValues:{destinationCidrBlock:`0.0.0.0/0`,targetType:`igw`,targetId:``}}),le=x({control:K.control,name:`targetType`}),q=S({resolver:w(j),defaultValues:{subnetId:``}});if(!G?.RouteTableId)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(s,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`Route Table not found.`})]});let J=G.RouteTableId,Y=o(G.Tags),X=G.Associations?.some(e=>e.Main)??!1,Z=G.Routes??[],Q=(G.Associations??[]).filter(e=>e.SubnetId),$=(F.InternetGateways??[]).filter(e=>e.Attachments?.some(e=>e.VpcId===G.VpcId)),ue=(I.NatGateways??[]).filter(e=>e.VpcId===G.VpcId&&e.State===`available`),de=new Set(Q.map(e=>e.SubnetId)),fe=(L.Subnets??[]).filter(e=>e.VpcId===G.VpcId&&!de.has(e.SubnetId)),pe=async()=>{try{await R.mutateAsync(J),t({to:`/ec2/describe-route-tables`})}finally{W(!1)}},me=async e=>{await z.mutateAsync({routeTableId:J,destinationCidrBlock:e.destinationCidrBlock,gatewayId:e.targetType===`igw`?e.targetId:void 0,natGatewayId:e.targetType===`nat`?e.targetId:void 0}),K.reset({destinationCidrBlock:`0.0.0.0/0`,targetType:`igw`,targetId:``})},he=async e=>{await V.mutateAsync({routeTableId:J,subnetId:e.subnetId}),q.reset({subnetId:``})};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(s,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),R.error&&(0,N.jsx)(T,{error:R.error,msg:`Failed to delete Route Table`}),(0,N.jsxs)(`div`,{className:`space-y-6`,children:[(0,N.jsx)(y,{actions:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsxs)(m,{disabled:X||R.isPending,onClick:()=>{W(!0)},size:`sm`,variant:`destructive`,children:[(0,N.jsx)(p,{className:`size-4`}),`Delete`]}),X&&(0,N.jsx)(b,{variant:`secondary`,children:`Main`})]}),subtitle:`Route Table Details`,title:Y?`${G.RouteTableId} (${Y})`:G.RouteTableId}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Route Table Information`}),(0,N.jsxs)(k.Content,{children:[(0,N.jsx)(A,{label:`Route Table ID`,value:G.RouteTableId}),(0,N.jsx)(A,{label:`Main`,value:X?`Yes`:`No`}),(0,N.jsx)(A,{label:`VPC ID`,value:G.VpcId?(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:G.VpcId},to:`/ec2/describe-vpcs/$id`,children:G.VpcId}):`—`}),(0,N.jsx)(A,{label:`Owner ID`,value:G.OwnerId??`—`})]})]}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Routes`}),(0,N.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,N.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,N.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,N.jsx)(`thead`,{className:`bg-muted/50 text-left text-muted-foreground`,children:(0,N.jsxs)(`tr`,{children:[(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Destination`}),(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Target`}),(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Status`}),(0,N.jsx)(`th`,{className:`p-2`,children:(0,N.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,N.jsx)(`tbody`,{children:Z.length>0?Z.map(e=>{let t=e.DestinationCidrBlock??e.DestinationPrefixListId??`—`,n=e.GatewayId===`local`,r=e.DestinationCidrBlock;return(0,N.jsxs)(`tr`,{className:`border-t`,children:[(0,N.jsx)(`td`,{className:`p-2 font-mono`,children:t}),(0,N.jsx)(`td`,{className:`p-2 font-mono`,children:P(e)}),(0,N.jsx)(`td`,{className:`p-2`,children:e.State??`—`}),(0,N.jsx)(`td`,{className:`p-2 text-right`,children:!n&&r&&(0,N.jsx)(m,{disabled:B.isPending,onClick:async()=>await B.mutateAsync({routeTableId:J,destinationCidrBlock:r}),size:`sm`,variant:`ghost`,children:(0,N.jsx)(p,{className:`size-4`})})})]},t)}):(0,N.jsx)(`tr`,{children:(0,N.jsx)(`td`,{className:`p-2 text-muted-foreground`,colSpan:4,children:`No routes.`})})})]})}),(z.error??B.error)&&(0,N.jsx)(T,{error:z.error??B.error??void 0,msg:`Failed to update route`}),(0,N.jsxs)(`form`,{className:`grid items-end gap-3 sm:grid-cols-[1fr_1fr_1fr_auto]`,onSubmit:K.handleSubmit(me),children:[(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`destinationCidrBlock`,children:`Destination`})}),(0,N.jsx)(h,{id:`destinationCidrBlock`,placeholder:`0.0.0.0/0`,...K.register(`destinationCidrBlock`)}),(0,N.jsx)(E,{errors:[K.formState.errors.destinationCidrBlock]})]}),(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`targetType`,children:`Target type`})}),(0,N.jsx)(C,{control:K.control,name:`targetType`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t),K.setValue(`targetId`,``)},value:e.value,children:[(0,N.jsx)(d,{className:`w-full`,id:`targetType`,children:(0,N.jsx)(c,{})}),(0,N.jsxs)(u,{children:[(0,N.jsx)(l,{value:`igw`,children:`Internet Gateway`}),(0,N.jsx)(l,{value:`nat`,children:`NAT Gateway`})]})]})})]}),(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`targetId`,children:`Target`})}),(0,N.jsx)(C,{control:K.control,name:`targetId`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t)},value:e.value??``,children:[(0,N.jsx)(d,{"aria-invalid":!!K.formState.errors.targetId,className:`w-full`,id:`targetId`,children:(0,N.jsx)(c,{placeholder:`Select target`})}),(0,N.jsx)(u,{children:le===`igw`?$.map(e=>(0,N.jsx)(l,{value:e.InternetGatewayId??``,children:e.InternetGatewayId},e.InternetGatewayId)):ue.map(e=>(0,N.jsx)(l,{value:e.NatGatewayId??``,children:e.NatGatewayId},e.NatGatewayId))})]})}),(0,N.jsx)(E,{errors:[K.formState.errors.targetId]})]}),(0,N.jsx)(m,{disabled:z.isPending,size:`sm`,type:`submit`,children:`Add route`})]})]})]}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Subnet Associations`}),(0,N.jsxs)(`div`,{className:`space-y-4 p-4`,children:[Q.length>0?(0,N.jsx)(`ul`,{className:`space-y-2`,children:Q.map(e=>{let t=e.RouteTableAssociationId;return(0,N.jsxs)(`li`,{className:`flex items-center justify-between rounded-md border p-2 text-sm`,children:[(0,N.jsx)(i,{className:`font-mono text-primary hover:underline`,params:{id:e.SubnetId??``},to:`/ec2/describe-subnets/$id`,children:e.SubnetId}),(0,N.jsx)(m,{disabled:!t||H.isPending,onClick:async()=>{t&&await H.mutateAsync(t)},size:`sm`,variant:`ghost`,children:(0,N.jsx)(p,{className:`size-4`})})]},t)})}):(0,N.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No subnet associations.`}),(V.error??H.error)&&(0,N.jsx)(T,{error:V.error??H.error??void 0,msg:`Failed to update association`}),(0,N.jsxs)(`form`,{className:`grid items-end gap-3 sm:grid-cols-[1fr_auto]`,onSubmit:q.handleSubmit(he),children:[(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`subnetId`,children:`Associate subnet`})}),(0,N.jsx)(C,{control:q.control,name:`subnetId`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t)},value:e.value??``,children:[(0,N.jsx)(d,{"aria-invalid":!!q.formState.errors.subnetId,className:`w-full`,id:`subnetId`,children:(0,N.jsx)(c,{placeholder:`Select a subnet`})}),(0,N.jsx)(u,{children:fe.map(e=>{let t=o(e.Tags);return(0,N.jsx)(l,{value:e.SubnetId??``,children:t?`${e.SubnetId} (${t})`:`${e.SubnetId} (${e.CidrBlock})`},e.SubnetId)})})]})}),(0,N.jsx)(E,{errors:[q.formState.errors.subnetId]})]}),(0,N.jsx)(m,{disabled:V.isPending,size:`sm`,type:`submit`,children:`Associate`})]})]})]})]}),(0,N.jsx)(se,{description:`Are you sure you want to delete the Route Table "${G.RouteTableId}"? This action cannot be undone.`,isPending:R.isPending,onConfirm:pe,onOpenChange:W,open:U,title:`Delete Route Table`})]})}export{F as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{c,i as l,n as u,s as d,t as f}from"./select-Cn66OoPn.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-qf9lLJ2x.js";import{t as h}from"./input-D3aUBtS6.js";import{O as ee,_ as te,d as ne,x as re}from"./ec2-DYgBhYCJ.js";import{G as ie,N as ae,P as oe,a as g,y as _}from"./ec2-Csn1kwZ8.js";import{t as v}from"./_id-B-3dqH3s.js";import{t as y}from"./page-heading-vksh_67w.js";import{t as b}from"./badge-6vbuGFqk.js";import{a as x,i as S,n as C,t as w}from"./zod-A4qtKH_p.js";import{t as T}from"./error-banner-DeOeVBKS.js";import{r as E,s as D,t as O}from"./field-CS-ql6du.js";import{t as se}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as k,t as A}from"./detail-row-DNBRlVeK.js";import{d as ce,r as j}from"./ec2-DqNqPeiA.js";var M=t(n()),N=e();function P(e){return e.GatewayId??e.NatGatewayId??e.NetworkInterfaceId??e.InstanceId??e.VpcPeeringConnectionId??`—`}function F(){let{id:e}=v.useParams(),t=a(),{data:n}=r(re(e)),{data:F}=r(ne),{data:I}=r(te),{data:L}=r(ee),R=oe(),z=_(),B=ae(),V=g(),H=ie(),[U,W]=(0,M.useState)(!1),G=n.RouteTables?.[0],K=S({resolver:w(ce),defaultValues:{destinationCidrBlock:`0.0.0.0/0`,targetType:`igw`,targetId:``}}),le=x({control:K.control,name:`targetType`}),q=S({resolver:w(j),defaultValues:{subnetId:``}});if(!G?.RouteTableId)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(s,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`Route Table not found.`})]});let J=G.RouteTableId,Y=o(G.Tags),X=G.Associations?.some(e=>e.Main)??!1,Z=G.Routes??[],Q=(G.Associations??[]).filter(e=>e.SubnetId),$=(F.InternetGateways??[]).filter(e=>e.Attachments?.some(e=>e.VpcId===G.VpcId)),ue=(I.NatGateways??[]).filter(e=>e.VpcId===G.VpcId&&e.State===`available`),de=new Set(Q.map(e=>e.SubnetId)),fe=(L.Subnets??[]).filter(e=>e.VpcId===G.VpcId&&!de.has(e.SubnetId)),pe=async()=>{try{await R.mutateAsync(J),t({to:`/ec2/describe-route-tables`})}finally{W(!1)}},me=async e=>{await z.mutateAsync({routeTableId:J,destinationCidrBlock:e.destinationCidrBlock,gatewayId:e.targetType===`igw`?e.targetId:void 0,natGatewayId:e.targetType===`nat`?e.targetId:void 0}),K.reset({destinationCidrBlock:`0.0.0.0/0`,targetType:`igw`,targetId:``})},he=async e=>{await V.mutateAsync({routeTableId:J,subnetId:e.subnetId}),q.reset({subnetId:``})};return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(s,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),R.error&&(0,N.jsx)(T,{error:R.error,msg:`Failed to delete Route Table`}),(0,N.jsxs)(`div`,{className:`space-y-6`,children:[(0,N.jsx)(y,{actions:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsxs)(m,{disabled:X||R.isPending,onClick:()=>{W(!0)},size:`sm`,variant:`destructive`,children:[(0,N.jsx)(p,{className:`size-4`}),`Delete`]}),X&&(0,N.jsx)(b,{variant:`secondary`,children:`Main`})]}),subtitle:`Route Table Details`,title:Y?`${G.RouteTableId} (${Y})`:G.RouteTableId}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Route Table Information`}),(0,N.jsxs)(k.Content,{children:[(0,N.jsx)(A,{label:`Route Table ID`,value:G.RouteTableId}),(0,N.jsx)(A,{label:`Main`,value:X?`Yes`:`No`}),(0,N.jsx)(A,{label:`VPC ID`,value:G.VpcId?(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:G.VpcId},to:`/ec2/describe-vpcs/$id`,children:G.VpcId}):`—`}),(0,N.jsx)(A,{label:`Owner ID`,value:G.OwnerId??`—`})]})]}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Routes`}),(0,N.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,N.jsx)(`div`,{className:`overflow-x-auto rounded-md border`,children:(0,N.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,N.jsx)(`thead`,{className:`bg-muted/50 text-left text-muted-foreground`,children:(0,N.jsxs)(`tr`,{children:[(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Destination`}),(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Target`}),(0,N.jsx)(`th`,{className:`p-2 font-medium`,children:`Status`}),(0,N.jsx)(`th`,{className:`p-2`,children:(0,N.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,N.jsx)(`tbody`,{children:Z.length>0?Z.map(e=>{let t=e.DestinationCidrBlock??e.DestinationPrefixListId??`—`,n=e.GatewayId===`local`,r=e.DestinationCidrBlock;return(0,N.jsxs)(`tr`,{className:`border-t`,children:[(0,N.jsx)(`td`,{className:`p-2 font-mono`,children:t}),(0,N.jsx)(`td`,{className:`p-2 font-mono`,children:P(e)}),(0,N.jsx)(`td`,{className:`p-2`,children:e.State??`—`}),(0,N.jsx)(`td`,{className:`p-2 text-right`,children:!n&&r&&(0,N.jsx)(m,{disabled:B.isPending,onClick:async()=>await B.mutateAsync({routeTableId:J,destinationCidrBlock:r}),size:`sm`,variant:`ghost`,children:(0,N.jsx)(p,{className:`size-4`})})})]},t)}):(0,N.jsx)(`tr`,{children:(0,N.jsx)(`td`,{className:`p-2 text-muted-foreground`,colSpan:4,children:`No routes.`})})})]})}),(z.error??B.error)&&(0,N.jsx)(T,{error:z.error??B.error??void 0,msg:`Failed to update route`}),(0,N.jsxs)(`form`,{className:`grid items-end gap-3 sm:grid-cols-[1fr_1fr_1fr_auto]`,onSubmit:K.handleSubmit(me),children:[(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`destinationCidrBlock`,children:`Destination`})}),(0,N.jsx)(h,{id:`destinationCidrBlock`,placeholder:`0.0.0.0/0`,...K.register(`destinationCidrBlock`)}),(0,N.jsx)(E,{errors:[K.formState.errors.destinationCidrBlock]})]}),(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`targetType`,children:`Target type`})}),(0,N.jsx)(C,{control:K.control,name:`targetType`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t),K.setValue(`targetId`,``)},value:e.value,children:[(0,N.jsx)(d,{className:`w-full`,id:`targetType`,children:(0,N.jsx)(c,{})}),(0,N.jsxs)(u,{children:[(0,N.jsx)(l,{value:`igw`,children:`Internet Gateway`}),(0,N.jsx)(l,{value:`nat`,children:`NAT Gateway`})]})]})})]}),(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`targetId`,children:`Target`})}),(0,N.jsx)(C,{control:K.control,name:`targetId`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t)},value:e.value??``,children:[(0,N.jsx)(d,{"aria-invalid":!!K.formState.errors.targetId,className:`w-full`,id:`targetId`,children:(0,N.jsx)(c,{placeholder:`Select target`})}),(0,N.jsx)(u,{children:le===`igw`?$.map(e=>(0,N.jsx)(l,{value:e.InternetGatewayId??``,children:e.InternetGatewayId},e.InternetGatewayId)):ue.map(e=>(0,N.jsx)(l,{value:e.NatGatewayId??``,children:e.NatGatewayId},e.NatGatewayId))})]})}),(0,N.jsx)(E,{errors:[K.formState.errors.targetId]})]}),(0,N.jsx)(m,{disabled:z.isPending,size:`sm`,type:`submit`,children:`Add route`})]})]})]}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Subnet Associations`}),(0,N.jsxs)(`div`,{className:`space-y-4 p-4`,children:[Q.length>0?(0,N.jsx)(`ul`,{className:`space-y-2`,children:Q.map(e=>{let t=e.RouteTableAssociationId;return(0,N.jsxs)(`li`,{className:`flex items-center justify-between rounded-md border p-2 text-sm`,children:[(0,N.jsx)(i,{className:`font-mono text-primary hover:underline`,params:{id:e.SubnetId??``},to:`/ec2/describe-subnets/$id`,children:e.SubnetId}),(0,N.jsx)(m,{disabled:!t||H.isPending,onClick:async()=>{t&&await H.mutateAsync(t)},size:`sm`,variant:`ghost`,children:(0,N.jsx)(p,{className:`size-4`})})]},t)})}):(0,N.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No subnet associations.`}),(V.error??H.error)&&(0,N.jsx)(T,{error:V.error??H.error??void 0,msg:`Failed to update association`}),(0,N.jsxs)(`form`,{className:`grid items-end gap-3 sm:grid-cols-[1fr_auto]`,onSubmit:q.handleSubmit(he),children:[(0,N.jsxs)(O,{children:[(0,N.jsx)(D,{children:(0,N.jsx)(`label`,{htmlFor:`subnetId`,children:`Associate subnet`})}),(0,N.jsx)(C,{control:q.control,name:`subnetId`,render:({field:e})=>(0,N.jsxs)(f,{onValueChange:t=>{e.onChange(t)},value:e.value??``,children:[(0,N.jsx)(d,{"aria-invalid":!!q.formState.errors.subnetId,className:`w-full`,id:`subnetId`,children:(0,N.jsx)(c,{placeholder:`Select a subnet`})}),(0,N.jsx)(u,{children:fe.map(e=>{let t=o(e.Tags);return(0,N.jsx)(l,{value:e.SubnetId??``,children:t?`${e.SubnetId} (${t})`:`${e.SubnetId} (${e.CidrBlock})`},e.SubnetId)})})]})}),(0,N.jsx)(E,{errors:[q.formState.errors.subnetId]})]}),(0,N.jsx)(m,{disabled:V.isPending,size:`sm`,type:`submit`,children:`Associate`})]})]})]})]}),(0,N.jsx)(se,{description:`Are you sure you want to delete the Route Table "${G.RouteTableId}"? This action cannot be undone.`,isPending:R.isPending,onConfirm:pe,onOpenChange:W,open:U,title:`Delete Route Table`})]})}export{F as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CR_-tZJK.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CR_-tZJK.js new file mode 100644 index 000000000..8d060166a --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CR_-tZJK.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CgxEmUgJ.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{l as r,v as i}from"./ec2-DYgBhYCJ.js";var a=e(`/_auth/ec2/(placement-groups)/describe-placement-groups/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CgxEmUgJ.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Hpba0oEO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CS4Fo2ZG.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Hpba0oEO.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CS4Fo2ZG.js index 60c25061a..c82fcd02a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Hpba0oEO.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CS4Fo2ZG.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{in as a}from"./cluster-config-xw_Q7X1e.js";import{t as o}from"./back-link-CjKy1JE5.js";import{t as s}from"./trash-DVab4pEz.js";import{t as c}from"./button-BarTr35m.js";import{f as l}from"./ec2-CWEplLq4.js";import{O as u}from"./ec2-Ctto2xjU.js";import{t as d}from"./_id-CXZivkIZ.js";import{t as f}from"./page-heading-vksh_67w.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as h,t as g}from"./detail-row-DNBRlVeK.js";var _=t(n()),v=e();function y(){let{id:e}=d.useParams(),t=i(),{data:n}=r(l(e)),y=n.KeyPairs?.[0],b=u(),[x,S]=(0,_.useState)(!1),C=async()=>{try{await b.mutateAsync(e),t({to:`/ec2/describe-key-pairs`})}finally{S(!1)}};if(!y?.KeyPairId)return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(o,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),(0,v.jsx)(`p`,{className:`text-muted-foreground`,children:`Key pair not found.`})]});let w=a(y.CreateTime);return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(o,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),b.error&&(0,v.jsx)(p,{error:b.error,msg:`Failed to delete key pair`}),(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(f,{actions:(0,v.jsxs)(c,{onClick:()=>{S(!0)},size:`sm`,variant:`destructive`,children:[(0,v.jsx)(s,{className:`size-4`}),`Delete`]}),subtitle:`Key Pair Details`,title:y.KeyName??``}),(0,v.jsxs)(h,{children:[(0,v.jsx)(h.Header,{children:`Key Pair Information`}),(0,v.jsxs)(h.Content,{children:[(0,v.jsx)(g,{label:`Key Pair ID`,value:y.KeyPairId}),(0,v.jsx)(g,{label:`Key Name`,value:y.KeyName}),(0,v.jsx)(g,{label:`Key Type`,value:y.KeyType}),(0,v.jsx)(g,{label:`Key Fingerprint`,value:y.KeyFingerprint}),(0,v.jsx)(g,{label:`Creation Date`,value:w})]})]}),y.Tags&&y.Tags.length>0&&(0,v.jsxs)(h,{children:[(0,v.jsx)(h.Header,{children:`Tags`}),(0,v.jsx)(h.Content,{children:y.Tags.map(e=>(0,v.jsx)(g,{label:e.Key??``,value:e.Value},e.Key))})]})]}),(0,v.jsx)(m,{description:`Are you sure you want to delete the key pair "${y.KeyName}"? This action cannot be undone. Any instances using this key pair will no longer be able to be accessed with it.`,isPending:b.isPending,onConfirm:C,onOpenChange:S,open:x,title:`Delete Key Pair`})]})}export{y as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{an as a}from"./cluster-config-DkOiY8HH.js";import{t as o}from"./back-link-wsXUoJ12.js";import{t as s}from"./trash-DVab4pEz.js";import{t as c}from"./button-qf9lLJ2x.js";import{f as l}from"./ec2-DYgBhYCJ.js";import{O as u}from"./ec2-Csn1kwZ8.js";import{t as d}from"./_id-C7Cm9Wp_.js";import{t as f}from"./page-heading-vksh_67w.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as h,t as g}from"./detail-row-DNBRlVeK.js";var _=t(n()),v=e();function y(){let{id:e}=d.useParams(),t=i(),{data:n}=r(l(e)),y=n.KeyPairs?.[0],b=u(),[x,S]=(0,_.useState)(!1),C=async()=>{try{await b.mutateAsync(e),t({to:`/ec2/describe-key-pairs`})}finally{S(!1)}};if(!y?.KeyPairId)return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(o,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),(0,v.jsx)(`p`,{className:`text-muted-foreground`,children:`Key pair not found.`})]});let w=a(y.CreateTime);return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(o,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),b.error&&(0,v.jsx)(p,{error:b.error,msg:`Failed to delete key pair`}),(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(f,{actions:(0,v.jsxs)(c,{onClick:()=>{S(!0)},size:`sm`,variant:`destructive`,children:[(0,v.jsx)(s,{className:`size-4`}),`Delete`]}),subtitle:`Key Pair Details`,title:y.KeyName??``}),(0,v.jsxs)(h,{children:[(0,v.jsx)(h.Header,{children:`Key Pair Information`}),(0,v.jsxs)(h.Content,{children:[(0,v.jsx)(g,{label:`Key Pair ID`,value:y.KeyPairId}),(0,v.jsx)(g,{label:`Key Name`,value:y.KeyName}),(0,v.jsx)(g,{label:`Key Type`,value:y.KeyType}),(0,v.jsx)(g,{label:`Key Fingerprint`,value:y.KeyFingerprint}),(0,v.jsx)(g,{label:`Creation Date`,value:w})]})]}),y.Tags&&y.Tags.length>0&&(0,v.jsxs)(h,{children:[(0,v.jsx)(h.Header,{children:`Tags`}),(0,v.jsx)(h.Content,{children:y.Tags.map(e=>(0,v.jsx)(g,{label:e.Key??``,value:e.Value},e.Key))})]})]}),(0,v.jsx)(m,{description:`Are you sure you want to delete the key pair "${y.KeyName}"? This action cannot be undone. Any instances using this key pair will no longer be able to be accessed with it.`,isPending:b.isPending,onConfirm:C,onOpenChange:S,open:x,title:`Delete Key Pair`})]})}export{y as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CXZivkIZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CXZivkIZ.js deleted file mode 100644 index 64c8d62e4..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CXZivkIZ.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Hpba0oEO.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{f as r}from"./ec2-CWEplLq4.js";var i=e(`/_auth/ec2/(key)/describe-key-pairs/$id`)({loader:async({context:e,params:t})=>await e.queryClient.query({...r(t.id),staleTime:`static`}),head:({loaderData:e})=>({meta:[{title:`${e?.KeyPairs?.[0]?.KeyName??`Key Pair`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-Hpba0oEO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CbghuErm.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CbghuErm.js deleted file mode 100644 index 89d518b7f..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CbghuErm.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CVVEELAg.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/input-6kdUb_DH.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ec2-DhWukC79.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{k as r}from"./ec2-CWEplLq4.js";var i=e(`/_auth/ec2/(volumes)/modify-volume/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`Resize ${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CVVEELAg.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C92JROxq.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CcFqF_zc.js similarity index 80% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C92JROxq.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CcFqF_zc.js index daebbc0b0..84e898783 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-C92JROxq.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CcFqF_zc.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{O as u,j as d}from"./ec2-CWEplLq4.js";import{z as f}from"./ec2-Ctto2xjU.js";import{t as p}from"./_id-Cssn1mnV.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./state-badge-D1Z6q_OA.js";var b=t(n()),x=e();function S(){let{id:e}=p.useParams(),t=a(),{data:n}=r(d(e)),{data:S}=r(u),C=n.Vpcs?.[0],w=f(),[T,E]=(0,b.useState)(!1),D=S.Subnets?.filter(t=>t.VpcId===e)??[],O=async()=>{try{await w.mutateAsync(e),t({to:`/ec2/describe-vpcs`})}finally{E(!1)}};if(!C?.VpcId)return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),(0,x.jsx)(`p`,{className:`text-muted-foreground`,children:`VPC not found.`})]});let k=o(C.Tags);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),w.error&&(0,x.jsx)(h,{error:w.error,msg:`Failed to delete VPC`}),(0,x.jsxs)(`div`,{className:`space-y-6`,children:[(0,x.jsx)(m,{actions:(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsxs)(l,{onClick:()=>{E(!0)},size:`sm`,variant:`destructive`,children:[(0,x.jsx)(c,{className:`size-4`}),`Delete`]}),(0,x.jsx)(y,{state:C.State})]}),subtitle:`VPC Details`,title:k?`${C.VpcId} (${k})`:C.VpcId}),(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`VPC Information`}),(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`VPC ID`,value:C.VpcId}),(0,x.jsx)(v,{label:`State`,value:C.State}),(0,x.jsx)(v,{label:`CIDR Block`,value:C.CidrBlock}),(0,x.jsx)(v,{label:`Is Default`,value:C.IsDefault?`Yes`:`No`}),(0,x.jsx)(v,{label:`DHCP Options ID`,value:C.DhcpOptionsId}),(0,x.jsx)(v,{label:`Instance Tenancy`,value:C.InstanceTenancy}),(0,x.jsx)(v,{label:`Owner ID`,value:C.OwnerId})]})]}),D.length>0&&(0,x.jsxs)(_,{children:[(0,x.jsxs)(_.Header,{children:[`Subnets (`,D.length,`)`]}),D.map(e=>e.SubnetId?(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`Subnet ID`,value:(0,x.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.SubnetId},to:`/ec2/describe-subnets/$id`,children:e.SubnetId})}),(0,x.jsx)(v,{label:`CIDR Block`,value:e.CidrBlock}),(0,x.jsx)(v,{label:`Availability Zone`,value:e.AvailabilityZone}),(0,x.jsx)(v,{label:`State`,value:e.State})]},e.SubnetId):null)]})]}),(0,x.jsx)(g,{description:`Are you sure you want to delete the VPC "${C.VpcId}"? This action cannot be undone. The VPC must have no associated subnets or internet gateways.`,isPending:w.isPending,onConfirm:O,onOpenChange:E,open:T,title:`Delete VPC`})]})}export{S as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{O as u,j as d}from"./ec2-DYgBhYCJ.js";import{z as f}from"./ec2-Csn1kwZ8.js";import{t as p}from"./_id-UHU3O-RN.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./state-badge-pn00UE1d.js";var b=t(n()),x=e();function S(){let{id:e}=p.useParams(),t=a(),{data:n}=r(d(e)),{data:S}=r(u),C=n.Vpcs?.[0],w=f(),[T,E]=(0,b.useState)(!1),D=S.Subnets?.filter(t=>t.VpcId===e)??[],O=async()=>{try{await w.mutateAsync(e),t({to:`/ec2/describe-vpcs`})}finally{E(!1)}};if(!C?.VpcId)return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),(0,x.jsx)(`p`,{className:`text-muted-foreground`,children:`VPC not found.`})]});let k=o(C.Tags);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),w.error&&(0,x.jsx)(h,{error:w.error,msg:`Failed to delete VPC`}),(0,x.jsxs)(`div`,{className:`space-y-6`,children:[(0,x.jsx)(m,{actions:(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsxs)(l,{onClick:()=>{E(!0)},size:`sm`,variant:`destructive`,children:[(0,x.jsx)(c,{className:`size-4`}),`Delete`]}),(0,x.jsx)(y,{state:C.State})]}),subtitle:`VPC Details`,title:k?`${C.VpcId} (${k})`:C.VpcId}),(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`VPC Information`}),(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`VPC ID`,value:C.VpcId}),(0,x.jsx)(v,{label:`State`,value:C.State}),(0,x.jsx)(v,{label:`CIDR Block`,value:C.CidrBlock}),(0,x.jsx)(v,{label:`Is Default`,value:C.IsDefault?`Yes`:`No`}),(0,x.jsx)(v,{label:`DHCP Options ID`,value:C.DhcpOptionsId}),(0,x.jsx)(v,{label:`Instance Tenancy`,value:C.InstanceTenancy}),(0,x.jsx)(v,{label:`Owner ID`,value:C.OwnerId})]})]}),D.length>0&&(0,x.jsxs)(_,{children:[(0,x.jsxs)(_.Header,{children:[`Subnets (`,D.length,`)`]}),D.map(e=>e.SubnetId?(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`Subnet ID`,value:(0,x.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.SubnetId},to:`/ec2/describe-subnets/$id`,children:e.SubnetId})}),(0,x.jsx)(v,{label:`CIDR Block`,value:e.CidrBlock}),(0,x.jsx)(v,{label:`Availability Zone`,value:e.AvailabilityZone}),(0,x.jsx)(v,{label:`State`,value:e.State})]},e.SubnetId):null)]})]}),(0,x.jsx)(g,{description:`Are you sure you want to delete the VPC "${C.VpcId}"? This action cannot be undone. The VPC must have no associated subnets or internet gateways.`,isPending:w.isPending,onConfirm:O,onOpenChange:E,open:T,title:`Delete VPC`})]})}export{S as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B86MkOXo.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CgxEmUgJ.js similarity index 85% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B86MkOXo.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CgxEmUgJ.js index e50e2d5d6..44230aaf1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-B86MkOXo.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CgxEmUgJ.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{t as o}from"./back-link-CjKy1JE5.js";import{t as s}from"./trash-DVab4pEz.js";import{t as c}from"./button-BarTr35m.js";import{l,v as u}from"./ec2-CWEplLq4.js";import{M as d}from"./ec2-Ctto2xjU.js";import{t as f}from"./_id-BnnKVvOl.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-D1Z6q_OA.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),{data:x}=r(l),S=d(),[C,w]=(0,y.useState)(!1),T=n.PlacementGroups?.[0],E=x.Reservations?.flatMap(e=>e.Instances??[]).filter(e=>e.Placement?.GroupName===T?.GroupName)??[];return T?.GroupId?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),S.error&&(0,b.jsx)(m,{error:S.error,msg:`Failed to delete placement group`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(c,{onClick:()=>{w(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(s,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:T.State})]}),subtitle:`Placement Group Details`,title:T.GroupName??T.GroupId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Placement Group Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Group ID`,value:T.GroupId}),(0,b.jsx)(_,{label:`Group Name`,value:T.GroupName}),(0,b.jsx)(_,{label:`Strategy`,value:T.Strategy}),(0,b.jsx)(_,{label:`State`,value:T.State}),(0,b.jsx)(_,{label:`Spread Level`,value:T.SpreadLevel})]})]}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Instances`}),E.length>0?E.map(e=>(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Instance ID`,value:e.InstanceId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.InstanceId},to:`/ec2/describe-instances/$id`,children:e.InstanceId}):void 0}),(0,b.jsx)(_,{label:`State`,value:e.State?.Name}),(0,b.jsx)(_,{label:`Instance Type`,value:e.InstanceType}),(0,b.jsx)(_,{label:`Availability Zone`,value:e.Placement?.AvailabilityZone})]},e.InstanceId)):(0,b.jsx)(g.Content,{children:(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`No instances in this placement group.`})})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the placement group "${T.GroupName}"? The group must have no running instances.`,isPending:S.isPending,onConfirm:async()=>{if(T?.GroupName)try{await S.mutateAsync(T.GroupName),t({to:`/ec2/describe-placement-groups`})}finally{w(!1)}},onOpenChange:w,open:C,title:`Delete Placement Group`})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`Placement group not found.`})]})}export{x as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{t as o}from"./back-link-wsXUoJ12.js";import{t as s}from"./trash-DVab4pEz.js";import{t as c}from"./button-qf9lLJ2x.js";import{l,v as u}from"./ec2-DYgBhYCJ.js";import{M as d}from"./ec2-Csn1kwZ8.js";import{t as f}from"./_id-CR_-tZJK.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-pn00UE1d.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),{data:x}=r(l),S=d(),[C,w]=(0,y.useState)(!1),T=n.PlacementGroups?.[0],E=x.Reservations?.flatMap(e=>e.Instances??[]).filter(e=>e.Placement?.GroupName===T?.GroupName)??[];return T?.GroupId?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),S.error&&(0,b.jsx)(m,{error:S.error,msg:`Failed to delete placement group`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(c,{onClick:()=>{w(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(s,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:T.State})]}),subtitle:`Placement Group Details`,title:T.GroupName??T.GroupId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Placement Group Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Group ID`,value:T.GroupId}),(0,b.jsx)(_,{label:`Group Name`,value:T.GroupName}),(0,b.jsx)(_,{label:`Strategy`,value:T.Strategy}),(0,b.jsx)(_,{label:`State`,value:T.State}),(0,b.jsx)(_,{label:`Spread Level`,value:T.SpreadLevel})]})]}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Instances`}),E.length>0?E.map(e=>(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Instance ID`,value:e.InstanceId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:e.InstanceId},to:`/ec2/describe-instances/$id`,children:e.InstanceId}):void 0}),(0,b.jsx)(_,{label:`State`,value:e.State?.Name}),(0,b.jsx)(_,{label:`Instance Type`,value:e.InstanceType}),(0,b.jsx)(_,{label:`Availability Zone`,value:e.Placement?.AvailabilityZone})]},e.InstanceId)):(0,b.jsx)(g.Content,{children:(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`No instances in this placement group.`})})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the placement group "${T.GroupName}"? The group must have no running instances.`,isPending:S.isPending,onConfirm:async()=>{if(T?.GroupName)try{await S.mutateAsync(T.GroupName),t({to:`/ec2/describe-placement-groups`})}finally{w(!1)}},onOpenChange:w,open:C,title:`Delete Placement Group`})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`Placement group not found.`})]})}export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Ch9414Sv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Ch9414Sv.js new file mode 100644 index 000000000..33a9f3ff0 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Ch9414Sv.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-ByloTwZY.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{M as r,u as i}from"./ec2-DYgBhYCJ.js";var a=e(`/_auth/ec2/(internet-gateways)/describe-internet-gateways/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Internet Gateway | Mulga`}]}),component:t(()=>n(()=>import(`./_id-ByloTwZY.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjFrz8tY.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjFrz8tY.js deleted file mode 100644 index 263062f54..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjFrz8tY.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Gaouu0Ns.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/badge-B_ExXcw2.js","assets/useRender-2pqPQOAE.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DhWukC79.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{O as r,_ as i,d as a,x as o}from"./ec2-CWEplLq4.js";var s=e(`/_auth/ec2/(route-tables)/describe-route-tables/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...o(t.id),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Route Table | Mulga`}]}),component:t(()=>n(()=>import(`./_id-Gaouu0Ns.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjZcD-rB.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjZcD-rB.js deleted file mode 100644 index 4213cc846..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CjZcD-rB.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CiH9rPYs.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/elbv2-K4aD09h6.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/commandBuilder-DzFUl2wS.js","assets/elbv2-DSjTzB2q.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/attributes-editor-B4A8SZjs.js","assets/select-B01jpDaX.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/tags-editor-BxxtIXTE.js","assets/plus-BodhJT2v.js","assets/tabs-t6sDAEVZ.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{l as i}from"./ec2-CWEplLq4.js";import{c as a,l as o,s}from"./elbv2-DSjTzB2q.js";var c=e(`/_auth/ec2/(target-groups)/describe-target-groups/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...s([r]),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Target Group | Mulga`}]}),component:t(()=>r(()=>import(`./_id-CiH9rPYs.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CnqUYd1x.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CnqUYd1x.js deleted file mode 100644 index 449003966..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CnqUYd1x.js +++ /dev/null @@ -1,17 +0,0 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{an as o,in as s,ln as c,t as l}from"./cluster-config-xw_Q7X1e.js";import{t as u}from"./button-BarTr35m.js";import{i as d,n as f,r as p,t as m}from"./ecr-BFtKzkrF.js";import{a as h,c as g,l as _,o as v,r as y,s as b,t as x}from"./ecr-F-ANqxrm.js";import{r as S}from"./json-DsgWHaZY.js";import{t as C}from"./_id-v23tv1cK.js";import{t as w}from"./page-heading-vksh_67w.js";import{t as T}from"./badge-B_ExXcw2.js";import{a as E,i as D,l as O,n as k,o as A,r as j,s as M,t as N}from"./alert-dialog-kCQ1W4Rz.js";import{i as P,n as F,r as I,t as L}from"./tabs-t6sDAEVZ.js";import{t as R}from"./json-editor-Bwbz8mfn.js";var z=r(),B=t(n(),1),V=e(),ee=`{ - "rules": [ - { - "rulePriority": 1, - "description": "Expire untagged images older than 14 days", - "selection": { - "tagStatus": "untagged", - "countType": "sinceImagePushed", - "countUnit": "days", - "countNumber": 14 - }, - "action": { "type": "expire" } - } - ] -}`;function H(e){let t=(0,z.c)(54),{repositoryName:n}=e,r;t[0]===n?r=t[1]:(r=m(n),t[0]=n,t[1]=r);let{data:a}=i(r),o=g(),s=y(),c=v(),[l,d]=(0,B.useState)(a??``),[f,p]=(0,B.useState)(a);a!==f&&(p(a),d(a??``));let h;t[2]!==l||t[3]!==o||t[4]!==n?(h=async function(){try{await o.mutateAsync({repositoryName:n,lifecyclePolicyText:l})}catch{}},t[2]=l,t[3]=o,t[4]=n,t[5]=h):h=t[5];let _=h,b;t[6]!==s||t[7]!==n?(b=async function(){try{await s.mutateAsync(n)}catch{}},t[6]=s,t[7]=n,t[8]=b):b=t[8];let x=b,C;t[9]!==c||t[10]!==n?(C=async function(){try{await c.mutateAsync(n)}catch{}},t[9]=c,t[10]=n,t[11]=C):C=t[11];let w=C,T;t[12]===l?T=t[13]:(T=l.trim(),t[12]=l,t[13]=T);let E=T,D;t[14]!==l||t[15]!==E.length?(D=E.length>0&&!S(l),t[14]=l,t[15]=E.length,t[16]=D):D=t[16];let O=D,k=o.error??s.error??c.error,A;t[17]===c.data?.previewResults?A=t[18]:(A=c.data?.previewResults??[],t[17]=c.data?.previewResults,t[18]=A);let j=A,M;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Lifecycle policy`}),t[19]=M):M=t[19];let N=s.isPending||!a,P=s.isPending?`Deleting…`:`Delete`,F;t[20]!==x||t[21]!==P||t[22]!==N?(F=(0,V.jsx)(u,{disabled:N,onClick:x,size:`sm`,variant:`destructive`,children:P}),t[20]=x,t[21]=P,t[22]=N,t[23]=F):F=t[23];let I=c.isPending||!a,L=c.isPending?`Previewing…`:`Preview`,H;t[24]!==w||t[25]!==I||t[26]!==L?(H=(0,V.jsx)(u,{disabled:I,onClick:w,size:`sm`,variant:`outline`,children:L}),t[24]=w,t[25]=I,t[26]=L,t[27]=H):H=t[27];let ne=o.isPending||E.length===0||O,U=o.isPending?`Saving…`:`Save`,W;t[28]!==_||t[29]!==ne||t[30]!==U?(W=(0,V.jsx)(u,{disabled:ne,onClick:_,size:`sm`,children:U}),t[28]=_,t[29]=ne,t[30]=U,t[31]=W):W=t[31];let G;t[32]!==F||t[33]!==H||t[34]!==W?(G=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[M,(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[F,H,W]})]}),t[32]=F,t[33]=H,t[34]=W,t[35]=G):G=t[35];let K;t[36]!==l||t[37]!==O?(K=(0,V.jsx)(R,{className:`text-xs`,error:O,onChange:d,placeholder:ee,rows:14,value:l}),t[36]=l,t[37]=O,t[38]=K):K=t[38];let q;t[39]===O?q=t[40]:(q=O&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:`Lifecycle policy must be valid JSON.`}),t[39]=O,t[40]=q);let J;t[41]===k?J=t[42]:(J=k&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:k.message}),t[41]=k,t[42]=J);let Y;t[43]!==G||t[44]!==K||t[45]!==q||t[46]!==J?(Y=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[G,K,q,J]}),t[43]=G,t[44]=K,t[45]=q,t[46]=J,t[47]=Y):Y=t[47];let X;t[48]!==c.isSuccess||t[49]!==j?(X=c.isSuccess&&(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[(0,V.jsxs)(`h3`,{className:`mb-2 text-sm font-medium`,children:[`Preview: `,j.length,` image`,j.length===1?``:`s`,` would expire`]}),j.length>0?(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tags`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Digest`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pushed`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Rule`})]})}),(0,V.jsx)(`tbody`,{children:j.map(te)})]})}):(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No images match this policy.`})]}),t[48]=c.isSuccess,t[49]=j,t[50]=X):X=t[50];let Z;return t[51]!==Y||t[52]!==X?(Z=(0,V.jsxs)(`div`,{className:`space-y-4`,children:[Y,X]}),t[51]=Y,t[52]=X,t[53]=Z):Z=t[53],Z}function te(e){return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTags&&e.imageTags.length>0?e.imageTags.join(`, `):``}),(0,V.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[e.imageDigest?.slice(0,19),`…`]}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:s(e.imagePushedAt)}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.appliedRulePriority})]},e.imageDigest)}function ne(e){let t=(0,z.c)(38),{repositoryName:n}=e,r;t[0]===n?r=t[1]:(r=d(n),t[0]=n,t[1]=r);let{data:a}=i(r),o=_(),s=h(),[c,l]=(0,B.useState)(a??``),[f,p]=(0,B.useState)(a);a!==f&&(p(a),l(a??``));let m;t[2]!==c||t[3]!==n||t[4]!==o?(m=async function(){try{await o.mutateAsync({repositoryName:n,policyText:c})}catch{}},t[2]=c,t[3]=n,t[4]=o,t[5]=m):m=t[5];let g=m,v;t[6]!==s||t[7]!==n?(v=async function(){try{await s.mutateAsync(n)}catch{}},t[6]=s,t[7]=n,t[8]=v):v=t[8];let y=v,b;t[9]===c?b=t[10]:(b=c.trim(),t[9]=c,t[10]=b);let x=b,C;t[11]!==c||t[12]!==x.length?(C=x.length>0&&!S(c),t[11]=c,t[12]=x.length,t[13]=C):C=t[13];let w=C,T=o.error??s.error,E;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Repository policy`}),t[14]=E):E=t[14];let D=s.isPending||!a,O=s.isPending?`Deleting…`:`Delete`,k;t[15]!==y||t[16]!==D||t[17]!==O?(k=(0,V.jsx)(u,{disabled:D,onClick:y,size:`sm`,variant:`destructive`,children:O}),t[15]=y,t[16]=D,t[17]=O,t[18]=k):k=t[18];let A=o.isPending||x.length===0||w,j=o.isPending?`Saving…`:`Save`,M;t[19]!==g||t[20]!==A||t[21]!==j?(M=(0,V.jsx)(u,{disabled:A,onClick:g,size:`sm`,children:j}),t[19]=g,t[20]=A,t[21]=j,t[22]=M):M=t[22];let N;t[23]!==M||t[24]!==k?(N=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[E,(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[k,M]})]}),t[23]=M,t[24]=k,t[25]=N):N=t[25];let P;t[26]!==c||t[27]!==w?(P=(0,V.jsx)(R,{className:`text-xs`,error:w,onChange:l,placeholder:`No policy attached. Paste an IAM policy document to set one.`,rows:10,value:c}),t[26]=c,t[27]=w,t[28]=P):P=t[28];let F;t[29]===w?F=t[30]:(F=w&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[29]=w,t[30]=F);let I;t[31]===T?I=t[32]:(I=T&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:T.message}),t[31]=T,t[32]=I);let L;return t[33]!==N||t[34]!==P||t[35]!==F||t[36]!==I?(L=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[N,P,F,I]}),t[33]=N,t[34]=P,t[35]=F,t[36]=I,t[37]=L):L=t[37],L}function U(e){if(!e)return``;let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function W(e){let t=(0,z.c)(19),{repositoryName:n,repositoryUri:r}=e,[i,a]=(0,B.useState)(!1),o;t[0]===r?o=t[1]:(o=U(r),t[0]=r,t[1]=o);let s=o,c=r??`${s}/${n}`,d;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=l(),t[2]=d):d=t[2];let f=`aws ecr get-login-password --region ${d} | docker login --username AWS --password-stdin ${s}`,p=`docker build -t ${n} .`,m=`docker tag ${n}:latest ${c}:latest`,h=`docker push ${c}:latest`,g;t[3]!==f||t[4]!==p||t[5]!==m||t[6]!==h?(g=[f,p,m,h],t[3]=f,t[4]=p,t[5]=m,t[6]=h,t[7]=g):g=t[7];let _=g,v;t[8]===_?v=t[9]:(v=async function(){await navigator.clipboard.writeText(_.join(` -`)),a(!0),setTimeout(()=>{a(!1)},2e3)},t[8]=_,t[9]=v);let y=v,b;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Push commands`}),t[10]=b):b=t[10];let x=i?`Copied`:`Copy`,S;t[11]!==y||t[12]!==x?(S=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[b,(0,V.jsx)(u,{onClick:y,size:`sm`,variant:`outline`,children:x})]}),t[11]=y,t[12]=x,t[13]=S):S=t[13];let C=_.join(` -`),w;t[14]===C?w=t[15]:(w=(0,V.jsx)(`pre`,{className:`overflow-x-auto rounded bg-muted p-3 font-mono text-xs`,children:C}),t[14]=C,t[15]=w);let T;return t[16]!==S||t[17]!==w?(T=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[S,w]}),t[16]=S,t[17]=w,t[18]=T):T=t[18],T}function G(e){let t=(0,z.c)(31),{repositoryName:n,repositoryUri:r,imageTagMutability:i}=e,a=b(),o=i===`IMMUTABLE`,s=o?`MUTABLE`:`IMMUTABLE`,c=o?`Make mutable`:`Make immutable`,l;t[0]!==s||t[1]!==a||t[2]!==n?(l=async function(){try{await a.mutateAsync({repositoryName:n,imageTagMutability:s})}catch{}},t[0]=s,t[1]=a,t[2]=n,t[3]=l):l=t[3];let d=l,f;t[4]!==n||t[5]!==r?(f=(0,V.jsx)(W,{repositoryName:n,repositoryUri:r}),t[4]=n,t[5]=r,t[6]=f):f=t[6];let p;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Tag immutability`}),t[7]=p):p=t[7];let m=o?`Tags cannot be overwritten to point at a different image.`:`Tags can be overwritten by a new push.`,h;t[8]===m?h=t[9]:(h=(0,V.jsxs)(`div`,{children:[p,(0,V.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:m})]}),t[8]=m,t[9]=h);let g=o?`default`:`outline`,_=o?`Immutable`:`Mutable`,v;t[10]!==g||t[11]!==_?(v=(0,V.jsx)(T,{variant:g,children:_}),t[10]=g,t[11]=_,t[12]=v):v=t[12];let y;t[13]!==h||t[14]!==v?(y=(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[h,v]}),t[13]=h,t[14]=v,t[15]=y):y=t[15];let x;t[16]===a.error?x=t[17]:(x=a.error&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:a.error.message}),t[16]=a.error,t[17]=x);let S;t[18]===d?S=t[19]:(S=()=>{d()},t[18]=d,t[19]=S);let C=a.isPending?`Saving…`:c,w;t[20]!==a.isPending||t[21]!==S||t[22]!==C?(w=(0,V.jsx)(u,{className:`mt-3`,disabled:a.isPending,onClick:S,size:`sm`,variant:`outline`,children:C}),t[20]=a.isPending,t[21]=S,t[22]=C,t[23]=w):w=t[23];let E;t[24]!==x||t[25]!==w||t[26]!==y?(E=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[y,x,w]}),t[24]=x,t[25]=w,t[26]=y,t[27]=E):E=t[27];let D;return t[28]!==E||t[29]!==f?(D=(0,V.jsxs)(`div`,{className:`space-y-6`,children:[f,E]}),t[28]=E,t[29]=f,t[30]=D):D=t[30],D}function K(){let e=(0,z.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-sm font-medium`,children:`Image scanning`}),(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Vulnerability scanning is not supported by this registry. Pushed images are stored and served without scan findings.`})]}),e[0]=t):t=e[0],t}function q(e){let t=(0,z.c)(57),{repositoryName:n}=e,{data:r}=i(f),c;t[0]===n?c=t[1]:(c=p(n),t[0]=n,t[1]=c);let{data:l}=i(c),d=x(),[m,h]=(0,B.useState)(null),g;t[2]===r.repositories?g=t[3]:(g=r.repositories??[],t[2]=r.repositories,t[3]=g);let _;if(t[4]!==n||t[5]!==g){let e;t[7]===n?e=t[8]:(e=e=>e.repositoryName===n,t[7]=n,t[8]=e),_=g.find(e),t[4]=n,t[5]=g,t[6]=_}else _=t[6];let v=_,y;t[9]===l.imageDetails?y=t[10]:(y=l.imageDetails??[],t[9]=l.imageDetails,t[10]=y);let b=y,S;t[11]!==d||t[12]!==m||t[13]!==n?(S=async function(){if(m)try{await d.mutateAsync({repositoryName:n,imageIds:[{imageDigest:m}]}),h(null)}catch{}},t[11]=d,t[12]=m,t[13]=n,t[14]=S):S=t[14];let C=S,T=v?.repositoryUri,R;t[15]!==n||t[16]!==T?(R=(0,V.jsx)(w,{subtitle:T,title:n}),t[15]=n,t[16]=T,t[17]=R):R=t[17];let ee;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(ee=(0,V.jsx)(`div`,{className:`mb-4`,children:(0,V.jsx)(a,{className:`text-sm text-primary hover:underline`,to:`/ecr/list-repositories`,children:`← Back to repositories`})}),t[18]=ee):ee=t[18];let te;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,V.jsxs)(F,{children:[(0,V.jsx)(P,{value:`summary`,children:`Summary`}),(0,V.jsx)(P,{value:`images`,children:`Images`}),(0,V.jsx)(P,{value:`lifecycle`,children:`Lifecycle`}),(0,V.jsx)(P,{value:`scan`,children:`Scan`}),(0,V.jsx)(P,{value:`permissions`,children:`Permissions`})]}),t[19]=te):te=t[19];let U=v?.imageTagMutability,W=v?.repositoryUri,q;t[20]!==n||t[21]!==U||t[22]!==W?(q=(0,V.jsx)(I,{value:`summary`,children:(0,V.jsx)(G,{imageTagMutability:U,repositoryName:n,repositoryUri:W})}),t[20]=n,t[21]=U,t[22]=W,t[23]=q):q=t[23];let J;t[24]===b?J=t[25]:(J=(0,V.jsx)(I,{value:`images`,children:b.length>0?(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tags`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Digest`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Size`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pushed`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,V.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,V.jsx)(`tbody`,{children:b.map(e=>{if(!e.imageDigest)return null;let t=e.imageDigest;return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTags&&e.imageTags.length>0?e.imageTags.join(`, `):``}),(0,V.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[t.slice(0,19),`…`]}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:o(e.imageSizeInBytes??0)}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:s(e.imagePushedAt)}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,V.jsx)(u,{onClick:()=>{h(t)},size:`sm`,variant:`destructive`,children:`Delete`})})]},t)})})]})}):(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No images pushed yet.`})}),t[24]=b,t[25]=J);let Y;t[26]===n?Y=t[27]:(Y=(0,V.jsx)(I,{value:`lifecycle`,children:(0,V.jsx)(H,{repositoryName:n})}),t[26]=n,t[27]=Y);let X;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(X=(0,V.jsx)(I,{value:`scan`,children:(0,V.jsx)(K,{})}),t[28]=X):X=t[28];let Z;t[29]===n?Z=t[30]:(Z=(0,V.jsx)(I,{value:`permissions`,children:(0,V.jsx)(ne,{repositoryName:n})}),t[29]=n,t[30]=Z);let Q;t[31]!==q||t[32]!==J||t[33]!==Y||t[34]!==Z?(Q=(0,V.jsxs)(L,{defaultValue:`summary`,children:[te,q,J,Y,X,Z]}),t[31]=q,t[32]=J,t[33]=Y,t[34]=Z,t[35]=Q):Q=t[35];let re;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(re=e=>{e||h(null)},t[36]=re):re=t[36];let ie=m!==null,ae;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,V.jsxs)(M,{children:[(0,V.jsx)(O,{children:`Delete image?`}),(0,V.jsx)(E,{children:`This permanently deletes the image manifest and any tags pointing at it. This cannot be undone.`})]}),t[37]=ae):ae=t[37];let $;t[38]===d.error?$=t[39]:($=d.error&&(0,V.jsx)(`p`,{className:`text-sm text-destructive`,children:d.error.message}),t[38]=d.error,t[39]=$);let oe;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(oe=(0,V.jsx)(j,{children:`Cancel`}),t[40]=oe):oe=t[40];let se;t[41]===C?se=t[42]:(se=e=>{e.preventDefault(),C()},t[41]=C,t[42]=se);let ce=d.isPending?`Deleting…`:`Delete`,le;t[43]!==d.isPending||t[44]!==se||t[45]!==ce?(le=(0,V.jsxs)(A,{children:[oe,(0,V.jsx)(k,{disabled:d.isPending,onClick:se,children:ce})]}),t[43]=d.isPending,t[44]=se,t[45]=ce,t[46]=le):le=t[46];let ue;t[47]!==$||t[48]!==le?(ue=(0,V.jsxs)(D,{children:[ae,$,le]}),t[47]=$,t[48]=le,t[49]=ue):ue=t[49];let de;t[50]!==ie||t[51]!==ue?(de=(0,V.jsx)(N,{onOpenChange:re,open:ie,children:ue}),t[50]=ie,t[51]=ue,t[52]=de):de=t[52];let fe;return t[53]!==Q||t[54]!==de||t[55]!==R?(fe=(0,V.jsxs)(V.Fragment,{children:[R,ee,Q,de]}),t[53]=Q,t[54]=de,t[55]=R,t[56]=fe):fe=t[56],fe}function J(){let e=(0,z.c)(4),{id:t}=C.useParams(),n;e[0]===t?n=e[1]:(n=c(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,V.jsx)(q,{repositoryName:n}),e[2]=n,e[3]=r),r}export{J as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Cssn1mnV.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Cssn1mnV.js deleted file mode 100644 index 1284f03db..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Cssn1mnV.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-C92JROxq.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{O as r,j as i}from"./ec2-CWEplLq4.js";var a=e(`/_auth/ec2/(vpc)/describe-vpcs/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | VPC | Mulga`}]}),component:t(()=>n(()=>import(`./_id-C92JROxq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Czat7SAc.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Czat7SAc.js deleted file mode 100644 index 02866f969..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Czat7SAc.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CAKeaftF.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-CjKy1JE5.js","assets/check-BO7W8OSs.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/copy-CamWo-pg.js","assets/network-RAx0KOlf.js","assets/rotate-cw-FTUcK_f-.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/input-6kdUb_DH.js","assets/admin-context-CXmiyIcc.js","assets/sts-B5ZEON3v.js","assets/signed-fetch-B-FFW93q.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/iam-CVg27y22.js","assets/commandBuilder-CoLHZwsC.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/admin-BUkrFIlI.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/ami-details-ChpQ4w1b.js","assets/gpu-instance-type-select-BD2r8UcO.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{a as r,c as i,s as a}from"./ec2-CWEplLq4.js";var o=e(`/_auth/ec2/(instances)/describe-instances/$id`)({loader:async({context:e,params:t})=>{let[n]=await Promise.all([e.queryClient.query({...a(t.id),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})]),o=n.Reservations?.[0]?.Instances?.[0]?.ImageId;return await e.queryClient.query({...r(o),staleTime:`static`}),n},head:({loaderData:e})=>({meta:[{title:`${e?.Reservations?.[0]?.Instances?.[0]?.InstanceId??`Instance`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CAKeaftF.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DtrBrF9B.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D0pak5-T.js similarity index 82% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DtrBrF9B.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D0pak5-T.js index c90897bad..8b81c6fc9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DtrBrF9B.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D0pak5-T.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{g as u}from"./ec2-CWEplLq4.js";import{j as d}from"./ec2-Ctto2xjU.js";import{t as f}from"./_id-1XMcJG7p.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-D1Z6q_OA.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),x=d(),[S,C]=(0,y.useState)(!1),w=n.NatGateways?.[0],T=async()=>{try{await x.mutateAsync(e),t({to:`/ec2/describe-nat-gateways`})}finally{C(!1)}};if(!w?.NatGatewayId)return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`NAT Gateway not found.`})]});let E=o(w.Tags),D=w.NatGatewayAddresses?.[0];return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),x.error&&(0,b.jsx)(m,{error:x.error,msg:`Failed to delete NAT Gateway`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(l,{disabled:x.isPending,onClick:()=>{C(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(c,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:w.State})]}),subtitle:`NAT Gateway Details`,title:E?`${w.NatGatewayId} (${E})`:w.NatGatewayId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`NAT Gateway Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`NAT Gateway ID`,value:w.NatGatewayId}),(0,b.jsx)(_,{label:`State`,value:w.State}),(0,b.jsx)(_,{label:`Connectivity`,value:w.ConnectivityType}),(0,b.jsx)(_,{label:`Subnet ID`,value:w.SubnetId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:w.SubnetId},to:`/ec2/describe-subnets/$id`,children:w.SubnetId}):`—`}),(0,b.jsx)(_,{label:`VPC ID`,value:w.VpcId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:w.VpcId},to:`/ec2/describe-vpcs/$id`,children:w.VpcId}):`—`}),(0,b.jsx)(_,{label:`Public IP`,value:D?.PublicIp??`—`}),(0,b.jsx)(_,{label:`Allocation ID`,value:D?.AllocationId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:D.AllocationId},to:`/ec2/describe-addresses/$id`,children:D.AllocationId}):`—`})]})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the NAT Gateway "${w.NatGatewayId}"? This action cannot be undone. The associated Elastic IP is not released.`,isPending:x.isPending,onConfirm:T,onOpenChange:C,open:S,title:`Delete NAT Gateway`})]})}export{x as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{g as u}from"./ec2-DYgBhYCJ.js";import{j as d}from"./ec2-Csn1kwZ8.js";import{t as f}from"./_id-DBMLk4pN.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-pn00UE1d.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),x=d(),[S,C]=(0,y.useState)(!1),w=n.NatGateways?.[0],T=async()=>{try{await x.mutateAsync(e),t({to:`/ec2/describe-nat-gateways`})}finally{C(!1)}};if(!w?.NatGatewayId)return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`NAT Gateway not found.`})]});let E=o(w.Tags),D=w.NatGatewayAddresses?.[0];return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),x.error&&(0,b.jsx)(m,{error:x.error,msg:`Failed to delete NAT Gateway`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(l,{disabled:x.isPending,onClick:()=>{C(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(c,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:w.State})]}),subtitle:`NAT Gateway Details`,title:E?`${w.NatGatewayId} (${E})`:w.NatGatewayId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`NAT Gateway Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`NAT Gateway ID`,value:w.NatGatewayId}),(0,b.jsx)(_,{label:`State`,value:w.State}),(0,b.jsx)(_,{label:`Connectivity`,value:w.ConnectivityType}),(0,b.jsx)(_,{label:`Subnet ID`,value:w.SubnetId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:w.SubnetId},to:`/ec2/describe-subnets/$id`,children:w.SubnetId}):`—`}),(0,b.jsx)(_,{label:`VPC ID`,value:w.VpcId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:w.VpcId},to:`/ec2/describe-vpcs/$id`,children:w.VpcId}):`—`}),(0,b.jsx)(_,{label:`Public IP`,value:D?.PublicIp??`—`}),(0,b.jsx)(_,{label:`Allocation ID`,value:D?.AllocationId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:D.AllocationId},to:`/ec2/describe-addresses/$id`,children:D.AllocationId}):`—`})]})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the NAT Gateway "${w.NatGatewayId}"? This action cannot be undone. The associated Elastic IP is not released.`,isPending:x.isPending,onConfirm:T,onOpenChange:C,open:S,title:`Delete NAT Gateway`})]})}export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpnCbgQg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D5TyhwCX.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpnCbgQg.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D5TyhwCX.js index 651233bee..787133470 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpnCbgQg.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D5TyhwCX.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{sn as a}from"./cluster-config-xw_Q7X1e.js";import{t as o}from"./back-link-CjKy1JE5.js";import{c as s,i as c,n as l,s as u,t as d}from"./select-B01jpDaX.js";import{t as f}from"./trash-DVab4pEz.js";import{t as p}from"./button-BarTr35m.js";import{l as m,t as h}from"./ec2-CWEplLq4.js";import{$ as g,U as _,r as v}from"./ec2-Ctto2xjU.js";import{t as y}from"./_id-FFfcJrCW.js";import{t as b}from"./page-heading-vksh_67w.js";import{t as x}from"./error-banner-DeOeVBKS.js";import{t as S}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as C,t as w}from"./detail-row-DNBRlVeK.js";var T=t(n()),E=e();function D(){let{id:e}=y.useParams(),t=i(),{data:n}=r(h(e)),{data:D}=r(m),O=v(),k=_(),A=g(),[j,M]=(0,T.useState)(!1),[N,P]=(0,T.useState)(``),F=n.Addresses?.[0],I=D.Reservations?.flatMap(e=>e.Instances??[]).filter(e=>e.State?.Name===`running`||e.State?.Name===`stopped`)??[],L=async()=>{try{await A.mutateAsync(e),t({to:`/ec2/describe-addresses`})}finally{M(!1)}},R=async()=>{N&&await O.mutateAsync({allocationId:e,instanceId:N})},z=async()=>{F?.AssociationId&&await k.mutateAsync(F.AssociationId)};if(!F?.AllocationId)return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(o,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),(0,E.jsx)(`p`,{className:`text-muted-foreground`,children:`Elastic IP not found.`})]});let B=!!F.AssociationId,V=a(F.Tags);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(o,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),(A.error??O.error??k.error)&&(0,E.jsx)(x,{error:A.error??O.error??k.error??void 0,msg:`Elastic IP action failed`}),(0,E.jsxs)(`div`,{className:`space-y-6`,children:[(0,E.jsx)(b,{actions:(0,E.jsxs)(p,{disabled:B||A.isPending,onClick:()=>{M(!0)},size:`sm`,variant:`destructive`,children:[(0,E.jsx)(f,{className:`size-4`}),`Release`]}),subtitle:`Elastic IP Details`,title:V?`${F.AllocationId} (${V})`:F.AllocationId}),(0,E.jsxs)(C,{children:[(0,E.jsx)(C.Header,{children:`Elastic IP Information`}),(0,E.jsxs)(C.Content,{children:[(0,E.jsx)(w,{label:`Allocation ID`,value:F.AllocationId}),(0,E.jsx)(w,{label:`Public IP`,value:F.PublicIp}),(0,E.jsx)(w,{label:`Domain`,value:F.Domain}),(0,E.jsx)(w,{label:`Association ID`,value:F.AssociationId??`—`}),(0,E.jsx)(w,{label:`Instance ID`,value:F.InstanceId??`—`}),(0,E.jsx)(w,{label:`Private IP`,value:F.PrivateIpAddress??`—`})]})]}),(0,E.jsxs)(C,{children:[(0,E.jsx)(C.Header,{children:`Association`}),(0,E.jsx)(C.Content,{children:B?(0,E.jsx)(p,{disabled:k.isPending,onClick:z,size:`sm`,variant:`outline`,children:`Disassociate`}):(0,E.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,E.jsx)(`div`,{className:`flex-1`,children:(0,E.jsxs)(d,{onValueChange:e=>{P(e??``)},value:N,children:[(0,E.jsx)(u,{className:`w-full`,children:(0,E.jsx)(s,{placeholder:`Select an instance`})}),(0,E.jsx)(l,{children:I.map(e=>{let t=a(e.Tags);return(0,E.jsx)(c,{value:e.InstanceId??``,children:t?`${e.InstanceId} (${t})`:e.InstanceId},e.InstanceId)})})]})}),(0,E.jsx)(p,{disabled:!N||O.isPending,onClick:R,size:`sm`,children:`Associate`})]})})]})]}),(0,E.jsx)(S,{description:`Are you sure you want to release the Elastic IP "${F.AllocationId}" (${F.PublicIp})? This action cannot be undone.`,isPending:A.isPending,onConfirm:L,onOpenChange:M,open:j,title:`Release Elastic IP`})]})}export{D as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{cn as a}from"./cluster-config-DkOiY8HH.js";import{t as o}from"./back-link-wsXUoJ12.js";import{c as s,i as c,n as l,s as u,t as d}from"./select-Cn66OoPn.js";import{t as f}from"./trash-DVab4pEz.js";import{t as p}from"./button-qf9lLJ2x.js";import{l as m,t as h}from"./ec2-DYgBhYCJ.js";import{$ as g,U as _,r as v}from"./ec2-Csn1kwZ8.js";import{t as y}from"./_id-CFuJGRSt.js";import{t as b}from"./page-heading-vksh_67w.js";import{t as x}from"./error-banner-DeOeVBKS.js";import{t as S}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as C,t as w}from"./detail-row-DNBRlVeK.js";var T=t(n()),E=e();function D(){let{id:e}=y.useParams(),t=i(),{data:n}=r(h(e)),{data:D}=r(m),O=v(),k=_(),A=g(),[j,M]=(0,T.useState)(!1),[N,P]=(0,T.useState)(``),F=n.Addresses?.[0],I=D.Reservations?.flatMap(e=>e.Instances??[]).filter(e=>e.State?.Name===`running`||e.State?.Name===`stopped`)??[],L=async()=>{try{await A.mutateAsync(e),t({to:`/ec2/describe-addresses`})}finally{M(!1)}},R=async()=>{N&&await O.mutateAsync({allocationId:e,instanceId:N})},z=async()=>{F?.AssociationId&&await k.mutateAsync(F.AssociationId)};if(!F?.AllocationId)return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(o,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),(0,E.jsx)(`p`,{className:`text-muted-foreground`,children:`Elastic IP not found.`})]});let B=!!F.AssociationId,V=a(F.Tags);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(o,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),(A.error??O.error??k.error)&&(0,E.jsx)(x,{error:A.error??O.error??k.error??void 0,msg:`Elastic IP action failed`}),(0,E.jsxs)(`div`,{className:`space-y-6`,children:[(0,E.jsx)(b,{actions:(0,E.jsxs)(p,{disabled:B||A.isPending,onClick:()=>{M(!0)},size:`sm`,variant:`destructive`,children:[(0,E.jsx)(f,{className:`size-4`}),`Release`]}),subtitle:`Elastic IP Details`,title:V?`${F.AllocationId} (${V})`:F.AllocationId}),(0,E.jsxs)(C,{children:[(0,E.jsx)(C.Header,{children:`Elastic IP Information`}),(0,E.jsxs)(C.Content,{children:[(0,E.jsx)(w,{label:`Allocation ID`,value:F.AllocationId}),(0,E.jsx)(w,{label:`Public IP`,value:F.PublicIp}),(0,E.jsx)(w,{label:`Domain`,value:F.Domain}),(0,E.jsx)(w,{label:`Association ID`,value:F.AssociationId??`—`}),(0,E.jsx)(w,{label:`Instance ID`,value:F.InstanceId??`—`}),(0,E.jsx)(w,{label:`Private IP`,value:F.PrivateIpAddress??`—`})]})]}),(0,E.jsxs)(C,{children:[(0,E.jsx)(C.Header,{children:`Association`}),(0,E.jsx)(C.Content,{children:B?(0,E.jsx)(p,{disabled:k.isPending,onClick:z,size:`sm`,variant:`outline`,children:`Disassociate`}):(0,E.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,E.jsx)(`div`,{className:`flex-1`,children:(0,E.jsxs)(d,{onValueChange:e=>{P(e??``)},value:N,children:[(0,E.jsx)(u,{className:`w-full`,children:(0,E.jsx)(s,{placeholder:`Select an instance`})}),(0,E.jsx)(l,{children:I.map(e=>{let t=a(e.Tags);return(0,E.jsx)(c,{value:e.InstanceId??``,children:t?`${e.InstanceId} (${t})`:e.InstanceId},e.InstanceId)})})]})}),(0,E.jsx)(p,{disabled:!N||O.isPending,onClick:R,size:`sm`,children:`Associate`})]})})]})]}),(0,E.jsx)(S,{description:`Are you sure you want to release the Elastic IP "${F.AllocationId}" (${F.PublicIp})? This action cannot be undone.`,isPending:A.isPending,onConfirm:L,onOpenChange:M,open:j,title:`Release Elastic IP`})]})}export{D as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CVVEELAg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D7j6h3JU.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CVVEELAg.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D7j6h3JU.js index 22ea19d40..031e81196 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CVVEELAg.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D7j6h3JU.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{t as i}from"./back-link-CjKy1JE5.js";import{t as a}from"./input-6kdUb_DH.js";import{k as o}from"./ec2-CWEplLq4.js";import{X as s}from"./ec2-Ctto2xjU.js";import{t as c}from"./_id-CbghuErm.js";import{t as l}from"./page-heading-vksh_67w.js";import{i as u,t as d}from"./zod-DF_n2ejy.js";import{t as f}from"./error-banner-DeOeVBKS.js";import{t as p}from"./form-actions-BUM37An0.js";import{r as m,s as h,t as g}from"./field-c7GHI5st.js";import{y as _}from"./ec2-DhWukC79.js";var v=t(),y=e();function b(){let e=(0,v.c)(53),{id:t}=c.useParams(),b=r(),x;e[0]===t?x=e[1]:(x=o(t),e[0]=t,e[1]=x);let{data:S}=n(x),C=S.Volumes?.[0],w=C?.VolumeId,T=s(),E=C?.Size??1,D;e[2]===E?D=e[3]:(D=d(_.refine(e=>e.size>E,{message:`New size must be greater than current size (${E} GiB)`,path:[`size`]})),e[2]=E,e[3]=D);let O;e[4]===E?O=e[5]:(O={size:E},e[4]=E,e[5]=O);let k;e[6]!==D||e[7]!==O?(k={resolver:D,defaultValues:O},e[6]=D,e[7]=O,e[8]=k):k=e[8];let{handleSubmit:A,register:j,formState:M}=u(k),{errors:N,isSubmitting:P}=M;if(!w){let t;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(i,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),(0,y.jsx)(`p`,{className:`text-muted-foreground`,children:`Volume not found.`})]}),e[9]=t):t=e[9],t}let F;e[10]!==T||e[11]!==b||e[12]!==w?(F=async e=>{await T.mutateAsync({...e,volumeId:w}),b({to:`/ec2/describe-volumes/$id`,params:{id:w}})},e[10]=T,e[11]=b,e[12]=w,e[13]=F):F=e[13];let I=F,L,R;e[14]===w?(L=e[15],R=e[16]):(L=(0,y.jsx)(i,{params:{id:w},to:`/ec2/describe-volumes/$id`,children:`Back to volume`}),R=(0,y.jsx)(l,{subtitle:w,title:`Resize Volume`}),e[14]=w,e[15]=L,e[16]=R);let z;e[17]===T.error?z=e[18]:(z=T.error&&(0,y.jsx)(f,{error:T.error,msg:`Failed to resize volume`}),e[17]=T.error,e[18]=z);let B;e[19]!==A||e[20]!==I?(B=A(I),e[19]=A,e[20]=I,e[21]=B):B=e[21];let V;e[22]===E?V=e[23]:(V=(0,y.jsx)(`div`,{className:`space-y-2`,children:(0,y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Current size: `,E,` GiB`]})}),e[22]=E,e[23]=V);let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,y.jsx)(h,{children:(0,y.jsx)(`label`,{htmlFor:`size`,children:`New size (GiB)`})}),e[24]=H):H=e[24];let U=!!N.size,W=E+1,G;e[25]===j?G=e[26]:(G=j(`size`,{valueAsNumber:!0}),e[25]=j,e[26]=G);let K;e[27]!==U||e[28]!==W||e[29]!==G?(K=(0,y.jsx)(a,{"aria-invalid":U,id:`size`,min:W,type:`number`,...G}),e[27]=U,e[28]=W,e[29]=G,e[30]=K):K=e[30];let q;e[31]===N.size?q=e[32]:(q=(0,y.jsx)(m,{errors:[N.size]}),e[31]=N.size,e[32]=q);let J;e[33]!==K||e[34]!==q?(J=(0,y.jsxs)(g,{children:[H,K,q]}),e[33]=K,e[34]=q,e[35]=J):J=e[35];let Y;e[36]!==b||e[37]!==w?(Y=async()=>{await b({to:`/ec2/describe-volumes/$id`,params:{id:w}})},e[36]=b,e[37]=w,e[38]=Y):Y=e[38];let X;e[39]!==P||e[40]!==T.isPending||e[41]!==Y?(X=(0,y.jsx)(p,{isPending:T.isPending,isSubmitting:P,onCancel:Y,pendingLabel:`Resizing\\u2026`,submitLabel:`Resize Volume`}),e[39]=P,e[40]=T.isPending,e[41]=Y,e[42]=X):X=e[42];let Z;e[43]!==V||e[44]!==J||e[45]!==X||e[46]!==B?(Z=(0,y.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:B,children:[V,J,X]}),e[43]=V,e[44]=J,e[45]=X,e[46]=B,e[47]=Z):Z=e[47];let Q;return e[48]!==Z||e[49]!==L||e[50]!==R||e[51]!==z?(Q=(0,y.jsxs)(y.Fragment,{children:[L,R,z,Z]}),e[48]=Z,e[49]=L,e[50]=R,e[51]=z,e[52]=Q):Q=e[52],Q}export{b as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{t as i}from"./back-link-wsXUoJ12.js";import{t as a}from"./input-D3aUBtS6.js";import{k as o}from"./ec2-DYgBhYCJ.js";import{X as s}from"./ec2-Csn1kwZ8.js";import{t as c}from"./_id-C2FbO4pF.js";import{t as l}from"./page-heading-vksh_67w.js";import{i as u,t as d}from"./zod-A4qtKH_p.js";import{t as f}from"./error-banner-DeOeVBKS.js";import{t as p}from"./form-actions-DXvy9CQI.js";import{r as m,s as h,t as g}from"./field-CS-ql6du.js";import{y as _}from"./ec2-DqNqPeiA.js";var v=t(),y=e();function b(){let e=(0,v.c)(53),{id:t}=c.useParams(),b=r(),x;e[0]===t?x=e[1]:(x=o(t),e[0]=t,e[1]=x);let{data:S}=n(x),C=S.Volumes?.[0],w=C?.VolumeId,T=s(),E=C?.Size??1,D;e[2]===E?D=e[3]:(D=d(_.refine(e=>e.size>E,{message:`New size must be greater than current size (${E} GiB)`,path:[`size`]})),e[2]=E,e[3]=D);let O;e[4]===E?O=e[5]:(O={size:E},e[4]=E,e[5]=O);let k;e[6]!==D||e[7]!==O?(k={resolver:D,defaultValues:O},e[6]=D,e[7]=O,e[8]=k):k=e[8];let{handleSubmit:A,register:j,formState:M}=u(k),{errors:N,isSubmitting:P}=M;if(!w){let t;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(i,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),(0,y.jsx)(`p`,{className:`text-muted-foreground`,children:`Volume not found.`})]}),e[9]=t):t=e[9],t}let F;e[10]!==T||e[11]!==b||e[12]!==w?(F=async e=>{await T.mutateAsync({...e,volumeId:w}),b({to:`/ec2/describe-volumes/$id`,params:{id:w}})},e[10]=T,e[11]=b,e[12]=w,e[13]=F):F=e[13];let I=F,L,R;e[14]===w?(L=e[15],R=e[16]):(L=(0,y.jsx)(i,{params:{id:w},to:`/ec2/describe-volumes/$id`,children:`Back to volume`}),R=(0,y.jsx)(l,{subtitle:w,title:`Resize Volume`}),e[14]=w,e[15]=L,e[16]=R);let z;e[17]===T.error?z=e[18]:(z=T.error&&(0,y.jsx)(f,{error:T.error,msg:`Failed to resize volume`}),e[17]=T.error,e[18]=z);let B;e[19]!==A||e[20]!==I?(B=A(I),e[19]=A,e[20]=I,e[21]=B):B=e[21];let V;e[22]===E?V=e[23]:(V=(0,y.jsx)(`div`,{className:`space-y-2`,children:(0,y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Current size: `,E,` GiB`]})}),e[22]=E,e[23]=V);let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,y.jsx)(h,{children:(0,y.jsx)(`label`,{htmlFor:`size`,children:`New size (GiB)`})}),e[24]=H):H=e[24];let U=!!N.size,W=E+1,G;e[25]===j?G=e[26]:(G=j(`size`,{valueAsNumber:!0}),e[25]=j,e[26]=G);let K;e[27]!==U||e[28]!==W||e[29]!==G?(K=(0,y.jsx)(a,{"aria-invalid":U,id:`size`,min:W,type:`number`,...G}),e[27]=U,e[28]=W,e[29]=G,e[30]=K):K=e[30];let q;e[31]===N.size?q=e[32]:(q=(0,y.jsx)(m,{errors:[N.size]}),e[31]=N.size,e[32]=q);let J;e[33]!==K||e[34]!==q?(J=(0,y.jsxs)(g,{children:[H,K,q]}),e[33]=K,e[34]=q,e[35]=J):J=e[35];let Y;e[36]!==b||e[37]!==w?(Y=async()=>{await b({to:`/ec2/describe-volumes/$id`,params:{id:w}})},e[36]=b,e[37]=w,e[38]=Y):Y=e[38];let X;e[39]!==P||e[40]!==T.isPending||e[41]!==Y?(X=(0,y.jsx)(p,{isPending:T.isPending,isSubmitting:P,onCancel:Y,pendingLabel:`Resizing\\u2026`,submitLabel:`Resize Volume`}),e[39]=P,e[40]=T.isPending,e[41]=Y,e[42]=X):X=e[42];let Z;e[43]!==V||e[44]!==J||e[45]!==X||e[46]!==B?(Z=(0,y.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:B,children:[V,J,X]}),e[43]=V,e[44]=J,e[45]=X,e[46]=B,e[47]=Z):Z=e[47];let Q;return e[48]!==Z||e[49]!==L||e[50]!==R||e[51]!==z?(Q=(0,y.jsxs)(y.Fragment,{children:[L,R,z,Z]}),e[48]=Z,e[49]=L,e[50]=R,e[51]=z,e[52]=Q):Q=e[52],Q}export{b as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DBMLk4pN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DBMLk4pN.js new file mode 100644 index 000000000..012adb1de --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DBMLk4pN.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-D0pak5-T.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{g as r}from"./ec2-DYgBhYCJ.js";var i=e(`/_auth/ec2/(nat-gateways)/describe-nat-gateways/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | NAT Gateway | Mulga`}]}),component:t(()=>n(()=>import(`./_id-D0pak5-T.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dvcd5p-t.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DK5n4Uf2.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dvcd5p-t.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DK5n4Uf2.js index aa364f23d..1e90c174e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dvcd5p-t.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DK5n4Uf2.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o,t as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./back-link-CjKy1JE5.js";import{t as l}from"./copy-CamWo-pg.js";import{n as ee,t as te}from"./_id-njlqJfO-.js";import{t as ne}from"./trash-DVab4pEz.js";import{t as u}from"./button-BarTr35m.js";import{t as d}from"./input-6kdUb_DH.js";import{T as f,b as p}from"./ec2-CWEplLq4.js";import{I as m,Q as h,u as re}from"./ec2-Ctto2xjU.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{s as v,t as y}from"./field-c7GHI5st.js";import{t as ie}from"./textarea-n04EavUm.js";import{a as b,i as x,l as S,n as C,o as w,r as T,s as E,t as D}from"./alert-dialog-kCQ1W4Rz.js";import{t as O}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as k,t as A}from"./detail-row-DNBRlVeK.js";import{t as j}from"./state-badge-D1Z6q_OA.js";var M=t(n()),N=e();function P(){let{id:e}=te.useParams(),t=a(),{data:n}=r(f(e)),{data:P}=r(p),F=n.Snapshots?.[0],I=m(),L=re(),R=h(),[z,B]=(0,M.useState)(!1),[V,H]=(0,M.useState)(!1),[U,W]=(0,M.useState)(``),[G,K]=(0,M.useState)(!1),[q,J]=(0,M.useState)(``),[Y,X]=(0,M.useState)(``),[Z,Q]=(0,M.useState)(null),ae=P.Regions?.[0]?.RegionName??s(),$=F?.State===`completed`,oe=F?.State===`completed`;function se(e){e||(J(``),X(``),Q(null)),K(e)}async function ce(){try{let t=await R.mutateAsync({snapshotId:e,name:q,description:Y||void 0});Q(t.ImageId??null),J(``),X(``)}catch{}}let le=async()=>{try{await I.mutateAsync(e),t({to:`/ec2/describe-snapshots`})}finally{B(!1)}},ue=async()=>{try{await L.mutateAsync({sourceSnapshotId:e,sourceRegion:ae,description:U||void 0}),H(!1),W(``)}catch{}};if(!F?.SnapshotId)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(c,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`Snapshot not found.`})]});let de=o(F.StartTime);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(c,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),I.error&&(0,N.jsx)(_,{error:I.error,msg:`Failed to delete snapshot`}),L.error&&(0,N.jsx)(_,{error:L.error,msg:`Failed to copy snapshot`}),R.error&&(0,N.jsx)(_,{error:R.error,msg:`Failed to register image`}),(0,N.jsxs)(`div`,{className:`space-y-6`,children:[(0,N.jsx)(g,{actions:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsxs)(u,{disabled:!$,onClick:()=>{B(!0)},size:`sm`,variant:`destructive`,children:[(0,N.jsx)(ne,{className:`size-4`}),`Delete`]}),(0,N.jsxs)(u,{disabled:!$,onClick:()=>{H(!0)},size:`sm`,variant:`outline`,children:[(0,N.jsx)(l,{className:`size-4`}),`Copy Snapshot`]}),(0,N.jsxs)(u,{disabled:!oe,onClick:()=>{K(!0)},size:`sm`,variant:`outline`,children:[(0,N.jsx)(ee,{className:`size-4`}),`Register as AMI`]}),(0,N.jsx)(j,{state:F.State})]}),subtitle:`Snapshot Details`,title:F.SnapshotId}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Snapshot Information`}),(0,N.jsxs)(k.Content,{children:[(0,N.jsx)(A,{label:`Snapshot ID`,value:F.SnapshotId}),(0,N.jsx)(A,{label:`Volume ID`,value:F.VolumeId?(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:F.VolumeId},to:`/ec2/describe-volumes/$id`,children:F.VolumeId}):void 0}),(0,N.jsx)(A,{label:`Volume Size`,value:`${F.VolumeSize} GiB`}),(0,N.jsx)(A,{label:`State`,value:F.State}),(0,N.jsx)(A,{label:`Description`,value:F.Description}),(0,N.jsx)(A,{label:`Progress`,value:F.Progress}),(0,N.jsx)(A,{label:`Start Time`,value:de}),(0,N.jsx)(A,{label:`Owner ID`,value:F.OwnerId}),(0,N.jsx)(A,{label:`Encrypted`,value:F.Encrypted?`Yes`:`No`})]})]})]}),(0,N.jsx)(O,{description:`Are you sure you want to delete the snapshot "${F.SnapshotId}"? This action cannot be undone.`,isPending:I.isPending,onConfirm:le,onOpenChange:B,open:z,title:`Delete Snapshot`}),(0,N.jsx)(D,{onOpenChange:H,open:V,children:(0,N.jsxs)(x,{children:[(0,N.jsxs)(E,{children:[(0,N.jsx)(S,{children:`Copy Snapshot`}),(0,N.jsx)(b,{children:`Create a copy of this snapshot in the current region.`})]}),(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`copyDescription`,children:`Description (optional)`})}),(0,N.jsx)(d,{id:`copyDescription`,onChange:e=>{W(e.target.value)},placeholder:`Description for the snapshot copy`,value:U})]}),(0,N.jsxs)(w,{children:[(0,N.jsx)(T,{children:`Cancel`}),(0,N.jsx)(C,{disabled:L.isPending,onClick:ue,children:L.isPending?`Copying…`:`Copy Snapshot`})]})]})}),(0,N.jsx)(D,{onOpenChange:se,open:G,children:(0,N.jsxs)(x,{children:[(0,N.jsxs)(E,{children:[(0,N.jsx)(S,{children:Z?`Image Registered`:`Register as AMI`}),(0,N.jsx)(b,{children:Z?(0,N.jsxs)(N.Fragment,{children:[`AMI`,` `,(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:Z},to:`/ec2/describe-images/$id`,children:Z}),` `,`was registered successfully.`]}):`Create an AMI from snapshot "${e}".`})]}),!Z&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`registerName`,children:`Name`})}),(0,N.jsx)(d,{id:`registerName`,onChange:e=>{J(e.target.value)},placeholder:`my-image`,value:q})]}),(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`registerDescription`,children:`Description (optional)`})}),(0,N.jsx)(ie,{id:`registerDescription`,onChange:e=>{X(e.target.value)},placeholder:`Optional description`,rows:2,value:Y})]})]}),(0,N.jsxs)(w,{children:[(0,N.jsx)(T,{children:Z?`Close`:`Cancel`}),!Z&&(0,N.jsx)(C,{disabled:R.isPending||!q.trim(),onClick:ce,children:R.isPending?`Registering…`:`Register AMI`})]})]})})]})}export{P as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o,t as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./back-link-wsXUoJ12.js";import{t as l}from"./copy-CamWo-pg.js";import{n as ee,t as te}from"./_id-BkDfjUwp.js";import{t as ne}from"./trash-DVab4pEz.js";import{t as u}from"./button-qf9lLJ2x.js";import{t as d}from"./input-D3aUBtS6.js";import{T as f,b as p}from"./ec2-DYgBhYCJ.js";import{I as m,Q as h,u as re}from"./ec2-Csn1kwZ8.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{s as v,t as y}from"./field-CS-ql6du.js";import{t as ie}from"./textarea-DV1UO8hv.js";import{a as b,i as x,l as S,n as C,o as w,r as T,s as E,t as D}from"./alert-dialog-jxylPXwR.js";import{t as O}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as k,t as A}from"./detail-row-DNBRlVeK.js";import{t as j}from"./state-badge-pn00UE1d.js";var M=t(n()),N=e();function P(){let{id:e}=te.useParams(),t=a(),{data:n}=r(f(e)),{data:P}=r(p),F=n.Snapshots?.[0],I=m(),L=re(),R=h(),[z,B]=(0,M.useState)(!1),[V,H]=(0,M.useState)(!1),[U,W]=(0,M.useState)(``),[G,K]=(0,M.useState)(!1),[q,J]=(0,M.useState)(``),[Y,X]=(0,M.useState)(``),[Z,Q]=(0,M.useState)(null),ae=P.Regions?.[0]?.RegionName??s(),$=F?.State===`completed`,oe=F?.State===`completed`;function se(e){e||(J(``),X(``),Q(null)),K(e)}async function ce(){try{let t=await R.mutateAsync({snapshotId:e,name:q,description:Y||void 0});Q(t.ImageId??null),J(``),X(``)}catch{}}let le=async()=>{try{await I.mutateAsync(e),t({to:`/ec2/describe-snapshots`})}finally{B(!1)}},ue=async()=>{try{await L.mutateAsync({sourceSnapshotId:e,sourceRegion:ae,description:U||void 0}),H(!1),W(``)}catch{}};if(!F?.SnapshotId)return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(c,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`Snapshot not found.`})]});let de=o(F.StartTime);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(c,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),I.error&&(0,N.jsx)(_,{error:I.error,msg:`Failed to delete snapshot`}),L.error&&(0,N.jsx)(_,{error:L.error,msg:`Failed to copy snapshot`}),R.error&&(0,N.jsx)(_,{error:R.error,msg:`Failed to register image`}),(0,N.jsxs)(`div`,{className:`space-y-6`,children:[(0,N.jsx)(g,{actions:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsxs)(u,{disabled:!$,onClick:()=>{B(!0)},size:`sm`,variant:`destructive`,children:[(0,N.jsx)(ne,{className:`size-4`}),`Delete`]}),(0,N.jsxs)(u,{disabled:!$,onClick:()=>{H(!0)},size:`sm`,variant:`outline`,children:[(0,N.jsx)(l,{className:`size-4`}),`Copy Snapshot`]}),(0,N.jsxs)(u,{disabled:!oe,onClick:()=>{K(!0)},size:`sm`,variant:`outline`,children:[(0,N.jsx)(ee,{className:`size-4`}),`Register as AMI`]}),(0,N.jsx)(j,{state:F.State})]}),subtitle:`Snapshot Details`,title:F.SnapshotId}),(0,N.jsxs)(k,{children:[(0,N.jsx)(k.Header,{children:`Snapshot Information`}),(0,N.jsxs)(k.Content,{children:[(0,N.jsx)(A,{label:`Snapshot ID`,value:F.SnapshotId}),(0,N.jsx)(A,{label:`Volume ID`,value:F.VolumeId?(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:F.VolumeId},to:`/ec2/describe-volumes/$id`,children:F.VolumeId}):void 0}),(0,N.jsx)(A,{label:`Volume Size`,value:`${F.VolumeSize} GiB`}),(0,N.jsx)(A,{label:`State`,value:F.State}),(0,N.jsx)(A,{label:`Description`,value:F.Description}),(0,N.jsx)(A,{label:`Progress`,value:F.Progress}),(0,N.jsx)(A,{label:`Start Time`,value:de}),(0,N.jsx)(A,{label:`Owner ID`,value:F.OwnerId}),(0,N.jsx)(A,{label:`Encrypted`,value:F.Encrypted?`Yes`:`No`})]})]})]}),(0,N.jsx)(O,{description:`Are you sure you want to delete the snapshot "${F.SnapshotId}"? This action cannot be undone.`,isPending:I.isPending,onConfirm:le,onOpenChange:B,open:z,title:`Delete Snapshot`}),(0,N.jsx)(D,{onOpenChange:H,open:V,children:(0,N.jsxs)(x,{children:[(0,N.jsxs)(E,{children:[(0,N.jsx)(S,{children:`Copy Snapshot`}),(0,N.jsx)(b,{children:`Create a copy of this snapshot in the current region.`})]}),(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`copyDescription`,children:`Description (optional)`})}),(0,N.jsx)(d,{id:`copyDescription`,onChange:e=>{W(e.target.value)},placeholder:`Description for the snapshot copy`,value:U})]}),(0,N.jsxs)(w,{children:[(0,N.jsx)(T,{children:`Cancel`}),(0,N.jsx)(C,{disabled:L.isPending,onClick:ue,children:L.isPending?`Copying…`:`Copy Snapshot`})]})]})}),(0,N.jsx)(D,{onOpenChange:se,open:G,children:(0,N.jsxs)(x,{children:[(0,N.jsxs)(E,{children:[(0,N.jsx)(S,{children:Z?`Image Registered`:`Register as AMI`}),(0,N.jsx)(b,{children:Z?(0,N.jsxs)(N.Fragment,{children:[`AMI`,` `,(0,N.jsx)(i,{className:`text-primary hover:underline`,params:{id:Z},to:`/ec2/describe-images/$id`,children:Z}),` `,`was registered successfully.`]}):`Create an AMI from snapshot "${e}".`})]}),!Z&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`registerName`,children:`Name`})}),(0,N.jsx)(d,{id:`registerName`,onChange:e=>{J(e.target.value)},placeholder:`my-image`,value:q})]}),(0,N.jsxs)(y,{children:[(0,N.jsx)(v,{children:(0,N.jsx)(`label`,{htmlFor:`registerDescription`,children:`Description (optional)`})}),(0,N.jsx)(ie,{id:`registerDescription`,onChange:e=>{X(e.target.value)},placeholder:`Optional description`,rows:2,value:Y})]})]}),(0,N.jsxs)(w,{children:[(0,N.jsx)(T,{children:Z?`Close`:`Cancel`}),!Z&&(0,N.jsx)(C,{disabled:R.isPending||!q.trim(),onClick:ce,children:R.isPending?`Registering…`:`Register AMI`})]})]})})]})}export{P as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JbQAScgH.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DP_DlrXy.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JbQAScgH.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DP_DlrXy.js index 6954b4cfe..8c5438742 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JbQAScgH.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DP_DlrXy.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o,ln as s,sn as c}from"./cluster-config-xw_Q7X1e.js";import{t as l}from"./back-link-CjKy1JE5.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-B01jpDaX.js";import{t as h}from"./pencil-BhhTGjjd.js";import{t as g}from"./trash-DVab4pEz.js";import{t as _}from"./button-BarTr35m.js";import{t as v}from"./input-6kdUb_DH.js";import{t as y}from"./acm-BYWQapOv.js";import{t as b}from"./certificate-import-dialog-UyecRuny.js";import{O as x,w as S}from"./ec2-CWEplLq4.js";import{_ as C,a as w,d as T,f as E,g as D,h as O,o as k,r as A,s as j,t as M,u as N}from"./elbv2-K4aD09h6.js";import{i as P,n as F,o as I,r as L,s as R,t as z,u as B}from"./elbv2-DSjTzB2q.js";import{t as V}from"./_id-jxfo70ry.js";import{t as H}from"./page-heading-vksh_67w.js";import{a as ee,i as U,n as te,r as ne,t as W}from"./zod-DF_n2ejy.js";import{t as G}from"./error-banner-DeOeVBKS.js";import{r as re,s as K,t as q}from"./field-c7GHI5st.js";import{a as J,i as ie,l as ae,n as oe,o as se,r as ce,s as le,t as ue}from"./alert-dialog-kCQ1W4Rz.js";import{t as Y}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as X,t as Z}from"./detail-row-DNBRlVeK.js";import{t as de}from"./state-badge-D1Z6q_OA.js";import{c as fe,i as pe,n as me,o as he,s as ge,t as _e}from"./elbv2-CtsfBUSG.js";import{n as ve,t as ye}from"./attributes-editor-B4A8SZjs.js";import{t as be}from"./tags-editor-BxxtIXTE.js";import{i as xe,n as Se,r as Ce,t as we}from"./tabs-t6sDAEVZ.js";var Te=r(),Q=t(n(),1),$=e(),Ee=80,De=443,Oe=[],ke=[];function Ae(e){let t=e.CertificateArn?.split(`/`).pop()??e.CertificateArn??``;return e.DomainName?`${e.DomainName} · ${t}`:t}function je(e){let t=(0,Te.c)(55),{form:n,protocols:r,targetGroups:i,certificates:a,sslPolicies:o}=e,s=a===void 0?Oe:a,c=o===void 0?ke:o,{control:l,register:d,getValues:h,setValue:g,formState:y}=n,{errors:x}=y,[S,C]=(0,Q.useState)(!1),w;t[0]===l?w=t[1]:(w={control:l,name:`protocol`},t[0]=l,t[1]=w);let T=ee(w),E=T===`HTTPS`,D;t[2]===T?D=t[3]:(D=ge(T),t[2]=T,t[3]=D);let O=D,k;t[4]!==h||t[5]!==g?(k=e=>{if(!e)return;let t=h(`port`);ge(e)?(t===Ee&&g(`port`,De),e===`HTTPS`?h(`sslPolicy`)||g(`sslPolicy`,_e):g(`sslPolicy`,void 0)):(t===De&&g(`port`,Ee),g(`certificateArn`,void 0),g(`sslPolicy`,void 0))},t[4]=h,t[5]=g,t[6]=k):k=t[6];let A=k,j;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-protocol`,children:`Protocol`})}),t[7]=j):j=t[7];let M;t[8]!==A||t[9]!==r?(M=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:e=>{t.onChange(e),A(e)},value:t.value,children:[(0,$.jsx)(p,{className:`w-full`,id:`listener-protocol`,children:(0,$.jsx)(u,{})}),(0,$.jsx)(f,{children:r.map(Fe)})]})},t[8]=A,t[9]=r,t[10]=M):M=t[10];let N;t[11]!==l||t[12]!==M?(N=(0,$.jsxs)(q,{children:[j,(0,$.jsx)(te,{control:l,name:`protocol`,render:M})]}),t[11]=l,t[12]=M,t[13]=N):N=t[13];let P;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-port`,children:`Port`})}),t[14]=P):P=t[14];let F=!!x.port,I=O?`443`:`80`,L;t[15]===d?L=t[16]:(L=d(`port`,{valueAsNumber:!0}),t[15]=d,t[16]=L);let R;t[17]!==F||t[18]!==I||t[19]!==L?(R=(0,$.jsx)(v,{"aria-invalid":F,id:`listener-port`,inputMode:`numeric`,placeholder:I,type:`number`,...L}),t[17]=F,t[18]=I,t[19]=L,t[20]=R):R=t[20];let z;t[21]===x.port?z=t[22]:(z=(0,$.jsx)(re,{errors:[x.port]}),t[21]=x.port,t[22]=z);let B;t[23]!==R||t[24]!==z?(B=(0,$.jsxs)(q,{children:[P,R,z]}),t[23]=R,t[24]=z,t[25]=B):B=t[25];let V;t[26]!==s||t[27]!==l||t[28]!==x.certificateArn||t[29]!==S||t[30]!==E||t[31]!==O||t[32]!==g||t[33]!==c?(V=O&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-certificate`,children:`Certificate`})}),(0,$.jsx)(te,{control:l,name:`certificateArn`,render:e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!x.certificateArn,className:`w-full`,id:`listener-certificate`,children:(0,$.jsx)(u,{placeholder:`Select certificate`})}),(0,$.jsx)(f,{children:s.map(Pe)})]})}}),(0,$.jsx)(re,{errors:[x.certificateArn]}),(0,$.jsxs)(`div`,{className:`mt-1 flex items-center justify-between`,children:[s.length===0&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No certificates imported yet.`}),(0,$.jsx)(_,{className:`ml-auto`,onClick:()=>{C(!0)},size:`sm`,type:`button`,variant:`ghost`,children:`Import certificate…`})]})]}),E&&(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-ssl-policy`,children:`Security policy`})}),(0,$.jsx)(te,{control:l,name:`sslPolicy`,render:e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??`ELBSecurityPolicy-2016-08`,children:[(0,$.jsx)(p,{className:`w-full`,id:`listener-ssl-policy`,children:(0,$.jsx)(u,{})}),(0,$.jsx)(f,{children:c.map(Ne)})]})}})]}),(0,$.jsx)(b,{onImported:e=>{g(`certificateArn`,e,{shouldValidate:!0})},onOpenChange:C,open:S})]}),t[26]=s,t[27]=l,t[28]=x.certificateArn,t[29]=S,t[30]=E,t[31]=O,t[32]=g,t[33]=c,t[34]=V):V=t[34];let H;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-default-tg`,children:`Default target group`})}),t[35]=H):H=t[35];let U;t[36]!==x.defaultTargetGroupArn||t[37]!==i?(U=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!x.defaultTargetGroupArn,className:`w-full`,id:`listener-default-tg`,children:(0,$.jsx)(u,{placeholder:`Select target group`})}),(0,$.jsx)(f,{children:i.map(Me)})]})},t[36]=x.defaultTargetGroupArn,t[37]=i,t[38]=U):U=t[38];let ne;t[39]!==l||t[40]!==U?(ne=(0,$.jsx)(te,{control:l,name:`defaultTargetGroupArn`,render:U}),t[39]=l,t[40]=U,t[41]=ne):ne=t[41];let W;t[42]===x.defaultTargetGroupArn?W=t[43]:(W=(0,$.jsx)(re,{errors:[x.defaultTargetGroupArn]}),t[42]=x.defaultTargetGroupArn,t[43]=W);let G;t[44]===i.length?G=t[45]:(G=i.length===0&&(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`No target groups available in this VPC. Create one first.`}),t[44]=i.length,t[45]=G);let J;t[46]!==ne||t[47]!==W||t[48]!==G?(J=(0,$.jsxs)(q,{children:[H,ne,W,G]}),t[46]=ne,t[47]=W,t[48]=G,t[49]=J):J=t[49];let ie;return t[50]!==B||t[51]!==V||t[52]!==J||t[53]!==N?(ie=(0,$.jsxs)($.Fragment,{children:[N,B,V,J]}),t[50]=B,t[51]=V,t[52]=J,t[53]=N,t[54]=ie):ie=t[54],ie}function Me(e){return(0,$.jsxs)(d,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function Ne(e){return(0,$.jsx)(d,{value:e.Name??``,children:e.Name},e.Name)}function Pe(e){return(0,$.jsx)(d,{value:e.CertificateArn??``,children:Ae(e)},e.CertificateArn)}function Fe(e){return(0,$.jsx)(d,{value:e,children:e},e)}function Ie({listenerArn:e,targetGroups:t}){let{data:n}=i(z(e)),r=A(),a=E(),o=j(),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)(),[d,f]=(0,Q.useState)(),p=n.Rules??[],m=new Map;for(let e of t)e.TargetGroupArn&&e.TargetGroupName&&m.set(e.TargetGroupArn,e.TargetGroupName);return(0,$.jsxs)(`div`,{className:`space-y-3`,children:[r.error&&(0,$.jsx)(G,{error:r.error,msg:`Failed to create rule`}),a.error&&(0,$.jsx)(G,{error:a.error,msg:`Failed to modify rule`}),o.error&&(0,$.jsx)(G,{error:o.error,msg:`Failed to delete rule`}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[p.length,` rule`,p.length===1?``:`s`,` (including default)`]}),(0,$.jsx)(_,{onClick:()=>{c(!0)},size:`sm`,children:`Add rule`})]}),(0,$.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,$.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Priority`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Conditions`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Forward to`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,$.jsx)(`tbody`,{children:p.map(e=>(0,$.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Priority}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:Le(e.Conditions,e.IsDefault===!0)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:ze(e,m)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-right`,children:e.IsDefault===!0?(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Edit via listener`}):(0,$.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,$.jsx)(_,{"aria-label":`Edit rule ${e.Priority}`,onClick:()=>{u(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(h,{className:`size-4`})}),(0,$.jsx)(_,{"aria-label":`Delete rule ${e.Priority}`,onClick:()=>{f(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})})]})})]},e.RuleArn??e.Priority??`default`))})]})}),s&&(0,$.jsx)(We,{isPending:r.isPending,mode:`add`,onOpenChange:c,onSubmit:async t=>{try{await r.mutateAsync({listenerArn:e,priority:t.priority,conditions:t.conditions.map(Be),forwardTargetGroupArn:t.forwardTargetGroupArn}),c(!1)}catch{}},open:s,targetGroups:t}),(0,$.jsx)(We,{initialRule:l,isPending:a.isPending,mode:`edit`,onOpenChange:e=>{e||u(void 0)},onSubmit:async t=>{if(l?.RuleArn)try{await a.mutateAsync({ruleArn:l.RuleArn,listenerArn:e,conditions:t.conditions.map(Be),forwardTargetGroupArn:t.forwardTargetGroupArn}),u(void 0)}catch{}},open:l!==void 0,targetGroups:t}),(0,$.jsx)(Y,{description:d?`Delete rule with priority ${d.Priority}? This cannot be undone.`:``,isPending:o.isPending,onConfirm:async()=>{if(d?.RuleArn)try{await o.mutateAsync({ruleArn:d.RuleArn,listenerArn:e})}finally{f(void 0)}},onOpenChange:e=>{e||f(void 0)},open:d!==void 0,title:`Delete rule`})]})}function Le(e,t){return t?`default`:!e||e.length===0?`—`:e.map(e=>{let t=Re(e);return`${e.Field}: ${t.join(`, `)}`}).join(` AND `)}function Re(e){if(e.Field===void 0)return e.Values??[];switch(e.Field){case`host-header`:return e.HostHeaderConfig?.Values??e.Values??[];case`path-pattern`:return e.PathPatternConfig?.Values??e.Values??[];case`http-header`:{let t=e.HttpHeaderConfig?.HttpHeaderName??`?`;return(e.HttpHeaderConfig?.Values??[]).map(e=>`${t}=${e}`)}case`http-request-method`:return e.HttpRequestMethodConfig?.Values??[];case`source-ip`:return e.SourceIpConfig?.Values??[];case`query-string`:return(e.QueryStringConfig?.Values??[]).map(e=>e.Key?`${e.Key}=${e.Value??``}`:e.Value??``);default:return e.Values??[]}}function ze(e,t){let n=e.Actions?.[0];return n?n.Type===`forward`&&n.TargetGroupArn?t.get(n.TargetGroupArn)??n.TargetGroupArn:n.Type??`—`:`—`}function Be(e){let t=e.rawValues.split(/[\n,]/).map(e=>e.trim()).filter(e=>e.length>0);return e.field===`query-string`?{field:e.field,values:[],queryStringPairs:t.map(e=>{let t=e.indexOf(`=`);return t===-1?{value:e}:{key:e.slice(0,t),value:e.slice(t+1)}})}:{field:e.field,values:t,httpHeaderName:e.httpHeaderName}}var Ve=1,He=[{field:`path-pattern`,rawValues:``}];function Ue(e){let t=Number(e.Priority??Ve),n=e.Conditions?.map(e=>Xe(e))??[];return{priority:Number.isFinite(t)?t:Ve,conditions:n.length>0?n:He,forwardTargetGroupArn:e.Actions?.[0]?.TargetGroupArn??``}}function We(e){let t=(0,Te.c)(84),{open:n,onOpenChange:r,onSubmit:i,isPending:a,targetGroups:o,mode:s,initialRule:c}=e,l,d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=W(pe),d={priority:Ve,conditions:He,forwardTargetGroupArn:``},t[0]=l,t[1]=d):(l=t[0],d=t[1]);let h;t[2]===c?h=t[3]:(h=c?Ue(c):void 0,t[2]=c,t[3]=h);let g;t[4]===h?g=t[5]:(g={resolver:l,defaultValues:d,values:h},t[4]=h,t[5]=g);let y=U(g),b;t[6]===y.control?b=t[7]:(b={control:y.control,name:`conditions`},t[6]=y.control,t[7]=b);let{fields:x,append:S,remove:C}=ne(b),w;t[8]!==y||t[9]!==i?(w=y.handleSubmit(i),t[8]=y,t[9]=i,t[10]=w):w=t[10];let T=w,E;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(E={maxWidth:`40rem`,width:`calc(100vw - 2rem)`},t[11]=E):E=t[11];let D=s===`add`?`Add rule`:`Edit rule`,O;t[12]===D?O=t[13]:(O=(0,$.jsx)(ae,{children:D}),t[12]=D,t[13]=O);let k;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,$.jsx)(J,{children:`Routing rules match incoming requests and forward them to a target group. Rules evaluate in priority order; the listener default applies when no rule matches.`}),t[14]=k):k=t[14];let A;t[15]===O?A=t[16]:(A=(0,$.jsxs)(le,{children:[O,k]}),t[15]=O,t[16]=A);let j;t[17]===T?j=t[18]:(j=e=>{e.preventDefault(),T()},t[17]=T,t[18]=j);let M;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-priority`,children:`Priority`})}),t[19]=M):M=t[19];let N=!!y.formState.errors.priority,P;t[20]===y?P=t[21]:(P=y.register(`priority`,{valueAsNumber:!0}),t[20]=y,t[21]=P);let F;t[22]!==N||t[23]!==P?(F=(0,$.jsx)(v,{"aria-invalid":N,id:`rule-priority`,inputMode:`numeric`,type:`number`,...P}),t[22]=N,t[23]=P,t[24]=F):F=t[24];let I;t[25]===y.formState.errors.priority?I=t[26]:(I=(0,$.jsx)(re,{errors:[y.formState.errors.priority]}),t[25]=y.formState.errors.priority,t[26]=I);let L;t[27]!==F||t[28]!==I?(L=(0,$.jsxs)(q,{children:[M,F,I]}),t[27]=F,t[28]=I,t[29]=L):L=t[29];let R;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,$.jsx)(K,{children:`Conditions`}),t[30]=R):R=t[30];let z=x.length>=5,B;t[31]===S?B=t[32]:(B=()=>{S({field:`path-pattern`,rawValues:``})},t[31]=S,t[32]=B);let V;t[33]!==z||t[34]!==B?(V=(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[R,(0,$.jsx)(_,{disabled:z,onClick:B,size:`sm`,type:`button`,variant:`outline`,children:`Add condition`})]}),t[33]=z,t[34]=B,t[35]=V):V=t[35];let H;if(t[36]!==x||t[37]!==y||t[38]!==C){let e;t[40]!==x.length||t[41]!==y||t[42]!==C?(e=(e,t)=>(0,$.jsx)(Ke,{form:y,index:t,onRemove:x.length>1?()=>{C(t)}:void 0},e.id),t[40]=x.length,t[41]=y,t[42]=C,t[43]=e):e=t[43],H=x.map(e),t[36]=x,t[37]=y,t[38]=C,t[39]=H}else H=t[39];let ee;t[44]!==V||t[45]!==H?(ee=(0,$.jsxs)(`div`,{className:`space-y-3`,children:[V,H]}),t[44]=V,t[45]=H,t[46]=ee):ee=t[46];let G;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-forward-tg`,children:`Forward to target group`})}),t[47]=G):G=t[47];let Y;t[48]!==y.formState.errors.forwardTargetGroupArn||t[49]!==o?(Y=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!y.formState.errors.forwardTargetGroupArn,className:`w-full`,id:`rule-forward-tg`,children:(0,$.jsx)(u,{placeholder:`Select target group`})}),(0,$.jsx)(f,{children:o.map(Ge)})]})},t[48]=y.formState.errors.forwardTargetGroupArn,t[49]=o,t[50]=Y):Y=t[50];let X;t[51]!==y.control||t[52]!==Y?(X=(0,$.jsx)(te,{control:y.control,name:`forwardTargetGroupArn`,render:Y}),t[51]=y.control,t[52]=Y,t[53]=X):X=t[53];let Z;t[54]===y.formState.errors.forwardTargetGroupArn?Z=t[55]:(Z=(0,$.jsx)(re,{errors:[y.formState.errors.forwardTargetGroupArn]}),t[54]=y.formState.errors.forwardTargetGroupArn,t[55]=Z);let de;t[56]!==X||t[57]!==Z?(de=(0,$.jsxs)(q,{children:[G,X,Z]}),t[56]=X,t[57]=Z,t[58]=de):de=t[58];let fe;t[59]!==j||t[60]!==L||t[61]!==ee||t[62]!==de?(fe=(0,$.jsxs)(`form`,{className:`min-w-0 space-y-4`,onSubmit:j,children:[L,ee,de]}),t[59]=j,t[60]=L,t[61]=ee,t[62]=de,t[63]=fe):fe=t[63];let me;t[64]===a?me=t[65]:(me=(0,$.jsx)(ce,{disabled:a,children:`Cancel`}),t[64]=a,t[65]=me);let he;t[66]!==a||t[67]!==s?(he=Ze(s,a),t[66]=a,t[67]=s,t[68]=he):he=t[68];let ge;t[69]!==T||t[70]!==a||t[71]!==he?(ge=(0,$.jsx)(oe,{disabled:a,onClick:T,children:he}),t[69]=T,t[70]=a,t[71]=he,t[72]=ge):ge=t[72];let _e;t[73]!==me||t[74]!==ge?(_e=(0,$.jsxs)(se,{children:[me,ge]}),t[73]=me,t[74]=ge,t[75]=_e):_e=t[75];let ve;t[76]!==A||t[77]!==fe||t[78]!==_e?(ve=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:E,children:[A,fe,_e]}),t[76]=A,t[77]=fe,t[78]=_e,t[79]=ve):ve=t[79];let ye;return t[80]!==r||t[81]!==n||t[82]!==ve?(ye=(0,$.jsx)(ue,{onOpenChange:r,open:n,children:ve}),t[80]=r,t[81]=n,t[82]=ve,t[83]=ye):ye=t[83],ye}function Ge(e){return(0,$.jsxs)(d,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function Ke(e){let t=(0,Te.c)(54),{form:n,index:r,onRemove:i}=e,a,o,s,c,l,h,y,b,x,S;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=n.watch(`conditions.${r}.field`);s=n.formState.errors.conditions?.[r],b=`space-y-2 rounded-md border p-3`;let C=`rule-cond-${r}-field`,w;t[13]===C?w=t[14]:(w=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:C,children:`Type`})}),t[13]=C,t[14]=w);let T=`conditions.${r}.field`,E;t[15]===r?E=t[16]:(E=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value,children:[(0,$.jsx)(p,{className:`w-full`,id:`rule-cond-${r}-field`,children:(0,$.jsx)(u,{})}),(0,$.jsxs)(f,{children:[(0,$.jsx)(d,{value:`path-pattern`,children:`Path pattern`}),(0,$.jsx)(d,{value:`host-header`,children:`Host header`}),(0,$.jsx)(d,{value:`http-header`,children:`HTTP header`}),(0,$.jsx)(d,{value:`http-request-method`,children:`HTTP method`}),(0,$.jsx)(d,{value:`source-ip`,children:`Source IP CIDR`}),(0,$.jsx)(d,{value:`query-string`,children:`Query string`})]})]})},t[15]=r,t[16]=E);let D;t[17]!==n.control||t[18]!==T||t[19]!==E?(D=(0,$.jsx)(te,{control:n.control,name:T,render:E}),t[17]=n.control,t[18]=T,t[19]=E,t[20]=D):D=t[20];let O;t[21]!==D||t[22]!==w?(O=(0,$.jsxs)(`div`,{className:`flex-1`,children:[w,D]}),t[21]=D,t[22]=w,t[23]=O):O=t[23];let k;t[24]!==r||t[25]!==i?(k=i&&(0,$.jsx)(_,{"aria-label":`Remove condition ${r+1}`,className:`self-end`,onClick:i,size:`sm`,type:`button`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})}),t[24]=r,t[25]=i,t[26]=k):k=t[26],t[27]!==O||t[28]!==k?(x=(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[O,k]}),t[27]=O,t[28]=k,t[29]=x):x=t[29],S=e===`http-header`&&(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-cond-${r}-hdr-name`,children:`Header name`})}),(0,$.jsx)(v,{"aria-invalid":!!s?.httpHeaderName,id:`rule-cond-${r}-hdr-name`,placeholder:`X-Tenant`,...n.register(`conditions.${r}.httpHeaderName`)}),(0,$.jsx)(re,{errors:[s?.httpHeaderName]})]}),o=q;let A=`rule-cond-${r}-values`,j;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`(comma or newline separated, max 5)`}),t[30]=j):j=t[30],t[31]===A?y=t[32]:(y=(0,$.jsx)(K,{children:(0,$.jsxs)(`label`,{htmlFor:A,children:[`Values`,` `,j]})}),t[31]=A,t[32]=y),a=v,c=!!s?.rawValues,l=`rule-cond-${r}-values`,h=qe(e),t[0]=n,t[1]=r,t[2]=i,t[3]=a,t[4]=o,t[5]=s,t[6]=c,t[7]=l,t[8]=h,t[9]=y,t[10]=b,t[11]=x,t[12]=S}else a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],h=t[8],y=t[9],b=t[10],x=t[11],S=t[12];let C;t[33]!==n||t[34]!==r?(C=n.register(`conditions.${r}.rawValues`),t[33]=n,t[34]=r,t[35]=C):C=t[35];let w;t[36]!==a||t[37]!==c||t[38]!==l||t[39]!==h||t[40]!==C?(w=(0,$.jsx)(a,{"aria-invalid":c,id:l,placeholder:h,...C}),t[36]=a,t[37]=c,t[38]=l,t[39]=h,t[40]=C,t[41]=w):w=t[41];let T=s?.rawValues,E;t[42]===T?E=t[43]:(E=(0,$.jsx)(re,{errors:[T]}),t[42]=T,t[43]=E);let D;t[44]!==o||t[45]!==E||t[46]!==y||t[47]!==w?(D=(0,$.jsxs)(o,{children:[y,w,E]}),t[44]=o,t[45]=E,t[46]=y,t[47]=w,t[48]=D):D=t[48];let O;return t[49]!==D||t[50]!==b||t[51]!==x||t[52]!==S?(O=(0,$.jsxs)(`div`,{className:b,children:[x,S,D]}),t[49]=D,t[50]=b,t[51]=x,t[52]=S,t[53]=O):O=t[53],O}function qe(e){switch(e){case`path-pattern`:return`/api/*`;case`host-header`:return`*.example.com`;case`http-header`:return`acme`;case`http-request-method`:return`GET, POST`;case`source-ip`:return`10.0.0.0/8`;case`query-string`:return`key=value`;default:return``}}var Je=new Set([`host-header`,`path-pattern`,`http-header`,`http-request-method`,`source-ip`,`query-string`]);function Ye(e){return e!==void 0&&Je.has(e)}function Xe(e){let t=Re(e);return{field:Ye(e.Field)?e.Field:`path-pattern`,httpHeaderName:e.HttpHeaderConfig?.HttpHeaderName,rawValues:t.join(`, `)}}function Ze(e,t){return t?e===`add`?`Adding…`:`Saving…`:e===`add`?`Add rule`:`Save changes`}function Qe(e){return{protocol:he(e),port:80,defaultTargetGroupArn:``}}function $e(e,t){let n=t.find(t=>t===e.Protocol)??t[0]??`HTTP`,r=ge(n);return{protocol:n,port:e.Port??80,defaultTargetGroupArn:e.DefaultActions?.[0]?.TargetGroupArn??``,certificateArn:r?e.Certificates?.[0]?.CertificateArn:void 0,sslPolicy:n===`HTTPS`?e.SslPolicy:void 0}}function et(e){if(e.Protocol!==`HTTPS`)return`—`;let t=e.Certificates?.[0]?.CertificateArn?.split(`/`).pop(),n=e.SslPolicy;return t&&n?`${n} · ${t}`:n??t??`—`}function tt({loadBalancerArn:e,vpcId:t,lbType:n}){let r=fe(n),{data:a}=i(F(e)),{data:o}=i(B),{data:s}=i(y),{data:c}=i(I),l=M(),u=w(),d=N(),[f,p]=(0,Q.useState)(!1),[m,v]=(0,Q.useState)(),[b,x]=(0,Q.useState)(),[S,C]=(0,Q.useState)(),T=a.Listeners??[],E=o.TargetGroups??[],D=E.filter(e=>e.VpcId===t),O=s.CertificateSummaryList??[],k=c.SslPolicies??[],A=new Map;for(let e of E)e.TargetGroupArn&&e.TargetGroupName&&A.set(e.TargetGroupArn,e.TargetGroupName);let j=e=>{let t=e.DefaultActions?.[0];if(!t)return`—`;if(t.Type===`forward`&&t.TargetGroupArn){let e=A.get(t.TargetGroupArn);return e?`forward → ${e}`:`forward → ${t.TargetGroupArn}`}return t.Type??`—`};return(0,$.jsxs)(`div`,{className:`space-y-3`,children:[l.error&&(0,$.jsx)(G,{error:l.error,msg:`Failed to create listener`}),d.error&&(0,$.jsx)(G,{error:d.error,msg:`Failed to modify listener`}),u.error&&(0,$.jsx)(G,{error:u.error,msg:`Failed to delete listener`}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[T.length,` listener`,T.length===1?``:`s`]}),(0,$.jsx)(_,{onClick:()=>{p(!0)},size:`sm`,children:`Add listener`})]}),T.length===0?(0,$.jsx)(`p`,{className:`text-muted-foreground`,children:`No listeners configured.`}):(0,$.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,$.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Protocol`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`TLS`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Default action`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Listener ARN`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,$.jsx)(`tbody`,{children:T.map(e=>{let t=e.ListenerArn??``,n=S===t;return(0,$.jsxs)(Q.Fragment,{children:[(0,$.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Protocol}),(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Port}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:et(e)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:j(e)}),(0,$.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,$.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,$.jsx)(_,{"aria-label":`${n?`Hide`:`Show`} rules for listener ${e.Protocol}:${e.Port}`,onClick:()=>{C(n?void 0:t)},size:`sm`,variant:`ghost`,children:n?`Hide rules`:`Rules`}),(0,$.jsx)(_,{"aria-label":`Edit listener ${e.Protocol}:${e.Port}`,onClick:()=>{v(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(h,{className:`size-4`})}),(0,$.jsx)(_,{"aria-label":`Delete listener ${e.Protocol}:${e.Port}`,onClick:()=>{x(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})})]})})]}),n&&t&&(0,$.jsx)(`tr`,{className:`border-b bg-muted/30 last:border-0`,children:(0,$.jsx)(`td`,{className:`px-4 py-3`,colSpan:6,children:(0,$.jsx)(Ie,{listenerArn:t,targetGroups:D})})})]},t)})})]})}),f&&(0,$.jsx)(nt,{certificates:O,isPending:l.isPending,lbType:n,onOpenChange:p,onSubmit:async t=>{try{await l.mutateAsync({loadBalancerArn:e,protocol:t.protocol,port:t.port,defaultTargetGroupArn:t.defaultTargetGroupArn,certificateArn:t.certificateArn,sslPolicy:t.sslPolicy}),p(!1)}catch{}},open:f,protocols:r,sslPolicies:k,targetGroups:D}),(0,$.jsx)(rt,{certificates:O,isPending:d.isPending,listener:m,onOpenChange:e=>{e||v(void 0)},onSubmit:async t=>{if(m?.ListenerArn)try{await d.mutateAsync({listenerArn:m.ListenerArn,loadBalancerArn:e,protocol:t.protocol,port:t.port,defaultTargetGroupArn:t.defaultTargetGroupArn,certificateArn:t.certificateArn,sslPolicy:t.sslPolicy}),v(void 0)}catch{}},protocols:r,sslPolicies:k,targetGroups:D}),(0,$.jsx)(Y,{description:b?`Delete listener ${b.Protocol}:${b.Port}? This cannot be undone.`:``,isPending:u.isPending,onConfirm:async()=>{if(b?.ListenerArn)try{await u.mutateAsync(b.ListenerArn)}finally{x(void 0)}},onOpenChange:e=>{e||x(void 0)},open:b!==void 0,title:`Delete listener`})]})}function nt(e){let t=(0,Te.c)(37),{open:n,onOpenChange:r,lbType:i,protocols:a,targetGroups:o,certificates:s,sslPolicies:c,isPending:l,onSubmit:u}=e,d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=W(me),t[0]=d):d=t[0];let f;t[1]===i?f=t[2]:(f=Qe(i),t[1]=i,t[2]=f);let p;t[3]===f?p=t[4]:(p={resolver:d,defaultValues:f},t[3]=f,t[4]=p);let m=U(p),h;t[5]!==m||t[6]!==u?(h=m.handleSubmit(u),t[5]=m,t[6]=u,t[7]=h):h=t[7];let g=h,_;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(_={maxWidth:`32rem`,width:`calc(100vw - 2rem)`},t[8]=_):_=t[8];let v;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,$.jsxs)(le,{children:[(0,$.jsx)(ae,{children:`Add listener`}),(0,$.jsx)(J,{children:`Listeners forward incoming traffic to a default target group.`})]}),t[9]=v):v=t[9];let y;t[10]===g?y=t[11]:(y=e=>{e.preventDefault(),g()},t[10]=g,t[11]=y);let b;t[12]!==s||t[13]!==m||t[14]!==a||t[15]!==c||t[16]!==o?(b=(0,$.jsx)(je,{certificates:s,form:m,protocols:a,sslPolicies:c,targetGroups:o}),t[12]=s,t[13]=m,t[14]=a,t[15]=c,t[16]=o,t[17]=b):b=t[17];let x;t[18]!==y||t[19]!==b?(x=(0,$.jsx)(`form`,{className:`min-w-0 space-y-4`,onSubmit:y,children:b}),t[18]=y,t[19]=b,t[20]=x):x=t[20];let S;t[21]===l?S=t[22]:(S=(0,$.jsx)(ce,{disabled:l,children:`Cancel`}),t[21]=l,t[22]=S);let C=l?`Adding…`:`Add listener`,w;t[23]!==g||t[24]!==l||t[25]!==C?(w=(0,$.jsx)(oe,{disabled:l,onClick:g,children:C}),t[23]=g,t[24]=l,t[25]=C,t[26]=w):w=t[26];let T;t[27]!==S||t[28]!==w?(T=(0,$.jsxs)(se,{children:[S,w]}),t[27]=S,t[28]=w,t[29]=T):T=t[29];let E;t[30]!==T||t[31]!==x?(E=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:_,children:[v,x,T]}),t[30]=T,t[31]=x,t[32]=E):E=t[32];let D;return t[33]!==r||t[34]!==n||t[35]!==E?(D=(0,$.jsx)(ue,{onOpenChange:r,open:n,children:E}),t[33]=r,t[34]=n,t[35]=E,t[36]=D):D=t[36],D}function rt(e){let t=(0,Te.c)(39),{listener:n,onOpenChange:r,protocols:i,targetGroups:a,certificates:o,sslPolicies:s,isPending:c,onSubmit:l}=e,u=n!==void 0,d,f;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=W(me),f={protocol:`HTTP`,port:80,defaultTargetGroupArn:``},t[0]=d,t[1]=f):(d=t[0],f=t[1]);let p;t[2]!==n||t[3]!==i?(p=n?$e(n,i):void 0,t[2]=n,t[3]=i,t[4]=p):p=t[4];let m;t[5]===p?m=t[6]:(m={resolver:d,defaultValues:f,values:p},t[5]=p,t[6]=m);let h=U(m),g;t[7]!==h||t[8]!==l?(g=h.handleSubmit(l),t[7]=h,t[8]=l,t[9]=g):g=t[9];let _=g,v;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(v={maxWidth:`32rem`,width:`calc(100vw - 2rem)`},t[10]=v):v=t[10];let y;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,$.jsxs)(le,{children:[(0,$.jsx)(ae,{children:`Edit listener`}),(0,$.jsx)(J,{children:`Update port, protocol, or default target group. Changes apply without dropping the listener.`})]}),t[11]=y):y=t[11];let b;t[12]===_?b=t[13]:(b=e=>{e.preventDefault(),_()},t[12]=_,t[13]=b);let x;t[14]!==o||t[15]!==h||t[16]!==i||t[17]!==s||t[18]!==a?(x=(0,$.jsx)(je,{certificates:o,form:h,protocols:i,sslPolicies:s,targetGroups:a}),t[14]=o,t[15]=h,t[16]=i,t[17]=s,t[18]=a,t[19]=x):x=t[19];let S;t[20]!==b||t[21]!==x?(S=(0,$.jsx)(`form`,{className:`min-w-0 space-y-4`,onSubmit:b,children:x}),t[20]=b,t[21]=x,t[22]=S):S=t[22];let C;t[23]===c?C=t[24]:(C=(0,$.jsx)(ce,{disabled:c,children:`Cancel`}),t[23]=c,t[24]=C);let w=c?`Saving…`:`Save changes`,T;t[25]!==_||t[26]!==c||t[27]!==w?(T=(0,$.jsx)(oe,{disabled:c,onClick:_,children:w}),t[25]=_,t[26]=c,t[27]=w,t[28]=T):T=t[28];let E;t[29]!==C||t[30]!==T?(E=(0,$.jsxs)(se,{children:[C,T]}),t[29]=C,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==S||t[33]!==E?(D=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:v,children:[y,S,E]}),t[32]=S,t[33]=E,t[34]=D):D=t[34];let O;return t[35]!==r||t[36]!==u||t[37]!==D?(O=(0,$.jsx)(ue,{onOpenChange:r,open:u,children:D}),t[35]=r,t[36]=u,t[37]=D,t[38]=O):O=t[38],O}function it(e,t){if(e.length!==t.length)return!1;let n=new Set(t);return e.every(e=>n.has(e))}function at(e){let t=(0,Te.c)(48),{available:n,current:r,onSubmit:i,isPending:a,error:o,isSuccess:s}=e,c;t[0]===r?c=t[1]:(c=[...r],t[0]=r,t[1]=c);let l=c,[u,d]=(0,Q.useState)(l),f;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>{d(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},t[2]=f):f=t[2];let p=f,m;t[3]===l?m=t[4]:(m=()=>{d(l)},t[3]=l,t[4]=m);let h=m,g;t[5]!==l||t[6]!==u?(g=it(u,l),t[5]=l,t[6]=u,t[7]=g):g=t[7];let v=!g,y=u.length===0,b;t[8]===u?b=t[9]:(b=new Set(u),t[8]=u,t[9]=b);let x=b,S;t[10]!==v||t[11]!==y||t[12]!==i||t[13]!==u?(S=e=>{e.preventDefault(),v&&!y&&i(u)},t[10]=v,t[11]=y,t[12]=i,t[13]=u,t[14]=S):S=t[14];let C;t[15]===o?C=t[16]:(C=o&&(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:o.message||`Failed to update security groups`}),t[15]=o,t[16]=C);let w;t[17]!==v||t[18]!==s?(w=s&&!v&&(0,$.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Security groups updated.`}),t[17]=v,t[18]=s,t[19]=w):w=t[19];let T;t[20]!==n||t[21]!==x?(T=n.length===0?(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No security groups in this VPC.`}):n.map(e=>(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,$.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:x.has(e.GroupId??``),onChange:()=>{p(e.GroupId??``)},type:`checkbox`}),(0,$.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId)),t[20]=n,t[21]=x,t[22]=T):T=t[22];let E;t[23]===y?E=t[24]:(E=y&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:`At least one security group is required.`}),t[23]=y,t[24]=E);let D;t[25]!==E||t[26]!==T?(D=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 p-4`,children:[T,E]}),t[25]=E,t[26]=T,t[27]=D):D=t[27];let O=v?`Unsaved changes`:`No changes`,k;t[28]===O?k=t[29]:(k=(0,$.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:O}),t[28]=O,t[29]=k);let A=a||!v,j;t[30]!==h||t[31]!==A?(j=(0,$.jsx)(_,{disabled:A,onClick:h,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[30]=h,t[31]=A,t[32]=j):j=t[32];let M=a||!v||y,N=a?`Saving…`:`Save changes`,P;t[33]!==M||t[34]!==N?(P=(0,$.jsx)(_,{disabled:M,size:`sm`,type:`submit`,children:N}),t[33]=M,t[34]=N,t[35]=P):P=t[35];let F;t[36]!==k||t[37]!==j||t[38]!==P?(F=(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[k,j,P]}),t[36]=k,t[37]=j,t[38]=P,t[39]=F):F=t[39];let I;t[40]!==D||t[41]!==F?(I=(0,$.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[D,F]}),t[40]=D,t[41]=F,t[42]=I):I=t[42];let L;return t[43]!==I||t[44]!==S||t[45]!==C||t[46]!==w?(L=(0,$.jsxs)(`form`,{onSubmit:S,children:[C,w,I]}),t[43]=I,t[44]=S,t[45]=C,t[46]=w,t[47]=L):L=t[47],L}function ot(e,t){if(e.length!==t.length)return!1;let n=new Set(t);return e.every(e=>n.has(e))}function st(e){let t=c(e.Tags),n=e.AvailabilityZone?` · ${e.AvailabilityZone}`:``,r=e.CidrBlock?` (${e.CidrBlock})`:``;return`${e.SubnetId}${t?` — ${t}`:``}${r}${n}`}function ct(e){let t=(0,Te.c)(49),{available:n,current:r,onSubmit:i,isPending:a,error:o,isSuccess:s}=e,c;t[0]===r?c=t[1]:(c=[...r],t[0]=r,t[1]=c);let l=c,[u,d]=(0,Q.useState)(l),f;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>{d(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},t[2]=f):f=t[2];let p=f,m;t[3]===l?m=t[4]:(m=()=>{d(l)},t[3]=l,t[4]=m);let h=m,g;t[5]!==l||t[6]!==u?(g=ot(u,l),t[5]=l,t[6]=u,t[7]=g):g=t[7];let v=!g,y=u.length===0,b;t[8]===u?b=t[9]:(b=new Set(u),t[8]=u,t[9]=b);let x=b,S;t[10]!==v||t[11]!==y||t[12]!==i||t[13]!==u?(S=e=>{e.preventDefault(),v&&!y&&i(u)},t[10]=v,t[11]=y,t[12]=i,t[13]=u,t[14]=S):S=t[14];let C;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-amber-500 bg-amber-500/10 p-3 text-sm text-amber-700 dark:text-amber-400`,role:`note`,children:`Applying a subnet change re-homes the load balancer by relaunching its underlying system VM. Expect a brief data-plane interruption while it restarts.`}),t[15]=C):C=t[15];let w;t[16]===o?w=t[17]:(w=o&&(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:o.message||`Failed to update subnets`}),t[16]=o,t[17]=w);let T;t[18]!==v||t[19]!==s?(T=s&&!v&&(0,$.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Subnets updated.`}),t[18]=v,t[19]=s,t[20]=T):T=t[20];let E;t[21]!==n||t[22]!==x?(E=n.length===0?(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No subnets in this VPC.`}):n.map(e=>(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,$.jsx)(`input`,{"aria-label":`Subnet ${e.SubnetId}`,checked:x.has(e.SubnetId??``),onChange:()=>{p(e.SubnetId??``)},type:`checkbox`}),(0,$.jsx)(`span`,{className:`font-mono`,children:st(e)})]},e.SubnetId)),t[21]=n,t[22]=x,t[23]=E):E=t[23];let D;t[24]===y?D=t[25]:(D=y&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:`At least one subnet is required.`}),t[24]=y,t[25]=D);let O;t[26]!==E||t[27]!==D?(O=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 p-4`,children:[E,D]}),t[26]=E,t[27]=D,t[28]=O):O=t[28];let k=v?`Unsaved changes`:`No changes`,A;t[29]===k?A=t[30]:(A=(0,$.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:k}),t[29]=k,t[30]=A);let j=a||!v,M;t[31]!==h||t[32]!==j?(M=(0,$.jsx)(_,{disabled:j,onClick:h,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[31]=h,t[32]=j,t[33]=M):M=t[33];let N=a||!v||y,P=a?`Saving…`:`Save changes`,F;t[34]!==N||t[35]!==P?(F=(0,$.jsx)(_,{disabled:N,size:`sm`,type:`submit`,children:P}),t[34]=N,t[35]=P,t[36]=F):F=t[36];let I;t[37]!==A||t[38]!==M||t[39]!==F?(I=(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[A,M,F]}),t[37]=A,t[38]=M,t[39]=F,t[40]=I):I=t[40];let L;t[41]!==O||t[42]!==I?(L=(0,$.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[O,I]}),t[41]=O,t[42]=I,t[43]=L):L=t[43];let R;return t[44]!==L||t[45]!==S||t[46]!==w||t[47]!==T?(R=(0,$.jsxs)(`form`,{onSubmit:S,children:[C,w,T,L]}),t[44]=L,t[45]=S,t[46]=w,t[47]=T,t[48]=R):R=t[48],R}function lt({arn:e}){let t=a(),{data:n}=i(P(e)),{data:r}=i(L(e)),{data:s}=i(R([e])),{data:u}=i(x),{data:d}=i(S),f=k(),p=T(),m=C(),h=O(),v=D(),[y,b]=(0,Q.useState)(!1),w=n.LoadBalancers?.[0];if(!w?.LoadBalancerArn)return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(l,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),(0,$.jsx)(`p`,{className:`text-muted-foreground`,children:`Load balancer not found.`})]});let E=async()=>{try{await f.mutateAsync(e),t({to:`/ec2/describe-load-balancers`})}finally{b(!1)}},A=u.Subnets??[],j=e=>{let t=A.find(t=>t.SubnetId===e);if(!t)return e;let n=c(t.Tags),r=t.CidrBlock?` (${t.CidrBlock})`:``;return n?`${e} — ${n}${r}`:`${e}${r}`},M=r.Attributes??[],N=s?.TagDescriptions?.find(t=>t.ResourceArn===e)?.Tags??[],F=(w.SecurityGroups??[]).filter(e=>e!==void 0),I=(d.SecurityGroups??[]).filter(e=>e.VpcId===w.VpcId),z=A.filter(e=>e.VpcId===w.VpcId),B=(w.AvailabilityZones??[]).map(e=>e.SubnetId).filter(e=>e!==void 0),V=w.Type===`network`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(l,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),f.error&&(0,$.jsx)(G,{error:f.error,msg:`Failed to delete load balancer`}),(0,$.jsxs)(`div`,{className:`space-y-6`,children:[(0,$.jsx)(H,{actions:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(_,{onClick:()=>{b(!0)},size:`sm`,variant:`destructive`,children:[(0,$.jsx)(g,{className:`size-4`}),`Delete`]}),(0,$.jsx)(de,{state:w.State?.Code})]}),subtitle:`Load Balancer Details`,title:w.LoadBalancerName??w.LoadBalancerArn}),(0,$.jsxs)(we,{defaultValue:`overview`,children:[(0,$.jsxs)(Se,{children:[(0,$.jsx)(xe,{value:`overview`,children:`Overview`}),(0,$.jsx)(xe,{value:`listeners`,children:`Listeners`}),(0,$.jsx)(xe,{value:`subnets`,children:`Subnets`}),!V&&(0,$.jsx)(xe,{value:`security-groups`,children:`Security groups`}),(0,$.jsx)(xe,{value:`attributes`,children:`Attributes`}),(0,$.jsx)(xe,{value:`tags`,children:`Tags`})]}),(0,$.jsxs)(Ce,{value:`overview`,children:[(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Load balancer`}),(0,$.jsxs)(X.Content,{children:[(0,$.jsx)(Z,{label:`ARN`,value:w.LoadBalancerArn}),(0,$.jsx)(Z,{label:`DNS name`,value:w.DNSName}),(0,$.jsx)(Z,{label:`State`,value:w.State?.Reason?`${w.State.Code} — ${w.State.Reason}`:w.State?.Code}),(0,$.jsx)(Z,{label:`Type`,value:w.Type}),(0,$.jsx)(Z,{label:`Scheme`,value:w.Scheme}),(0,$.jsx)(Z,{label:`IP address type`,value:w.IpAddressType}),(0,$.jsx)(Z,{label:`VPC`,value:w.VpcId}),(0,$.jsx)(Z,{label:`Created at`,value:o(w.CreatedTime)})]})]}),(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Availability zones`}),(0,$.jsx)(X.Content,{children:(w.AvailabilityZones??[]).map(e=>(0,$.jsx)(Z,{label:e.ZoneName??`—`,value:e.SubnetId?j(e.SubnetId):void 0},`${e.ZoneName}-${e.SubnetId}`))})]}),(w.SecurityGroups??[]).length>0&&(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Security groups`}),(0,$.jsx)(X.Content,{children:(w.SecurityGroups??[]).map(e=>(0,$.jsx)(Z,{label:`Security group`,value:e},e))})]})]}),(0,$.jsx)(Ce,{value:`listeners`,children:(0,$.jsx)(tt,{lbType:V?`network`:`application`,loadBalancerArn:e,vpcId:w.VpcId})}),(0,$.jsx)(Ce,{value:`subnets`,children:(0,$.jsx)(ct,{available:z,current:B,error:v.error,isPending:v.isPending,isSuccess:v.isSuccess,onSubmit:t=>{v.mutate({loadBalancerArn:e,subnetIds:t})}})}),!V&&(0,$.jsx)(Ce,{value:`security-groups`,children:(0,$.jsx)(at,{available:I,current:F,error:h.error,isPending:h.isPending,isSuccess:h.isSuccess,onSubmit:t=>{h.mutate({loadBalancerArn:e,securityGroupIds:t})}})}),(0,$.jsx)(Ce,{value:`attributes`,children:(0,$.jsx)(ye,{attributes:M,error:p.error,isPending:p.isPending,isSuccess:p.isSuccess,onSubmit:t=>{p.mutate({loadBalancerArn:e,attributes:t})},specs:ve})}),(0,$.jsx)(Ce,{value:`tags`,children:(0,$.jsx)(be,{error:m.error,isPending:m.isPending,isSuccess:m.isSuccess,onSubmit:t=>{m.mutate({resourceArn:e,tags:t,initialKeys:N.map(e=>e.Key??``).filter(e=>e.length>0)})},tags:N})})]})]}),(0,$.jsx)(Y,{description:`Are you sure you want to delete load balancer "${w.LoadBalancerName??w.LoadBalancerArn}"? This action cannot be undone.`,isPending:f.isPending,onConfirm:E,onOpenChange:b,open:y,title:`Delete load balancer`})]})}function ut(){let e=(0,Te.c)(4),{id:t}=V.useParams(),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,$.jsx)(lt,{arn:n}),e[2]=n,e[3]=r),r}export{ut as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o,cn as s,un as c}from"./cluster-config-DkOiY8HH.js";import{t as l}from"./back-link-wsXUoJ12.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-Cn66OoPn.js";import{t as h}from"./pencil-BhhTGjjd.js";import{t as g}from"./trash-DVab4pEz.js";import{t as _}from"./button-qf9lLJ2x.js";import{t as v}from"./input-D3aUBtS6.js";import{t as y}from"./acm-DlvuctCR.js";import{t as b}from"./certificate-import-dialog-B6IZXuGX.js";import{O as x,w as S}from"./ec2-DYgBhYCJ.js";import{_ as C,a as w,d as T,f as E,g as D,h as O,o as k,r as A,s as j,t as M,u as N}from"./elbv2-D0Z7QbU2.js";import{i as P,n as F,o as I,r as L,s as R,t as z,u as B}from"./elbv2-CmXUhudd.js";import{t as V}from"./_id-BXeH_hZi.js";import{t as H}from"./page-heading-vksh_67w.js";import{a as ee,i as U,n as te,r as ne,t as W}from"./zod-A4qtKH_p.js";import{t as G}from"./error-banner-DeOeVBKS.js";import{r as re,s as K,t as q}from"./field-CS-ql6du.js";import{a as J,i as ie,l as ae,n as oe,o as se,r as ce,s as le,t as ue}from"./alert-dialog-jxylPXwR.js";import{t as Y}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as X,t as Z}from"./detail-row-DNBRlVeK.js";import{t as de}from"./state-badge-pn00UE1d.js";import{c as fe,i as pe,n as me,o as he,s as ge,t as _e}from"./elbv2-DqjEJ4Pi.js";import{n as ve,t as ye}from"./attributes-editor-B4H40Gb9.js";import{t as be}from"./tags-editor-1LzJEWry.js";import{i as xe,n as Se,r as Ce,t as we}from"./tabs-BMSqRmVw.js";var Te=r(),Q=t(n(),1),$=e(),Ee=80,De=443,Oe=[],ke=[];function Ae(e){let t=e.CertificateArn?.split(`/`).pop()??e.CertificateArn??``;return e.DomainName?`${e.DomainName} · ${t}`:t}function je(e){let t=(0,Te.c)(55),{form:n,protocols:r,targetGroups:i,certificates:a,sslPolicies:o}=e,s=a===void 0?Oe:a,c=o===void 0?ke:o,{control:l,register:d,getValues:h,setValue:g,formState:y}=n,{errors:x}=y,[S,C]=(0,Q.useState)(!1),w;t[0]===l?w=t[1]:(w={control:l,name:`protocol`},t[0]=l,t[1]=w);let T=ee(w),E=T===`HTTPS`,D;t[2]===T?D=t[3]:(D=ge(T),t[2]=T,t[3]=D);let O=D,k;t[4]!==h||t[5]!==g?(k=e=>{if(!e)return;let t=h(`port`);ge(e)?(t===Ee&&g(`port`,De),e===`HTTPS`?h(`sslPolicy`)||g(`sslPolicy`,_e):g(`sslPolicy`,void 0)):(t===De&&g(`port`,Ee),g(`certificateArn`,void 0),g(`sslPolicy`,void 0))},t[4]=h,t[5]=g,t[6]=k):k=t[6];let A=k,j;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-protocol`,children:`Protocol`})}),t[7]=j):j=t[7];let M;t[8]!==A||t[9]!==r?(M=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:e=>{t.onChange(e),A(e)},value:t.value,children:[(0,$.jsx)(p,{className:`w-full`,id:`listener-protocol`,children:(0,$.jsx)(u,{})}),(0,$.jsx)(f,{children:r.map(Fe)})]})},t[8]=A,t[9]=r,t[10]=M):M=t[10];let N;t[11]!==l||t[12]!==M?(N=(0,$.jsxs)(q,{children:[j,(0,$.jsx)(te,{control:l,name:`protocol`,render:M})]}),t[11]=l,t[12]=M,t[13]=N):N=t[13];let P;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-port`,children:`Port`})}),t[14]=P):P=t[14];let F=!!x.port,I=O?`443`:`80`,L;t[15]===d?L=t[16]:(L=d(`port`,{valueAsNumber:!0}),t[15]=d,t[16]=L);let R;t[17]!==F||t[18]!==I||t[19]!==L?(R=(0,$.jsx)(v,{"aria-invalid":F,id:`listener-port`,inputMode:`numeric`,placeholder:I,type:`number`,...L}),t[17]=F,t[18]=I,t[19]=L,t[20]=R):R=t[20];let z;t[21]===x.port?z=t[22]:(z=(0,$.jsx)(re,{errors:[x.port]}),t[21]=x.port,t[22]=z);let B;t[23]!==R||t[24]!==z?(B=(0,$.jsxs)(q,{children:[P,R,z]}),t[23]=R,t[24]=z,t[25]=B):B=t[25];let V;t[26]!==s||t[27]!==l||t[28]!==x.certificateArn||t[29]!==S||t[30]!==E||t[31]!==O||t[32]!==g||t[33]!==c?(V=O&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-certificate`,children:`Certificate`})}),(0,$.jsx)(te,{control:l,name:`certificateArn`,render:e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!x.certificateArn,className:`w-full`,id:`listener-certificate`,children:(0,$.jsx)(u,{placeholder:`Select certificate`})}),(0,$.jsx)(f,{children:s.map(Pe)})]})}}),(0,$.jsx)(re,{errors:[x.certificateArn]}),(0,$.jsxs)(`div`,{className:`mt-1 flex items-center justify-between`,children:[s.length===0&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No certificates imported yet.`}),(0,$.jsx)(_,{className:`ml-auto`,onClick:()=>{C(!0)},size:`sm`,type:`button`,variant:`ghost`,children:`Import certificate…`})]})]}),E&&(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-ssl-policy`,children:`Security policy`})}),(0,$.jsx)(te,{control:l,name:`sslPolicy`,render:e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??`ELBSecurityPolicy-2016-08`,children:[(0,$.jsx)(p,{className:`w-full`,id:`listener-ssl-policy`,children:(0,$.jsx)(u,{})}),(0,$.jsx)(f,{children:c.map(Ne)})]})}})]}),(0,$.jsx)(b,{onImported:e=>{g(`certificateArn`,e,{shouldValidate:!0})},onOpenChange:C,open:S})]}),t[26]=s,t[27]=l,t[28]=x.certificateArn,t[29]=S,t[30]=E,t[31]=O,t[32]=g,t[33]=c,t[34]=V):V=t[34];let H;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`listener-default-tg`,children:`Default target group`})}),t[35]=H):H=t[35];let U;t[36]!==x.defaultTargetGroupArn||t[37]!==i?(U=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!x.defaultTargetGroupArn,className:`w-full`,id:`listener-default-tg`,children:(0,$.jsx)(u,{placeholder:`Select target group`})}),(0,$.jsx)(f,{children:i.map(Me)})]})},t[36]=x.defaultTargetGroupArn,t[37]=i,t[38]=U):U=t[38];let ne;t[39]!==l||t[40]!==U?(ne=(0,$.jsx)(te,{control:l,name:`defaultTargetGroupArn`,render:U}),t[39]=l,t[40]=U,t[41]=ne):ne=t[41];let W;t[42]===x.defaultTargetGroupArn?W=t[43]:(W=(0,$.jsx)(re,{errors:[x.defaultTargetGroupArn]}),t[42]=x.defaultTargetGroupArn,t[43]=W);let G;t[44]===i.length?G=t[45]:(G=i.length===0&&(0,$.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`No target groups available in this VPC. Create one first.`}),t[44]=i.length,t[45]=G);let J;t[46]!==ne||t[47]!==W||t[48]!==G?(J=(0,$.jsxs)(q,{children:[H,ne,W,G]}),t[46]=ne,t[47]=W,t[48]=G,t[49]=J):J=t[49];let ie;return t[50]!==B||t[51]!==V||t[52]!==J||t[53]!==N?(ie=(0,$.jsxs)($.Fragment,{children:[N,B,V,J]}),t[50]=B,t[51]=V,t[52]=J,t[53]=N,t[54]=ie):ie=t[54],ie}function Me(e){return(0,$.jsxs)(d,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function Ne(e){return(0,$.jsx)(d,{value:e.Name??``,children:e.Name},e.Name)}function Pe(e){return(0,$.jsx)(d,{value:e.CertificateArn??``,children:Ae(e)},e.CertificateArn)}function Fe(e){return(0,$.jsx)(d,{value:e,children:e},e)}function Ie({listenerArn:e,targetGroups:t}){let{data:n}=i(z(e)),r=A(),a=E(),o=j(),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)(),[d,f]=(0,Q.useState)(),p=n.Rules??[],m=new Map;for(let e of t)e.TargetGroupArn&&e.TargetGroupName&&m.set(e.TargetGroupArn,e.TargetGroupName);return(0,$.jsxs)(`div`,{className:`space-y-3`,children:[r.error&&(0,$.jsx)(G,{error:r.error,msg:`Failed to create rule`}),a.error&&(0,$.jsx)(G,{error:a.error,msg:`Failed to modify rule`}),o.error&&(0,$.jsx)(G,{error:o.error,msg:`Failed to delete rule`}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[p.length,` rule`,p.length===1?``:`s`,` (including default)`]}),(0,$.jsx)(_,{onClick:()=>{c(!0)},size:`sm`,children:`Add rule`})]}),(0,$.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,$.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Priority`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Conditions`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Forward to`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,$.jsx)(`tbody`,{children:p.map(e=>(0,$.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Priority}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:Le(e.Conditions,e.IsDefault===!0)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:ze(e,m)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-right`,children:e.IsDefault===!0?(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Edit via listener`}):(0,$.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,$.jsx)(_,{"aria-label":`Edit rule ${e.Priority}`,onClick:()=>{u(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(h,{className:`size-4`})}),(0,$.jsx)(_,{"aria-label":`Delete rule ${e.Priority}`,onClick:()=>{f(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})})]})})]},e.RuleArn??e.Priority??`default`))})]})}),s&&(0,$.jsx)(We,{isPending:r.isPending,mode:`add`,onOpenChange:c,onSubmit:async t=>{try{await r.mutateAsync({listenerArn:e,priority:t.priority,conditions:t.conditions.map(Be),forwardTargetGroupArn:t.forwardTargetGroupArn}),c(!1)}catch{}},open:s,targetGroups:t}),(0,$.jsx)(We,{initialRule:l,isPending:a.isPending,mode:`edit`,onOpenChange:e=>{e||u(void 0)},onSubmit:async t=>{if(l?.RuleArn)try{await a.mutateAsync({ruleArn:l.RuleArn,listenerArn:e,conditions:t.conditions.map(Be),forwardTargetGroupArn:t.forwardTargetGroupArn}),u(void 0)}catch{}},open:l!==void 0,targetGroups:t}),(0,$.jsx)(Y,{description:d?`Delete rule with priority ${d.Priority}? This cannot be undone.`:``,isPending:o.isPending,onConfirm:async()=>{if(d?.RuleArn)try{await o.mutateAsync({ruleArn:d.RuleArn,listenerArn:e})}finally{f(void 0)}},onOpenChange:e=>{e||f(void 0)},open:d!==void 0,title:`Delete rule`})]})}function Le(e,t){return t?`default`:!e||e.length===0?`—`:e.map(e=>{let t=Re(e);return`${e.Field}: ${t.join(`, `)}`}).join(` AND `)}function Re(e){if(e.Field===void 0)return e.Values??[];switch(e.Field){case`host-header`:return e.HostHeaderConfig?.Values??e.Values??[];case`path-pattern`:return e.PathPatternConfig?.Values??e.Values??[];case`http-header`:{let t=e.HttpHeaderConfig?.HttpHeaderName??`?`;return(e.HttpHeaderConfig?.Values??[]).map(e=>`${t}=${e}`)}case`http-request-method`:return e.HttpRequestMethodConfig?.Values??[];case`source-ip`:return e.SourceIpConfig?.Values??[];case`query-string`:return(e.QueryStringConfig?.Values??[]).map(e=>e.Key?`${e.Key}=${e.Value??``}`:e.Value??``);default:return e.Values??[]}}function ze(e,t){let n=e.Actions?.[0];return n?n.Type===`forward`&&n.TargetGroupArn?t.get(n.TargetGroupArn)??n.TargetGroupArn:n.Type??`—`:`—`}function Be(e){let t=e.rawValues.split(/[\n,]/).map(e=>e.trim()).filter(e=>e.length>0);return e.field===`query-string`?{field:e.field,values:[],queryStringPairs:t.map(e=>{let t=e.indexOf(`=`);return t===-1?{value:e}:{key:e.slice(0,t),value:e.slice(t+1)}})}:{field:e.field,values:t,httpHeaderName:e.httpHeaderName}}var Ve=1,He=[{field:`path-pattern`,rawValues:``}];function Ue(e){let t=Number(e.Priority??Ve),n=e.Conditions?.map(e=>Xe(e))??[];return{priority:Number.isFinite(t)?t:Ve,conditions:n.length>0?n:He,forwardTargetGroupArn:e.Actions?.[0]?.TargetGroupArn??``}}function We(e){let t=(0,Te.c)(84),{open:n,onOpenChange:r,onSubmit:i,isPending:a,targetGroups:o,mode:s,initialRule:c}=e,l,d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=W(pe),d={priority:Ve,conditions:He,forwardTargetGroupArn:``},t[0]=l,t[1]=d):(l=t[0],d=t[1]);let h;t[2]===c?h=t[3]:(h=c?Ue(c):void 0,t[2]=c,t[3]=h);let g;t[4]===h?g=t[5]:(g={resolver:l,defaultValues:d,values:h},t[4]=h,t[5]=g);let y=U(g),b;t[6]===y.control?b=t[7]:(b={control:y.control,name:`conditions`},t[6]=y.control,t[7]=b);let{fields:x,append:S,remove:C}=ne(b),w;t[8]!==y||t[9]!==i?(w=y.handleSubmit(i),t[8]=y,t[9]=i,t[10]=w):w=t[10];let T=w,E;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(E={maxWidth:`40rem`,width:`calc(100vw - 2rem)`},t[11]=E):E=t[11];let D=s===`add`?`Add rule`:`Edit rule`,O;t[12]===D?O=t[13]:(O=(0,$.jsx)(ae,{children:D}),t[12]=D,t[13]=O);let k;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,$.jsx)(J,{children:`Routing rules match incoming requests and forward them to a target group. Rules evaluate in priority order; the listener default applies when no rule matches.`}),t[14]=k):k=t[14];let A;t[15]===O?A=t[16]:(A=(0,$.jsxs)(le,{children:[O,k]}),t[15]=O,t[16]=A);let j;t[17]===T?j=t[18]:(j=e=>{e.preventDefault(),T()},t[17]=T,t[18]=j);let M;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-priority`,children:`Priority`})}),t[19]=M):M=t[19];let N=!!y.formState.errors.priority,P;t[20]===y?P=t[21]:(P=y.register(`priority`,{valueAsNumber:!0}),t[20]=y,t[21]=P);let F;t[22]!==N||t[23]!==P?(F=(0,$.jsx)(v,{"aria-invalid":N,id:`rule-priority`,inputMode:`numeric`,type:`number`,...P}),t[22]=N,t[23]=P,t[24]=F):F=t[24];let I;t[25]===y.formState.errors.priority?I=t[26]:(I=(0,$.jsx)(re,{errors:[y.formState.errors.priority]}),t[25]=y.formState.errors.priority,t[26]=I);let L;t[27]!==F||t[28]!==I?(L=(0,$.jsxs)(q,{children:[M,F,I]}),t[27]=F,t[28]=I,t[29]=L):L=t[29];let R;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,$.jsx)(K,{children:`Conditions`}),t[30]=R):R=t[30];let z=x.length>=5,B;t[31]===S?B=t[32]:(B=()=>{S({field:`path-pattern`,rawValues:``})},t[31]=S,t[32]=B);let V;t[33]!==z||t[34]!==B?(V=(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[R,(0,$.jsx)(_,{disabled:z,onClick:B,size:`sm`,type:`button`,variant:`outline`,children:`Add condition`})]}),t[33]=z,t[34]=B,t[35]=V):V=t[35];let H;if(t[36]!==x||t[37]!==y||t[38]!==C){let e;t[40]!==x.length||t[41]!==y||t[42]!==C?(e=(e,t)=>(0,$.jsx)(Ke,{form:y,index:t,onRemove:x.length>1?()=>{C(t)}:void 0},e.id),t[40]=x.length,t[41]=y,t[42]=C,t[43]=e):e=t[43],H=x.map(e),t[36]=x,t[37]=y,t[38]=C,t[39]=H}else H=t[39];let ee;t[44]!==V||t[45]!==H?(ee=(0,$.jsxs)(`div`,{className:`space-y-3`,children:[V,H]}),t[44]=V,t[45]=H,t[46]=ee):ee=t[46];let G;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-forward-tg`,children:`Forward to target group`})}),t[47]=G):G=t[47];let Y;t[48]!==y.formState.errors.forwardTargetGroupArn||t[49]!==o?(Y=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value??``,children:[(0,$.jsx)(p,{"aria-invalid":!!y.formState.errors.forwardTargetGroupArn,className:`w-full`,id:`rule-forward-tg`,children:(0,$.jsx)(u,{placeholder:`Select target group`})}),(0,$.jsx)(f,{children:o.map(Ge)})]})},t[48]=y.formState.errors.forwardTargetGroupArn,t[49]=o,t[50]=Y):Y=t[50];let X;t[51]!==y.control||t[52]!==Y?(X=(0,$.jsx)(te,{control:y.control,name:`forwardTargetGroupArn`,render:Y}),t[51]=y.control,t[52]=Y,t[53]=X):X=t[53];let Z;t[54]===y.formState.errors.forwardTargetGroupArn?Z=t[55]:(Z=(0,$.jsx)(re,{errors:[y.formState.errors.forwardTargetGroupArn]}),t[54]=y.formState.errors.forwardTargetGroupArn,t[55]=Z);let de;t[56]!==X||t[57]!==Z?(de=(0,$.jsxs)(q,{children:[G,X,Z]}),t[56]=X,t[57]=Z,t[58]=de):de=t[58];let fe;t[59]!==j||t[60]!==L||t[61]!==ee||t[62]!==de?(fe=(0,$.jsxs)(`form`,{className:`min-w-0 space-y-4`,onSubmit:j,children:[L,ee,de]}),t[59]=j,t[60]=L,t[61]=ee,t[62]=de,t[63]=fe):fe=t[63];let me;t[64]===a?me=t[65]:(me=(0,$.jsx)(ce,{disabled:a,children:`Cancel`}),t[64]=a,t[65]=me);let he;t[66]!==a||t[67]!==s?(he=Ze(s,a),t[66]=a,t[67]=s,t[68]=he):he=t[68];let ge;t[69]!==T||t[70]!==a||t[71]!==he?(ge=(0,$.jsx)(oe,{disabled:a,onClick:T,children:he}),t[69]=T,t[70]=a,t[71]=he,t[72]=ge):ge=t[72];let _e;t[73]!==me||t[74]!==ge?(_e=(0,$.jsxs)(se,{children:[me,ge]}),t[73]=me,t[74]=ge,t[75]=_e):_e=t[75];let ve;t[76]!==A||t[77]!==fe||t[78]!==_e?(ve=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:E,children:[A,fe,_e]}),t[76]=A,t[77]=fe,t[78]=_e,t[79]=ve):ve=t[79];let ye;return t[80]!==r||t[81]!==n||t[82]!==ve?(ye=(0,$.jsx)(ue,{onOpenChange:r,open:n,children:ve}),t[80]=r,t[81]=n,t[82]=ve,t[83]=ye):ye=t[83],ye}function Ge(e){return(0,$.jsxs)(d,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function Ke(e){let t=(0,Te.c)(54),{form:n,index:r,onRemove:i}=e,a,o,s,c,l,h,y,b,x,S;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=n.watch(`conditions.${r}.field`);s=n.formState.errors.conditions?.[r],b=`space-y-2 rounded-md border p-3`;let C=`rule-cond-${r}-field`,w;t[13]===C?w=t[14]:(w=(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:C,children:`Type`})}),t[13]=C,t[14]=w);let T=`conditions.${r}.field`,E;t[15]===r?E=t[16]:(E=e=>{let{field:t}=e;return(0,$.jsxs)(m,{onValueChange:t.onChange,value:t.value,children:[(0,$.jsx)(p,{className:`w-full`,id:`rule-cond-${r}-field`,children:(0,$.jsx)(u,{})}),(0,$.jsxs)(f,{children:[(0,$.jsx)(d,{value:`path-pattern`,children:`Path pattern`}),(0,$.jsx)(d,{value:`host-header`,children:`Host header`}),(0,$.jsx)(d,{value:`http-header`,children:`HTTP header`}),(0,$.jsx)(d,{value:`http-request-method`,children:`HTTP method`}),(0,$.jsx)(d,{value:`source-ip`,children:`Source IP CIDR`}),(0,$.jsx)(d,{value:`query-string`,children:`Query string`})]})]})},t[15]=r,t[16]=E);let D;t[17]!==n.control||t[18]!==T||t[19]!==E?(D=(0,$.jsx)(te,{control:n.control,name:T,render:E}),t[17]=n.control,t[18]=T,t[19]=E,t[20]=D):D=t[20];let O;t[21]!==D||t[22]!==w?(O=(0,$.jsxs)(`div`,{className:`flex-1`,children:[w,D]}),t[21]=D,t[22]=w,t[23]=O):O=t[23];let k;t[24]!==r||t[25]!==i?(k=i&&(0,$.jsx)(_,{"aria-label":`Remove condition ${r+1}`,className:`self-end`,onClick:i,size:`sm`,type:`button`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})}),t[24]=r,t[25]=i,t[26]=k):k=t[26],t[27]!==O||t[28]!==k?(x=(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[O,k]}),t[27]=O,t[28]=k,t[29]=x):x=t[29],S=e===`http-header`&&(0,$.jsxs)(q,{children:[(0,$.jsx)(K,{children:(0,$.jsx)(`label`,{htmlFor:`rule-cond-${r}-hdr-name`,children:`Header name`})}),(0,$.jsx)(v,{"aria-invalid":!!s?.httpHeaderName,id:`rule-cond-${r}-hdr-name`,placeholder:`X-Tenant`,...n.register(`conditions.${r}.httpHeaderName`)}),(0,$.jsx)(re,{errors:[s?.httpHeaderName]})]}),o=q;let A=`rule-cond-${r}-values`,j;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`(comma or newline separated, max 5)`}),t[30]=j):j=t[30],t[31]===A?y=t[32]:(y=(0,$.jsx)(K,{children:(0,$.jsxs)(`label`,{htmlFor:A,children:[`Values`,` `,j]})}),t[31]=A,t[32]=y),a=v,c=!!s?.rawValues,l=`rule-cond-${r}-values`,h=qe(e),t[0]=n,t[1]=r,t[2]=i,t[3]=a,t[4]=o,t[5]=s,t[6]=c,t[7]=l,t[8]=h,t[9]=y,t[10]=b,t[11]=x,t[12]=S}else a=t[3],o=t[4],s=t[5],c=t[6],l=t[7],h=t[8],y=t[9],b=t[10],x=t[11],S=t[12];let C;t[33]!==n||t[34]!==r?(C=n.register(`conditions.${r}.rawValues`),t[33]=n,t[34]=r,t[35]=C):C=t[35];let w;t[36]!==a||t[37]!==c||t[38]!==l||t[39]!==h||t[40]!==C?(w=(0,$.jsx)(a,{"aria-invalid":c,id:l,placeholder:h,...C}),t[36]=a,t[37]=c,t[38]=l,t[39]=h,t[40]=C,t[41]=w):w=t[41];let T=s?.rawValues,E;t[42]===T?E=t[43]:(E=(0,$.jsx)(re,{errors:[T]}),t[42]=T,t[43]=E);let D;t[44]!==o||t[45]!==E||t[46]!==y||t[47]!==w?(D=(0,$.jsxs)(o,{children:[y,w,E]}),t[44]=o,t[45]=E,t[46]=y,t[47]=w,t[48]=D):D=t[48];let O;return t[49]!==D||t[50]!==b||t[51]!==x||t[52]!==S?(O=(0,$.jsxs)(`div`,{className:b,children:[x,S,D]}),t[49]=D,t[50]=b,t[51]=x,t[52]=S,t[53]=O):O=t[53],O}function qe(e){switch(e){case`path-pattern`:return`/api/*`;case`host-header`:return`*.example.com`;case`http-header`:return`acme`;case`http-request-method`:return`GET, POST`;case`source-ip`:return`10.0.0.0/8`;case`query-string`:return`key=value`;default:return``}}var Je=new Set([`host-header`,`path-pattern`,`http-header`,`http-request-method`,`source-ip`,`query-string`]);function Ye(e){return e!==void 0&&Je.has(e)}function Xe(e){let t=Re(e);return{field:Ye(e.Field)?e.Field:`path-pattern`,httpHeaderName:e.HttpHeaderConfig?.HttpHeaderName,rawValues:t.join(`, `)}}function Ze(e,t){return t?e===`add`?`Adding…`:`Saving…`:e===`add`?`Add rule`:`Save changes`}function Qe(e){return{protocol:he(e),port:80,defaultTargetGroupArn:``}}function $e(e,t){let n=t.find(t=>t===e.Protocol)??t[0]??`HTTP`,r=ge(n);return{protocol:n,port:e.Port??80,defaultTargetGroupArn:e.DefaultActions?.[0]?.TargetGroupArn??``,certificateArn:r?e.Certificates?.[0]?.CertificateArn:void 0,sslPolicy:n===`HTTPS`?e.SslPolicy:void 0}}function et(e){if(e.Protocol!==`HTTPS`)return`—`;let t=e.Certificates?.[0]?.CertificateArn?.split(`/`).pop(),n=e.SslPolicy;return t&&n?`${n} · ${t}`:n??t??`—`}function tt({loadBalancerArn:e,vpcId:t,lbType:n}){let r=fe(n),{data:a}=i(F(e)),{data:o}=i(B),{data:s}=i(y),{data:c}=i(I),l=M(),u=w(),d=N(),[f,p]=(0,Q.useState)(!1),[m,v]=(0,Q.useState)(),[b,x]=(0,Q.useState)(),[S,C]=(0,Q.useState)(),T=a.Listeners??[],E=o.TargetGroups??[],D=E.filter(e=>e.VpcId===t),O=s.CertificateSummaryList??[],k=c.SslPolicies??[],A=new Map;for(let e of E)e.TargetGroupArn&&e.TargetGroupName&&A.set(e.TargetGroupArn,e.TargetGroupName);let j=e=>{let t=e.DefaultActions?.[0];if(!t)return`—`;if(t.Type===`forward`&&t.TargetGroupArn){let e=A.get(t.TargetGroupArn);return e?`forward → ${e}`:`forward → ${t.TargetGroupArn}`}return t.Type??`—`};return(0,$.jsxs)(`div`,{className:`space-y-3`,children:[l.error&&(0,$.jsx)(G,{error:l.error,msg:`Failed to create listener`}),d.error&&(0,$.jsx)(G,{error:d.error,msg:`Failed to modify listener`}),u.error&&(0,$.jsx)(G,{error:u.error,msg:`Failed to delete listener`}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[T.length,` listener`,T.length===1?``:`s`]}),(0,$.jsx)(_,{onClick:()=>{p(!0)},size:`sm`,children:`Add listener`})]}),T.length===0?(0,$.jsx)(`p`,{className:`text-muted-foreground`,children:`No listeners configured.`}):(0,$.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,$.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Protocol`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`TLS`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Default action`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Listener ARN`}),(0,$.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,$.jsx)(`tbody`,{children:T.map(e=>{let t=e.ListenerArn??``,n=S===t;return(0,$.jsxs)(Q.Fragment,{children:[(0,$.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Protocol}),(0,$.jsx)(`td`,{className:`px-4 py-2`,children:e.Port}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:et(e)}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:j(e)}),(0,$.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t}),(0,$.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,$.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,$.jsx)(_,{"aria-label":`${n?`Hide`:`Show`} rules for listener ${e.Protocol}:${e.Port}`,onClick:()=>{C(n?void 0:t)},size:`sm`,variant:`ghost`,children:n?`Hide rules`:`Rules`}),(0,$.jsx)(_,{"aria-label":`Edit listener ${e.Protocol}:${e.Port}`,onClick:()=>{v(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(h,{className:`size-4`})}),(0,$.jsx)(_,{"aria-label":`Delete listener ${e.Protocol}:${e.Port}`,onClick:()=>{x(e)},size:`sm`,variant:`ghost`,children:(0,$.jsx)(g,{className:`size-4`})})]})})]}),n&&t&&(0,$.jsx)(`tr`,{className:`border-b bg-muted/30 last:border-0`,children:(0,$.jsx)(`td`,{className:`px-4 py-3`,colSpan:6,children:(0,$.jsx)(Ie,{listenerArn:t,targetGroups:D})})})]},t)})})]})}),f&&(0,$.jsx)(nt,{certificates:O,isPending:l.isPending,lbType:n,onOpenChange:p,onSubmit:async t=>{try{await l.mutateAsync({loadBalancerArn:e,protocol:t.protocol,port:t.port,defaultTargetGroupArn:t.defaultTargetGroupArn,certificateArn:t.certificateArn,sslPolicy:t.sslPolicy}),p(!1)}catch{}},open:f,protocols:r,sslPolicies:k,targetGroups:D}),(0,$.jsx)(rt,{certificates:O,isPending:d.isPending,listener:m,onOpenChange:e=>{e||v(void 0)},onSubmit:async t=>{if(m?.ListenerArn)try{await d.mutateAsync({listenerArn:m.ListenerArn,loadBalancerArn:e,protocol:t.protocol,port:t.port,defaultTargetGroupArn:t.defaultTargetGroupArn,certificateArn:t.certificateArn,sslPolicy:t.sslPolicy}),v(void 0)}catch{}},protocols:r,sslPolicies:k,targetGroups:D}),(0,$.jsx)(Y,{description:b?`Delete listener ${b.Protocol}:${b.Port}? This cannot be undone.`:``,isPending:u.isPending,onConfirm:async()=>{if(b?.ListenerArn)try{await u.mutateAsync(b.ListenerArn)}finally{x(void 0)}},onOpenChange:e=>{e||x(void 0)},open:b!==void 0,title:`Delete listener`})]})}function nt(e){let t=(0,Te.c)(37),{open:n,onOpenChange:r,lbType:i,protocols:a,targetGroups:o,certificates:s,sslPolicies:c,isPending:l,onSubmit:u}=e,d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=W(me),t[0]=d):d=t[0];let f;t[1]===i?f=t[2]:(f=Qe(i),t[1]=i,t[2]=f);let p;t[3]===f?p=t[4]:(p={resolver:d,defaultValues:f},t[3]=f,t[4]=p);let m=U(p),h;t[5]!==m||t[6]!==u?(h=m.handleSubmit(u),t[5]=m,t[6]=u,t[7]=h):h=t[7];let g=h,_;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(_={maxWidth:`32rem`,width:`calc(100vw - 2rem)`},t[8]=_):_=t[8];let v;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,$.jsxs)(le,{children:[(0,$.jsx)(ae,{children:`Add listener`}),(0,$.jsx)(J,{children:`Listeners forward incoming traffic to a default target group.`})]}),t[9]=v):v=t[9];let y;t[10]===g?y=t[11]:(y=e=>{e.preventDefault(),g()},t[10]=g,t[11]=y);let b;t[12]!==s||t[13]!==m||t[14]!==a||t[15]!==c||t[16]!==o?(b=(0,$.jsx)(je,{certificates:s,form:m,protocols:a,sslPolicies:c,targetGroups:o}),t[12]=s,t[13]=m,t[14]=a,t[15]=c,t[16]=o,t[17]=b):b=t[17];let x;t[18]!==y||t[19]!==b?(x=(0,$.jsx)(`form`,{className:`min-w-0 space-y-4`,onSubmit:y,children:b}),t[18]=y,t[19]=b,t[20]=x):x=t[20];let S;t[21]===l?S=t[22]:(S=(0,$.jsx)(ce,{disabled:l,children:`Cancel`}),t[21]=l,t[22]=S);let C=l?`Adding…`:`Add listener`,w;t[23]!==g||t[24]!==l||t[25]!==C?(w=(0,$.jsx)(oe,{disabled:l,onClick:g,children:C}),t[23]=g,t[24]=l,t[25]=C,t[26]=w):w=t[26];let T;t[27]!==S||t[28]!==w?(T=(0,$.jsxs)(se,{children:[S,w]}),t[27]=S,t[28]=w,t[29]=T):T=t[29];let E;t[30]!==T||t[31]!==x?(E=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:_,children:[v,x,T]}),t[30]=T,t[31]=x,t[32]=E):E=t[32];let D;return t[33]!==r||t[34]!==n||t[35]!==E?(D=(0,$.jsx)(ue,{onOpenChange:r,open:n,children:E}),t[33]=r,t[34]=n,t[35]=E,t[36]=D):D=t[36],D}function rt(e){let t=(0,Te.c)(39),{listener:n,onOpenChange:r,protocols:i,targetGroups:a,certificates:o,sslPolicies:s,isPending:c,onSubmit:l}=e,u=n!==void 0,d,f;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=W(me),f={protocol:`HTTP`,port:80,defaultTargetGroupArn:``},t[0]=d,t[1]=f):(d=t[0],f=t[1]);let p;t[2]!==n||t[3]!==i?(p=n?$e(n,i):void 0,t[2]=n,t[3]=i,t[4]=p):p=t[4];let m;t[5]===p?m=t[6]:(m={resolver:d,defaultValues:f,values:p},t[5]=p,t[6]=m);let h=U(m),g;t[7]!==h||t[8]!==l?(g=h.handleSubmit(l),t[7]=h,t[8]=l,t[9]=g):g=t[9];let _=g,v;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(v={maxWidth:`32rem`,width:`calc(100vw - 2rem)`},t[10]=v):v=t[10];let y;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,$.jsxs)(le,{children:[(0,$.jsx)(ae,{children:`Edit listener`}),(0,$.jsx)(J,{children:`Update port, protocol, or default target group. Changes apply without dropping the listener.`})]}),t[11]=y):y=t[11];let b;t[12]===_?b=t[13]:(b=e=>{e.preventDefault(),_()},t[12]=_,t[13]=b);let x;t[14]!==o||t[15]!==h||t[16]!==i||t[17]!==s||t[18]!==a?(x=(0,$.jsx)(je,{certificates:o,form:h,protocols:i,sslPolicies:s,targetGroups:a}),t[14]=o,t[15]=h,t[16]=i,t[17]=s,t[18]=a,t[19]=x):x=t[19];let S;t[20]!==b||t[21]!==x?(S=(0,$.jsx)(`form`,{className:`min-w-0 space-y-4`,onSubmit:b,children:x}),t[20]=b,t[21]=x,t[22]=S):S=t[22];let C;t[23]===c?C=t[24]:(C=(0,$.jsx)(ce,{disabled:c,children:`Cancel`}),t[23]=c,t[24]=C);let w=c?`Saving…`:`Save changes`,T;t[25]!==_||t[26]!==c||t[27]!==w?(T=(0,$.jsx)(oe,{disabled:c,onClick:_,children:w}),t[25]=_,t[26]=c,t[27]=w,t[28]=T):T=t[28];let E;t[29]!==C||t[30]!==T?(E=(0,$.jsxs)(se,{children:[C,T]}),t[29]=C,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==S||t[33]!==E?(D=(0,$.jsxs)(ie,{className:`grid-cols-[minmax(0,1fr)]`,style:v,children:[y,S,E]}),t[32]=S,t[33]=E,t[34]=D):D=t[34];let O;return t[35]!==r||t[36]!==u||t[37]!==D?(O=(0,$.jsx)(ue,{onOpenChange:r,open:u,children:D}),t[35]=r,t[36]=u,t[37]=D,t[38]=O):O=t[38],O}function it(e,t){if(e.length!==t.length)return!1;let n=new Set(t);return e.every(e=>n.has(e))}function at(e){let t=(0,Te.c)(48),{available:n,current:r,onSubmit:i,isPending:a,error:o,isSuccess:s}=e,c;t[0]===r?c=t[1]:(c=[...r],t[0]=r,t[1]=c);let l=c,[u,d]=(0,Q.useState)(l),f;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>{d(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},t[2]=f):f=t[2];let p=f,m;t[3]===l?m=t[4]:(m=()=>{d(l)},t[3]=l,t[4]=m);let h=m,g;t[5]!==l||t[6]!==u?(g=it(u,l),t[5]=l,t[6]=u,t[7]=g):g=t[7];let v=!g,y=u.length===0,b;t[8]===u?b=t[9]:(b=new Set(u),t[8]=u,t[9]=b);let x=b,S;t[10]!==v||t[11]!==y||t[12]!==i||t[13]!==u?(S=e=>{e.preventDefault(),v&&!y&&i(u)},t[10]=v,t[11]=y,t[12]=i,t[13]=u,t[14]=S):S=t[14];let C;t[15]===o?C=t[16]:(C=o&&(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:o.message||`Failed to update security groups`}),t[15]=o,t[16]=C);let w;t[17]!==v||t[18]!==s?(w=s&&!v&&(0,$.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Security groups updated.`}),t[17]=v,t[18]=s,t[19]=w):w=t[19];let T;t[20]!==n||t[21]!==x?(T=n.length===0?(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No security groups in this VPC.`}):n.map(e=>(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,$.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:x.has(e.GroupId??``),onChange:()=>{p(e.GroupId??``)},type:`checkbox`}),(0,$.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId)),t[20]=n,t[21]=x,t[22]=T):T=t[22];let E;t[23]===y?E=t[24]:(E=y&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:`At least one security group is required.`}),t[23]=y,t[24]=E);let D;t[25]!==E||t[26]!==T?(D=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 p-4`,children:[T,E]}),t[25]=E,t[26]=T,t[27]=D):D=t[27];let O=v?`Unsaved changes`:`No changes`,k;t[28]===O?k=t[29]:(k=(0,$.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:O}),t[28]=O,t[29]=k);let A=a||!v,j;t[30]!==h||t[31]!==A?(j=(0,$.jsx)(_,{disabled:A,onClick:h,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[30]=h,t[31]=A,t[32]=j):j=t[32];let M=a||!v||y,N=a?`Saving…`:`Save changes`,P;t[33]!==M||t[34]!==N?(P=(0,$.jsx)(_,{disabled:M,size:`sm`,type:`submit`,children:N}),t[33]=M,t[34]=N,t[35]=P):P=t[35];let F;t[36]!==k||t[37]!==j||t[38]!==P?(F=(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[k,j,P]}),t[36]=k,t[37]=j,t[38]=P,t[39]=F):F=t[39];let I;t[40]!==D||t[41]!==F?(I=(0,$.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[D,F]}),t[40]=D,t[41]=F,t[42]=I):I=t[42];let L;return t[43]!==I||t[44]!==S||t[45]!==C||t[46]!==w?(L=(0,$.jsxs)(`form`,{onSubmit:S,children:[C,w,I]}),t[43]=I,t[44]=S,t[45]=C,t[46]=w,t[47]=L):L=t[47],L}function ot(e,t){if(e.length!==t.length)return!1;let n=new Set(t);return e.every(e=>n.has(e))}function st(e){let t=s(e.Tags),n=e.AvailabilityZone?` · ${e.AvailabilityZone}`:``,r=e.CidrBlock?` (${e.CidrBlock})`:``;return`${e.SubnetId}${t?` — ${t}`:``}${r}${n}`}function ct(e){let t=(0,Te.c)(49),{available:n,current:r,onSubmit:i,isPending:a,error:o,isSuccess:s}=e,c;t[0]===r?c=t[1]:(c=[...r],t[0]=r,t[1]=c);let l=c,[u,d]=(0,Q.useState)(l),f;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>{d(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},t[2]=f):f=t[2];let p=f,m;t[3]===l?m=t[4]:(m=()=>{d(l)},t[3]=l,t[4]=m);let h=m,g;t[5]!==l||t[6]!==u?(g=ot(u,l),t[5]=l,t[6]=u,t[7]=g):g=t[7];let v=!g,y=u.length===0,b;t[8]===u?b=t[9]:(b=new Set(u),t[8]=u,t[9]=b);let x=b,S;t[10]!==v||t[11]!==y||t[12]!==i||t[13]!==u?(S=e=>{e.preventDefault(),v&&!y&&i(u)},t[10]=v,t[11]=y,t[12]=i,t[13]=u,t[14]=S):S=t[14];let C;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-amber-500 bg-amber-500/10 p-3 text-sm text-amber-700 dark:text-amber-400`,role:`note`,children:`Applying a subnet change re-homes the load balancer by relaunching its underlying system VM. Expect a brief data-plane interruption while it restarts.`}),t[15]=C):C=t[15];let w;t[16]===o?w=t[17]:(w=o&&(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:o.message||`Failed to update subnets`}),t[16]=o,t[17]=w);let T;t[18]!==v||t[19]!==s?(T=s&&!v&&(0,$.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Subnets updated.`}),t[18]=v,t[19]=s,t[20]=T):T=t[20];let E;t[21]!==n||t[22]!==x?(E=n.length===0?(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No subnets in this VPC.`}):n.map(e=>(0,$.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,$.jsx)(`input`,{"aria-label":`Subnet ${e.SubnetId}`,checked:x.has(e.SubnetId??``),onChange:()=>{p(e.SubnetId??``)},type:`checkbox`}),(0,$.jsx)(`span`,{className:`font-mono`,children:st(e)})]},e.SubnetId)),t[21]=n,t[22]=x,t[23]=E):E=t[23];let D;t[24]===y?D=t[25]:(D=y&&(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:`At least one subnet is required.`}),t[24]=y,t[25]=D);let O;t[26]!==E||t[27]!==D?(O=(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 p-4`,children:[E,D]}),t[26]=E,t[27]=D,t[28]=O):O=t[28];let k=v?`Unsaved changes`:`No changes`,A;t[29]===k?A=t[30]:(A=(0,$.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:k}),t[29]=k,t[30]=A);let j=a||!v,M;t[31]!==h||t[32]!==j?(M=(0,$.jsx)(_,{disabled:j,onClick:h,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[31]=h,t[32]=j,t[33]=M):M=t[33];let N=a||!v||y,P=a?`Saving…`:`Save changes`,F;t[34]!==N||t[35]!==P?(F=(0,$.jsx)(_,{disabled:N,size:`sm`,type:`submit`,children:P}),t[34]=N,t[35]=P,t[36]=F):F=t[36];let I;t[37]!==A||t[38]!==M||t[39]!==F?(I=(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[A,M,F]}),t[37]=A,t[38]=M,t[39]=F,t[40]=I):I=t[40];let L;t[41]!==O||t[42]!==I?(L=(0,$.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[O,I]}),t[41]=O,t[42]=I,t[43]=L):L=t[43];let R;return t[44]!==L||t[45]!==S||t[46]!==w||t[47]!==T?(R=(0,$.jsxs)(`form`,{onSubmit:S,children:[C,w,T,L]}),t[44]=L,t[45]=S,t[46]=w,t[47]=T,t[48]=R):R=t[48],R}function lt({arn:e}){let t=a(),{data:n}=i(P(e)),{data:r}=i(L(e)),{data:c}=i(R([e])),{data:u}=i(x),{data:d}=i(S),f=k(),p=T(),m=C(),h=O(),v=D(),[y,b]=(0,Q.useState)(!1),w=n.LoadBalancers?.[0];if(!w?.LoadBalancerArn)return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(l,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),(0,$.jsx)(`p`,{className:`text-muted-foreground`,children:`Load balancer not found.`})]});let E=async()=>{try{await f.mutateAsync(e),t({to:`/ec2/describe-load-balancers`})}finally{b(!1)}},A=u.Subnets??[],j=e=>{let t=A.find(t=>t.SubnetId===e);if(!t)return e;let n=s(t.Tags),r=t.CidrBlock?` (${t.CidrBlock})`:``;return n?`${e} — ${n}${r}`:`${e}${r}`},M=r.Attributes??[],N=c?.TagDescriptions?.find(t=>t.ResourceArn===e)?.Tags??[],F=(w.SecurityGroups??[]).filter(e=>e!==void 0),I=(d.SecurityGroups??[]).filter(e=>e.VpcId===w.VpcId),z=A.filter(e=>e.VpcId===w.VpcId),B=(w.AvailabilityZones??[]).map(e=>e.SubnetId).filter(e=>e!==void 0),V=w.Type===`network`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(l,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),f.error&&(0,$.jsx)(G,{error:f.error,msg:`Failed to delete load balancer`}),(0,$.jsxs)(`div`,{className:`space-y-6`,children:[(0,$.jsx)(H,{actions:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(_,{onClick:()=>{b(!0)},size:`sm`,variant:`destructive`,children:[(0,$.jsx)(g,{className:`size-4`}),`Delete`]}),(0,$.jsx)(de,{state:w.State?.Code})]}),subtitle:`Load Balancer Details`,title:w.LoadBalancerName??w.LoadBalancerArn}),(0,$.jsxs)(we,{defaultValue:`overview`,children:[(0,$.jsxs)(Se,{children:[(0,$.jsx)(xe,{value:`overview`,children:`Overview`}),(0,$.jsx)(xe,{value:`listeners`,children:`Listeners`}),(0,$.jsx)(xe,{value:`subnets`,children:`Subnets`}),!V&&(0,$.jsx)(xe,{value:`security-groups`,children:`Security groups`}),(0,$.jsx)(xe,{value:`attributes`,children:`Attributes`}),(0,$.jsx)(xe,{value:`tags`,children:`Tags`})]}),(0,$.jsxs)(Ce,{value:`overview`,children:[(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Load balancer`}),(0,$.jsxs)(X.Content,{children:[(0,$.jsx)(Z,{label:`ARN`,value:w.LoadBalancerArn}),(0,$.jsx)(Z,{label:`DNS name`,value:w.DNSName}),(0,$.jsx)(Z,{label:`State`,value:w.State?.Reason?`${w.State.Code} — ${w.State.Reason}`:w.State?.Code}),(0,$.jsx)(Z,{label:`Type`,value:w.Type}),(0,$.jsx)(Z,{label:`Scheme`,value:w.Scheme}),(0,$.jsx)(Z,{label:`IP address type`,value:w.IpAddressType}),(0,$.jsx)(Z,{label:`VPC`,value:w.VpcId}),(0,$.jsx)(Z,{label:`Created at`,value:o(w.CreatedTime)})]})]}),(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Availability zones`}),(0,$.jsx)(X.Content,{children:(w.AvailabilityZones??[]).map(e=>(0,$.jsx)(Z,{label:e.ZoneName??`—`,value:e.SubnetId?j(e.SubnetId):void 0},`${e.ZoneName}-${e.SubnetId}`))})]}),(w.SecurityGroups??[]).length>0&&(0,$.jsxs)(X,{children:[(0,$.jsx)(X.Header,{children:`Security groups`}),(0,$.jsx)(X.Content,{children:(w.SecurityGroups??[]).map(e=>(0,$.jsx)(Z,{label:`Security group`,value:e},e))})]})]}),(0,$.jsx)(Ce,{value:`listeners`,children:(0,$.jsx)(tt,{lbType:V?`network`:`application`,loadBalancerArn:e,vpcId:w.VpcId})}),(0,$.jsx)(Ce,{value:`subnets`,children:(0,$.jsx)(ct,{available:z,current:B,error:v.error,isPending:v.isPending,isSuccess:v.isSuccess,onSubmit:t=>{v.mutate({loadBalancerArn:e,subnetIds:t})}})}),!V&&(0,$.jsx)(Ce,{value:`security-groups`,children:(0,$.jsx)(at,{available:I,current:F,error:h.error,isPending:h.isPending,isSuccess:h.isSuccess,onSubmit:t=>{h.mutate({loadBalancerArn:e,securityGroupIds:t})}})}),(0,$.jsx)(Ce,{value:`attributes`,children:(0,$.jsx)(ye,{attributes:M,error:p.error,isPending:p.isPending,isSuccess:p.isSuccess,onSubmit:t=>{p.mutate({loadBalancerArn:e,attributes:t})},specs:ve})}),(0,$.jsx)(Ce,{value:`tags`,children:(0,$.jsx)(be,{error:m.error,isPending:m.isPending,isSuccess:m.isSuccess,onSubmit:t=>{m.mutate({resourceArn:e,tags:t,initialKeys:N.map(e=>e.Key??``).filter(e=>e.length>0)})},tags:N})})]})]}),(0,$.jsx)(Y,{description:`Are you sure you want to delete load balancer "${w.LoadBalancerName??w.LoadBalancerArn}"? This action cannot be undone.`,isPending:f.isPending,onConfirm:E,onOpenChange:b,open:y,title:`Delete load balancer`})]})}function ut(){let e=(0,Te.c)(4),{id:t}=V.useParams(),n;e[0]===t?n=e[1]:(n=c(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,$.jsx)(lt,{arn:n}),e[2]=n,e[3]=r),r}export{ut as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CAKeaftF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DRsACGg7.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CAKeaftF.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DRsACGg7.js index c4dd245f0..793b6fde6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-CAKeaftF.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DRsACGg7.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{in as s,on as c}from"./cluster-config-xw_Q7X1e.js";import{t as l}from"./createLucideIcon-BQgzNCBR.js";import{t as u}from"./back-link-CjKy1JE5.js";import{t as d}from"./check-BO7W8OSs.js";import{c as f,i as p,n as m,s as h,t as g}from"./select-B01jpDaX.js";import{t as _}from"./copy-CamWo-pg.js";import{t as v}from"./network-RAx0KOlf.js";import{t as y}from"./rotate-cw-FTUcK_f-.js";import{t as b}from"./trash-DVab4pEz.js";import{t as x}from"./triangle-alert-DcjzeKLg.js";import{t as S}from"./button-BarTr35m.js";import{t as C}from"./input-6kdUb_DH.js";import{n as w}from"./admin-context-CXmiyIcc.js";import{a as T,c as E,i as D,s as O}from"./ec2-CWEplLq4.js";import{J as k,K as A,W as j,Z as M,d as N,i as P,it as F,nt as I,rt as L}from"./ec2-Ctto2xjU.js";import{f as ee}from"./iam-CVg27y22.js";import{t as te}from"./_id-Czat7SAc.js";import{t as ne}from"./page-heading-vksh_67w.js";import{o as re}from"./admin-BUkrFIlI.js";import{t as R}from"./error-banner-DeOeVBKS.js";import{s as ie,t as ae}from"./field-c7GHI5st.js";import{t as oe}from"./textarea-n04EavUm.js";import{a as se,i as ce,l as le,n as ue,o as de,r as fe,s as pe,t as me}from"./alert-dialog-kCQ1W4Rz.js";import{t as he}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as z,t as B}from"./detail-row-DNBRlVeK.js";import{t as ge}from"./state-badge-D1Z6q_OA.js";import{t as V}from"./use-copy-to-clipboard-DjiD3qo6.js";import{t as _e}from"./ami-details-ChpQ4w1b.js";import{t as ve}from"./gpu-instance-type-select-BD2r8UcO.js";var H={name:`image-plus`,size:24,node:[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};H.node;var ye=l(H),be={name:`info`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]};be.node;var xe=l(be),Se={name:`pause`,size:24,node:[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]};Se.node;var Ce=l(Se),we={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};we.node;var U=l(we),W={name:`settings-2`,size:24,node:[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]};W.node;var Te=l(W),G={name:`terminal`,size:24,node:[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]};G.node;var Ee=l(G),K=r(),q=t(n(),1),J=e();function De(e){let t=(0,K.c)(36),{instanceId:n,open:r,onOpenChange:i}=e,a=N(),[o,s]=(0,q.useState)(``),[c,l]=(0,q.useState)(``),[u,d]=(0,q.useState)(null),f;t[0]===i?f=t[1]:(f=function(e){e||(s(``),l(``),d(null)),i(e)},t[0]=i,t[1]=f);let p=f,m;t[2]!==a||t[3]!==c||t[4]!==o||t[5]!==n?(m=async function(){try{let e=await a.mutateAsync({instanceId:n,name:o,description:c||void 0});d(e.ImageId??null),s(``),l(``)}catch{}},t[2]=a,t[3]=c,t[4]=o,t[5]=n,t[6]=m):m=t[6];let h=m,g=u?`Image Created`:`Create Image (AMI)`,_;t[7]===g?_=t[8]:(_=(0,J.jsx)(le,{children:g}),t[7]=g,t[8]=_);let v=u?`Image "${u}" was created successfully.`:`Create an AMI from instance "${n}".`,y;t[9]===v?y=t[10]:(y=(0,J.jsx)(se,{children:v}),t[9]=v,t[10]=y);let b;t[11]!==_||t[12]!==y?(b=(0,J.jsxs)(pe,{children:[_,y]}),t[11]=_,t[12]=y,t[13]=b):b=t[13];let x;t[14]!==u||t[15]!==c||t[16]!==o?(x=!u&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(ae,{children:[(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`imageName`,children:`Name`})}),(0,J.jsx)(C,{id:`imageName`,onChange:e=>{s(e.target.value)},placeholder:`my-image`,value:o})]}),(0,J.jsxs)(ae,{children:[(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`imageDescription`,children:`Description`})}),(0,J.jsx)(oe,{id:`imageDescription`,onChange:e=>{l(e.target.value)},placeholder:`Optional description`,rows:2,value:c})]})]}),t[14]=u,t[15]=c,t[16]=o,t[17]=x):x=t[17];let S=u?`Close`:`Cancel`,w;t[18]===S?w=t[19]:(w=(0,J.jsx)(fe,{children:S}),t[18]=S,t[19]=w);let T;t[20]!==a||t[21]!==u||t[22]!==h||t[23]!==o?(T=!u&&(0,J.jsx)(ue,{disabled:a.isPending||!o.trim(),onClick:h,children:a.isPending?`Creating…`:`Create Image`}),t[20]=a,t[21]=u,t[22]=h,t[23]=o,t[24]=T):T=t[24];let E;t[25]!==w||t[26]!==T?(E=(0,J.jsxs)(de,{children:[w,T]}),t[25]=w,t[26]=T,t[27]=E):E=t[27];let D;t[28]!==E||t[29]!==b||t[30]!==x?(D=(0,J.jsxs)(ce,{children:[b,x,E]}),t[28]=E,t[29]=b,t[30]=x,t[31]=D):D=t[31];let O;return t[32]!==p||t[33]!==r||t[34]!==D?(O=(0,J.jsx)(me,{onOpenChange:p,open:r,children:D}),t[32]=p,t[33]=r,t[34]=D,t[35]=O):O=t[35],O}function Oe(e){let t=(0,K.c)(9),{gpus:n}=e;if(!n?.length)return null;let r=n.length===1?`GPU`:`GPUs (${n.length})`,i;t[0]===r?i=t[1]:(i=(0,J.jsx)(z.Header,{children:r}),t[0]=r,t[1]=i);let a;if(t[2]!==n){let e;t[4]===n.length?e=t[5]:(e=(e,t)=>(0,J.jsxs)(`div`,{className:`border-b last:border-b-0`,children:[n.length>1&&(0,J.jsxs)(`h3`,{className:`bg-muted/30 px-4 py-2 text-sm font-medium`,children:[`GPU `,t+1]}),(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Model`,value:e.model}),(0,J.jsx)(B,{label:`VRAM`,value:c(e.vram_mib)}),(0,J.jsx)(B,{label:`Attachment`,value:e.profile?`MIG slice`:`PCIe passthrough`}),e.profile&&(0,J.jsx)(B,{label:`Profile`,value:e.profile}),e.mdev_path&&(0,J.jsx)(B,{label:`Mdev path`,value:e.mdev_path}),e.pci_address&&(0,J.jsx)(B,{label:`PCI address`,value:e.pci_address})]})]},e.mdev_path??e.pci_address??`${e.model}-${t}`),t[4]=n.length,t[5]=e),a=n.map(e),t[2]=n,t[3]=a}else a=t[3];let o;return t[6]!==i||t[7]!==a?(o=(0,J.jsxs)(z,{children:[i,a]}),t[6]=i,t[7]=a,t[8]=o):o=t[8],o}function ke(e){let t=(0,K.c)(31),{instanceId:n}=e,r;t[0]===n?r=t[1]:(r=D(n),t[0]=n,t[1]=r);let{data:a}=i(r),{data:s}=i(ee),c=P(),l=j(),[u,d]=(0,q.useState)(``),p;t[2]===a?.IamInstanceProfileAssociations?p=t[3]:(p=a?.IamInstanceProfileAssociations?.find(X),t[2]=a?.IamInstanceProfileAssociations,t[3]=p);let _=p,v;t[4]===s?.InstanceProfiles?v=t[5]:(v=s?.InstanceProfiles??[],t[4]=s?.InstanceProfiles,t[5]=v);let y=v,b;t[6]!==c||t[7]!==n||t[8]!==u?(b=async()=>{u&&(await c.mutateAsync({instanceId:n,instanceProfileName:u}),d(``))},t[6]=c,t[7]=n,t[8]=u,t[9]=b):b=t[9];let x=b,C;t[10]!==_||t[11]!==l||t[12]!==n?(C=async()=>{_?.AssociationId&&await l.mutateAsync({associationId:_.AssociationId,instanceId:n})},t[10]=_,t[11]=l,t[12]=n,t[13]=C):C=t[13];let w=C,T;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,J.jsx)(z.Header,{children:`IAM Role`}),t[14]=T):T=t[14];let E;t[15]===c.error?E=t[16]:(E=c.error&&(0,J.jsx)(`div`,{className:`col-span-2`,children:(0,J.jsx)(R,{error:c.error,msg:`Failed to associate instance profile`})}),t[15]=c.error,t[16]=E);let O;t[17]===l.error?O=t[18]:(O=l.error&&(0,J.jsx)(`div`,{className:`col-span-2`,children:(0,J.jsx)(R,{error:l.error,msg:`Failed to disassociate instance profile`})}),t[17]=l.error,t[18]=O);let k;t[19]!==c.isPending||t[20]!==_||t[21]!==l.isPending||t[22]!==x||t[23]!==w||t[24]!==y||t[25]!==u?(k=_?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(B,{label:`Instance Profile ARN`,value:_.IamInstanceProfile?.Arn}),(0,J.jsx)(B,{label:`State`,value:(0,J.jsx)(ge,{state:_.State})}),(0,J.jsx)(`div`,{className:`col-span-2 flex justify-end`,children:(0,J.jsx)(S,{disabled:l.isPending,onClick:w,size:`sm`,variant:`destructive`,children:l.isPending?`Detaching…`:`Detach`})})]}):(0,J.jsxs)(`div`,{className:`col-span-2 space-y-3`,children:[(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No instance profile is associated. Associate one to flow role credentials to this instance via IMDS.`}),y.length>0?(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsxs)(g,{onValueChange:e=>{d(e??``)},value:u,children:[(0,J.jsx)(h,{className:`w-full`,children:(0,J.jsx)(f,{placeholder:`Select an instance profile`})}),(0,J.jsx)(m,{children:y.map(Y)})]}),(0,J.jsx)(S,{disabled:!u||c.isPending,onClick:x,size:`sm`,children:c.isPending?`Associating…`:`Associate`})]}):(0,J.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No instance profiles exist.`,` `,(0,J.jsx)(o,{className:`text-primary hover:underline`,to:`/iam/create-instance-profile`,children:`Create one`}),` `,`first.`]})]}),t[19]=c.isPending,t[20]=_,t[21]=l.isPending,t[22]=x,t[23]=w,t[24]=y,t[25]=u,t[26]=k):k=t[26];let A;return t[27]!==E||t[28]!==O||t[29]!==k?(A=(0,J.jsxs)(z,{children:[T,(0,J.jsxs)(z.Content,{children:[E,O,k]})]}),t[27]=E,t[28]=O,t[29]=k,t[30]=A):A=t[30],A}function Y(e){return(0,J.jsx)(p,{value:e.InstanceProfileName??``,children:e.InstanceProfileName},e.InstanceProfileName)}function X(e){return e.State===`associating`||e.State===`associated`}var Ae=new Set([`pending`,`stopping`,`shutting-down`,`terminated`]);function je(e){let t=(0,K.c)(43),{instanceId:n,state:r}=e,i=I(),a=L(),o=M(),s=F(),[c,l]=(0,q.useState)(!1),u=Ae.has(r??``),d;t[0]!==n||t[1]!==s?(d=()=>{s.mutate(n,{onSettled:()=>{l(!1)}})},t[0]=n,t[1]=s,t[2]=d):d=t[2];let f=d;if(u&&r!==`terminated`){let e;return t[3]===r?e=t[4]:(e=(0,J.jsx)(`div`,{className:`rounded-lg border bg-muted/50 p-4`,children:(0,J.jsxs)(`p`,{className:`text-center text-sm text-muted-foreground`,children:[`Instance is `,r,`. Actions will be available once the operation completes.`]})}),t[3]=r,t[4]=e),e}if(r===`terminated`){let e;return t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,J.jsx)(`div`,{className:`rounded-lg border bg-muted/50 p-4`,children:(0,J.jsx)(`p`,{className:`text-center text-sm text-muted-foreground`,children:`This instance has been terminated and cannot be managed.`})}),t[5]=e):e=t[5],e}let p;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,J.jsx)(`h2`,{className:`mb-4 font-semibold`,children:`Instance Actions`}),t[6]=p):p=t[6];let m;t[7]===i.error?m=t[8]:(m=i.error&&(0,J.jsx)(R,{error:i.error,msg:`Failed to start instance`}),t[7]=i.error,t[8]=m);let h;t[9]===a.error?h=t[10]:(h=a.error&&(0,J.jsx)(R,{error:a.error,msg:`Failed to stop instance`}),t[9]=a.error,t[10]=h);let g;t[11]===o.error?g=t[12]:(g=o.error&&(0,J.jsx)(R,{error:o.error,msg:`Failed to reboot instance`}),t[11]=o.error,t[12]=g);let _;t[13]===s.error?_=t[14]:(_=s.error&&(0,J.jsx)(R,{error:s.error,msg:`Failed to terminate instance`}),t[13]=s.error,t[14]=_);let v;t[15]!==n||t[16]!==i||t[17]!==r?(v=r===`stopped`&&(0,J.jsxs)(S,{disabled:i.isPending,onClick:()=>{i.mutate(n)},size:`sm`,variant:`default`,children:[(0,J.jsx)(U,{className:`size-4`}),i.isPending?`Starting`:`Start`]}),t[15]=n,t[16]=i,t[17]=r,t[18]=v):v=t[18];let x;t[19]!==n||t[20]!==o||t[21]!==r||t[22]!==a?(x=r===`running`&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(S,{disabled:a.isPending,onClick:()=>{a.mutate(n)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(Ce,{className:`size-4`}),a.isPending?`Stopping`:`Stop`]}),(0,J.jsxs)(S,{disabled:o.isPending,onClick:()=>{o.mutate(n)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(y,{className:`size-4`}),o.isPending?`Rebooting`:`Reboot`]})]}),t[19]=n,t[20]=o,t[21]=r,t[22]=a,t[23]=x):x=t[23];let C;t[24]!==r||t[25]!==s.isPending?(C=(r===`stopped`||r===`running`)&&(0,J.jsxs)(S,{disabled:s.isPending,onClick:()=>{l(!0)},size:`sm`,variant:`destructive`,children:[(0,J.jsx)(b,{className:`size-4`}),s.isPending?`Terminating`:`Terminate`]}),t[24]=r,t[25]=s.isPending,t[26]=C):C=t[26];let w;t[27]!==v||t[28]!==x||t[29]!==C?(w=(0,J.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[v,x,C]}),t[27]=v,t[28]=x,t[29]=C,t[30]=w):w=t[30];let T=`Are you sure you want to terminate the instance "${n}"? This action cannot be undone.`,E;t[31]!==f||t[32]!==c||t[33]!==T||t[34]!==s.isPending?(E=(0,J.jsx)(he,{confirmLabel:`Terminate`,description:T,isPending:s.isPending,onConfirm:f,onOpenChange:l,open:c,pendingLabel:`Terminating…`,title:`Terminate Instance`}),t[31]=f,t[32]=c,t[33]=T,t[34]=s.isPending,t[35]=E):E=t[35];let D;return t[36]!==w||t[37]!==E||t[38]!==m||t[39]!==h||t[40]!==g||t[41]!==_?(D=(0,J.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[p,m,h,g,_,w,E]}),t[36]=w,t[37]=E,t[38]=m,t[39]=h,t[40]=g,t[41]=_,t[42]=D):D=t[42],D}var Z=[[`amazonlinux`,`ec2-user`],[`almalinux`,`almalinux`],[`oracle`,`cloud-user`],[`ubuntu`,`ubuntu`],[`debian`,`debian`],[`fedora`,`fedora`],[`centos`,`cloud-user`],[`alpine`,`alpine`],[`rocky`,`rocky`],[`amzn`,`ec2-user`],[`rhel`,`cloud-user`]];function Q(e){let t=new Set(`${e?.Name??``} ${e?.Description??``}`.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)),n=Z.find(([e])=>t.has(e));return n?{user:n[1],distro:n[0]}:{user:``}}function Me(e){return e?.PublicIpAddress?{address:e.PublicIpAddress,reachability:`public`}:e?.PrivateIpAddress?{address:e.PrivateIpAddress,reachability:`private`}:{address:``,reachability:`none`}}var Ne=`path/to/key.pem`;function Pe(e){return`ssh -i ${e.keyName?`path/to/${e.keyName}.pem`:Ne} ${e.user||``}@${e.address}`}function Fe(e){let t=(0,K.c)(49),{instance:n,image:r}=e,{copied:i,copy:a}=V(),o,s,c,l,u,f;if(t[0]!==r||t[1]!==n){u=Symbol.for(`react.early_return_sentinel`);bb0:{if({address:o,reachability:c}=Me(n),{user:f,distro:s}=Q(r),c===`none`){u=null;break bb0}l=Pe({keyName:n.KeyName,user:f,address:o})}t[0]=r,t[1]=n,t[2]=o,t[3]=s,t[4]=c,t[5]=l,t[6]=u,t[7]=f}else o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],f=t[7];if(u!==Symbol.for(`react.early_return_sentinel`))return u;let p=l,m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,J.jsx)(z.Header,{children:`Connect over SSH`}),t[8]=m):m=t[8];let h;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,J.jsx)(`span`,{className:`text-muted-foreground select-none`,children:`$`}),t[9]=h):h=t[9];let g;t[10]===p?g=t[11]:(g=(0,J.jsx)(`span`,{className:`flex-1 overflow-x-auto whitespace-nowrap text-foreground`,children:p}),t[10]=p,t[11]=g);let y;t[12]!==p||t[13]!==a?(y=()=>{a(p)},t[12]=p,t[13]=a,t[14]=y):y=t[14];let b;t[15]===i?b=t[16]:(b=i?(0,J.jsx)(d,{className:`size-3.5 text-tactical-green`}):(0,J.jsx)(_,{className:`size-3.5`}),t[15]=i,t[16]=b);let S;t[17]!==y||t[18]!==b?(S=(0,J.jsx)(`button`,{"aria-label":`Copy SSH command`,className:`text-muted-foreground transition-colors hover:text-foreground`,onClick:y,type:`button`,children:b}),t[17]=y,t[18]=b,t[19]=S):S=t[19];let C;t[20]!==g||t[21]!==S?(C=(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-border bg-background px-3 py-2 font-mono text-xs`,children:[h,g,S]}),t[20]=g,t[21]=S,t[22]=C):C=t[22];let w;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Login user`}),t[23]=w):w=t[23];let T=f||`unknown — check the AMI`,E;t[24]===T?E=t[25]:(E=(0,J.jsxs)(`div`,{children:[w,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:T})]}),t[24]=T,t[25]=E);let D;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Address`}),t[26]=D):D=t[26];let O;t[27]===o?O=t[28]:(O=(0,J.jsxs)(`div`,{children:[D,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:o})]}),t[27]=o,t[28]=O);let k;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Key pair`}),t[29]=k):k=t[29];let A=n.KeyName??`none assigned`,j;t[30]===A?j=t[31]:(j=(0,J.jsxs)(`div`,{children:[k,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:A})]}),t[30]=A,t[31]=j);let M;t[32]!==E||t[33]!==O||t[34]!==j?(M=(0,J.jsxs)(`dl`,{className:`grid gap-x-6 gap-y-2 text-xs sm:grid-cols-3`,children:[E,O,j]}),t[32]=E,t[33]=O,t[34]=j,t[35]=M):M=t[35];let N;t[36]!==o||t[37]!==c?(N=c===`private`&&(0,J.jsxs)($,{tone:`amber`,icon:v,children:[`This instance has no public IP address, so`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:o}),` is reachable only from inside the VPC. Run the command from another instance in the same VPC whose security group allows it, or associate an Elastic IP with this one.`]}),t[36]=o,t[37]=c,t[38]=N):N=t[38];let P;t[39]!==s||t[40]!==f?(P=f?(0,J.jsxs)($,{tone:`muted`,icon:xe,children:[(0,J.jsx)(`span`,{className:`font-mono`,children:f}),` is the default login user for `,s,` images. It comes from the AMI itself — Spinifex does not create or rename the account — so an image built with a different default will want a different name here.`]}):(0,J.jsxs)($,{tone:`amber`,icon:x,children:[`The login user could not be determined from this AMI. Every distribution ships its own default —`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`ubuntu`}),`,`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`debian`}),`,`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`cloud-user`}),` on Oracle Linux and RHEL — so check the image's documentation before connecting.`]}),t[39]=s,t[40]=f,t[41]=P):P=t[41];let F;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,J.jsx)(`em`,{children:`you`}),t[42]=F):F=t[42];let I;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,J.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Spinifex stores only the public half of a key pair, so the path above is where `,F,` saved the private key when you created it. It must be readable only by you (`,(0,J.jsx)(`span`,{className:`font-mono`,children:`chmod 600`}),`), and the instance's security group must allow TCP 22 from wherever you are connecting.`]}),t[43]=I):I=t[43];let L;return t[44]!==M||t[45]!==N||t[46]!==P||t[47]!==C?(L=(0,J.jsxs)(z,{children:[m,(0,J.jsxs)(`div`,{className:`space-y-4 p-4`,children:[C,M,N,P,I]})]}),t[44]=M,t[45]=N,t[46]=P,t[47]=C,t[48]=L):L=t[48],L}var Ie={amber:`border-tactical-amber/40 bg-tactical-amber/5 text-tactical-amber`,muted:`border-border bg-muted/40 text-muted-foreground`};function $(e){let t=(0,K.c)(8),{tone:n,icon:r,children:i}=e,a=`flex items-start gap-2 rounded-md border p-3 ${Ie[n]}`,o;t[0]===r?o=t[1]:(o=(0,J.jsx)(r,{className:`mt-0.5 size-3.5 shrink-0`}),t[0]=r,t[1]=o);let s;t[2]===i?s=t[3]:(s=(0,J.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:i}),t[2]=i,t[3]=s);let c;return t[4]!==a||t[5]!==o||t[6]!==s?(c=(0,J.jsxs)(`div`,{className:a,children:[o,s]}),t[4]=a,t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function Le(){let e=(0,K.c)(141),{id:t}=te.useParams(),{isAdmin:n}=w(),r;e[0]===t?r=e[1]:(r=O(t),e[0]=t,e[1]=r);let{data:c}=a(r),l=c.Reservations?.[0]?.Instances?.[0],d=l?.ImageId,f;e[2]===d?f=e[3]:(f=T(d),e[2]=d,e[3]=f);let{data:p}=a(f),m=p?.Images?.[0],{data:h}=a(E),g;e[4]===n?g=e[5]:(g={...re,enabled:n,refetchInterval:5e3},e[4]=n,e[5]=g);let{data:_}=i(g),v;e[6]!==t||e[7]!==_?.vms?(v=_?.vms?.find(e=>e.instance_id===t),e[6]=t,e[7]=_?.vms,e[8]=v):v=e[8];let y=v,b=k(),x=A(),[C,D]=(0,q.useState)(!1),[j,M]=(0,q.useState)(``),[N,P]=(0,q.useState)(!1),[F,I]=(0,q.useState)(null),[L,ee]=(0,q.useState)(!1);if(!l?.InstanceId){let t;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(u,{to:`/ec2/describe-instances`,children:`Back to instances`}),(0,J.jsx)(`p`,{className:`text-muted-foreground`,children:`Instance not found.`})]}),e[9]=t):t=e[9],t}let oe;e[10]===l.LaunchTime?oe=e[11]:(oe=s(l.LaunchTime),e[10]=l.LaunchTime,e[11]=oe);let he=oe,V=l.State?.Name===`running`,H=l.State?.Name===`stopped`,be;e[12]!==t||e[13]!==b||e[14]!==j?(be=async function(){try{await b.mutateAsync({instanceId:t,instanceType:j}),D(!1),M(``)}catch{}},e[12]=t,e[13]=b,e[14]=j,e[15]=be):be=e[15];let xe=be,Se;e[16]!==x||e[17]!==t?(Se=async function(){try{let e=await x.mutateAsync(t),n=e.Output?atob(e.Output):`(no output)`;I(n),P(!0)}catch{}},e[16]=x,e[17]=t,e[18]=Se):Se=e[18];let Ce=Se,we;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,J.jsx)(u,{to:`/ec2/describe-instances`,children:`Back to instances`}),e[19]=we):we=e[19];let U;e[20]===b.error?U=e[21]:(U=b.error&&(0,J.jsx)(R,{error:b.error,msg:`Failed to modify instance`}),e[20]=b.error,e[21]=U);let W;e[22]===x.error?W=e[23]:(W=x.error&&(0,J.jsx)(R,{error:x.error,msg:`Failed to get console output`}),e[22]=x.error,e[23]=W);let G;e[24]!==x.isPending||e[25]!==Ce||e[26]!==V?(G=V&&(0,J.jsxs)(S,{disabled:x.isPending,onClick:Ce,size:`sm`,variant:`outline`,children:[(0,J.jsx)(Ee,{className:`size-4`}),x.isPending?`Fetching…`:`View Console`]}),e[24]=x.isPending,e[25]=Ce,e[26]=V,e[27]=G):G=e[27];let Y;e[28]!==V||e[29]!==H?(Y=(V||H)&&(0,J.jsxs)(S,{onClick:()=>{ee(!0)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(ye,{className:`size-4`}),`Create Image`]}),e[28]=V,e[29]=H,e[30]=Y):Y=e[30];let X;e[31]!==l.InstanceType||e[32]!==H?(X=H&&(0,J.jsxs)(S,{onClick:()=>{M(l.InstanceType??``),D(!0)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(Te,{className:`size-4`}),`Modify Instance`]}),e[31]=l.InstanceType,e[32]=H,e[33]=X):X=e[33];let Ae=l.State?.Name,Z;e[34]===Ae?Z=e[35]:(Z=(0,J.jsx)(ge,{state:Ae}),e[34]=Ae,e[35]=Z);let Q;e[36]!==G||e[37]!==Y||e[38]!==X||e[39]!==Z?(Q=(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[G,Y,X,Z]}),e[36]=G,e[37]=Y,e[38]=X,e[39]=Z,e[40]=Q):Q=e[40];let Me;e[41]!==l.InstanceId||e[42]!==Q?(Me=(0,J.jsx)(ne,{actions:Q,subtitle:`Instance Details`,title:l.InstanceId}),e[41]=l.InstanceId,e[42]=Q,e[43]=Me):Me=e[43];let Ne=l.State?.Name,Pe;e[44]!==l.InstanceId||e[45]!==Ne?(Pe=(0,J.jsx)(je,{instanceId:l.InstanceId,state:Ne}),e[44]=l.InstanceId,e[45]=Ne,e[46]=Pe):Pe=e[46];let Ie;e[47]!==m||e[48]!==l||e[49]!==V?(Ie=V&&(0,J.jsx)(Fe,{image:m,instance:l}),e[47]=m,e[48]=l,e[49]=V,e[50]=Ie):Ie=e[50];let $;e[51]!==F||e[52]!==N?($=N&&F!==null&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[`Console Output`,(0,J.jsx)(S,{onClick:()=>{P(!1),I(null)},size:`sm`,variant:`ghost`,children:`Hide`})]})}),(0,J.jsx)(`div`,{className:`p-4`,children:(0,J.jsx)(`pre`,{className:`max-h-96 overflow-y-auto rounded bg-muted p-3 font-mono text-xs whitespace-pre-wrap`,children:F})})]}),e[51]=F,e[52]=N,e[53]=$):$=e[53];let Le;e[54]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,J.jsx)(z.Header,{children:`Instance Information`}),e[54]=Le):Le=e[54];let Be;e[55]===l.InstanceId?Be=e[56]:(Be=(0,J.jsx)(B,{label:`Instance ID`,value:l.InstanceId}),e[55]=l.InstanceId,e[56]=Be);let Ve;e[57]===l.InstanceType?Ve=e[58]:(Ve=(0,J.jsx)(B,{label:`Instance Type`,value:l.InstanceType}),e[57]=l.InstanceType,e[58]=Ve);let He=l.State?.Name,Ue;e[59]===He?Ue=e[60]:(Ue=(0,J.jsx)(B,{label:`Instance State`,value:He}),e[59]=He,e[60]=Ue);let We;e[61]===l.State?.Code?We=e[62]:(We=l.State?.Code?.toString(),e[61]=l.State?.Code,e[62]=We);let Ge;e[63]===We?Ge=e[64]:(Ge=(0,J.jsx)(B,{label:`State Code`,value:We}),e[63]=We,e[64]=Ge);let Ke;e[65]===he?Ke=e[66]:(Ke=(0,J.jsx)(B,{label:`Launch Time`,value:he}),e[65]=he,e[66]=Ke);let qe=l.Placement?.AvailabilityZone,Je;e[67]===qe?Je=e[68]:(Je=(0,J.jsx)(B,{label:`Availability Zone`,value:qe}),e[67]=qe,e[68]=Je);let Ye;e[69]===l.Placement?Ye=e[70]:(Ye=l.Placement?.GroupName?(0,J.jsx)(o,{className:`text-primary hover:underline`,to:`/ec2/describe-placement-groups`,children:l.Placement.GroupName}):void 0,e[69]=l.Placement,e[70]=Ye);let Xe;e[71]===Ye?Xe=e[72]:(Xe=(0,J.jsx)(B,{label:`Placement Group`,value:Ye}),e[71]=Ye,e[72]=Xe);let Ze;e[73]!==Be||e[74]!==Ve||e[75]!==Ue||e[76]!==Ge||e[77]!==Ke||e[78]!==Je||e[79]!==Xe?(Ze=(0,J.jsxs)(z,{children:[Le,(0,J.jsxs)(z.Content,{children:[Be,Ve,Ue,Ge,Ke,Je,Xe]})]}),e[73]=Be,e[74]=Ve,e[75]=Ue,e[76]=Ge,e[77]=Ke,e[78]=Je,e[79]=Xe,e[80]=Ze):Ze=e[80];let Qe;e[81]!==l.KeyName||e[82]!==l.PrivateDnsName||e[83]!==l.PrivateIpAddress||e[84]!==l.PublicDnsName||e[85]!==l.PublicIpAddress||e[86]!==l.SecurityGroups||e[87]!==l.SubnetId||e[88]!==l.VpcId?(Qe=(l.PrivateIpAddress||l.PublicIpAddress||l.VpcId||l.SubnetId||l.SecurityGroups&&l.SecurityGroups.length>0)&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:`Network & Security`}),(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Private IP Address`,value:l.PrivateIpAddress}),(0,J.jsx)(B,{label:`Public IP Address`,value:l.PublicIpAddress}),(0,J.jsx)(B,{label:`Private DNS`,value:l.PrivateDnsName}),(0,J.jsx)(B,{label:`Public DNS`,value:l.PublicDnsName}),(0,J.jsx)(B,{label:`VPC ID`,value:l.VpcId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:l.VpcId},to:`/ec2/describe-vpcs/$id`,children:l.VpcId}):void 0}),(0,J.jsx)(B,{label:`Subnet ID`,value:l.SubnetId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:l.SubnetId},to:`/ec2/describe-subnets/$id`,children:l.SubnetId}):void 0}),(0,J.jsx)(B,{label:`Key Name`,value:l.KeyName}),(0,J.jsx)(B,{label:`Security Groups`,value:l.SecurityGroups?.map(ze).join(`, `)})]})]}),e[81]=l.KeyName,e[82]=l.PrivateDnsName,e[83]=l.PrivateIpAddress,e[84]=l.PublicDnsName,e[85]=l.PublicIpAddress,e[86]=l.SecurityGroups,e[87]=l.SubnetId,e[88]=l.VpcId,e[89]=Qe):Qe=e[89];let $e;e[90]===l.InstanceId?$e=e[91]:($e=(0,J.jsx)(ke,{instanceId:l.InstanceId}),e[90]=l.InstanceId,e[91]=$e);let et;e[92]!==n||e[93]!==y?.gpus?(et=n&&(0,J.jsx)(Oe,{gpus:y?.gpus}),e[92]=n,e[93]=y?.gpus,e[94]=et):et=e[94];let tt;e[95]===l.BlockDeviceMappings?tt=e[96]:(tt=l.BlockDeviceMappings&&l.BlockDeviceMappings.length>0&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:`Block Device Mappings`}),l.BlockDeviceMappings.map(Re)]}),e[95]=l.BlockDeviceMappings,e[96]=tt);let nt;e[97]===m?nt=e[98]:(nt=m&&(0,J.jsx)(_e,{image:m}),e[97]=m,e[98]=nt);let rt;e[99]!==Me||e[100]!==Pe||e[101]!==Ie||e[102]!==$||e[103]!==Ze||e[104]!==Qe||e[105]!==$e||e[106]!==et||e[107]!==tt||e[108]!==nt?(rt=(0,J.jsxs)(`div`,{className:`space-y-6`,children:[Me,Pe,Ie,$,Ze,Qe,$e,et,tt,nt]}),e[99]=Me,e[100]=Pe,e[101]=Ie,e[102]=$,e[103]=Ze,e[104]=Qe,e[105]=$e,e[106]=et,e[107]=tt,e[108]=nt,e[109]=rt):rt=e[109];let it;e[110]===Symbol.for(`react.memo_cache_sentinel`)?(it=e=>{e||(D(!1),M(``))},e[110]=it):it=e[110];let at;e[111]===Symbol.for(`react.memo_cache_sentinel`)?(at=(0,J.jsx)(le,{children:`Modify Instance`}),e[111]=at):at=e[111];let ot;e[112]===l.InstanceId?ot=e[113]:(ot=(0,J.jsxs)(pe,{children:[at,(0,J.jsxs)(se,{children:[`Select a new instance type for "`,l.InstanceId,`". The instance must be stopped to modify its attributes.`]})]}),e[112]=l.InstanceId,e[113]=ot);let st;e[114]===Symbol.for(`react.memo_cache_sentinel`)?(st=(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),e[114]=st):st=e[114];let ct;e[115]===h.InstanceTypes?ct=e[116]:(ct=h.InstanceTypes??[],e[115]=h.InstanceTypes,e[116]=ct);let lt;e[117]!==j||e[118]!==ct?(lt=(0,J.jsxs)(ae,{children:[st,(0,J.jsx)(ve,{className:`w-full`,id:`instanceType`,instanceTypes:ct,onValueChange:M,value:j})]}),e[117]=j,e[118]=ct,e[119]=lt):lt=e[119];let ut;e[120]===Symbol.for(`react.memo_cache_sentinel`)?(ut=(0,J.jsx)(fe,{children:`Cancel`}),e[120]=ut):ut=e[120];let dt=b.isPending||!j||j===l.InstanceType,ft=b.isPending?`Saving…`:`Save Changes`,pt;e[121]!==xe||e[122]!==dt||e[123]!==ft?(pt=(0,J.jsxs)(de,{children:[ut,(0,J.jsx)(ue,{disabled:dt,onClick:xe,children:ft})]}),e[121]=xe,e[122]=dt,e[123]=ft,e[124]=pt):pt=e[124];let mt;e[125]!==ot||e[126]!==lt||e[127]!==pt?(mt=(0,J.jsxs)(ce,{children:[ot,lt,pt]}),e[125]=ot,e[126]=lt,e[127]=pt,e[128]=mt):mt=e[128];let ht;e[129]!==C||e[130]!==mt?(ht=(0,J.jsx)(me,{onOpenChange:it,open:C,children:mt}),e[129]=C,e[130]=mt,e[131]=ht):ht=e[131];let gt;e[132]!==l.InstanceId||e[133]!==L?(gt=(0,J.jsx)(De,{instanceId:l.InstanceId,onOpenChange:ee,open:L}),e[132]=l.InstanceId,e[133]=L,e[134]=gt):gt=e[134];let _t;return e[135]!==W||e[136]!==rt||e[137]!==ht||e[138]!==gt||e[139]!==U?(_t=(0,J.jsxs)(J.Fragment,{children:[we,U,W,rt,ht,gt]}),e[135]=W,e[136]=rt,e[137]=ht,e[138]=gt,e[139]=U,e[140]=_t):_t=e[140],_t}function Re(e){return(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Device Name`,value:e.DeviceName}),(0,J.jsx)(B,{label:`Volume ID`,value:e.Ebs?.VolumeId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:e.Ebs.VolumeId},to:`/ec2/describe-volumes/$id`,children:e.Ebs.VolumeId}):void 0}),(0,J.jsx)(B,{label:`Status`,value:e.Ebs?.Status}),(0,J.jsx)(B,{label:`Attach Time`,value:s(e.Ebs?.AttachTime)}),(0,J.jsx)(B,{label:`Delete on Termination`,value:e.Ebs?.DeleteOnTermination?`Yes`:`No`})]},e.DeviceName)}function ze(e){return e.GroupName}export{Le as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{an as s,sn as c}from"./cluster-config-DkOiY8HH.js";import{t as l}from"./createLucideIcon-BQgzNCBR.js";import{t as u}from"./back-link-wsXUoJ12.js";import{t as d}from"./check-BO7W8OSs.js";import{c as f,i as p,n as m,s as h,t as g}from"./select-Cn66OoPn.js";import{t as _}from"./copy-CamWo-pg.js";import{t as v}from"./network-RAx0KOlf.js";import{t as y}from"./rotate-cw-FTUcK_f-.js";import{t as b}from"./trash-DVab4pEz.js";import{t as x}from"./triangle-alert-DcjzeKLg.js";import{t as S}from"./button-qf9lLJ2x.js";import{t as C}from"./input-D3aUBtS6.js";import{n as w}from"./admin-context-C7nTf-ee.js";import{a as T,c as E,i as D,s as O}from"./ec2-DYgBhYCJ.js";import{J as k,K as A,W as j,Z as M,d as N,i as P,it as F,nt as I,rt as L}from"./ec2-Csn1kwZ8.js";import{f as ee}from"./iam-DmtL7LFe.js";import{t as te}from"./_id-Dt-3JI-F.js";import{t as ne}from"./page-heading-vksh_67w.js";import{o as re}from"./admin-JuLSsFKq.js";import{t as R}from"./error-banner-DeOeVBKS.js";import{s as ie,t as ae}from"./field-CS-ql6du.js";import{t as oe}from"./textarea-DV1UO8hv.js";import{a as se,i as ce,l as le,n as ue,o as de,r as fe,s as pe,t as me}from"./alert-dialog-jxylPXwR.js";import{t as he}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as z,t as B}from"./detail-row-DNBRlVeK.js";import{t as ge}from"./state-badge-pn00UE1d.js";import{t as V}from"./use-copy-to-clipboard-DjiD3qo6.js";import{t as _e}from"./ami-details-CXhu-MrF.js";import{t as ve}from"./gpu-instance-type-select-DMxBayBV.js";var H={name:`image-plus`,size:24,node:[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]};H.node;var ye=l(H),be={name:`info`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]};be.node;var xe=l(be),Se={name:`pause`,size:24,node:[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]};Se.node;var Ce=l(Se),we={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};we.node;var U=l(we),W={name:`settings-2`,size:24,node:[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]};W.node;var Te=l(W),G={name:`terminal`,size:24,node:[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]};G.node;var Ee=l(G),K=r(),q=t(n(),1),J=e();function De(e){let t=(0,K.c)(36),{instanceId:n,open:r,onOpenChange:i}=e,a=N(),[o,s]=(0,q.useState)(``),[c,l]=(0,q.useState)(``),[u,d]=(0,q.useState)(null),f;t[0]===i?f=t[1]:(f=function(e){e||(s(``),l(``),d(null)),i(e)},t[0]=i,t[1]=f);let p=f,m;t[2]!==a||t[3]!==c||t[4]!==o||t[5]!==n?(m=async function(){try{let e=await a.mutateAsync({instanceId:n,name:o,description:c||void 0});d(e.ImageId??null),s(``),l(``)}catch{}},t[2]=a,t[3]=c,t[4]=o,t[5]=n,t[6]=m):m=t[6];let h=m,g=u?`Image Created`:`Create Image (AMI)`,_;t[7]===g?_=t[8]:(_=(0,J.jsx)(le,{children:g}),t[7]=g,t[8]=_);let v=u?`Image "${u}" was created successfully.`:`Create an AMI from instance "${n}".`,y;t[9]===v?y=t[10]:(y=(0,J.jsx)(se,{children:v}),t[9]=v,t[10]=y);let b;t[11]!==_||t[12]!==y?(b=(0,J.jsxs)(pe,{children:[_,y]}),t[11]=_,t[12]=y,t[13]=b):b=t[13];let x;t[14]!==u||t[15]!==c||t[16]!==o?(x=!u&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(ae,{children:[(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`imageName`,children:`Name`})}),(0,J.jsx)(C,{id:`imageName`,onChange:e=>{s(e.target.value)},placeholder:`my-image`,value:o})]}),(0,J.jsxs)(ae,{children:[(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`imageDescription`,children:`Description`})}),(0,J.jsx)(oe,{id:`imageDescription`,onChange:e=>{l(e.target.value)},placeholder:`Optional description`,rows:2,value:c})]})]}),t[14]=u,t[15]=c,t[16]=o,t[17]=x):x=t[17];let S=u?`Close`:`Cancel`,w;t[18]===S?w=t[19]:(w=(0,J.jsx)(fe,{children:S}),t[18]=S,t[19]=w);let T;t[20]!==a||t[21]!==u||t[22]!==h||t[23]!==o?(T=!u&&(0,J.jsx)(ue,{disabled:a.isPending||!o.trim(),onClick:h,children:a.isPending?`Creating…`:`Create Image`}),t[20]=a,t[21]=u,t[22]=h,t[23]=o,t[24]=T):T=t[24];let E;t[25]!==w||t[26]!==T?(E=(0,J.jsxs)(de,{children:[w,T]}),t[25]=w,t[26]=T,t[27]=E):E=t[27];let D;t[28]!==E||t[29]!==b||t[30]!==x?(D=(0,J.jsxs)(ce,{children:[b,x,E]}),t[28]=E,t[29]=b,t[30]=x,t[31]=D):D=t[31];let O;return t[32]!==p||t[33]!==r||t[34]!==D?(O=(0,J.jsx)(me,{onOpenChange:p,open:r,children:D}),t[32]=p,t[33]=r,t[34]=D,t[35]=O):O=t[35],O}function Oe(e){let t=(0,K.c)(9),{gpus:n}=e;if(!n?.length)return null;let r=n.length===1?`GPU`:`GPUs (${n.length})`,i;t[0]===r?i=t[1]:(i=(0,J.jsx)(z.Header,{children:r}),t[0]=r,t[1]=i);let a;if(t[2]!==n){let e;t[4]===n.length?e=t[5]:(e=(e,t)=>(0,J.jsxs)(`div`,{className:`border-b last:border-b-0`,children:[n.length>1&&(0,J.jsxs)(`h3`,{className:`bg-muted/30 px-4 py-2 text-sm font-medium`,children:[`GPU `,t+1]}),(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Model`,value:e.model}),(0,J.jsx)(B,{label:`VRAM`,value:c(e.vram_mib)}),(0,J.jsx)(B,{label:`Attachment`,value:e.profile?`MIG slice`:`PCIe passthrough`}),e.profile&&(0,J.jsx)(B,{label:`Profile`,value:e.profile}),e.mdev_path&&(0,J.jsx)(B,{label:`Mdev path`,value:e.mdev_path}),e.pci_address&&(0,J.jsx)(B,{label:`PCI address`,value:e.pci_address})]})]},e.mdev_path??e.pci_address??`${e.model}-${t}`),t[4]=n.length,t[5]=e),a=n.map(e),t[2]=n,t[3]=a}else a=t[3];let o;return t[6]!==i||t[7]!==a?(o=(0,J.jsxs)(z,{children:[i,a]}),t[6]=i,t[7]=a,t[8]=o):o=t[8],o}function ke(e){let t=(0,K.c)(31),{instanceId:n}=e,r;t[0]===n?r=t[1]:(r=D(n),t[0]=n,t[1]=r);let{data:a}=i(r),{data:s}=i(ee),c=P(),l=j(),[u,d]=(0,q.useState)(``),p;t[2]===a?.IamInstanceProfileAssociations?p=t[3]:(p=a?.IamInstanceProfileAssociations?.find(X),t[2]=a?.IamInstanceProfileAssociations,t[3]=p);let _=p,v;t[4]===s?.InstanceProfiles?v=t[5]:(v=s?.InstanceProfiles??[],t[4]=s?.InstanceProfiles,t[5]=v);let y=v,b;t[6]!==c||t[7]!==n||t[8]!==u?(b=async()=>{u&&(await c.mutateAsync({instanceId:n,instanceProfileName:u}),d(``))},t[6]=c,t[7]=n,t[8]=u,t[9]=b):b=t[9];let x=b,C;t[10]!==_||t[11]!==l||t[12]!==n?(C=async()=>{_?.AssociationId&&await l.mutateAsync({associationId:_.AssociationId,instanceId:n})},t[10]=_,t[11]=l,t[12]=n,t[13]=C):C=t[13];let w=C,T;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,J.jsx)(z.Header,{children:`IAM Role`}),t[14]=T):T=t[14];let E;t[15]===c.error?E=t[16]:(E=c.error&&(0,J.jsx)(`div`,{className:`col-span-2`,children:(0,J.jsx)(R,{error:c.error,msg:`Failed to associate instance profile`})}),t[15]=c.error,t[16]=E);let O;t[17]===l.error?O=t[18]:(O=l.error&&(0,J.jsx)(`div`,{className:`col-span-2`,children:(0,J.jsx)(R,{error:l.error,msg:`Failed to disassociate instance profile`})}),t[17]=l.error,t[18]=O);let k;t[19]!==c.isPending||t[20]!==_||t[21]!==l.isPending||t[22]!==x||t[23]!==w||t[24]!==y||t[25]!==u?(k=_?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(B,{label:`Instance Profile ARN`,value:_.IamInstanceProfile?.Arn}),(0,J.jsx)(B,{label:`State`,value:(0,J.jsx)(ge,{state:_.State})}),(0,J.jsx)(`div`,{className:`col-span-2 flex justify-end`,children:(0,J.jsx)(S,{disabled:l.isPending,onClick:w,size:`sm`,variant:`destructive`,children:l.isPending?`Detaching…`:`Detach`})})]}):(0,J.jsxs)(`div`,{className:`col-span-2 space-y-3`,children:[(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No instance profile is associated. Associate one to flow role credentials to this instance via IMDS.`}),y.length>0?(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsxs)(g,{onValueChange:e=>{d(e??``)},value:u,children:[(0,J.jsx)(h,{className:`w-full`,children:(0,J.jsx)(f,{placeholder:`Select an instance profile`})}),(0,J.jsx)(m,{children:y.map(Y)})]}),(0,J.jsx)(S,{disabled:!u||c.isPending,onClick:x,size:`sm`,children:c.isPending?`Associating…`:`Associate`})]}):(0,J.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No instance profiles exist.`,` `,(0,J.jsx)(o,{className:`text-primary hover:underline`,to:`/iam/create-instance-profile`,children:`Create one`}),` `,`first.`]})]}),t[19]=c.isPending,t[20]=_,t[21]=l.isPending,t[22]=x,t[23]=w,t[24]=y,t[25]=u,t[26]=k):k=t[26];let A;return t[27]!==E||t[28]!==O||t[29]!==k?(A=(0,J.jsxs)(z,{children:[T,(0,J.jsxs)(z.Content,{children:[E,O,k]})]}),t[27]=E,t[28]=O,t[29]=k,t[30]=A):A=t[30],A}function Y(e){return(0,J.jsx)(p,{value:e.InstanceProfileName??``,children:e.InstanceProfileName},e.InstanceProfileName)}function X(e){return e.State===`associating`||e.State===`associated`}var Ae=new Set([`pending`,`stopping`,`shutting-down`,`terminated`]);function je(e){let t=(0,K.c)(43),{instanceId:n,state:r}=e,i=I(),a=L(),o=M(),s=F(),[c,l]=(0,q.useState)(!1),u=Ae.has(r??``),d;t[0]!==n||t[1]!==s?(d=()=>{s.mutate(n,{onSettled:()=>{l(!1)}})},t[0]=n,t[1]=s,t[2]=d):d=t[2];let f=d;if(u&&r!==`terminated`){let e;return t[3]===r?e=t[4]:(e=(0,J.jsx)(`div`,{className:`rounded-lg border bg-muted/50 p-4`,children:(0,J.jsxs)(`p`,{className:`text-center text-sm text-muted-foreground`,children:[`Instance is `,r,`. Actions will be available once the operation completes.`]})}),t[3]=r,t[4]=e),e}if(r===`terminated`){let e;return t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,J.jsx)(`div`,{className:`rounded-lg border bg-muted/50 p-4`,children:(0,J.jsx)(`p`,{className:`text-center text-sm text-muted-foreground`,children:`This instance has been terminated and cannot be managed.`})}),t[5]=e):e=t[5],e}let p;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,J.jsx)(`h2`,{className:`mb-4 font-semibold`,children:`Instance Actions`}),t[6]=p):p=t[6];let m;t[7]===i.error?m=t[8]:(m=i.error&&(0,J.jsx)(R,{error:i.error,msg:`Failed to start instance`}),t[7]=i.error,t[8]=m);let h;t[9]===a.error?h=t[10]:(h=a.error&&(0,J.jsx)(R,{error:a.error,msg:`Failed to stop instance`}),t[9]=a.error,t[10]=h);let g;t[11]===o.error?g=t[12]:(g=o.error&&(0,J.jsx)(R,{error:o.error,msg:`Failed to reboot instance`}),t[11]=o.error,t[12]=g);let _;t[13]===s.error?_=t[14]:(_=s.error&&(0,J.jsx)(R,{error:s.error,msg:`Failed to terminate instance`}),t[13]=s.error,t[14]=_);let v;t[15]!==n||t[16]!==i||t[17]!==r?(v=r===`stopped`&&(0,J.jsxs)(S,{disabled:i.isPending,onClick:()=>{i.mutate(n)},size:`sm`,variant:`default`,children:[(0,J.jsx)(U,{className:`size-4`}),i.isPending?`Starting`:`Start`]}),t[15]=n,t[16]=i,t[17]=r,t[18]=v):v=t[18];let x;t[19]!==n||t[20]!==o||t[21]!==r||t[22]!==a?(x=r===`running`&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(S,{disabled:a.isPending,onClick:()=>{a.mutate(n)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(Ce,{className:`size-4`}),a.isPending?`Stopping`:`Stop`]}),(0,J.jsxs)(S,{disabled:o.isPending,onClick:()=>{o.mutate(n)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(y,{className:`size-4`}),o.isPending?`Rebooting`:`Reboot`]})]}),t[19]=n,t[20]=o,t[21]=r,t[22]=a,t[23]=x):x=t[23];let C;t[24]!==r||t[25]!==s.isPending?(C=(r===`stopped`||r===`running`)&&(0,J.jsxs)(S,{disabled:s.isPending,onClick:()=>{l(!0)},size:`sm`,variant:`destructive`,children:[(0,J.jsx)(b,{className:`size-4`}),s.isPending?`Terminating`:`Terminate`]}),t[24]=r,t[25]=s.isPending,t[26]=C):C=t[26];let w;t[27]!==v||t[28]!==x||t[29]!==C?(w=(0,J.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[v,x,C]}),t[27]=v,t[28]=x,t[29]=C,t[30]=w):w=t[30];let T=`Are you sure you want to terminate the instance "${n}"? This action cannot be undone.`,E;t[31]!==f||t[32]!==c||t[33]!==T||t[34]!==s.isPending?(E=(0,J.jsx)(he,{confirmLabel:`Terminate`,description:T,isPending:s.isPending,onConfirm:f,onOpenChange:l,open:c,pendingLabel:`Terminating…`,title:`Terminate Instance`}),t[31]=f,t[32]=c,t[33]=T,t[34]=s.isPending,t[35]=E):E=t[35];let D;return t[36]!==w||t[37]!==E||t[38]!==m||t[39]!==h||t[40]!==g||t[41]!==_?(D=(0,J.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[p,m,h,g,_,w,E]}),t[36]=w,t[37]=E,t[38]=m,t[39]=h,t[40]=g,t[41]=_,t[42]=D):D=t[42],D}var Z=[[`amazonlinux`,`ec2-user`],[`almalinux`,`almalinux`],[`oracle`,`cloud-user`],[`ubuntu`,`ubuntu`],[`debian`,`debian`],[`fedora`,`fedora`],[`centos`,`cloud-user`],[`alpine`,`alpine`],[`rocky`,`rocky`],[`amzn`,`ec2-user`],[`rhel`,`cloud-user`]];function Q(e){let t=new Set(`${e?.Name??``} ${e?.Description??``}`.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)),n=Z.find(([e])=>t.has(e));return n?{user:n[1],distro:n[0]}:{user:``}}function Me(e){return e?.PublicIpAddress?{address:e.PublicIpAddress,reachability:`public`}:e?.PrivateIpAddress?{address:e.PrivateIpAddress,reachability:`private`}:{address:``,reachability:`none`}}var Ne=`path/to/key.pem`;function Pe(e){return`ssh -i ${e.keyName?`path/to/${e.keyName}.pem`:Ne} ${e.user||``}@${e.address}`}function Fe(e){let t=(0,K.c)(49),{instance:n,image:r}=e,{copied:i,copy:a}=V(),o,s,c,l,u,f;if(t[0]!==r||t[1]!==n){u=Symbol.for(`react.early_return_sentinel`);bb0:{if({address:o,reachability:c}=Me(n),{user:f,distro:s}=Q(r),c===`none`){u=null;break bb0}l=Pe({keyName:n.KeyName,user:f,address:o})}t[0]=r,t[1]=n,t[2]=o,t[3]=s,t[4]=c,t[5]=l,t[6]=u,t[7]=f}else o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],f=t[7];if(u!==Symbol.for(`react.early_return_sentinel`))return u;let p=l,m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,J.jsx)(z.Header,{children:`Connect over SSH`}),t[8]=m):m=t[8];let h;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,J.jsx)(`span`,{className:`text-muted-foreground select-none`,children:`$`}),t[9]=h):h=t[9];let g;t[10]===p?g=t[11]:(g=(0,J.jsx)(`span`,{className:`flex-1 overflow-x-auto whitespace-nowrap text-foreground`,children:p}),t[10]=p,t[11]=g);let y;t[12]!==p||t[13]!==a?(y=()=>{a(p)},t[12]=p,t[13]=a,t[14]=y):y=t[14];let b;t[15]===i?b=t[16]:(b=i?(0,J.jsx)(d,{className:`size-3.5 text-tactical-green`}):(0,J.jsx)(_,{className:`size-3.5`}),t[15]=i,t[16]=b);let S;t[17]!==y||t[18]!==b?(S=(0,J.jsx)(`button`,{"aria-label":`Copy SSH command`,className:`text-muted-foreground transition-colors hover:text-foreground`,onClick:y,type:`button`,children:b}),t[17]=y,t[18]=b,t[19]=S):S=t[19];let C;t[20]!==g||t[21]!==S?(C=(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-border bg-background px-3 py-2 font-mono text-xs`,children:[h,g,S]}),t[20]=g,t[21]=S,t[22]=C):C=t[22];let w;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Login user`}),t[23]=w):w=t[23];let T=f||`unknown — check the AMI`,E;t[24]===T?E=t[25]:(E=(0,J.jsxs)(`div`,{children:[w,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:T})]}),t[24]=T,t[25]=E);let D;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Address`}),t[26]=D):D=t[26];let O;t[27]===o?O=t[28]:(O=(0,J.jsxs)(`div`,{children:[D,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:o})]}),t[27]=o,t[28]=O);let k;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,J.jsx)(`dt`,{className:`text-muted-foreground`,children:`Key pair`}),t[29]=k):k=t[29];let A=n.KeyName??`none assigned`,j;t[30]===A?j=t[31]:(j=(0,J.jsxs)(`div`,{children:[k,(0,J.jsx)(`dd`,{className:`font-mono text-foreground`,children:A})]}),t[30]=A,t[31]=j);let M;t[32]!==E||t[33]!==O||t[34]!==j?(M=(0,J.jsxs)(`dl`,{className:`grid gap-x-6 gap-y-2 text-xs sm:grid-cols-3`,children:[E,O,j]}),t[32]=E,t[33]=O,t[34]=j,t[35]=M):M=t[35];let N;t[36]!==o||t[37]!==c?(N=c===`private`&&(0,J.jsxs)($,{tone:`amber`,icon:v,children:[`This instance has no public IP address, so`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:o}),` is reachable only from inside the VPC. Run the command from another instance in the same VPC whose security group allows it, or associate an Elastic IP with this one.`]}),t[36]=o,t[37]=c,t[38]=N):N=t[38];let P;t[39]!==s||t[40]!==f?(P=f?(0,J.jsxs)($,{tone:`muted`,icon:xe,children:[(0,J.jsx)(`span`,{className:`font-mono`,children:f}),` is the default login user for `,s,` images. It comes from the AMI itself — Spinifex does not create or rename the account — so an image built with a different default will want a different name here.`]}):(0,J.jsxs)($,{tone:`amber`,icon:x,children:[`The login user could not be determined from this AMI. Every distribution ships its own default —`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`ubuntu`}),`,`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`debian`}),`,`,` `,(0,J.jsx)(`span`,{className:`font-mono`,children:`cloud-user`}),` on Oracle Linux and RHEL — so check the image's documentation before connecting.`]}),t[39]=s,t[40]=f,t[41]=P):P=t[41];let F;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,J.jsx)(`em`,{children:`you`}),t[42]=F):F=t[42];let I;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,J.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Spinifex stores only the public half of a key pair, so the path above is where `,F,` saved the private key when you created it. It must be readable only by you (`,(0,J.jsx)(`span`,{className:`font-mono`,children:`chmod 600`}),`), and the instance's security group must allow TCP 22 from wherever you are connecting.`]}),t[43]=I):I=t[43];let L;return t[44]!==M||t[45]!==N||t[46]!==P||t[47]!==C?(L=(0,J.jsxs)(z,{children:[m,(0,J.jsxs)(`div`,{className:`space-y-4 p-4`,children:[C,M,N,P,I]})]}),t[44]=M,t[45]=N,t[46]=P,t[47]=C,t[48]=L):L=t[48],L}var Ie={amber:`border-tactical-amber/40 bg-tactical-amber/5 text-tactical-amber`,muted:`border-border bg-muted/40 text-muted-foreground`};function $(e){let t=(0,K.c)(8),{tone:n,icon:r,children:i}=e,a=`flex items-start gap-2 rounded-md border p-3 ${Ie[n]}`,o;t[0]===r?o=t[1]:(o=(0,J.jsx)(r,{className:`mt-0.5 size-3.5 shrink-0`}),t[0]=r,t[1]=o);let s;t[2]===i?s=t[3]:(s=(0,J.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:i}),t[2]=i,t[3]=s);let c;return t[4]!==a||t[5]!==o||t[6]!==s?(c=(0,J.jsxs)(`div`,{className:a,children:[o,s]}),t[4]=a,t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function Le(){let e=(0,K.c)(141),{id:t}=te.useParams(),{isAdmin:n}=w(),r;e[0]===t?r=e[1]:(r=O(t),e[0]=t,e[1]=r);let{data:c}=a(r),l=c.Reservations?.[0]?.Instances?.[0],d=l?.ImageId,f;e[2]===d?f=e[3]:(f=T(d),e[2]=d,e[3]=f);let{data:p}=a(f),m=p?.Images?.[0],{data:h}=a(E),g;e[4]===n?g=e[5]:(g={...re,enabled:n,refetchInterval:5e3},e[4]=n,e[5]=g);let{data:_}=i(g),v;e[6]!==t||e[7]!==_?.vms?(v=_?.vms?.find(e=>e.instance_id===t),e[6]=t,e[7]=_?.vms,e[8]=v):v=e[8];let y=v,b=k(),x=A(),[C,D]=(0,q.useState)(!1),[j,M]=(0,q.useState)(``),[N,P]=(0,q.useState)(!1),[F,I]=(0,q.useState)(null),[L,ee]=(0,q.useState)(!1);if(!l?.InstanceId){let t;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(u,{to:`/ec2/describe-instances`,children:`Back to instances`}),(0,J.jsx)(`p`,{className:`text-muted-foreground`,children:`Instance not found.`})]}),e[9]=t):t=e[9],t}let oe;e[10]===l.LaunchTime?oe=e[11]:(oe=s(l.LaunchTime),e[10]=l.LaunchTime,e[11]=oe);let he=oe,V=l.State?.Name===`running`,H=l.State?.Name===`stopped`,be;e[12]!==t||e[13]!==b||e[14]!==j?(be=async function(){try{await b.mutateAsync({instanceId:t,instanceType:j}),D(!1),M(``)}catch{}},e[12]=t,e[13]=b,e[14]=j,e[15]=be):be=e[15];let xe=be,Se;e[16]!==x||e[17]!==t?(Se=async function(){try{let e=await x.mutateAsync(t),n=e.Output?atob(e.Output):`(no output)`;I(n),P(!0)}catch{}},e[16]=x,e[17]=t,e[18]=Se):Se=e[18];let Ce=Se,we;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,J.jsx)(u,{to:`/ec2/describe-instances`,children:`Back to instances`}),e[19]=we):we=e[19];let U;e[20]===b.error?U=e[21]:(U=b.error&&(0,J.jsx)(R,{error:b.error,msg:`Failed to modify instance`}),e[20]=b.error,e[21]=U);let W;e[22]===x.error?W=e[23]:(W=x.error&&(0,J.jsx)(R,{error:x.error,msg:`Failed to get console output`}),e[22]=x.error,e[23]=W);let G;e[24]!==x.isPending||e[25]!==Ce||e[26]!==V?(G=V&&(0,J.jsxs)(S,{disabled:x.isPending,onClick:Ce,size:`sm`,variant:`outline`,children:[(0,J.jsx)(Ee,{className:`size-4`}),x.isPending?`Fetching…`:`View Console`]}),e[24]=x.isPending,e[25]=Ce,e[26]=V,e[27]=G):G=e[27];let Y;e[28]!==V||e[29]!==H?(Y=(V||H)&&(0,J.jsxs)(S,{onClick:()=>{ee(!0)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(ye,{className:`size-4`}),`Create Image`]}),e[28]=V,e[29]=H,e[30]=Y):Y=e[30];let X;e[31]!==l.InstanceType||e[32]!==H?(X=H&&(0,J.jsxs)(S,{onClick:()=>{M(l.InstanceType??``),D(!0)},size:`sm`,variant:`outline`,children:[(0,J.jsx)(Te,{className:`size-4`}),`Modify Instance`]}),e[31]=l.InstanceType,e[32]=H,e[33]=X):X=e[33];let Ae=l.State?.Name,Z;e[34]===Ae?Z=e[35]:(Z=(0,J.jsx)(ge,{state:Ae}),e[34]=Ae,e[35]=Z);let Q;e[36]!==G||e[37]!==Y||e[38]!==X||e[39]!==Z?(Q=(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[G,Y,X,Z]}),e[36]=G,e[37]=Y,e[38]=X,e[39]=Z,e[40]=Q):Q=e[40];let Me;e[41]!==l.InstanceId||e[42]!==Q?(Me=(0,J.jsx)(ne,{actions:Q,subtitle:`Instance Details`,title:l.InstanceId}),e[41]=l.InstanceId,e[42]=Q,e[43]=Me):Me=e[43];let Ne=l.State?.Name,Pe;e[44]!==l.InstanceId||e[45]!==Ne?(Pe=(0,J.jsx)(je,{instanceId:l.InstanceId,state:Ne}),e[44]=l.InstanceId,e[45]=Ne,e[46]=Pe):Pe=e[46];let Ie;e[47]!==m||e[48]!==l||e[49]!==V?(Ie=V&&(0,J.jsx)(Fe,{image:m,instance:l}),e[47]=m,e[48]=l,e[49]=V,e[50]=Ie):Ie=e[50];let $;e[51]!==F||e[52]!==N?($=N&&F!==null&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[`Console Output`,(0,J.jsx)(S,{onClick:()=>{P(!1),I(null)},size:`sm`,variant:`ghost`,children:`Hide`})]})}),(0,J.jsx)(`div`,{className:`p-4`,children:(0,J.jsx)(`pre`,{className:`max-h-96 overflow-y-auto rounded bg-muted p-3 font-mono text-xs whitespace-pre-wrap`,children:F})})]}),e[51]=F,e[52]=N,e[53]=$):$=e[53];let Le;e[54]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,J.jsx)(z.Header,{children:`Instance Information`}),e[54]=Le):Le=e[54];let Be;e[55]===l.InstanceId?Be=e[56]:(Be=(0,J.jsx)(B,{label:`Instance ID`,value:l.InstanceId}),e[55]=l.InstanceId,e[56]=Be);let Ve;e[57]===l.InstanceType?Ve=e[58]:(Ve=(0,J.jsx)(B,{label:`Instance Type`,value:l.InstanceType}),e[57]=l.InstanceType,e[58]=Ve);let He=l.State?.Name,Ue;e[59]===He?Ue=e[60]:(Ue=(0,J.jsx)(B,{label:`Instance State`,value:He}),e[59]=He,e[60]=Ue);let We;e[61]===l.State?.Code?We=e[62]:(We=l.State?.Code?.toString(),e[61]=l.State?.Code,e[62]=We);let Ge;e[63]===We?Ge=e[64]:(Ge=(0,J.jsx)(B,{label:`State Code`,value:We}),e[63]=We,e[64]=Ge);let Ke;e[65]===he?Ke=e[66]:(Ke=(0,J.jsx)(B,{label:`Launch Time`,value:he}),e[65]=he,e[66]=Ke);let qe=l.Placement?.AvailabilityZone,Je;e[67]===qe?Je=e[68]:(Je=(0,J.jsx)(B,{label:`Availability Zone`,value:qe}),e[67]=qe,e[68]=Je);let Ye;e[69]===l.Placement?Ye=e[70]:(Ye=l.Placement?.GroupName?(0,J.jsx)(o,{className:`text-primary hover:underline`,to:`/ec2/describe-placement-groups`,children:l.Placement.GroupName}):void 0,e[69]=l.Placement,e[70]=Ye);let Xe;e[71]===Ye?Xe=e[72]:(Xe=(0,J.jsx)(B,{label:`Placement Group`,value:Ye}),e[71]=Ye,e[72]=Xe);let Ze;e[73]!==Be||e[74]!==Ve||e[75]!==Ue||e[76]!==Ge||e[77]!==Ke||e[78]!==Je||e[79]!==Xe?(Ze=(0,J.jsxs)(z,{children:[Le,(0,J.jsxs)(z.Content,{children:[Be,Ve,Ue,Ge,Ke,Je,Xe]})]}),e[73]=Be,e[74]=Ve,e[75]=Ue,e[76]=Ge,e[77]=Ke,e[78]=Je,e[79]=Xe,e[80]=Ze):Ze=e[80];let Qe;e[81]!==l.KeyName||e[82]!==l.PrivateDnsName||e[83]!==l.PrivateIpAddress||e[84]!==l.PublicDnsName||e[85]!==l.PublicIpAddress||e[86]!==l.SecurityGroups||e[87]!==l.SubnetId||e[88]!==l.VpcId?(Qe=(l.PrivateIpAddress||l.PublicIpAddress||l.VpcId||l.SubnetId||l.SecurityGroups&&l.SecurityGroups.length>0)&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:`Network & Security`}),(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Private IP Address`,value:l.PrivateIpAddress}),(0,J.jsx)(B,{label:`Public IP Address`,value:l.PublicIpAddress}),(0,J.jsx)(B,{label:`Private DNS`,value:l.PrivateDnsName}),(0,J.jsx)(B,{label:`Public DNS`,value:l.PublicDnsName}),(0,J.jsx)(B,{label:`VPC ID`,value:l.VpcId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:l.VpcId},to:`/ec2/describe-vpcs/$id`,children:l.VpcId}):void 0}),(0,J.jsx)(B,{label:`Subnet ID`,value:l.SubnetId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:l.SubnetId},to:`/ec2/describe-subnets/$id`,children:l.SubnetId}):void 0}),(0,J.jsx)(B,{label:`Key Name`,value:l.KeyName}),(0,J.jsx)(B,{label:`Security Groups`,value:l.SecurityGroups?.map(ze).join(`, `)})]})]}),e[81]=l.KeyName,e[82]=l.PrivateDnsName,e[83]=l.PrivateIpAddress,e[84]=l.PublicDnsName,e[85]=l.PublicIpAddress,e[86]=l.SecurityGroups,e[87]=l.SubnetId,e[88]=l.VpcId,e[89]=Qe):Qe=e[89];let $e;e[90]===l.InstanceId?$e=e[91]:($e=(0,J.jsx)(ke,{instanceId:l.InstanceId}),e[90]=l.InstanceId,e[91]=$e);let et;e[92]!==n||e[93]!==y?.gpus?(et=n&&(0,J.jsx)(Oe,{gpus:y?.gpus}),e[92]=n,e[93]=y?.gpus,e[94]=et):et=e[94];let tt;e[95]===l.BlockDeviceMappings?tt=e[96]:(tt=l.BlockDeviceMappings&&l.BlockDeviceMappings.length>0&&(0,J.jsxs)(z,{children:[(0,J.jsx)(z.Header,{children:`Block Device Mappings`}),l.BlockDeviceMappings.map(Re)]}),e[95]=l.BlockDeviceMappings,e[96]=tt);let nt;e[97]===m?nt=e[98]:(nt=m&&(0,J.jsx)(_e,{image:m}),e[97]=m,e[98]=nt);let rt;e[99]!==Me||e[100]!==Pe||e[101]!==Ie||e[102]!==$||e[103]!==Ze||e[104]!==Qe||e[105]!==$e||e[106]!==et||e[107]!==tt||e[108]!==nt?(rt=(0,J.jsxs)(`div`,{className:`space-y-6`,children:[Me,Pe,Ie,$,Ze,Qe,$e,et,tt,nt]}),e[99]=Me,e[100]=Pe,e[101]=Ie,e[102]=$,e[103]=Ze,e[104]=Qe,e[105]=$e,e[106]=et,e[107]=tt,e[108]=nt,e[109]=rt):rt=e[109];let it;e[110]===Symbol.for(`react.memo_cache_sentinel`)?(it=e=>{e||(D(!1),M(``))},e[110]=it):it=e[110];let at;e[111]===Symbol.for(`react.memo_cache_sentinel`)?(at=(0,J.jsx)(le,{children:`Modify Instance`}),e[111]=at):at=e[111];let ot;e[112]===l.InstanceId?ot=e[113]:(ot=(0,J.jsxs)(pe,{children:[at,(0,J.jsxs)(se,{children:[`Select a new instance type for "`,l.InstanceId,`". The instance must be stopped to modify its attributes.`]})]}),e[112]=l.InstanceId,e[113]=ot);let st;e[114]===Symbol.for(`react.memo_cache_sentinel`)?(st=(0,J.jsx)(ie,{children:(0,J.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),e[114]=st):st=e[114];let ct;e[115]===h.InstanceTypes?ct=e[116]:(ct=h.InstanceTypes??[],e[115]=h.InstanceTypes,e[116]=ct);let lt;e[117]!==j||e[118]!==ct?(lt=(0,J.jsxs)(ae,{children:[st,(0,J.jsx)(ve,{className:`w-full`,id:`instanceType`,instanceTypes:ct,onValueChange:M,value:j})]}),e[117]=j,e[118]=ct,e[119]=lt):lt=e[119];let ut;e[120]===Symbol.for(`react.memo_cache_sentinel`)?(ut=(0,J.jsx)(fe,{children:`Cancel`}),e[120]=ut):ut=e[120];let dt=b.isPending||!j||j===l.InstanceType,ft=b.isPending?`Saving…`:`Save Changes`,pt;e[121]!==xe||e[122]!==dt||e[123]!==ft?(pt=(0,J.jsxs)(de,{children:[ut,(0,J.jsx)(ue,{disabled:dt,onClick:xe,children:ft})]}),e[121]=xe,e[122]=dt,e[123]=ft,e[124]=pt):pt=e[124];let mt;e[125]!==ot||e[126]!==lt||e[127]!==pt?(mt=(0,J.jsxs)(ce,{children:[ot,lt,pt]}),e[125]=ot,e[126]=lt,e[127]=pt,e[128]=mt):mt=e[128];let ht;e[129]!==C||e[130]!==mt?(ht=(0,J.jsx)(me,{onOpenChange:it,open:C,children:mt}),e[129]=C,e[130]=mt,e[131]=ht):ht=e[131];let gt;e[132]!==l.InstanceId||e[133]!==L?(gt=(0,J.jsx)(De,{instanceId:l.InstanceId,onOpenChange:ee,open:L}),e[132]=l.InstanceId,e[133]=L,e[134]=gt):gt=e[134];let _t;return e[135]!==W||e[136]!==rt||e[137]!==ht||e[138]!==gt||e[139]!==U?(_t=(0,J.jsxs)(J.Fragment,{children:[we,U,W,rt,ht,gt]}),e[135]=W,e[136]=rt,e[137]=ht,e[138]=gt,e[139]=U,e[140]=_t):_t=e[140],_t}function Re(e){return(0,J.jsxs)(z.Content,{children:[(0,J.jsx)(B,{label:`Device Name`,value:e.DeviceName}),(0,J.jsx)(B,{label:`Volume ID`,value:e.Ebs?.VolumeId?(0,J.jsx)(o,{className:`text-primary hover:underline`,params:{id:e.Ebs.VolumeId},to:`/ec2/describe-volumes/$id`,children:e.Ebs.VolumeId}):void 0}),(0,J.jsx)(B,{label:`Status`,value:e.Ebs?.Status}),(0,J.jsx)(B,{label:`Attach Time`,value:s(e.Ebs?.AttachTime)}),(0,J.jsx)(B,{label:`Delete on Termination`,value:e.Ebs?.DeleteOnTermination?`Yes`:`No`})]},e.DeviceName)}function ze(e){return e.GroupName}export{Le as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DVMhXCwR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DVMhXCwR.js deleted file mode 100644 index 8852a295e..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DVMhXCwR.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-a6H3d4Xw.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{D as r}from"./ec2-CWEplLq4.js";var i=e(`/_auth/ec2/(subnet)/describe-subnets/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | Subnet | Mulga`}]}),component:t(()=>n(()=>import(`./_id-a6H3d4Xw.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-a6H3d4Xw.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DZbN2hXo.js similarity index 80% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-a6H3d4Xw.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DZbN2hXo.js index ca8c47c2e..64f44a515 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-a6H3d4Xw.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DZbN2hXo.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{sn as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{D as u}from"./ec2-CWEplLq4.js";import{L as d}from"./ec2-Ctto2xjU.js";import{t as f}from"./_id-DVMhXCwR.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-D1Z6q_OA.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),x=n.Subnets?.[0],S=d(),[C,w]=(0,y.useState)(!1),T=async()=>{try{await S.mutateAsync(e),t({to:`/ec2/describe-subnets`})}finally{w(!1)}};if(!x?.SubnetId)return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`Subnet not found.`})]});let E=o(x.Tags);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),S.error&&(0,b.jsx)(m,{error:S.error,msg:`Failed to delete subnet`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(l,{onClick:()=>{w(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(c,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:x.State})]}),subtitle:`Subnet Details`,title:E?`${x.SubnetId} (${E})`:x.SubnetId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Subnet Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Subnet ID`,value:x.SubnetId}),(0,b.jsx)(_,{label:`VPC ID`,value:x.VpcId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:x.VpcId},to:`/ec2/describe-vpcs/$id`,children:x.VpcId}):`—`}),(0,b.jsx)(_,{label:`State`,value:x.State}),(0,b.jsx)(_,{label:`CIDR Block`,value:x.CidrBlock}),(0,b.jsx)(_,{label:`Availability Zone`,value:x.AvailabilityZone}),(0,b.jsx)(_,{label:`Available IP Count`,value:x.AvailableIpAddressCount?.toString()}),(0,b.jsx)(_,{label:`Map Public IP on Launch`,value:x.MapPublicIpOnLaunch?`Yes`:`No`}),(0,b.jsx)(_,{label:`Default for AZ`,value:x.DefaultForAz?`Yes`:`No`})]})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the subnet "${x.SubnetId}"? This action cannot be undone.`,isPending:S.isPending,onConfirm:T,onOpenChange:w,open:C,title:`Delete Subnet`})]})}export{x as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{cn as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{D as u}from"./ec2-DYgBhYCJ.js";import{L as d}from"./ec2-Csn1kwZ8.js";import{t as f}from"./_id-98ZkQ3qn.js";import{t as p}from"./page-heading-vksh_67w.js";import{t as m}from"./error-banner-DeOeVBKS.js";import{t as h}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as g,t as _}from"./detail-row-DNBRlVeK.js";import{t as v}from"./state-badge-pn00UE1d.js";var y=t(n()),b=e();function x(){let{id:e}=f.useParams(),t=a(),{data:n}=r(u(e)),x=n.Subnets?.[0],S=d(),[C,w]=(0,y.useState)(!1),T=async()=>{try{await S.mutateAsync(e),t({to:`/ec2/describe-subnets`})}finally{w(!1)}};if(!x?.SubnetId)return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`Subnet not found.`})]});let E=o(x.Tags);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),S.error&&(0,b.jsx)(m,{error:S.error,msg:`Failed to delete subnet`}),(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(p,{actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(l,{onClick:()=>{w(!0)},size:`sm`,variant:`destructive`,children:[(0,b.jsx)(c,{className:`size-4`}),`Delete`]}),(0,b.jsx)(v,{state:x.State})]}),subtitle:`Subnet Details`,title:E?`${x.SubnetId} (${E})`:x.SubnetId}),(0,b.jsxs)(g,{children:[(0,b.jsx)(g.Header,{children:`Subnet Information`}),(0,b.jsxs)(g.Content,{children:[(0,b.jsx)(_,{label:`Subnet ID`,value:x.SubnetId}),(0,b.jsx)(_,{label:`VPC ID`,value:x.VpcId?(0,b.jsx)(i,{className:`text-primary hover:underline`,params:{id:x.VpcId},to:`/ec2/describe-vpcs/$id`,children:x.VpcId}):`—`}),(0,b.jsx)(_,{label:`State`,value:x.State}),(0,b.jsx)(_,{label:`CIDR Block`,value:x.CidrBlock}),(0,b.jsx)(_,{label:`Availability Zone`,value:x.AvailabilityZone}),(0,b.jsx)(_,{label:`Available IP Count`,value:x.AvailableIpAddressCount?.toString()}),(0,b.jsx)(_,{label:`Map Public IP on Launch`,value:x.MapPublicIpOnLaunch?`Yes`:`No`}),(0,b.jsx)(_,{label:`Default for AZ`,value:x.DefaultForAz?`Yes`:`No`})]})]})]}),(0,b.jsx)(h,{description:`Are you sure you want to delete the subnet "${x.SubnetId}"? This action cannot be undone.`,isPending:S.isPending,onConfirm:T,onOpenChange:w,open:C,title:`Delete Subnet`})]})}export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_-BlrQG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_-BlrQG.js new file mode 100644 index 000000000..d288dfeb3 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_-BlrQG.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-BITDLGQb.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/camera-bmANKZ8M.js","assets/pencil-BhhTGjjd.js","assets/cli-command-panel-DavMY-tN.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/copy-CamWo-pg.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/rds-DIuGt87z.js","assets/rds-DbPUva_R.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-Ca8CaJkU.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/tabs-BMSqRmVw.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-DFjvW5uT.js","assets/select-Cn66OoPn.js","assets/usePositioner-BZ4WwVxL.js","assets/create-db-snapshot-dialog-5YPk6G0l.js","assets/tags-field-array-Bjg8Nmui.js","assets/plus-BodhJT2v.js","assets/delete-db-snapshot-dialog-elwW83vt.js","assets/rds-delete-dialog-BWwoVrYv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/rds-events-panel-BwYPSAd5.js","assets/rds-tags-tab-cQPAmoTz.js","assets/tags-editor-1LzJEWry.js","assets/delete-db-instance-dialog-lxcaswKe.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{c as i,g as a,n as o,s,t as c}from"./rds-Ca8CaJkU.js";var l=e(`/_auth/rds/(db-instances)/describe-db-instances/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id),[l]=await Promise.all([e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...i(r),staleTime:`static`}),e.queryClient.query({...c(r),staleTime:`static`})]),u=l.DBInstances?.[0]?.DBInstanceArn??``;await e.queryClient.query({...a(u),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-BITDLGQb.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66])),`component`)});export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DS2Njkyk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_0Cqrul.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DS2Njkyk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_0Cqrul.js index f9e04bcb3..6e7c474aa 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DS2Njkyk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-D_0Cqrul.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./link-Dhy4xOXd.js";import{t as ne}from"./useNavigate-BH3pQKLF.js";import{in as re,ln as i}from"./cluster-config-xw_Q7X1e.js";import{t as ie}from"./back-link-CjKy1JE5.js";import{t as ae}from"./trash-DVab4pEz.js";import{t as oe}from"./button-BarTr35m.js";import{a as se,d as ce,l as le}from"./rds-CE3126Ga.js";import{i as ue,p as de}from"./rds-CyiqRExv.js";import{t as fe}from"./_id-Oh4JEFTn.js";import{t as pe}from"./page-heading-vksh_67w.js";import{n as a,t as o}from"./detail-row-DNBRlVeK.js";import{t as me}from"./state-badge-D1Z6q_OA.js";import{i as he,n as ge,r as _e,t as ve}from"./tabs-t6sDAEVZ.js";import{t as ye}from"./delete-db-snapshot-dialog-D3b3mehr.js";import{t as be}from"./rds-events-panel-Di-44bfP.js";import{t as xe}from"./rds-tags-tab-CD2X7nDN.js";var Se=r(),Ce=t(n(),1),s=e();function c(e){let t=(0,Se.c)(114),{dbSnapshotIdentifier:n}=e,r=ne(),i;t[0]===n?i=t[1]:(i=ue(n),t[0]=n,t[1]=i);let{data:fe}=ee(i),c=fe.DBSnapshots?.[0],l=c?.DBSnapshotArn??``,we;t[2]===n?we=t[3]:(we=de(n),t[2]=n,t[3]=we);let{data:Te}=ee(we),[Ee,De]=(0,Ce.useState)(!1);if(!c?.DBSnapshotIdentifier){let e;return t[4]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(ie,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,s.jsx)(`p`,{className:`text-muted-foreground`,children:`DB snapshot not found.`})]}),t[4]=e):e=t[4],e}let u=c.Status,d=c.SnapshotType,Oe=d===se,f=c.DBInstanceIdentifier??``,ke;t[5]===Te.Events?ke=t[6]:(ke=Te.Events??[],t[5]=Te.Events,t[6]=ke);let Ae=ke,je;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,s.jsx)(ie,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),t[7]=je):je=t[7];let Me;t[8]===u?Me=t[9]:(Me=ce(u),t[8]=u,t[9]=Me);let Ne=!Me,p;t[10]!==n||t[11]!==r?(p=async()=>{await r({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:n}})},t[10]=n,t[11]=r,t[12]=p):p=t[12];let m;t[13]!==Ne||t[14]!==p?(m=(0,s.jsx)(oe,{disabled:Ne,onClick:p,size:`sm`,variant:`outline`,children:`Restore`}),t[13]=Ne,t[14]=p,t[15]=m):m=t[15];let h;t[16]!==d||t[17]!==u?(h=le(u,d),t[16]=d,t[17]=u,t[18]=h):h=t[18];let Pe=!h,g;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{De(!0)},t[19]=g):g=t[19];let _;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,s.jsx)(ae,{className:`size-4`}),t[20]=_):_=t[20];let v;t[21]===Pe?v=t[22]:(v=(0,s.jsxs)(oe,{disabled:Pe,onClick:g,size:`sm`,variant:`destructive`,children:[_,`Delete`]}),t[21]=Pe,t[22]=v);let y;t[23]!==v||t[24]!==m?(y=(0,s.jsxs)(`div`,{className:`flex gap-2`,children:[m,v]}),t[23]=v,t[24]=m,t[25]=y):y=t[25];let b;t[26]!==n||t[27]!==y?(b=(0,s.jsx)(pe,{actions:y,subtitle:`DB Snapshot`,title:n}),t[26]=n,t[27]=y,t[28]=b):b=t[28];let x;t[29]===u?x=t[30]:(x=(0,s.jsx)(me,{state:u}),t[29]=u,t[30]=x);let S;t[31]===Oe?S=t[32]:(S=Oe&&(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`An automated backup: it is deleted by the source instance's backup retention, not by hand.`}),t[31]=Oe,t[32]=S);let C;t[33]!==x||t[34]!==S?(C=(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[x,S]}),t[33]=x,t[34]=S,t[35]=C):C=t[35];let w;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,s.jsxs)(ge,{children:[(0,s.jsx)(he,{value:`overview`,children:`Overview`}),(0,s.jsx)(he,{value:`tags`,children:`Tags`}),(0,s.jsx)(he,{value:`events`,children:`Events`})]}),t[36]=w):w=t[36];let T;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,s.jsx)(a.Header,{children:`Snapshot`}),t[37]=T):T=t[37];let E;t[38]===d?E=t[39]:(E=(0,s.jsx)(o,{label:`Type`,value:d}),t[38]=d,t[39]=E);let D;t[40]===u?D=t[41]:(D=(0,s.jsx)(o,{label:`Status`,value:u}),t[40]=u,t[41]=D);let O;t[42]===c.SnapshotCreateTime?O=t[43]:(O=re(c.SnapshotCreateTime),t[42]=c.SnapshotCreateTime,t[43]=O);let k;t[44]===O?k=t[45]:(k=(0,s.jsx)(o,{label:`Created`,value:O}),t[44]=O,t[45]=k);let Fe=c.PercentProgress===void 0?void 0:`${c.PercentProgress}%`,A;t[46]===Fe?A=t[47]:(A=(0,s.jsx)(o,{label:`Progress`,value:Fe}),t[46]=Fe,t[47]=A);let j;t[48]===c.DBSnapshotArn?j=t[49]:(j=(0,s.jsx)(o,{label:`ARN`,value:c.DBSnapshotArn}),t[48]=c.DBSnapshotArn,t[49]=j);let M;t[50]!==E||t[51]!==D||t[52]!==k||t[53]!==A||t[54]!==j?(M=(0,s.jsxs)(a,{children:[T,(0,s.jsxs)(a.Content,{children:[E,D,k,A,j]})]}),t[50]=E,t[51]=D,t[52]=k,t[53]=A,t[54]=j,t[55]=M):M=t[55];let N;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,s.jsx)(a.Header,{children:`Source`}),t[56]=N):N=t[56];let P;t[57]===f?P=t[58]:(P=f===``?void 0:(0,s.jsx)(te,{className:`text-primary hover:underline`,params:{id:f},to:`/rds/describe-db-instances/$id`,children:f}),t[57]=f,t[58]=P);let F;t[59]===P?F=t[60]:(F=(0,s.jsx)(o,{label:`DB instance`,value:P}),t[59]=P,t[60]=F);let I;t[61]===c.Engine?I=t[62]:(I=(0,s.jsx)(o,{label:`Engine`,value:c.Engine}),t[61]=c.Engine,t[62]=I);let L;t[63]===c.EngineVersion?L=t[64]:(L=(0,s.jsx)(o,{label:`Version`,value:c.EngineVersion}),t[63]=c.EngineVersion,t[64]=L);let Ie=c.AllocatedStorage?`${c.AllocatedStorage} GiB`:void 0,R;t[65]===Ie?R=t[66]:(R=(0,s.jsx)(o,{label:`Allocated storage`,value:Ie}),t[65]=Ie,t[66]=R);let z;t[67]===c.StorageType?z=t[68]:(z=(0,s.jsx)(o,{label:`Storage type`,value:c.StorageType}),t[67]=c.StorageType,t[68]=z);let Le=c.Encrypted?`Encrypted — always on`:`Not encrypted`,B;t[69]===Le?B=t[70]:(B=(0,s.jsx)(o,{label:`Encryption`,value:Le}),t[69]=Le,t[70]=B);let V;t[71]===c.MasterUsername?V=t[72]:(V=(0,s.jsx)(o,{label:`Master username`,value:c.MasterUsername}),t[71]=c.MasterUsername,t[72]=V);let H;t[73]===c.Port?H=t[74]:(H=c.Port?.toString(),t[73]=c.Port,t[74]=H);let U;t[75]===H?U=t[76]:(U=(0,s.jsx)(o,{label:`Port`,value:H}),t[75]=H,t[76]=U);let W;t[77]===c.VpcId?W=t[78]:(W=(0,s.jsx)(o,{label:`VPC`,value:c.VpcId}),t[77]=c.VpcId,t[78]=W);let G;t[79]!==F||t[80]!==I||t[81]!==L||t[82]!==R||t[83]!==z||t[84]!==B||t[85]!==V||t[86]!==U||t[87]!==W?(G=(0,s.jsxs)(a,{children:[N,(0,s.jsxs)(a.Content,{children:[F,I,L,R,z,B,V,U,W]})]}),t[79]=F,t[80]=I,t[81]=L,t[82]=R,t[83]=z,t[84]=B,t[85]=V,t[86]=U,t[87]=W,t[88]=G):G=t[88];let Re;t[89]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,s.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A restore starts on this snapshot's datadir, so the engine, the master credentials and the initial database come with it and cannot be changed.`}),t[89]=Re):Re=t[89];let K;t[90]!==M||t[91]!==G?(K=(0,s.jsx)(_e,{value:`overview`,children:(0,s.jsxs)(`div`,{className:`space-y-4`,children:[M,G,Re]})}),t[90]=M,t[91]=G,t[92]=K):K=t[92];let q;t[93]===l?q=t[94]:(q=(0,s.jsx)(_e,{value:`tags`,children:(0,s.jsx)(xe,{arn:l})}),t[93]=l,t[94]=q);let J;t[95]===Ae?J=t[96]:(J=(0,s.jsx)(_e,{value:`events`,children:(0,s.jsx)(be,{events:Ae})}),t[95]=Ae,t[96]=J);let Y;t[97]!==K||t[98]!==q||t[99]!==J?(Y=(0,s.jsxs)(ve,{defaultValue:`overview`,children:[w,K,q,J]}),t[97]=K,t[98]=q,t[99]=J,t[100]=Y):Y=t[100];let X;t[101]!==b||t[102]!==C||t[103]!==Y?(X=(0,s.jsxs)(`div`,{className:`space-y-6`,children:[b,C,Y]}),t[101]=b,t[102]=C,t[103]=Y,t[104]=X):X=t[104];let Z;t[105]===r?Z=t[106]:(Z=async()=>{await r({to:`/rds/describe-db-snapshots`})},t[105]=r,t[106]=Z);let Q;t[107]!==n||t[108]!==Ee||t[109]!==Z?(Q=(0,s.jsx)(ye,{dbSnapshotIdentifier:n,onDeleted:Z,onOpenChange:De,open:Ee}),t[107]=n,t[108]=Ee,t[109]=Z,t[110]=Q):Q=t[110];let $;return t[111]!==X||t[112]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[je,X,Q]}),t[111]=X,t[112]=Q,t[113]=$):$=t[113],$}function l(){let e=(0,Se.c)(4),{id:t}=fe.useParams(),n;e[0]===t?n=e[1]:(n=i(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,s.jsx)(c,{dbSnapshotIdentifier:n}),e[2]=n,e[3]=r),r}export{l as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./link-BokOReHc.js";import{t as ne}from"./useNavigate-CTe_-BZA.js";import{an as re,un as i}from"./cluster-config-DkOiY8HH.js";import{t as ie}from"./back-link-wsXUoJ12.js";import{t as ae}from"./trash-DVab4pEz.js";import{t as oe}from"./button-qf9lLJ2x.js";import{a as se,d as ce,l as le}from"./rds-DIuGt87z.js";import{i as ue,p as de}from"./rds-Ca8CaJkU.js";import{t as fe}from"./_id-oini5BVy.js";import{t as pe}from"./page-heading-vksh_67w.js";import{n as a,t as o}from"./detail-row-DNBRlVeK.js";import{t as me}from"./state-badge-pn00UE1d.js";import{i as he,n as ge,r as _e,t as ve}from"./tabs-BMSqRmVw.js";import{t as ye}from"./delete-db-snapshot-dialog-elwW83vt.js";import{t as be}from"./rds-events-panel-BwYPSAd5.js";import{t as xe}from"./rds-tags-tab-cQPAmoTz.js";var Se=r(),Ce=t(n(),1),s=e();function c(e){let t=(0,Se.c)(114),{dbSnapshotIdentifier:n}=e,r=ne(),i;t[0]===n?i=t[1]:(i=ue(n),t[0]=n,t[1]=i);let{data:fe}=ee(i),c=fe.DBSnapshots?.[0],l=c?.DBSnapshotArn??``,we;t[2]===n?we=t[3]:(we=de(n),t[2]=n,t[3]=we);let{data:Te}=ee(we),[Ee,De]=(0,Ce.useState)(!1);if(!c?.DBSnapshotIdentifier){let e;return t[4]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(ie,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,s.jsx)(`p`,{className:`text-muted-foreground`,children:`DB snapshot not found.`})]}),t[4]=e):e=t[4],e}let u=c.Status,d=c.SnapshotType,Oe=d===se,f=c.DBInstanceIdentifier??``,ke;t[5]===Te.Events?ke=t[6]:(ke=Te.Events??[],t[5]=Te.Events,t[6]=ke);let Ae=ke,je;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,s.jsx)(ie,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),t[7]=je):je=t[7];let Me;t[8]===u?Me=t[9]:(Me=ce(u),t[8]=u,t[9]=Me);let Ne=!Me,p;t[10]!==n||t[11]!==r?(p=async()=>{await r({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:n}})},t[10]=n,t[11]=r,t[12]=p):p=t[12];let m;t[13]!==Ne||t[14]!==p?(m=(0,s.jsx)(oe,{disabled:Ne,onClick:p,size:`sm`,variant:`outline`,children:`Restore`}),t[13]=Ne,t[14]=p,t[15]=m):m=t[15];let h;t[16]!==d||t[17]!==u?(h=le(u,d),t[16]=d,t[17]=u,t[18]=h):h=t[18];let Pe=!h,g;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{De(!0)},t[19]=g):g=t[19];let _;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,s.jsx)(ae,{className:`size-4`}),t[20]=_):_=t[20];let v;t[21]===Pe?v=t[22]:(v=(0,s.jsxs)(oe,{disabled:Pe,onClick:g,size:`sm`,variant:`destructive`,children:[_,`Delete`]}),t[21]=Pe,t[22]=v);let y;t[23]!==v||t[24]!==m?(y=(0,s.jsxs)(`div`,{className:`flex gap-2`,children:[m,v]}),t[23]=v,t[24]=m,t[25]=y):y=t[25];let b;t[26]!==n||t[27]!==y?(b=(0,s.jsx)(pe,{actions:y,subtitle:`DB Snapshot`,title:n}),t[26]=n,t[27]=y,t[28]=b):b=t[28];let x;t[29]===u?x=t[30]:(x=(0,s.jsx)(me,{state:u}),t[29]=u,t[30]=x);let S;t[31]===Oe?S=t[32]:(S=Oe&&(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`An automated backup: it is deleted by the source instance's backup retention, not by hand.`}),t[31]=Oe,t[32]=S);let C;t[33]!==x||t[34]!==S?(C=(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[x,S]}),t[33]=x,t[34]=S,t[35]=C):C=t[35];let w;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,s.jsxs)(ge,{children:[(0,s.jsx)(he,{value:`overview`,children:`Overview`}),(0,s.jsx)(he,{value:`tags`,children:`Tags`}),(0,s.jsx)(he,{value:`events`,children:`Events`})]}),t[36]=w):w=t[36];let T;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,s.jsx)(a.Header,{children:`Snapshot`}),t[37]=T):T=t[37];let E;t[38]===d?E=t[39]:(E=(0,s.jsx)(o,{label:`Type`,value:d}),t[38]=d,t[39]=E);let D;t[40]===u?D=t[41]:(D=(0,s.jsx)(o,{label:`Status`,value:u}),t[40]=u,t[41]=D);let O;t[42]===c.SnapshotCreateTime?O=t[43]:(O=re(c.SnapshotCreateTime),t[42]=c.SnapshotCreateTime,t[43]=O);let k;t[44]===O?k=t[45]:(k=(0,s.jsx)(o,{label:`Created`,value:O}),t[44]=O,t[45]=k);let Fe=c.PercentProgress===void 0?void 0:`${c.PercentProgress}%`,A;t[46]===Fe?A=t[47]:(A=(0,s.jsx)(o,{label:`Progress`,value:Fe}),t[46]=Fe,t[47]=A);let j;t[48]===c.DBSnapshotArn?j=t[49]:(j=(0,s.jsx)(o,{label:`ARN`,value:c.DBSnapshotArn}),t[48]=c.DBSnapshotArn,t[49]=j);let M;t[50]!==E||t[51]!==D||t[52]!==k||t[53]!==A||t[54]!==j?(M=(0,s.jsxs)(a,{children:[T,(0,s.jsxs)(a.Content,{children:[E,D,k,A,j]})]}),t[50]=E,t[51]=D,t[52]=k,t[53]=A,t[54]=j,t[55]=M):M=t[55];let N;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,s.jsx)(a.Header,{children:`Source`}),t[56]=N):N=t[56];let P;t[57]===f?P=t[58]:(P=f===``?void 0:(0,s.jsx)(te,{className:`text-primary hover:underline`,params:{id:f},to:`/rds/describe-db-instances/$id`,children:f}),t[57]=f,t[58]=P);let F;t[59]===P?F=t[60]:(F=(0,s.jsx)(o,{label:`DB instance`,value:P}),t[59]=P,t[60]=F);let I;t[61]===c.Engine?I=t[62]:(I=(0,s.jsx)(o,{label:`Engine`,value:c.Engine}),t[61]=c.Engine,t[62]=I);let L;t[63]===c.EngineVersion?L=t[64]:(L=(0,s.jsx)(o,{label:`Version`,value:c.EngineVersion}),t[63]=c.EngineVersion,t[64]=L);let Ie=c.AllocatedStorage?`${c.AllocatedStorage} GiB`:void 0,R;t[65]===Ie?R=t[66]:(R=(0,s.jsx)(o,{label:`Allocated storage`,value:Ie}),t[65]=Ie,t[66]=R);let z;t[67]===c.StorageType?z=t[68]:(z=(0,s.jsx)(o,{label:`Storage type`,value:c.StorageType}),t[67]=c.StorageType,t[68]=z);let Le=c.Encrypted?`Encrypted — always on`:`Not encrypted`,B;t[69]===Le?B=t[70]:(B=(0,s.jsx)(o,{label:`Encryption`,value:Le}),t[69]=Le,t[70]=B);let V;t[71]===c.MasterUsername?V=t[72]:(V=(0,s.jsx)(o,{label:`Master username`,value:c.MasterUsername}),t[71]=c.MasterUsername,t[72]=V);let H;t[73]===c.Port?H=t[74]:(H=c.Port?.toString(),t[73]=c.Port,t[74]=H);let U;t[75]===H?U=t[76]:(U=(0,s.jsx)(o,{label:`Port`,value:H}),t[75]=H,t[76]=U);let W;t[77]===c.VpcId?W=t[78]:(W=(0,s.jsx)(o,{label:`VPC`,value:c.VpcId}),t[77]=c.VpcId,t[78]=W);let G;t[79]!==F||t[80]!==I||t[81]!==L||t[82]!==R||t[83]!==z||t[84]!==B||t[85]!==V||t[86]!==U||t[87]!==W?(G=(0,s.jsxs)(a,{children:[N,(0,s.jsxs)(a.Content,{children:[F,I,L,R,z,B,V,U,W]})]}),t[79]=F,t[80]=I,t[81]=L,t[82]=R,t[83]=z,t[84]=B,t[85]=V,t[86]=U,t[87]=W,t[88]=G):G=t[88];let Re;t[89]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,s.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A restore starts on this snapshot's datadir, so the engine, the master credentials and the initial database come with it and cannot be changed.`}),t[89]=Re):Re=t[89];let K;t[90]!==M||t[91]!==G?(K=(0,s.jsx)(_e,{value:`overview`,children:(0,s.jsxs)(`div`,{className:`space-y-4`,children:[M,G,Re]})}),t[90]=M,t[91]=G,t[92]=K):K=t[92];let q;t[93]===l?q=t[94]:(q=(0,s.jsx)(_e,{value:`tags`,children:(0,s.jsx)(xe,{arn:l})}),t[93]=l,t[94]=q);let J;t[95]===Ae?J=t[96]:(J=(0,s.jsx)(_e,{value:`events`,children:(0,s.jsx)(be,{events:Ae})}),t[95]=Ae,t[96]=J);let Y;t[97]!==K||t[98]!==q||t[99]!==J?(Y=(0,s.jsxs)(ve,{defaultValue:`overview`,children:[w,K,q,J]}),t[97]=K,t[98]=q,t[99]=J,t[100]=Y):Y=t[100];let X;t[101]!==b||t[102]!==C||t[103]!==Y?(X=(0,s.jsxs)(`div`,{className:`space-y-6`,children:[b,C,Y]}),t[101]=b,t[102]=C,t[103]=Y,t[104]=X):X=t[104];let Z;t[105]===r?Z=t[106]:(Z=async()=>{await r({to:`/rds/describe-db-snapshots`})},t[105]=r,t[106]=Z);let Q;t[107]!==n||t[108]!==Ee||t[109]!==Z?(Q=(0,s.jsx)(ye,{dbSnapshotIdentifier:n,onDeleted:Z,onOpenChange:De,open:Ee}),t[107]=n,t[108]=Ee,t[109]=Z,t[110]=Q):Q=t[110];let $;return t[111]!==X||t[112]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[je,X,Q]}),t[111]=X,t[112]=Q,t[113]=$):$=t[113],$}function l(){let e=(0,Se.c)(4),{id:t}=fe.useParams(),n;e[0]===t?n=e[1]:(n=i(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,s.jsx)(c,{dbSnapshotIdentifier:n}),e[2]=n,e[3]=r),r}export{l as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DeKRZoaO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DeKRZoaO.js new file mode 100644 index 000000000..a3e59903e --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DeKRZoaO.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CCjrSa5z.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-wsXUoJ12.js","assets/camera-bmANKZ8M.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{k as r,l as i}from"./ec2-DYgBhYCJ.js";var a=e(`/_auth/ec2/(volumes)/describe-volumes/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.id),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CCjrSa5z.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Df06xbgH.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Df06xbgH.js deleted file mode 100644 index eb15c7153..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Df06xbgH.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-BZ16Nhxl.js","assets/compiler-runtime-D_vZfn79.js","assets/removable-Dwr9otKB.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/circle-arrow-up-Bs5cB5tN.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/admin-context-CXmiyIcc.js","assets/sts-B5ZEON3v.js","assets/signed-fetch-B-FFW93q.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/state-badge-D1Z6q_OA.js","assets/system-managed-Dk7ySh_E.js","assets/ami-details-ChpQ4w1b.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{a as r}from"./ec2-CWEplLq4.js";var i=e(`/_auth/ec2/(images)/describe-images/$id`)({loader:async({context:e,params:t})=>await e.queryClient.query({...r(t.id),staleTime:`static`}),head:({loaderData:e})=>({meta:[{title:`${e?.Images?.[0]?.Name??`Image`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-BZ16Nhxl.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BZ16Nhxl.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DfRxdxlA.js similarity index 79% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BZ16Nhxl.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DfRxdxlA.js index 13846200f..c3a4bd4fb 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-BZ16Nhxl.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DfRxdxlA.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{t as o}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{o as c}from"./cluster-config-xw_Q7X1e.js";import{t as l}from"./back-link-CjKy1JE5.js";import{t as u}from"./circle-arrow-up-Bs5cB5tN.js";import{t as d}from"./trash-DVab4pEz.js";import{t as f}from"./button-BarTr35m.js";import{n as p}from"./admin-context-CXmiyIcc.js";import{r as m}from"./signed-fetch-B-FFW93q.js";import{a as h}from"./ec2-CWEplLq4.js";import{B as g}from"./ec2-Ctto2xjU.js";import{t as _}from"./_id-Df06xbgH.js";import{t as v}from"./page-heading-vksh_67w.js";import{t as y}from"./error-banner-DeOeVBKS.js";import{a as b,i as x,l as S,n as C,o as w,r as T,s as E,t as D}from"./alert-dialog-kCQ1W4Rz.js";import{t as O}from"./delete-confirmation-dialog-SdDN4LiF.js";import{t as k}from"./state-badge-D1Z6q_OA.js";import{i as A}from"./system-managed-Dk7ySh_E.js";import{t as j}from"./ami-details-ChpQ4w1b.js";var M=t(n()),N=r();function P(){let e=(0,N.c)(2),t=i(),n;return e[0]===t?n=e[1]:(n={mutationFn:F,onSuccess:()=>{t.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=t,e[1]=n),a(n)}async function F(e){let t=c();if(!t)throw Error(`Not authenticated`);return await m({action:`PromoteImage`,credentials:t,params:{ImageId:e}})}var I=e(),L=`000000000000`;function R(){let{id:e}=_.useParams(),t=s(),{data:n}=o(h(e)),r=n?.Images?.[0],{isAdmin:i}=p(),a=g(),c=P(),[m,N]=(0,M.useState)(!1),[F,R]=(0,M.useState)(!1);if(!r?.ImageId||A(r))return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(l,{to:`/ec2/describe-images`,children:`Back to images`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`Image not found.`})]});let z=r.OwnerId===L;async function B(){try{await a.mutateAsync(e),t({to:`/ec2/describe-images`})}finally{N(!1)}}async function V(){try{await c.mutateAsync(e),R(!1)}catch{}}return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(l,{to:`/ec2/describe-images`,children:`Back to images`}),a.error&&(0,I.jsx)(y,{error:a.error,msg:`Failed to deregister image`}),c.error&&(0,I.jsx)(y,{error:c.error,msg:`Failed to promote image`}),(0,I.jsxs)(`div`,{className:`space-y-6`,children:[(0,I.jsx)(v,{actions:(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i&&!z&&(0,I.jsxs)(f,{onClick:()=>{R(!0)},size:`sm`,variant:`outline`,children:[(0,I.jsx)(u,{className:`size-4`}),`Promote to System`]}),(0,I.jsxs)(f,{onClick:()=>{N(!0)},size:`sm`,variant:`destructive`,children:[(0,I.jsx)(d,{className:`size-4`}),`Deregister`]}),(0,I.jsx)(k,{state:r.State})]}),subtitle:`Image Details`,title:r.ImageId}),(0,I.jsx)(j,{image:r,showExtendedDetails:!0})]}),(0,I.jsx)(O,{description:`Are you sure you want to deregister "${r.ImageId}"? The backing snapshot will not be deleted.`,isPending:a.isPending,onConfirm:B,onOpenChange:N,open:m,title:`Deregister Image`}),(0,I.jsx)(D,{onOpenChange:R,open:F,children:(0,I.jsxs)(x,{children:[(0,I.jsxs)(E,{children:[(0,I.jsx)(S,{children:`Promote to System Image`}),(0,I.jsxs)(b,{children:[`This will make “`,r.ImageId,`” visible to all accounts as a system image. This cannot be undone via the UI.`]})]}),(0,I.jsxs)(w,{children:[(0,I.jsx)(T,{children:`Cancel`}),(0,I.jsx)(C,{disabled:c.isPending,onClick:V,children:c.isPending?`Promoting…`:`Promote`})]})]})})]})}export{R as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{t as o}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{s as c}from"./cluster-config-DkOiY8HH.js";import{t as l}from"./back-link-wsXUoJ12.js";import{t as u}from"./circle-arrow-up-Bs5cB5tN.js";import{t as d}from"./trash-DVab4pEz.js";import{t as f}from"./button-qf9lLJ2x.js";import{n as p}from"./admin-context-C7nTf-ee.js";import{r as m}from"./signed-fetch-C_pG4AOx.js";import{a as h}from"./ec2-DYgBhYCJ.js";import{B as g}from"./ec2-Csn1kwZ8.js";import{t as _}from"./_id-Dr1bSR-H.js";import{t as v}from"./page-heading-vksh_67w.js";import{t as y}from"./error-banner-DeOeVBKS.js";import{a as b,i as x,l as S,n as C,o as w,r as T,s as E,t as D}from"./alert-dialog-jxylPXwR.js";import{t as O}from"./delete-confirmation-dialog-BYHqotoI.js";import{t as k}from"./state-badge-pn00UE1d.js";import{i as A}from"./system-managed-Dk7ySh_E.js";import{t as j}from"./ami-details-CXhu-MrF.js";var M=t(n()),N=r();function P(){let e=(0,N.c)(2),t=i(),n;return e[0]===t?n=e[1]:(n={mutationFn:F,onSuccess:()=>{t.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=t,e[1]=n),a(n)}async function F(e){let t=c();if(!t)throw Error(`Not authenticated`);return await m({action:`PromoteImage`,credentials:t,params:{ImageId:e}})}var I=e(),L=`000000000000`;function R(){let{id:e}=_.useParams(),t=s(),{data:n}=o(h(e)),r=n?.Images?.[0],{isAdmin:i}=p(),a=g(),c=P(),[m,N]=(0,M.useState)(!1),[F,R]=(0,M.useState)(!1);if(!r?.ImageId||A(r))return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(l,{to:`/ec2/describe-images`,children:`Back to images`}),(0,I.jsx)(`p`,{className:`text-muted-foreground`,children:`Image not found.`})]});let z=r.OwnerId===L;async function B(){try{await a.mutateAsync(e),t({to:`/ec2/describe-images`})}finally{N(!1)}}async function V(){try{await c.mutateAsync(e),R(!1)}catch{}}return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(l,{to:`/ec2/describe-images`,children:`Back to images`}),a.error&&(0,I.jsx)(y,{error:a.error,msg:`Failed to deregister image`}),c.error&&(0,I.jsx)(y,{error:c.error,msg:`Failed to promote image`}),(0,I.jsxs)(`div`,{className:`space-y-6`,children:[(0,I.jsx)(v,{actions:(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i&&!z&&(0,I.jsxs)(f,{onClick:()=>{R(!0)},size:`sm`,variant:`outline`,children:[(0,I.jsx)(u,{className:`size-4`}),`Promote to System`]}),(0,I.jsxs)(f,{onClick:()=>{N(!0)},size:`sm`,variant:`destructive`,children:[(0,I.jsx)(d,{className:`size-4`}),`Deregister`]}),(0,I.jsx)(k,{state:r.State})]}),subtitle:`Image Details`,title:r.ImageId}),(0,I.jsx)(j,{image:r,showExtendedDetails:!0})]}),(0,I.jsx)(O,{description:`Are you sure you want to deregister "${r.ImageId}"? The backing snapshot will not be deleted.`,isPending:a.isPending,onConfirm:B,onOpenChange:N,open:m,title:`Deregister Image`}),(0,I.jsx)(D,{onOpenChange:R,open:F,children:(0,I.jsxs)(x,{children:[(0,I.jsxs)(E,{children:[(0,I.jsx)(S,{children:`Promote to System Image`}),(0,I.jsxs)(b,{children:[`This will make “`,r.ImageId,`” visible to all accounts as a system image. This cannot be undone via the UI.`]})]}),(0,I.jsxs)(w,{children:[(0,I.jsx)(T,{children:`Cancel`}),(0,I.jsx)(C,{disabled:c.isPending,onClick:V,children:c.isPending?`Promoting…`:`Promote`})]})]})})]})}export{R as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpCiHWsF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpCiHWsF.js deleted file mode 100644 index 23fc4461c..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpCiHWsF.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-TfRi_Jai.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{M as r,u as i}from"./ec2-CWEplLq4.js";var a=e(`/_auth/ec2/(internet-gateways)/describe-internet-gateways/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Internet Gateway | Mulga`}]}),component:t(()=>n(()=>import(`./_id-TfRi_Jai.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpdFBQia.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpdFBQia.js new file mode 100644 index 000000000..531bbcc7a --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DpdFBQia.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-B4WLpFz6.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-wsXUoJ12.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/badge-6vbuGFqk.js","assets/useRender-C4GZPWLS.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DqNqPeiA.js","assets/launch-template-data-fields-PZ1Q44UQ.js","assets/textarea-DV1UO8hv.js","assets/collapsible-Sj-k2ZCd.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{O as r,c as i,h as a,m as o,o as s,p as c,w as l}from"./ec2-DYgBhYCJ.js";var u=e(`/_auth/ec2/(launch-templates)/describe-launch-templates/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o(t.id),staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Launch Template | Mulga`}]}),component:t(()=>n(()=>import(`./_id-B4WLpFz6.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dr1bSR-H.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dr1bSR-H.js new file mode 100644 index 000000000..638ff60c8 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dr1bSR-H.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DfRxdxlA.js","assets/compiler-runtime-D_vZfn79.js","assets/removable-Dwr9otKB.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/circle-arrow-up-Bs5cB5tN.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/admin-context-C7nTf-ee.js","assets/sts-e2q_c_HI.js","assets/signed-fetch-C_pG4AOx.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/state-badge-pn00UE1d.js","assets/system-managed-Dk7ySh_E.js","assets/ami-details-CXhu-MrF.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{a as r}from"./ec2-DYgBhYCJ.js";var i=e(`/_auth/ec2/(images)/describe-images/$id`)({loader:async({context:e,params:t})=>await e.queryClient.query({...r(t.id),staleTime:`static`}),head:({loaderData:e})=>({meta:[{title:`${e?.Images?.[0]?.Name??`Image`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DfRxdxlA.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dt-3JI-F.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dt-3JI-F.js new file mode 100644 index 000000000..1f8a8fe57 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dt-3JI-F.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DRsACGg7.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-wsXUoJ12.js","assets/check-BO7W8OSs.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/copy-CamWo-pg.js","assets/network-RAx0KOlf.js","assets/rotate-cw-FTUcK_f-.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/input-D3aUBtS6.js","assets/admin-context-C7nTf-ee.js","assets/sts-e2q_c_HI.js","assets/signed-fetch-C_pG4AOx.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/iam-DmtL7LFe.js","assets/commandBuilder-BKyTM0Ga.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/admin-JuLSsFKq.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/ami-details-CXhu-MrF.js","assets/gpu-instance-type-select-DMxBayBV.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{a as r,c as i,s as a}from"./ec2-DYgBhYCJ.js";var o=e(`/_auth/ec2/(instances)/describe-instances/$id`)({loader:async({context:e,params:t})=>{let[n]=await Promise.all([e.queryClient.query({...a(t.id),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})]),o=n.Reservations?.[0]?.Instances?.[0]?.ImageId;return await e.queryClient.query({...r(o),staleTime:`static`}),n},head:({loaderData:e})=>({meta:[{title:`${e?.Reservations?.[0]?.Instances?.[0]?.InstanceId??`Instance`} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DRsACGg7.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJjABFwx.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dwv2H6B-.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJjABFwx.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dwv2H6B-.js index 747ad6663..0bd0dbe11 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DJjABFwx.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Dwv2H6B-.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as ee}from"./removable-Dwr9otKB.js";import{t as te}from"./useQuery-2EKf7AyV.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ne}from"./useNavigate-BH3pQKLF.js";import{ln as a}from"./cluster-config-xw_Q7X1e.js";import{t as o}from"./back-link-CjKy1JE5.js";import{i as s,n as c,r as l,t as re}from"./cli-command-panel-CLiFy1rG.js";import{t as u}from"./input-6kdUb_DH.js";import{o as d,w as ie}from"./ec2-CWEplLq4.js";import{C as ae,d as oe,w as se}from"./rds-CE3126Ga.js";import{f}from"./rds-BkKLEWPo.js";import{d as p,h as m,i as h,l as ce,o as le}from"./rds-CyiqRExv.js";import{t as g}from"./_id-CHu8CrA0.js";import{t as _}from"./page-heading-vksh_67w.js";import{a as ue,i as de,t as fe}from"./zod-DF_n2ejy.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-BUM37An0.js";import{n as v,r as y,s as b,t as x}from"./field-c7GHI5st.js";import{t as he}from"./tags-field-array-Dk9nPDzt.js";import{n as S,t as C}from"./detail-row-DNBRlVeK.js";import{a as ge,r as _e}from"./system-managed-Dk7ySh_E.js";import{t as ve}from"./system-image-required-PXuPdEKF.js";import{n as w}from"./picker-notice-tK9XfUSR.js";import{a as T,i as E,n as D,o as O,r as k,s as A,t as j}from"./security-group-checkboxes-BkxIRro9.js";var M=r(),N=t(n(),1),P=e(),F=[{label:`Engine and version`,note:`The datadir is written in one engine's on-disk format; restoring it as another is refused.`},{label:`Master username and password`,note:`The datadir already holds the master role and its password hash, so no bootstrap runs.`},{label:`Initial database`,note:`A restore cannot create a database the snapshot does not hold.`},{label:`Backup retention and windows`,note:`The restored instance takes the platform defaults; change them with a modify afterwards.`}];function I({dbSnapshotIdentifier:e}){let t=ne(),n=ee(),r=f(),[a,s]=(0,N.useState)(!1),{data:c}=i(h(e)),{data:l}=i(le),{data:g}=i(m),{data:M}=i(p),{data:I}=i(ie),{data:L}=i(d),R=c.DBSnapshots?.[0],z=R?.Engine??``,B=R?.AllocatedStorage??0,V=te(ce(z)),{clearErrors:be,control:H,formState:{errors:U,isSubmitting:xe},handleSubmit:Se,register:W,setError:Ce,setValue:G}=de({resolver:fe(ae),defaultValues:{snapshotAllocatedStorage:B,dbInstanceIdentifier:se(R?.DBInstanceIdentifier??``,`restored`),dbInstanceClass:``,allocatedStorage:B,port:R?.Port?String(R.Port):``,dbSubnetGroupName:``,vpcSecurityGroupIds:[],dbParameterGroupName:``,deletionProtection:!1,tags:[]}}),K=ue({control:H}),q=K.dbSubnetGroupName??``,J=K.vpcSecurityGroupIds??[],we=async()=>{s(!0);try{await n.invalidateQueries({queryKey:d.queryKey})}finally{s(!1)}},Y=e=>{be(`vpcSecurityGroupIds`),G(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},Te=e=>{let t=Z.find(t=>t.DBSubnetGroupName===e)?.VpcId??R?.VpcId,n=k($,t,J);if(e!==``&&t!==R?.VpcId&&n.length===0){let e=D($,t);n=e?[e]:[]}G(`dbSubnetGroupName`,e,{shouldValidate:!0}),Y(n)},Ee=async n=>{if(n.dbSubnetGroupName!==``&&Q!==R?.VpcId&&n.vpcSecurityGroupIds.length===0){Ce(`vpcSecurityGroupIds`,{message:`Select a security group in the new placement VPC`});return}try{await r.mutateAsync({...n,dbSnapshotIdentifier:e})}catch{return}await t({to:`/rds/describe-db-instances/$id`,params:{id:n.dbInstanceIdentifier}})};if(!R?.DBSnapshotIdentifier)return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`DB snapshot not found.`})]});if(!oe(R.Status))return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),(0,P.jsxs)(`p`,{className:`text-muted-foreground`,children:[e,` is `,R.Status,`. A snapshot can only be restored once it is available.`]})]});if(!(L.Images??[]).some(e=>_e(e,z,R.EngineVersion??``)))return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),(0,P.jsx)(ve,{description:`This snapshot holds ${z} data and can only be restored onto a ${z} instance, but no ${z} image is imported on this cluster.`,importCommand:ge(z),isRechecking:a,onRecheck:we,title:`${z} image not found`})]});let De=V.data?.OrderableDBInstanceOptions??[],X=[...new Set(De.map(e=>e.DBInstanceClass??``).filter(Boolean))],Oe=w(V,X.length===0,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:`No instance class this cluster's nodes can run is available for ${z}.`}),Z=g.DBSubnetGroups??[],ke=A(M.DBParameterGroups??[],l.DBEngineVersions??[],z),Q=Z.find(e=>e.DBSubnetGroupName===q)?.VpcId??R.VpcId,$=I.SecurityGroups??[],Ae=E($,Q);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),r.error&&(0,P.jsx)(pe,{error:r.error,msg:`Failed to restore the DB snapshot`}),(0,P.jsxs)(`div`,{className:`max-w-4xl space-y-6`,children:[(0,P.jsxs)(S,{children:[(0,P.jsx)(S.Header,{children:`Restoring From`}),(0,P.jsxs)(S.Content,{children:[(0,P.jsx)(C,{label:`Snapshot`,value:e}),(0,P.jsx)(C,{label:`Source DB instance`,value:R.DBInstanceIdentifier}),(0,P.jsx)(C,{label:`Engine`,value:[z,R.EngineVersion].filter(Boolean).join(` `)}),(0,P.jsx)(C,{label:`Master username`,value:R.MasterUsername}),(0,P.jsx)(C,{label:`Snapshot storage`,value:B?`${B} GiB`:void 0})]})]}),(0,P.jsxs)(`form`,{className:`space-y-6`,onSubmit:Se(Ee),children:[(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-identifier`,children:`New DB instance identifier`})}),(0,P.jsx)(u,{"aria-invalid":!!U.dbInstanceIdentifier,id:`restore-identifier`,...W(`dbInstanceIdentifier`)}),(0,P.jsx)(v,{children:`A restore always creates a new instance; it never writes back over the one the snapshot came from.`}),(0,P.jsx)(y,{errors:[U.dbInstanceIdentifier]})]}),(0,P.jsx)(O,{control:H,id:`restore-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:Oe,options:X.map(e=>({value:e,label:e})),placeholder:`Select an instance class`}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-storage`,children:`Allocated storage (GiB)`})}),(0,P.jsx)(u,{"aria-invalid":!!U.allocatedStorage,id:`restore-storage`,min:B,type:`number`,...W(`allocatedStorage`,{valueAsNumber:!0})}),(0,P.jsxs)(v,{children:[`The snapshot holds `,B,` GiB. A restore may grow the volume but never shrink it.`]}),(0,P.jsx)(y,{errors:[U.allocatedStorage]})]}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-port`,children:`Port`})}),(0,P.jsx)(u,{"aria-invalid":!!U.port,id:`restore-port`,placeholder:`Snapshot's port`,...W(`port`)}),(0,P.jsx)(v,{children:`Leave blank to keep the port the snapshot was taken on. The port is fixed once the instance exists.`}),(0,P.jsx)(y,{errors:[U.port]})]}),(0,P.jsx)(O,{control:H,description:`Leave unset to place the restored endpoint in the group the snapshot recorded.`,id:`restore-subnet-group`,label:`DB subnet group`,name:`dbSubnetGroupName`,onValueChange:Te,options:Z.map(e=>({value:e.DBSubnetGroupName??``,label:`${e.DBSubnetGroupName} (${e.VpcId})`})),placeholder:`The snapshot's subnet group`}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:`VPC security groups`}),(0,P.jsx)(j,{emptyText:Q?`No security groups available in ${Q}.`:`The snapshot does not identify a placement VPC.`,groups:Ae,onChange:Y,selected:J}),(0,P.jsx)(v,{children:`Leave every box clear to inherit the groups the snapshot recorded.`}),(0,P.jsx)(y,{errors:[U.vpcSecurityGroupIds]})]}),(0,P.jsx)(O,{control:H,id:`restore-parameter-group`,label:`DB parameter group`,name:`dbParameterGroupName`,options:ke.map(e=>({value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``})),placeholder:`The snapshot's parameter group`}),(0,P.jsx)(T,{control:H,name:`deletionProtection`}),(0,P.jsx)(he,{control:H,name:`tags`}),(0,P.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-4`,children:[(0,P.jsx)(`h3`,{className:`text-xs font-medium`,children:`Inherited from the snapshot`}),F.map(e=>(0,P.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,P.jsx)(`span`,{className:`font-medium`,children:e.label}),` —`,` `,e.note]},e.label))]}),(0,P.jsx)(re,{commands:ye(e,{dbInstanceIdentifier:K.dbInstanceIdentifier??``,dbInstanceClass:K.dbInstanceClass??``,allocatedStorage:K.allocatedStorage??B,port:K.port??``,dbSubnetGroupName:q,vpcSecurityGroupIds:J,dbParameterGroupName:K.dbParameterGroupName??``,deletionProtection:K.deletionProtection??!1})}),(0,P.jsx)(me,{isPending:r.isPending,isSubmitting:xe,onCancel:async()=>{await t({to:`/rds/describe-db-snapshots`})},pendingLabel:`Restoring…`,submitLabel:`Restore Snapshot`})]})]})]})}function ye(e,t){return[{label:`Restore DB Instance`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds restore-db-instance-from-db-snapshot`},...l(`--db-snapshot-identifier`,e),...l(`--db-instance-identifier`,c(t.dbInstanceIdentifier,`DBInstanceIdentifier`)),...l(`--db-instance-class`,c(t.dbInstanceClass,`DBInstanceClass`)),...l(`--allocated-storage`,t.allocatedStorage),...s(`--port`,t.port),...s(`--db-subnet-group-name`,t.dbSubnetGroupName),...s(`--vpc-security-group-ids`,t.vpcSecurityGroupIds.join(` `)),...s(`--db-parameter-group-name`,t.dbParameterGroupName),...s(`--deletion-protection`,t.deletionProtection)]}]}function L(){let e=(0,M.c)(4),{id:t}=g.useParams(),n;e[0]===t?n=e[1]:(n=a(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,P.jsx)(I,{dbSnapshotIdentifier:n}),e[2]=n,e[3]=r),r}export{L as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as ee}from"./removable-Dwr9otKB.js";import{t as te}from"./useQuery-2EKf7AyV.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ne}from"./useNavigate-CTe_-BZA.js";import{un as a}from"./cluster-config-DkOiY8HH.js";import{t as o}from"./back-link-wsXUoJ12.js";import{i as s,n as c,r as l,t as re}from"./cli-command-panel-DavMY-tN.js";import{t as u}from"./input-D3aUBtS6.js";import{o as d,w as ie}from"./ec2-DYgBhYCJ.js";import{C as ae,d as oe,w as se}from"./rds-DIuGt87z.js";import{f}from"./rds-DbPUva_R.js";import{d as p,h as m,i as h,l as ce,o as le}from"./rds-Ca8CaJkU.js";import{t as g}from"./_id-CNkL0BtN.js";import{t as _}from"./page-heading-vksh_67w.js";import{a as ue,i as de,t as fe}from"./zod-A4qtKH_p.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-DXvy9CQI.js";import{n as v,r as y,s as b,t as x}from"./field-CS-ql6du.js";import{t as he}from"./tags-field-array-Bjg8Nmui.js";import{n as S,t as C}from"./detail-row-DNBRlVeK.js";import{a as ge,r as _e}from"./system-managed-Dk7ySh_E.js";import{t as ve}from"./system-image-required-D20bojgG.js";import{n as w}from"./picker-notice-tK9XfUSR.js";import{a as T,i as E,n as D,o as O,r as k,s as A,t as j}from"./security-group-checkboxes-DFjvW5uT.js";var M=r(),N=t(n(),1),P=e(),F=[{label:`Engine and version`,note:`The datadir is written in one engine's on-disk format; restoring it as another is refused.`},{label:`Master username and password`,note:`The datadir already holds the master role and its password hash, so no bootstrap runs.`},{label:`Initial database`,note:`A restore cannot create a database the snapshot does not hold.`},{label:`Backup retention and windows`,note:`The restored instance takes the platform defaults; change them with a modify afterwards.`}];function I({dbSnapshotIdentifier:e}){let t=ne(),n=ee(),r=f(),[a,s]=(0,N.useState)(!1),{data:c}=i(h(e)),{data:l}=i(le),{data:g}=i(m),{data:M}=i(p),{data:I}=i(ie),{data:L}=i(d),R=c.DBSnapshots?.[0],z=R?.Engine??``,B=R?.AllocatedStorage??0,V=te(ce(z)),{clearErrors:be,control:H,formState:{errors:U,isSubmitting:xe},handleSubmit:Se,register:W,setError:Ce,setValue:G}=de({resolver:fe(ae),defaultValues:{snapshotAllocatedStorage:B,dbInstanceIdentifier:se(R?.DBInstanceIdentifier??``,`restored`),dbInstanceClass:``,allocatedStorage:B,port:R?.Port?String(R.Port):``,dbSubnetGroupName:``,vpcSecurityGroupIds:[],dbParameterGroupName:``,deletionProtection:!1,tags:[]}}),K=ue({control:H}),q=K.dbSubnetGroupName??``,J=K.vpcSecurityGroupIds??[],we=async()=>{s(!0);try{await n.invalidateQueries({queryKey:d.queryKey})}finally{s(!1)}},Y=e=>{be(`vpcSecurityGroupIds`),G(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},Te=e=>{let t=Z.find(t=>t.DBSubnetGroupName===e)?.VpcId??R?.VpcId,n=k($,t,J);if(e!==``&&t!==R?.VpcId&&n.length===0){let e=D($,t);n=e?[e]:[]}G(`dbSubnetGroupName`,e,{shouldValidate:!0}),Y(n)},Ee=async n=>{if(n.dbSubnetGroupName!==``&&Q!==R?.VpcId&&n.vpcSecurityGroupIds.length===0){Ce(`vpcSecurityGroupIds`,{message:`Select a security group in the new placement VPC`});return}try{await r.mutateAsync({...n,dbSnapshotIdentifier:e})}catch{return}await t({to:`/rds/describe-db-instances/$id`,params:{id:n.dbInstanceIdentifier}})};if(!R?.DBSnapshotIdentifier)return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(`p`,{className:`text-muted-foreground`,children:`DB snapshot not found.`})]});if(!oe(R.Status))return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),(0,P.jsxs)(`p`,{className:`text-muted-foreground`,children:[e,` is `,R.Status,`. A snapshot can only be restored once it is available.`]})]});if(!(L.Images??[]).some(e=>_e(e,z,R.EngineVersion??``)))return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),(0,P.jsx)(ve,{description:`This snapshot holds ${z} data and can only be restored onto a ${z} instance, but no ${z} image is imported on this cluster.`,importCommand:ge(z),isRechecking:a,onRecheck:we,title:`${z} image not found`})]});let De=V.data?.OrderableDBInstanceOptions??[],X=[...new Set(De.map(e=>e.DBInstanceClass??``).filter(Boolean))],Oe=w(V,X.length===0,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:`No instance class this cluster's nodes can run is available for ${z}.`}),Z=g.DBSubnetGroups??[],ke=A(M.DBParameterGroups??[],l.DBEngineVersions??[],z),Q=Z.find(e=>e.DBSubnetGroupName===q)?.VpcId??R.VpcId,$=I.SecurityGroups??[],Ae=E($,Q);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(o,{to:`/rds/describe-db-snapshots`,children:`Back to snapshots`}),(0,P.jsx)(_,{subtitle:e,title:`Restore Snapshot`}),r.error&&(0,P.jsx)(pe,{error:r.error,msg:`Failed to restore the DB snapshot`}),(0,P.jsxs)(`div`,{className:`max-w-4xl space-y-6`,children:[(0,P.jsxs)(S,{children:[(0,P.jsx)(S.Header,{children:`Restoring From`}),(0,P.jsxs)(S.Content,{children:[(0,P.jsx)(C,{label:`Snapshot`,value:e}),(0,P.jsx)(C,{label:`Source DB instance`,value:R.DBInstanceIdentifier}),(0,P.jsx)(C,{label:`Engine`,value:[z,R.EngineVersion].filter(Boolean).join(` `)}),(0,P.jsx)(C,{label:`Master username`,value:R.MasterUsername}),(0,P.jsx)(C,{label:`Snapshot storage`,value:B?`${B} GiB`:void 0})]})]}),(0,P.jsxs)(`form`,{className:`space-y-6`,onSubmit:Se(Ee),children:[(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-identifier`,children:`New DB instance identifier`})}),(0,P.jsx)(u,{"aria-invalid":!!U.dbInstanceIdentifier,id:`restore-identifier`,...W(`dbInstanceIdentifier`)}),(0,P.jsx)(v,{children:`A restore always creates a new instance; it never writes back over the one the snapshot came from.`}),(0,P.jsx)(y,{errors:[U.dbInstanceIdentifier]})]}),(0,P.jsx)(O,{control:H,id:`restore-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:Oe,options:X.map(e=>({value:e,label:e})),placeholder:`Select an instance class`}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-storage`,children:`Allocated storage (GiB)`})}),(0,P.jsx)(u,{"aria-invalid":!!U.allocatedStorage,id:`restore-storage`,min:B,type:`number`,...W(`allocatedStorage`,{valueAsNumber:!0})}),(0,P.jsxs)(v,{children:[`The snapshot holds `,B,` GiB. A restore may grow the volume but never shrink it.`]}),(0,P.jsx)(y,{errors:[U.allocatedStorage]})]}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(`label`,{htmlFor:`restore-port`,children:`Port`})}),(0,P.jsx)(u,{"aria-invalid":!!U.port,id:`restore-port`,placeholder:`Snapshot's port`,...W(`port`)}),(0,P.jsx)(v,{children:`Leave blank to keep the port the snapshot was taken on. The port is fixed once the instance exists.`}),(0,P.jsx)(y,{errors:[U.port]})]}),(0,P.jsx)(O,{control:H,description:`Leave unset to place the restored endpoint in the group the snapshot recorded.`,id:`restore-subnet-group`,label:`DB subnet group`,name:`dbSubnetGroupName`,onValueChange:Te,options:Z.map(e=>({value:e.DBSubnetGroupName??``,label:`${e.DBSubnetGroupName} (${e.VpcId})`})),placeholder:`The snapshot's subnet group`}),(0,P.jsxs)(x,{children:[(0,P.jsx)(b,{children:`VPC security groups`}),(0,P.jsx)(j,{emptyText:Q?`No security groups available in ${Q}.`:`The snapshot does not identify a placement VPC.`,groups:Ae,onChange:Y,selected:J}),(0,P.jsx)(v,{children:`Leave every box clear to inherit the groups the snapshot recorded.`}),(0,P.jsx)(y,{errors:[U.vpcSecurityGroupIds]})]}),(0,P.jsx)(O,{control:H,id:`restore-parameter-group`,label:`DB parameter group`,name:`dbParameterGroupName`,options:ke.map(e=>({value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``})),placeholder:`The snapshot's parameter group`}),(0,P.jsx)(T,{control:H,name:`deletionProtection`}),(0,P.jsx)(he,{control:H,name:`tags`}),(0,P.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-4`,children:[(0,P.jsx)(`h3`,{className:`text-xs font-medium`,children:`Inherited from the snapshot`}),F.map(e=>(0,P.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[(0,P.jsx)(`span`,{className:`font-medium`,children:e.label}),` —`,` `,e.note]},e.label))]}),(0,P.jsx)(re,{commands:ye(e,{dbInstanceIdentifier:K.dbInstanceIdentifier??``,dbInstanceClass:K.dbInstanceClass??``,allocatedStorage:K.allocatedStorage??B,port:K.port??``,dbSubnetGroupName:q,vpcSecurityGroupIds:J,dbParameterGroupName:K.dbParameterGroupName??``,deletionProtection:K.deletionProtection??!1})}),(0,P.jsx)(me,{isPending:r.isPending,isSubmitting:xe,onCancel:async()=>{await t({to:`/rds/describe-db-snapshots`})},pendingLabel:`Restoring…`,submitLabel:`Restore Snapshot`})]})]})]})}function ye(e,t){return[{label:`Restore DB Instance`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds restore-db-instance-from-db-snapshot`},...l(`--db-snapshot-identifier`,e),...l(`--db-instance-identifier`,c(t.dbInstanceIdentifier,`DBInstanceIdentifier`)),...l(`--db-instance-class`,c(t.dbInstanceClass,`DBInstanceClass`)),...l(`--allocated-storage`,t.allocatedStorage),...s(`--port`,t.port),...s(`--db-subnet-group-name`,t.dbSubnetGroupName),...s(`--vpc-security-group-ids`,t.vpcSecurityGroupIds.join(` `)),...s(`--db-parameter-group-name`,t.dbParameterGroupName),...s(`--deletion-protection`,t.deletionProtection)]}]}function L(){let e=(0,M.c)(4),{id:t}=g.useParams(),n;e[0]===t?n=e[1]:(n=a(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,P.jsx)(I,{dbSnapshotIdentifier:n}),e[2]=n,e[3]=r),r}export{L as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-FFfcJrCW.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-FFfcJrCW.js deleted file mode 100644 index 12f2df715..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-FFfcJrCW.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DpnCbgQg.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{l as r,t as i}from"./ec2-CWEplLq4.js";var a=e(`/_auth/ec2/(elastic-ips)/describe-addresses/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Elastic IP | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DpnCbgQg.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JoZX5aXX.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JoZX5aXX.js new file mode 100644 index 000000000..2eeb95724 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-JoZX5aXX.js @@ -0,0 +1,17 @@ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{an as o,on as s,t as c,un as l}from"./cluster-config-DkOiY8HH.js";import{t as u}from"./button-qf9lLJ2x.js";import{i as d,n as f,r as p,t as m}from"./ecr-dHrKdmGg.js";import{a as h,c as g,l as _,o as v,r as y,s as b,t as x}from"./ecr-BDgZC3r0.js";import{n as S,r as C}from"./json-hjud9BaA.js";import{t as w}from"./_id-aWzBlnyD.js";import{t as T}from"./page-heading-vksh_67w.js";import{t as E}from"./badge-6vbuGFqk.js";import{a as D,i as O,l as k,n as A,o as j,r as M,s as N,t as P}from"./alert-dialog-jxylPXwR.js";import{i as F,n as I,r as L,t as ee}from"./tabs-BMSqRmVw.js";import{t as R}from"./json-editor-02czSrbA.js";var z=r(),B=t(n(),1),V=e(),te=`{ + "rules": [ + { + "rulePriority": 1, + "description": "Expire untagged images older than 14 days", + "selection": { + "tagStatus": "untagged", + "countType": "sinceImagePushed", + "countUnit": "days", + "countNumber": 14 + }, + "action": { "type": "expire" } + } + ] +}`;function ne(e){return e?S(e)??e:``}function H(e){let t=(0,z.c)(56),{repositoryName:n}=e,r;t[0]===n?r=t[1]:(r=m(n),t[0]=n,t[1]=r);let{data:a}=i(r),o=g(),s=y(),c=v(),l;t[2]===a?l=t[3]:(l=()=>ne(a),t[2]=a,t[3]=l);let[d,f]=(0,B.useState)(l),[p,h]=(0,B.useState)(a);a!==p&&(h(a),f(ne(a)));let _;t[4]!==d||t[5]!==o||t[6]!==n?(_=async function(){try{await o.mutateAsync({repositoryName:n,lifecyclePolicyText:d})}catch{}},t[4]=d,t[5]=o,t[6]=n,t[7]=_):_=t[7];let b=_,x;t[8]!==s||t[9]!==n?(x=async function(){try{await s.mutateAsync(n)}catch{}},t[8]=s,t[9]=n,t[10]=x):x=t[10];let S=x,w;t[11]!==c||t[12]!==n?(w=async function(){try{await c.mutateAsync(n)}catch{}},t[11]=c,t[12]=n,t[13]=w):w=t[13];let T=w,E;t[14]===d?E=t[15]:(E=d.trim(),t[14]=d,t[15]=E);let D=E,O;t[16]!==d||t[17]!==D.length?(O=D.length>0&&!C(d),t[16]=d,t[17]=D.length,t[18]=O):O=t[18];let k=O,A=o.error??s.error??c.error,j;t[19]===c.data?.previewResults?j=t[20]:(j=c.data?.previewResults??[],t[19]=c.data?.previewResults,t[20]=j);let M=j,N;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Lifecycle policy`}),t[21]=N):N=t[21];let P=s.isPending||!a,F=s.isPending?`Deleting…`:`Delete`,I;t[22]!==S||t[23]!==P||t[24]!==F?(I=(0,V.jsx)(u,{disabled:P,onClick:S,size:`sm`,variant:`destructive`,children:F}),t[22]=S,t[23]=P,t[24]=F,t[25]=I):I=t[25];let L=c.isPending||!a,ee=c.isPending?`Previewing…`:`Preview`,H;t[26]!==T||t[27]!==L||t[28]!==ee?(H=(0,V.jsx)(u,{disabled:L,onClick:T,size:`sm`,variant:`outline`,children:ee}),t[26]=T,t[27]=L,t[28]=ee,t[29]=H):H=t[29];let ie=o.isPending||D.length===0||k,U=o.isPending?`Saving…`:`Save`,W;t[30]!==b||t[31]!==ie||t[32]!==U?(W=(0,V.jsx)(u,{disabled:ie,onClick:b,size:`sm`,children:U}),t[30]=b,t[31]=ie,t[32]=U,t[33]=W):W=t[33];let G;t[34]!==I||t[35]!==H||t[36]!==W?(G=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[N,(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[I,H,W]})]}),t[34]=I,t[35]=H,t[36]=W,t[37]=G):G=t[37];let K;t[38]!==d||t[39]!==k?(K=(0,V.jsx)(R,{className:`text-xs`,error:k,onChange:f,placeholder:te,rows:14,value:d}),t[38]=d,t[39]=k,t[40]=K):K=t[40];let q;t[41]===k?q=t[42]:(q=k&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:`Lifecycle policy must be valid JSON.`}),t[41]=k,t[42]=q);let J;t[43]===A?J=t[44]:(J=A&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:A.message}),t[43]=A,t[44]=J);let Y;t[45]!==G||t[46]!==K||t[47]!==q||t[48]!==J?(Y=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[G,K,q,J]}),t[45]=G,t[46]=K,t[47]=q,t[48]=J,t[49]=Y):Y=t[49];let X;t[50]!==c.isSuccess||t[51]!==M?(X=c.isSuccess&&(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[(0,V.jsxs)(`h3`,{className:`mb-2 text-sm font-medium`,children:[`Preview: `,M.length,` image`,M.length===1?``:`s`,` would expire`]}),M.length>0?(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tags`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Digest`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pushed`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Rule`})]})}),(0,V.jsx)(`tbody`,{children:M.map(re)})]})}):(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No images match this policy.`})]}),t[50]=c.isSuccess,t[51]=M,t[52]=X):X=t[52];let Z;return t[53]!==Y||t[54]!==X?(Z=(0,V.jsxs)(`div`,{className:`space-y-4`,children:[Y,X]}),t[53]=Y,t[54]=X,t[55]=Z):Z=t[55],Z}function re(e){return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTags&&e.imageTags.length>0?e.imageTags.join(`, `):``}),(0,V.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[e.imageDigest?.slice(0,19),`…`]}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:o(e.imagePushedAt)}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.appliedRulePriority})]},e.imageDigest)}function ie(e){let t=(0,z.c)(38),{repositoryName:n}=e,r;t[0]===n?r=t[1]:(r=d(n),t[0]=n,t[1]=r);let{data:a}=i(r),o=_(),s=h(),[c,l]=(0,B.useState)(a??``),[f,p]=(0,B.useState)(a);a!==f&&(p(a),l(a??``));let m;t[2]!==c||t[3]!==n||t[4]!==o?(m=async function(){try{await o.mutateAsync({repositoryName:n,policyText:c})}catch{}},t[2]=c,t[3]=n,t[4]=o,t[5]=m):m=t[5];let g=m,v;t[6]!==s||t[7]!==n?(v=async function(){try{await s.mutateAsync(n)}catch{}},t[6]=s,t[7]=n,t[8]=v):v=t[8];let y=v,b;t[9]===c?b=t[10]:(b=c.trim(),t[9]=c,t[10]=b);let x=b,S;t[11]!==c||t[12]!==x.length?(S=x.length>0&&!C(c),t[11]=c,t[12]=x.length,t[13]=S):S=t[13];let w=S,T=o.error??s.error,E;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Repository policy`}),t[14]=E):E=t[14];let D=s.isPending||!a,O=s.isPending?`Deleting…`:`Delete`,k;t[15]!==y||t[16]!==D||t[17]!==O?(k=(0,V.jsx)(u,{disabled:D,onClick:y,size:`sm`,variant:`destructive`,children:O}),t[15]=y,t[16]=D,t[17]=O,t[18]=k):k=t[18];let A=o.isPending||x.length===0||w,j=o.isPending?`Saving…`:`Save`,M;t[19]!==g||t[20]!==A||t[21]!==j?(M=(0,V.jsx)(u,{disabled:A,onClick:g,size:`sm`,children:j}),t[19]=g,t[20]=A,t[21]=j,t[22]=M):M=t[22];let N;t[23]!==M||t[24]!==k?(N=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[E,(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[k,M]})]}),t[23]=M,t[24]=k,t[25]=N):N=t[25];let P;t[26]!==c||t[27]!==w?(P=(0,V.jsx)(R,{className:`text-xs`,error:w,onChange:l,placeholder:`No policy attached. Paste an IAM policy document to set one.`,rows:10,value:c}),t[26]=c,t[27]=w,t[28]=P):P=t[28];let F;t[29]===w?F=t[30]:(F=w&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[29]=w,t[30]=F);let I;t[31]===T?I=t[32]:(I=T&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:T.message}),t[31]=T,t[32]=I);let L;return t[33]!==N||t[34]!==P||t[35]!==F||t[36]!==I?(L=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[N,P,F,I]}),t[33]=N,t[34]=P,t[35]=F,t[36]=I,t[37]=L):L=t[37],L}function U(e){if(!e)return``;let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function W(e){let t=(0,z.c)(19),{repositoryName:n,repositoryUri:r}=e,[i,a]=(0,B.useState)(!1),o;t[0]===r?o=t[1]:(o=U(r),t[0]=r,t[1]=o);let s=o,l=r??`${s}/${n}`,d;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=c(),t[2]=d):d=t[2];let f=`aws ecr get-login-password --region ${d} | docker login --username AWS --password-stdin ${s}`,p=`docker build -t ${n} .`,m=`docker tag ${n}:latest ${l}:latest`,h=`docker push ${l}:latest`,g;t[3]!==f||t[4]!==p||t[5]!==m||t[6]!==h?(g=[f,p,m,h],t[3]=f,t[4]=p,t[5]=m,t[6]=h,t[7]=g):g=t[7];let _=g,v;t[8]===_?v=t[9]:(v=async function(){await navigator.clipboard.writeText(_.join(` +`)),a(!0),setTimeout(()=>{a(!1)},2e3)},t[8]=_,t[9]=v);let y=v,b;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Push commands`}),t[10]=b):b=t[10];let x=i?`Copied`:`Copy`,S;t[11]!==y||t[12]!==x?(S=(0,V.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[b,(0,V.jsx)(u,{onClick:y,size:`sm`,variant:`outline`,children:x})]}),t[11]=y,t[12]=x,t[13]=S):S=t[13];let C=_.join(` +`),w;t[14]===C?w=t[15]:(w=(0,V.jsx)(`pre`,{className:`overflow-x-auto rounded bg-muted p-3 font-mono text-xs`,children:C}),t[14]=C,t[15]=w);let T;return t[16]!==S||t[17]!==w?(T=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[S,w]}),t[16]=S,t[17]=w,t[18]=T):T=t[18],T}function G(e){let t=(0,z.c)(31),{repositoryName:n,repositoryUri:r,imageTagMutability:i}=e,a=b(),o=i===`IMMUTABLE`,s=o?`MUTABLE`:`IMMUTABLE`,c=o?`Make mutable`:`Make immutable`,l;t[0]!==s||t[1]!==a||t[2]!==n?(l=async function(){try{await a.mutateAsync({repositoryName:n,imageTagMutability:s})}catch{}},t[0]=s,t[1]=a,t[2]=n,t[3]=l):l=t[3];let d=l,f;t[4]!==n||t[5]!==r?(f=(0,V.jsx)(W,{repositoryName:n,repositoryUri:r}),t[4]=n,t[5]=r,t[6]=f):f=t[6];let p;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,V.jsx)(`h2`,{className:`text-sm font-medium`,children:`Tag immutability`}),t[7]=p):p=t[7];let m=o?`Tags cannot be overwritten to point at a different image.`:`Tags can be overwritten by a new push.`,h;t[8]===m?h=t[9]:(h=(0,V.jsxs)(`div`,{children:[p,(0,V.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:m})]}),t[8]=m,t[9]=h);let g=o?`default`:`outline`,_=o?`Immutable`:`Mutable`,v;t[10]!==g||t[11]!==_?(v=(0,V.jsx)(E,{variant:g,children:_}),t[10]=g,t[11]=_,t[12]=v):v=t[12];let y;t[13]!==h||t[14]!==v?(y=(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[h,v]}),t[13]=h,t[14]=v,t[15]=y):y=t[15];let x;t[16]===a.error?x=t[17]:(x=a.error&&(0,V.jsx)(`p`,{className:`mt-2 text-sm text-destructive`,children:a.error.message}),t[16]=a.error,t[17]=x);let S;t[18]===d?S=t[19]:(S=()=>{d()},t[18]=d,t[19]=S);let C=a.isPending?`Saving…`:c,w;t[20]!==a.isPending||t[21]!==S||t[22]!==C?(w=(0,V.jsx)(u,{className:`mt-3`,disabled:a.isPending,onClick:S,size:`sm`,variant:`outline`,children:C}),t[20]=a.isPending,t[21]=S,t[22]=C,t[23]=w):w=t[23];let T;t[24]!==x||t[25]!==w||t[26]!==y?(T=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[y,x,w]}),t[24]=x,t[25]=w,t[26]=y,t[27]=T):T=t[27];let D;return t[28]!==T||t[29]!==f?(D=(0,V.jsxs)(`div`,{className:`space-y-6`,children:[f,T]}),t[28]=T,t[29]=f,t[30]=D):D=t[30],D}function K(){let e=(0,z.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-sm font-medium`,children:`Image scanning`}),(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Vulnerability scanning is not supported by this registry. Pushed images are stored and served without scan findings.`})]}),e[0]=t):t=e[0],t}function q(e){let t=(0,z.c)(57),{repositoryName:n}=e,{data:r}=i(f),c;t[0]===n?c=t[1]:(c=p(n),t[0]=n,t[1]=c);let{data:l}=i(c),d=x(),[m,h]=(0,B.useState)(null),g;t[2]===r.repositories?g=t[3]:(g=r.repositories??[],t[2]=r.repositories,t[3]=g);let _;if(t[4]!==n||t[5]!==g){let e;t[7]===n?e=t[8]:(e=e=>e.repositoryName===n,t[7]=n,t[8]=e),_=g.find(e),t[4]=n,t[5]=g,t[6]=_}else _=t[6];let v=_,y;t[9]===l.imageDetails?y=t[10]:(y=l.imageDetails??[],t[9]=l.imageDetails,t[10]=y);let b=y,S;t[11]!==d||t[12]!==m||t[13]!==n?(S=async function(){if(m)try{await d.mutateAsync({repositoryName:n,imageIds:[{imageDigest:m}]}),h(null)}catch{}},t[11]=d,t[12]=m,t[13]=n,t[14]=S):S=t[14];let C=S,w=v?.repositoryUri,E;t[15]!==n||t[16]!==w?(E=(0,V.jsx)(T,{subtitle:w,title:n}),t[15]=n,t[16]=w,t[17]=E):E=t[17];let R;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,V.jsx)(`div`,{className:`mb-4`,children:(0,V.jsx)(a,{className:`text-sm text-primary hover:underline`,to:`/ecr/list-repositories`,children:`← Back to repositories`})}),t[18]=R):R=t[18];let te;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,V.jsxs)(I,{children:[(0,V.jsx)(F,{value:`summary`,children:`Summary`}),(0,V.jsx)(F,{value:`images`,children:`Images`}),(0,V.jsx)(F,{value:`lifecycle`,children:`Lifecycle`}),(0,V.jsx)(F,{value:`scan`,children:`Scan`}),(0,V.jsx)(F,{value:`permissions`,children:`Permissions`})]}),t[19]=te):te=t[19];let ne=v?.imageTagMutability,re=v?.repositoryUri,U;t[20]!==n||t[21]!==ne||t[22]!==re?(U=(0,V.jsx)(L,{value:`summary`,children:(0,V.jsx)(G,{imageTagMutability:ne,repositoryName:n,repositoryUri:re})}),t[20]=n,t[21]=ne,t[22]=re,t[23]=U):U=t[23];let W;t[24]===b?W=t[25]:(W=(0,V.jsx)(L,{value:`images`,children:b.length>0?(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,V.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tags`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Digest`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Size`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pushed`}),(0,V.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,V.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,V.jsx)(`tbody`,{children:b.map(e=>{if(!e.imageDigest)return null;let t=e.imageDigest;return(0,V.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,V.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTags&&e.imageTags.length>0?e.imageTags.join(`, `):``}),(0,V.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[t.slice(0,19),`…`]}),(0,V.jsx)(`td`,{className:`px-4 py-2`,children:s(e.imageSizeInBytes??0)}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:o(e.imagePushedAt)}),(0,V.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,V.jsx)(u,{onClick:()=>{h(t)},size:`sm`,variant:`destructive`,children:`Delete`})})]},t)})})]})}):(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`No images pushed yet.`})}),t[24]=b,t[25]=W);let q;t[26]===n?q=t[27]:(q=(0,V.jsx)(L,{value:`lifecycle`,children:(0,V.jsx)(H,{repositoryName:n})}),t[26]=n,t[27]=q);let J;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,V.jsx)(L,{value:`scan`,children:(0,V.jsx)(K,{})}),t[28]=J):J=t[28];let Y;t[29]===n?Y=t[30]:(Y=(0,V.jsx)(L,{value:`permissions`,children:(0,V.jsx)(ie,{repositoryName:n})}),t[29]=n,t[30]=Y);let X;t[31]!==U||t[32]!==W||t[33]!==q||t[34]!==Y?(X=(0,V.jsxs)(ee,{defaultValue:`summary`,children:[te,U,W,q,J,Y]}),t[31]=U,t[32]=W,t[33]=q,t[34]=Y,t[35]=X):X=t[35];let Z;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(Z=e=>{e||h(null)},t[36]=Z):Z=t[36];let ae=m!==null,oe;t[37]===Symbol.for(`react.memo_cache_sentinel`)?(oe=(0,V.jsxs)(N,{children:[(0,V.jsx)(k,{children:`Delete image?`}),(0,V.jsx)(D,{children:`This permanently deletes the image manifest and any tags pointing at it. This cannot be undone.`})]}),t[37]=oe):oe=t[37];let Q;t[38]===d.error?Q=t[39]:(Q=d.error&&(0,V.jsx)(`p`,{className:`text-sm text-destructive`,children:d.error.message}),t[38]=d.error,t[39]=Q);let se;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(se=(0,V.jsx)(M,{children:`Cancel`}),t[40]=se):se=t[40];let $;t[41]===C?$=t[42]:($=e=>{e.preventDefault(),C()},t[41]=C,t[42]=$);let ce=d.isPending?`Deleting…`:`Delete`,le;t[43]!==d.isPending||t[44]!==$||t[45]!==ce?(le=(0,V.jsxs)(j,{children:[se,(0,V.jsx)(A,{disabled:d.isPending,onClick:$,children:ce})]}),t[43]=d.isPending,t[44]=$,t[45]=ce,t[46]=le):le=t[46];let ue;t[47]!==Q||t[48]!==le?(ue=(0,V.jsxs)(O,{children:[oe,Q,le]}),t[47]=Q,t[48]=le,t[49]=ue):ue=t[49];let de;t[50]!==ae||t[51]!==ue?(de=(0,V.jsx)(P,{onOpenChange:Z,open:ae,children:ue}),t[50]=ae,t[51]=ue,t[52]=de):de=t[52];let fe;return t[53]!==X||t[54]!==de||t[55]!==E?(fe=(0,V.jsxs)(V.Fragment,{children:[E,R,X,de]}),t[53]=X,t[54]=de,t[55]=E,t[56]=fe):fe=t[56],fe}function J(){let e=(0,z.c)(4),{id:t}=w.useParams(),n;e[0]===t?n=e[1]:(n=l(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,V.jsx)(q,{repositoryName:n}),e[2]=n,e[3]=r),r}export{J as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-NWQukwhC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-NWQukwhC.js deleted file mode 100644 index 183fc0510..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-NWQukwhC.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Bg1Viy9x.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-CjKy1JE5.js","assets/camera-bmANKZ8M.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{k as r,l as i}from"./ec2-CWEplLq4.js";var a=e(`/_auth/ec2/(volumes)/describe-volumes/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.id),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-Bg1Viy9x.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Oh4JEFTn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Oh4JEFTn.js deleted file mode 100644 index 15b53d36f..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-Oh4JEFTn.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DS2Njkyk.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/rds-CE3126Ga.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/rds-CyiqRExv.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/tabs-t6sDAEVZ.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/delete-db-snapshot-dialog-D3b3mehr.js","assets/rds-BkKLEWPo.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-delete-dialog-BtEPTeBR.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/rds-events-panel-Di-44bfP.js","assets/rds-tags-tab-CD2X7nDN.js","assets/useQuery-2EKf7AyV.js","assets/tags-editor-BxxtIXTE.js","assets/plus-BodhJT2v.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{g as i,i as a,p as o}from"./rds-CyiqRExv.js";var s=e(`/_auth/rds/(snapshots)/describe-db-snapshots/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id),[s]=await Promise.all([e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`})]),c=s.DBSnapshots?.[0]?.DBSnapshotArn??``;c!==``&&await e.queryClient.query({...i(c),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-DS2Njkyk.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UHU3O-RN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UHU3O-RN.js new file mode 100644 index 000000000..84638be0e --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UHU3O-RN.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CcFqF_zc.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{O as r,j as i}from"./ec2-DYgBhYCJ.js";var a=e(`/_auth/ec2/(vpc)/describe-vpcs/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | VPC | Mulga`}]}),component:t(()=>n(()=>import(`./_id-CcFqF_zc.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UPy9yakk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UPy9yakk.js deleted file mode 100644 index 3ff3ba042..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UPy9yakk.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-DJy6boRC.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/createLucideIcon-BQgzNCBR.js","assets/back-link-CjKy1JE5.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/badge-B_ExXcw2.js","assets/useRender-2pqPQOAE.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DhWukC79.js","assets/launch-template-data-fields-BXmKXe0L.js","assets/textarea-n04EavUm.js","assets/collapsible-k5LqEmTn.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{O as r,c as i,h as a,m as o,o as s,p as c,w as l}from"./ec2-CWEplLq4.js";var u=e(`/_auth/ec2/(launch-templates)/describe-launch-templates/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o(t.id),staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`}),e.queryClient.query({...r,staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | Launch Template | Mulga`}]}),component:t(()=>n(()=>import(`./_id-DJy6boRC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UlVyYgOJ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UlVyYgOJ.js new file mode 100644 index 000000000..a4525ce6c --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-UlVyYgOJ.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-fe9e4vR3.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/ec2-DqNqPeiA.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{C as i}from"./ec2-DYgBhYCJ.js";var a={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};a.node;var o=r(a),s=e(`/_auth/ec2/(security-groups)/describe-security-groups/$id`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...i(t.id),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.id} | Security Group | Mulga`}]}),component:t(()=>n(()=>import(`./_id-fe9e4vR3.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47])),`component`)});export{o as n,s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-aWzBlnyD.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-aWzBlnyD.js new file mode 100644 index 000000000..40af0a2cf --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-aWzBlnyD.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-JoZX5aXX.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/ecr-dHrKdmGg.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ecr-BDgZC3r0.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/badge-6vbuGFqk.js","assets/useRender-C4GZPWLS.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/tabs-BMSqRmVw.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/json-editor-02czSrbA.js","assets/textarea-DV1UO8hv.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{i,n as a,r as o}from"./ecr-dHrKdmGg.js";var s=e(`/_auth/ecr/(repositories)/list-repositories/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...i(r),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Repository | Mulga`}]}),component:t(()=>r(()=>import(`./_id-JoZX5aXX.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-f81dZUoo.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-f81dZUoo.js new file mode 100644 index 000000000..328e9e687 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-f81dZUoo.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-BbrdZrWP.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/elbv2-D0Z7QbU2.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/commandBuilder-BIU1eEwl.js","assets/elbv2-CmXUhudd.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/attributes-editor-B4H40Gb9.js","assets/select-Cn66OoPn.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/tags-editor-1LzJEWry.js","assets/plus-BodhJT2v.js","assets/tabs-BMSqRmVw.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{l as i}from"./ec2-DYgBhYCJ.js";import{c as a,l as o,s}from"./elbv2-CmXUhudd.js";var c=e(`/_auth/ec2/(target-groups)/describe-target-groups/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...s([r]),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Target Group | Mulga`}]}),component:t(()=>r(()=>import(`./_id-BbrdZrWP.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DMT7VmB9.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-fe9e4vR3.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DMT7VmB9.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-fe9e4vR3.js index c176d0dd0..23543727a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-DMT7VmB9.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-fe9e4vR3.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{t as te}from"./back-link-CjKy1JE5.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-B01jpDaX.js";import{t as d}from"./plus-BodhJT2v.js";import{t as f}from"./trash-DVab4pEz.js";import{n as p,t as m}from"./_id--x_QHBJa.js";import{t as h}from"./button-BarTr35m.js";import{t as g}from"./input-6kdUb_DH.js";import{C as _}from"./ec2-CWEplLq4.js";import{F as v,c as y,et as b,l as x,tt as ne}from"./ec2-Ctto2xjU.js";import{t as S}from"./page-heading-vksh_67w.js";import{a as re,i as ie,n as C,t as w}from"./zod-DF_n2ejy.js";import{t as ae}from"./error-banner-DeOeVBKS.js";import{r as T,s as E,t as oe}from"./field-c7GHI5st.js";import{i as se,l as ce,n as le,o as ue,r as de,s as fe,t as pe}from"./alert-dialog-kCQ1W4Rz.js";import{t as D}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{x as me}from"./ec2-DhWukC79.js";var he=r(),A=t(n()),j=e();function M(e){if(!e||e===`-1`)return`All traffic`;let t=e.toUpperCase();return t===`TCP`||t===`UDP`||t===`ICMP`?t:e}function N(e,t,n){return!n||n===`-1`||e===void 0||t===void 0||e===-1&&t===-1?`All`:e===t?e.toString():`${e}-${t}`}function P(e){let t=(0,he.c)(87),{open:n,onOpenChange:r,direction:i,groupId:a}=e,ee=x(),te=y(),o=i===`ingress`?ee:te,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s={resolver:w(me),defaultValues:{ipProtocol:`tcp`,fromPort:0,toPort:0,cidrIp:`0.0.0.0/0`}},t[0]=s):s=t[0];let{control:c,handleSubmit:l,register:u,reset:d,formState:f}=ie(s),{errors:p}=f,m;t[1]===c?m=t[2]:(m={control:c,name:`ipProtocol`},t[1]=c,t[2]=m);let h=re(m),_=h===`-1`||h===`icmp`,v;t[3]!==a||t[4]!==o||t[5]!==r||t[6]!==_||t[7]!==d?(v=async e=>{let t={groupId:a,ipProtocol:e.ipProtocol,fromPort:_?-1:e.fromPort,toPort:_?-1:e.toPort,cidrIp:e.cidrIp};await o.mutateAsync(t),d(),r(!1)},t[3]=a,t[4]=o,t[5]=r,t[6]=_,t[7]=d,t[8]=v):v=t[8];let b=v,ne=i===`ingress`?`Inbound`:`Outbound`,S;t[9]===ne?S=t[10]:(S=(0,j.jsx)(fe,{children:(0,j.jsxs)(ce,{children:[`Add `,ne,` Rule`]})}),t[9]=ne,t[10]=S);let D;t[11]===o.error?D=t[12]:(D=o.error&&(0,j.jsx)(ae,{error:o.error,msg:`Failed to add rule`}),t[11]=o.error,t[12]=D);let O;t[13]!==l||t[14]!==b?(O=l(b),t[13]=l,t[14]=b,t[15]=O):O=t[15];let k;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`ipProtocol`,children:`Protocol`})}),t[16]=k):k=t[16];let A;t[17]===c?A=t[18]:(A=(0,j.jsx)(C,{control:c,name:`ipProtocol`,render:ge}),t[17]=c,t[18]=A);let M;t[19]===p.ipProtocol?M=t[20]:(M=(0,j.jsx)(T,{errors:[p.ipProtocol]}),t[19]=p.ipProtocol,t[20]=M);let N;t[21]!==A||t[22]!==M?(N=(0,j.jsxs)(oe,{children:[k,A,M]}),t[21]=A,t[22]=M,t[23]=N):N=t[23];let P;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`fromPort`,children:`From Port`})}),t[24]=P):P=t[24];let _e=!!p.fromPort,F;t[25]===u?F=t[26]:(F=u(`fromPort`,{valueAsNumber:!0}),t[25]=u,t[26]=F);let I;t[27]!==_||t[28]!==_e||t[29]!==F?(I=(0,j.jsx)(g,{"aria-invalid":_e,disabled:_,id:`fromPort`,type:`number`,...F}),t[27]=_,t[28]=_e,t[29]=F,t[30]=I):I=t[30];let L;t[31]===p.fromPort?L=t[32]:(L=(0,j.jsx)(T,{errors:[p.fromPort]}),t[31]=p.fromPort,t[32]=L);let R;t[33]!==I||t[34]!==L?(R=(0,j.jsxs)(oe,{children:[P,I,L]}),t[33]=I,t[34]=L,t[35]=R):R=t[35];let ve;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(ve=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`toPort`,children:`To Port`})}),t[36]=ve):ve=t[36];let ye=!!p.toPort,z;t[37]===u?z=t[38]:(z=u(`toPort`,{valueAsNumber:!0}),t[37]=u,t[38]=z);let B;t[39]!==_||t[40]!==ye||t[41]!==z?(B=(0,j.jsx)(g,{"aria-invalid":ye,disabled:_,id:`toPort`,type:`number`,...z}),t[39]=_,t[40]=ye,t[41]=z,t[42]=B):B=t[42];let V;t[43]===p.toPort?V=t[44]:(V=(0,j.jsx)(T,{errors:[p.toPort]}),t[43]=p.toPort,t[44]=V);let H;t[45]!==B||t[46]!==V?(H=(0,j.jsxs)(oe,{children:[ve,B,V]}),t[45]=B,t[46]=V,t[47]=H):H=t[47];let U;t[48]!==R||t[49]!==H?(U=(0,j.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[R,H]}),t[48]=R,t[49]=H,t[50]=U):U=t[50];let be=i===`ingress`?`Source`:`Destination`,W;t[51]===be?W=t[52]:(W=(0,j.jsx)(E,{children:(0,j.jsxs)(`label`,{htmlFor:`cidrIp`,children:[be,` CIDR`]})}),t[51]=be,t[52]=W);let xe=!!p.cidrIp,G;t[53]===u?G=t[54]:(G=u(`cidrIp`),t[53]=u,t[54]=G);let K;t[55]!==xe||t[56]!==G?(K=(0,j.jsx)(g,{"aria-invalid":xe,id:`cidrIp`,placeholder:`0.0.0.0/0`,...G}),t[55]=xe,t[56]=G,t[57]=K):K=t[57];let q;t[58]===p.cidrIp?q=t[59]:(q=(0,j.jsx)(T,{errors:[p.cidrIp]}),t[58]=p.cidrIp,t[59]=q);let J;t[60]!==W||t[61]!==K||t[62]!==q?(J=(0,j.jsxs)(oe,{children:[W,K,q]}),t[60]=W,t[61]=K,t[62]=q,t[63]=J):J=t[63];let Y;t[64]!==N||t[65]!==U||t[66]!==J||t[67]!==O?(Y=(0,j.jsxs)(`form`,{className:`space-y-4`,id:`add-rule-form`,onSubmit:O,children:[N,U,J]}),t[64]=N,t[65]=U,t[66]=J,t[67]=O,t[68]=Y):Y=t[68];let X;t[69]!==o||t[70]!==d?(X=(0,j.jsx)(de,{onClick:()=>{d(),o.reset()},children:`Cancel`}),t[69]=o,t[70]=d,t[71]=X):X=t[71];let Se=o.isPending?`Adding…`:`Add Rule`,Z;t[72]!==o.isPending||t[73]!==Se?(Z=(0,j.jsx)(le,{disabled:o.isPending,form:`add-rule-form`,type:`submit`,children:Se}),t[72]=o.isPending,t[73]=Se,t[74]=Z):Z=t[74];let Q;t[75]!==X||t[76]!==Z?(Q=(0,j.jsxs)(ue,{children:[X,Z]}),t[75]=X,t[76]=Z,t[77]=Q):Q=t[77];let $;t[78]!==Y||t[79]!==Q||t[80]!==S||t[81]!==D?($=(0,j.jsxs)(se,{children:[S,D,Y,Q]}),t[78]=Y,t[79]=Q,t[80]=S,t[81]=D,t[82]=$):$=t[82];let Ce;return t[83]!==r||t[84]!==n||t[85]!==$?(Ce=(0,j.jsx)(pe,{onOpenChange:r,open:n,children:$}),t[83]=r,t[84]=n,t[85]=$,t[86]=Ce):Ce=t[86],Ce}function ge(e){let{field:t}=e;return(0,j.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value,children:[(0,j.jsx)(l,{className:`w-full`,id:`ipProtocol`,children:(0,j.jsx)(o,{})}),(0,j.jsxs)(c,{children:[(0,j.jsx)(s,{value:`tcp`,children:`TCP`}),(0,j.jsx)(s,{value:`udp`,children:`UDP`}),(0,j.jsx)(s,{value:`icmp`,children:`ICMP`}),(0,j.jsx)(s,{value:`-1`,children:`All traffic (-1)`})]})]})}function _e(e){return[...(e.IpRanges??[]).map(e=>({kind:`cidr`,value:e.CidrIp??``})),...(e.UserIdGroupPairs??[]).map(e=>({kind:`group`,value:e.GroupId??``}))]}function F(e){let t=(0,he.c)(42),{rule:n,source:r,groupId:i,direction:a}=e,ee=ne(),te=b(),o=a===`ingress`?ee:te,s;t[0]!==i||t[1]!==o||t[2]!==n.FromPort||t[3]!==n.IpProtocol||t[4]!==n.ToPort||t[5]!==r.kind||t[6]!==r.value?(s=async()=>{try{await o.mutateAsync({groupId:i,ipProtocol:n.IpProtocol??`-1`,fromPort:n.FromPort??-1,toPort:n.ToPort??-1,...r.kind===`group`?{sourceGroupId:r.value}:{cidrIp:r.value}})}catch{}},t[0]=i,t[1]=o,t[2]=n.FromPort,t[3]=n.IpProtocol,t[4]=n.ToPort,t[5]=r.kind,t[6]=r.value,t[7]=s):s=t[7];let c=s,l=r.kind===`group`&&r.value===i?`${r.value} (this security group)`:r.value,u;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`Protocol: `}),t[8]=u):u=t[8];let d;t[9]===n.IpProtocol?d=t[10]:(d=M(n.IpProtocol),t[9]=n.IpProtocol,t[10]=d);let f;t[11]===d?f=t[12]:(f=(0,j.jsxs)(`div`,{children:[u,d]}),t[11]=d,t[12]=f);let m;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`Port Range: `}),t[13]=m):m=t[13];let g;t[14]!==n.FromPort||t[15]!==n.IpProtocol||t[16]!==n.ToPort?(g=N(n.FromPort,n.ToPort,n.IpProtocol),t[14]=n.FromPort,t[15]=n.IpProtocol,t[16]=n.ToPort,t[17]=g):g=t[17];let _;t[18]===g?_=t[19]:(_=(0,j.jsxs)(`div`,{children:[m,g]}),t[18]=g,t[19]=_);let v=a===`ingress`?`Source`:`Destination`,y;t[20]===v?y=t[21]:(y=(0,j.jsxs)(`span`,{className:`text-muted-foreground`,children:[v,`:`,` `]}),t[20]=v,t[21]=y);let x;t[22]!==l||t[23]!==y?(x=(0,j.jsxs)(`div`,{children:[y,l]}),t[22]=l,t[23]=y,t[24]=x):x=t[24];let S;t[25]!==x||t[26]!==f||t[27]!==_?(S=(0,j.jsxs)(`div`,{className:`grid flex-1 grid-cols-3 gap-4 text-sm`,children:[f,_,x]}),t[25]=x,t[26]=f,t[27]=_,t[28]=S):S=t[28];let re,ie;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(re=(0,j.jsx)(p,{className:`size-3`}),ie=(0,j.jsx)(`span`,{className:`sr-only`,children:`Remove rule`}),t[29]=re,t[30]=ie):(re=t[29],ie=t[30]);let C;t[31]!==c||t[32]!==o.isPending?(C=(0,j.jsxs)(h,{disabled:o.isPending,onClick:c,size:`icon-xs`,variant:`ghost`,children:[re,ie]}),t[31]=c,t[32]=o.isPending,t[33]=C):C=t[33];let w;t[34]!==S||t[35]!==C?(w=(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3 last:border-b-0`,children:[S,C]}),t[34]=S,t[35]=C,t[36]=w):w=t[36];let T;t[37]===o.error?T=t[38]:(T=o.error&&(0,j.jsx)(`div`,{className:`px-4 pb-2`,children:(0,j.jsx)(ae,{error:o.error,msg:`Failed to remove rule`})}),t[37]=o.error,t[38]=T);let E;return t[39]!==w||t[40]!==T?(E=(0,j.jsxs)(`div`,{className:`space-y-0`,children:[w,T]}),t[39]=w,t[40]=T,t[41]=E):E=t[41],E}function I(){let{id:e}=m.useParams(),t=ee(),{data:n}=i(_(e)),r=n.SecurityGroups?.[0],o=v(),[s,c]=(0,A.useState)(!1),[l,u]=(0,A.useState)(!1),[p,g]=(0,A.useState)(!1),y=async()=>{try{await o.mutateAsync(e),t({to:`/ec2/describe-security-groups`})}finally{c(!1)}};if(!r?.GroupId)return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(te,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),(0,j.jsx)(`p`,{className:`text-muted-foreground`,children:`Security group not found.`})]});let b=r.IpPermissions??[],x=r.IpPermissionsEgress??[];return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(te,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),o.error&&(0,j.jsx)(ae,{error:o.error,msg:`Failed to delete security group`}),(0,j.jsxs)(`div`,{className:`space-y-6`,children:[(0,j.jsx)(S,{actions:(0,j.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,j.jsxs)(h,{onClick:()=>{c(!0)},size:`sm`,variant:`destructive`,children:[(0,j.jsx)(f,{className:`size-4`}),`Delete`]})}),subtitle:`Security Group Details`,title:r.GroupName?`${r.GroupId} (${r.GroupName})`:r.GroupId}),(0,j.jsxs)(O,{children:[(0,j.jsx)(O.Header,{children:`Security Group Information`}),(0,j.jsxs)(O.Content,{children:[(0,j.jsx)(k,{label:`Group ID`,value:r.GroupId}),(0,j.jsx)(k,{label:`Group Name`,value:r.GroupName}),(0,j.jsx)(k,{label:`Description`,value:r.Description}),(0,j.jsx)(k,{label:`VPC ID`,value:r.VpcId?(0,j.jsx)(a,{className:`text-primary hover:underline`,params:{id:r.VpcId},to:`/ec2/describe-vpcs/$id`,children:r.VpcId}):`—`}),(0,j.jsx)(k,{label:`Owner ID`,value:r.OwnerId})]})]}),(0,j.jsxs)(O,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b p-4`,children:[(0,j.jsxs)(`h2`,{className:`font-semibold`,children:[`Inbound Rules (`,b.length,`)`]}),(0,j.jsxs)(h,{onClick:()=>{u(!0)},size:`sm`,variant:`outline`,children:[(0,j.jsx)(d,{className:`size-4`}),`Add Rule`]})]}),b.length>0?(0,j.jsx)(`div`,{children:b.flatMap(e=>_e(e).map(t=>(0,j.jsx)(F,{direction:`ingress`,groupId:r.GroupId??``,rule:e,source:t},`${e.IpProtocol}-${e.FromPort}-${e.ToPort}-${t.kind}-${t.value}`)))}):(0,j.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:`No inbound rules.`})]}),(0,j.jsxs)(O,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b p-4`,children:[(0,j.jsxs)(`h2`,{className:`font-semibold`,children:[`Outbound Rules (`,x.length,`)`]}),(0,j.jsxs)(h,{onClick:()=>{g(!0)},size:`sm`,variant:`outline`,children:[(0,j.jsx)(d,{className:`size-4`}),`Add Rule`]})]}),x.length>0?(0,j.jsx)(`div`,{children:x.flatMap(e=>_e(e).map(t=>(0,j.jsx)(F,{direction:`egress`,groupId:r.GroupId??``,rule:e,source:t},`${e.IpProtocol}-${e.FromPort}-${e.ToPort}-${t.kind}-${t.value}`)))}):(0,j.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:`No outbound rules.`})]})]}),(0,j.jsx)(D,{description:`Are you sure you want to delete the security group "${r.GroupId}"? This action cannot be undone.`,isPending:o.isPending,onConfirm:y,onOpenChange:c,open:s,title:`Delete Security Group`}),(0,j.jsx)(P,{direction:`ingress`,groupId:r.GroupId,onOpenChange:u,open:l}),(0,j.jsx)(P,{direction:`egress`,groupId:r.GroupId,onOpenChange:g,open:p})]})}export{I as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{t as te}from"./back-link-wsXUoJ12.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-Cn66OoPn.js";import{t as d}from"./plus-BodhJT2v.js";import{t as f}from"./trash-DVab4pEz.js";import{n as p,t as m}from"./_id-UlVyYgOJ.js";import{t as h}from"./button-qf9lLJ2x.js";import{t as g}from"./input-D3aUBtS6.js";import{C as _}from"./ec2-DYgBhYCJ.js";import{F as v,c as y,et as b,l as x,tt as ne}from"./ec2-Csn1kwZ8.js";import{t as S}from"./page-heading-vksh_67w.js";import{a as re,i as ie,n as C,t as w}from"./zod-A4qtKH_p.js";import{t as ae}from"./error-banner-DeOeVBKS.js";import{r as T,s as E,t as oe}from"./field-CS-ql6du.js";import{i as se,l as ce,n as le,o as ue,r as de,s as fe,t as pe}from"./alert-dialog-jxylPXwR.js";import{t as D}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as O,t as k}from"./detail-row-DNBRlVeK.js";import{x as me}from"./ec2-DqNqPeiA.js";var he=r(),A=t(n()),j=e();function M(e){if(!e||e===`-1`)return`All traffic`;let t=e.toUpperCase();return t===`TCP`||t===`UDP`||t===`ICMP`?t:e}function N(e,t,n){return!n||n===`-1`||e===void 0||t===void 0||e===-1&&t===-1?`All`:e===t?e.toString():`${e}-${t}`}function P(e){let t=(0,he.c)(87),{open:n,onOpenChange:r,direction:i,groupId:a}=e,ee=x(),te=y(),o=i===`ingress`?ee:te,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s={resolver:w(me),defaultValues:{ipProtocol:`tcp`,fromPort:0,toPort:0,cidrIp:`0.0.0.0/0`}},t[0]=s):s=t[0];let{control:c,handleSubmit:l,register:u,reset:d,formState:f}=ie(s),{errors:p}=f,m;t[1]===c?m=t[2]:(m={control:c,name:`ipProtocol`},t[1]=c,t[2]=m);let h=re(m),_=h===`-1`||h===`icmp`,v;t[3]!==a||t[4]!==o||t[5]!==r||t[6]!==_||t[7]!==d?(v=async e=>{let t={groupId:a,ipProtocol:e.ipProtocol,fromPort:_?-1:e.fromPort,toPort:_?-1:e.toPort,cidrIp:e.cidrIp};await o.mutateAsync(t),d(),r(!1)},t[3]=a,t[4]=o,t[5]=r,t[6]=_,t[7]=d,t[8]=v):v=t[8];let b=v,ne=i===`ingress`?`Inbound`:`Outbound`,S;t[9]===ne?S=t[10]:(S=(0,j.jsx)(fe,{children:(0,j.jsxs)(ce,{children:[`Add `,ne,` Rule`]})}),t[9]=ne,t[10]=S);let D;t[11]===o.error?D=t[12]:(D=o.error&&(0,j.jsx)(ae,{error:o.error,msg:`Failed to add rule`}),t[11]=o.error,t[12]=D);let O;t[13]!==l||t[14]!==b?(O=l(b),t[13]=l,t[14]=b,t[15]=O):O=t[15];let k;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`ipProtocol`,children:`Protocol`})}),t[16]=k):k=t[16];let A;t[17]===c?A=t[18]:(A=(0,j.jsx)(C,{control:c,name:`ipProtocol`,render:ge}),t[17]=c,t[18]=A);let M;t[19]===p.ipProtocol?M=t[20]:(M=(0,j.jsx)(T,{errors:[p.ipProtocol]}),t[19]=p.ipProtocol,t[20]=M);let N;t[21]!==A||t[22]!==M?(N=(0,j.jsxs)(oe,{children:[k,A,M]}),t[21]=A,t[22]=M,t[23]=N):N=t[23];let P;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`fromPort`,children:`From Port`})}),t[24]=P):P=t[24];let _e=!!p.fromPort,F;t[25]===u?F=t[26]:(F=u(`fromPort`,{valueAsNumber:!0}),t[25]=u,t[26]=F);let I;t[27]!==_||t[28]!==_e||t[29]!==F?(I=(0,j.jsx)(g,{"aria-invalid":_e,disabled:_,id:`fromPort`,type:`number`,...F}),t[27]=_,t[28]=_e,t[29]=F,t[30]=I):I=t[30];let L;t[31]===p.fromPort?L=t[32]:(L=(0,j.jsx)(T,{errors:[p.fromPort]}),t[31]=p.fromPort,t[32]=L);let R;t[33]!==I||t[34]!==L?(R=(0,j.jsxs)(oe,{children:[P,I,L]}),t[33]=I,t[34]=L,t[35]=R):R=t[35];let ve;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(ve=(0,j.jsx)(E,{children:(0,j.jsx)(`label`,{htmlFor:`toPort`,children:`To Port`})}),t[36]=ve):ve=t[36];let ye=!!p.toPort,z;t[37]===u?z=t[38]:(z=u(`toPort`,{valueAsNumber:!0}),t[37]=u,t[38]=z);let B;t[39]!==_||t[40]!==ye||t[41]!==z?(B=(0,j.jsx)(g,{"aria-invalid":ye,disabled:_,id:`toPort`,type:`number`,...z}),t[39]=_,t[40]=ye,t[41]=z,t[42]=B):B=t[42];let V;t[43]===p.toPort?V=t[44]:(V=(0,j.jsx)(T,{errors:[p.toPort]}),t[43]=p.toPort,t[44]=V);let H;t[45]!==B||t[46]!==V?(H=(0,j.jsxs)(oe,{children:[ve,B,V]}),t[45]=B,t[46]=V,t[47]=H):H=t[47];let U;t[48]!==R||t[49]!==H?(U=(0,j.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[R,H]}),t[48]=R,t[49]=H,t[50]=U):U=t[50];let be=i===`ingress`?`Source`:`Destination`,W;t[51]===be?W=t[52]:(W=(0,j.jsx)(E,{children:(0,j.jsxs)(`label`,{htmlFor:`cidrIp`,children:[be,` CIDR`]})}),t[51]=be,t[52]=W);let xe=!!p.cidrIp,G;t[53]===u?G=t[54]:(G=u(`cidrIp`),t[53]=u,t[54]=G);let K;t[55]!==xe||t[56]!==G?(K=(0,j.jsx)(g,{"aria-invalid":xe,id:`cidrIp`,placeholder:`0.0.0.0/0`,...G}),t[55]=xe,t[56]=G,t[57]=K):K=t[57];let q;t[58]===p.cidrIp?q=t[59]:(q=(0,j.jsx)(T,{errors:[p.cidrIp]}),t[58]=p.cidrIp,t[59]=q);let J;t[60]!==W||t[61]!==K||t[62]!==q?(J=(0,j.jsxs)(oe,{children:[W,K,q]}),t[60]=W,t[61]=K,t[62]=q,t[63]=J):J=t[63];let Y;t[64]!==N||t[65]!==U||t[66]!==J||t[67]!==O?(Y=(0,j.jsxs)(`form`,{className:`space-y-4`,id:`add-rule-form`,onSubmit:O,children:[N,U,J]}),t[64]=N,t[65]=U,t[66]=J,t[67]=O,t[68]=Y):Y=t[68];let X;t[69]!==o||t[70]!==d?(X=(0,j.jsx)(de,{onClick:()=>{d(),o.reset()},children:`Cancel`}),t[69]=o,t[70]=d,t[71]=X):X=t[71];let Se=o.isPending?`Adding…`:`Add Rule`,Z;t[72]!==o.isPending||t[73]!==Se?(Z=(0,j.jsx)(le,{disabled:o.isPending,form:`add-rule-form`,type:`submit`,children:Se}),t[72]=o.isPending,t[73]=Se,t[74]=Z):Z=t[74];let Q;t[75]!==X||t[76]!==Z?(Q=(0,j.jsxs)(ue,{children:[X,Z]}),t[75]=X,t[76]=Z,t[77]=Q):Q=t[77];let $;t[78]!==Y||t[79]!==Q||t[80]!==S||t[81]!==D?($=(0,j.jsxs)(se,{children:[S,D,Y,Q]}),t[78]=Y,t[79]=Q,t[80]=S,t[81]=D,t[82]=$):$=t[82];let Ce;return t[83]!==r||t[84]!==n||t[85]!==$?(Ce=(0,j.jsx)(pe,{onOpenChange:r,open:n,children:$}),t[83]=r,t[84]=n,t[85]=$,t[86]=Ce):Ce=t[86],Ce}function ge(e){let{field:t}=e;return(0,j.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value,children:[(0,j.jsx)(l,{className:`w-full`,id:`ipProtocol`,children:(0,j.jsx)(o,{})}),(0,j.jsxs)(c,{children:[(0,j.jsx)(s,{value:`tcp`,children:`TCP`}),(0,j.jsx)(s,{value:`udp`,children:`UDP`}),(0,j.jsx)(s,{value:`icmp`,children:`ICMP`}),(0,j.jsx)(s,{value:`-1`,children:`All traffic (-1)`})]})]})}function _e(e){return[...(e.IpRanges??[]).map(e=>({kind:`cidr`,value:e.CidrIp??``})),...(e.UserIdGroupPairs??[]).map(e=>({kind:`group`,value:e.GroupId??``}))]}function F(e){let t=(0,he.c)(42),{rule:n,source:r,groupId:i,direction:a}=e,ee=ne(),te=b(),o=a===`ingress`?ee:te,s;t[0]!==i||t[1]!==o||t[2]!==n.FromPort||t[3]!==n.IpProtocol||t[4]!==n.ToPort||t[5]!==r.kind||t[6]!==r.value?(s=async()=>{try{await o.mutateAsync({groupId:i,ipProtocol:n.IpProtocol??`-1`,fromPort:n.FromPort??-1,toPort:n.ToPort??-1,...r.kind===`group`?{sourceGroupId:r.value}:{cidrIp:r.value}})}catch{}},t[0]=i,t[1]=o,t[2]=n.FromPort,t[3]=n.IpProtocol,t[4]=n.ToPort,t[5]=r.kind,t[6]=r.value,t[7]=s):s=t[7];let c=s,l=r.kind===`group`&&r.value===i?`${r.value} (this security group)`:r.value,u;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`Protocol: `}),t[8]=u):u=t[8];let d;t[9]===n.IpProtocol?d=t[10]:(d=M(n.IpProtocol),t[9]=n.IpProtocol,t[10]=d);let f;t[11]===d?f=t[12]:(f=(0,j.jsxs)(`div`,{children:[u,d]}),t[11]=d,t[12]=f);let m;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`Port Range: `}),t[13]=m):m=t[13];let g;t[14]!==n.FromPort||t[15]!==n.IpProtocol||t[16]!==n.ToPort?(g=N(n.FromPort,n.ToPort,n.IpProtocol),t[14]=n.FromPort,t[15]=n.IpProtocol,t[16]=n.ToPort,t[17]=g):g=t[17];let _;t[18]===g?_=t[19]:(_=(0,j.jsxs)(`div`,{children:[m,g]}),t[18]=g,t[19]=_);let v=a===`ingress`?`Source`:`Destination`,y;t[20]===v?y=t[21]:(y=(0,j.jsxs)(`span`,{className:`text-muted-foreground`,children:[v,`:`,` `]}),t[20]=v,t[21]=y);let x;t[22]!==l||t[23]!==y?(x=(0,j.jsxs)(`div`,{children:[y,l]}),t[22]=l,t[23]=y,t[24]=x):x=t[24];let S;t[25]!==x||t[26]!==f||t[27]!==_?(S=(0,j.jsxs)(`div`,{className:`grid flex-1 grid-cols-3 gap-4 text-sm`,children:[f,_,x]}),t[25]=x,t[26]=f,t[27]=_,t[28]=S):S=t[28];let re,ie;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(re=(0,j.jsx)(p,{className:`size-3`}),ie=(0,j.jsx)(`span`,{className:`sr-only`,children:`Remove rule`}),t[29]=re,t[30]=ie):(re=t[29],ie=t[30]);let C;t[31]!==c||t[32]!==o.isPending?(C=(0,j.jsxs)(h,{disabled:o.isPending,onClick:c,size:`icon-xs`,variant:`ghost`,children:[re,ie]}),t[31]=c,t[32]=o.isPending,t[33]=C):C=t[33];let w;t[34]!==S||t[35]!==C?(w=(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3 last:border-b-0`,children:[S,C]}),t[34]=S,t[35]=C,t[36]=w):w=t[36];let T;t[37]===o.error?T=t[38]:(T=o.error&&(0,j.jsx)(`div`,{className:`px-4 pb-2`,children:(0,j.jsx)(ae,{error:o.error,msg:`Failed to remove rule`})}),t[37]=o.error,t[38]=T);let E;return t[39]!==w||t[40]!==T?(E=(0,j.jsxs)(`div`,{className:`space-y-0`,children:[w,T]}),t[39]=w,t[40]=T,t[41]=E):E=t[41],E}function I(){let{id:e}=m.useParams(),t=ee(),{data:n}=i(_(e)),r=n.SecurityGroups?.[0],o=v(),[s,c]=(0,A.useState)(!1),[l,u]=(0,A.useState)(!1),[p,g]=(0,A.useState)(!1),y=async()=>{try{await o.mutateAsync(e),t({to:`/ec2/describe-security-groups`})}finally{c(!1)}};if(!r?.GroupId)return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(te,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),(0,j.jsx)(`p`,{className:`text-muted-foreground`,children:`Security group not found.`})]});let b=r.IpPermissions??[],x=r.IpPermissionsEgress??[];return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(te,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),o.error&&(0,j.jsx)(ae,{error:o.error,msg:`Failed to delete security group`}),(0,j.jsxs)(`div`,{className:`space-y-6`,children:[(0,j.jsx)(S,{actions:(0,j.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,j.jsxs)(h,{onClick:()=>{c(!0)},size:`sm`,variant:`destructive`,children:[(0,j.jsx)(f,{className:`size-4`}),`Delete`]})}),subtitle:`Security Group Details`,title:r.GroupName?`${r.GroupId} (${r.GroupName})`:r.GroupId}),(0,j.jsxs)(O,{children:[(0,j.jsx)(O.Header,{children:`Security Group Information`}),(0,j.jsxs)(O.Content,{children:[(0,j.jsx)(k,{label:`Group ID`,value:r.GroupId}),(0,j.jsx)(k,{label:`Group Name`,value:r.GroupName}),(0,j.jsx)(k,{label:`Description`,value:r.Description}),(0,j.jsx)(k,{label:`VPC ID`,value:r.VpcId?(0,j.jsx)(a,{className:`text-primary hover:underline`,params:{id:r.VpcId},to:`/ec2/describe-vpcs/$id`,children:r.VpcId}):`—`}),(0,j.jsx)(k,{label:`Owner ID`,value:r.OwnerId})]})]}),(0,j.jsxs)(O,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b p-4`,children:[(0,j.jsxs)(`h2`,{className:`font-semibold`,children:[`Inbound Rules (`,b.length,`)`]}),(0,j.jsxs)(h,{onClick:()=>{u(!0)},size:`sm`,variant:`outline`,children:[(0,j.jsx)(d,{className:`size-4`}),`Add Rule`]})]}),b.length>0?(0,j.jsx)(`div`,{children:b.flatMap(e=>_e(e).map(t=>(0,j.jsx)(F,{direction:`ingress`,groupId:r.GroupId??``,rule:e,source:t},`${e.IpProtocol}-${e.FromPort}-${e.ToPort}-${t.kind}-${t.value}`)))}):(0,j.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:`No inbound rules.`})]}),(0,j.jsxs)(O,{children:[(0,j.jsxs)(`div`,{className:`flex items-center justify-between border-b p-4`,children:[(0,j.jsxs)(`h2`,{className:`font-semibold`,children:[`Outbound Rules (`,x.length,`)`]}),(0,j.jsxs)(h,{onClick:()=>{g(!0)},size:`sm`,variant:`outline`,children:[(0,j.jsx)(d,{className:`size-4`}),`Add Rule`]})]}),x.length>0?(0,j.jsx)(`div`,{children:x.flatMap(e=>_e(e).map(t=>(0,j.jsx)(F,{direction:`egress`,groupId:r.GroupId??``,rule:e,source:t},`${e.IpProtocol}-${e.FromPort}-${e.ToPort}-${t.kind}-${t.value}`)))}):(0,j.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:`No outbound rules.`})]})]}),(0,j.jsx)(D,{description:`Are you sure you want to delete the security group "${r.GroupId}"? This action cannot be undone.`,isPending:o.isPending,onConfirm:y,onOpenChange:c,open:s,title:`Delete Security Group`}),(0,j.jsx)(P,{direction:`ingress`,groupId:r.GroupId,onOpenChange:u,open:l}),(0,j.jsx)(P,{direction:`egress`,groupId:r.GroupId,onOpenChange:g,open:p})]})}export{I as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-jxfo70ry.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-jxfo70ry.js deleted file mode 100644 index b13a5d970..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-jxfo70ry.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-JbQAScgH.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/pencil-BhhTGjjd.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/acm-BYWQapOv.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/certificate-import-dialog-UyecRuny.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/ec2-CWEplLq4.js","assets/elbv2-K4aD09h6.js","assets/commandBuilder-DzFUl2wS.js","assets/elbv2-DSjTzB2q.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/elbv2-CtsfBUSG.js","assets/attributes-editor-B4A8SZjs.js","assets/tags-editor-BxxtIXTE.js","assets/plus-BodhJT2v.js","assets/tabs-t6sDAEVZ.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{O as i}from"./ec2-CWEplLq4.js";import{i as a,n as o,r as s,s as c,u as l}from"./elbv2-DSjTzB2q.js";var u=e(`/_auth/ec2/(load-balancers)/describe-load-balancers/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...c([r]),staleTime:`static`}),e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Load Balancer | Mulga`}]}),component:t(()=>r(()=>import(`./_id-JbQAScgH.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])),`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-njlqJfO-.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-njlqJfO-.js deleted file mode 100644 index e3b0b1745..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-njlqJfO-.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-Dvcd5p-t.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/copy-CamWo-pg.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";import{T as i,b as a}from"./ec2-CWEplLq4.js";var o={name:`image`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]};o.node;var s=r(o),c=e(`/_auth/ec2/(snapshots)/describe-snapshots/$id`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...i(t.id),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.id} | EC2 | Mulga`}]}),component:t(()=>n(()=>import(`./_id-Dvcd5p-t.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),`component`)});export{s as n,c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-oini5BVy.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-oini5BVy.js new file mode 100644 index 000000000..d1f4fdca5 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-oini5BVy.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-D_0Cqrul.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/rds-DIuGt87z.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/rds-Ca8CaJkU.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/tabs-BMSqRmVw.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/delete-db-snapshot-dialog-elwW83vt.js","assets/rds-DbPUva_R.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-delete-dialog-BWwoVrYv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/rds-events-panel-BwYPSAd5.js","assets/rds-tags-tab-cQPAmoTz.js","assets/useQuery-2EKf7AyV.js","assets/tags-editor-1LzJEWry.js","assets/plus-BodhJT2v.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{g as i,i as a,p as o}from"./rds-Ca8CaJkU.js";var s=e(`/_auth/rds/(snapshots)/describe-db-snapshots/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id),[s]=await Promise.all([e.queryClient.query({...a(r),staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`})]),c=s.DBSnapshots?.[0]?.DBSnapshotArn??``;c!==``&&await e.queryClient.query({...i(c),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.id)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_id-D_0Cqrul.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-v23tv1cK.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-v23tv1cK.js deleted file mode 100644 index ab5acc00a..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_id-v23tv1cK.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_id-CnqUYd1x.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/ecr-BFtKzkrF.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ecr-F-ANqxrm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/badge-B_ExXcw2.js","assets/useRender-2pqPQOAE.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/tabs-t6sDAEVZ.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/json-editor-Bwbz8mfn.js","assets/textarea-n04EavUm.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{i,n as a,r as o}from"./ecr-BFtKzkrF.js";var s=e(`/_auth/ecr/(repositories)/list-repositories/$id`)({loader:async({context:e,params:t})=>{let r=n(t.id);await Promise.all([e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o(r),staleTime:`static`}),e.queryClient.query({...i(r),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${n(e.id)} | Repository | Mulga`}]}),component:t(()=>r(()=>import(`./_id-CnqUYd1x.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DIUtYtG8.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DIUtYtG8.js deleted file mode 100644 index e555112ef..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DIUtYtG8.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_instanceProfileName-BiW1Enxg.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/iam-CKOkzDco.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/queryOptions-Dfvzj6n2.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{u as r,y as i}from"./iam-CVg27y22.js";var a=e(`/_auth/iam/(instance-profiles)/list-instance-profiles/$instanceProfileName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.instanceProfileName),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.instanceProfileName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_instanceProfileName-BiW1Enxg.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-BiW1Enxg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DJcYjFw4.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-BiW1Enxg.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DJcYjFw4.js index 14c098067..8dbf3f63c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-BiW1Enxg.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DJcYjFw4.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{D as u,h as d,t as f}from"./iam-CKOkzDco.js";import{u as p,y as m}from"./iam-CVg27y22.js";import{t as h}from"./_instanceProfileName-DIUtYtG8.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as y,t as b}from"./detail-row-DNBRlVeK.js";var x=t(n()),S=e();function C(){let{instanceProfileName:e}=h.useParams(),t=a(),{data:n}=r(p(e)),{data:C}=r(m),w=d(),T=f(),E=u(),[D,O]=(0,x.useState)(!1),[k,A]=(0,x.useState)(!1),[j,M]=(0,x.useState)(null),N=n.InstanceProfile,P=N?.Roles??[],F=C.Roles??[],I=new Set(P.map(e=>e.RoleName)),L=F.filter(e=>e.RoleName&&!I.has(e.RoleName)),R=async()=>{try{await w.mutateAsync(e),t({to:`/iam/list-instance-profiles`})}finally{O(!1)}},z=async t=>{await T.mutateAsync({instanceProfileName:e,roleName:t}),A(!1)},B=async t=>{M(t);try{await E.mutateAsync({instanceProfileName:e,roleName:t})}finally{M(null)}};return N?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),w.error&&(0,S.jsx)(_,{error:w.error,msg:`Failed to delete instance profile`}),T.error&&(0,S.jsx)(_,{error:T.error,msg:`Failed to add role`}),E.error&&(0,S.jsx)(_,{error:E.error,msg:`Failed to remove role`}),(0,S.jsxs)(`div`,{className:`space-y-6`,children:[(0,S.jsx)(g,{actions:(0,S.jsxs)(l,{onClick:()=>{O(!0)},size:`sm`,variant:`destructive`,children:[(0,S.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Instance Profile Details`,title:N.InstanceProfileName??``}),(0,S.jsxs)(y,{children:[(0,S.jsx)(y.Header,{children:`Instance Profile Information`}),(0,S.jsxs)(y.Content,{children:[(0,S.jsx)(b,{label:`Name`,value:N.InstanceProfileName}),(0,S.jsx)(b,{label:`ID`,value:N.InstanceProfileId}),(0,S.jsx)(b,{label:`ARN`,value:N.Arn}),(0,S.jsx)(b,{label:`Path`,value:N.Path}),(0,S.jsx)(b,{label:`Created`,value:o(N.CreateDate)})]})]}),(0,S.jsxs)(y,{children:[(0,S.jsx)(y.Header,{children:(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsx)(`span`,{children:`Roles`}),(0,S.jsx)(l,{onClick:()=>{A(!k)},size:`sm`,children:`Add Role`})]})}),(0,S.jsxs)(y.Content,{children:[k&&L.length>0&&(0,S.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,S.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a role to add:`}),(0,S.jsx)(`div`,{className:`space-y-1`,children:L.map(e=>(0,S.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:T.isPending,onClick:()=>{e.RoleName&&z(e.RoleName)},type:`button`,children:[(0,S.jsx)(`span`,{children:e.RoleName}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.RoleName))})]}),k&&L.length===0&&(0,S.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No roles available to add.`}),P.length>0?(0,S.jsx)(`div`,{className:`col-span-2 space-y-3`,children:P.map(e=>(0,S.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,S.jsx)(i,{className:`text-sm font-medium text-primary hover:underline`,params:{roleName:e.RoleName??``},to:`/iam/list-roles/$roleName`,children:e.RoleName}),(0,S.jsx)(l,{disabled:j===e.RoleName,onClick:()=>{e.RoleName&&B(e.RoleName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.RoleName))}):(0,S.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No roles in this instance profile.`})]})]})]}),(0,S.jsx)(v,{description:`Are you sure you want to delete the instance profile "${e}"? This action cannot be undone. You must remove all roles first.`,isPending:w.isPending,onConfirm:R,onOpenChange:O,open:D,title:`Delete Instance Profile`})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`Instance profile not found.`})]})}export{C as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{D as u,h as d,t as f}from"./iam-DpkrYySm.js";import{u as p,y as m}from"./iam-DmtL7LFe.js";import{t as h}from"./_instanceProfileName-DzTjL4hw.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as y,t as b}from"./detail-row-DNBRlVeK.js";var x=t(n()),S=e();function C(){let{instanceProfileName:e}=h.useParams(),t=a(),{data:n}=r(p(e)),{data:C}=r(m),w=d(),T=f(),E=u(),[D,O]=(0,x.useState)(!1),[k,A]=(0,x.useState)(!1),[j,M]=(0,x.useState)(null),N=n.InstanceProfile,P=N?.Roles??[],F=C.Roles??[],I=new Set(P.map(e=>e.RoleName)),L=F.filter(e=>e.RoleName&&!I.has(e.RoleName)),R=async()=>{try{await w.mutateAsync(e),t({to:`/iam/list-instance-profiles`})}finally{O(!1)}},z=async t=>{await T.mutateAsync({instanceProfileName:e,roleName:t}),A(!1)},B=async t=>{M(t);try{await E.mutateAsync({instanceProfileName:e,roleName:t})}finally{M(null)}};return N?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),w.error&&(0,S.jsx)(_,{error:w.error,msg:`Failed to delete instance profile`}),T.error&&(0,S.jsx)(_,{error:T.error,msg:`Failed to add role`}),E.error&&(0,S.jsx)(_,{error:E.error,msg:`Failed to remove role`}),(0,S.jsxs)(`div`,{className:`space-y-6`,children:[(0,S.jsx)(g,{actions:(0,S.jsxs)(l,{onClick:()=>{O(!0)},size:`sm`,variant:`destructive`,children:[(0,S.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Instance Profile Details`,title:N.InstanceProfileName??``}),(0,S.jsxs)(y,{children:[(0,S.jsx)(y.Header,{children:`Instance Profile Information`}),(0,S.jsxs)(y.Content,{children:[(0,S.jsx)(b,{label:`Name`,value:N.InstanceProfileName}),(0,S.jsx)(b,{label:`ID`,value:N.InstanceProfileId}),(0,S.jsx)(b,{label:`ARN`,value:N.Arn}),(0,S.jsx)(b,{label:`Path`,value:N.Path}),(0,S.jsx)(b,{label:`Created`,value:o(N.CreateDate)})]})]}),(0,S.jsxs)(y,{children:[(0,S.jsx)(y.Header,{children:(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsx)(`span`,{children:`Roles`}),(0,S.jsx)(l,{onClick:()=>{A(!k)},size:`sm`,children:`Add Role`})]})}),(0,S.jsxs)(y.Content,{children:[k&&L.length>0&&(0,S.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,S.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a role to add:`}),(0,S.jsx)(`div`,{className:`space-y-1`,children:L.map(e=>(0,S.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:T.isPending,onClick:()=>{e.RoleName&&z(e.RoleName)},type:`button`,children:[(0,S.jsx)(`span`,{children:e.RoleName}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.RoleName))})]}),k&&L.length===0&&(0,S.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No roles available to add.`}),P.length>0?(0,S.jsx)(`div`,{className:`col-span-2 space-y-3`,children:P.map(e=>(0,S.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,S.jsx)(i,{className:`text-sm font-medium text-primary hover:underline`,params:{roleName:e.RoleName??``},to:`/iam/list-roles/$roleName`,children:e.RoleName}),(0,S.jsx)(l,{disabled:j===e.RoleName,onClick:()=>{e.RoleName&&B(e.RoleName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.RoleName))}):(0,S.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No roles in this instance profile.`})]})]})]}),(0,S.jsx)(v,{description:`Are you sure you want to delete the instance profile "${e}"? This action cannot be undone. You must remove all roles first.`,isPending:w.isPending,onConfirm:R,onOpenChange:O,open:D,title:`Delete Instance Profile`})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`Instance profile not found.`})]})}export{C as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DzTjL4hw.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DzTjL4hw.js new file mode 100644 index 000000000..b5f660f43 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_instanceProfileName-DzTjL4hw.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_instanceProfileName-DJcYjFw4.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/iam-DpkrYySm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/queryOptions-Dfvzj6n2.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{u as r,y as i}from"./iam-DmtL7LFe.js";var a=e(`/_auth/iam/(instance-profiles)/list-instance-profiles/$instanceProfileName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.instanceProfileName),staleTime:`static`}),e.queryClient.query({...i,staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.instanceProfileName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_instanceProfileName-DJcYjFw4.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-7saNV50A.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-7saNV50A.js deleted file mode 100644 index 7f56aae03..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-7saNV50A.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_knowledgeBaseId-D-4HIHuA.js","assets/compiler-runtime-D_vZfn79.js","assets/useMutation-6rdxVQpi.js","assets/removable-Dwr9otKB.js","assets/mutation-BziiWz5u.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/bedrockAgent-BL6fVxPp.js","assets/commandBuilder-BH-JcvCM.js","assets/bedrockAgent-D9Za8qAi.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{r,t as i}from"./bedrockAgent-D9Za8qAi.js";var a=e(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/$knowledgeBaseId`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.knowledgeBaseId),staleTime:`static`}),e.queryClient.query({...i(t.knowledgeBaseId),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.knowledgeBaseId} | Knowledge Base | Mulga`}]}),component:t(()=>n(()=>import(`./_knowledgeBaseId-D-4HIHuA.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-BnI_FbyV.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-BnI_FbyV.js new file mode 100644 index 000000000..0afe2981e --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-BnI_FbyV.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_knowledgeBaseId-DvGL_6Gz.js","assets/compiler-runtime-D_vZfn79.js","assets/useMutation-6rdxVQpi.js","assets/removable-Dwr9otKB.js","assets/mutation-BziiWz5u.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/bedrockAgent-BE9dOa-O.js","assets/commandBuilder-BieYN8IF.js","assets/bedrockAgent-CtELySTw.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{r,t as i}from"./bedrockAgent-CtELySTw.js";var a=e(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/$knowledgeBaseId`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.knowledgeBaseId),staleTime:`static`}),e.queryClient.query({...i(t.knowledgeBaseId),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.knowledgeBaseId} | Knowledge Base | Mulga`}]}),component:t(()=>n(()=>import(`./_knowledgeBaseId-DvGL_6Gz.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-D-4HIHuA.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-DvGL_6Gz.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-D-4HIHuA.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-DvGL_6Gz.js index 6814b205a..84421fd24 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-D-4HIHuA.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_knowledgeBaseId-DvGL_6Gz.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useMutation-6rdxVQpi.js";import{t as a}from"./useQuery-2EKf7AyV.js";import{t as o}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{It as c,_t as l,in as u}from"./cluster-config-xw_Q7X1e.js";import{t as d}from"./back-link-CjKy1JE5.js";import{t as f}from"./trash-DVab4pEz.js";import{t as ee}from"./button-BarTr35m.js";import{t as p}from"./input-6kdUb_DH.js";import{ba as m,i as h,ya as g}from"./awsClient-b0hcP1Iz.js";import{a as _,i as v,r as y,s as b,t as x}from"./bedrockAgent-BL6fVxPp.js";import{n as S,r as C,t as w}from"./bedrockAgent-D9Za8qAi.js";import{t as T}from"./_knowledgeBaseId-7saNV50A.js";import{t as E}from"./page-heading-vksh_67w.js";import{i as D,t as O}from"./zod-DF_n2ejy.js";import{t as k}from"./error-banner-DeOeVBKS.js";import{c as A,r as j,s as M,t as te}from"./field-c7GHI5st.js";import{t as N}from"./textarea-n04EavUm.js";import{t as ne}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as re,t as P}from"./detail-row-DNBRlVeK.js";import{t as ie}from"./state-badge-D1Z6q_OA.js";var F=c(m,`AmazonBedrockAgentRunTimeService`,`BedrockAgentRuntimeClient`,l),ae={},I=(e,t,n,r)=>[],L=class extends F(ae,I,`Retrieve`,g){},oe=r(),se=t(n(),1),R=e(),z=3;function B(e){let t=(0,oe.c)(18),{job:n}=e,r=n.statistics,i=n.ingestionJobId,a;t[0]===n.ingestionJobId?a=t[1]:(a=(0,R.jsx)(`span`,{className:`font-mono`,children:n.ingestionJobId}),t[0]=n.ingestionJobId,t[1]=a);let o;t[2]===n.status?o=t[3]:(o=(0,R.jsx)(ie,{state:n.status}),t[2]=n.status,t[3]=o);let s;t[4]!==a||t[5]!==o?(s=(0,R.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[a,o]}),t[4]=a,t[5]=o,t[6]=s):s=t[6];let c;t[7]===n.startedAt?c=t[8]:(c=u(n.startedAt),t[7]=n.startedAt,t[8]=c);let l;t[9]===c?l=t[10]:(l=(0,R.jsxs)(`div`,{className:`text-muted-foreground`,children:[`Started `,c]}),t[9]=c,t[10]=l);let d;t[11]===r?d=t[12]:(d=r&&(0,R.jsxs)(`div`,{className:`mt-1 text-muted-foreground`,children:[`scanned `,r.numberOfDocumentsScanned??0,` · indexed`,` `,(r.numberOfNewDocumentsIndexed??0)+(r.numberOfModifiedDocumentsIndexed??0),` `,`· failed `,r.numberOfDocumentsFailed??0]}),t[11]=r,t[12]=d);let f;return t[13]!==n.ingestionJobId||t[14]!==s||t[15]!==l||t[16]!==d?(f=(0,R.jsxs)(`div`,{className:`rounded-md border p-2 text-xs`,children:[s,l,d]},i),t[13]=n.ingestionJobId,t[14]=s,t[15]=l,t[16]=d,t[17]=f):f=t[17],f}function ce(e){let t=(0,oe.c)(72),{knowledgeBaseId:n,dataSource:r}=e,i=r.dataSourceId??``,[o,s]=(0,se.useState)(!1),c;t[0]!==i||t[1]!==n?(c=S(n,i),t[0]=i,t[1]=n,t[2]=c):c=t[2];let{data:l,isLoading:u,isError:d,error:p}=a(c),m=y(),h;t[3]===l?.ingestionJobSummaries?h=t[4]:(h=l?.ingestionJobSummaries??[],t[3]=l?.ingestionJobSummaries,t[4]=h);let g,_,v,b,x,C,w,T;if(t[5]!==r.name||t[6]!==r.status||t[7]!==i||t[8]!==m||t[9]!==p?.message||t[10]!==d||t[11]!==u||t[12]!==n||t[13]!==h){let e=h.slice(0,z),a;t[22]!==i||t[23]!==m||t[24]!==n?(a=async function(){try{await m.mutateAsync({dataSourceId:i,knowledgeBaseId:n}),s(!1)}catch{}},t[22]=i,t[23]=m,t[24]=n,t[25]=a):a=t[25],g=a,_=`rounded-lg border bg-card p-4`;let o;t[26]===r.name?o=t[27]:(o=(0,R.jsx)(`h3`,{className:`font-medium`,children:r.name}),t[26]=r.name,t[27]=o);let c;t[28]===i?c=t[29]:(c=(0,R.jsx)(`p`,{className:`font-mono text-xs text-muted-foreground`,children:i}),t[28]=i,t[29]=c);let l;t[30]!==o||t[31]!==c?(l=(0,R.jsxs)(`div`,{children:[o,c]}),t[30]=o,t[31]=c,t[32]=l):l=t[32];let y;t[33]===r.status?y=t[34]:(y=(0,R.jsx)(ie,{state:r.status}),t[33]=r.status,t[34]=y);let S=`Remove data source ${r.name??i}`,E;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>{s(!0)},t[35]=E):E=t[35];let D;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,R.jsx)(f,{className:`size-3.5`}),t[36]=D):D=t[36];let O;t[37]===S?O=t[38]:(O=(0,R.jsx)(ee,{"aria-label":S,onClick:E,size:`icon-sm`,variant:`destructive`,children:D}),t[37]=S,t[38]=O);let k;t[39]!==y||t[40]!==O?(k=(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[y,O]}),t[39]=y,t[40]=O,t[41]=k):k=t[41],t[42]!==l||t[43]!==k?(v=(0,R.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[l,k]}),t[42]=l,t[43]=k,t[44]=v):v=t[44],t[45]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,R.jsx)(`h4`,{className:`mb-1 text-xs font-medium text-muted-foreground`,children:`Recent ingestion jobs`}),t[45]=b):b=t[45],t[46]===u?x=t[47]:(x=u&&(0,R.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading jobs…`}),t[46]=u,t[47]=x),t[48]!==p?.message||t[49]!==d?(C=d&&(0,R.jsxs)(`p`,{className:`text-sm text-destructive`,children:[`Failed to load ingestion jobs: `,p?.message]}),t[48]=p?.message,t[49]=d,t[50]=C):C=t[50],w=!u&&!d&&e.length===0&&(0,R.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No ingestion jobs have run yet.`}),T=e.length>0&&(0,R.jsx)(`div`,{className:`space-y-2`,children:e.map(V)}),t[5]=r.name,t[6]=r.status,t[7]=i,t[8]=m,t[9]=p?.message,t[10]=d,t[11]=u,t[12]=n,t[13]=h,t[14]=g,t[15]=_,t[16]=v,t[17]=b,t[18]=x,t[19]=C,t[20]=w,t[21]=T}else g=t[14],_=t[15],v=t[16],b=t[17],x=t[18],C=t[19],w=t[20],T=t[21];let E=`This removes "${r.name??i}" from the knowledge base. It cannot be undone.`,D;t[51]===m.error?D=t[52]:(D=m.error&&(0,R.jsx)(`span`,{className:`mt-2 block text-destructive`,children:m.error.message}),t[51]=m.error,t[52]=D);let O;t[53]!==E||t[54]!==D?(O=(0,R.jsxs)(R.Fragment,{children:[E,D]}),t[53]=E,t[54]=D,t[55]=O):O=t[55];let k;t[56]===g?k=t[57]:(k=()=>{g()},t[56]=g,t[57]=k);let A;t[58]!==m.isPending||t[59]!==o||t[60]!==O||t[61]!==k?(A=(0,R.jsx)(ne,{description:O,isPending:m.isPending,onConfirm:k,onOpenChange:s,open:o,title:`Remove Data Source`}),t[58]=m.isPending,t[59]=o,t[60]=O,t[61]=k,t[62]=A):A=t[62];let j;return t[63]!==A||t[64]!==_||t[65]!==v||t[66]!==b||t[67]!==x||t[68]!==C||t[69]!==w||t[70]!==T?(j=(0,R.jsxs)(`div`,{className:_,children:[v,b,x,C,w,T,A]}),t[63]=A,t[64]=_,t[65]=v,t[66]=b,t[67]=x,t[68]=C,t[69]=w,t[70]=T,t[71]=j):j=t[71],j}function V(e){return(0,R.jsx)(B,{job:e},e.ingestionJobId)}function H(){let e=(0,oe.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:U},e[0]=t):t=e[0],i(t)}async function U(e){let{knowledgeBaseId:t,query:n}=e,r=new L({knowledgeBaseId:t,retrievalQuery:{text:n}});return await h().send(r)}function W(e){return e.location?.s3Location?.uri}function le(e){let t=(0,oe.c)(33),{knowledgeBaseId:n}=e,[r,i]=(0,se.useState)(``),a=H(),o;t[0]!==n||t[1]!==r||t[2]!==a?(o=async function(){if(r.trim().length!==0)try{await a.mutateAsync({knowledgeBaseId:n,query:r})}catch{}},t[0]=n,t[1]=r,t[2]=a,t[3]=o):o=t[3];let s=o,c;t[4]===a.data?.retrievalResults?c=t[5]:(c=a.data?.retrievalResults??[],t[4]=a.data?.retrievalResults,t[5]=c);let l=c,u,d;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,R.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Retrieve tester`}),d=(0,R.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:`Run a similarity query against this knowledge base and inspect the returned chunks.`}),t[6]=u,t[7]=d):(u=t[6],d=t[7]);let f;t[8]===s?f=t[9]:(f=e=>{e.preventDefault(),s()},t[8]=s,t[9]=f);let p;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,R.jsx)(A,{htmlFor:`retrieve-query`,children:`Query`}),t[10]=p):p=t[10];let m;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(m=e=>{i(e.target.value)},t[11]=m):m=t[11];let h;t[12]===r?h=t[13]:(h=(0,R.jsx)(N,{id:`retrieve-query`,onChange:m,placeholder:`What would you like to ask this knowledge base?`,rows:3,value:r}),t[12]=r,t[13]=h);let g;t[14]!==r||t[15]!==a.isPending?(g=a.isPending||r.trim().length===0,t[14]=r,t[15]=a.isPending,t[16]=g):g=t[16];let _=a.isPending?`Retrieving…`:`Retrieve`,v;t[17]!==_||t[18]!==g?(v=(0,R.jsx)(ee,{disabled:g,type:`submit`,children:_}),t[17]=_,t[18]=g,t[19]=v):v=t[19];let y;t[20]!==v||t[21]!==f||t[22]!==h?(y=(0,R.jsxs)(`form`,{className:`space-y-2`,onSubmit:f,children:[p,h,v]}),t[20]=v,t[21]=f,t[22]=h,t[23]=y):y=t[23];let b;t[24]===a.error?b=t[25]:(b=a.error&&(0,R.jsx)(`p`,{className:`mt-4 text-sm text-destructive`,children:a.error.message}),t[24]=a.error,t[25]=b);let x;t[26]!==l||t[27]!==a.isSuccess?(x=a.isSuccess&&(0,R.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,R.jsxs)(`h3`,{className:`text-sm font-medium`,children:[l.length,` chunk`,l.length===1?``:`s`,` returned`]}),l.length>0?l.map(G):(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`No chunks matched this query.`})]}),t[26]=l,t[27]=a.isSuccess,t[28]=x):x=t[28];let S;return t[29]!==y||t[30]!==b||t[31]!==x?(S=(0,R.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[u,d,y,b,x]}),t[29]=y,t[30]=b,t[31]=x,t[32]=S):S=t[32],S}function G(e,t){let n=W(e),r=e.documentId??`${n??`chunk`}-${t}`;return(0,R.jsxs)(`div`,{className:`rounded-md border p-3 text-sm`,children:[(0,R.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[(0,R.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:n??`unknown source`}),e.score!==void 0&&(0,R.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-0.5 text-xs`,children:[`score `,e.score.toFixed(4)]})]}),(0,R.jsx)(`pre`,{className:`max-h-80 overflow-auto rounded bg-muted p-2 font-mono text-xs break-words whitespace-pre-wrap`,children:e.content?.text??`(no content)`})]},r)}function ue(e){let t=(0,oe.c)(94),{knowledgeBaseId:n}=e,[r,i]=(0,se.useState)(!1),a=x(),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:O(b),defaultValues:_},t[0]=o):o=t[0];let{formState:s,handleSubmit:c,register:l,reset:u}=D(o),{errors:d,isSubmitting:f}=s,m;t[1]!==a||t[2]!==n||t[3]!==u?(m=async e=>{await a.mutateAsync({data:e,knowledgeBaseId:n}),u(_),i(!1)},t[1]=a,t[2]=n,t[3]=u,t[4]=m):m=t[4];let h=m;if(!r){let e;return t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,R.jsx)(ee,{onClick:()=>{i(!0)},size:`sm`,variant:`outline`,children:`Add data source`}),t[5]=e):e=t[5],e}let g;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,R.jsx)(`h3`,{className:`mb-3 font-medium`,children:`Add data source`}),t[6]=g):g=t[6];let v;t[7]===a.error?v=t[8]:(v=a.error&&(0,R.jsx)(k,{error:a.error,msg:`Failed to create the data source`}),t[7]=a.error,t[8]=v);let y;t[9]!==c||t[10]!==h?(y=e=>{c(h)(e)},t[9]=c,t[10]=h,t[11]=y):y=t[11];let S;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-name`,children:`Name`})}),t[12]=S):S=t[12];let C=!!d.name,w;t[13]===l?w=t[14]:(w=l(`name`),t[13]=l,t[14]=w);let T;t[15]!==C||t[16]!==w?(T=(0,R.jsx)(p,{"aria-invalid":C,id:`ds-name`,placeholder:`product-docs-bucket`,...w}),t[15]=C,t[16]=w,t[17]=T):T=t[17];let E;t[18]===d.name?E=t[19]:(E=(0,R.jsx)(j,{errors:[d.name]}),t[18]=d.name,t[19]=E);let A;t[20]!==T||t[21]!==E?(A=(0,R.jsxs)(te,{children:[S,T,E]}),t[20]=T,t[21]=E,t[22]=A):A=t[22];let N;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-bucket-arn`,children:`S3 bucket ARN`})}),t[23]=N):N=t[23];let ne=!!d.bucketArn,re;t[24]===l?re=t[25]:(re=l(`bucketArn`),t[24]=l,t[25]=re);let P;t[26]!==ne||t[27]!==re?(P=(0,R.jsx)(p,{"aria-invalid":ne,id:`ds-bucket-arn`,placeholder:`arn:aws:s3:::product-docs`,...re}),t[26]=ne,t[27]=re,t[28]=P):P=t[28];let ie;t[29]===d.bucketArn?ie=t[30]:(ie=(0,R.jsx)(j,{errors:[d.bucketArn]}),t[29]=d.bucketArn,t[30]=ie);let F;t[31]!==P||t[32]!==ie?(F=(0,R.jsxs)(te,{children:[N,P,ie]}),t[31]=P,t[32]=ie,t[33]=F):F=t[33];let ae;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-inclusion-prefix`,children:`Inclusion prefix`})}),t[34]=ae):ae=t[34];let I;t[35]===l?I=t[36]:(I=l(`inclusionPrefix`),t[35]=l,t[36]=I);let L;t[37]===I?L=t[38]:(L=(0,R.jsxs)(te,{children:[ae,(0,R.jsx)(p,{id:`ds-inclusion-prefix`,placeholder:`Optional`,...I})]}),t[37]=I,t[38]=L);let z;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,R.jsx)(M,{children:`Chunking`}),t[39]=z):z=t[39];let B;t[40]===l?B=t[41]:(B=l(`chunkingEnabled`),t[40]=l,t[41]=B);let ce;t[42]===B?ce=t[43]:(ce=(0,R.jsx)(`input`,{"aria-label":`Enable fixed-size chunking`,type:`checkbox`,...B}),t[42]=B,t[43]=ce);let V;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,R.jsx)(`span`,{children:`Split documents using fixed-size chunking`}),t[44]=V):V=t[44];let H;t[45]===ce?H=t[46]:(H=(0,R.jsxs)(te,{children:[z,(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[ce,V]})]}),t[45]=ce,t[46]=H);let U;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-max-tokens`,children:`Max tokens per chunk`})}),t[47]=U):U=t[47];let W=!!d.maxTokens,le;t[48]===l?le=t[49]:(le=l(`maxTokens`,{valueAsNumber:!0}),t[48]=l,t[49]=le);let G;t[50]!==W||t[51]!==le?(G=(0,R.jsx)(p,{"aria-invalid":W,id:`ds-max-tokens`,min:1,type:`number`,...le}),t[50]=W,t[51]=le,t[52]=G):G=t[52];let ue;t[53]===d.maxTokens?ue=t[54]:(ue=(0,R.jsx)(j,{errors:[d.maxTokens]}),t[53]=d.maxTokens,t[54]=ue);let K;t[55]!==G||t[56]!==ue?(K=(0,R.jsxs)(te,{children:[U,G,ue]}),t[55]=G,t[56]=ue,t[57]=K):K=t[57];let q;t[58]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-overlap-percentage`,children:`Overlap %`})}),t[58]=q):q=t[58];let de=!!d.overlapPercentage,J;t[59]===l?J=t[60]:(J=l(`overlapPercentage`,{valueAsNumber:!0}),t[59]=l,t[60]=J);let Y;t[61]!==de||t[62]!==J?(Y=(0,R.jsx)(p,{"aria-invalid":de,id:`ds-overlap-percentage`,max:99,min:0,type:`number`,...J}),t[61]=de,t[62]=J,t[63]=Y):Y=t[63];let X;t[64]===d.overlapPercentage?X=t[65]:(X=(0,R.jsx)(j,{errors:[d.overlapPercentage]}),t[64]=d.overlapPercentage,t[65]=X);let fe;t[66]!==Y||t[67]!==X?(fe=(0,R.jsxs)(te,{children:[q,Y,X]}),t[66]=Y,t[67]=X,t[68]=fe):fe=t[68];let Z;t[69]!==K||t[70]!==fe?(Z=(0,R.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[K,fe]}),t[69]=K,t[70]=fe,t[71]=Z):Z=t[71];let pe=f||a.isPending,Q;t[72]===u?Q=t[73]:(Q=()=>{u(_),i(!1)},t[72]=u,t[73]=Q);let $;t[74]!==pe||t[75]!==Q?($=(0,R.jsx)(ee,{disabled:pe,onClick:Q,type:`button`,variant:`outline`,children:`Cancel`}),t[74]=pe,t[75]=Q,t[76]=$):$=t[76];let me=f||a.isPending,he=f||a.isPending?`Adding…`:`Add data source`,ge;t[77]!==me||t[78]!==he?(ge=(0,R.jsx)(ee,{disabled:me,type:`submit`,children:he}),t[77]=me,t[78]=he,t[79]=ge):ge=t[79];let _e;t[80]!==$||t[81]!==ge?(_e=(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[$,ge]}),t[80]=$,t[81]=ge,t[82]=_e):_e=t[82];let ve;t[83]!==A||t[84]!==F||t[85]!==L||t[86]!==H||t[87]!==Z||t[88]!==_e||t[89]!==y?(ve=(0,R.jsxs)(`form`,{className:`space-y-4`,onSubmit:y,children:[A,F,L,H,Z,_e]}),t[83]=A,t[84]=F,t[85]=L,t[86]=H,t[87]=Z,t[88]=_e,t[89]=y,t[90]=ve):ve=t[90];let ye;return t[91]!==ve||t[92]!==v?(ye=(0,R.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[g,v,ve]}),t[91]=ve,t[92]=v,t[93]=ye):ye=t[93],ye}function K(e){let t=(0,oe.c)(82),{knowledgeBaseId:n}=e,r=s(),[i,a]=(0,se.useState)(!1),c;t[0]===n?c=t[1]:(c=C(n),t[0]=n,t[1]=c);let{data:l}=o(c),p;t[2]===n?p=t[3]:(p=w(n),t[2]=n,t[3]=p);let{data:m}=o(p),h=v(),{knowledgeBase:g}=l,_;t[4]===m.dataSourceSummaries?_=t[5]:(_=m.dataSourceSummaries??[],t[4]=m.dataSourceSummaries,t[5]=_);let y=_;if(!g){let e;return t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(d,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`Knowledge base not found.`})]}),t[6]=e):e=t[6],e}let b=g.knowledgeBaseConfiguration?.vectorKnowledgeBaseConfiguration?.embeddingModelArn,x;t[7]!==h||t[8]!==n||t[9]!==r?(x=async function(){try{await h.mutateAsync(n),a(!1),await r({to:`/bedrock/list-knowledge-bases`})}catch{}},t[7]=h,t[8]=n,t[9]=r,t[10]=x):x=t[10];let S=x,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,R.jsx)(d,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),t[11]=T):T=t[11];let D;t[12]===g.status?D=t[13]:(D=(0,R.jsx)(ie,{state:g.status}),t[12]=g.status,t[13]=D);let O;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(O=()=>{a(!0)},t[14]=O):O=t[14];let k;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,R.jsxs)(ee,{onClick:O,size:`sm`,variant:`destructive`,children:[(0,R.jsx)(f,{className:`size-4`}),`Delete`]}),t[15]=k):k=t[15];let A;t[16]===D?A=t[17]:(A=(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[D,k]}),t[16]=D,t[17]=A);let j=g.name??n,M;t[18]!==j||t[19]!==A?(M=(0,R.jsx)(E,{actions:A,subtitle:`Knowledge Base Details`,title:j}),t[18]=j,t[19]=A,t[20]=M):M=t[20];let te;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,R.jsx)(re.Header,{children:`Knowledge Base Information`}),t[21]=te):te=t[21];let N;t[22]===g.knowledgeBaseId?N=t[23]:(N=(0,R.jsx)(P,{label:`Knowledge Base ID`,value:g.knowledgeBaseId}),t[22]=g.knowledgeBaseId,t[23]=N);let F;t[24]===g.knowledgeBaseArn?F=t[25]:(F=(0,R.jsx)(P,{label:`ARN`,value:g.knowledgeBaseArn}),t[24]=g.knowledgeBaseArn,t[25]=F);let ae=g.description??`-`,I;t[26]===ae?I=t[27]:(I=(0,R.jsx)(P,{label:`Description`,value:ae}),t[26]=ae,t[27]=I);let L;t[28]===g.roleArn?L=t[29]:(L=(0,R.jsx)(P,{label:`Role ARN`,value:g.roleArn}),t[28]=g.roleArn,t[29]=L);let z;t[30]===b?z=t[31]:(z=(0,R.jsx)(P,{label:`Embedding Model`,value:b}),t[30]=b,t[31]=z);let B;t[32]===g.createdAt?B=t[33]:(B=u(g.createdAt),t[32]=g.createdAt,t[33]=B);let V;t[34]===B?V=t[35]:(V=(0,R.jsx)(P,{label:`Created`,value:B}),t[34]=B,t[35]=V);let H;t[36]===g.updatedAt?H=t[37]:(H=u(g.updatedAt),t[36]=g.updatedAt,t[37]=H);let U;t[38]===H?U=t[39]:(U=(0,R.jsx)(P,{label:`Updated`,value:H}),t[38]=H,t[39]=U);let W;t[40]===g.failureReasons?W=t[41]:(W=g.failureReasons&&g.failureReasons.length>0&&(0,R.jsx)(P,{label:`Failure Reasons`,value:g.failureReasons.join(`; `)}),t[40]=g.failureReasons,t[41]=W);let G;t[42]!==N||t[43]!==F||t[44]!==I||t[45]!==L||t[46]!==z||t[47]!==V||t[48]!==U||t[49]!==W?(G=(0,R.jsxs)(re,{children:[te,(0,R.jsxs)(re.Content,{children:[N,F,I,L,z,V,U,W]})]}),t[42]=N,t[43]=F,t[44]=I,t[45]=L,t[46]=z,t[47]=V,t[48]=U,t[49]=W,t[50]=G):G=t[50];let K;t[51]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,R.jsx)(`h2`,{className:`font-semibold`,children:`Data Sources`}),t[51]=K):K=t[51];let q;t[52]===n?q=t[53]:(q=(0,R.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[K,(0,R.jsx)(ue,{knowledgeBaseId:n})]}),t[52]=n,t[53]=q);let de;t[54]!==y||t[55]!==n?(de=y.length>0?(0,R.jsx)(`div`,{className:`space-y-4`,children:y.map(e=>(0,R.jsx)(ce,{dataSource:e,knowledgeBaseId:n},e.dataSourceId))}):(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`No data sources configured for this knowledge base.`}),t[54]=y,t[55]=n,t[56]=de):de=t[56];let J;t[57]!==q||t[58]!==de?(J=(0,R.jsxs)(`div`,{children:[q,de]}),t[57]=q,t[58]=de,t[59]=J):J=t[59];let Y;t[60]===n?Y=t[61]:(Y=(0,R.jsx)(le,{knowledgeBaseId:n}),t[60]=n,t[61]=Y);let X;t[62]!==M||t[63]!==G||t[64]!==J||t[65]!==Y?(X=(0,R.jsxs)(`div`,{className:`space-y-6`,children:[M,G,J,Y]}),t[62]=M,t[63]=G,t[64]=J,t[65]=Y,t[66]=X):X=t[66];let fe=`This tears down "${g.name??n}" and all of its data sources. It cannot be undone.`,Z;t[67]===h.error?Z=t[68]:(Z=h.error&&(0,R.jsx)(`span`,{className:`mt-2 block text-destructive`,children:h.error.message}),t[67]=h.error,t[68]=Z);let pe;t[69]!==fe||t[70]!==Z?(pe=(0,R.jsxs)(R.Fragment,{children:[fe,Z]}),t[69]=fe,t[70]=Z,t[71]=pe):pe=t[71];let Q;t[72]===S?Q=t[73]:(Q=()=>{S()},t[72]=S,t[73]=Q);let $;t[74]!==h.isPending||t[75]!==i||t[76]!==pe||t[77]!==Q?($=(0,R.jsx)(ne,{description:pe,isPending:h.isPending,onConfirm:Q,onOpenChange:a,open:i,title:`Delete Knowledge Base`}),t[74]=h.isPending,t[75]=i,t[76]=pe,t[77]=Q,t[78]=$):$=t[78];let me;return t[79]!==X||t[80]!==$?(me=(0,R.jsxs)(R.Fragment,{children:[T,X,$]}),t[79]=X,t[80]=$,t[81]=me):me=t[81],me}function q(){let e=(0,oe.c)(2),{knowledgeBaseId:t}=T.useParams(),n;return e[0]===t?n=e[1]:(n=(0,R.jsx)(K,{knowledgeBaseId:t}),e[0]=t,e[1]=n),n}export{q as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useMutation-6rdxVQpi.js";import{t as a}from"./useQuery-2EKf7AyV.js";import{t as o}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{Lt as c,an as l,vt as u}from"./cluster-config-DkOiY8HH.js";import{t as d}from"./back-link-wsXUoJ12.js";import{t as f}from"./trash-DVab4pEz.js";import{t as ee}from"./button-qf9lLJ2x.js";import{t as p}from"./input-D3aUBtS6.js";import{i as m,va as h,ya as g}from"./awsClient-Cqp6x3OY.js";import{a as _,i as v,r as y,s as b,t as x}from"./bedrockAgent-BE9dOa-O.js";import{n as S,r as C,t as w}from"./bedrockAgent-CtELySTw.js";import{t as T}from"./_knowledgeBaseId-BnI_FbyV.js";import{t as E}from"./page-heading-vksh_67w.js";import{i as D,t as O}from"./zod-A4qtKH_p.js";import{t as k}from"./error-banner-DeOeVBKS.js";import{c as A,r as j,s as M,t as te}from"./field-CS-ql6du.js";import{t as N}from"./textarea-DV1UO8hv.js";import{t as ne}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as re,t as P}from"./detail-row-DNBRlVeK.js";import{t as ie}from"./state-badge-pn00UE1d.js";var F=c(g,`AmazonBedrockAgentRunTimeService`,`BedrockAgentRuntimeClient`,u),ae={},I=(e,t,n,r)=>[],L=class extends F(ae,I,`Retrieve`,h){},oe=r(),se=t(n(),1),R=e(),z=3;function B(e){let t=(0,oe.c)(18),{job:n}=e,r=n.statistics,i=n.ingestionJobId,a;t[0]===n.ingestionJobId?a=t[1]:(a=(0,R.jsx)(`span`,{className:`font-mono`,children:n.ingestionJobId}),t[0]=n.ingestionJobId,t[1]=a);let o;t[2]===n.status?o=t[3]:(o=(0,R.jsx)(ie,{state:n.status}),t[2]=n.status,t[3]=o);let s;t[4]!==a||t[5]!==o?(s=(0,R.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[a,o]}),t[4]=a,t[5]=o,t[6]=s):s=t[6];let c;t[7]===n.startedAt?c=t[8]:(c=l(n.startedAt),t[7]=n.startedAt,t[8]=c);let u;t[9]===c?u=t[10]:(u=(0,R.jsxs)(`div`,{className:`text-muted-foreground`,children:[`Started `,c]}),t[9]=c,t[10]=u);let d;t[11]===r?d=t[12]:(d=r&&(0,R.jsxs)(`div`,{className:`mt-1 text-muted-foreground`,children:[`scanned `,r.numberOfDocumentsScanned??0,` · indexed`,` `,(r.numberOfNewDocumentsIndexed??0)+(r.numberOfModifiedDocumentsIndexed??0),` `,`· failed `,r.numberOfDocumentsFailed??0]}),t[11]=r,t[12]=d);let f;return t[13]!==n.ingestionJobId||t[14]!==s||t[15]!==u||t[16]!==d?(f=(0,R.jsxs)(`div`,{className:`rounded-md border p-2 text-xs`,children:[s,u,d]},i),t[13]=n.ingestionJobId,t[14]=s,t[15]=u,t[16]=d,t[17]=f):f=t[17],f}function ce(e){let t=(0,oe.c)(72),{knowledgeBaseId:n,dataSource:r}=e,i=r.dataSourceId??``,[o,s]=(0,se.useState)(!1),c;t[0]!==i||t[1]!==n?(c=S(n,i),t[0]=i,t[1]=n,t[2]=c):c=t[2];let{data:l,isLoading:u,isError:d,error:p}=a(c),m=y(),h;t[3]===l?.ingestionJobSummaries?h=t[4]:(h=l?.ingestionJobSummaries??[],t[3]=l?.ingestionJobSummaries,t[4]=h);let g,_,v,b,x,C,w,T;if(t[5]!==r.name||t[6]!==r.status||t[7]!==i||t[8]!==m||t[9]!==p?.message||t[10]!==d||t[11]!==u||t[12]!==n||t[13]!==h){let e=h.slice(0,z),a;t[22]!==i||t[23]!==m||t[24]!==n?(a=async function(){try{await m.mutateAsync({dataSourceId:i,knowledgeBaseId:n}),s(!1)}catch{}},t[22]=i,t[23]=m,t[24]=n,t[25]=a):a=t[25],g=a,_=`rounded-lg border bg-card p-4`;let o;t[26]===r.name?o=t[27]:(o=(0,R.jsx)(`h3`,{className:`font-medium`,children:r.name}),t[26]=r.name,t[27]=o);let c;t[28]===i?c=t[29]:(c=(0,R.jsx)(`p`,{className:`font-mono text-xs text-muted-foreground`,children:i}),t[28]=i,t[29]=c);let l;t[30]!==o||t[31]!==c?(l=(0,R.jsxs)(`div`,{children:[o,c]}),t[30]=o,t[31]=c,t[32]=l):l=t[32];let y;t[33]===r.status?y=t[34]:(y=(0,R.jsx)(ie,{state:r.status}),t[33]=r.status,t[34]=y);let S=`Remove data source ${r.name??i}`,E;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>{s(!0)},t[35]=E):E=t[35];let D;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,R.jsx)(f,{className:`size-3.5`}),t[36]=D):D=t[36];let O;t[37]===S?O=t[38]:(O=(0,R.jsx)(ee,{"aria-label":S,onClick:E,size:`icon-sm`,variant:`destructive`,children:D}),t[37]=S,t[38]=O);let k;t[39]!==y||t[40]!==O?(k=(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[y,O]}),t[39]=y,t[40]=O,t[41]=k):k=t[41],t[42]!==l||t[43]!==k?(v=(0,R.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[l,k]}),t[42]=l,t[43]=k,t[44]=v):v=t[44],t[45]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,R.jsx)(`h4`,{className:`mb-1 text-xs font-medium text-muted-foreground`,children:`Recent ingestion jobs`}),t[45]=b):b=t[45],t[46]===u?x=t[47]:(x=u&&(0,R.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading jobs…`}),t[46]=u,t[47]=x),t[48]!==p?.message||t[49]!==d?(C=d&&(0,R.jsxs)(`p`,{className:`text-sm text-destructive`,children:[`Failed to load ingestion jobs: `,p?.message]}),t[48]=p?.message,t[49]=d,t[50]=C):C=t[50],w=!u&&!d&&e.length===0&&(0,R.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No ingestion jobs have run yet.`}),T=e.length>0&&(0,R.jsx)(`div`,{className:`space-y-2`,children:e.map(V)}),t[5]=r.name,t[6]=r.status,t[7]=i,t[8]=m,t[9]=p?.message,t[10]=d,t[11]=u,t[12]=n,t[13]=h,t[14]=g,t[15]=_,t[16]=v,t[17]=b,t[18]=x,t[19]=C,t[20]=w,t[21]=T}else g=t[14],_=t[15],v=t[16],b=t[17],x=t[18],C=t[19],w=t[20],T=t[21];let E=`This removes "${r.name??i}" from the knowledge base. It cannot be undone.`,D;t[51]===m.error?D=t[52]:(D=m.error&&(0,R.jsx)(`span`,{className:`mt-2 block text-destructive`,children:m.error.message}),t[51]=m.error,t[52]=D);let O;t[53]!==E||t[54]!==D?(O=(0,R.jsxs)(R.Fragment,{children:[E,D]}),t[53]=E,t[54]=D,t[55]=O):O=t[55];let k;t[56]===g?k=t[57]:(k=()=>{g()},t[56]=g,t[57]=k);let A;t[58]!==m.isPending||t[59]!==o||t[60]!==O||t[61]!==k?(A=(0,R.jsx)(ne,{description:O,isPending:m.isPending,onConfirm:k,onOpenChange:s,open:o,title:`Remove Data Source`}),t[58]=m.isPending,t[59]=o,t[60]=O,t[61]=k,t[62]=A):A=t[62];let j;return t[63]!==A||t[64]!==_||t[65]!==v||t[66]!==b||t[67]!==x||t[68]!==C||t[69]!==w||t[70]!==T?(j=(0,R.jsxs)(`div`,{className:_,children:[v,b,x,C,w,T,A]}),t[63]=A,t[64]=_,t[65]=v,t[66]=b,t[67]=x,t[68]=C,t[69]=w,t[70]=T,t[71]=j):j=t[71],j}function V(e){return(0,R.jsx)(B,{job:e},e.ingestionJobId)}function H(){let e=(0,oe.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:U},e[0]=t):t=e[0],i(t)}async function U(e){let{knowledgeBaseId:t,query:n}=e,r=new L({knowledgeBaseId:t,retrievalQuery:{text:n}});return await m().send(r)}function W(e){return e.location?.s3Location?.uri}function le(e){let t=(0,oe.c)(33),{knowledgeBaseId:n}=e,[r,i]=(0,se.useState)(``),a=H(),o;t[0]!==n||t[1]!==r||t[2]!==a?(o=async function(){if(r.trim().length!==0)try{await a.mutateAsync({knowledgeBaseId:n,query:r})}catch{}},t[0]=n,t[1]=r,t[2]=a,t[3]=o):o=t[3];let s=o,c;t[4]===a.data?.retrievalResults?c=t[5]:(c=a.data?.retrievalResults??[],t[4]=a.data?.retrievalResults,t[5]=c);let l=c,u,d;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,R.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Retrieve tester`}),d=(0,R.jsx)(`p`,{className:`mb-4 text-sm text-muted-foreground`,children:`Run a similarity query against this knowledge base and inspect the returned chunks.`}),t[6]=u,t[7]=d):(u=t[6],d=t[7]);let f;t[8]===s?f=t[9]:(f=e=>{e.preventDefault(),s()},t[8]=s,t[9]=f);let p;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,R.jsx)(A,{htmlFor:`retrieve-query`,children:`Query`}),t[10]=p):p=t[10];let m;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(m=e=>{i(e.target.value)},t[11]=m):m=t[11];let h;t[12]===r?h=t[13]:(h=(0,R.jsx)(N,{id:`retrieve-query`,onChange:m,placeholder:`What would you like to ask this knowledge base?`,rows:3,value:r}),t[12]=r,t[13]=h);let g;t[14]!==r||t[15]!==a.isPending?(g=a.isPending||r.trim().length===0,t[14]=r,t[15]=a.isPending,t[16]=g):g=t[16];let _=a.isPending?`Retrieving…`:`Retrieve`,v;t[17]!==_||t[18]!==g?(v=(0,R.jsx)(ee,{disabled:g,type:`submit`,children:_}),t[17]=_,t[18]=g,t[19]=v):v=t[19];let y;t[20]!==v||t[21]!==f||t[22]!==h?(y=(0,R.jsxs)(`form`,{className:`space-y-2`,onSubmit:f,children:[p,h,v]}),t[20]=v,t[21]=f,t[22]=h,t[23]=y):y=t[23];let b;t[24]===a.error?b=t[25]:(b=a.error&&(0,R.jsx)(`p`,{className:`mt-4 text-sm text-destructive`,children:a.error.message}),t[24]=a.error,t[25]=b);let x;t[26]!==l||t[27]!==a.isSuccess?(x=a.isSuccess&&(0,R.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[(0,R.jsxs)(`h3`,{className:`text-sm font-medium`,children:[l.length,` chunk`,l.length===1?``:`s`,` returned`]}),l.length>0?l.map(G):(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`No chunks matched this query.`})]}),t[26]=l,t[27]=a.isSuccess,t[28]=x):x=t[28];let S;return t[29]!==y||t[30]!==b||t[31]!==x?(S=(0,R.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[u,d,y,b,x]}),t[29]=y,t[30]=b,t[31]=x,t[32]=S):S=t[32],S}function G(e,t){let n=W(e),r=e.documentId??`${n??`chunk`}-${t}`;return(0,R.jsxs)(`div`,{className:`rounded-md border p-3 text-sm`,children:[(0,R.jsxs)(`div`,{className:`mb-1 flex items-center justify-between gap-2`,children:[(0,R.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:n??`unknown source`}),e.score!==void 0&&(0,R.jsxs)(`span`,{className:`rounded-full bg-muted px-2 py-0.5 text-xs`,children:[`score `,e.score.toFixed(4)]})]}),(0,R.jsx)(`pre`,{className:`max-h-80 overflow-auto rounded bg-muted p-2 font-mono text-xs break-words whitespace-pre-wrap`,children:e.content?.text??`(no content)`})]},r)}function ue(e){let t=(0,oe.c)(94),{knowledgeBaseId:n}=e,[r,i]=(0,se.useState)(!1),a=x(),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:O(b),defaultValues:_},t[0]=o):o=t[0];let{formState:s,handleSubmit:c,register:l,reset:u}=D(o),{errors:d,isSubmitting:f}=s,m;t[1]!==a||t[2]!==n||t[3]!==u?(m=async e=>{await a.mutateAsync({data:e,knowledgeBaseId:n}),u(_),i(!1)},t[1]=a,t[2]=n,t[3]=u,t[4]=m):m=t[4];let h=m;if(!r){let e;return t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,R.jsx)(ee,{onClick:()=>{i(!0)},size:`sm`,variant:`outline`,children:`Add data source`}),t[5]=e):e=t[5],e}let g;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,R.jsx)(`h3`,{className:`mb-3 font-medium`,children:`Add data source`}),t[6]=g):g=t[6];let v;t[7]===a.error?v=t[8]:(v=a.error&&(0,R.jsx)(k,{error:a.error,msg:`Failed to create the data source`}),t[7]=a.error,t[8]=v);let y;t[9]!==c||t[10]!==h?(y=e=>{c(h)(e)},t[9]=c,t[10]=h,t[11]=y):y=t[11];let S;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-name`,children:`Name`})}),t[12]=S):S=t[12];let C=!!d.name,w;t[13]===l?w=t[14]:(w=l(`name`),t[13]=l,t[14]=w);let T;t[15]!==C||t[16]!==w?(T=(0,R.jsx)(p,{"aria-invalid":C,id:`ds-name`,placeholder:`product-docs-bucket`,...w}),t[15]=C,t[16]=w,t[17]=T):T=t[17];let E;t[18]===d.name?E=t[19]:(E=(0,R.jsx)(j,{errors:[d.name]}),t[18]=d.name,t[19]=E);let A;t[20]!==T||t[21]!==E?(A=(0,R.jsxs)(te,{children:[S,T,E]}),t[20]=T,t[21]=E,t[22]=A):A=t[22];let N;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-bucket-arn`,children:`S3 bucket ARN`})}),t[23]=N):N=t[23];let ne=!!d.bucketArn,re;t[24]===l?re=t[25]:(re=l(`bucketArn`),t[24]=l,t[25]=re);let P;t[26]!==ne||t[27]!==re?(P=(0,R.jsx)(p,{"aria-invalid":ne,id:`ds-bucket-arn`,placeholder:`arn:aws:s3:::product-docs`,...re}),t[26]=ne,t[27]=re,t[28]=P):P=t[28];let ie;t[29]===d.bucketArn?ie=t[30]:(ie=(0,R.jsx)(j,{errors:[d.bucketArn]}),t[29]=d.bucketArn,t[30]=ie);let F;t[31]!==P||t[32]!==ie?(F=(0,R.jsxs)(te,{children:[N,P,ie]}),t[31]=P,t[32]=ie,t[33]=F):F=t[33];let ae;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-inclusion-prefix`,children:`Inclusion prefix`})}),t[34]=ae):ae=t[34];let I;t[35]===l?I=t[36]:(I=l(`inclusionPrefix`),t[35]=l,t[36]=I);let L;t[37]===I?L=t[38]:(L=(0,R.jsxs)(te,{children:[ae,(0,R.jsx)(p,{id:`ds-inclusion-prefix`,placeholder:`Optional`,...I})]}),t[37]=I,t[38]=L);let z;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,R.jsx)(M,{children:`Chunking`}),t[39]=z):z=t[39];let B;t[40]===l?B=t[41]:(B=l(`chunkingEnabled`),t[40]=l,t[41]=B);let ce;t[42]===B?ce=t[43]:(ce=(0,R.jsx)(`input`,{"aria-label":`Enable fixed-size chunking`,type:`checkbox`,...B}),t[42]=B,t[43]=ce);let V;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,R.jsx)(`span`,{children:`Split documents using fixed-size chunking`}),t[44]=V):V=t[44];let H;t[45]===ce?H=t[46]:(H=(0,R.jsxs)(te,{children:[z,(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[ce,V]})]}),t[45]=ce,t[46]=H);let U;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-max-tokens`,children:`Max tokens per chunk`})}),t[47]=U):U=t[47];let W=!!d.maxTokens,le;t[48]===l?le=t[49]:(le=l(`maxTokens`,{valueAsNumber:!0}),t[48]=l,t[49]=le);let G;t[50]!==W||t[51]!==le?(G=(0,R.jsx)(p,{"aria-invalid":W,id:`ds-max-tokens`,min:1,type:`number`,...le}),t[50]=W,t[51]=le,t[52]=G):G=t[52];let ue;t[53]===d.maxTokens?ue=t[54]:(ue=(0,R.jsx)(j,{errors:[d.maxTokens]}),t[53]=d.maxTokens,t[54]=ue);let K;t[55]!==G||t[56]!==ue?(K=(0,R.jsxs)(te,{children:[U,G,ue]}),t[55]=G,t[56]=ue,t[57]=K):K=t[57];let q;t[58]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,R.jsx)(M,{children:(0,R.jsx)(`label`,{htmlFor:`ds-overlap-percentage`,children:`Overlap %`})}),t[58]=q):q=t[58];let de=!!d.overlapPercentage,J;t[59]===l?J=t[60]:(J=l(`overlapPercentage`,{valueAsNumber:!0}),t[59]=l,t[60]=J);let Y;t[61]!==de||t[62]!==J?(Y=(0,R.jsx)(p,{"aria-invalid":de,id:`ds-overlap-percentage`,max:99,min:0,type:`number`,...J}),t[61]=de,t[62]=J,t[63]=Y):Y=t[63];let X;t[64]===d.overlapPercentage?X=t[65]:(X=(0,R.jsx)(j,{errors:[d.overlapPercentage]}),t[64]=d.overlapPercentage,t[65]=X);let fe;t[66]!==Y||t[67]!==X?(fe=(0,R.jsxs)(te,{children:[q,Y,X]}),t[66]=Y,t[67]=X,t[68]=fe):fe=t[68];let Z;t[69]!==K||t[70]!==fe?(Z=(0,R.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[K,fe]}),t[69]=K,t[70]=fe,t[71]=Z):Z=t[71];let pe=f||a.isPending,Q;t[72]===u?Q=t[73]:(Q=()=>{u(_),i(!1)},t[72]=u,t[73]=Q);let $;t[74]!==pe||t[75]!==Q?($=(0,R.jsx)(ee,{disabled:pe,onClick:Q,type:`button`,variant:`outline`,children:`Cancel`}),t[74]=pe,t[75]=Q,t[76]=$):$=t[76];let me=f||a.isPending,he=f||a.isPending?`Adding…`:`Add data source`,ge;t[77]!==me||t[78]!==he?(ge=(0,R.jsx)(ee,{disabled:me,type:`submit`,children:he}),t[77]=me,t[78]=he,t[79]=ge):ge=t[79];let _e;t[80]!==$||t[81]!==ge?(_e=(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[$,ge]}),t[80]=$,t[81]=ge,t[82]=_e):_e=t[82];let ve;t[83]!==A||t[84]!==F||t[85]!==L||t[86]!==H||t[87]!==Z||t[88]!==_e||t[89]!==y?(ve=(0,R.jsxs)(`form`,{className:`space-y-4`,onSubmit:y,children:[A,F,L,H,Z,_e]}),t[83]=A,t[84]=F,t[85]=L,t[86]=H,t[87]=Z,t[88]=_e,t[89]=y,t[90]=ve):ve=t[90];let ye;return t[91]!==ve||t[92]!==v?(ye=(0,R.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[g,v,ve]}),t[91]=ve,t[92]=v,t[93]=ye):ye=t[93],ye}function K(e){let t=(0,oe.c)(82),{knowledgeBaseId:n}=e,r=s(),[i,a]=(0,se.useState)(!1),c;t[0]===n?c=t[1]:(c=C(n),t[0]=n,t[1]=c);let{data:u}=o(c),p;t[2]===n?p=t[3]:(p=w(n),t[2]=n,t[3]=p);let{data:m}=o(p),h=v(),{knowledgeBase:g}=u,_;t[4]===m.dataSourceSummaries?_=t[5]:(_=m.dataSourceSummaries??[],t[4]=m.dataSourceSummaries,t[5]=_);let y=_;if(!g){let e;return t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(d,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`Knowledge base not found.`})]}),t[6]=e):e=t[6],e}let b=g.knowledgeBaseConfiguration?.vectorKnowledgeBaseConfiguration?.embeddingModelArn,x;t[7]!==h||t[8]!==n||t[9]!==r?(x=async function(){try{await h.mutateAsync(n),a(!1),await r({to:`/bedrock/list-knowledge-bases`})}catch{}},t[7]=h,t[8]=n,t[9]=r,t[10]=x):x=t[10];let S=x,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,R.jsx)(d,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),t[11]=T):T=t[11];let D;t[12]===g.status?D=t[13]:(D=(0,R.jsx)(ie,{state:g.status}),t[12]=g.status,t[13]=D);let O;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(O=()=>{a(!0)},t[14]=O):O=t[14];let k;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,R.jsxs)(ee,{onClick:O,size:`sm`,variant:`destructive`,children:[(0,R.jsx)(f,{className:`size-4`}),`Delete`]}),t[15]=k):k=t[15];let A;t[16]===D?A=t[17]:(A=(0,R.jsxs)(`div`,{className:`flex items-center gap-2`,children:[D,k]}),t[16]=D,t[17]=A);let j=g.name??n,M;t[18]!==j||t[19]!==A?(M=(0,R.jsx)(E,{actions:A,subtitle:`Knowledge Base Details`,title:j}),t[18]=j,t[19]=A,t[20]=M):M=t[20];let te;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,R.jsx)(re.Header,{children:`Knowledge Base Information`}),t[21]=te):te=t[21];let N;t[22]===g.knowledgeBaseId?N=t[23]:(N=(0,R.jsx)(P,{label:`Knowledge Base ID`,value:g.knowledgeBaseId}),t[22]=g.knowledgeBaseId,t[23]=N);let F;t[24]===g.knowledgeBaseArn?F=t[25]:(F=(0,R.jsx)(P,{label:`ARN`,value:g.knowledgeBaseArn}),t[24]=g.knowledgeBaseArn,t[25]=F);let ae=g.description??`-`,I;t[26]===ae?I=t[27]:(I=(0,R.jsx)(P,{label:`Description`,value:ae}),t[26]=ae,t[27]=I);let L;t[28]===g.roleArn?L=t[29]:(L=(0,R.jsx)(P,{label:`Role ARN`,value:g.roleArn}),t[28]=g.roleArn,t[29]=L);let z;t[30]===b?z=t[31]:(z=(0,R.jsx)(P,{label:`Embedding Model`,value:b}),t[30]=b,t[31]=z);let B;t[32]===g.createdAt?B=t[33]:(B=l(g.createdAt),t[32]=g.createdAt,t[33]=B);let V;t[34]===B?V=t[35]:(V=(0,R.jsx)(P,{label:`Created`,value:B}),t[34]=B,t[35]=V);let H;t[36]===g.updatedAt?H=t[37]:(H=l(g.updatedAt),t[36]=g.updatedAt,t[37]=H);let U;t[38]===H?U=t[39]:(U=(0,R.jsx)(P,{label:`Updated`,value:H}),t[38]=H,t[39]=U);let W;t[40]===g.failureReasons?W=t[41]:(W=g.failureReasons&&g.failureReasons.length>0&&(0,R.jsx)(P,{label:`Failure Reasons`,value:g.failureReasons.join(`; `)}),t[40]=g.failureReasons,t[41]=W);let G;t[42]!==N||t[43]!==F||t[44]!==I||t[45]!==L||t[46]!==z||t[47]!==V||t[48]!==U||t[49]!==W?(G=(0,R.jsxs)(re,{children:[te,(0,R.jsxs)(re.Content,{children:[N,F,I,L,z,V,U,W]})]}),t[42]=N,t[43]=F,t[44]=I,t[45]=L,t[46]=z,t[47]=V,t[48]=U,t[49]=W,t[50]=G):G=t[50];let K;t[51]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,R.jsx)(`h2`,{className:`font-semibold`,children:`Data Sources`}),t[51]=K):K=t[51];let q;t[52]===n?q=t[53]:(q=(0,R.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[K,(0,R.jsx)(ue,{knowledgeBaseId:n})]}),t[52]=n,t[53]=q);let de;t[54]!==y||t[55]!==n?(de=y.length>0?(0,R.jsx)(`div`,{className:`space-y-4`,children:y.map(e=>(0,R.jsx)(ce,{dataSource:e,knowledgeBaseId:n},e.dataSourceId))}):(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`No data sources configured for this knowledge base.`}),t[54]=y,t[55]=n,t[56]=de):de=t[56];let J;t[57]!==q||t[58]!==de?(J=(0,R.jsxs)(`div`,{children:[q,de]}),t[57]=q,t[58]=de,t[59]=J):J=t[59];let Y;t[60]===n?Y=t[61]:(Y=(0,R.jsx)(le,{knowledgeBaseId:n}),t[60]=n,t[61]=Y);let X;t[62]!==M||t[63]!==G||t[64]!==J||t[65]!==Y?(X=(0,R.jsxs)(`div`,{className:`space-y-6`,children:[M,G,J,Y]}),t[62]=M,t[63]=G,t[64]=J,t[65]=Y,t[66]=X):X=t[66];let fe=`This tears down "${g.name??n}" and all of its data sources. It cannot be undone.`,Z;t[67]===h.error?Z=t[68]:(Z=h.error&&(0,R.jsx)(`span`,{className:`mt-2 block text-destructive`,children:h.error.message}),t[67]=h.error,t[68]=Z);let pe;t[69]!==fe||t[70]!==Z?(pe=(0,R.jsxs)(R.Fragment,{children:[fe,Z]}),t[69]=fe,t[70]=Z,t[71]=pe):pe=t[71];let Q;t[72]===S?Q=t[73]:(Q=()=>{S()},t[72]=S,t[73]=Q);let $;t[74]!==h.isPending||t[75]!==i||t[76]!==pe||t[77]!==Q?($=(0,R.jsx)(ne,{description:pe,isPending:h.isPending,onConfirm:Q,onOpenChange:a,open:i,title:`Delete Knowledge Base`}),t[74]=h.isPending,t[75]=i,t[76]=pe,t[77]=Q,t[78]=$):$=t[78];let me;return t[79]!==X||t[80]!==$?(me=(0,R.jsxs)(R.Fragment,{children:[T,X,$]}),t[79]=X,t[80]=$,t[81]=me):me=t[81],me}function q(){let e=(0,oe.c)(2),{knowledgeBaseId:t}=T.useParams(),n;return e[0]===t?n=e[1]:(n=(0,R.jsx)(K,{knowledgeBaseId:t}),e[0]=t,e[1]=n),n}export{q as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-0Lr5w_9G.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-0Lr5w_9G.js deleted file mode 100644 index 9c53ad93f..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-0Lr5w_9G.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_name-COQ_UHPB.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/rds-CyiqRExv.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/rds-CE3126Ga.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/tabs-t6sDAEVZ.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/rds-tags-tab-CD2X7nDN.js","assets/useQuery-2EKf7AyV.js","assets/rds-BkKLEWPo.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/tags-editor-BxxtIXTE.js","assets/plus-BodhJT2v.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js","assets/delete-db-subnet-group-dialog-BgemfFMN.js","assets/rds-delete-dialog-BtEPTeBR.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{g as i,m as a}from"./rds-CyiqRExv.js";var o=e(`/_auth/rds/(subnet-groups)/describe-db-subnet-groups/$name`)({loader:async({context:e,params:t})=>{let r=n(t.name),o=(await e.queryClient.query({...a(r),staleTime:`static`})).DBSubnetGroups?.[0]?.DBSubnetGroupArn??``;o!==``&&await e.queryClient.query({...i(o),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.name)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_name-COQ_UHPB.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BAZWFAbg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BAZWFAbg.js deleted file mode 100644 index 6e73d4bc9..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BAZWFAbg.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_name-D4Xr5p-1.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/rds-CE3126Ga.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/rds-BkKLEWPo.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-CyiqRExv.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/tabs-t6sDAEVZ.js","assets/rds-tags-tab-CD2X7nDN.js","assets/useQuery-2EKf7AyV.js","assets/tags-editor-BxxtIXTE.js","assets/plus-BodhJT2v.js","assets/delete-db-parameter-group-dialog-DHJeV95z.js","assets/rds-delete-dialog-BtEPTeBR.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{b as i}from"./rds-CE3126Ga.js";import{f as a,g as o,u as s}from"./rds-CyiqRExv.js";var c=e(`/_auth/rds/(parameter-groups)/describe-db-parameter-groups/$name`)({loader:async({context:e,params:t})=>{let r=n(t.name),[c]=await Promise.all([e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...a(r),staleTime:`static`})]),l=i(r)?``:c.DBParameterGroups?.[0]?.DBParameterGroupArn??``;l!==``&&await e.queryClient.query({...o(l),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.name)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_name-D4Xr5p-1.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-D4Xr5p-1.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BIXMGcMz.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-D4Xr5p-1.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BIXMGcMz.js index 1797397ca..f5710f375 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-D4Xr5p-1.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-BIXMGcMz.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{ln as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{c,i as l,n as u,s as d,t as f}from"./select-B01jpDaX.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-BarTr35m.js";import{t as h}from"./input-6kdUb_DH.js";import{b as g,s as ee,t as _}from"./rds-CE3126Ga.js";import{u as te}from"./rds-BkKLEWPo.js";import{f as ne,u as re}from"./rds-CyiqRExv.js";import{t as v}from"./_name-BAZWFAbg.js";import{t as ie}from"./page-heading-vksh_67w.js";import{n as ae,t as y}from"./detail-row-DNBRlVeK.js";import{i as b,n as oe,r as se,t as ce}from"./tabs-t6sDAEVZ.js";import{t as le}from"./rds-tags-tab-CD2X7nDN.js";import{t as ue}from"./delete-db-parameter-group-dialog-DHJeV95z.js";var de=r(),x=t(n(),1),S=e();function C(e){let t=e.AllowedValues??``;if(e.DataType!==`boolean`&&e.DataType!==`enum`)return null;let n=t.split(`,`).filter(e=>e.length>0);return n.length===0?null:n.includes(e.ParameterValue??``)?n:null}function w(e){return e.DataType===`integer`||e.DataType===`real`}function T(e){return e.ApplyType===`static`?_:e.ApplyMethod??`pending-reboot`}function E(e){let t=(0,de.c)(23),{parameter:n,value:r,options:i,editable:a,onChange:o}=e,s=n.ParameterName??``;if(!a){let e;return t[0]===r?e=t[1]:(e=(0,S.jsx)(`span`,{className:`font-mono text-xs`,children:r}),t[0]=r,t[1]=e),e}if(i){let e;t[2]===o?e=t[3]:(e=e=>{o(e??``)},t[2]=o,t[3]=e);let n=`Value of ${s}`,a;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,S.jsx)(c,{}),t[4]=a):a=t[4];let l;t[5]===n?l=t[6]:(l=(0,S.jsx)(d,{"aria-label":n,className:`w-40`,children:a}),t[5]=n,t[6]=l);let p;t[7]===i?p=t[8]:(p=i.map(D),t[7]=i,t[8]=p);let m;t[9]===p?m=t[10]:(m=(0,S.jsx)(u,{children:p}),t[9]=p,t[10]=m);let h;return t[11]!==e||t[12]!==l||t[13]!==m||t[14]!==r?(h=(0,S.jsxs)(f,{onValueChange:e,value:r,children:[l,m]}),t[11]=e,t[12]=l,t[13]=m,t[14]=r,t[15]=h):h=t[15],h}let l=`Value of ${s}`,p;t[16]===o?p=t[17]:(p=e=>{o(e.target.value)},t[16]=o,t[17]=p);let m=w(n)?`number`:`text`,g;return t[18]!==l||t[19]!==p||t[20]!==m||t[21]!==r?(g=(0,S.jsx)(h,{"aria-label":l,className:`w-40`,onChange:p,type:m,value:r}),t[18]=l,t[19]=p,t[20]=m,t[21]=r,t[22]=g):g=t[22],g}function D(e){return(0,S.jsx)(l,{value:e,children:e},e)}function fe({dbParameterGroupName:e,parameters:t,readOnly:n}){let r=te(),[i,a]=(0,x.useState)({}),[o,s]=(0,x.useState)(``),[p,g]=(0,x.useState)(`all`),_=Object.keys(i),ne=_.length>20,re=_.some(e=>(i[e]?.value??``).trim()===``),v=(e,t)=>{let n=e.ParameterName??``;a(r=>({...r,[n]:{value:e.ParameterValue??``,applyMethod:T(e),...r[n],...t}}))},ie=e=>{a(t=>{let{[e]:n,...r}=t;return r})},ae=async()=>{try{await r.mutateAsync({dbParameterGroupName:e,parameters:_.map(e=>({name:e,value:i[e]?.value??``,applyMethod:i[e]?.applyMethod??`pending-reboot`}))}),a({})}catch{}},y=o.trim().toLowerCase(),b=t.filter(e=>{let t=e.Source??``;return p===`user`&&t!==`user`||p===`engine-default`&&t===`user`?!1:(e.ParameterName??``).toLowerCase().includes(y)});return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,S.jsxs)(`div`,{className:`grow`,children:[(0,S.jsx)(`label`,{className:`sr-only`,htmlFor:`parameter-filter`,children:`Filter parameters`}),(0,S.jsx)(h,{id:`parameter-filter`,onChange:e=>{s(e.target.value)},placeholder:`Filter by parameter name`,value:o})]}),(0,S.jsxs)(f,{onValueChange:e=>{g(e??`all`)},value:p,children:[(0,S.jsx)(d,{"aria-label":`Filter by source`,className:`w-56`,children:(0,S.jsx)(c,{})}),(0,S.jsxs)(u,{children:[(0,S.jsx)(l,{value:`all`,children:`All parameters`}),(0,S.jsx)(l,{value:`user`,children:`Modified (user)`}),(0,S.jsx)(l,{value:`engine-default`,children:`Engine default`})]})]})]}),!n&&_.length>0&&(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`p`,{className:`text-sm`,children:[_.length,` parameter`,_.length===1?``:`s`,` edited`]}),(0,S.jsx)(m,{disabled:ne||re||r.isPending,onClick:()=>{ae()},size:`sm`,children:r.isPending?`Saving…`:`Save Changes`}),(0,S.jsx)(m,{onClick:()=>{a({})},size:`sm`,variant:`outline`,children:`Discard`}),ne&&(0,S.jsxs)(`p`,{className:`text-xs text-destructive`,children:[`At most `,20,` parameters can be saved at once. Each save is applied as a whole, so a larger edit is split by you rather than half-applied by us.`]}),re&&(0,S.jsx)(`p`,{className:`text-xs text-destructive`,children:`An edited parameter cannot be left blank.`})]}),r.error&&(0,S.jsx)(`p`,{className:`text-sm text-destructive`,children:r.error.message}),b.length>0?(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,S.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Value`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Allowed`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Source`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Apply`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,S.jsx)(`tbody`,{children:b.map(e=>{let t=e.ParameterName??``,r=i[t],a=C(e),o=!n&&e.IsModifiable,s=r?.value??e.ParameterValue??``,p=r?.applyMethod??T(e),h=ee(e.ApplyType);return(0,S.jsxs)(`tr`,{className:`border-b align-top last:border-0`,children:[(0,S.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[t,(0,S.jsx)(`span`,{className:`mt-0.5 block font-sans text-muted-foreground`,children:e.Description})]}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:(0,S.jsx)(E,{editable:o??!1,onChange:t=>{v(e,{value:t})},options:a,parameter:e,value:s})}),(0,S.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs text-muted-foreground`,children:[e.AllowedValues??`—`,(0,S.jsxs)(`span`,{className:`mt-0.5 block font-sans`,children:[e.DataType,!e.IsModifiable&&` · fixed by the platform`]})]}),(0,S.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.Source}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:o&&r&&h.length>1?(0,S.jsxs)(f,{onValueChange:t=>{v(e,{applyMethod:t??`pending-reboot`})},value:p,children:[(0,S.jsx)(d,{"aria-label":`Apply method of ${t}`,className:`w-44`,children:(0,S.jsx)(c,{})}),(0,S.jsx)(u,{children:h.map(e=>(0,S.jsx)(l,{value:e,children:e},e))})]}):(0,S.jsxs)(`span`,{className:`text-xs`,children:[p,e.ApplyType===`static`&&(0,S.jsx)(`span`,{className:`mt-0.5 block text-muted-foreground`,children:`static — adopted at the next reboot`})]})}),(0,S.jsx)(`td`,{className:`px-4 py-2 text-right`,children:r&&(0,S.jsx)(m,{onClick:()=>{ie(t)},size:`sm`,variant:`ghost`,children:`Reset`})})]},t)})})]})}):(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`No parameter matches this filter.`})]})}function O(e){let t=(0,de.c)(112),{dbParameterGroupName:n}=e,r=a(),o;t[0]===n?o=t[1]:(o=re(n),t[0]=n,t[1]=o);let{data:c}=i(o),l=c.DBParameterGroups?.[0],u;t[2]===n?u=t[3]:(u=g(n),t[2]=n,t[3]=u);let d=u,f=d?``:l?.DBParameterGroupArn??``,h;t[4]===n?h=t[5]:(h=ne(n),t[4]=n,t[5]=h);let{data:ee}=i(h),[_,te]=(0,x.useState)(!1);if(!l?.DBParameterGroupName){let e;return t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`DB parameter group not found.`})]}),t[6]=e):e=t[6],e}let v;t[7]===ee.Parameters?v=t[8]:(v=ee.Parameters??[],t[7]=ee.Parameters,t[8]=v);let C=v,w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z,B,V,H,U;if(t[9]!==n||t[10]!==l.DBParameterGroupFamily||t[11]!==l.Description||t[12]!==d||t[13]!==C){let e=C.filter(pe).length;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,S.jsx)(s,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),t[34]=R):R=t[34],F=`space-y-6`;let r;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(r=()=>{te(!0)},t[35]=r):r=t[35];let i;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,S.jsx)(p,{className:`size-4`}),t[36]=i):i=t[36];let a;t[37]===d?a=t[38]:(a=(0,S.jsxs)(m,{disabled:d,onClick:r,size:`sm`,variant:`destructive`,children:[i,`Delete`]}),t[37]=d,t[38]=a),t[39]!==n||t[40]!==a?(I=(0,S.jsx)(ie,{actions:a,subtitle:`DB Parameter Group`,title:n}),t[39]=n,t[40]=a,t[41]=I):I=t[41],t[42]===d?L=t[43]:(L=d&&(0,S.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`note`,children:[(0,S.jsx)(`p`,{className:`font-medium`,children:`This is a default parameter group`}),(0,S.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`The service owns it. It can be read and attached to an instance, but it cannot be modified, deleted or tagged. Create your own group of the same family to change a value.`})]}),t[42]=d,t[43]=L),O=ce,M=`parameters`;let o,c;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,S.jsx)(b,{value:`parameters`,children:`Parameters`}),c=(0,S.jsx)(b,{value:`details`,children:`Details`}),t[44]=o,t[45]=c):(o=t[44],c=t[45]);let u;t[46]===d?u=t[47]:(u=!d&&(0,S.jsx)(b,{value:`tags`,children:`Tags`}),t[46]=d,t[47]=u),t[48]===u?N=t[49]:(N=(0,S.jsxs)(oe,{children:[o,c,u]}),t[48]=u,t[49]=N),t[50]!==n||t[51]!==d||t[52]!==C?(P=(0,S.jsx)(se,{value:`parameters`,children:(0,S.jsx)(fe,{dbParameterGroupName:n,parameters:C,readOnly:d})}),t[50]=n,t[51]=d,t[52]=C,t[53]=P):P=t[53],D=se,j=`details`,E=ae,t[54]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,S.jsx)(ae.Header,{children:`Details`}),t[54]=A):A=t[54],T=ae.Content,t[55]===l.DBParameterGroupFamily?V=t[56]:(V=(0,S.jsx)(y,{label:`Family`,value:l.DBParameterGroupFamily}),t[55]=l.DBParameterGroupFamily,t[56]=V),t[57]===l.Description?H=t[58]:(H=(0,S.jsx)(y,{label:`Description`,value:l.Description}),t[57]=l.Description,t[58]=H);let f=d?`Default`:`Customer`;t[59]===f?U=t[60]:(U=(0,S.jsx)(y,{label:`Type`,value:f}),t[59]=f,t[60]=U);let h;t[61]===C.length?h=t[62]:(h=C.length.toString(),t[61]=C.length,t[62]=h),t[63]===h?k=t[64]:(k=(0,S.jsx)(y,{label:`Parameters`,value:h}),t[63]=h,t[64]=k),w=y,z=`Overridden`,B=e.toString(),t[9]=n,t[10]=l.DBParameterGroupFamily,t[11]=l.Description,t[12]=d,t[13]=C,t[14]=w,t[15]=T,t[16]=E,t[17]=D,t[18]=O,t[19]=k,t[20]=A,t[21]=j,t[22]=M,t[23]=N,t[24]=P,t[25]=F,t[26]=I,t[27]=L,t[28]=R,t[29]=z,t[30]=B,t[31]=V,t[32]=H,t[33]=U}else w=t[14],T=t[15],E=t[16],D=t[17],O=t[18],k=t[19],A=t[20],j=t[21],M=t[22],N=t[23],P=t[24],F=t[25],I=t[26],L=t[27],R=t[28],z=t[29],B=t[30],V=t[31],H=t[32],U=t[33];let W;t[65]!==w||t[66]!==z||t[67]!==B?(W=(0,S.jsx)(w,{label:z,value:B}),t[65]=w,t[66]=z,t[67]=B,t[68]=W):W=t[68];let G;t[69]===l.DBParameterGroupArn?G=t[70]:(G=(0,S.jsx)(y,{label:`ARN`,value:l.DBParameterGroupArn}),t[69]=l.DBParameterGroupArn,t[70]=G);let K;t[71]!==T||t[72]!==k||t[73]!==W||t[74]!==G||t[75]!==V||t[76]!==H||t[77]!==U?(K=(0,S.jsxs)(T,{children:[V,H,U,k,W,G]}),t[71]=T,t[72]=k,t[73]=W,t[74]=G,t[75]=V,t[76]=H,t[77]=U,t[78]=K):K=t[78];let q;t[79]!==E||t[80]!==A||t[81]!==K?(q=(0,S.jsxs)(E,{children:[A,K]}),t[79]=E,t[80]=A,t[81]=K,t[82]=q):q=t[82];let J;t[83]!==D||t[84]!==j||t[85]!==q?(J=(0,S.jsx)(D,{value:j,children:q}),t[83]=D,t[84]=j,t[85]=q,t[86]=J):J=t[86];let Y;t[87]!==f||t[88]!==d?(Y=!d&&(0,S.jsx)(se,{value:`tags`,children:(0,S.jsx)(le,{arn:f})}),t[87]=f,t[88]=d,t[89]=Y):Y=t[89];let X;t[90]!==O||t[91]!==M||t[92]!==N||t[93]!==P||t[94]!==J||t[95]!==Y?(X=(0,S.jsxs)(O,{defaultValue:M,children:[N,P,J,Y]}),t[90]=O,t[91]=M,t[92]=N,t[93]=P,t[94]=J,t[95]=Y,t[96]=X):X=t[96];let Z;t[97]!==F||t[98]!==I||t[99]!==L||t[100]!==X?(Z=(0,S.jsxs)(`div`,{className:F,children:[I,L,X]}),t[97]=F,t[98]=I,t[99]=L,t[100]=X,t[101]=Z):Z=t[101];let Q;t[102]===r?Q=t[103]:(Q=async()=>{await r({to:`/rds/describe-db-parameter-groups`})},t[102]=r,t[103]=Q);let $;t[104]!==n||t[105]!==_||t[106]!==Q?($=(0,S.jsx)(ue,{dbParameterGroupName:n,onDeleted:Q,onOpenChange:te,open:_}),t[104]=n,t[105]=_,t[106]=Q,t[107]=$):$=t[107];let me;return t[108]!==R||t[109]!==Z||t[110]!==$?(me=(0,S.jsxs)(S.Fragment,{children:[R,Z,$]}),t[108]=R,t[109]=Z,t[110]=$,t[111]=me):me=t[111],me}function pe(e){return e.Source===`user`}function k(){let e=(0,de.c)(4),{name:t}=v.useParams(),n;e[0]===t?n=e[1]:(n=o(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,S.jsx)(O,{dbParameterGroupName:n}),e[2]=n,e[3]=r),r}export{k as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{un as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{c,i as l,n as u,s as d,t as f}from"./select-Cn66OoPn.js";import{t as p}from"./trash-DVab4pEz.js";import{t as m}from"./button-qf9lLJ2x.js";import{t as h}from"./input-D3aUBtS6.js";import{b as g,s as ee,t as _}from"./rds-DIuGt87z.js";import{u as te}from"./rds-DbPUva_R.js";import{f as ne,u as re}from"./rds-Ca8CaJkU.js";import{t as v}from"./_name-eOQ9-J1Q.js";import{t as ie}from"./page-heading-vksh_67w.js";import{n as ae,t as y}from"./detail-row-DNBRlVeK.js";import{i as b,n as oe,r as se,t as ce}from"./tabs-BMSqRmVw.js";import{t as le}from"./rds-tags-tab-cQPAmoTz.js";import{t as ue}from"./delete-db-parameter-group-dialog-DVhsvQ9C.js";var de=r(),x=t(n(),1),S=e();function C(e){let t=e.AllowedValues??``;if(e.DataType!==`boolean`&&e.DataType!==`enum`)return null;let n=t.split(`,`).filter(e=>e.length>0);return n.length===0?null:n.includes(e.ParameterValue??``)?n:null}function w(e){return e.DataType===`integer`||e.DataType===`real`}function T(e){return e.ApplyType===`static`?_:e.ApplyMethod??`pending-reboot`}function E(e){let t=(0,de.c)(23),{parameter:n,value:r,options:i,editable:a,onChange:o}=e,s=n.ParameterName??``;if(!a){let e;return t[0]===r?e=t[1]:(e=(0,S.jsx)(`span`,{className:`font-mono text-xs`,children:r}),t[0]=r,t[1]=e),e}if(i){let e;t[2]===o?e=t[3]:(e=e=>{o(e??``)},t[2]=o,t[3]=e);let n=`Value of ${s}`,a;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,S.jsx)(c,{}),t[4]=a):a=t[4];let l;t[5]===n?l=t[6]:(l=(0,S.jsx)(d,{"aria-label":n,className:`w-40`,children:a}),t[5]=n,t[6]=l);let p;t[7]===i?p=t[8]:(p=i.map(D),t[7]=i,t[8]=p);let m;t[9]===p?m=t[10]:(m=(0,S.jsx)(u,{children:p}),t[9]=p,t[10]=m);let h;return t[11]!==e||t[12]!==l||t[13]!==m||t[14]!==r?(h=(0,S.jsxs)(f,{onValueChange:e,value:r,children:[l,m]}),t[11]=e,t[12]=l,t[13]=m,t[14]=r,t[15]=h):h=t[15],h}let l=`Value of ${s}`,p;t[16]===o?p=t[17]:(p=e=>{o(e.target.value)},t[16]=o,t[17]=p);let m=w(n)?`number`:`text`,g;return t[18]!==l||t[19]!==p||t[20]!==m||t[21]!==r?(g=(0,S.jsx)(h,{"aria-label":l,className:`w-40`,onChange:p,type:m,value:r}),t[18]=l,t[19]=p,t[20]=m,t[21]=r,t[22]=g):g=t[22],g}function D(e){return(0,S.jsx)(l,{value:e,children:e},e)}function fe({dbParameterGroupName:e,parameters:t,readOnly:n}){let r=te(),[i,a]=(0,x.useState)({}),[o,s]=(0,x.useState)(``),[p,g]=(0,x.useState)(`all`),_=Object.keys(i),ne=_.length>20,re=_.some(e=>(i[e]?.value??``).trim()===``),v=(e,t)=>{let n=e.ParameterName??``;a(r=>({...r,[n]:{value:e.ParameterValue??``,applyMethod:T(e),...r[n],...t}}))},ie=e=>{a(t=>{let{[e]:n,...r}=t;return r})},ae=async()=>{try{await r.mutateAsync({dbParameterGroupName:e,parameters:_.map(e=>({name:e,value:i[e]?.value??``,applyMethod:i[e]?.applyMethod??`pending-reboot`}))}),a({})}catch{}},y=o.trim().toLowerCase(),b=t.filter(e=>{let t=e.Source??``;return p===`user`&&t!==`user`||p===`engine-default`&&t===`user`?!1:(e.ParameterName??``).toLowerCase().includes(y)});return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,S.jsxs)(`div`,{className:`grow`,children:[(0,S.jsx)(`label`,{className:`sr-only`,htmlFor:`parameter-filter`,children:`Filter parameters`}),(0,S.jsx)(h,{id:`parameter-filter`,onChange:e=>{s(e.target.value)},placeholder:`Filter by parameter name`,value:o})]}),(0,S.jsxs)(f,{onValueChange:e=>{g(e??`all`)},value:p,children:[(0,S.jsx)(d,{"aria-label":`Filter by source`,className:`w-56`,children:(0,S.jsx)(c,{})}),(0,S.jsxs)(u,{children:[(0,S.jsx)(l,{value:`all`,children:`All parameters`}),(0,S.jsx)(l,{value:`user`,children:`Modified (user)`}),(0,S.jsx)(l,{value:`engine-default`,children:`Engine default`})]})]})]}),!n&&_.length>0&&(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 rounded-md border p-3`,children:[(0,S.jsxs)(`p`,{className:`text-sm`,children:[_.length,` parameter`,_.length===1?``:`s`,` edited`]}),(0,S.jsx)(m,{disabled:ne||re||r.isPending,onClick:()=>{ae()},size:`sm`,children:r.isPending?`Saving…`:`Save Changes`}),(0,S.jsx)(m,{onClick:()=>{a({})},size:`sm`,variant:`outline`,children:`Discard`}),ne&&(0,S.jsxs)(`p`,{className:`text-xs text-destructive`,children:[`At most `,20,` parameters can be saved at once. Each save is applied as a whole, so a larger edit is split by you rather than half-applied by us.`]}),re&&(0,S.jsx)(`p`,{className:`text-xs text-destructive`,children:`An edited parameter cannot be left blank.`})]}),r.error&&(0,S.jsx)(`p`,{className:`text-sm text-destructive`,children:r.error.message}),b.length>0?(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,S.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Value`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Allowed`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Source`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Apply`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,S.jsx)(`tbody`,{children:b.map(e=>{let t=e.ParameterName??``,r=i[t],a=C(e),o=!n&&e.IsModifiable,s=r?.value??e.ParameterValue??``,p=r?.applyMethod??T(e),h=ee(e.ApplyType);return(0,S.jsxs)(`tr`,{className:`border-b align-top last:border-0`,children:[(0,S.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:[t,(0,S.jsx)(`span`,{className:`mt-0.5 block font-sans text-muted-foreground`,children:e.Description})]}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:(0,S.jsx)(E,{editable:o??!1,onChange:t=>{v(e,{value:t})},options:a,parameter:e,value:s})}),(0,S.jsxs)(`td`,{className:`px-4 py-2 font-mono text-xs text-muted-foreground`,children:[e.AllowedValues??`—`,(0,S.jsxs)(`span`,{className:`mt-0.5 block font-sans`,children:[e.DataType,!e.IsModifiable&&` · fixed by the platform`]})]}),(0,S.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.Source}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:o&&r&&h.length>1?(0,S.jsxs)(f,{onValueChange:t=>{v(e,{applyMethod:t??`pending-reboot`})},value:p,children:[(0,S.jsx)(d,{"aria-label":`Apply method of ${t}`,className:`w-44`,children:(0,S.jsx)(c,{})}),(0,S.jsx)(u,{children:h.map(e=>(0,S.jsx)(l,{value:e,children:e},e))})]}):(0,S.jsxs)(`span`,{className:`text-xs`,children:[p,e.ApplyType===`static`&&(0,S.jsx)(`span`,{className:`mt-0.5 block text-muted-foreground`,children:`static — adopted at the next reboot`})]})}),(0,S.jsx)(`td`,{className:`px-4 py-2 text-right`,children:r&&(0,S.jsx)(m,{onClick:()=>{ie(t)},size:`sm`,variant:`ghost`,children:`Reset`})})]},t)})})]})}):(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`No parameter matches this filter.`})]})}function O(e){let t=(0,de.c)(112),{dbParameterGroupName:n}=e,r=a(),o;t[0]===n?o=t[1]:(o=re(n),t[0]=n,t[1]=o);let{data:c}=i(o),l=c.DBParameterGroups?.[0],u;t[2]===n?u=t[3]:(u=g(n),t[2]=n,t[3]=u);let d=u,f=d?``:l?.DBParameterGroupArn??``,h;t[4]===n?h=t[5]:(h=ne(n),t[4]=n,t[5]=h);let{data:ee}=i(h),[_,te]=(0,x.useState)(!1);if(!l?.DBParameterGroupName){let e;return t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`DB parameter group not found.`})]}),t[6]=e):e=t[6],e}let v;t[7]===ee.Parameters?v=t[8]:(v=ee.Parameters??[],t[7]=ee.Parameters,t[8]=v);let C=v,w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z,B,V,H,U;if(t[9]!==n||t[10]!==l.DBParameterGroupFamily||t[11]!==l.Description||t[12]!==d||t[13]!==C){let e=C.filter(pe).length;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,S.jsx)(s,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),t[34]=R):R=t[34],F=`space-y-6`;let r;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(r=()=>{te(!0)},t[35]=r):r=t[35];let i;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,S.jsx)(p,{className:`size-4`}),t[36]=i):i=t[36];let a;t[37]===d?a=t[38]:(a=(0,S.jsxs)(m,{disabled:d,onClick:r,size:`sm`,variant:`destructive`,children:[i,`Delete`]}),t[37]=d,t[38]=a),t[39]!==n||t[40]!==a?(I=(0,S.jsx)(ie,{actions:a,subtitle:`DB Parameter Group`,title:n}),t[39]=n,t[40]=a,t[41]=I):I=t[41],t[42]===d?L=t[43]:(L=d&&(0,S.jsxs)(`div`,{className:`rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-4 text-sm`,role:`note`,children:[(0,S.jsx)(`p`,{className:`font-medium`,children:`This is a default parameter group`}),(0,S.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`The service owns it. It can be read and attached to an instance, but it cannot be modified, deleted or tagged. Create your own group of the same family to change a value.`})]}),t[42]=d,t[43]=L),O=ce,M=`parameters`;let o,c;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,S.jsx)(b,{value:`parameters`,children:`Parameters`}),c=(0,S.jsx)(b,{value:`details`,children:`Details`}),t[44]=o,t[45]=c):(o=t[44],c=t[45]);let u;t[46]===d?u=t[47]:(u=!d&&(0,S.jsx)(b,{value:`tags`,children:`Tags`}),t[46]=d,t[47]=u),t[48]===u?N=t[49]:(N=(0,S.jsxs)(oe,{children:[o,c,u]}),t[48]=u,t[49]=N),t[50]!==n||t[51]!==d||t[52]!==C?(P=(0,S.jsx)(se,{value:`parameters`,children:(0,S.jsx)(fe,{dbParameterGroupName:n,parameters:C,readOnly:d})}),t[50]=n,t[51]=d,t[52]=C,t[53]=P):P=t[53],D=se,j=`details`,E=ae,t[54]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,S.jsx)(ae.Header,{children:`Details`}),t[54]=A):A=t[54],T=ae.Content,t[55]===l.DBParameterGroupFamily?V=t[56]:(V=(0,S.jsx)(y,{label:`Family`,value:l.DBParameterGroupFamily}),t[55]=l.DBParameterGroupFamily,t[56]=V),t[57]===l.Description?H=t[58]:(H=(0,S.jsx)(y,{label:`Description`,value:l.Description}),t[57]=l.Description,t[58]=H);let f=d?`Default`:`Customer`;t[59]===f?U=t[60]:(U=(0,S.jsx)(y,{label:`Type`,value:f}),t[59]=f,t[60]=U);let h;t[61]===C.length?h=t[62]:(h=C.length.toString(),t[61]=C.length,t[62]=h),t[63]===h?k=t[64]:(k=(0,S.jsx)(y,{label:`Parameters`,value:h}),t[63]=h,t[64]=k),w=y,z=`Overridden`,B=e.toString(),t[9]=n,t[10]=l.DBParameterGroupFamily,t[11]=l.Description,t[12]=d,t[13]=C,t[14]=w,t[15]=T,t[16]=E,t[17]=D,t[18]=O,t[19]=k,t[20]=A,t[21]=j,t[22]=M,t[23]=N,t[24]=P,t[25]=F,t[26]=I,t[27]=L,t[28]=R,t[29]=z,t[30]=B,t[31]=V,t[32]=H,t[33]=U}else w=t[14],T=t[15],E=t[16],D=t[17],O=t[18],k=t[19],A=t[20],j=t[21],M=t[22],N=t[23],P=t[24],F=t[25],I=t[26],L=t[27],R=t[28],z=t[29],B=t[30],V=t[31],H=t[32],U=t[33];let W;t[65]!==w||t[66]!==z||t[67]!==B?(W=(0,S.jsx)(w,{label:z,value:B}),t[65]=w,t[66]=z,t[67]=B,t[68]=W):W=t[68];let G;t[69]===l.DBParameterGroupArn?G=t[70]:(G=(0,S.jsx)(y,{label:`ARN`,value:l.DBParameterGroupArn}),t[69]=l.DBParameterGroupArn,t[70]=G);let K;t[71]!==T||t[72]!==k||t[73]!==W||t[74]!==G||t[75]!==V||t[76]!==H||t[77]!==U?(K=(0,S.jsxs)(T,{children:[V,H,U,k,W,G]}),t[71]=T,t[72]=k,t[73]=W,t[74]=G,t[75]=V,t[76]=H,t[77]=U,t[78]=K):K=t[78];let q;t[79]!==E||t[80]!==A||t[81]!==K?(q=(0,S.jsxs)(E,{children:[A,K]}),t[79]=E,t[80]=A,t[81]=K,t[82]=q):q=t[82];let J;t[83]!==D||t[84]!==j||t[85]!==q?(J=(0,S.jsx)(D,{value:j,children:q}),t[83]=D,t[84]=j,t[85]=q,t[86]=J):J=t[86];let Y;t[87]!==f||t[88]!==d?(Y=!d&&(0,S.jsx)(se,{value:`tags`,children:(0,S.jsx)(le,{arn:f})}),t[87]=f,t[88]=d,t[89]=Y):Y=t[89];let X;t[90]!==O||t[91]!==M||t[92]!==N||t[93]!==P||t[94]!==J||t[95]!==Y?(X=(0,S.jsxs)(O,{defaultValue:M,children:[N,P,J,Y]}),t[90]=O,t[91]=M,t[92]=N,t[93]=P,t[94]=J,t[95]=Y,t[96]=X):X=t[96];let Z;t[97]!==F||t[98]!==I||t[99]!==L||t[100]!==X?(Z=(0,S.jsxs)(`div`,{className:F,children:[I,L,X]}),t[97]=F,t[98]=I,t[99]=L,t[100]=X,t[101]=Z):Z=t[101];let Q;t[102]===r?Q=t[103]:(Q=async()=>{await r({to:`/rds/describe-db-parameter-groups`})},t[102]=r,t[103]=Q);let $;t[104]!==n||t[105]!==_||t[106]!==Q?($=(0,S.jsx)(ue,{dbParameterGroupName:n,onDeleted:Q,onOpenChange:te,open:_}),t[104]=n,t[105]=_,t[106]=Q,t[107]=$):$=t[107];let me;return t[108]!==R||t[109]!==Z||t[110]!==$?(me=(0,S.jsxs)(S.Fragment,{children:[R,Z,$]}),t[108]=R,t[109]=Z,t[110]=$,t[111]=me):me=t[111],me}function pe(e){return e.Source===`user`}function k(){let e=(0,de.c)(4),{name:t}=v.useParams(),n;e[0]===t?n=e[1]:(n=o(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,S.jsx)(O,{dbParameterGroupName:n}),e[2]=n,e[3]=r),r}export{k as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-COQ_UHPB.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-C0zfYVMg.js similarity index 58% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-COQ_UHPB.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-C0zfYVMg.js index 464070a66..a58235e2d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-COQ_UHPB.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-C0zfYVMg.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{ln as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./back-link-CjKy1JE5.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-BarTr35m.js";import{m as d}from"./rds-CyiqRExv.js";import{t as f}from"./_name-0Lr5w_9G.js";import{t as p}from"./page-heading-vksh_67w.js";import{n as m,t as h}from"./detail-row-DNBRlVeK.js";import{t as g}from"./state-badge-D1Z6q_OA.js";import{i as _,n as v,r as y,t as b}from"./tabs-t6sDAEVZ.js";import{t as x}from"./rds-tags-tab-CD2X7nDN.js";import{t as S}from"./delete-db-subnet-group-dialog-BgemfFMN.js";var C=r(),w=t(n(),1),T=e();function E(e){let t=(0,C.c)(53),{dbSubnetGroupName:n}=e,r=o(),a;t[0]===n?a=t[1]:(a=d(n),t[0]=n,t[1]=a);let{data:s}=i(a),f=s.DBSubnetGroups?.[0],E=f?.DBSubnetGroupArn??``,[O,k]=(0,w.useState)(!1);if(!f?.DBSubnetGroupName){let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(c,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),(0,T.jsx)(`p`,{className:`text-muted-foreground`,children:`DB subnet group not found.`})]}),t[2]=e):e=t[2],e}let A;t[3]===f.Subnets?A=t[4]:(A=f.Subnets??[],t[3]=f.Subnets,t[4]=A);let j=A,M;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,T.jsx)(c,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),t[5]=M):M=t[5];let N;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(N=()=>{k(!0)},t[6]=N):N=t[6];let P;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,T.jsxs)(u,{onClick:N,size:`sm`,variant:`destructive`,children:[(0,T.jsx)(l,{className:`size-4`}),`Delete`]}),t[7]=P):P=t[7];let F;t[8]===n?F=t[9]:(F=(0,T.jsx)(p,{actions:P,subtitle:`DB Subnet Group`,title:n}),t[8]=n,t[9]=F);let I;t[10]===f.SubnetGroupStatus?I=t[11]:(I=(0,T.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,T.jsx)(g,{state:f.SubnetGroupStatus})}),t[10]=f.SubnetGroupStatus,t[11]=I);let L;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,T.jsxs)(v,{children:[(0,T.jsx)(_,{value:`subnets`,children:`Subnets`}),(0,T.jsx)(_,{value:`tags`,children:`Tags`})]}),t[12]=L):L=t[12];let R;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,T.jsx)(m.Header,{children:`Details`}),t[13]=R):R=t[13];let z;t[14]===f.DBSubnetGroupDescription?z=t[15]:(z=(0,T.jsx)(h,{label:`Description`,value:f.DBSubnetGroupDescription}),t[14]=f.DBSubnetGroupDescription,t[15]=z);let B;t[16]===f.VpcId?B=t[17]:(B=(0,T.jsx)(h,{label:`VPC`,value:f.VpcId}),t[16]=f.VpcId,t[17]=B);let V;t[18]===j.length?V=t[19]:(V=j.length.toString(),t[18]=j.length,t[19]=V);let H;t[20]===V?H=t[21]:(H=(0,T.jsx)(h,{label:`Subnets`,value:V}),t[20]=V,t[21]=H);let U;t[22]===f.DBSubnetGroupArn?U=t[23]:(U=(0,T.jsx)(h,{label:`ARN`,value:f.DBSubnetGroupArn}),t[22]=f.DBSubnetGroupArn,t[23]=U);let W;t[24]!==z||t[25]!==B||t[26]!==H||t[27]!==U?(W=(0,T.jsxs)(m,{children:[R,(0,T.jsxs)(m.Content,{children:[z,B,H,U]})]}),t[24]=z,t[25]=B,t[26]=H,t[27]=U,t[28]=W):W=t[28];let G;t[29]===j?G=t[30]:(G=j.length>0?(0,T.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,T.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,T.jsx)(`thead`,{children:(0,T.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Subnet`}),(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Availability zone`}),(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`})]})}),(0,T.jsx)(`tbody`,{children:j.map(D)})]})}):(0,T.jsx)(`p`,{className:`text-muted-foreground`,children:`This group holds no subnets.`}),t[29]=j,t[30]=G);let K;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This group records which subnets RDS may place an endpoint in; each subnet's own CIDR, addresses and routing live on its EC2 page. Membership is fixed at create — ModifyDBSubnetGroup is not implemented. Changing it means creating a new group, which a DB instance can only adopt by being recreated.`}),t[31]=K):K=t[31];let q;t[32]!==W||t[33]!==G?(q=(0,T.jsx)(y,{value:`subnets`,children:(0,T.jsxs)(`div`,{className:`space-y-4`,children:[W,G,K]})}),t[32]=W,t[33]=G,t[34]=q):q=t[34];let J;t[35]===E?J=t[36]:(J=(0,T.jsx)(y,{value:`tags`,children:(0,T.jsx)(x,{arn:E})}),t[35]=E,t[36]=J);let Y;t[37]!==q||t[38]!==J?(Y=(0,T.jsxs)(b,{defaultValue:`subnets`,children:[L,q,J]}),t[37]=q,t[38]=J,t[39]=Y):Y=t[39];let X;t[40]!==Y||t[41]!==F||t[42]!==I?(X=(0,T.jsxs)(`div`,{className:`space-y-6`,children:[F,I,Y]}),t[40]=Y,t[41]=F,t[42]=I,t[43]=X):X=t[43];let Z;t[44]===r?Z=t[45]:(Z=async()=>{await r({to:`/rds/describe-db-subnet-groups`})},t[44]=r,t[45]=Z);let Q;t[46]!==n||t[47]!==O||t[48]!==Z?(Q=(0,T.jsx)(S,{dbSubnetGroupName:n,onDeleted:Z,onOpenChange:k,open:O}),t[46]=n,t[47]=O,t[48]=Z,t[49]=Q):Q=t[49];let $;return t[50]!==X||t[51]!==Q?($=(0,T.jsxs)(T.Fragment,{children:[M,X,Q]}),t[50]=X,t[51]=Q,t[52]=$):$=t[52],$}function D(e){return(0,T.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,T.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,T.jsx)(a,{className:`text-primary hover:underline`,params:{id:e.SubnetIdentifier??``},to:`/ec2/describe-subnets/$id`,children:e.SubnetIdentifier})}),(0,T.jsx)(`td`,{className:`px-4 py-2`,children:e.SubnetAvailabilityZone?.Name??`—`}),(0,T.jsx)(`td`,{className:`px-4 py-2`,children:e.SubnetStatus})]},e.SubnetIdentifier)}function O(){let e=(0,C.c)(4),{name:t}=f.useParams(),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,T.jsx)(E,{dbSubnetGroupName:n}),e[2]=n,e[3]=r),r}export{O as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{un as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./back-link-wsXUoJ12.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-qf9lLJ2x.js";import{m as d}from"./rds-Ca8CaJkU.js";import{t as f}from"./_name-CH7eAiV_.js";import{t as p}from"./page-heading-vksh_67w.js";import{n as m,t as h}from"./detail-row-DNBRlVeK.js";import{t as g}from"./state-badge-pn00UE1d.js";import{i as _,n as v,r as y,t as b}from"./tabs-BMSqRmVw.js";import{t as x}from"./rds-tags-tab-cQPAmoTz.js";import{t as S}from"./delete-db-subnet-group-dialog-Mj0lUr0p.js";var C=r(),w=t(n(),1),T=e();function E(e){let t=(0,C.c)(53),{dbSubnetGroupName:n}=e,r=o(),a;t[0]===n?a=t[1]:(a=d(n),t[0]=n,t[1]=a);let{data:s}=i(a),f=s.DBSubnetGroups?.[0],E=f?.DBSubnetGroupArn??``,[O,k]=(0,w.useState)(!1);if(!f?.DBSubnetGroupName){let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(c,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),(0,T.jsx)(`p`,{className:`text-muted-foreground`,children:`DB subnet group not found.`})]}),t[2]=e):e=t[2],e}let A;t[3]===f.Subnets?A=t[4]:(A=f.Subnets??[],t[3]=f.Subnets,t[4]=A);let j=A,M;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,T.jsx)(c,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),t[5]=M):M=t[5];let N;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(N=()=>{k(!0)},t[6]=N):N=t[6];let P;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,T.jsxs)(u,{onClick:N,size:`sm`,variant:`destructive`,children:[(0,T.jsx)(l,{className:`size-4`}),`Delete`]}),t[7]=P):P=t[7];let F;t[8]===n?F=t[9]:(F=(0,T.jsx)(p,{actions:P,subtitle:`DB Subnet Group`,title:n}),t[8]=n,t[9]=F);let I;t[10]===f.SubnetGroupStatus?I=t[11]:(I=(0,T.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,T.jsx)(g,{state:f.SubnetGroupStatus})}),t[10]=f.SubnetGroupStatus,t[11]=I);let L;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,T.jsxs)(v,{children:[(0,T.jsx)(_,{value:`subnets`,children:`Subnets`}),(0,T.jsx)(_,{value:`tags`,children:`Tags`})]}),t[12]=L):L=t[12];let R;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,T.jsx)(m.Header,{children:`Details`}),t[13]=R):R=t[13];let z;t[14]===f.DBSubnetGroupDescription?z=t[15]:(z=(0,T.jsx)(h,{label:`Description`,value:f.DBSubnetGroupDescription}),t[14]=f.DBSubnetGroupDescription,t[15]=z);let B;t[16]===f.VpcId?B=t[17]:(B=(0,T.jsx)(h,{label:`VPC`,value:f.VpcId}),t[16]=f.VpcId,t[17]=B);let V;t[18]===j.length?V=t[19]:(V=j.length.toString(),t[18]=j.length,t[19]=V);let H;t[20]===V?H=t[21]:(H=(0,T.jsx)(h,{label:`Subnets`,value:V}),t[20]=V,t[21]=H);let U;t[22]===f.DBSubnetGroupArn?U=t[23]:(U=(0,T.jsx)(h,{label:`ARN`,value:f.DBSubnetGroupArn}),t[22]=f.DBSubnetGroupArn,t[23]=U);let W;t[24]!==z||t[25]!==B||t[26]!==H||t[27]!==U?(W=(0,T.jsxs)(m,{children:[R,(0,T.jsxs)(m.Content,{children:[z,B,H,U]})]}),t[24]=z,t[25]=B,t[26]=H,t[27]=U,t[28]=W):W=t[28];let G;t[29]===j?G=t[30]:(G=j.length>0?(0,T.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,T.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,T.jsx)(`thead`,{children:(0,T.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Subnet`}),(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Availability zone`}),(0,T.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`})]})}),(0,T.jsx)(`tbody`,{children:j.map(D)})]})}):(0,T.jsx)(`p`,{className:`text-muted-foreground`,children:`This group holds no subnets.`}),t[29]=j,t[30]=G);let K;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This group records which subnets RDS may place an endpoint in; each subnet's own CIDR, addresses and routing live on its EC2 page. This console cannot edit membership; use aws rds modify-db-subnet-group. A running DB instance keeps the subnet its endpoint was placed in.`}),t[31]=K):K=t[31];let q;t[32]!==W||t[33]!==G?(q=(0,T.jsx)(y,{value:`subnets`,children:(0,T.jsxs)(`div`,{className:`space-y-4`,children:[W,G,K]})}),t[32]=W,t[33]=G,t[34]=q):q=t[34];let J;t[35]===E?J=t[36]:(J=(0,T.jsx)(y,{value:`tags`,children:(0,T.jsx)(x,{arn:E})}),t[35]=E,t[36]=J);let Y;t[37]!==q||t[38]!==J?(Y=(0,T.jsxs)(b,{defaultValue:`subnets`,children:[L,q,J]}),t[37]=q,t[38]=J,t[39]=Y):Y=t[39];let X;t[40]!==Y||t[41]!==F||t[42]!==I?(X=(0,T.jsxs)(`div`,{className:`space-y-6`,children:[F,I,Y]}),t[40]=Y,t[41]=F,t[42]=I,t[43]=X):X=t[43];let Z;t[44]===r?Z=t[45]:(Z=async()=>{await r({to:`/rds/describe-db-subnet-groups`})},t[44]=r,t[45]=Z);let Q;t[46]!==n||t[47]!==O||t[48]!==Z?(Q=(0,T.jsx)(S,{dbSubnetGroupName:n,onDeleted:Z,onOpenChange:k,open:O}),t[46]=n,t[47]=O,t[48]=Z,t[49]=Q):Q=t[49];let $;return t[50]!==X||t[51]!==Q?($=(0,T.jsxs)(T.Fragment,{children:[M,X,Q]}),t[50]=X,t[51]=Q,t[52]=$):$=t[52],$}function D(e){return(0,T.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,T.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,T.jsx)(a,{className:`text-primary hover:underline`,params:{id:e.SubnetIdentifier??``},to:`/ec2/describe-subnets/$id`,children:e.SubnetIdentifier})}),(0,T.jsx)(`td`,{className:`px-4 py-2`,children:e.SubnetAvailabilityZone?.Name??`—`}),(0,T.jsx)(`td`,{className:`px-4 py-2`,children:e.SubnetStatus})]},e.SubnetIdentifier)}function O(){let e=(0,C.c)(4),{name:t}=f.useParams(),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,T.jsx)(E,{dbSubnetGroupName:n}),e[2]=n,e[3]=r),r}export{O as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-CH7eAiV_.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-CH7eAiV_.js new file mode 100644 index 000000000..362692dfa --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-CH7eAiV_.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_name-C0zfYVMg.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/rds-Ca8CaJkU.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/rds-DIuGt87z.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/tabs-BMSqRmVw.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/useControlled-DwxdYHYK.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/rds-tags-tab-cQPAmoTz.js","assets/useQuery-2EKf7AyV.js","assets/rds-DbPUva_R.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/tags-editor-1LzJEWry.js","assets/plus-BodhJT2v.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js","assets/delete-db-subnet-group-dialog-Mj0lUr0p.js","assets/rds-delete-dialog-BWwoVrYv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{g as i,m as a}from"./rds-Ca8CaJkU.js";var o=e(`/_auth/rds/(subnet-groups)/describe-db-subnet-groups/$name`)({loader:async({context:e,params:t})=>{let r=n(t.name),o=(await e.queryClient.query({...a(r),staleTime:`static`})).DBSubnetGroups?.[0]?.DBSubnetGroupArn??``;o!==``&&await e.queryClient.query({...i(o),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.name)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_name-C0zfYVMg.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-eOQ9-J1Q.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-eOQ9-J1Q.js new file mode 100644 index 000000000..6b7cf1937 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_name-eOQ9-J1Q.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_name-BIXMGcMz.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/rds-DIuGt87z.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/rds-DbPUva_R.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/rds-Ca8CaJkU.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/tabs-BMSqRmVw.js","assets/rds-tags-tab-cQPAmoTz.js","assets/useQuery-2EKf7AyV.js","assets/tags-editor-1LzJEWry.js","assets/plus-BodhJT2v.js","assets/delete-db-parameter-group-dialog-DVhsvQ9C.js","assets/rds-delete-dialog-BWwoVrYv.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{b as i}from"./rds-DIuGt87z.js";import{f as a,g as o,u as s}from"./rds-Ca8CaJkU.js";var c=e(`/_auth/rds/(parameter-groups)/describe-db-parameter-groups/$name`)({loader:async({context:e,params:t})=>{let r=n(t.name),[c]=await Promise.all([e.queryClient.query({...s(r),staleTime:`static`}),e.queryClient.query({...a(r),staleTime:`static`})]),l=i(r)?``:c.DBParameterGroups?.[0]?.DBParameterGroupArn??``;l!==``&&await e.queryClient.query({...o(l),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${n(e.name)} | RDS | Mulga`}]}),component:t(()=>r(()=>import(`./_name-BIXMGcMz.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-CxrcnaS5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-CxrcnaS5.js deleted file mode 100644 index 68de621be..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-CxrcnaS5.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_policyArn-cVbhb4Qy.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/iam-CKOkzDco.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/queryOptions-Dfvzj6n2.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/policy-document-viewer-DAhLJAGU.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{ln as n,lt as r}from"./cluster-config-xw_Q7X1e.js";import{h as i,m as a}from"./iam-CVg27y22.js";var o=e(`/_auth/iam/(policies)/list-policies/$policyArn`)({loader:async({context:e,params:t})=>{let r=n(t.policyArn),o=await e.queryClient.query({...a(r),staleTime:`static`}),s=o.Policy?.DefaultVersionId;return s&&await e.queryClient.query({...i(r,s),staleTime:`static`}),o},head:({loaderData:e})=>({meta:[{title:`${e?.Policy?.PolicyName??`Policy`} | IAM | Mulga`}]}),component:t(()=>r(()=>import(`./_policyArn-cVbhb4Qy.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-cVbhb4Qy.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-DJSeODwO.js similarity index 81% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-cVbhb4Qy.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-DJSeODwO.js index aa5f15ad9..e22051675 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-cVbhb4Qy.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-DJSeODwO.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{in as a,ln as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{g as u}from"./iam-CKOkzDco.js";import{h as d,m as f}from"./iam-CVg27y22.js";import{t as p}from"./_policyArn-CxrcnaS5.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./policy-document-viewer-DAhLJAGU.js";var b=t(n()),x=e();function S(){let{policyArn:e}=p.useParams(),t=o(e),n=i(),{data:S}=r(f(t)),C=S.Policy,w=u(),[T,E]=(0,b.useState)(!1),D=C?.DefaultVersionId??`v1`,{data:O}=r(d(t,D)),k=O?.PolicyVersion?.Document?o(O.PolicyVersion.Document):null;return C?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/iam/list-policies`,children:`Back to policies`}),w.error&&(0,x.jsx)(h,{error:w.error,msg:`Failed to delete policy`}),(0,x.jsxs)(`div`,{className:`space-y-6`,children:[(0,x.jsx)(m,{actions:(0,x.jsxs)(l,{onClick:()=>{E(!0)},size:`sm`,variant:`destructive`,children:[(0,x.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Policy Details`,title:C.PolicyName??``}),(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`Policy Information`}),(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`Policy Name`,value:C.PolicyName}),(0,x.jsx)(v,{label:`Policy ID`,value:C.PolicyId}),(0,x.jsx)(v,{label:`ARN`,value:C.Arn}),(0,x.jsx)(v,{label:`Path`,value:C.Path}),(0,x.jsx)(v,{label:`Description`,value:C.Description??`-`}),(0,x.jsx)(v,{label:`Created`,value:a(C.CreateDate)})]})]}),k&&(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`Policy Document`}),(0,x.jsx)(`div`,{className:`p-4`,children:(0,x.jsx)(y,{document:k})})]})]}),(0,x.jsx)(g,{description:`Are you sure you want to delete the policy "${C.PolicyName}"? This action cannot be undone.`,isPending:w.isPending,onConfirm:async()=>{try{await w.mutateAsync(t),n({to:`/iam/list-policies`})}finally{E(!1)}},onOpenChange:E,open:T,title:`Delete Policy`})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/iam/list-policies`,children:`Back to policies`}),(0,x.jsx)(`p`,{className:`text-muted-foreground`,children:`Policy not found.`})]})}export{S as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{an as a,un as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{g as u}from"./iam-DpkrYySm.js";import{h as d,m as f}from"./iam-DmtL7LFe.js";import{t as p}from"./_policyArn-LEkekaXO.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./policy-document-viewer-DAhLJAGU.js";var b=t(n()),x=e();function S(){let{policyArn:e}=p.useParams(),t=o(e),n=i(),{data:S}=r(f(t)),C=S.Policy,w=u(),[T,E]=(0,b.useState)(!1),D=C?.DefaultVersionId??`v1`,{data:O}=r(d(t,D)),k=O?.PolicyVersion?.Document?o(O.PolicyVersion.Document):null;return C?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/iam/list-policies`,children:`Back to policies`}),w.error&&(0,x.jsx)(h,{error:w.error,msg:`Failed to delete policy`}),(0,x.jsxs)(`div`,{className:`space-y-6`,children:[(0,x.jsx)(m,{actions:(0,x.jsxs)(l,{onClick:()=>{E(!0)},size:`sm`,variant:`destructive`,children:[(0,x.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Policy Details`,title:C.PolicyName??``}),(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`Policy Information`}),(0,x.jsxs)(_.Content,{children:[(0,x.jsx)(v,{label:`Policy Name`,value:C.PolicyName}),(0,x.jsx)(v,{label:`Policy ID`,value:C.PolicyId}),(0,x.jsx)(v,{label:`ARN`,value:C.Arn}),(0,x.jsx)(v,{label:`Path`,value:C.Path}),(0,x.jsx)(v,{label:`Description`,value:C.Description??`-`}),(0,x.jsx)(v,{label:`Created`,value:a(C.CreateDate)})]})]}),k&&(0,x.jsxs)(_,{children:[(0,x.jsx)(_.Header,{children:`Policy Document`}),(0,x.jsx)(`div`,{className:`p-4`,children:(0,x.jsx)(y,{document:k})})]})]}),(0,x.jsx)(g,{description:`Are you sure you want to delete the policy "${C.PolicyName}"? This action cannot be undone.`,isPending:w.isPending,onConfirm:async()=>{try{await w.mutateAsync(t),n({to:`/iam/list-policies`})}finally{E(!1)}},onOpenChange:E,open:T,title:`Delete Policy`})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{to:`/iam/list-policies`,children:`Back to policies`}),(0,x.jsx)(`p`,{className:`text-muted-foreground`,children:`Policy not found.`})]})}export{S as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-LEkekaXO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-LEkekaXO.js new file mode 100644 index 000000000..d1a9806ea --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_policyArn-LEkekaXO.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_policyArn-DJSeODwO.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/iam-DpkrYySm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/queryOptions-Dfvzj6n2.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/policy-document-viewer-DAhLJAGU.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{un as n,ut as r}from"./cluster-config-DkOiY8HH.js";import{h as i,m as a}from"./iam-DmtL7LFe.js";var o=e(`/_auth/iam/(policies)/list-policies/$policyArn`)({loader:async({context:e,params:t})=>{let r=n(t.policyArn),o=await e.queryClient.query({...a(r),staleTime:`static`}),s=o.Policy?.DefaultVersionId;return s&&await e.queryClient.query({...i(r,s),staleTime:`static`}),o},head:({loaderData:e})=>({meta:[{title:`${e?.Policy?.PolicyName??`Policy`} | IAM | Mulga`}]}),component:t(()=>r(()=>import(`./_policyArn-DJSeODwO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35])),`component`)});export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C6IPjG-Q.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C6IPjG-Q.js new file mode 100644 index 000000000..c59a54328 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C6IPjG-Q.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_roleName-C8s3aUof.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/iam-DpkrYySm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/queryOptions-Dfvzj6n2.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/detail-row-DNBRlVeK.js","assets/policy-document-viewer-DAhLJAGU.js","assets/inline-policies-panel-Bd1RyDcb.js","assets/useQuery-2EKf7AyV.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/json-editor-02czSrbA.js","assets/textarea-DV1UO8hv.js","assets/iam-DpUWI3xh.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{d as r,g as i,p as a,r as o,v as s}from"./iam-DmtL7LFe.js";var c=e(`/_auth/iam/(roles)/list-roles/$roleName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...s(t.roleName),staleTime:`static`}),e.queryClient.query({...o(t.roleName),staleTime:`static`}),e.queryClient.query({...r(t.roleName),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i(t.roleName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.roleName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_roleName-C8s3aUof.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-oebxFrlq.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C8s3aUof.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-oebxFrlq.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C8s3aUof.js index 2c02c4d8d..05467f6df 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-oebxFrlq.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-C8s3aUof.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{in as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./back-link-CjKy1JE5.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-BarTr35m.js";import{_ as u}from"./iam-CKOkzDco.js";import{d,v as f}from"./iam-CVg27y22.js";import{t as p}from"./_roleName-Cb_y_odC.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./policy-document-viewer-DAhLJAGU.js";import{n as b,t as x}from"./inline-policies-panel-CppMS52c.js";var S=t(n()),C=e();function w(){let{roleName:e}=p.useParams(),t=a(),{data:n}=r(f(e)),{data:w}=r(d(e)),T=u(),[E,D]=(0,S.useState)(!1),O=n.Role,k=w.InstanceProfiles??[],A=O?.AssumeRolePolicyDocument?decodeURIComponent(O.AssumeRolePolicyDocument):null;return O?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{to:`/iam/list-roles`,children:`Back to roles`}),T.error&&(0,C.jsx)(h,{error:T.error,msg:`Failed to delete role`}),(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsx)(m,{actions:(0,C.jsxs)(l,{onClick:()=>{D(!0)},size:`sm`,variant:`destructive`,children:[(0,C.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Role Details`,title:O.RoleName??``}),(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Role Information`}),(0,C.jsxs)(_.Content,{children:[(0,C.jsx)(v,{label:`Role Name`,value:O.RoleName}),(0,C.jsx)(v,{label:`Role ID`,value:O.RoleId}),(0,C.jsx)(v,{label:`ARN`,value:O.Arn}),(0,C.jsx)(v,{label:`Path`,value:O.Path}),(0,C.jsx)(v,{label:`Description`,value:O.Description??`-`}),(0,C.jsx)(v,{label:`Created`,value:o(O.CreateDate)})]})]}),A&&(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Trust Policy`}),(0,C.jsx)(`div`,{className:`p-4`,children:(0,C.jsx)(y,{document:A})})]}),(0,C.jsx)(b,{kind:`role`,name:e}),(0,C.jsx)(x,{kind:`role`,name:e}),(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Instance Profiles`}),(0,C.jsx)(_.Content,{children:k.length>0?(0,C.jsx)(`div`,{className:`col-span-2 space-y-3`,children:k.map(e=>(0,C.jsxs)(i,{className:`flex items-center justify-between rounded-md border p-3 transition-colors hover:bg-accent`,params:{instanceProfileName:e.InstanceProfileName??``},to:`/iam/list-instance-profiles/$instanceProfileName`,children:[(0,C.jsx)(`p`,{className:`text-sm font-medium`,children:e.InstanceProfileName}),(0,C.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.InstanceProfileName))}):(0,C.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`This role is not in any instance profile.`})})]})]}),(0,C.jsx)(g,{description:`Are you sure you want to delete the role "${e}"? This action cannot be undone. You must detach all policies and remove it from all instance profiles first.`,isPending:T.isPending,onConfirm:async()=>{try{await T.mutateAsync(e),t({to:`/iam/list-roles`})}finally{D(!1)}},onOpenChange:D,open:E,title:`Delete Role`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{to:`/iam/list-roles`,children:`Back to roles`}),(0,C.jsx)(`p`,{className:`text-muted-foreground`,children:`Role not found.`})]})}export{w as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{an as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./back-link-wsXUoJ12.js";import{t as c}from"./trash-DVab4pEz.js";import{t as l}from"./button-qf9lLJ2x.js";import{_ as u}from"./iam-DpkrYySm.js";import{d,v as f}from"./iam-DmtL7LFe.js";import{t as p}from"./_roleName-C6IPjG-Q.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{t as g}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as _,t as v}from"./detail-row-DNBRlVeK.js";import{t as y}from"./policy-document-viewer-DAhLJAGU.js";import{n as b,t as x}from"./inline-policies-panel-Bd1RyDcb.js";var S=t(n()),C=e();function w(){let{roleName:e}=p.useParams(),t=a(),{data:n}=r(f(e)),{data:w}=r(d(e)),T=u(),[E,D]=(0,S.useState)(!1),O=n.Role,k=w.InstanceProfiles??[],A=O?.AssumeRolePolicyDocument?decodeURIComponent(O.AssumeRolePolicyDocument):null;return O?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{to:`/iam/list-roles`,children:`Back to roles`}),T.error&&(0,C.jsx)(h,{error:T.error,msg:`Failed to delete role`}),(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsx)(m,{actions:(0,C.jsxs)(l,{onClick:()=>{D(!0)},size:`sm`,variant:`destructive`,children:[(0,C.jsx)(c,{className:`size-4`}),`Delete`]}),subtitle:`Role Details`,title:O.RoleName??``}),(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Role Information`}),(0,C.jsxs)(_.Content,{children:[(0,C.jsx)(v,{label:`Role Name`,value:O.RoleName}),(0,C.jsx)(v,{label:`Role ID`,value:O.RoleId}),(0,C.jsx)(v,{label:`ARN`,value:O.Arn}),(0,C.jsx)(v,{label:`Path`,value:O.Path}),(0,C.jsx)(v,{label:`Description`,value:O.Description??`-`}),(0,C.jsx)(v,{label:`Created`,value:o(O.CreateDate)})]})]}),A&&(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Trust Policy`}),(0,C.jsx)(`div`,{className:`p-4`,children:(0,C.jsx)(y,{document:A})})]}),(0,C.jsx)(b,{kind:`role`,name:e}),(0,C.jsx)(x,{kind:`role`,name:e}),(0,C.jsxs)(_,{children:[(0,C.jsx)(_.Header,{children:`Instance Profiles`}),(0,C.jsx)(_.Content,{children:k.length>0?(0,C.jsx)(`div`,{className:`col-span-2 space-y-3`,children:k.map(e=>(0,C.jsxs)(i,{className:`flex items-center justify-between rounded-md border p-3 transition-colors hover:bg-accent`,params:{instanceProfileName:e.InstanceProfileName??``},to:`/iam/list-instance-profiles/$instanceProfileName`,children:[(0,C.jsx)(`p`,{className:`text-sm font-medium`,children:e.InstanceProfileName}),(0,C.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.InstanceProfileName))}):(0,C.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`This role is not in any instance profile.`})})]})]}),(0,C.jsx)(g,{description:`Are you sure you want to delete the role "${e}"? This action cannot be undone. You must detach all policies and remove it from all instance profiles first.`,isPending:T.isPending,onConfirm:async()=>{try{await T.mutateAsync(e),t({to:`/iam/list-roles`})}finally{D(!1)}},onOpenChange:D,open:E,title:`Delete Role`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{to:`/iam/list-roles`,children:`Back to roles`}),(0,C.jsx)(`p`,{className:`text-muted-foreground`,children:`Role not found.`})]})}export{w as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-Cb_y_odC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-Cb_y_odC.js deleted file mode 100644 index 638f7dec2..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_roleName-Cb_y_odC.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_roleName-oebxFrlq.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/trash-DVab4pEz.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/iam-CKOkzDco.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/queryOptions-Dfvzj6n2.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/detail-row-DNBRlVeK.js","assets/policy-document-viewer-DAhLJAGU.js","assets/inline-policies-panel-CppMS52c.js","assets/useQuery-2EKf7AyV.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/json-editor-Bwbz8mfn.js","assets/textarea-n04EavUm.js","assets/iam-Cgrr-Iit.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{d as r,g as i,p as a,r as o,v as s}from"./iam-CVg27y22.js";var c=e(`/_auth/iam/(roles)/list-roles/$roleName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...s(t.roleName),staleTime:`static`}),e.queryClient.query({...o(t.roleName),staleTime:`static`}),e.queryClient.query({...r(t.roleName),staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...i(t.roleName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.roleName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_roleName-oebxFrlq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-BtG8OFfw.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-BtG8OFfw.js deleted file mode 100644 index 166f0b5d0..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-BtG8OFfw.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_serviceName-CsvkFTXp.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/ecs-gqt7DXoF.js","assets/queryOptions-Dfvzj6n2.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{i as r,s as i}from"./ecs-gqt7DXoF.js";var a=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName_/services/$serviceName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.clusterName),staleTime:`static`}),e.queryClient.query({...i(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.serviceName} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_serviceName-CsvkFTXp.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DUMZmBWG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DUMZmBWG.js new file mode 100644 index 000000000..3451b2779 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DUMZmBWG.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_serviceName-DeA6Uuj8.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/ecs-BmKTMTV2.js","assets/queryOptions-Dfvzj6n2.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{i as r,s as i}from"./ecs-BmKTMTV2.js";var a=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName_/services/$serviceName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.clusterName),staleTime:`static`}),e.queryClient.query({...i(t.clusterName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.serviceName} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_serviceName-DeA6Uuj8.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),`component`)});export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-CsvkFTXp.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DeA6Uuj8.js similarity index 97% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-CsvkFTXp.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DeA6Uuj8.js index 331dcdc8d..61c9b0181 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-CsvkFTXp.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_serviceName-DeA6Uuj8.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./back-link-CjKy1JE5.js";import{i as a,s as o}from"./ecs-gqt7DXoF.js";import{t as s}from"./_serviceName-BtG8OFfw.js";import{t as c}from"./page-heading-vksh_67w.js";import{n as l,t as u}from"./detail-row-DNBRlVeK.js";import{t as d}from"./state-badge-D1Z6q_OA.js";var f=t(),p=e();function m(e){return e?.split(`/`).at(-1)??``}function h(e,t){return(e.attachments??[]).find(e=>e.type===`ElasticNetworkInterface`)?.details?.find(e=>e.name===t)?.value}function g(e){let t=(0,f.c)(69),{clusterName:s,serviceName:g}=e,b;t[0]===s?b=t[1]:(b=a(s),t[0]=s,t[1]=b);let{data:x}=n(b),S;t[2]===s?S=t[3]:(S=o(s),t[2]=s,t[3]=S);let{data:C}=n(S),w,T,E,D,O,k,A,j,M,N;if(t[4]!==s||t[5]!==g||t[6]!==x||t[7]!==C){E=Symbol.for(`react.early_return_sentinel`);bb0:{let e;t[18]===g?e=t[19]:(e=e=>e.serviceName===g,t[18]=g,t[19]=e);let n=x.find(e);if(!n){let e;t[20]===s?e=t[21]:(e={clusterName:s},t[20]=s,t[21]=e);let n;t[22]!==s||t[23]!==e?(n=(0,p.jsx)(i,{params:e,to:`/ecs/list-clusters/$clusterName`,children:s}),t[22]=s,t[23]=e,t[24]=n):n=t[24];let r;t[25]===g?r=t[26]:(r=(0,p.jsx)(c,{subtitle:`Service Details`,title:g}),t[25]=g,t[26]=r);let a;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`Service not found.`}),t[27]=a):a=t[27];let o;t[28]!==n||t[29]!==r?(o=(0,p.jsxs)(p.Fragment,{children:[n,r,a]}),t[28]=n,t[29]=r,t[30]=o):o=t[30],E=o;break bb0}let a=n.loadBalancers??[],o;t[31]===g?o=t[32]:(o=e=>e.group===`service:${g}`,t[31]=g,t[32]=o);let f=C.filter(o),b=n.deployments??[],S=n.events??[],P;t[33]===s?P=t[34]:(P={clusterName:s},t[33]=s,t[34]=P),t[35]!==s||t[36]!==P?(A=(0,p.jsx)(i,{params:P,to:`/ecs/list-clusters/$clusterName`,children:s}),t[35]=s,t[36]=P,t[37]=A):A=t[37],j=(0,p.jsx)(c,{actions:(0,p.jsx)(d,{state:n.status}),subtitle:`Service Details`,title:g});let F;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,p.jsx)(l.Header,{children:`Configuration`}),t[38]=F):F=t[38];let I=String(n.desiredCount??0),L;t[39]===I?L=t[40]:(L=(0,p.jsx)(u,{label:`Desired count`,value:I}),t[39]=I,t[40]=L);let R=String(n.runningCount??0),z;t[41]===R?z=t[42]:(z=(0,p.jsx)(u,{label:`Running count`,value:R}),t[41]=R,t[42]=z);let B=String(n.pendingCount??0),V;t[43]===B?V=t[44]:(V=(0,p.jsx)(u,{label:`Pending count`,value:B}),t[43]=B,t[44]=V);let H=(0,p.jsxs)(l.Content,{children:[(0,p.jsx)(u,{label:`Status`,value:(0,p.jsx)(d,{state:n.status})}),L,z,V,(0,p.jsx)(u,{label:`Task definition`,value:m(n.taskDefinition)}),(0,p.jsx)(u,{label:`Launch type`,value:n.launchType}),(0,p.jsx)(u,{label:`Scheduling strategy`,value:n.schedulingStrategy})]});t[45]===H?M=t[46]:(M=(0,p.jsxs)(l,{children:[F,H]}),t[45]=H,t[46]=M);let U;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Load balancers`}),t[47]=U):U=t[47];let W=a.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target Group`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Container`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`})]})}),(0,p.jsx)(`tbody`,{children:a.map(y)})]})});t[48]===W?N=t[49]:(N=(0,p.jsxs)(`div`,{className:`mt-6`,children:[U,W]}),t[48]=W,t[49]=N);let G;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Tasks`}),t[50]=G):G=t[50];let K=f.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`No tasks found.`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Last Status`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Private IP`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Public IP`})]})}),(0,p.jsx)(`tbody`,{children:f.map(e=>{let t=m(e.taskArn);return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,p.jsx)(r,{className:`underline`,params:{clusterName:s,taskId:t},to:`/ecs/list-clusters/$clusterName/tasks/$taskId`,children:t})}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:(0,p.jsx)(d,{state:e.lastStatus})}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:h(e,`privateIPv4Address`)??`—`}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:h(e,`publicIPv4Address`)??`—`})]},t)})})]})});t[51]===K?w=t[52]:(w=(0,p.jsxs)(`div`,{className:`mt-6`,children:[G,K]}),t[51]=K,t[52]=w);let q;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Deployments`}),t[53]=q):q=t[53];let J=b.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task Definition`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`})]})}),(0,p.jsx)(`tbody`,{children:b.map(v)})]})});t[54]===J?T=t[55]:(T=(0,p.jsxs)(`div`,{className:`mt-6`,children:[q,J]}),t[54]=J,t[55]=T),D=`mt-6`,t[56]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Events`}),t[56]=O):O=t[56],k=S.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Time`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Message`})]})}),(0,p.jsx)(`tbody`,{children:S.map(_)})]})})}t[4]=s,t[5]=g,t[6]=x,t[7]=C,t[8]=w,t[9]=T,t[10]=E,t[11]=D,t[12]=O,t[13]=k,t[14]=A,t[15]=j,t[16]=M,t[17]=N}else w=t[8],T=t[9],E=t[10],D=t[11],O=t[12],k=t[13],A=t[14],j=t[15],M=t[16],N=t[17];if(E!==Symbol.for(`react.early_return_sentinel`))return E;let P;t[57]!==D||t[58]!==O||t[59]!==k?(P=(0,p.jsxs)(`div`,{className:D,children:[O,k]}),t[57]=D,t[58]=O,t[59]=k,t[60]=P):P=t[60];let F;return t[61]!==w||t[62]!==T||t[63]!==P||t[64]!==A||t[65]!==j||t[66]!==M||t[67]!==N?(F=(0,p.jsxs)(p.Fragment,{children:[A,j,M,N,w,T,P]}),t[61]=w,t[62]=T,t[63]=P,t[64]=A,t[65]=j,t[66]=M,t[67]=N,t[68]=F):F=t[68],F}function _(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.createdAt?new Date(e.createdAt).toISOString():``}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.message})]},e.id)}function v(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.status}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:m(e.taskDefinition)}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredCount??0}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.runningCount??0}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingCount??0})]},e.id)}function y(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:m(e.targetGroupArn)}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.containerName}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.containerPort})]},`${e.targetGroupArn??``}-${e.containerName??``}-${e.containerPort??``}`)}function b(){let e=(0,f.c)(3),{clusterName:t,serviceName:n}=s.useParams(),r;return e[0]!==t||e[1]!==n?(r=(0,p.jsx)(g,{clusterName:t,serviceName:n}),e[0]=t,e[1]=n,e[2]=r):r=e[2],r}export{b as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./back-link-wsXUoJ12.js";import{i as a,s as o}from"./ecs-BmKTMTV2.js";import{t as s}from"./_serviceName-DUMZmBWG.js";import{t as c}from"./page-heading-vksh_67w.js";import{n as l,t as u}from"./detail-row-DNBRlVeK.js";import{t as d}from"./state-badge-pn00UE1d.js";var f=t(),p=e();function m(e){return e?.split(`/`).at(-1)??``}function h(e,t){return(e.attachments??[]).find(e=>e.type===`ElasticNetworkInterface`)?.details?.find(e=>e.name===t)?.value}function g(e){let t=(0,f.c)(69),{clusterName:s,serviceName:g}=e,b;t[0]===s?b=t[1]:(b=a(s),t[0]=s,t[1]=b);let{data:x}=n(b),S;t[2]===s?S=t[3]:(S=o(s),t[2]=s,t[3]=S);let{data:C}=n(S),w,T,E,D,O,k,A,j,M,N;if(t[4]!==s||t[5]!==g||t[6]!==x||t[7]!==C){E=Symbol.for(`react.early_return_sentinel`);bb0:{let e;t[18]===g?e=t[19]:(e=e=>e.serviceName===g,t[18]=g,t[19]=e);let n=x.find(e);if(!n){let e;t[20]===s?e=t[21]:(e={clusterName:s},t[20]=s,t[21]=e);let n;t[22]!==s||t[23]!==e?(n=(0,p.jsx)(i,{params:e,to:`/ecs/list-clusters/$clusterName`,children:s}),t[22]=s,t[23]=e,t[24]=n):n=t[24];let r;t[25]===g?r=t[26]:(r=(0,p.jsx)(c,{subtitle:`Service Details`,title:g}),t[25]=g,t[26]=r);let a;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`Service not found.`}),t[27]=a):a=t[27];let o;t[28]!==n||t[29]!==r?(o=(0,p.jsxs)(p.Fragment,{children:[n,r,a]}),t[28]=n,t[29]=r,t[30]=o):o=t[30],E=o;break bb0}let a=n.loadBalancers??[],o;t[31]===g?o=t[32]:(o=e=>e.group===`service:${g}`,t[31]=g,t[32]=o);let f=C.filter(o),b=n.deployments??[],S=n.events??[],P;t[33]===s?P=t[34]:(P={clusterName:s},t[33]=s,t[34]=P),t[35]!==s||t[36]!==P?(A=(0,p.jsx)(i,{params:P,to:`/ecs/list-clusters/$clusterName`,children:s}),t[35]=s,t[36]=P,t[37]=A):A=t[37],j=(0,p.jsx)(c,{actions:(0,p.jsx)(d,{state:n.status}),subtitle:`Service Details`,title:g});let F;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,p.jsx)(l.Header,{children:`Configuration`}),t[38]=F):F=t[38];let I=String(n.desiredCount??0),L;t[39]===I?L=t[40]:(L=(0,p.jsx)(u,{label:`Desired count`,value:I}),t[39]=I,t[40]=L);let R=String(n.runningCount??0),z;t[41]===R?z=t[42]:(z=(0,p.jsx)(u,{label:`Running count`,value:R}),t[41]=R,t[42]=z);let B=String(n.pendingCount??0),V;t[43]===B?V=t[44]:(V=(0,p.jsx)(u,{label:`Pending count`,value:B}),t[43]=B,t[44]=V);let H=(0,p.jsxs)(l.Content,{children:[(0,p.jsx)(u,{label:`Status`,value:(0,p.jsx)(d,{state:n.status})}),L,z,V,(0,p.jsx)(u,{label:`Task definition`,value:m(n.taskDefinition)}),(0,p.jsx)(u,{label:`Launch type`,value:n.launchType}),(0,p.jsx)(u,{label:`Scheduling strategy`,value:n.schedulingStrategy})]});t[45]===H?M=t[46]:(M=(0,p.jsxs)(l,{children:[F,H]}),t[45]=H,t[46]=M);let U;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Load balancers`}),t[47]=U):U=t[47];let W=a.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target Group`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Container`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`})]})}),(0,p.jsx)(`tbody`,{children:a.map(y)})]})});t[48]===W?N=t[49]:(N=(0,p.jsxs)(`div`,{className:`mt-6`,children:[U,W]}),t[48]=W,t[49]=N);let G;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Tasks`}),t[50]=G):G=t[50];let K=f.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`No tasks found.`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Last Status`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Private IP`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Public IP`})]})}),(0,p.jsx)(`tbody`,{children:f.map(e=>{let t=m(e.taskArn);return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:(0,p.jsx)(r,{className:`underline`,params:{clusterName:s,taskId:t},to:`/ecs/list-clusters/$clusterName/tasks/$taskId`,children:t})}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:(0,p.jsx)(d,{state:e.lastStatus})}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:h(e,`privateIPv4Address`)??`—`}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:h(e,`publicIPv4Address`)??`—`})]},t)})})]})});t[51]===K?w=t[52]:(w=(0,p.jsxs)(`div`,{className:`mt-6`,children:[G,K]}),t[51]=K,t[52]=w);let q;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Deployments`}),t[53]=q):q=t[53];let J=b.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Task Definition`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Desired`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Pending`})]})}),(0,p.jsx)(`tbody`,{children:b.map(v)})]})});t[54]===J?T=t[55]:(T=(0,p.jsxs)(`div`,{className:`mt-6`,children:[q,J]}),t[54]=J,t[55]=T),D=`mt-6`,t[56]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,p.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Events`}),t[56]=O):O=t[56],k=S.length===0?(0,p.jsx)(`p`,{className:`text-muted-foreground`,children:`None`}):(0,p.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,p.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Time`}),(0,p.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Message`})]})}),(0,p.jsx)(`tbody`,{children:S.map(_)})]})})}t[4]=s,t[5]=g,t[6]=x,t[7]=C,t[8]=w,t[9]=T,t[10]=E,t[11]=D,t[12]=O,t[13]=k,t[14]=A,t[15]=j,t[16]=M,t[17]=N}else w=t[8],T=t[9],E=t[10],D=t[11],O=t[12],k=t[13],A=t[14],j=t[15],M=t[16],N=t[17];if(E!==Symbol.for(`react.early_return_sentinel`))return E;let P;t[57]!==D||t[58]!==O||t[59]!==k?(P=(0,p.jsxs)(`div`,{className:D,children:[O,k]}),t[57]=D,t[58]=O,t[59]=k,t[60]=P):P=t[60];let F;return t[61]!==w||t[62]!==T||t[63]!==P||t[64]!==A||t[65]!==j||t[66]!==M||t[67]!==N?(F=(0,p.jsxs)(p.Fragment,{children:[A,j,M,N,w,T,P]}),t[61]=w,t[62]=T,t[63]=P,t[64]=A,t[65]=j,t[66]=M,t[67]=N,t[68]=F):F=t[68],F}function _(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.createdAt?new Date(e.createdAt).toISOString():``}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.message})]},e.id)}function v(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.status}),(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:m(e.taskDefinition)}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.desiredCount??0}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.runningCount??0}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.pendingCount??0})]},e.id)}function y(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:m(e.targetGroupArn)}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.containerName}),(0,p.jsx)(`td`,{className:`px-4 py-2`,children:e.containerPort})]},`${e.targetGroupArn??``}-${e.containerName??``}-${e.containerPort??``}`)}function b(){let e=(0,f.c)(3),{clusterName:t,serviceName:n}=s.useParams(),r;return e[0]!==t||e[1]!==n?(r=(0,p.jsx)(g,{clusterName:t,serviceName:n}),e[0]=t,e[1]=n,e[2]=r):r=e[2],r}export{b as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-CLQmNms7.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-BEQXEjb1.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-CLQmNms7.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-BEQXEjb1.js index 33be24cd0..2d99762c8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-CLQmNms7.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-BEQXEjb1.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./back-link-CjKy1JE5.js";import{s as i}from"./ecs-gqt7DXoF.js";import{t as a}from"./_taskId-sla3KnqA.js";import{t as o}from"./page-heading-vksh_67w.js";import{n as s,t as c}from"./detail-row-DNBRlVeK.js";import{t as l}from"./state-badge-D1Z6q_OA.js";var u=t(),d=e();function f(e){return e?.split(`/`).at(-1)??``}function p(e,t){return e?.details?.find(e=>e.name===t)?.value}function m(e){return e?new Date(e).toISOString():``}function h(e){let t=(0,u.c)(48),{clusterName:a,taskId:h}=e,v;t[0]===a?v=t[1]:(v=i(a),t[0]=a,t[1]=v);let{data:y}=n(v),b,x,S,C,w,T,E,D;if(t[2]!==a||t[3]!==h||t[4]!==y){D=Symbol.for(`react.early_return_sentinel`);bb0:{let e;t[13]===h?e=t[14]:(e=e=>(e.taskArn??``).endsWith(h),t[13]=h,t[14]=e);let n=y.find(e);if(!n){let e;t[15]===a?e=t[16]:(e={clusterName:a},t[15]=a,t[16]=e);let n;t[17]!==a||t[18]!==e?(n=(0,d.jsx)(r,{params:e,to:`/ecs/list-clusters/$clusterName`,children:a}),t[17]=a,t[18]=e,t[19]=n):n=t[19];let i;t[20]===h?i=t[21]:(i=(0,d.jsx)(o,{subtitle:`Task Details`,title:h}),t[20]=h,t[21]=i);let s;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Task not found.`}),t[22]=s):s=t[22];let c;t[23]!==n||t[24]!==i?(c=(0,d.jsxs)(d.Fragment,{children:[n,i,s]}),t[23]=n,t[24]=i,t[25]=c):c=t[25],D=c;break bb0}let i=(n.attachments??[]).find(_),u=n.containers??[],v=u.some(g),O;t[26]===a?O=t[27]:(O={clusterName:a},t[26]=a,t[27]=O),t[28]!==a||t[29]!==O?(C=(0,d.jsx)(r,{params:O,to:`/ecs/list-clusters/$clusterName`,children:a}),t[28]=a,t[29]=O,t[30]=C):C=t[30],w=(0,d.jsx)(o,{actions:(0,d.jsx)(l,{state:n.lastStatus}),subtitle:`Task Details`,title:f(n.taskArn)});let k;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,d.jsx)(s.Header,{children:`Configuration`}),t[31]=k):k=t[31];let A=(0,d.jsxs)(s.Content,{children:[(0,d.jsx)(c,{label:`Task ID`,value:f(n.taskArn)}),(0,d.jsx)(c,{label:`Last status`,value:(0,d.jsx)(l,{state:n.lastStatus})}),(0,d.jsx)(c,{label:`Desired status`,value:n.desiredStatus}),(0,d.jsx)(c,{label:`Task definition`,value:f(n.taskDefinitionArn)}),(0,d.jsx)(c,{label:`Launch type`,value:n.launchType}),(0,d.jsx)(c,{label:`Container instance`,value:f(n.containerInstanceArn)}),(0,d.jsx)(c,{label:`Created at`,value:m(n.createdAt)}),(0,d.jsx)(c,{label:`Started at`,value:m(n.startedAt)}),(0,d.jsx)(c,{label:`Stopped at`,value:m(n.stoppedAt)}),n.stoppedReason?(0,d.jsx)(c,{label:`Stopped reason`,value:n.stoppedReason}):null]});t[32]===A?T=t[33]:(T=(0,d.jsxs)(s,{children:[k,A]}),t[32]=A,t[33]=T);let j;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,d.jsx)(s.Header,{children:`Networking`}),t[34]=j):j=t[34];let M=i?(0,d.jsxs)(s.Content,{children:[(0,d.jsx)(c,{label:`ENI ID`,value:p(i,`networkInterfaceId`)}),(0,d.jsx)(c,{label:`Private IP`,value:p(i,`privateIPv4Address`)}),(0,d.jsx)(c,{label:`Public IP`,value:p(i,`publicIPv4Address`)}),(0,d.jsx)(c,{label:`Subnet`,value:p(i,`subnetId`)}),(0,d.jsx)(c,{label:`MAC`,value:p(i,`macAddress`)})]}):(0,d.jsx)(`div`,{className:`p-4`,children:(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Network mode does not assign an ENI.`})});t[35]===M?E=t[36]:(E=(0,d.jsx)(`div`,{className:`mt-6`,children:(0,d.jsxs)(s,{children:[j,M]})}),t[35]=M,t[36]=E),b=`mt-6`,t[37]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,d.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Containers`}),t[37]=x):x=t[37],S=u.length===0?(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No containers.`}):(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Image`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Exit Code / Reason`}),v&&(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`GPUs`})]})}),(0,d.jsx)(`tbody`,{children:u.map(e=>(0,d.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:e.name}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.image}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:(0,d.jsx)(l,{state:e.lastStatus})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.healthStatus}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.exitCode===void 0?e.reason??``:String(e.exitCode)}),v&&(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.gpuIds&&e.gpuIds.length>0?e.gpuIds.join(`, `):`—`})]},e.name??e.containerArn))})]})})}t[2]=a,t[3]=h,t[4]=y,t[5]=b,t[6]=x,t[7]=S,t[8]=C,t[9]=w,t[10]=T,t[11]=E,t[12]=D}else b=t[5],x=t[6],S=t[7],C=t[8],w=t[9],T=t[10],E=t[11],D=t[12];if(D!==Symbol.for(`react.early_return_sentinel`))return D;let O;t[38]!==b||t[39]!==x||t[40]!==S?(O=(0,d.jsxs)(`div`,{className:b,children:[x,S]}),t[38]=b,t[39]=x,t[40]=S,t[41]=O):O=t[41];let k;return t[42]!==O||t[43]!==C||t[44]!==w||t[45]!==T||t[46]!==E?(k=(0,d.jsxs)(d.Fragment,{children:[C,w,T,E,O]}),t[42]=O,t[43]=C,t[44]=w,t[45]=T,t[46]=E,t[47]=k):k=t[47],k}function g(e){return(e.gpuIds?.length??0)>0}function _(e){return e.type===`ElasticNetworkInterface`}function v(){let e=(0,u.c)(3),{clusterName:t,taskId:n}=a.useParams(),r;return e[0]!==t||e[1]!==n?(r=(0,d.jsx)(h,{clusterName:t,taskId:n}),e[0]=t,e[1]=n,e[2]=r):r=e[2],r}export{v as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./back-link-wsXUoJ12.js";import{s as i}from"./ecs-BmKTMTV2.js";import{t as a}from"./_taskId-QnQ-Yd6e.js";import{t as o}from"./page-heading-vksh_67w.js";import{n as s,t as c}from"./detail-row-DNBRlVeK.js";import{t as l}from"./state-badge-pn00UE1d.js";var u=t(),d=e();function f(e){return e?.split(`/`).at(-1)??``}function p(e,t){return e?.details?.find(e=>e.name===t)?.value}function m(e){return e?new Date(e).toISOString():``}function h(e){let t=(0,u.c)(48),{clusterName:a,taskId:h}=e,v;t[0]===a?v=t[1]:(v=i(a),t[0]=a,t[1]=v);let{data:y}=n(v),b,x,S,C,w,T,E,D;if(t[2]!==a||t[3]!==h||t[4]!==y){D=Symbol.for(`react.early_return_sentinel`);bb0:{let e;t[13]===h?e=t[14]:(e=e=>(e.taskArn??``).endsWith(h),t[13]=h,t[14]=e);let n=y.find(e);if(!n){let e;t[15]===a?e=t[16]:(e={clusterName:a},t[15]=a,t[16]=e);let n;t[17]!==a||t[18]!==e?(n=(0,d.jsx)(r,{params:e,to:`/ecs/list-clusters/$clusterName`,children:a}),t[17]=a,t[18]=e,t[19]=n):n=t[19];let i;t[20]===h?i=t[21]:(i=(0,d.jsx)(o,{subtitle:`Task Details`,title:h}),t[20]=h,t[21]=i);let s;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Task not found.`}),t[22]=s):s=t[22];let c;t[23]!==n||t[24]!==i?(c=(0,d.jsxs)(d.Fragment,{children:[n,i,s]}),t[23]=n,t[24]=i,t[25]=c):c=t[25],D=c;break bb0}let i=(n.attachments??[]).find(_),u=n.containers??[],v=u.some(g),O;t[26]===a?O=t[27]:(O={clusterName:a},t[26]=a,t[27]=O),t[28]!==a||t[29]!==O?(C=(0,d.jsx)(r,{params:O,to:`/ecs/list-clusters/$clusterName`,children:a}),t[28]=a,t[29]=O,t[30]=C):C=t[30],w=(0,d.jsx)(o,{actions:(0,d.jsx)(l,{state:n.lastStatus}),subtitle:`Task Details`,title:f(n.taskArn)});let k;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,d.jsx)(s.Header,{children:`Configuration`}),t[31]=k):k=t[31];let A=(0,d.jsxs)(s.Content,{children:[(0,d.jsx)(c,{label:`Task ID`,value:f(n.taskArn)}),(0,d.jsx)(c,{label:`Last status`,value:(0,d.jsx)(l,{state:n.lastStatus})}),(0,d.jsx)(c,{label:`Desired status`,value:n.desiredStatus}),(0,d.jsx)(c,{label:`Task definition`,value:f(n.taskDefinitionArn)}),(0,d.jsx)(c,{label:`Launch type`,value:n.launchType}),(0,d.jsx)(c,{label:`Container instance`,value:f(n.containerInstanceArn)}),(0,d.jsx)(c,{label:`Created at`,value:m(n.createdAt)}),(0,d.jsx)(c,{label:`Started at`,value:m(n.startedAt)}),(0,d.jsx)(c,{label:`Stopped at`,value:m(n.stoppedAt)}),n.stoppedReason?(0,d.jsx)(c,{label:`Stopped reason`,value:n.stoppedReason}):null]});t[32]===A?T=t[33]:(T=(0,d.jsxs)(s,{children:[k,A]}),t[32]=A,t[33]=T);let j;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,d.jsx)(s.Header,{children:`Networking`}),t[34]=j):j=t[34];let M=i?(0,d.jsxs)(s.Content,{children:[(0,d.jsx)(c,{label:`ENI ID`,value:p(i,`networkInterfaceId`)}),(0,d.jsx)(c,{label:`Private IP`,value:p(i,`privateIPv4Address`)}),(0,d.jsx)(c,{label:`Public IP`,value:p(i,`publicIPv4Address`)}),(0,d.jsx)(c,{label:`Subnet`,value:p(i,`subnetId`)}),(0,d.jsx)(c,{label:`MAC`,value:p(i,`macAddress`)})]}):(0,d.jsx)(`div`,{className:`p-4`,children:(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Network mode does not assign an ENI.`})});t[35]===M?E=t[36]:(E=(0,d.jsx)(`div`,{className:`mt-6`,children:(0,d.jsxs)(s,{children:[j,M]})}),t[35]=M,t[36]=E),b=`mt-6`,t[37]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,d.jsx)(`h2`,{className:`mb-2 font-semibold`,children:`Containers`}),t[37]=x):x=t[37],S=u.length===0?(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No containers.`}):(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Image`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Exit Code / Reason`}),v&&(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`GPUs`})]})}),(0,d.jsx)(`tbody`,{children:u.map(e=>(0,d.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:e.name}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.image}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:(0,d.jsx)(l,{state:e.lastStatus})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.healthStatus}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.exitCode===void 0?e.reason??``:String(e.exitCode)}),v&&(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.gpuIds&&e.gpuIds.length>0?e.gpuIds.join(`, `):`—`})]},e.name??e.containerArn))})]})})}t[2]=a,t[3]=h,t[4]=y,t[5]=b,t[6]=x,t[7]=S,t[8]=C,t[9]=w,t[10]=T,t[11]=E,t[12]=D}else b=t[5],x=t[6],S=t[7],C=t[8],w=t[9],T=t[10],E=t[11],D=t[12];if(D!==Symbol.for(`react.early_return_sentinel`))return D;let O;t[38]!==b||t[39]!==x||t[40]!==S?(O=(0,d.jsxs)(`div`,{className:b,children:[x,S]}),t[38]=b,t[39]=x,t[40]=S,t[41]=O):O=t[41];let k;return t[42]!==O||t[43]!==C||t[44]!==w||t[45]!==T||t[46]!==E?(k=(0,d.jsxs)(d.Fragment,{children:[C,w,T,E,O]}),t[42]=O,t[43]=C,t[44]=w,t[45]=T,t[46]=E,t[47]=k):k=t[47],k}function g(e){return(e.gpuIds?.length??0)>0}function _(e){return e.type===`ElasticNetworkInterface`}function v(){let e=(0,u.c)(3),{clusterName:t,taskId:n}=a.useParams(),r;return e[0]!==t||e[1]!==n?(r=(0,d.jsx)(h,{clusterName:t,taskId:n}),e[0]=t,e[1]=n,e[2]=r):r=e[2],r}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-QnQ-Yd6e.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-QnQ-Yd6e.js new file mode 100644 index 000000000..eaff34bdd --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-QnQ-Yd6e.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_taskId-BEQXEjb1.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/createLucideIcon-BQgzNCBR.js","assets/ecs-BmKTMTV2.js","assets/queryOptions-Dfvzj6n2.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{s as r}from"./ecs-BmKTMTV2.js";var i=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName_/tasks/$taskId`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.clusterName),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.taskId} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_taskId-BEQXEjb1.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-sla3KnqA.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-sla3KnqA.js deleted file mode 100644 index 2fffdd995..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_taskId-sla3KnqA.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_taskId-CLQmNms7.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/createLucideIcon-BQgzNCBR.js","assets/ecs-gqt7DXoF.js","assets/queryOptions-Dfvzj6n2.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/page-heading-vksh_67w.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{s as r}from"./ecs-gqt7DXoF.js";var i=e(`/_auth/ecs/(clusters)/list-clusters/$clusterName_/tasks/$taskId`)({loader:async({context:e,params:t})=>{await e.queryClient.query({...r(t.clusterName),staleTime:`static`})},head:({params:e})=>({meta:[{title:`${e.taskId} | ECS | Mulga`}]}),component:t(()=>n(()=>import(`./_taskId-CLQmNms7.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),`component`)});export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-COB9gbhM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-CxVe8WLt.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-COB9gbhM.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-CxVe8WLt.js index 9705d7a36..a10a8561f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-COB9gbhM.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-CxVe8WLt.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{in as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./back-link-CjKy1JE5.js";import{t as l}from"./check-BO7W8OSs.js";import{t as u}from"./trash-DVab4pEz.js";import{t as d}from"./triangle-alert-DcjzeKLg.js";import{t as f}from"./button-BarTr35m.js";import{O as p,f as m,k as h,o as g,y as _}from"./iam-CKOkzDco.js";import{S as v,c as y,t as b}from"./iam-CVg27y22.js";import{t as x}from"./_userName-O8ujEE0v.js";import{t as S}from"./page-heading-vksh_67w.js";import{t as C}from"./error-banner-DeOeVBKS.js";import{a as w,c as T,i as E,l as D,o as O,r as k,s as A,t as j}from"./alert-dialog-kCQ1W4Rz.js";import{t as M}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as N,t as P}from"./detail-row-DNBRlVeK.js";import{t as F}from"./state-badge-D1Z6q_OA.js";import{t as I}from"./use-copy-to-clipboard-DjiD3qo6.js";import{n as L,t as R}from"./inline-policies-panel-CppMS52c.js";var z=t(n()),B=r(),V=e();function H(e){let t=(0,B.c)(27),{onClose:n,accessKeyId:r,secretAccessKey:i}=e,{copied:a,copy:o}=I(),s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,V.jsxs)(A,{children:[(0,V.jsx)(T,{children:(0,V.jsx)(d,{className:`text-destructive`})}),(0,V.jsx)(D,{children:`Save Your Access Key`}),(0,V.jsx)(w,{children:`This is your only chance to view the secret access key. Please copy it now. You won't be able to retrieve it again.`})]}),t[0]=s):s=t[0];let c;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Access Key ID: `}),t[1]=c):c=t[1];let u;t[2]===r?u=t[3]:(u=(0,V.jsxs)(`div`,{children:[c,r]}),t[2]=r,t[3]=u);let p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Secret Access Key: `}),t[4]=p):p=t[4];let m;t[5]===i?m=t[6]:(m=(0,V.jsxs)(`div`,{children:[p,i]}),t[5]=i,t[6]=m);let h;t[7]!==u||t[8]!==m?(h=(0,V.jsxs)(`div`,{className:`space-y-2 rounded-md border p-4 font-mono text-sm`,children:[u,m]}),t[7]=u,t[8]=m,t[9]=h):h=t[9];let g;t[10]!==r||t[11]!==o||t[12]!==i?(g=async()=>{await o(`Access Key ID: ${r}\nSecret Access Key: ${i}`)},t[10]=r,t[11]=o,t[12]=i,t[13]=g):g=t[13];let _;t[14]===a?_=t[15]:(_=a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{className:`mr-2 size-4`}),`Copied!`]}):`Copy to Clipboard`,t[14]=a,t[15]=_);let v;t[16]!==g||t[17]!==_?(v=(0,V.jsx)(f,{className:`w-full`,onClick:g,type:`button`,variant:`outline`,children:_}),t[16]=g,t[17]=_,t[18]=v):v=t[18];let y;t[19]!==h||t[20]!==v?(y=(0,V.jsxs)(`div`,{className:`space-y-3`,children:[h,v]}),t[19]=h,t[20]=v,t[21]=y):y=t[21];let b;t[22]===n?b=t[23]:(b=(0,V.jsx)(O,{children:(0,V.jsx)(k,{onClick:n,children:`Close and Continue`})}),t[22]=n,t[23]=b);let x;return t[24]!==y||t[25]!==b?(x=(0,V.jsx)(j,{open:!0,children:(0,V.jsxs)(E,{className:`max-w-2xl`,children:[s,y,b]})}),t[24]=y,t[25]=b,t[26]=x):x=t[26],x}function U(){let{userName:e}=x.useParams(),t=o(),{data:n}=i(v(e)),{data:r}=i(b(e)),{data:l}=i(y(e)),d=_(),w=g(),T=m(),E=h(),D=p(),[O,k]=(0,z.useState)(!1),[A,j]=(0,z.useState)(null),[I,B]=(0,z.useState)(null),[U,W]=(0,z.useState)(null),G=n.User,K=r.AccessKeyMetadata??[],q=l.Groups??[],J=async()=>{try{await d.mutateAsync(e),t({to:`/iam/list-users`})}finally{k(!1)}},Y=async()=>{let t=await w.mutateAsync(e);t.AccessKey&&j({accessKeyId:t.AccessKey.AccessKeyId??``,secretAccessKey:t.AccessKey.SecretAccessKey??``})},X=async t=>{if(t.AccessKeyId){B(t.AccessKeyId);try{await E.mutateAsync({userName:e,accessKeyId:t.AccessKeyId,status:t.Status===`Active`?`Inactive`:`Active`})}finally{B(null)}}},Z=async t=>{B(t);try{await T.mutateAsync({userName:e,accessKeyId:t})}finally{B(null)}},Q=async t=>{W(t);try{await D.mutateAsync({groupName:t,userName:e})}finally{W(null)}};return G?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{to:`/iam/list-users`,children:`Back to users`}),d.error&&(0,V.jsx)(C,{error:d.error,msg:`Failed to delete user`}),w.error&&(0,V.jsx)(C,{error:w.error,msg:`Failed to create access key`}),T.error&&(0,V.jsx)(C,{error:T.error,msg:`Failed to delete access key`}),D.error&&(0,V.jsx)(C,{error:D.error,msg:`Failed to remove from group`}),(0,V.jsxs)(`div`,{className:`space-y-6`,children:[(0,V.jsx)(S,{actions:(0,V.jsxs)(f,{onClick:()=>{k(!0)},size:`sm`,variant:`destructive`,children:[(0,V.jsx)(u,{className:`size-4`}),`Delete`]}),subtitle:`User Details`,title:G.UserName??``}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`User Information`}),(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`User Name`,value:G.UserName}),(0,V.jsx)(P,{label:`User ID`,value:G.UserId}),(0,V.jsx)(P,{label:`ARN`,value:G.Arn}),(0,V.jsx)(P,{label:`Path`,value:G.Path}),(0,V.jsx)(P,{label:`Created`,value:s(G.CreateDate)})]})]}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`span`,{children:`Access Keys`}),(0,V.jsx)(f,{disabled:w.isPending,onClick:Y,size:`sm`,children:w.isPending?`Creating...`:`Create Access Key`})]})}),(0,V.jsx)(N.Content,{children:K.length>0?(0,V.jsx)(`div`,{className:`col-span-2 space-y-3`,children:K.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsx)(`p`,{className:`font-mono text-sm`,children:e.AccessKeyId}),(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Created `,s(e.CreateDate)]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(F,{state:e.Status}),(0,V.jsx)(f,{disabled:I===e.AccessKeyId,onClick:async()=>{await X(e)},size:`sm`,variant:`outline`,children:e.Status===`Active`?`Deactivate`:`Activate`}),(0,V.jsx)(f,{disabled:I===e.AccessKeyId,onClick:()=>{e.AccessKeyId&&Z(e.AccessKeyId)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},e.AccessKeyId))}):(0,V.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No access keys.`})})]}),(0,V.jsx)(L,{kind:`user`,name:e}),(0,V.jsx)(R,{kind:`user`,name:e}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Groups`}),(0,V.jsx)(N.Content,{children:q.length>0?(0,V.jsx)(`div`,{className:`col-span-2 space-y-3`,children:q.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,V.jsx)(a,{className:`text-sm font-medium hover:underline`,params:{groupName:e.GroupName??``},to:`/iam/list-groups/$groupName`,children:e.GroupName}),(0,V.jsx)(f,{disabled:U===e.GroupName,onClick:()=>{e.GroupName&&Q(e.GroupName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.GroupName))}):(0,V.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`Not a member of any group.`})})]})]}),(0,V.jsx)(M,{description:`Are you sure you want to delete the user "${e}"? This action cannot be undone. You must detach all policies and delete all access keys first.`,isPending:d.isPending,onConfirm:J,onOpenChange:k,open:O,title:`Delete User`}),A&&(0,V.jsx)(H,{accessKeyId:A.accessKeyId,onClose:()=>{j(null)},secretAccessKey:A.secretAccessKey})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{to:`/iam/list-users`,children:`Back to users`}),(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`User not found.`})]})}export{U as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{an as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./back-link-wsXUoJ12.js";import{t as l}from"./check-BO7W8OSs.js";import{t as u}from"./trash-DVab4pEz.js";import{t as d}from"./triangle-alert-DcjzeKLg.js";import{t as f}from"./button-qf9lLJ2x.js";import{O as p,f as m,k as h,o as g,y as _}from"./iam-DpkrYySm.js";import{S as v,c as y,t as b}from"./iam-DmtL7LFe.js";import{t as x}from"./_userName-Uz0enZQg.js";import{t as S}from"./page-heading-vksh_67w.js";import{t as C}from"./error-banner-DeOeVBKS.js";import{a as w,c as T,i as E,l as D,o as O,r as k,s as A,t as j}from"./alert-dialog-jxylPXwR.js";import{t as M}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as N,t as P}from"./detail-row-DNBRlVeK.js";import{t as F}from"./state-badge-pn00UE1d.js";import{t as I}from"./use-copy-to-clipboard-DjiD3qo6.js";import{n as L,t as R}from"./inline-policies-panel-Bd1RyDcb.js";var z=t(n()),B=r(),V=e();function H(e){let t=(0,B.c)(27),{onClose:n,accessKeyId:r,secretAccessKey:i}=e,{copied:a,copy:o}=I(),s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,V.jsxs)(A,{children:[(0,V.jsx)(T,{children:(0,V.jsx)(d,{className:`text-destructive`})}),(0,V.jsx)(D,{children:`Save Your Access Key`}),(0,V.jsx)(w,{children:`This is your only chance to view the secret access key. Please copy it now. You won't be able to retrieve it again.`})]}),t[0]=s):s=t[0];let c;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Access Key ID: `}),t[1]=c):c=t[1];let u;t[2]===r?u=t[3]:(u=(0,V.jsxs)(`div`,{children:[c,r]}),t[2]=r,t[3]=u);let p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Secret Access Key: `}),t[4]=p):p=t[4];let m;t[5]===i?m=t[6]:(m=(0,V.jsxs)(`div`,{children:[p,i]}),t[5]=i,t[6]=m);let h;t[7]!==u||t[8]!==m?(h=(0,V.jsxs)(`div`,{className:`space-y-2 rounded-md border p-4 font-mono text-sm`,children:[u,m]}),t[7]=u,t[8]=m,t[9]=h):h=t[9];let g;t[10]!==r||t[11]!==o||t[12]!==i?(g=async()=>{await o(`Access Key ID: ${r}\nSecret Access Key: ${i}`)},t[10]=r,t[11]=o,t[12]=i,t[13]=g):g=t[13];let _;t[14]===a?_=t[15]:(_=a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(l,{className:`mr-2 size-4`}),`Copied!`]}):`Copy to Clipboard`,t[14]=a,t[15]=_);let v;t[16]!==g||t[17]!==_?(v=(0,V.jsx)(f,{className:`w-full`,onClick:g,type:`button`,variant:`outline`,children:_}),t[16]=g,t[17]=_,t[18]=v):v=t[18];let y;t[19]!==h||t[20]!==v?(y=(0,V.jsxs)(`div`,{className:`space-y-3`,children:[h,v]}),t[19]=h,t[20]=v,t[21]=y):y=t[21];let b;t[22]===n?b=t[23]:(b=(0,V.jsx)(O,{children:(0,V.jsx)(k,{onClick:n,children:`Close and Continue`})}),t[22]=n,t[23]=b);let x;return t[24]!==y||t[25]!==b?(x=(0,V.jsx)(j,{open:!0,children:(0,V.jsxs)(E,{className:`max-w-2xl`,children:[s,y,b]})}),t[24]=y,t[25]=b,t[26]=x):x=t[26],x}function U(){let{userName:e}=x.useParams(),t=o(),{data:n}=i(v(e)),{data:r}=i(b(e)),{data:l}=i(y(e)),d=_(),w=g(),T=m(),E=h(),D=p(),[O,k]=(0,z.useState)(!1),[A,j]=(0,z.useState)(null),[I,B]=(0,z.useState)(null),[U,W]=(0,z.useState)(null),G=n.User,K=r.AccessKeyMetadata??[],q=l.Groups??[],J=async()=>{try{await d.mutateAsync(e),t({to:`/iam/list-users`})}finally{k(!1)}},Y=async()=>{let t=await w.mutateAsync(e);t.AccessKey&&j({accessKeyId:t.AccessKey.AccessKeyId??``,secretAccessKey:t.AccessKey.SecretAccessKey??``})},X=async t=>{if(t.AccessKeyId){B(t.AccessKeyId);try{await E.mutateAsync({userName:e,accessKeyId:t.AccessKeyId,status:t.Status===`Active`?`Inactive`:`Active`})}finally{B(null)}}},Z=async t=>{B(t);try{await T.mutateAsync({userName:e,accessKeyId:t})}finally{B(null)}},Q=async t=>{W(t);try{await D.mutateAsync({groupName:t,userName:e})}finally{W(null)}};return G?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{to:`/iam/list-users`,children:`Back to users`}),d.error&&(0,V.jsx)(C,{error:d.error,msg:`Failed to delete user`}),w.error&&(0,V.jsx)(C,{error:w.error,msg:`Failed to create access key`}),T.error&&(0,V.jsx)(C,{error:T.error,msg:`Failed to delete access key`}),D.error&&(0,V.jsx)(C,{error:D.error,msg:`Failed to remove from group`}),(0,V.jsxs)(`div`,{className:`space-y-6`,children:[(0,V.jsx)(S,{actions:(0,V.jsxs)(f,{onClick:()=>{k(!0)},size:`sm`,variant:`destructive`,children:[(0,V.jsx)(u,{className:`size-4`}),`Delete`]}),subtitle:`User Details`,title:G.UserName??``}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`User Information`}),(0,V.jsxs)(N.Content,{children:[(0,V.jsx)(P,{label:`User Name`,value:G.UserName}),(0,V.jsx)(P,{label:`User ID`,value:G.UserId}),(0,V.jsx)(P,{label:`ARN`,value:G.Arn}),(0,V.jsx)(P,{label:`Path`,value:G.Path}),(0,V.jsx)(P,{label:`Created`,value:s(G.CreateDate)})]})]}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsx)(`span`,{children:`Access Keys`}),(0,V.jsx)(f,{disabled:w.isPending,onClick:Y,size:`sm`,children:w.isPending?`Creating...`:`Create Access Key`})]})}),(0,V.jsx)(N.Content,{children:K.length>0?(0,V.jsx)(`div`,{className:`col-span-2 space-y-3`,children:K.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsx)(`p`,{className:`font-mono text-sm`,children:e.AccessKeyId}),(0,V.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Created `,s(e.CreateDate)]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(F,{state:e.Status}),(0,V.jsx)(f,{disabled:I===e.AccessKeyId,onClick:async()=>{await X(e)},size:`sm`,variant:`outline`,children:e.Status===`Active`?`Deactivate`:`Activate`}),(0,V.jsx)(f,{disabled:I===e.AccessKeyId,onClick:()=>{e.AccessKeyId&&Z(e.AccessKeyId)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},e.AccessKeyId))}):(0,V.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No access keys.`})})]}),(0,V.jsx)(L,{kind:`user`,name:e}),(0,V.jsx)(R,{kind:`user`,name:e}),(0,V.jsxs)(N,{children:[(0,V.jsx)(N.Header,{children:`Groups`}),(0,V.jsx)(N.Content,{children:q.length>0?(0,V.jsx)(`div`,{className:`col-span-2 space-y-3`,children:q.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,V.jsx)(a,{className:`text-sm font-medium hover:underline`,params:{groupName:e.GroupName??``},to:`/iam/list-groups/$groupName`,children:e.GroupName}),(0,V.jsx)(f,{disabled:U===e.GroupName,onClick:()=>{e.GroupName&&Q(e.GroupName)},size:`sm`,variant:`outline`,children:`Remove`})]},e.GroupName))}):(0,V.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`Not a member of any group.`})})]})]}),(0,V.jsx)(M,{description:`Are you sure you want to delete the user "${e}"? This action cannot be undone. You must detach all policies and delete all access keys first.`,isPending:d.isPending,onConfirm:J,onOpenChange:k,open:O,title:`Delete User`}),A&&(0,V.jsx)(H,{accessKeyId:A.accessKeyId,onClose:()=>{j(null)},secretAccessKey:A.secretAccessKey})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{to:`/iam/list-users`,children:`Back to users`}),(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`User not found.`})]})}export{U as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-O8ujEE0v.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-O8ujEE0v.js deleted file mode 100644 index 245f9bef4..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-O8ujEE0v.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_userName-COB9gbhM.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/useNavigate-BH3pQKLF.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/createLucideIcon-BQgzNCBR.js","assets/check-BO7W8OSs.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/iam-CKOkzDco.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/queryOptions-Dfvzj6n2.js","assets/json-DsgWHaZY.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-kCQ1W4Rz.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-D1Z6q_OA.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/inline-policies-panel-CppMS52c.js","assets/useQuery-2EKf7AyV.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/json-editor-Bwbz8mfn.js","assets/textarea-n04EavUm.js","assets/iam-Cgrr-Iit.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{lt as n}from"./cluster-config-xw_Q7X1e.js";import{S as r,b as i,c as a,i as o,p as s,t as c}from"./iam-CVg27y22.js";var l=e(`/_auth/iam/(users)/list-users/$userName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.userName),staleTime:`static`}),e.queryClient.query({...c(t.userName),staleTime:`static`}),e.queryClient.query({...o(t.userName),staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a(t.userName),staleTime:`static`}),e.queryClient.query({...i(t.userName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.userName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_userName-COB9gbhM.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-Uz0enZQg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-Uz0enZQg.js new file mode 100644 index 000000000..6bb8be0c5 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/_userName-Uz0enZQg.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_userName-CxVe8WLt.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/useNavigate-CTe_-BZA.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/createLucideIcon-BQgzNCBR.js","assets/check-BO7W8OSs.js","assets/trash-DVab4pEz.js","assets/triangle-alert-DcjzeKLg.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/iam-DpkrYySm.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/queryOptions-Dfvzj6n2.js","assets/json-hjud9BaA.js","assets/page-heading-vksh_67w.js","assets/error-banner-DeOeVBKS.js","assets/alert-dialog-jxylPXwR.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/detail-row-DNBRlVeK.js","assets/state-badge-pn00UE1d.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/inline-policies-panel-Bd1RyDcb.js","assets/useQuery-2EKf7AyV.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/json-editor-02czSrbA.js","assets/textarea-DV1UO8hv.js","assets/iam-DpUWI3xh.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{ut as n}from"./cluster-config-DkOiY8HH.js";import{S as r,b as i,c as a,i as o,p as s,t as c}from"./iam-DmtL7LFe.js";var l=e(`/_auth/iam/(users)/list-users/$userName`)({loader:async({context:e,params:t})=>{await Promise.all([e.queryClient.query({...r(t.userName),staleTime:`static`}),e.queryClient.query({...c(t.userName),staleTime:`static`}),e.queryClient.query({...o(t.userName),staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a(t.userName),staleTime:`static`}),e.queryClient.query({...i(t.userName),staleTime:`static`})])},head:({params:e})=>({meta:[{title:`${e.userName} | IAM | Mulga`}]}),component:t(()=>n(()=>import(`./_userName-CxVe8WLt.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),`component`)});export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-BYWQapOv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-BYWQapOv.js deleted file mode 100644 index ed26e1d5e..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-BYWQapOv.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{It as t,_t as n}from"./cluster-config-xw_Q7X1e.js";import{Ba as r,Va as i,n as a}from"./awsClient-b0hcP1Iz.js";var o=t(i,`CertificateManager`,`ACMClient`,n),s={ServiceType:{type:`staticContextParams`,value:`ACM`}},c=(e,t,n,r)=>[],l=class extends o(s,c,`ListCertificates`,r){},u=e({queryKey:[`acm`,`certificates`],queryFn:async()=>{let e=new l({});return await a().send(e)}});export{o as i,s as n,c as r,u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-DlvuctCR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-DlvuctCR.js new file mode 100644 index 000000000..8723fa884 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/acm-DlvuctCR.js @@ -0,0 +1 @@ +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Lt as t,vt as n}from"./cluster-config-DkOiY8HH.js";import{Ba as r,n as i,za as a}from"./awsClient-Cqp6x3OY.js";var o=t(r,`CertificateManager`,`ACMClient`,n),s={ServiceType:{type:`staticContextParams`,value:`ACM`}},c=(e,t,n,r)=>[],l=class extends o(s,c,`ListCertificates`,a){},u=e({queryKey:[`acm`,`certificates`],queryFn:async()=>{let e=new l({});return await i().send(e)}});export{o as i,s as n,c as r,u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-BUkrFIlI.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-JuLSsFKq.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-BUkrFIlI.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-JuLSsFKq.js index 6febf950d..b67c6bd8d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-BUkrFIlI.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-JuLSsFKq.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{o as t}from"./cluster-config-xw_Q7X1e.js";import{n,r}from"./signed-fetch-B-FFW93q.js";var i=e({queryKey:[`admin`,`nodes`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetNodes`,credentials:e})},staleTime:1e4}),a=e({queryKey:[`admin`,`vms`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetVMs`,credentials:e})},staleTime:1e4}),o=e({queryKey:[`admin`,`storageStatus`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetStorageStatus`,credentials:e})},staleTime:1e4}),s=e({queryKey:[`admin`,`ochreCatalog`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`ListOchreCatalog`,credentials:e})},staleTime:1e4}),c=e({queryKey:[`admin`,`accounts`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await n({method:`ListAccounts`,credentials:e,body:{}})},retry:!1,staleTime:3e4}),l=n=>e({queryKey:[`admin`,`modelAccess`,n],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`ListModelAccess`,credentials:e,params:{AccountId:n}})},enabled:n!==``,staleTime:1e4});async function u({accountId:e,modelId:n}){let i=t();if(!i)throw Error(`Not authenticated`);return await r({action:`GrantModelAccess`,credentials:i,params:{AccountId:e,ModelId:n}})}async function d({accountId:e,modelId:n}){let i=t();if(!i)throw Error(`Not authenticated`);return await r({action:`RevokeModelAccess`,credentials:i,params:{AccountId:e,ModelId:n}})}export{o as a,d as c,s as i,l as n,a as o,i as r,u as s,c as t}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{s as t}from"./cluster-config-DkOiY8HH.js";import{n,r}from"./signed-fetch-C_pG4AOx.js";var i=e({queryKey:[`admin`,`nodes`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetNodes`,credentials:e})},staleTime:1e4}),a=e({queryKey:[`admin`,`vms`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetVMs`,credentials:e})},staleTime:1e4}),o=e({queryKey:[`admin`,`storageStatus`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`GetStorageStatus`,credentials:e})},staleTime:1e4}),s=e({queryKey:[`admin`,`ochreCatalog`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`ListOchreCatalog`,credentials:e})},staleTime:1e4}),c=e({queryKey:[`admin`,`accounts`],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await n({method:`ListAccounts`,credentials:e,body:{}})},retry:!1,staleTime:3e4}),l=n=>e({queryKey:[`admin`,`modelAccess`,n],queryFn:async()=>{let e=t();if(!e)throw Error(`Not authenticated`);return await r({action:`ListModelAccess`,credentials:e,params:{AccountId:n}})},enabled:n!==``,staleTime:1e4});async function u({accountId:e,modelId:n}){let i=t();if(!i)throw Error(`Not authenticated`);return await r({action:`GrantModelAccess`,credentials:i,params:{AccountId:e,ModelId:n}})}async function d({accountId:e,modelId:n}){let i=t();if(!i)throw Error(`Not authenticated`);return await r({action:`RevokeModelAccess`,credentials:i,params:{AccountId:e,ModelId:n}})}export{o as a,d as c,s as i,l as n,a as o,i as r,u as s,c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-CXmiyIcc.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-C7nTf-ee.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-CXmiyIcc.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-C7nTf-ee.js index 9f32f55bf..536a96c43 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-CXmiyIcc.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/admin-context-C7nTf-ee.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{o as i}from"./cluster-config-xw_Q7X1e.js";import{a,i as o,n as s,o as c,r as l}from"./sts-B5ZEON3v.js";import{r as u}from"./signed-fetch-B-FFW93q.js";var d=class extends a(l,o,`GetCallerIdentity`,c){},f=r(),p=t(n(),1),m=e(),h=`000000000001`;function g(e){let t=e?.indexOf(`:user/`)??-1;return t===-1||e===void 0?null:e.slice(t+6)||null}var _=(0,p.createContext)(void 0);function v(e){let t=(0,f.c)(6),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={isAdmin:!1,accountId:null,userName:null,version:null,license:null,loading:!0},t[0]=r):r=t[0];let[a,o]=(0,p.useState)(r),c,l;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=()=>{(async function(){let e=i();if(!e){o(b);return}try{let t=await s().send(new d({})),n=t.Account??null,r=n===h,i=null;if(r)try{i=await u({action:`GetVersion`,credentials:e})}catch{}o({isAdmin:r,accountId:n,userName:g(t.Arn),version:i,license:i?.license??null,loading:!1})}catch{o(y)}})()},l=[],t[1]=c,t[2]=l):(c=t[1],l=t[2]),(0,p.useEffect)(c,l);let v;return t[3]!==n||t[4]!==a?(v=(0,m.jsx)(_,{value:a,children:n}),t[3]=n,t[4]=a,t[5]=v):v=t[5],v}function y(e){return{...e,loading:!1}}function b(e){return{...e,loading:!1}}function x(){let e=(0,p.useContext)(_);if(e===void 0)throw Error(`useAdmin must be used within an AdminProvider`);return e}export{x as n,v as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{s as i}from"./cluster-config-DkOiY8HH.js";import{a,i as o,n as s,o as c,r as l}from"./sts-e2q_c_HI.js";import{r as u}from"./signed-fetch-C_pG4AOx.js";var d=class extends a(l,o,`GetCallerIdentity`,c){},f=r(),p=t(n(),1),m=e(),h=`000000000001`;function g(e){let t=e?.indexOf(`:user/`)??-1;return t===-1||e===void 0?null:e.slice(t+6)||null}var _=(0,p.createContext)(void 0);function v(e){let t=(0,f.c)(6),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={isAdmin:!1,accountId:null,userName:null,version:null,license:null,loading:!0},t[0]=r):r=t[0];let[a,o]=(0,p.useState)(r),c,l;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=()=>{(async function(){let e=i();if(!e){o(b);return}try{let t=await s().send(new d({})),n=t.Account??null,r=n===h,i=null;if(r)try{i=await u({action:`GetVersion`,credentials:e})}catch{}o({isAdmin:r,accountId:n,userName:g(t.Arn),version:i,license:i?.license??null,loading:!1})}catch{o(y)}})()},l=[],t[1]=c,t[2]=l):(c=t[1],l=t[2]),(0,p.useEffect)(c,l);let v;return t[3]!==n||t[4]!==a?(v=(0,m.jsx)(_,{value:a,children:n}),t[3]=n,t[4]=a,t[5]=v):v=t[5],v}function y(e){return{...e,loading:!1}}function b(e){return{...e,loading:!1}}function x(){let e=(0,p.useContext)(_);if(e===void 0)throw Error(`useAdmin must be used within an AdminProvider`);return e}export{x as n,v as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-kCQ1W4Rz.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-jxylPXwR.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-kCQ1W4Rz.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-jxylPXwR.js index 51a6a1852..f6db8f9a8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-kCQ1W4Rz.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/alert-dialog-jxylPXwR.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./button-BarTr35m.js";import{c as i,i as a,l as o,n as s,r as c,s as l,t as u}from"./DialogTitle-DiInIGjk.js";function d(e){return s(`alert-dialog`,e)}var f=t(),p=e();function m(e){let t=(0,f.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,p.jsx)(d,{"data-slot":`alert-dialog`,...n}),t[2]=n,t[3]=r),r}function h(e){let t=(0,f.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,p.jsx)(c,{"data-slot":`alert-dialog-portal`,...n}),t[2]=n,t[3]=r),r}function g(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:animate-out data-open:animate-in fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs`,r),t[3]=r,t[4]=a);let s;return t[5]!==i||t[6]!==a?(s=(0,p.jsx)(o,{className:a,"data-slot":`alert-dialog-overlay`,...i}),t[5]=i,t[6]=a,t[7]=s):s=t[7],s}function _(e){let t=(0,f.c)(11),r,i,o;t[0]===e?(r=t[1],i=t[2],o=t[3]):({className:r,size:o,...i}=e,t[0]=e,t[1]=r,t[2]=i,t[3]=o);let s=o===void 0?`default`:o,c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,p.jsx)(g,{}),t[4]=c):c=t[4];let l;t[5]===r?l=t[6]:(l=n(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 group/alert-dialog-content data-closed:animate-out data-open:animate-in fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-3 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-64 data-[size=default]:sm:max-w-sm`,r),t[5]=r,t[6]=l);let u;return t[7]!==i||t[8]!==s||t[9]!==l?(u=(0,p.jsxs)(h,{children:[c,(0,p.jsx)(a,{className:l,"data-size":s,"data-slot":`alert-dialog-content`,...i})]}),t[7]=i,t[8]=s,t[9]=l,t[10]=u):u=t[10],u}function v(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-header`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function y(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-footer`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function b(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`mb-2 inline-flex size-8 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-4`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-media`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function x(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(u,{className:a,"data-slot":`alert-dialog-title`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function S(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`text-xs/relaxed text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(l,{className:a,"data-slot":`alert-dialog-description`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function C(e){let t=(0,f.c)(8),i,a;t[0]===e?(i=t[1],a=t[2]):({className:i,...a}=e,t[0]=e,t[1]=i,t[2]=a);let o;t[3]===i?o=t[4]:(o=n(i),t[3]=i,t[4]=o);let s;return t[5]!==a||t[6]!==o?(s=(0,p.jsx)(r,{className:o,"data-slot":`alert-dialog-action`,...a}),t[5]=a,t[6]=o,t[7]=s):s=t[7],s}function w(e){let t=(0,f.c)(14),a,o,s,c;t[0]===e?(a=t[1],o=t[2],s=t[3],c=t[4]):({className:a,variant:s,size:c,...o}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s,t[4]=c);let l=s===void 0?`outline`:s,u=c===void 0?`default`:c,d;t[5]===a?d=t[6]:(d=n(a),t[5]=a,t[6]=d);let m;t[7]!==u||t[8]!==l?(m=(0,p.jsx)(r,{size:u,variant:l}),t[7]=u,t[8]=l,t[9]=m):m=t[9];let h;return t[10]!==o||t[11]!==d||t[12]!==m?(h=(0,p.jsx)(i,{className:d,"data-slot":`alert-dialog-cancel`,render:m,...o}),t[10]=o,t[11]=d,t[12]=m,t[13]=h):h=t[13],h}export{S as a,b as c,_ as i,x as l,C as n,y as o,w as r,v as s,m as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./button-qf9lLJ2x.js";import{c as i,i as a,l as o,n as s,r as c,s as l,t as u}from"./DialogTitle-2TVGaTYe.js";function d(e){return s(`alert-dialog`,e)}var f=t(),p=e();function m(e){let t=(0,f.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,p.jsx)(d,{"data-slot":`alert-dialog`,...n}),t[2]=n,t[3]=r),r}function h(e){let t=(0,f.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,p.jsx)(c,{"data-slot":`alert-dialog-portal`,...n}),t[2]=n,t[3]=r),r}function g(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:animate-out data-open:animate-in fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs`,r),t[3]=r,t[4]=a);let s;return t[5]!==i||t[6]!==a?(s=(0,p.jsx)(o,{className:a,"data-slot":`alert-dialog-overlay`,...i}),t[5]=i,t[6]=a,t[7]=s):s=t[7],s}function _(e){let t=(0,f.c)(11),r,i,o;t[0]===e?(r=t[1],i=t[2],o=t[3]):({className:r,size:o,...i}=e,t[0]=e,t[1]=r,t[2]=i,t[3]=o);let s=o===void 0?`default`:o,c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,p.jsx)(g,{}),t[4]=c):c=t[4];let l;t[5]===r?l=t[6]:(l=n(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 group/alert-dialog-content data-closed:animate-out data-open:animate-in fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-3 rounded-xl bg-background p-4 ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-64 data-[size=default]:sm:max-w-sm`,r),t[5]=r,t[6]=l);let u;return t[7]!==i||t[8]!==s||t[9]!==l?(u=(0,p.jsxs)(h,{children:[c,(0,p.jsx)(a,{className:l,"data-size":s,"data-slot":`alert-dialog-content`,...i})]}),t[7]=i,t[8]=s,t[9]=l,t[10]=u):u=t[10],u}function v(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-header`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function y(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-footer`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function b(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`mb-2 inline-flex size-8 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-4`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(`div`,{className:a,"data-slot":`alert-dialog-media`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function x(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(u,{className:a,"data-slot":`alert-dialog-title`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function S(e){let t=(0,f.c)(8),r,i;t[0]===e?(r=t[1],i=t[2]):({className:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let a;t[3]===r?a=t[4]:(a=n(`text-xs/relaxed text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,r),t[3]=r,t[4]=a);let o;return t[5]!==i||t[6]!==a?(o=(0,p.jsx)(l,{className:a,"data-slot":`alert-dialog-description`,...i}),t[5]=i,t[6]=a,t[7]=o):o=t[7],o}function C(e){let t=(0,f.c)(8),i,a;t[0]===e?(i=t[1],a=t[2]):({className:i,...a}=e,t[0]=e,t[1]=i,t[2]=a);let o;t[3]===i?o=t[4]:(o=n(i),t[3]=i,t[4]=o);let s;return t[5]!==a||t[6]!==o?(s=(0,p.jsx)(r,{className:o,"data-slot":`alert-dialog-action`,...a}),t[5]=a,t[6]=o,t[7]=s):s=t[7],s}function w(e){let t=(0,f.c)(14),a,o,s,c;t[0]===e?(a=t[1],o=t[2],s=t[3],c=t[4]):({className:a,variant:s,size:c,...o}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s,t[4]=c);let l=s===void 0?`outline`:s,u=c===void 0?`default`:c,d;t[5]===a?d=t[6]:(d=n(a),t[5]=a,t[6]=d);let m;t[7]!==u||t[8]!==l?(m=(0,p.jsx)(r,{size:u,variant:l}),t[7]=u,t[8]=l,t[9]=m):m=t[9];let h;return t[10]!==o||t[11]!==d||t[12]!==m?(h=(0,p.jsx)(i,{className:d,"data-slot":`alert-dialog-cancel`,render:m,...o}),t[10]=o,t[11]=d,t[12]=m,t[13]=h):h=t[13],h}export{S as a,b as c,_ as i,x as l,C as n,y as o,w as r,v as s,m as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-CDvylWBR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-BqJUGAgz.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-CDvylWBR.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-BqJUGAgz.js index 40c573bf8..e634a2c03 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-CDvylWBR.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/allocate-address-BqJUGAgz.js @@ -1,3 +1,3 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{n as o}from"./ec2-Ctto2xjU.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{s as p,t as m}from"./field-c7GHI5st.js";import{n as h}from"./ec2-DhWukC79.js";var g=t(),_=e();function v(){let e=(0,g.c)(36),t=n(),v=o(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:u(h),defaultValues:{name:``}},e[0]=b):b=e[0];let{control:x,handleSubmit:S,register:C,formState:w}=l(b),{isSubmitting:T}=w,E;e[1]===x?E=e[2]:(E={control:x},e[1]=x,e[2]=E);let D=c(E),O;e[3]!==v||e[4]!==t?(O=async e=>{let n=(await v.mutateAsync({name:e.name?.trim()??void 0})).AllocationId;t(n?{to:`/ec2/describe-addresses/$id`,params:{id:n}}:{to:`/ec2/describe-addresses`})},e[3]=v,e[4]=t,e[5]=O):O=e[5];let k=O,A,j;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,_.jsx)(r,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),j=(0,_.jsx)(s,{title:`Allocate Elastic IP`}),e[6]=A,e[7]=j):(A=e[6],j=e[7]);let M;e[8]===v.error?M=e[9]:(M=v.error&&(0,_.jsx)(d,{error:v.error,msg:`Failed to allocate Elastic IP`}),e[8]=v.error,e[9]=M);let N;e[10]!==S||e[11]!==k?(N=S(k),e[10]=S,e[11]=k,e[12]=N):N=e[12];let P;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(p,{children:(0,_.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=P):P=e[13];let F;e[14]===C?F=e[15]:(F=C(`name`),e[14]=C,e[15]=F);let I;e[16]===F?I=e[17]:(I=(0,_.jsxs)(m,{children:[P,(0,_.jsx)(a,{id:`name`,placeholder:`my-elastic-ip`,...F})]}),e[16]=F,e[17]=I);let L=D.name??``,R;e[18]===L?R=e[19]:(R=y(L),e[18]=L,e[19]=R);let z;e[20]===R?z=e[21]:(z=(0,_.jsx)(i,{commands:R}),e[20]=R,e[21]=z);let B;e[22]===t?B=e[23]:(B=async()=>{await t({to:`/ec2/describe-addresses`})},e[22]=t,e[23]=B);let V;e[24]!==v.isPending||e[25]!==T||e[26]!==B?(V=(0,_.jsx)(f,{isPending:v.isPending,isSubmitting:T,onCancel:B,pendingLabel:`Allocating…`,submitLabel:`Allocate`}),e[24]=v.isPending,e[25]=T,e[26]=B,e[27]=V):V=e[27];let H;e[28]!==I||e[29]!==z||e[30]!==V||e[31]!==N?(H=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:N,children:[I,z,V]}),e[28]=I,e[29]=z,e[30]=V,e[31]=N,e[32]=H):H=e[32];let U;return e[33]!==H||e[34]!==M?(U=(0,_.jsxs)(_.Fragment,{children:[A,j,M,H]}),e[33]=H,e[34]=M,e[35]=U):U=e[35],U}function y(e){let t=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 allocate-address`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{n as o}from"./ec2-Csn1kwZ8.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{s as p,t as m}from"./field-CS-ql6du.js";import{n as h}from"./ec2-DqNqPeiA.js";var g=t(),_=e();function v(){let e=(0,g.c)(36),t=n(),v=o(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:u(h),defaultValues:{name:``}},e[0]=b):b=e[0];let{control:x,handleSubmit:S,register:C,formState:w}=l(b),{isSubmitting:T}=w,E;e[1]===x?E=e[2]:(E={control:x},e[1]=x,e[2]=E);let D=c(E),O;e[3]!==v||e[4]!==t?(O=async e=>{let n=(await v.mutateAsync({name:e.name?.trim()??void 0})).AllocationId;t(n?{to:`/ec2/describe-addresses/$id`,params:{id:n}}:{to:`/ec2/describe-addresses`})},e[3]=v,e[4]=t,e[5]=O):O=e[5];let k=O,A,j;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,_.jsx)(r,{to:`/ec2/describe-addresses`,children:`Back to Elastic IPs`}),j=(0,_.jsx)(s,{title:`Allocate Elastic IP`}),e[6]=A,e[7]=j):(A=e[6],j=e[7]);let M;e[8]===v.error?M=e[9]:(M=v.error&&(0,_.jsx)(d,{error:v.error,msg:`Failed to allocate Elastic IP`}),e[8]=v.error,e[9]=M);let N;e[10]!==S||e[11]!==k?(N=S(k),e[10]=S,e[11]=k,e[12]=N):N=e[12];let P;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(p,{children:(0,_.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=P):P=e[13];let F;e[14]===C?F=e[15]:(F=C(`name`),e[14]=C,e[15]=F);let I;e[16]===F?I=e[17]:(I=(0,_.jsxs)(m,{children:[P,(0,_.jsx)(a,{id:`name`,placeholder:`my-elastic-ip`,...F})]}),e[16]=F,e[17]=I);let L=D.name??``,R;e[18]===L?R=e[19]:(R=y(L),e[18]=L,e[19]=R);let z;e[20]===R?z=e[21]:(z=(0,_.jsx)(i,{commands:R}),e[20]=R,e[21]=z);let B;e[22]===t?B=e[23]:(B=async()=>{await t({to:`/ec2/describe-addresses`})},e[22]=t,e[23]=B);let V;e[24]!==v.isPending||e[25]!==T||e[26]!==B?(V=(0,_.jsx)(f,{isPending:v.isPending,isSubmitting:T,onCancel:B,pendingLabel:`Allocating…`,submitLabel:`Allocate`}),e[24]=v.isPending,e[25]=T,e[26]=B,e[27]=V):V=e[27];let H;e[28]!==I||e[29]!==z||e[30]!==V||e[31]!==N?(H=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:N,children:[I,z,V]}),e[28]=I,e[29]=z,e[30]=V,e[31]=N,e[32]=H):H=e[32];let U;return e[33]!==H||e[34]!==M?(U=(0,_.jsxs)(_.Fragment,{children:[A,j,M,H]}),e[33]=H,e[34]=M,e[35]=U):U=e[35],U}function y(e){let t=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 allocate-address`},{type:`flag`,value:` \\ --domain`},{type:`value`,value:` vpc`}];return e.trim()&&t.push({type:`flag`,value:` \\ --tag-specifications`},{type:`value`,value:` 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=${e.trim()}}]'`}),[{label:`Allocate Elastic IP`,parts:t}]}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-ChpQ4w1b.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-CXhu-MrF.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-ChpQ4w1b.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-CXhu-MrF.js index 68925e1c8..c4aea4db1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-ChpQ4w1b.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ami-details-CXhu-MrF.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-Dhy4xOXd.js";import{in as r}from"./cluster-config-xw_Q7X1e.js";import{n as i,t as a}from"./detail-row-DNBRlVeK.js";var o=t(),s=e();function c(e){let t=(0,o.c)(58),{image:c,showExtendedDetails:u}=e,d=u!==void 0&&u,f;t[0]===c.CreationDate?f=t[1]:(f=r(c.CreationDate),t[0]=c.CreationDate,t[1]=f);let p=f,m=d?`AMI Information`:`AMI Details`,h;t[2]===m?h=t[3]:(h=(0,s.jsx)(i.Header,{children:m}),t[2]=m,t[3]=h);let g;t[4]!==c.ImageId||t[5]!==d?(g=c.ImageId&&!d?(0,s.jsx)(n,{className:`text-primary hover:underline`,params:{id:c.ImageId},to:`/ec2/describe-images/$id`,children:c.ImageId}):c.ImageId,t[4]=c.ImageId,t[5]=d,t[6]=g):g=t[6];let _;t[7]===g?_=t[8]:(_=(0,s.jsx)(a,{label:`AMI ID`,value:g}),t[7]=g,t[8]=_);let v;t[9]===c.Name?v=t[10]:(v=(0,s.jsx)(a,{label:`AMI Name`,value:c.Name}),t[9]=c.Name,t[10]=v);let y;t[11]===c.Description?y=t[12]:(y=(0,s.jsx)(a,{label:`Description`,value:c.Description}),t[11]=c.Description,t[12]=y);let b;t[13]===c.Architecture?b=t[14]:(b=(0,s.jsx)(a,{label:`Architecture`,value:c.Architecture}),t[13]=c.Architecture,t[14]=b);let x;t[15]===c.VirtualizationType?x=t[16]:(x=(0,s.jsx)(a,{label:`Virtualization Type`,value:c.VirtualizationType}),t[15]=c.VirtualizationType,t[16]=x);let S=c.Platform??`Linux`,C;t[17]===S?C=t[18]:(C=(0,s.jsx)(a,{label:`Platform`,value:S}),t[17]=S,t[18]=C);let w;t[19]===c.PlatformDetails?w=t[20]:(w=(0,s.jsx)(a,{label:`Platform Details`,value:c.PlatformDetails}),t[19]=c.PlatformDetails,t[20]=w);let T;t[21]===c.ImageType?T=t[22]:(T=(0,s.jsx)(a,{label:`Image Type`,value:c.ImageType}),t[21]=c.ImageType,t[22]=T);let E;t[23]===c.RootDeviceType?E=t[24]:(E=(0,s.jsx)(a,{label:`Root Device Type`,value:c.RootDeviceType}),t[23]=c.RootDeviceType,t[24]=E);let D;t[25]===c.RootDeviceName?D=t[26]:(D=(0,s.jsx)(a,{label:`Root Device Name`,value:c.RootDeviceName}),t[25]=c.RootDeviceName,t[26]=D);let O;t[27]===c.OwnerId?O=t[28]:(O=(0,s.jsx)(a,{label:`Owner`,value:c.OwnerId}),t[27]=c.OwnerId,t[28]=O);let k;t[29]===c.State?k=t[30]:(k=(0,s.jsx)(a,{label:`State`,value:c.State}),t[29]=c.State,t[30]=k);let A;t[31]!==p||t[32]!==c.Public||t[33]!==d?(A=d&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a,{label:`Creation Date`,value:p}),(0,s.jsx)(a,{label:`Public`,value:c.Public?`Yes`:`No`})]}),t[31]=p,t[32]=c.Public,t[33]=d,t[34]=A):A=t[34];let j;t[35]!==x||t[36]!==C||t[37]!==w||t[38]!==T||t[39]!==E||t[40]!==D||t[41]!==O||t[42]!==k||t[43]!==A||t[44]!==_||t[45]!==v||t[46]!==y||t[47]!==b?(j=(0,s.jsxs)(i.Content,{children:[_,v,y,b,x,C,w,T,E,D,O,k,A]}),t[35]=x,t[36]=C,t[37]=w,t[38]=T,t[39]=E,t[40]=D,t[41]=O,t[42]=k,t[43]=A,t[44]=_,t[45]=v,t[46]=y,t[47]=b,t[48]=j):j=t[48];let M;t[49]!==j||t[50]!==h?(M=(0,s.jsxs)(i,{children:[h,j]}),t[49]=j,t[50]=h,t[51]=M):M=t[51];let N;t[52]!==c.BlockDeviceMappings||t[53]!==d?(N=d&&c.BlockDeviceMappings&&c.BlockDeviceMappings.length>0&&c.BlockDeviceMappings.map(l),t[52]=c.BlockDeviceMappings,t[53]=d,t[54]=N):N=t[54];let P;return t[55]!==M||t[56]!==N?(P=(0,s.jsxs)(s.Fragment,{children:[M,N]}),t[55]=M,t[56]=N,t[57]=P):P=t[57],P}function l(e){return(0,s.jsxs)(i,{children:[(0,s.jsxs)(i.Header,{children:[`Block Device: `,e.DeviceName]}),(0,s.jsxs)(i.Content,{children:[(0,s.jsx)(a,{label:`Device Name`,value:e.DeviceName}),e.Ebs&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a,{label:`Volume Size`,value:e.Ebs.VolumeSize?`${e.Ebs.VolumeSize} GB`:void 0}),(0,s.jsx)(a,{label:`Volume Type`,value:e.Ebs.VolumeType}),(0,s.jsx)(a,{label:`Delete On Termination`,value:e.Ebs.DeleteOnTermination?`Yes`:`No`}),(0,s.jsx)(a,{label:`Encrypted`,value:e.Ebs.Encrypted?`Yes`:`No`}),e.Ebs.SnapshotId&&(0,s.jsx)(a,{label:`Snapshot ID`,value:(0,s.jsx)(n,{className:`text-primary hover:underline`,params:{id:e.Ebs.SnapshotId},to:`/ec2/describe-snapshots/$id`,children:e.Ebs.SnapshotId})})]}),e.VirtualName&&(0,s.jsx)(a,{label:`Virtual Name`,value:e.VirtualName})]})]},e.DeviceName)}export{c as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-BokOReHc.js";import{an as r}from"./cluster-config-DkOiY8HH.js";import{n as i,t as a}from"./detail-row-DNBRlVeK.js";var o=t(),s=e();function c(e){let t=(0,o.c)(58),{image:c,showExtendedDetails:u}=e,d=u!==void 0&&u,f;t[0]===c.CreationDate?f=t[1]:(f=r(c.CreationDate),t[0]=c.CreationDate,t[1]=f);let p=f,m=d?`AMI Information`:`AMI Details`,h;t[2]===m?h=t[3]:(h=(0,s.jsx)(i.Header,{children:m}),t[2]=m,t[3]=h);let g;t[4]!==c.ImageId||t[5]!==d?(g=c.ImageId&&!d?(0,s.jsx)(n,{className:`text-primary hover:underline`,params:{id:c.ImageId},to:`/ec2/describe-images/$id`,children:c.ImageId}):c.ImageId,t[4]=c.ImageId,t[5]=d,t[6]=g):g=t[6];let _;t[7]===g?_=t[8]:(_=(0,s.jsx)(a,{label:`AMI ID`,value:g}),t[7]=g,t[8]=_);let v;t[9]===c.Name?v=t[10]:(v=(0,s.jsx)(a,{label:`AMI Name`,value:c.Name}),t[9]=c.Name,t[10]=v);let y;t[11]===c.Description?y=t[12]:(y=(0,s.jsx)(a,{label:`Description`,value:c.Description}),t[11]=c.Description,t[12]=y);let b;t[13]===c.Architecture?b=t[14]:(b=(0,s.jsx)(a,{label:`Architecture`,value:c.Architecture}),t[13]=c.Architecture,t[14]=b);let x;t[15]===c.VirtualizationType?x=t[16]:(x=(0,s.jsx)(a,{label:`Virtualization Type`,value:c.VirtualizationType}),t[15]=c.VirtualizationType,t[16]=x);let S=c.Platform??`Linux`,C;t[17]===S?C=t[18]:(C=(0,s.jsx)(a,{label:`Platform`,value:S}),t[17]=S,t[18]=C);let w;t[19]===c.PlatformDetails?w=t[20]:(w=(0,s.jsx)(a,{label:`Platform Details`,value:c.PlatformDetails}),t[19]=c.PlatformDetails,t[20]=w);let T;t[21]===c.ImageType?T=t[22]:(T=(0,s.jsx)(a,{label:`Image Type`,value:c.ImageType}),t[21]=c.ImageType,t[22]=T);let E;t[23]===c.RootDeviceType?E=t[24]:(E=(0,s.jsx)(a,{label:`Root Device Type`,value:c.RootDeviceType}),t[23]=c.RootDeviceType,t[24]=E);let D;t[25]===c.RootDeviceName?D=t[26]:(D=(0,s.jsx)(a,{label:`Root Device Name`,value:c.RootDeviceName}),t[25]=c.RootDeviceName,t[26]=D);let O;t[27]===c.OwnerId?O=t[28]:(O=(0,s.jsx)(a,{label:`Owner`,value:c.OwnerId}),t[27]=c.OwnerId,t[28]=O);let k;t[29]===c.State?k=t[30]:(k=(0,s.jsx)(a,{label:`State`,value:c.State}),t[29]=c.State,t[30]=k);let A;t[31]!==p||t[32]!==c.Public||t[33]!==d?(A=d&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a,{label:`Creation Date`,value:p}),(0,s.jsx)(a,{label:`Public`,value:c.Public?`Yes`:`No`})]}),t[31]=p,t[32]=c.Public,t[33]=d,t[34]=A):A=t[34];let j;t[35]!==x||t[36]!==C||t[37]!==w||t[38]!==T||t[39]!==E||t[40]!==D||t[41]!==O||t[42]!==k||t[43]!==A||t[44]!==_||t[45]!==v||t[46]!==y||t[47]!==b?(j=(0,s.jsxs)(i.Content,{children:[_,v,y,b,x,C,w,T,E,D,O,k,A]}),t[35]=x,t[36]=C,t[37]=w,t[38]=T,t[39]=E,t[40]=D,t[41]=O,t[42]=k,t[43]=A,t[44]=_,t[45]=v,t[46]=y,t[47]=b,t[48]=j):j=t[48];let M;t[49]!==j||t[50]!==h?(M=(0,s.jsxs)(i,{children:[h,j]}),t[49]=j,t[50]=h,t[51]=M):M=t[51];let N;t[52]!==c.BlockDeviceMappings||t[53]!==d?(N=d&&c.BlockDeviceMappings&&c.BlockDeviceMappings.length>0&&c.BlockDeviceMappings.map(l),t[52]=c.BlockDeviceMappings,t[53]=d,t[54]=N):N=t[54];let P;return t[55]!==M||t[56]!==N?(P=(0,s.jsxs)(s.Fragment,{children:[M,N]}),t[55]=M,t[56]=N,t[57]=P):P=t[57],P}function l(e){return(0,s.jsxs)(i,{children:[(0,s.jsxs)(i.Header,{children:[`Block Device: `,e.DeviceName]}),(0,s.jsxs)(i.Content,{children:[(0,s.jsx)(a,{label:`Device Name`,value:e.DeviceName}),e.Ebs&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a,{label:`Volume Size`,value:e.Ebs.VolumeSize?`${e.Ebs.VolumeSize} GB`:void 0}),(0,s.jsx)(a,{label:`Volume Type`,value:e.Ebs.VolumeType}),(0,s.jsx)(a,{label:`Delete On Termination`,value:e.Ebs.DeleteOnTermination?`Yes`:`No`}),(0,s.jsx)(a,{label:`Encrypted`,value:e.Ebs.Encrypted?`Yes`:`No`}),e.Ebs.SnapshotId&&(0,s.jsx)(a,{label:`Snapshot ID`,value:(0,s.jsx)(n,{className:`text-primary hover:underline`,params:{id:e.Ebs.SnapshotId},to:`/ec2/describe-snapshots/$id`,children:e.Ebs.SnapshotId})})]}),e.VirtualName&&(0,s.jsx)(a,{label:`Virtual Name`,value:e.VirtualName})]})]},e.DeviceName)}export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4A8SZjs.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4H40Gb9.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4A8SZjs.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4H40Gb9.js index d7b613fe3..f2c0e7be3 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4A8SZjs.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/attributes-editor-B4H40Gb9.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{c as i,i as a,n as o,s,t as c}from"./select-B01jpDaX.js";import{t as l}from"./button-BarTr35m.js";import{t as u}from"./input-6kdUb_DH.js";import{r as d,s as f,t as p}from"./field-c7GHI5st.js";var m=r(),h=t(n(),1),g=e();function _(e,t){let n=new Map;for(let e of t)e.Key!==void 0&&n.set(e.Key,e.Value??``);return Object.fromEntries(e.map(e=>[e.key,n.get(e.key)??``]))}function v(e,t){if(e.type===`int`){if(t.trim()===``)return`Value is required`;if(!/^-?\d+$/.test(t))return`Must be a whole number`;let n=Number(t);if(e.min!==void 0&&ne.max)return`Must be at most ${e.max}`}}function y(e){let t=(0,m.c)(56),{specs:n,attributes:r,onSubmit:a,isPending:y,error:x,isSuccess:S}=e,C;t[0]!==r||t[1]!==n?(C=_(n,r),t[0]=r,t[1]=n,t[2]=C):C=t[2];let w=C,[T,E]=(0,h.useState)(w),D;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(D=(e,t)=>{E(n=>({...n,[e]:t}))},t[3]=D):D=t[3];let O=D,k;if(t[4]!==n||t[5]!==T){k={};for(let e of n)k[e.key]=v(e,T[e.key]??``);t[4]=n,t[5]=T,t[6]=k}else k=t[6];let A=Object.values(k).some(Boolean),j;if(t[7]!==w||t[8]!==n||t[9]!==T){let e;t[11]!==w||t[12]!==T?(e=e=>(T[e.key]??``)!==(w[e.key]??``),t[11]=w,t[12]=T,t[13]=e):e=t[13];let r;t[14]===T?r=t[15]:(r=e=>({key:e.key,value:T[e.key]??``}),t[14]=T,t[15]=r),j=n.filter(e).map(r),t[7]=w,t[8]=n,t[9]=T,t[10]=j}else j=t[10];let M=j,N;t[16]===w?N=t[17]:(N=()=>{E(w)},t[16]=w,t[17]=N);let P=N,F;t[18]!==M||t[19]!==A||t[20]!==a?(F=e=>{e.preventDefault(),!(A||M.length===0)&&a(M)},t[18]=M,t[19]=A,t[20]=a,t[21]=F):F=t[21];let I;t[22]===x?I=t[23]:(I=x&&(0,g.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:x.message||`Failed to save attributes`}),t[22]=x,t[23]=I);let L;t[24]!==M.length||t[25]!==S?(L=S&&M.length===0&&(0,g.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Attributes saved.`}),t[24]=M.length,t[25]=S,t[26]=L):L=t[26];let R;if(t[27]!==k||t[28]!==n||t[29]!==T){let e;t[31]!==k||t[32]!==T?(e=e=>{let t=`attr-${e.key}`,n=T[e.key]??``,r=k[e.key];return(0,g.jsxs)(p,{children:[(0,g.jsx)(f,{children:(0,g.jsx)(`label`,{htmlFor:t,children:e.label})}),e.type===`bool`&&(0,g.jsx)(`input`,{"aria-label":e.label,checked:n===`true`,id:t,onChange:t=>{O(e.key,t.target.checked?`true`:`false`)},type:`checkbox`}),e.type===`int`&&(0,g.jsx)(u,{"aria-invalid":!!r,id:t,inputMode:`numeric`,onChange:t=>{O(e.key,t.target.value)},value:n}),e.type===`text`&&(0,g.jsx)(u,{id:t,onChange:t=>{O(e.key,t.target.value)},placeholder:e.placeholder,value:n}),e.type===`select`&&(0,g.jsxs)(c,{onValueChange:t=>{O(e.key,t??``)},value:n,children:[(0,g.jsx)(s,{className:`w-full`,id:t,children:(0,g.jsx)(i,{})}),(0,g.jsx)(o,{children:e.options.map(b)})]}),e.description&&(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description}),(0,g.jsx)(d,{errors:[r?{message:r}:void 0]})]},e.key)},t[31]=k,t[32]=T,t[33]=e):e=t[33],R=n.map(e),t[27]=k,t[28]=n,t[29]=T,t[30]=R}else R=t[30];let z;t[34]===R?z=t[35]:(z=(0,g.jsx)(`div`,{className:`grid gap-4 p-4 sm:grid-cols-2`,children:R}),t[34]=R,t[35]=z);let B=M.length===0?`No changes`:`${M.length} change${M.length===1?``:`s`} pending`,V;t[36]===B?V=t[37]:(V=(0,g.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:B}),t[36]=B,t[37]=V);let H=y||M.length===0,U;t[38]!==P||t[39]!==H?(U=(0,g.jsx)(l,{disabled:H,onClick:P,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[38]=P,t[39]=H,t[40]=U):U=t[40];let W=y||A||M.length===0,G=y?`Saving…`:`Save changes`,K;t[41]!==W||t[42]!==G?(K=(0,g.jsx)(l,{disabled:W,size:`sm`,type:`submit`,children:G}),t[41]=W,t[42]=G,t[43]=K):K=t[43];let q;t[44]!==V||t[45]!==U||t[46]!==K?(q=(0,g.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[V,U,K]}),t[44]=V,t[45]=U,t[46]=K,t[47]=q):q=t[47];let J;t[48]!==q||t[49]!==z?(J=(0,g.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[z,q]}),t[48]=q,t[49]=z,t[50]=J):J=t[50];let Y;return t[51]!==J||t[52]!==F||t[53]!==I||t[54]!==L?(Y=(0,g.jsxs)(`form`,{onSubmit:F,children:[I,L,J]}),t[51]=J,t[52]=F,t[53]=I,t[54]=L,t[55]=Y):Y=t[55],Y}function b(e){return(0,g.jsx)(a,{value:e,children:e},e)}var x=[{key:`deletion_protection.enabled`,label:`Deletion protection`,type:`bool`},{key:`load_balancing.cross_zone.enabled`,label:`Cross-zone load balancing`,type:`bool`},{key:`idle_timeout.timeout_seconds`,label:`Idle timeout (s)`,type:`int`,min:1,max:4e3},{key:`client_keep_alive.seconds`,label:`Client keep-alive (s)`,type:`int`,min:60,max:604800},{key:`routing.http2.enabled`,label:`HTTP/2`,type:`bool`},{key:`routing.http.drop_invalid_header_fields.enabled`,label:`Drop invalid header fields`,type:`bool`},{key:`routing.http.preserve_host_header.enabled`,label:`Preserve host header`,type:`bool`},{key:`routing.http.xff_client_port.enabled`,label:`XFF client port`,type:`bool`},{key:`routing.http.xff_header_processing.mode`,label:`XFF header processing`,type:`select`,options:[`append`,`preserve`,`remove`]},{key:`routing.http.desync_mitigation_mode`,label:`Desync mitigation mode`,type:`select`,options:[`defensive`,`strictest`,`monitor`]},{key:`routing.http.x_amzn_tls_version_and_cipher_suite.enabled`,label:`Add TLS version & cipher headers`,type:`bool`},{key:`waf.fail_open.enabled`,label:`WAF fail open`,type:`bool`},{key:`zonal_shift.config.enabled`,label:`Zonal shift`,type:`bool`},{key:`access_logs.s3.enabled`,label:`Access logs: enabled`,type:`bool`},{key:`access_logs.s3.bucket`,label:`Access logs: S3 bucket`,type:`text`},{key:`access_logs.s3.prefix`,label:`Access logs: S3 prefix`,type:`text`},{key:`connection_logs.s3.enabled`,label:`Connection logs: enabled`,type:`bool`},{key:`connection_logs.s3.bucket`,label:`Connection logs: S3 bucket`,type:`text`},{key:`connection_logs.s3.prefix`,label:`Connection logs: S3 prefix`,type:`text`},{key:`health_check_logs.s3.enabled`,label:`Health check logs: enabled`,type:`bool`},{key:`health_check_logs.s3.bucket`,label:`Health check logs: S3 bucket`,type:`text`},{key:`health_check_logs.s3.prefix`,label:`Health check logs: S3 prefix`,type:`text`}],S=[{key:`deregistration_delay.timeout_seconds`,label:`Deregistration delay (s)`,type:`int`,min:0,max:3600},{key:`stickiness.enabled`,label:`Stickiness`,type:`bool`},{key:`stickiness.type`,label:`Stickiness type`,type:`select`,options:[`lb_cookie`,`source_ip`]},{key:`stickiness.lb_cookie.duration_seconds`,label:`Stickiness lb_cookie duration (s)`,type:`int`,min:1,max:604800},{key:`load_balancing.cross_zone.enabled`,label:`Cross-zone load balancing`,type:`select`,options:[`true`,`false`,`use_load_balancer_configuration`]},{key:`load_balancing.algorithm.type`,label:`Load balancing algorithm`,type:`select`,options:[`round_robin`,`least_outstanding_requests`]},{key:`slow_start.duration_seconds`,label:`Slow start duration (s)`,type:`int`,min:0,max:900}];export{x as n,S as r,y as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{c as i,i as a,n as o,s,t as c}from"./select-Cn66OoPn.js";import{t as l}from"./button-qf9lLJ2x.js";import{t as u}from"./input-D3aUBtS6.js";import{r as d,s as f,t as p}from"./field-CS-ql6du.js";var m=r(),h=t(n(),1),g=e();function _(e,t){let n=new Map;for(let e of t)e.Key!==void 0&&n.set(e.Key,e.Value??``);return Object.fromEntries(e.map(e=>[e.key,n.get(e.key)??``]))}function v(e,t){if(e.type===`int`){if(t.trim()===``)return`Value is required`;if(!/^-?\d+$/.test(t))return`Must be a whole number`;let n=Number(t);if(e.min!==void 0&&ne.max)return`Must be at most ${e.max}`}}function y(e){let t=(0,m.c)(56),{specs:n,attributes:r,onSubmit:a,isPending:y,error:x,isSuccess:S}=e,C;t[0]!==r||t[1]!==n?(C=_(n,r),t[0]=r,t[1]=n,t[2]=C):C=t[2];let w=C,[T,E]=(0,h.useState)(w),D;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(D=(e,t)=>{E(n=>({...n,[e]:t}))},t[3]=D):D=t[3];let O=D,k;if(t[4]!==n||t[5]!==T){k={};for(let e of n)k[e.key]=v(e,T[e.key]??``);t[4]=n,t[5]=T,t[6]=k}else k=t[6];let A=Object.values(k).some(Boolean),j;if(t[7]!==w||t[8]!==n||t[9]!==T){let e;t[11]!==w||t[12]!==T?(e=e=>(T[e.key]??``)!==(w[e.key]??``),t[11]=w,t[12]=T,t[13]=e):e=t[13];let r;t[14]===T?r=t[15]:(r=e=>({key:e.key,value:T[e.key]??``}),t[14]=T,t[15]=r),j=n.filter(e).map(r),t[7]=w,t[8]=n,t[9]=T,t[10]=j}else j=t[10];let M=j,N;t[16]===w?N=t[17]:(N=()=>{E(w)},t[16]=w,t[17]=N);let P=N,F;t[18]!==M||t[19]!==A||t[20]!==a?(F=e=>{e.preventDefault(),!(A||M.length===0)&&a(M)},t[18]=M,t[19]=A,t[20]=a,t[21]=F):F=t[21];let I;t[22]===x?I=t[23]:(I=x&&(0,g.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:x.message||`Failed to save attributes`}),t[22]=x,t[23]=I);let L;t[24]!==M.length||t[25]!==S?(L=S&&M.length===0&&(0,g.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Attributes saved.`}),t[24]=M.length,t[25]=S,t[26]=L):L=t[26];let R;if(t[27]!==k||t[28]!==n||t[29]!==T){let e;t[31]!==k||t[32]!==T?(e=e=>{let t=`attr-${e.key}`,n=T[e.key]??``,r=k[e.key];return(0,g.jsxs)(p,{children:[(0,g.jsx)(f,{children:(0,g.jsx)(`label`,{htmlFor:t,children:e.label})}),e.type===`bool`&&(0,g.jsx)(`input`,{"aria-label":e.label,checked:n===`true`,id:t,onChange:t=>{O(e.key,t.target.checked?`true`:`false`)},type:`checkbox`}),e.type===`int`&&(0,g.jsx)(u,{"aria-invalid":!!r,id:t,inputMode:`numeric`,onChange:t=>{O(e.key,t.target.value)},value:n}),e.type===`text`&&(0,g.jsx)(u,{id:t,onChange:t=>{O(e.key,t.target.value)},placeholder:e.placeholder,value:n}),e.type===`select`&&(0,g.jsxs)(c,{onValueChange:t=>{O(e.key,t??``)},value:n,children:[(0,g.jsx)(s,{className:`w-full`,id:t,children:(0,g.jsx)(i,{})}),(0,g.jsx)(o,{children:e.options.map(b)})]}),e.description&&(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description}),(0,g.jsx)(d,{errors:[r?{message:r}:void 0]})]},e.key)},t[31]=k,t[32]=T,t[33]=e):e=t[33],R=n.map(e),t[27]=k,t[28]=n,t[29]=T,t[30]=R}else R=t[30];let z;t[34]===R?z=t[35]:(z=(0,g.jsx)(`div`,{className:`grid gap-4 p-4 sm:grid-cols-2`,children:R}),t[34]=R,t[35]=z);let B=M.length===0?`No changes`:`${M.length} change${M.length===1?``:`s`} pending`,V;t[36]===B?V=t[37]:(V=(0,g.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:B}),t[36]=B,t[37]=V);let H=y||M.length===0,U;t[38]!==P||t[39]!==H?(U=(0,g.jsx)(l,{disabled:H,onClick:P,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[38]=P,t[39]=H,t[40]=U):U=t[40];let W=y||A||M.length===0,G=y?`Saving…`:`Save changes`,K;t[41]!==W||t[42]!==G?(K=(0,g.jsx)(l,{disabled:W,size:`sm`,type:`submit`,children:G}),t[41]=W,t[42]=G,t[43]=K):K=t[43];let q;t[44]!==V||t[45]!==U||t[46]!==K?(q=(0,g.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[V,U,K]}),t[44]=V,t[45]=U,t[46]=K,t[47]=q):q=t[47];let J;t[48]!==q||t[49]!==z?(J=(0,g.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[z,q]}),t[48]=q,t[49]=z,t[50]=J):J=t[50];let Y;return t[51]!==J||t[52]!==F||t[53]!==I||t[54]!==L?(Y=(0,g.jsxs)(`form`,{onSubmit:F,children:[I,L,J]}),t[51]=J,t[52]=F,t[53]=I,t[54]=L,t[55]=Y):Y=t[55],Y}function b(e){return(0,g.jsx)(a,{value:e,children:e},e)}var x=[{key:`deletion_protection.enabled`,label:`Deletion protection`,type:`bool`},{key:`load_balancing.cross_zone.enabled`,label:`Cross-zone load balancing`,type:`bool`},{key:`idle_timeout.timeout_seconds`,label:`Idle timeout (s)`,type:`int`,min:1,max:4e3},{key:`client_keep_alive.seconds`,label:`Client keep-alive (s)`,type:`int`,min:60,max:604800},{key:`routing.http2.enabled`,label:`HTTP/2`,type:`bool`},{key:`routing.http.drop_invalid_header_fields.enabled`,label:`Drop invalid header fields`,type:`bool`},{key:`routing.http.preserve_host_header.enabled`,label:`Preserve host header`,type:`bool`},{key:`routing.http.xff_client_port.enabled`,label:`XFF client port`,type:`bool`},{key:`routing.http.xff_header_processing.mode`,label:`XFF header processing`,type:`select`,options:[`append`,`preserve`,`remove`]},{key:`routing.http.desync_mitigation_mode`,label:`Desync mitigation mode`,type:`select`,options:[`defensive`,`strictest`,`monitor`]},{key:`routing.http.x_amzn_tls_version_and_cipher_suite.enabled`,label:`Add TLS version & cipher headers`,type:`bool`},{key:`waf.fail_open.enabled`,label:`WAF fail open`,type:`bool`},{key:`zonal_shift.config.enabled`,label:`Zonal shift`,type:`bool`},{key:`access_logs.s3.enabled`,label:`Access logs: enabled`,type:`bool`},{key:`access_logs.s3.bucket`,label:`Access logs: S3 bucket`,type:`text`},{key:`access_logs.s3.prefix`,label:`Access logs: S3 prefix`,type:`text`},{key:`connection_logs.s3.enabled`,label:`Connection logs: enabled`,type:`bool`},{key:`connection_logs.s3.bucket`,label:`Connection logs: S3 bucket`,type:`text`},{key:`connection_logs.s3.prefix`,label:`Connection logs: S3 prefix`,type:`text`},{key:`health_check_logs.s3.enabled`,label:`Health check logs: enabled`,type:`bool`},{key:`health_check_logs.s3.bucket`,label:`Health check logs: S3 bucket`,type:`text`},{key:`health_check_logs.s3.prefix`,label:`Health check logs: S3 prefix`,type:`text`}],S=[{key:`deregistration_delay.timeout_seconds`,label:`Deregistration delay (s)`,type:`int`,min:0,max:3600},{key:`stickiness.enabled`,label:`Stickiness`,type:`bool`},{key:`stickiness.type`,label:`Stickiness type`,type:`select`,options:[`lb_cookie`,`source_ip`]},{key:`stickiness.lb_cookie.duration_seconds`,label:`Stickiness lb_cookie duration (s)`,type:`int`,min:1,max:604800},{key:`load_balancing.cross_zone.enabled`,label:`Cross-zone load balancing`,type:`select`,options:[`true`,`false`,`use_load_balancer_configuration`]},{key:`load_balancing.algorithm.type`,label:`Load balancing algorithm`,type:`select`,options:[`round_robin`,`least_outstanding_requests`]},{key:`slow_start.duration_seconds`,label:`Slow start duration (s)`,type:`int`,min:0,max:900}];export{x as n,S as r,y as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-Cqp6x3OY.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-Cqp6x3OY.js new file mode 100644 index 000000000..6dc4d639b --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-Cqp6x3OY.js @@ -0,0 +1,5 @@ +import{$ as e,$t as t,A as n,At as r,B as i,Bt as a,C as o,Ct as s,D as c,Dt as l,E as u,Et as ee,F as te,Ft as ne,G as d,Gt as re,H as ie,Ht as ae,I as oe,It as se,J as ce,Jt as le,K as ue,Kt as eee,L as de,Lt as tee,M as fe,Mt as pe,N as me,Nt as he,O as ge,Ot as _e,P as ve,Pt as ye,Q as be,Qt as xe,R as Se,Rt as Ce,S as we,St as Te,T as Ee,Tt as nee,U as De,Ut as Oe,V as ke,Vt as Ae,W as je,Wt as ree,X as Me,Xt as Ne,Y as Pe,Z as Fe,Zt as Ie,at as Le,b as Re,bt as ze,ct as iee,dt as Be,en as Ve,et as He,ft as Ue,gt as We,ht as Ge,i as Ke,it as qe,j as aee,jt as Je,kt as oee,lt as Ye,mt as Xe,nt as Ze,ot as Qe,pt as $e,q as et,qt as tt,rt as nt,s as rt,st as it,t as at,tt as ot,vt as see,w as st,wt as cee,x as ct,xt as lt,y as ut,yt as dt,z as ft,zt as pt}from"./cluster-config-DkOiY8HH.js";import{a as mt,i as ht,n as lee,o as gt,r as _t,t as uee}from"./hex-encoding-CVnQo5PF.js";import{a as dee,g as fee,i as pee,p as mee,r as vt}from"./index.browser-DuXQj3EI.js";function hee(e){return(e.includes(`,`)||e.includes(`"`))&&(e=`"${e.replace(/"/g,`\\"`)}"`),e}function gee(e,t,n){if(n<=0||!Number.isInteger(n))throw Error(`Invalid number of delimiters (`+n+`) for splitEvery.`);let r=e.split(t);if(n===1)return r;let i=[],a=``;for(let e=0;e{if(!We(n))throw Error(`@smithy/util-stream: unsupported source type ${n?.constructor?.name??n} in ChecksumStream.`);let a=i??ne;if(typeof TransformStream!=`function`)throw Error(`@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.`);let o=new TransformStream({start(){},async transform(e,n){t.update(e),n.enqueue(e)},async flush(n){let i=await t.digest(),o=a(i);if(e!==o){let t=Error(`Checksum mismatch: expected "${e}" but received "${o}" in response header "${r}".`);n.error(t)}else n.terminate()}});n.pipeThrough(o);let s=o.readable;return Object.setPrototypeOf(s,vee.prototype),s},bee=class{allocByteArray;byteLength=0;byteArrays=[];constructor(e){this.allocByteArray=e}push(e){this.byteArrays.push(e),this.byteLength+=e.byteLength}flush(){if(this.byteArrays.length===1){let e=this.byteArrays[0];return this.reset(),e}let e=this.allocByteArray(this.byteLength),t=0;for(let n=0;nnew Uint8Array(e))],s=-1,c=async e=>{let{value:l,done:u}=await r.read(),ee=l;if(u){if(s!==-1){let t=yt(o,s);bt(t)>0&&e.enqueue(t)}e.close()}else{let r=wee(ee,!1);if(s!==r&&(s>=0&&e.enqueue(yt(o,s)),s=r),s===-1){e.enqueue(ee);return}let l=bt(ee);a+=l;let u=bt(o[s]);if(l>=t&&u===0)e.enqueue(ee);else{let r=Cee(o,s,ee);!i&&a>t*2&&(i=!0,n?.warn(`@smithy/util-stream - stream chunk size ${l} is below threshold of ${t}, automatically buffering.`)),r>=t?e.enqueue(yt(o,s)):await c(e)}}};return new ReadableStream({pull:c})}var See=xee;function Cee(e,t,n){switch(t){case 0:return e[0]+=n,bt(e[0]);case 1:case 2:return e[t].push(n),bt(e[t])}}function yt(e,t){switch(t){case 0:let n=e[0];return e[0]=``,n;case 1:case 2:return e[t].flush()}throw Error(`@smithy/util-stream - invalid index ${t} given to flush()`)}function bt(e){return e?.byteLength??e?.length??0}function wee(e,t=!0){return t&&typeof Buffer<`u`&&e instanceof Buffer?2:e instanceof Uint8Array?1:typeof e==`string`?0:-1}var Tee=(e,t)=>{let{base64Encoder:n,bodyLengthChecker:r,checksumAlgorithmFn:i,checksumLocationName:a,streamHasher:o}=t,s=n!==void 0&&r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0,c=s?o(i,e):void 0;Promise.resolve(c).catch(()=>{});let l=e.getReader();return new ReadableStream({async pull(e){let{value:t,done:i}=await l.read();if(i){if(e.enqueue(`0\r +`),s){let t=n(await c);e.enqueue(`${a}:${t}\r\n`),e.enqueue(`\r +`)}e.close()}else e.enqueue(`${(r(t)||0).toString(16)}\r\n${t}\r\n`)}})},xt=`The stream has already been transformed.`,St=e=>{if(!Ct(e)&&!We(e)){let t=e?.__proto__?.constructor?.name||e;throw Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${t}`)}let t=!1,n=async()=>{if(t)throw Error(xt);return t=!0,await Ge(e)},r=e=>{if(typeof e.stream!=`function`)throw Error(`Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled. +If you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body`);return e.stream()};return Object.assign(e,{transformToByteArray:n,transformToString:async e=>{let t=await n();if(e===`base64`)return ne(t);if(e===`hex`)return lee(t);if(e===void 0||e===`utf8`||e===`utf-8`)return _t(t);if(typeof TextDecoder==`function`)return new TextDecoder(e).decode(t);throw Error(`TextDecoder is not available, please make sure polyfill is provided.`)},transformToWebStream:()=>{if(t)throw Error(xt);if(t=!0,Ct(e))return r(e);if(We(e))return e;throw Error(`Cannot transform payload to web stream, got ${e}`)}})},Ct=e=>typeof Blob==`function`&&e instanceof Blob,wt=class extends Ye{async serializeRequest(e,n,r){let i=n&&typeof n==`object`?n:{},a=this.serializer,o={},s={},c=await r.endpoint(),l=Oe.of(e?.input),u=[],ee=[],te=!1,ne,d=new t({protocol:``,hostname:``,port:void 0,path:``,fragment:void 0,query:o,headers:s,body:void 0});if(c){this.updateServiceEndpoint(d,c),this.setHostPrefix(d,e,i);let t=ree(e.traits);if(t.http){d.method=t.http[0];let[e,n]=t.http[1].split(`?`);d.path==`/`?d.path=e:d.path+=e;let r=new URLSearchParams(n??``);for(let[e,t]of r)o[e]=t}}for(let[e,t]of l.structIterator()){let n=t.getMergedTraits()??{},r=i[e];if(r==null&&!t.isIdempotencyToken()){if(n.httpLabel&&(d.path.includes(`{${e}+}`)||d.path.includes(`{${e}}`)))throw Error(`No value provided for input HTTP label: ${e}.`);continue}if(n.httpPayload)t.isStreaming()?t.isStructSchema()?i[e]&&(ne=await this.serializeEventStream({eventStream:i[e],requestSchema:l})):ne=r:(a.write(t,r),ne=a.flush());else if(n.httpLabel){a.write(t,r);let n=a.flush();d.path.includes(`{${e}+}`)?d.path=d.path.replace(`{${e}+}`,n.split(`/`).map(Ue).join(`/`)):d.path.includes(`{${e}}`)&&(d.path=d.path.replace(`{${e}}`,Ue(n)))}else if(n.httpHeader)a.write(t,r),s[n.httpHeader.toLowerCase()]=String(a.flush());else if(typeof n.httpPrefixHeaders==`string`)for(let e in r){if(!gt(r,e))continue;let i=r[e],o=n.httpPrefixHeaders+e;a.write([t.getValueSchema(),{httpHeader:o}],i),s[o.toLowerCase()]=a.flush()}else n.httpQuery||n.httpQueryParams?this.serializeQuery(t,r,o):(te=!0,u.push(e),ee.push(t))}if(te&&i){let[e,t]=(l.getName(!0)??`#Unknown`).split(`#`),n=l.getSchema()[6],r=[3,e,t,l.getMergedTraits(),u,ee,void 0];n?r[6]=n:r.pop(),a.write(r,i),ne=a.flush()}return d.headers=s,d.query=o,d.body=ne,d}serializeQuery(e,t,n){let r=this.serializer,i=e.getMergedTraits();if(i.httpQueryParams){for(let r in t)if(gt(t,r)&&!(r in n)){let a=t[r],o=e.getValueSchema();Object.assign(o.getMergedTraits(),{...i,httpQuery:r,httpQueryParams:void 0}),this.serializeQuery(o,a,n)}return}if(e.isListSchema()){let a=!!e.getMergedTraits().sparse,o=[];for(let n of t){r.write([e.getValueSchema(),i],n);let t=r.flush();(a||t!==void 0)&&o.push(t)}n[i.httpQuery]=o}else r.write([e,i],t),n[i.httpQuery]=r.flush()}async deserializeResponse(e,t,n){let r=this.deserializer,i=Oe.of(e.output),a={};if(n.statusCode>=300){let i=await $e(n.body,t);throw i.byteLength>0&&Object.assign(a,await r.read(15,i)),await this.handleError(e,t,n,a,this.deserializeMetadata(n)),Error(`@smithy/core/protocols - HTTP Protocol error handler failed to throw.`)}for(let e in n.headers){if(!gt(n.headers,e))continue;let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let o=await this.deserializeHttpMessage(i,t,n,a);if(o.length){let e=await $e(n.body,t);if(e.byteLength>0){let t=await r.read(i,e);for(let e of o)t[e]!=null&&(a[e]=t[e])}}else o.discardResponseBody&&await $e(n.body,t);return a.$metadata=this.deserializeMetadata(n),a}async deserializeHttpMessage(e,t,n,r,i){let a;a=r instanceof Set?i:r;let o=!0,s=this.deserializer,c=Oe.of(e),l=[];for(let[e,r]of c.structIterator()){let i=r.getMemberTraits();if(i.httpPayload){if(o=!1,r.isStreaming())r.isStructSchema()?a[e]=await this.deserializeEventStream({response:n,responseSchema:c}):a[e]=St(n.body);else if(n.body){let i=await $e(n.body,t);i.byteLength>0&&(a[e]=await s.read(r,i))}}else if(i.httpHeader){let t=String(i.httpHeader).toLowerCase(),o=n.headers[t];if(o!=null){if(r.isListSchema()){let n=r.getValueSchema();n.getMergedTraits().httpHeader=t;let i;i=n.isTimestampSchema()&&n.getSchema()===4?gee(o,`,`,2):oee(o);let c=[];for(let e of i)c.push(await s.read(n,e.trim()));a[e]=c}else a[e]=await s.read(r,o)}}else if(i.httpPrefixHeaders!==void 0){a[e]={};for(let t in n.headers)if(gt(n.headers,t)&&t.startsWith(i.httpPrefixHeaders)){let o=n.headers[t],c=r.getValueSchema();c.getMergedTraits().httpHeader=t,a[e][t.slice(i.httpPrefixHeaders.length)]=await s.read(c,o)}}else i.httpResponseCode?a[e]=n.statusCode:l.push(e)}return l.discardResponseBody=o,l}},Tt=class extends Be{codecDeserializer;stringDeserializer;constructor(e,t){super(),this.codecDeserializer=e,this.stringDeserializer=new Qe(t)}setSerdeContext(e){this.stringDeserializer.setSerdeContext(e),this.codecDeserializer.setSerdeContext(e),this.serdeContext=e}read(e,t){let n=Oe.of(e),r=n.getMergedTraits(),i=this.serdeContext?.utf8Encoder??_t;if(r.httpHeader||r.httpResponseCode)return this.stringDeserializer.read(n,i(t));if(r.httpPayload){if(n.isBlobSchema()){let e=this.serdeContext?.utf8Decoder??ht;return typeof t==`string`?e(t):t}if(n.isStringSchema())return`byteLength`in t?i(t):t}return this.codecDeserializer.read(n,t)}},Et=class extends Be{settings;stringBuffer=``;constructor(e){super(),this.settings=e}write(e,t){let n=Oe.of(e);switch(typeof t){case`object`:if(t===null){this.stringBuffer=`null`;return}if(n.isTimestampSchema()){if(!(t instanceof Date))throw Error(`@smithy/core/protocols - received non-Date value ${t} when schema expected Date in ${n.getName(!0)}`);switch(it(n,this.settings)){case 5:this.stringBuffer=t.toISOString().replace(`.000Z`,`Z`);break;case 6:this.stringBuffer=Je(t);break;case 7:this.stringBuffer=String(t.getTime()/1e3);break;default:console.warn(`Missing timestamp format, using epoch seconds`,t),this.stringBuffer=String(t.getTime()/1e3)}return}if(n.isBlobSchema()&&`byteLength`in t){this.stringBuffer=(this.serdeContext?.base64Encoder??ne)(t);return}if(n.isListSchema()&&Array.isArray(t)){let e=``;for(let r of t){this.write([n.getValueSchema(),n.getMergedTraits()],r);let t=this.flush(),i=n.getValueSchema().isTimestampSchema()?t:hee(t);e!==``&&(e+=`, `),e+=i}this.stringBuffer=e;return}this.stringBuffer=JSON.stringify(t,null,2);break;case`string`:let e=n.getMergedTraits().mediaType,i=t;if(e&&((e===`application/json`||e.endsWith(`+json`))&&(i=r.from(i)),n.getMergedTraits().httpHeader)){this.stringBuffer=(this.serdeContext?.base64Encoder??ne)(i.toString());return}this.stringBuffer=t;break;default:this.stringBuffer=n.isIdempotencyToken()?Xe():String(t)}}flush(){let e=this.stringBuffer;return this.stringBuffer=``,e}},Dt=class{codecSerializer;stringSerializer;buffer;constructor(e,t,n=new Et(t)){this.codecSerializer=e,this.stringSerializer=n}setSerdeContext(e){this.codecSerializer.setSerdeContext(e),this.stringSerializer.setSerdeContext(e)}write(e,t){let n=Oe.of(e),r=n.getMergedTraits();if(r.httpHeader||r.httpLabel||r.httpQuery){this.stringSerializer.write(n,t),this.buffer=this.stringSerializer.flush();return}return this.codecSerializer.write(n,t)}flush(){if(this.buffer!==void 0){let e=this.buffer;return this.buffer=void 0,e}return this.codecSerializer.flush()}},Ot=class{async sign(e,n,r){let i=t.clone(e);if(!n.token)throw Error("request could not be signed with `token` since the `token` is not defined");return i.headers.Authorization=`Bearer ${n.token}`,i}},kt;function At(){if(kt===void 0)try{if(typeof Buffer!=`function`)kt=!1;else{let e=JSON.parse(Buffer.from([123,125]));kt=typeof e==`object`&&!!e}}catch{kt=!1}return kt}function jt(e,t,n){if(n?.source){let e=n.source;if(typeof t==`number`)return t<=2**53-1&&t>=-(2**53-1)?Eee(e,t)?t:new _e(e,`bigDecimal`):Mt(e)?new _e(e,`bigDecimal`):/[eE]/.test(e)?Dee(e):BigInt(e)}return t}function Mt(e){let t=e.indexOf(`.`);if(t===-1)return!1;let n=e.search(/[eE]/);if(n===-1)return!0;let r=n-t-1;return parseInt(e.slice(n+1),10)=o.length?o+`0`.repeat(c-o.length):o.slice(0,c)+`.`+o.slice(c)}return i.includes(`.`)&&(i=i.replace(/(\.\d*?)0+$/,`$1`).replace(/\.$/,``)),(t?`-`:``)+i}function Dee(e){let t=e.search(/[eE]/),n=parseInt(e.slice(t+1),10),r=e.startsWith(`-`),i=e.slice(+!!r,t),a=i.indexOf(`.`),o,s;a===-1?(o=i,s=n):(o=i.slice(0,a)+i.slice(a+1),s=n-(i.length-a-1)),o=o.replace(/0+$/,``)||`0`;let c=BigInt(o)*10n**BigInt(s+(i.replace(`.`,``).length-o.length));return r?-c:c}var Pt=Symbol.for(`@aws-sdk/reviver`);function Ft(e){let t=Oe.of(e),n=t.getSchema();if(Array.isArray(n)&&t.isStructSchema()){if(Pt in n)return n[Pt];let e=It(t,new Set);return n[Pt]=e,e}return It(t,new Set)}function It(e,t){let n=e.getSchema();if(t.has(n))return!1;if(t.add(n),e.isBigIntegerSchema()||e.isBigDecimalSchema())return!0;if(e.isStructSchema()){for(let[,n]of e.structIterator())if(It(n,t))return!0}else if(e.isListSchema()||e.isMapSchema()){if(It(e.getValueSchema(),t))return!0}else if(e.isDocumentSchema())return!0;return!1}var Oee=(e,t)=>$e(e,t).then(e=>(t?.utf8Encoder??_t)(e));async function kee(e,t,n){let r;if(At()&&typeof e?.[Symbol.asyncIterator]==`function`){let n=await $e(e,t);typeof Buffer==`function`&&(r=Buffer.isBuffer(n)?n:Buffer.from(n.buffer,n.byteOffset,n.byteLength))}if(r||=await Oee(e,t),r.length===0)return{};let i=n&&Ft(n)?jt:void 0;try{return JSON.parse(r,i)}catch(e){throw e?.name===`SyntaxError`&&Object.defineProperty(e,"$responseBodyText",{value:typeof r==`string`?r:r.toString(`utf8`)}),e}}var Lt=(e,t)=>Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase()),Rt=e=>{let t=e;return typeof t==`number`&&(t=t.toString()),t.indexOf(`,`)>=0&&(t=t.split(`,`)[0]),t.indexOf(`:`)>=0&&(t=t.split(`:`)[0]),t.indexOf(`#`)>=0&&(t=t.split(`#`)[1]),t},Aee=(e,t)=>zt(e,t,[`header`,`code`,`type`]),jee=(e,t,n=!1)=>zt(e,t,n?[`code`,`header`,`type`]:[`type`,`code`,`header`]),zt=({headers:e},t,n)=>{for(;n.length>0;)switch(n.shift()){case`header`:let n=Lt(e??{},`x-amzn-errortype`);if(n!==void 0)return Rt(e[n]);break;case`code`:let r=Lt(t??{},`code`);if(r&&t[r]!==void 0)return Rt(t[r]);break;case`type`:if(t?.__type!==void 0)return Rt(t.__type)}},Mee=class extends st{settings;constructor(e){super(),this.settings=e}async read(e,t){let n=Ft(e)?jt:void 0,r;if(typeof t==`string`){if(t.length===0)return{};r=JSON.parse(t,n)}else if(t instanceof Uint8Array&&At()){if(t.byteLength===0)return{};let e=Buffer.isBuffer(t)?t:Buffer.from(t.buffer,t.byteOffset,t.byteLength);r=JSON.parse(e,n)}else r=await kee(t,this.serdeContext,e);return this._read(e,r)}readObject(e,t){return this._read(e,t)}_read(e,t){let n=typeof t==`object`&&!!t,i=Oe.of(e);if(n){if(i.isStructSchema())return this._readStruct(i,t);if(Array.isArray(t)&&i.isListSchema()){let e=i.getValueSchema();if(this.needsTransform(e))for(let n=0;nBt+6e4&&(console.warn(`@aws-sdk/core/protocols - WARN - JsonCodec2: you have called a string method on a Uint8Array request body. It has been automatically converted to string. In a future version this will throw an error.`),Bt=e),this.string=_t(this)}return this.string}},Bt=0,Vt=new TextEncoder,Ht=123,Ut=125,Pee=91,Fee=93,Wt=34,Gt=58,Kt=44,qt=92,Iee=new Uint8Array([116,114,117,101]),Lee=new Uint8Array([102,97,108,115,101]),Ree=new Uint8Array([110,117,108,108]),Jt=Array(128).fill(null);Jt[8]=`b`,Jt[9]=`t`,Jt[10]=`n`,Jt[12]=`f`,Jt[13]=`r`,Jt[34]=`"`,Jt[92]=`\\`;for(let e=0;e<32;e++)Jt[e]===null&&(Jt[e]=`u00`+e.toString(16).padStart(2,`0`));var Yt=2048;function Xt(e){return Nee.allocUnsafe(e)}var zee=class e extends st{settings;json;i=0;rootSchema;rawValue;passthrough=!1;constructor(e){super(),this.settings=e,this.json=Xt(Yt)}write(e,t){this.i=0,this.rawValue=t,this.rootSchema=Oe.of(e),this.passthrough=this.rootSchema.isBlobSchema()||this.rootSchema.isStringSchema(),this.passthrough||this.writeValue(this.rootSchema,t,void 0)}writeDiscriminatedDocument(e,t){this.i=0,this.rootSchema=Oe.of(e);let n=this.rootSchema;if(n.isStructSchema()&&typeof t==`object`&&t){this.writeValue(n,t,void 0);let e=`"__type":"${n.getName(!0)??`Unknown`}",`,r=e.length;this.ensure(r),this.json.copyWithin(1+r,1,this.i),Vt.encodeInto(e,this.json.subarray(1)),this.i+=r}else this.writeValue(n,t,void 0)}flush(){this.rootSchema=void 0;let e=this.i;this.i=0;let t=this.rawValue;if(this.rawValue=void 0,e===0)return t;let n=this.json.subarray(0,e);return this.json=Xt(Yt),n}ensure(e){let{i:t,json:n}=this;if(t+e>n.length){let r=n.length*2;for(;r34&&r<92)this.json[this.i++]=r;else if(r<128){let e=Jt[r];if(e!==null){this.ensure(e.length+1),this.json[this.i++]=qt;for(let t=0;t=55296&&r<=56319){let i=n+1=56320&&i<=57343){this.ensure(4);let{written:t}=Vt.encodeInto(e.substring(n,n+2),this.json.subarray(this.i));this.i+=t,++n}else this.ensure(6),this.writeUnicodeEscape(r)}else if(r>=56320&&r<=57343)this.ensure(6),this.writeUnicodeEscape(r);else{let{i:e,json:t}=this;r<2048?(t[e++]=192|r>>6,t[e++]=128|r&63):(t[e++]=224|r>>12,t[e++]=128|r>>6&63,t[e++]=128|r&63),this.i=e}}this.json[this.i++]=Wt}writeUnicodeEscape(e){let{json:t,i:n}=this;t[n++]=qt,t[n++]=117;let r=e.toString(16).padStart(4,`0`);for(let e=0;e<4;++e)t[n++]=r.charCodeAt(e);this.i=n}static B64=(()=>{let e=new Uint8Array(64);for(let t=0;t<64;++t)e[t]=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`.charCodeAt(t);return e})();writeBase64(t){let n=Math.ceil(t.length/3)*4;this.ensure(n+2);let r=this.json,i=e.B64,a=this.i;r[a++]=Wt;let o=t.length,s=o%3,c=o-s;for(let e=0;e>2],r[a++]=i[(n&3)<<4|o>>4],r[a++]=i[(o&15)<<2|s>>6],r[a++]=i[s&63]}if(s===2){let e=t[c],n=t[c+1];r[a++]=i[e>>2],r[a++]=i[(e&3)<<4|n>>4],r[a++]=i[(n&15)<<2],r[a++]=61}else if(s===1){let e=t[c];r[a++]=i[e>>2],r[a++]=i[(e&3)<<4],r[a++]=61,r[a++]=61}r[a++]=Wt,this.i=a}writeValue(e,t,n){if(t==null){if(n?.isStructSchema()){if(t===void 0&&Oe.of(e).isIdempotencyToken()){this.writeAsciiQuoted(Xe());return}return}this.ensure(4),this.json.set(Ree,this.i),this.i+=4;return}let i=Oe.of(e),a=typeof t==`object`;if(i.isStringSchema()){let e=i.getMergedTraits().mediaType;if(e&&(e===`application/json`||e.endsWith(`+json`))){this.writeJsonString(r.from(t).toString());return}}if(a){if(i.isStructSchema()){this.writeStruct(i,t);return}if(Array.isArray(t)&&(i.isListSchema()||i.isDocumentSchema())){this.writeList(i,t,i.isDocumentSchema());return}if(i.isMapSchema()){this.writeMap(i,t,!1);return}if(t instanceof Uint8Array&&(i.isBlobSchema()||i.isDocumentSchema())){this.writeBase64(t);return}if(t instanceof Date&&(i.isTimestampSchema()||i.isDocumentSchema())){this.writeTimestamp(i,t);return}if(t instanceof _e){this.writeAscii(t.string);return}if(i.isDocumentSchema()){Array.isArray(t)?this.writeList(i,t,!0):this.writeMap(i,t,!0);return}let e=JSON.stringify(t);this.writeAscii(e);return}if(typeof t==`string`){if(i.isBlobSchema()){let e=(this.serdeContext?.base64Encoder??ne)(t);this.writeAsciiQuoted(e);return}this.writeJsonString(t);return}if(typeof t==`number`){if(Math.abs(t)===1/0||Number.isNaN(t)){this.writeAsciiQuoted(String(t));return}let e=String(t);this.writeAscii(e);return}if(typeof t==`boolean`){this.ensure(5);let{i:e,json:n}=this;t?(n.set(Iee,e),e+=4):(n.set(Lee,e),e+=5),this.i=e;return}if(typeof t==`bigint`){this.writeAscii(t.toString());return}this.writeAscii(String(t))}writeStruct(e,t){this.ensure(2),this.json[this.i++]=Ht;let n=!1,r=typeof t.__type==`string`,i;r&&(i=new Set);for(let[r,a]of e.structIterator()){let o=t[r];if(o==null&&!a.isIdempotencyToken())continue;n&&(this.ensure(1),this.json[this.i++]=Kt),n=!0;let s=this.settings.jsonName?a.getMergedTraits().jsonName??r:r;i&&(i.add(r),i.add(s)),this.writeAsciiQuoted(s),this.json[this.i++]=Gt,this.writeValue(a,o,e)}if(!n&&e.isUnionSchema()){let{$unknown:n}=t;if(Array.isArray(n)){let[t,r]=n;this.writeAsciiQuoted(t),this.ensure(1),this.json[this.i++]=Gt,this.writeValue(15,r,e)}}else if(r)for(let e in t){if(i.has(e))continue;i.add(e);let r=t[e];n&&(this.ensure(1),this.json[this.i++]=Kt),n=!0,this.writeAsciiQuoted(e),this.ensure(1),this.json[this.i++]=Gt,this.writeValue(15,r,void 0)}this.ensure(1),this.json[this.i++]=Ut}writeList(e,t,n){let r=!!e.getMergedTraits().sparse,i=e.getValueSchema();if(!n&&(i.isStringSchema()||i.isNumericSchema()||i.isBooleanSchema())){let e=!1;for(let n=0;n"]/g,Hee={"&":`&`,"<":`<`,">":`>`,'"':`"`};function Uee(e){return e.replace(Vee,e=>Hee[e])}var Wee=/[&"'<>\r\n\u0085\u2028]/g,Gee={"&":`&`,'"':`"`,"'":`'`,"<":`<`,">":`>`,"\r":` `,"\n":` `,"…":`…`,"\u2028":`
`};function Kee(e){return e.replace(Wee,e=>Gee[e])}var en=class{value;constructor(e){this.value=e}toString(){return Kee(``+this.value)}},tn=class e{name;children;attributes={};static of(t,n,r){let i=new e(t);return n!==void 0&&i.addChildNode(new en(n)),r!==void 0&&i.withName(r),i}constructor(e,t=[]){this.name=e,this.children=t}withName(e){return this.name=e,this}addAttribute(e,t){return this.attributes[e]=t,this}addChildNode(e){return this.children.push(e),this}removeAttribute(e){return delete this.attributes[e],this}n(e){return this.name=e,this}c(e){return this.children.push(e),this}a(e,t){return t!=null&&(this.attributes[e]=t),this}cc(t,n,r=n){if(t[n]!=null){let i=e.of(n,t[n]).withName(r);this.c(i)}}l(e,t,n,r){e[t]!=null&&r().map(e=>{e.withName(n),this.c(e)})}lc(t,n,r,i){if(t[n]!=null){let t=i(),n=new e(r);t.map(e=>{n.c(e)}),this.c(n)}}toString(){let e=!!this.children.length,t=`<${this.name}`,n=this.attributes;for(let e of Object.keys(n)){let r=n[e];r!=null&&(t+=` ${e}="${Uee(``+r)}"`)}return t+=e?`>${this.children.map(e=>e.toString()).join(``)}`:`/>`}},qee=class extends Re{options;constructor(e){super(e),this.options=e,Object.assign(this.serializer.settings,{capitalizeKeys:!0,flattenLists:!0,serializeEmptyLists:!1,ec2:!0})}getShapeId(){return`aws.protocols#ec2Query`}useNestedResult(){return!1}},Jee=(e,t)=>{if(t?.Error?.Code!==void 0)return t.Error.Code;if(t?.Code!==void 0)return t.Code;if(e.statusCode==404)return`NotFound`},Yee=class extends st{settings;stringBuffer;byteBuffer;buffer;constructor(e){super(),this.settings=e}write(e,t){let n=Oe.of(e);if(n.isStringSchema()&&typeof t==`string`)this.stringBuffer=t;else if(n.isBlobSchema())this.byteBuffer=`byteLength`in t?t:(this.serdeContext?.base64Decoder??se)(t);else{this.buffer=this.writeStruct(n,t,void 0);let e=n.getMergedTraits();e.httpPayload&&!e.xmlName&&this.buffer.withName(n.getName())}}flush(){if(this.byteBuffer!==void 0){let e=this.byteBuffer;return delete this.byteBuffer,e}if(this.stringBuffer!==void 0){let e=this.stringBuffer;return delete this.stringBuffer,e}let e=this.buffer;return this.settings.xmlNamespace&&(e?.attributes?.xmlns||e.addAttribute(`xmlns`,this.settings.xmlNamespace)),delete this.buffer,e.toString()}writeStruct(e,t,n){let r=e.getMergedTraits(),i=e.isMemberSchema()&&!r.httpPayload?e.getMemberTraits().xmlName??e.getMemberName():r.xmlName??e.getName();if(!i||!e.isStructSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${e.getName(!0)}.`);let a=tn.of(i),[o,s]=this.getXmlnsAttribute(e,n);for(let[n,r]of e.structIterator()){let e=t[n];if(e!=null||r.isIdempotencyToken()){if(r.getMergedTraits().xmlAttribute){a.addAttribute(r.getMergedTraits().xmlName??n,this.writeSimple(r,e));continue}if(r.isListSchema())this.writeList(r,e,a,s);else if(r.isMapSchema())this.writeMap(r,e,a,s);else if(r.isStructSchema())a.addChildNode(this.writeStruct(r,e,s));else{let t=tn.of(r.getMergedTraits().xmlName??r.getMemberName());this.writeSimpleInto(r,e,t,s),a.addChildNode(t)}}}let{$unknown:c}=t;if(c&&e.isUnionSchema()&&Array.isArray(c)&&Object.keys(t).length===1){let[e,n]=c,r=tn.of(e);if(typeof n!=`string`){if(t instanceof tn||t instanceof en)a.addChildNode(t);else throw Error(`@aws-sdk - $unknown union member in XML requires value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.`)}this.writeSimpleInto(0,n,r,s),a.addChildNode(r)}return s&&a.addAttribute(o,s),a}writeList(e,t,n,r){if(!e.isMemberSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${e.getName(!0)}`);let i=e.getMergedTraits(),a=e.getValueSchema(),o=a.getMergedTraits(),s=!!o.sparse,c=!!i.xmlFlattened,[l,u]=this.getXmlnsAttribute(e,r),ee=(t,n)=>{if(a.isListSchema())this.writeList(a,Array.isArray(n)?n:[n],t,u);else if(a.isMapSchema())this.writeMap(a,n,t,u);else if(a.isStructSchema()){let r=this.writeStruct(a,n,u);t.addChildNode(r.withName(c?i.xmlName??e.getMemberName():o.xmlName??`member`))}else{let r=tn.of(c?i.xmlName??e.getMemberName():o.xmlName??`member`);this.writeSimpleInto(a,n,r,u),t.addChildNode(r)}};if(c)for(let e of t)(s||e!=null)&&ee(n,e);else{let r=tn.of(i.xmlName??e.getMemberName());u&&r.addAttribute(l,u);for(let e of t)(s||e!=null)&&ee(r,e);n.addChildNode(r)}}writeMap(e,t,n,r,i=!1){if(!e.isMemberSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${e.getName(!0)}`);let a=e.getMergedTraits(),o=e.getKeySchema(),s=o.getMergedTraits().xmlName??`key`,c=e.getValueSchema(),l=c.getMergedTraits(),u=l.xmlName??`value`,ee=!!l.sparse,te=!!a.xmlFlattened,[ne,d]=this.getXmlnsAttribute(e,r),re=(e,t,n)=>{let r=tn.of(s,t),[i,a]=this.getXmlnsAttribute(o,d);a&&r.addAttribute(i,a),e.addChildNode(r);let l=tn.of(u);c.isListSchema()?this.writeList(c,n,l,d):c.isMapSchema()?this.writeMap(c,n,l,d,!0):c.isStructSchema()?l=this.writeStruct(c,n,d):this.writeSimpleInto(c,n,l,d),e.addChildNode(l)};if(te)for(let r in t){let i=t[r];if(ee||i!=null){let t=tn.of(a.xmlName??e.getMemberName());re(t,r,i),n.addChildNode(t)}}else{let r;i||(r=tn.of(a.xmlName??e.getMemberName()),d&&r.addAttribute(ne,d),n.addChildNode(r));for(let e in t){let a=t[e];if(ee||a!=null){let t=tn.of(`entry`);re(t,e,a),(i?n:r).addChildNode(t)}}}}writeSimple(e,t){if(t===null)throw Error(`@aws-sdk/core/protocols - (XML serializer) cannot write null value.`);let n=Oe.of(e),r=null;if(t&&typeof t==`object`){if(n.isBlobSchema())r=(this.serdeContext?.base64Encoder??ne)(t);else if(n.isTimestampSchema()&&t instanceof Date)switch(it(n,this.settings)){case 5:r=t.toISOString().replace(`.000Z`,`Z`);break;case 6:r=Je(t);break;case 7:r=String(t.getTime()/1e3);break;default:console.warn(`Missing timestamp format, using http date`,t),r=Je(t)}else if(n.isBigDecimalSchema()&&t)return t instanceof _e?t.string:String(t);else if(n.isMapSchema()||n.isListSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead.`);else throw Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${n.getName(!0)}`)}if((n.isBooleanSchema()||n.isNumericSchema()||n.isBigIntegerSchema()||n.isBigDecimalSchema())&&(r=String(t)),n.isStringSchema()&&(r=t===void 0&&n.isIdempotencyToken()?Xe():String(t)),r===null)throw Error(`Unhandled schema-value pair ${n.getName(!0)}=${t}`);return r}writeSimpleInto(e,t,n,r){let i=this.writeSimple(e,t),a=Oe.of(e),o=new en(i),[s,c]=this.getXmlnsAttribute(a,r);c&&n.addAttribute(s,c),n.addChildNode(o)}getXmlnsAttribute(e,t){let[n,r]=e.getMergedTraits().xmlNamespace??[];return r&&r!==t?[n?`xmlns:${n}`:`xmlns`,r]:[void 0,void 0]}},Xee=class extends st{settings;constructor(e){super(),this.settings=e}createSerializer(){let e=new Yee(this.settings);return e.setSerdeContext(this.serdeContext),e}createDeserializer(){let e=new ct(this.settings);return e.setSerdeContext(this.serdeContext),e}},Zee=class extends wt{codec;serializer;deserializer;mixin=new Ee;constructor(e){super(e);let t={timestampFormat:{useTrait:!0,default:5},httpBindings:!0,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace};this.codec=new Xee(t),this.serializer=new Dt(this.codec.createSerializer(),t),this.deserializer=new Tt(this.codec.createDeserializer(),t)}getPayloadCodec(){return this.codec}getShapeId(){return`aws.protocols#restXml`}async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n),i=Oe.of(e.input);if(!r.headers[`content-type`]){let e=this.mixin.resolveRestContentType(this.getDefaultContentType(),i);e&&(r.headers[`content-type`]=e)}return typeof r.body==`string`&&r.headers[`content-type`]===this.getDefaultContentType()&&!r.body.startsWith(``+r.body),r}async deserializeResponse(e,t,n){return super.deserializeResponse(e,t,n)}async handleError(e,t,n,r,i){let a=Jee(n,r)??`Unknown`;if(this.mixin.compose(this.compositeErrorRegistry,a,this.options.defaultNamespace),r.Error&&typeof r.Error==`object`)for(let e of Object.keys(r.Error))r[e]=r.Error[e],e.toLowerCase()===`message`&&(r.message=r.Error[e]);r.RequestId&&!i.requestId&&(i.requestId=r.RequestId);let{errorSchema:o,errorMetadata:s}=await this.mixin.getErrorSchemaOrThrowBaseException(a,this.options.defaultNamespace,n,r,i),c=Oe.of(o),l=r.Error?.message??r.Error?.Message??r.message??r.Message??`UnknownError`,u=new((this.compositeErrorRegistry.getErrorCtor(o))??Error)({});await this.deserializeHttpMessage(o,t,n,r);let ee={},te=this.codec.createDeserializer();for(let[e,t]of c.structIterator()){let n=t.getMergedTraits().xmlName??e,i=r.Error?.[n]??r[n];ee[e]=te.readSchema(t,i)}throw this.mixin.decorateServiceException(Object.assign(u,s,{$fault:c.getMergedTraits().error,message:l},ee),r)}getDefaultContentType(){return`application/xml`}hasUnstructuredPayloadBinding(e){for(let[,t]of e.structIterator())if(t.getMergedTraits().httpPayload)return!(t.isStructSchema()||t.isMapSchema()||t.isListSchema());return!1}};async function Qee(e,t,n=1048576){let r=e.size,i=0;for(;i{n.update(e)}),n.digest()},ete=class{digestLength=16;state=Uint32Array.from(nn);writeBuffer=new DataView(new ArrayBuffer(64));bufferLength=0;bytesHashed=0;update(e){let t=ee(e),n=0,r=t.byteLength;for(this.bytesHashed+=r;r>0;)this.writeBuffer.setUint8(this.bufferLength++,t[n++]),--r,this.bufferLength===64&&(an(this.state,this.writeBuffer),this.bufferLength=0)}async digest(){let e=Uint32Array.from(this.state),t=new DataView(this.writeBuffer.buffer.slice(0)),n=this.bufferLength,r=this.bytesHashed*8;if(t.setUint8(n++,128),this.bufferLength%64>=56){for(let e=n;e<64;++e)t.setUint8(e,0);an(e,t),n=0}for(let e=n;e<56;++e)t.setUint8(e,0);t.setUint32(56,r>>>0,!0),t.setUint32(60,Math.floor(r/2**32),!0),an(e,t);let i=new Uint8Array(16),a=new DataView(i.buffer);for(let t=0;t<4;++t)a.setUint32(t*4,e[t],!0);return i}reset(){this.state.set(nn),this.writeBuffer=new DataView(new ArrayBuffer(64)),this.bufferLength=0,this.bytesHashed=0}},nn=[1732584193,4023233417,2562383102,271733878],rn=4294967295,tte=Uint8Array.of(7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21),nte=Array.from({length:64},(e,t)=>Math.abs(Math.sin(t+1))*2**32>>>0);function an(e,t){let n=e[0],r=e[1],i=e[2],a=e[3];for(let e=0;e<64;++e){let o,s;e<16?(o=r&i|~r&a,s=e):e<32?(o=a&r|i&~a,s=(5*e+1)%16):e<48?(o=r^i^a,s=(3*e+5)%16):(o=i^(r|~a),s=7*e%16);let c=t.getUint32(s*4,!0),l=a;a=i,i=r;let u=tte[(e>>4)*4+(e&3)],ee=(n+o&rn)+(c+nte[e]&rn)&rn;r=r+((ee<>>32-u)>>>0)&rn,n=l}e[0]=e[0]+n&rn,e[1]=e[1]+r&rn,e[2]=e[2]+i&rn,e[3]=e[3]+a&rn}var rte=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function ite(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`acm`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var on=e=>{let t=[];return e.operation,t.push(ite(e)),t},sn=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},cn=e=>Object.assign(e,{useFipsEndpoint:e.useFipsEndpoint??!1,useDualstackEndpoint:e.useDualstackEndpoint??!1,defaultSigningName:`acm`,clientContextParams:e.clientContextParams??{}}),ln={ServiceType:{type:`clientContextParams`,name:`serviceType`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},un={name:`@aws-sdk/client-acm`,version:`3.1144.0`,description:`AWS SDK for JavaScript Acm Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-acm`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-acm`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},dn=`PartitionResult`,fn=`stringEquals`,pn=`booleanEquals`,mn={fn:`getAttr`,argv:[{ref:dn},`name`]},hn={},gn={conditions:[[`isSet`,[{ref:`Endpoint`}]],[`aws.partition`,[{ref:`Region`}],dn],[fn,[{ref:`ServiceType`},`ACM-ACME`]],[fn,[mn,`aws`]],[pn,[{ref:`UseFIPS`},!0]],[pn,[{ref:`UseDualStack`},!0]],[fn,[mn,`aws-us-gov`]]],results:[[-1],[`{Endpoint}`,hn],[-1,`FIPS endpoints are not available for ACME operations`],[`https://acm-acme.{Region}.{PartitionResult#dualStackDnsSuffix}`,hn],[-1,`ACME operations are only available in commercial AWS partitions`],[`https://acm-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,hn],[`https://acm.{Region}.amazonaws.com`,hn],[`https://acm-fips.{Region}.{PartitionResult#dnsSuffix}`,hn],[`https://acm.{Region}.{PartitionResult#dualStackDnsSuffix}`,hn],[`https://acm.{Region}.{PartitionResult#dnsSuffix}`,hn],[-1,`Region must be set to resolve an endpoint.`]]},_n=2,vn=new Int32Array([-1,1,-1,0,100000001,3,1,4,100000010,2,9,5,4,7,6,5,100000008,100000009,5,100000005,8,6,100000006,100000007,3,10,100000004,4,100000002,100000003]),yn=s.from(vn,_n,gn.conditions,gn.results),bn=new Te({size:50,params:[`Endpoint`,`Region`,`ServiceType`,`UseDualStack`,`UseFIPS`]}),xn=(e,t={})=>bn.get(e,()=>ze(yn,{endpointParams:e,logger:t.logger}));lt.aws=de;var Sn=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Cn=class e extends Sn{name=`AccessDeniedException`;$fault=`client`;Message;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},wn=class e extends Sn{name=`InvalidArnException`;$fault=`client`;constructor(t){super({name:`InvalidArnException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Tn=class e extends Sn{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},En=class e extends Sn{name=`InvalidTagException`;$fault=`client`;constructor(t){super({name:`InvalidTagException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dn=class e extends Sn{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},On=class e extends Sn{name=`TagPolicyException`;$fault=`client`;constructor(t){super({name:`TagPolicyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kn=class e extends Sn{name=`ThrottlingException`;$fault=`client`;throttlingReasons;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.throttlingReasons=t.throttlingReasons}},An=class e extends Sn{name=`TooManyTagsException`;$fault=`client`;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jn=class e extends Sn{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mn=class e extends Sn{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Nn=class e extends Sn{name=`InternalServerException`;$fault=`server`;$retryable={};constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Pn=class e extends Sn{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Fn=class e extends Sn{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},In=class e extends Sn{name=`RequestInProgressException`;$fault=`client`;constructor(t){super({name:`RequestInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ln=class e extends Sn{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Rn=class e extends Sn{name=`InvalidArgsException`;$fault=`client`;constructor(t){super({name:`InvalidArgsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zn=class e extends Sn{name=`InvalidDomainValidationOptionsException`;$fault=`client`;constructor(t){super({name:`InvalidDomainValidationOptionsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bn=class e extends Sn{name=`InvalidStateException`;$fault=`client`;constructor(t){super({name:`InvalidStateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Vn=`AccessDeniedException`,Hn=`CreatedAt`,Un=`CertificateArn`,Wn=`CertificateChain`,Gn=`ConflictException`,Kn=`CertificateKeyPairOrigin`,qn=`CertificateKeyPairOrigins`,Jn=`CertificateSummary`,Yn=`CertificateSummaryList`,Xn=`CertificateStatuses`,Zn=`Certificate`,Qn=`DomainName`,$n=`Exported`,er=`ExtendedKeyUsages`,tr=`ExportOption`,nr=`Filters`,rr=`HasAdditionalSubjectAlternativeNames`,ir=`ImportedAt`,ar=`InvalidArgsException`,or=`InvalidArnException`,sr=`IssuedAt`,cr=`ImportCertificate`,lr=`ImportCertificateRequest`,ur=`ImportCertificateResponse`,dr=`InvalidDomainValidationOptionsException`,fr=`InvalidParameterException`,pr=`InternalServerException`,mr=`InvalidStateException`,hr=`InvalidTagException`,gr=`InUse`,ate=`Includes`,ote=`Key`,ste=`KeyAlgorithm`,cte=`KeyUsages`,lte=`ListCertificates`,ute=`ListCertificatesRequest`,dte=`ListCertificatesResponse`,fte=`LimitExceededException`,pte=`Message`,mte=`ManagedBy`,hte=`MaxItems`,gte=`NotAfter`,_te=`NotBefore`,_r=`NextToken`,vte=`PrivateKey`,yte=`PrivateKeyBlob`,bte=`RevokedAt`,xte=`RenewalEligibility`,Ste=`RequestInProgressException`,Cte=`ResourceInUseException`,wte=`ResourceNotFoundException`,Tte=`Status`,Ete=`SubjectAlternativeNameSummaries`,Dte=`SortBy`,Ote=`SortOrder`,kte=`ServiceQuotaExceededException`,Ate=`Type`,jte=`ThrottlingException`,Mte=`TagList`,Nte=`TooManyTagsException`,Pte=`TagPolicyException`,Fte=`ThrottlingReason`,Ite=`ThrottlingReasonList`,Lte=`Tags`,Rte=`Tag`,zte=`Value`,Bte=`ValidationException`,vr=`awsQueryError`,yr=`client`,br=`error`,Vte=`extendedKeyUsage`,Hte=`exportOption`,xr=`httpError`,Ute=`keyTypes`,Wte=`keyUsage`,Sr=`message`,Gte=`managedBy`,Kte=`reason`,qte=`resource`,Cr=`smithy.ts.sdk.synthetic.com.amazonaws.acm`,Jte=`server`,Yte=`throttlingReasons`,wr=`com.amazonaws.acm`,Tr=new mt(Cr),Xte=[-3,Cr,`ACMServiceException`,0,[],[]];Tr.registerError(Xte,Sn);var Er=new mt(wr),Zte=[-3,wr,Vn,{[vr]:[`AccessDenied`,403],[br]:yr,[xr]:403},[pte],[0]];Er.registerError(Zte,Cn);var Qte=[-3,wr,Gn,{[br]:yr},[Sr],[0]];Er.registerError(Qte,Mn);var $te=[-3,wr,pr,{[br]:Jte},[Sr],[0]];Er.registerError($te,Nn);var ene=[-3,wr,ar,{[br]:yr},[Sr],[0]];Er.registerError(ene,Rn);var tne=[-3,wr,or,{[br]:yr},[Sr],[0]];Er.registerError(tne,wn);var nne=[-3,wr,dr,{[br]:yr},[Sr],[0]];Er.registerError(nne,zn);var rne=[-3,wr,fr,{[br]:yr},[Sr],[0]];Er.registerError(rne,Tn);var ine=[-3,wr,mr,{[br]:yr},[Sr],[0]];Er.registerError(ine,Bn);var ane=[-3,wr,hr,{[br]:yr},[Sr],[0]];Er.registerError(ane,En);var one=[-3,wr,fte,{[br]:yr},[Sr],[0]];Er.registerError(one,Ln);var sne=[-3,wr,Ste,{[br]:yr},[Sr],[0]];Er.registerError(sne,In);var cne=[-3,wr,Cte,{[br]:yr},[Sr],[0]];Er.registerError(cne,Fn);var lne=[-3,wr,wte,{[br]:yr},[Sr],[0]];Er.registerError(lne,Dn);var une=[-3,wr,kte,{[br]:yr},[Sr],[0]];Er.registerError(une,Pn);var dne=[-3,wr,Pte,{[br]:yr},[Sr],[0]];Er.registerError(dne,On);var fne=[-3,wr,jte,{[vr]:[`Throttling`,400],[br]:yr,[xr]:400},[Sr,Yte],[0,()=>Dne]];Er.registerError(fne,kn);var pne=[-3,wr,Nte,{[br]:yr},[Sr],[0]];Er.registerError(pne,An);var mne=[-3,wr,Bte,{[vr]:[`ValidationError`,400],[br]:yr,[xr]:400},[Sr],[0]];Er.registerError(mne,jn);var hne=[Tr,Er],gne=[0,wr,yte,8,21],_ne=[3,wr,Jn,0,[Un,Qn,Ete,rr,Tte,Ate,ste,cte,er,tr,gr,$n,xte,_te,gte,Hn,sr,ir,bte,mte,Kn],[0,0,64,2,0,0,0,64,64,0,2,2,0,4,4,4,4,4,4,0,0]],vne=[3,wr,nr,0,[Vte,Wte,Ute,Hte,Gte],[64,64,64,0,0]],yne=[3,wr,lr,0,[Zn,vte,Un,Wn,Lte],[21,[()=>gne,0],0,21,()=>Ene],2],bne=[3,wr,ur,0,[Un],[0]],xne=[3,wr,ute,0,[Xn,qn,ate,_r,hte,Dte,Ote],[64,64,()=>vne,0,1,0,0]],Sne=[3,wr,dte,0,[_r,Yn],[0,()=>Tne]],Cne=[3,wr,Rte,0,[ote,zte],[0,0],1],wne=[3,wr,Fte,0,[Kte,qte],[0,0]],Tne=[1,wr,Yn,0,()=>_ne],Ene=[1,wr,Mte,0,()=>Cne],Dne=[1,wr,Ite,0,()=>wne],One=[9,wr,cr,0,()=>yne,()=>bne],kne=[9,wr,lte,0,()=>xne,()=>Sne],Ane=e=>({apiVersion:`2015-12-08`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??xn,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??on,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Qt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.acm`,errorTypeRegistries:hne,version:`2015-12-08`,serviceTarget:`CertificateManager`},serviceId:e?.serviceId??`ACM`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),jne=e=>{let t=te(e),n=()=>t().then(Ae),r=Ane(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:un.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Mne=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Nne=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Pne=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),Mne(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),Nne(n))},Fne=class extends tt{config;constructor(...[t]){let n=jne(t||{});super(n),this.initConfig=n;let r=cn(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=Pne(sn(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:rte,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},Ine=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Lne(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function Rne(e){return{schemeId:`smithy.api#httpBearerAuth`,propertiesExtractor:({profile:e,filepath:t,configFilepath:n,ignoreCache:r},i)=>({identityProperties:{profile:e,filepath:t,configFilepath:n,ignoreCache:r}})}}var zne=e=>{let t=[];return e.operation,t.push(Lne(e)),t.push(Rne(e)),t},Bne=e=>{let t=De(e.token,ie,ke),n=ge(e);return Object.assign(n,{authSchemePreference:Ie(e.authSchemePreference??[]),token:t})},Vne=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Hne={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Une={name:`@aws-sdk/client-bedrock`,version:`3.1144.0`,description:`AWS SDK for JavaScript Bedrock Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/token-providers":`3.1144.0`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},Dr=`ref`,Or=-1,kr=!0,Ar=`isSet`,jr=`PartitionResult`,Mr=`booleanEquals`,Nr=`getAttr`,Pr={[Dr]:`Endpoint`},Fr={[Dr]:jr},Ir={},Lr=[{[Dr]:`Region`}],Rr={conditions:[[Ar,[Pr]],[Ar,Lr],[`aws.partition`,Lr,jr],[Mr,[{[Dr]:`UseFIPS`},kr]],[Mr,[{[Dr]:`UseDualStack`},kr]],[Mr,[{fn:Nr,argv:[Fr,`supportsDualStack`]},kr]],[Mr,[{fn:Nr,argv:[Fr,`supportsFIPS`]},kr]]],results:[[Or],[Or,`Invalid Configuration: FIPS and custom endpoint are not supported`],[Or,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Pr,Ir],[`https://bedrock-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,Ir],[Or,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-fips.{Region}.{PartitionResult#dnsSuffix}`,Ir],[Or,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock.{Region}.{PartitionResult#dualStackDnsSuffix}`,Ir],[Or,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock.{Region}.{PartitionResult#dnsSuffix}`,Ir],[Or,`Invalid Configuration: Missing Region`]]},Wne=2,Gne=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Kne=s.from(Gne,Wne,Rr.conditions,Rr.results),qne=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Jne=(e,t={})=>qne.get(e,()=>ze(Kne,{endpointParams:e,logger:t.logger}));lt.aws=de;var zr=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Yne=class e extends zr{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xne=class e extends zr{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zne=class e extends zr{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qne=class e extends zr{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$ne=class e extends zr{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ere=class e extends zr{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tre=class e extends zr{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nre=class e extends zr{name=`TooManyTagsException`;$fault=`client`;resourceName;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},rre=class e extends zr{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ire=class e extends zr{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},are=`AccessDeniedException`,ore=`ConflictException`,sre=`CreateGuardrail`,cre=`CreateGuardrailRequest`,lre=`CreateGuardrailResponse`,ure=`CreateGuardrailVersion`,dre=`CreateGuardrailVersionRequest`,fre=`CreateGuardrailVersionResponse`,pre=`DeleteGuardrail`,mre=`DeleteGuardrailRequest`,hre=`DeleteGuardrailResponse`,gre=`FoundationModelLifecycle`,_re=`FoundationModelSummary`,vre=`FoundationModelSummaryList`,yre=`GuardrailAutomatedReasoningPolicy`,bre=`GuardrailAutomatedReasoningPolicyConfig`,xre=`GuardrailBlockedMessaging`,Sre=`GuardrailContentFilter`,Cre=`GuardrailContentFilterAction`,wre=`GuardrailContentFilterConfig`,Tre=`GuardrailContentFiltersConfig`,Ere=`GuardrailContentFiltersTier`,Dre=`GuardrailContentFiltersTierConfig`,Ore=`GuardrailContentFiltersTierName`,kre=`GuardrailContentFilters`,Are=`GuardrailContextualGroundingAction`,jre=`GuardrailContextualGroundingFilter`,Mre=`GuardrailContextualGroundingFilterConfig`,Nre=`GuardrailContextualGroundingFiltersConfig`,Pre=`GuardrailContextualGroundingFilters`,Fre=`GuardrailContextualGroundingPolicy`,Ire=`GuardrailContextualGroundingPolicyConfig`,Lre=`GuardrailContentPolicy`,Rre=`GuardrailContentPolicyConfig`,zre=`GuardrailCrossRegionConfig`,Bre=`GuardrailCrossRegionDetails`,Vre=`GuardrailDescription`,Hre=`GuardrailFailureRecommendation`,Ure=`GuardrailFailureRecommendations`,Wre=`GetGuardrail`,Gre=`GetGuardrailRequest`,Kre=`GetGuardrailResponse`,qre=`GuardrailModality`,Jre=`GuardrailManagedWords`,Yre=`GuardrailManagedWordsConfig`,Xre=`GuardrailManagedWordLists`,Zre=`GuardrailManagedWordListsConfig`,Qre=`GuardrailModalities`,$re=`GuardrailName`,eie=`GuardrailPiiEntity`,tie=`GuardrailPiiEntityConfig`,nie=`GuardrailPiiEntitiesConfig`,rie=`GuardrailPiiEntities`,iie=`GuardrailRegex`,aie=`GuardrailRegexConfig`,oie=`GuardrailRegexesConfig`,sie=`GuardrailRegexes`,cie=`GuardrailSummary`,lie=`GuardrailSensitiveInformationPolicy`,uie=`GuardrailSensitiveInformationPolicyConfig`,die=`GuardrailStatusReason`,fie=`GuardrailStatusReasons`,pie=`GuardrailSummaries`,mie=`GuardrailTopic`,hie=`GuardrailTopicAction`,gie=`GuardrailTopicConfig`,_ie=`GuardrailTopicsConfig`,vie=`GuardrailTopicDefinition`,yie=`GuardrailTopicExample`,bie=`GuardrailTopicExamples`,xie=`GuardrailTopicName`,Sie=`GuardrailTopicPolicy`,Cie=`GuardrailTopicPolicyConfig`,wie=`GuardrailTopicsTier`,Tie=`GuardrailTopicsTierConfig`,Eie=`GuardrailTopicsTierName`,Die=`GuardrailTopics`,Oie=`GuardrailWord`,kie=`GuardrailWordAction`,Aie=`GuardrailWordConfig`,jie=`GuardrailWordsConfig`,Mie=`GuardrailWordPolicy`,Nie=`GuardrailWordPolicyConfig`,Pie=`GuardrailWords`,Fie=`InternalServerException`,Iie=`ListFoundationModels`,Lie=`ListFoundationModelsRequest`,Rie=`ListFoundationModelsResponse`,zie=`ListGuardrails`,Bie=`ListGuardrailsRequest`,Vie=`ListGuardrailsResponse`,Hie=`ResourceInUseException`,Uie=`ResourceNotFoundException`,Wie=`ServiceQuotaExceededException`,Gie=`ServiceUnavailableException`,Kie=`Tag`,qie=`ThrottlingException`,Jie=`TagList`,Yie=`TooManyTagsException`,Xie=`UpdateGuardrail`,Zie=`UpdateGuardrailRequest`,Qie=`UpdateGuardrailResponse`,$ie=`ValidationException`,eae=`automatedReasoningPolicy`,Br=`automatedReasoningPolicyConfig`,Vr=`action`,tae=`arn`,Hr=`byCustomizationType`,Ur=`blockedInputMessaging`,Wr=`byInferenceType`,Gr=`blockedOutputsMessaging`,Kr=`byOutputModality`,qr=`byProvider`,Jr=`client`,Yr=`createdAt`,nae=`contextualGroundingPolicy`,Xr=`contextualGroundingPolicyConfig`,rae=`contentPolicy`,Zr=`contentPolicyConfig`,Qr=`crossRegionConfig`,$r=`crossRegionDetails`,ei=`clientRequestToken`,iae=`customizationsSupported`,ti=`confidenceThreshold`,ni=`description`,ri=`definition`,ii=`error`,aae=`endOfLifeTime`,ai=`enabled`,oi=`examples`,si=`filtersConfig`,oae=`failureRecommendations`,ci=`filters`,sae=`guardrails`,li=`guardrailArn`,ui=`guardrailIdentifier`,di=`guardrailId`,cae=`guardrailProfileArn`,lae=`guardrailProfileIdentifier`,uae=`guardrailProfileId`,fi=`guardrailVersion`,pi=`httpError`,mi=`httpQuery`,hi=`http`,dae=`id`,gi=`inputAction`,_i=`inputEnabled`,vi=`inputModalities`,yi=`inputStrength`,fae=`inferenceTypesSupported`,pae=`key`,mae=`kmsKeyArn`,bi=`kmsKeyId`,hae=`legacyTime`,xi=`message`,Si=`modelArn`,Ci=`modelId`,wi=`modelLifecycle`,Ti=`modelName`,Ei=`maxResults`,Di=`modelSummaries`,Oi=`managedWordLists`,ki=`managedWordListsConfig`,Ai=`name`,ji=`nextToken`,Mi=`outputAction`,Ni=`outputEnabled`,Pi=`outputModalities`,Fi=`outputStrength`,Ii=`publicExtendedAccessTime`,Li=`piiEntitiesConfig`,Ri=`piiEntities`,zi=`providerName`,Bi=`pattern`,Vi=`policies`,Hi=`regexesConfig`,Ui=`resourceName`,Wi=`responseStreamingSupported`,Gi=`regexes`,Ki=`smithy.ts.sdk.synthetic.com.amazonaws.bedrock`,qi=`sensitiveInformationPolicy`,Ji=`sensitiveInformationPolicyConfig`,Yi=`startOfLifeTime`,Xi=`statusReasons`,Zi=`server`,Qi=`status`,$i=`tierConfig`,ea=`topicsConfig`,ta=`tierName`,na=`topicPolicy`,ra=`topicPolicyConfig`,ia=`tags`,aa=`text`,oa=`threshold`,sa=`tier`,ca=`topics`,la=`type`,ua=`updatedAt`,da=`value`,fa=`version`,pa=`words`,ma=`wordsConfig`,ha=`wordPolicy`,ga=`wordPolicyConfig`,f=`com.amazonaws.bedrock`,_a=new mt(Ki),va=[-3,Ki,`BedrockServiceException`,0,[],[]];_a.registerError(va,zr);var ya=new mt(f),ba=[-3,f,are,{[ii]:Jr,[pi]:403},[xi],[0]];ya.registerError(ba,Yne);var xa=[-3,f,ore,{[ii]:Jr,[pi]:400},[xi],[0]];ya.registerError(xa,$ne);var Sa=[-3,f,Fie,{[ii]:Zi,[pi]:500},[xi],[0]];ya.registerError(Sa,Xne);var Ca=[-3,f,Hie,{[ii]:Jr,[pi]:400},[xi],[0]];ya.registerError(Ca,rre);var wa=[-3,f,Uie,{[ii]:Jr,[pi]:404},[xi],[0]];ya.registerError(wa,ere);var Ta=[-3,f,Wie,{[ii]:Jr,[pi]:400},[xi],[0]];ya.registerError(Ta,tre);var Ea=[-3,f,Gie,{[ii]:Zi,[pi]:503},[xi],[0]];ya.registerError(Ea,ire);var Da=[-3,f,qie,{[ii]:Jr,[pi]:429},[xi],[0]];ya.registerError(Da,Zne);var Oa=[-3,f,Yie,{[ii]:Jr,[pi]:400},[xi,Ui],[0,0]];ya.registerError(Oa,nre);var ka=[-3,f,$ie,{[ii]:Jr,[pi]:400},[xi],[0]];ya.registerError(ka,Qne);var Aa=[_a,ya],ja=[0,f,xre,8,0],Ma=[0,f,Cre,8,0],Na=[0,f,Ore,8,0],Pa=[0,f,Are,8,0],Fa=[0,f,Vre,8,0],Ia=[0,f,Hre,8,0],La=[0,f,qre,8,0],Ra=[0,f,$re,8,0],za=[0,f,die,8,0],Ba=[0,f,hie,8,0],Va=[0,f,vie,8,0],Ha=[0,f,yie,8,0],Ua=[0,f,xie,8,0],Wa=[0,f,Eie,8,0],Ga=[0,f,kie,8,0],Ka=[3,f,cre,0,[Ai,Ur,Gr,ni,ra,Zr,ga,Ji,Xr,Br,Qr,bi,ia,ei],[[()=>Ra,0],[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>ko,0],[()=>lo,0],[()=>Fo,0],()=>wo,[()=>mo,0],()=>ro,()=>ho,0,()=>ls,[0,4]],3],qa=[3,f,lre,0,[di,li,fa,Yr],[0,0,0,5],4],Ja=[3,f,dre,0,[ui,ni,ei],[[0,1],[()=>Fa,0],[0,4]],1],Ya=[3,f,fre,0,[di,fa],[0,0],2],Xa=[3,f,mre,0,[ui,fi],[[0,1],[0,{[mi]:fi}]],1],Za=[3,f,hre,0,[],[]],Qa=[3,f,gre,0,[Qi,Yi,aae,hae,Ii],[0,5,5,5,5],1],$a=[3,f,_re,0,[Si,Ci,Ti,zi,vi,Pi,Wi,iae,fae,wi],[0,0,0,0,64,64,2,64,64,()=>Qa],2],eo=[3,f,Gre,0,[ui,fi],[[0,1],[0,{[mi]:fi}]],1],to=[3,f,Kre,0,[Ai,di,li,fa,Qi,Yr,ua,Ur,Gr,ni,na,rae,ha,qi,nae,eae,$r,Xi,oae,mae],[[()=>Ra,0],0,0,0,0,5,5,[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>Oo,0],[()=>co,0],[()=>Po,0],()=>Co,[()=>po,0],()=>no,()=>go,[()=>ns,0],[()=>Jo,0],0],9],no=[3,f,yre,0,[Vi,ti],[64,1],1],ro=[3,f,bre,0,[Vi,ti],[64,1],1],io=[3,f,Sre,0,[la,yi,Fi,vi,Pi,gi,Mi,_i,Ni],[0,0,0,[()=>Zo,0],[()=>Zo,0],[()=>Ma,0],[()=>Ma,0],2,2],3],ao=[3,f,wre,0,[la,yi,Fi,vi,Pi,gi,Mi,_i,Ni],[0,0,0,[()=>Zo,0],[()=>Zo,0],[()=>Ma,0],[()=>Ma,0],2,2],3],oo=[3,f,Ere,0,[ta],[[()=>Na,0]],1],so=[3,f,Dre,0,[ta],[[()=>Na,0]],1],co=[3,f,Lre,0,[ci,sa],[[()=>Wo,0],[()=>oo,0]]],lo=[3,f,Rre,0,[si,$i],[[()=>Go,0],[()=>so,0]],1],uo=[3,f,jre,0,[la,oa,Vr,ai],[0,1,[()=>Pa,0],2],2],fo=[3,f,Mre,0,[la,oa,Vr,ai],[0,1,[()=>Pa,0],2],2],po=[3,f,Fre,0,[ci],[[()=>Ko,0]],1],mo=[3,f,Ire,0,[si],[[()=>qo,0]],1],ho=[3,f,zre,0,[lae],[0],1],go=[3,f,Bre,0,[uae,cae],[0,0]],_o=[3,f,Jre,0,[la,gi,Mi,_i,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],vo=[3,f,Yre,0,[la,gi,Mi,_i,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],yo=[3,f,eie,0,[la,Vr,gi,Mi,_i,Ni],[0,0,0,0,2,2],2],bo=[3,f,tie,0,[la,Vr,gi,Mi,_i,Ni],[0,0,0,0,2,2],2],xo=[3,f,iie,0,[Ai,Bi,Vr,ni,gi,Mi,_i,Ni],[0,0,0,0,0,0,2,2],3],So=[3,f,aie,0,[Ai,Bi,Vr,ni,gi,Mi,_i,Ni],[0,0,0,0,0,0,2,2],3],Co=[3,f,lie,0,[Ri,Gi],[()=>Qo,()=>es]],wo=[3,f,uie,0,[Li,Hi],[()=>$o,()=>ts]],To=[3,f,cie,0,[dae,tae,Qi,Ai,fa,Yr,ua,ni,$r],[0,0,0,[()=>Ra,0],0,5,5,[()=>Fa,0],()=>go],7],Eo=[3,f,mie,0,[Ai,ri,oi,la,gi,Mi,_i,Ni],[[()=>Ua,0],[()=>Va,0],[()=>is,0],0,[()=>Ba,0],[()=>Ba,0],2,2],2],Do=[3,f,gie,0,[Ai,ri,la,oi,gi,Mi,_i,Ni],[[()=>Ua,0],[()=>Va,0],0,[()=>is,0],[()=>Ba,0],[()=>Ba,0],2,2],3],Oo=[3,f,Sie,0,[ca,sa],[[()=>as,0],[()=>Ao,0]],1],ko=[3,f,Cie,0,[ea,$i],[[()=>os,0],[()=>jo,0]],1],Ao=[3,f,wie,0,[ta],[[()=>Wa,0]],1],jo=[3,f,Tie,0,[ta],[[()=>Wa,0]],1],Mo=[3,f,Oie,0,[aa,gi,Mi,_i,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],No=[3,f,Aie,0,[aa,gi,Mi,_i,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],Po=[3,f,Mie,0,[pa,Oi],[[()=>ss,0],[()=>Yo,0]]],Fo=[3,f,Nie,0,[ma,ki],[[()=>cs,0],[()=>Xo,0]]],Io=[3,f,Lie,0,[qr,Hr,Kr,Wr],[[0,{[mi]:qr}],[0,{[mi]:Hr}],[0,{[mi]:Kr}],[0,{[mi]:Wr}]]],Lo=[3,f,Rie,0,[Di],[()=>Uo]],Ro=[3,f,Bie,0,[ui,Ei,ji],[[0,{[mi]:ui}],[1,{[mi]:Ei}],[0,{[mi]:ji}]]],zo=[3,f,Vie,0,[sae,ji],[[()=>rs,0],0],1],Bo=[3,f,Kie,0,[pae,da],[0,0],2],Vo=[3,f,Zie,0,[ui,Ai,Ur,Gr,ni,ra,Zr,ga,Ji,Xr,Br,Qr,bi],[[0,1],[()=>Ra,0],[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>ko,0],[()=>lo,0],[()=>Fo,0],()=>wo,[()=>mo,0],()=>ro,()=>ho,0],4],Ho=[3,f,Qie,0,[di,li,fa,ua],[0,0,0,5],4],Uo=[1,f,vre,0,()=>$a],Wo=[1,f,kre,0,[()=>io,0]],Go=[1,f,Tre,0,[()=>ao,0]],Ko=[1,f,Pre,0,[()=>uo,0]],qo=[1,f,Nre,0,[()=>fo,0]],Jo=[1,f,Ure,0,[()=>Ia,0]],Yo=[1,f,Xre,0,[()=>_o,0]],Xo=[1,f,Zre,0,[()=>vo,0]],Zo=[1,f,Qre,0,[()=>La,0]],Qo=[1,f,rie,0,()=>yo],$o=[1,f,nie,0,()=>bo],es=[1,f,sie,0,()=>xo],ts=[1,f,oie,0,()=>So],ns=[1,f,fie,0,[()=>za,0]],rs=[1,f,pie,0,[()=>To,0]],is=[1,f,bie,0,[()=>Ha,0]],as=[1,f,Die,0,[()=>Eo,0]],os=[1,f,_ie,0,[()=>Do,0]],ss=[1,f,Pie,0,[()=>Mo,0]],cs=[1,f,jie,0,[()=>No,0]],ls=[1,f,Jie,0,()=>Bo],us=[9,f,sre,{[hi]:[`POST`,`/guardrails`,202]},()=>Ka,()=>qa],ds=[9,f,ure,{[hi]:[`POST`,`/guardrails/{guardrailIdentifier}`,202]},()=>Ja,()=>Ya],fs=[9,f,pre,{[hi]:[`DELETE`,`/guardrails/{guardrailIdentifier}`,202]},()=>Xa,()=>Za],ps=[9,f,Wre,{[hi]:[`GET`,`/guardrails/{guardrailIdentifier}`,200]},()=>eo,()=>to],ms=[9,f,Iie,{[hi]:[`GET`,`/foundation-models`,200]},()=>Io,()=>Lo],hs=[9,f,zie,{[hi]:[`GET`,`/guardrails`,200]},()=>Ro,()=>zo],gs=[9,f,Xie,{[hi]:[`PUT`,`/guardrails/{guardrailIdentifier}`,202]},()=>Vo,()=>Ho],_s=e=>({apiVersion:`2023-04-20`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Jne,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??zne,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe},{schemeId:`smithy.api#httpBearerAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#httpBearerAuth`),signer:new Ot}],logger:e?.logger??new Ce,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrock`,errorTypeRegistries:Aa,version:`2023-04-20`,serviceTarget:`AmazonBedrockControlPlaneService`},serviceId:e?.serviceId??`Bedrock`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),vs=e=>{let t=te(e),n=()=>t().then(Ae),r=_s(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:Une.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},ys=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials,i=e.token;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r},setToken(e){i=e},token(){return i}}},bs=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials(),token:e.token()}),xs=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),ys(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),bs(n))},Ss=class extends tt{config;constructor(...[t]){let n=vs(t||{});super(n),this.initConfig=n;let r=Vne(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=xs(Bne(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:Ine,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials,"smithy.api#httpBearerAuth":e.token})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},Cs=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function ws(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var Ts=e=>{let t=[];return e.operation,t.push(ws(e)),t},Es=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},Ds=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Os={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},ks={name:`@aws-sdk/client-bedrock-agent`,version:`3.1144.0`,description:`AWS SDK for JavaScript Bedrock Agent Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-agent`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-agent`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},As=`ref`,js=-1,Ms=!0,Ns=`isSet`,Ps=`PartitionResult`,Fs=`booleanEquals`,Is=`getAttr`,Ls={[As]:`Endpoint`},Rs={[As]:Ps},zs={},Bs=[{[As]:`Region`}],Vs={conditions:[[Ns,[Ls]],[Ns,Bs],[`aws.partition`,Bs,Ps],[Fs,[{[As]:`UseFIPS`},Ms]],[Fs,[{[As]:`UseDualStack`},Ms]],[Fs,[{fn:Is,argv:[Rs,`supportsDualStack`]},Ms]],[Fs,[{fn:Is,argv:[Rs,`supportsFIPS`]},Ms]]],results:[[js],[js,`Invalid Configuration: FIPS and custom endpoint are not supported`],[js,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Ls,zs],[`https://bedrock-agent-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,zs],[js,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-agent-fips.{Region}.{PartitionResult#dnsSuffix}`,zs],[js,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-agent.{Region}.{PartitionResult#dualStackDnsSuffix}`,zs],[js,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-agent.{Region}.{PartitionResult#dnsSuffix}`,zs],[js,`Invalid Configuration: Missing Region`]]},Hs=2,Us=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Ws=s.from(Us,Hs,Vs.conditions,Vs.results),Gs=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Ks=(e,t={})=>Gs.get(e,()=>ze(Ws,{endpointParams:e,logger:t.logger}));lt.aws=de;var qs=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Js=class e extends qs{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ys=class e extends qs{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xs=class e extends qs{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zs=class e extends qs{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qs=class e extends qs{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$s=class e extends qs{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ec=class e extends qs{name=`ValidationException`;$fault=`client`;fieldList;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.fieldList=t.fieldList}},tc=`AudioConfiguration`,nc=`AudioConfigurations`,rc=`AccessDeniedException`,ic=`AudioExtractionConfiguration`,ac=`AudioSegmentationConfiguration`,oc=`BedrockDataAutomationConfiguration`,sc=`BedrockEmbeddingModelConfiguration`,cc=`BedrockFoundationModelConfiguration`,lc=`BedrockFoundationModelContextEnrichmentConfiguration`,uc=`ChunkingConfiguration`,dc=`ConfluenceCrawlerConfiguration`,fc=`CreateDataSource`,pc=`ConfluenceDataSourceConfiguration`,mc=`CreateDataSourceRequest`,hc=`CreateDataSourceResponse`,gc=`ConflictException`,_c=`ContextEnrichmentConfiguration`,vc=`CrawlFilterConfiguration`,yc=`CreateKnowledgeBase`,bc=`CreateKnowledgeBaseRequest`,xc=`CreateKnowledgeBaseResponse`,Sc=`CuratedQuery`,Cc=`CuratedQueries`,wc=`ConfluenceSourceConfiguration`,Tc=`CustomTransformationConfiguration`,Ec=`DeleteDataSource`,Dc=`DeleteDataSourceRequest`,Oc=`DeleteDataSourceResponse`,kc=`DeleteKnowledgeBase`,Ac=`DeleteKnowledgeBaseRequest`,jc=`DeleteKnowledgeBaseResponse`,Mc=`DayOfMonth`,Nc=`DeletionProtectionConfiguration`,Pc=`DailySchedule`,Fc=`DataSourceConfiguration`,Ic=`DataSourceSummary`,Lc=`DataSourceSummaries`,Rc=`DataSource`,zc=`EmbeddingModelConfiguration`,Bc=`EnrichmentStrategyConfiguration`,Vc=`FilterList`,Hc=`FilteredObjectType`,Uc=`FilterPattern`,Wc=`FixedSizeChunkingConfiguration`,Gc=`GraphArn`,Kc=`GetKnowledgeBase`,qc=`GetKnowledgeBaseRequest`,Jc=`GetKnowledgeBaseResponse`,Yc=`HierarchicalChunkingConfiguration`,Xc=`HierarchicalChunkingLevelConfiguration`,Zc=`HierarchicalChunkingLevelConfigurations`,Qc=`IndexArn`,$c=`ImageExtractionConfiguration`,el=`IngestionJobFilter`,tl=`IngestionJobFilters`,nl=`IngestionJobStatistics`,rl=`IngestionJobSortBy`,il=`IngestionJobSummary`,al=`IngestionJobSummaries`,ol=`IndexName`,sl=`IntermediateStorage`,cl=`InternalServerException`,ll=`KnowledgeBase`,ul=`KnowledgeBaseConfiguration`,dl=`KnowledgeBaseSummary`,fl=`KnowledgeBaseSummaries`,pl=`KendraKnowledgeBaseConfiguration`,ml=`LastDayOfMonth`,hl=`ListDataSources`,gl=`ListDataSourcesRequest`,_l=`ListDataSourcesResponse`,vl=`ListIngestionJobs`,yl=`ListIngestionJobsRequest`,bl=`ListIngestionJobsResponse`,xl=`ListKnowledgeBases`,Sl=`ListKnowledgeBasesRequest`,Cl=`ListKnowledgeBasesResponse`,wl=`MongoDbAtlasConfiguration`,Tl=`MongoDbAtlasFieldMapping`,El=`MediaExtractionConfiguration`,Dl=`ManagedKnowledgeBaseConfiguration`,Ol=`ManagedKnowledgeBaseConnectorConfiguration`,kl=`MonthlySchedule`,Al=`NeptuneAnalyticsConfiguration`,jl=`NeptuneAnalyticsFieldMapping`,Ml=`OpenSearchManagedClusterConfiguration`,Nl=`OpenSearchManagedClusterFieldMapping`,Pl=`OpenSearchManagedClusterIndexName`,Fl=`OpenSearchServerlessConfiguration`,Il=`OpenSearchServerlessFieldMapping`,Ll=`ParsingConfiguration`,Rl=`PineconeConfiguration`,zl=`PineconeFieldMapping`,Bl=`PatternObjectFilter`,Vl=`PatternObjectFilterConfiguration`,Hl=`PatternObjectFilterList`,Ul=`ParsingPrompt`,Wl=`QueryGenerationColumn`,Gl=`QueryGenerationConfiguration`,Kl=`QueryGenerationContext`,ql=`QueryGenerationColumns`,Jl=`QueryGenerationTable`,Yl=`QueryGenerationTables`,Xl=`RdsConfiguration`,Zl=`RedshiftConfiguration`,Ql=`RedisEnterpriseCloudConfiguration`,$l=`RedisEnterpriseCloudFieldMapping`,eu=`RdsFieldMapping`,tu=`ResourceNotFoundException`,nu=`RedshiftProvisionedAuthConfiguration`,ru=`RedshiftProvisionedConfiguration`,iu=`RedshiftQueryEngineAwsDataCatalogStorageConfiguration`,au=`RedshiftQueryEngineConfiguration`,ou=`RedshiftQueryEngineRedshiftStorageConfiguration`,su=`RedshiftQueryEngineStorageConfiguration`,cu=`RedshiftQueryEngineStorageConfigurations`,lu=`RedshiftServerlessAuthConfiguration`,uu=`RedshiftServerlessConfiguration`,du=`SalesforceCrawlerConfiguration`,fu=`SemanticChunkingConfiguration`,pu=`StorageConfiguration`,mu=`S3DataSourceConfiguration`,hu=`SalesforceDataSourceConfiguration`,gu=`SupplementalDataStorageConfiguration`,_u=`SupplementalDataStorageLocation`,vu=`SupplementalDataStorageLocations`,yu=`SqlKnowledgeBaseConfiguration`,bu=`S3Location`,xu=`S3Prefix`,Su=`SharePointCrawlerConfiguration`,Cu=`SharePointDataSourceConfiguration`,wu=`SharePointSourceConfiguration`,Tu=`S3Prefixes`,Eu=`ServiceQuotaExceededException`,Du=`SyncSchedule`,Ou=`SalesforceSourceConfiguration`,ku=`ServerSideEncryptionConfiguration`,Au=`SeedUrl`,ju=`SeedUrls`,Mu=`S3VectorsConfiguration`,Nu=`Transformation`,Pu=`ThrottlingException`,Fu=`TransformationFunction`,Iu=`TransformationLambdaConfiguration`,Lu=`Transformations`,Ru=`UserAgent`,zu=`UserAgentHeader`,Bu=`UrlConfiguration`,Vu=`VectorBucketArn`,Hu=`VideoConfiguration`,Uu=`VideoConfigurations`,Wu=`ValidationException`,Gu=`VideoExtractionConfiguration`,Ku=`ValidationExceptionField`,qu=`ValidationExceptionFieldList`,Ju=`VectorIngestionConfiguration`,Yu=`VectorKnowledgeBaseConfiguration`,Xu=`VideoSegmentationConfiguration`,Zu=`WebCrawlerConfiguration`,Qu=`WebCrawlerLimits`,$u=`WebDataSourceConfiguration`,ed=`WeeklySchedule`,td=`WebSourceConfiguration`,nd=`authConfiguration`,rd=`awsDataCatalogConfiguration`,id=`audioExtractionConfiguration`,ad=`audioExtractionStatus`,od=`authType`,sd=`attribute`,cd=`audio`,ld=`bucketArn`,ud=`bedrockDataAutomationConfiguration`,dd=`bedrockEmbeddingModelConfiguration`,fd=`bedrockFoundationModelConfiguration`,pd=`bucketOwnerAccountId`,md=`breakpointPercentileThreshold`,hd=`bufferSize`,gd=`client`,_d=`createdAt`,gae=`collectionArn`,vd=`crawlerConfiguration`,_ae=`chunkingConfiguration`,vae=`confluenceConfiguration`,yae=`contextEnrichmentConfiguration`,bae=`clusterIdentifier`,xae=`crawlerLimits`,Sae=`customMetadataField`,Cae=`collectionName`,wae=`connectorParameters`,Tae=`curatedQueries`,Eae=`chunkingStrategy`,yd=`credentialsSecretArn`,Dae=`connectionString`,bd=`clientToken`,Oae=`customTransformationConfiguration`,kae=`columns`,xd=`description`,Aae=`domainArn`,Sd=`dataDeletionPolicy`,jae=`domainEndpoint`,Cd=`databaseName`,Mae=`dayNumber`,Nae=`dayOfMonth`,Pae=`dayOfWeek`,Fae=`deletionProtectionConfiguration`,Iae=`deletionProtectionStatus`,Lae=`deletionProtectionThreshold`,Rae=`dataSource`,wd=`dataSourceConfiguration`,Td=`dataSourceId`,zae=`dataSourceSummaries`,Bae=`databaseUser`,Vae=`daily`,Hae=`dimensions`,Uae=`domain`,Ed=`error`,Wae=`embeddingDataType`,Dd=`exclusionFilters`,Od=`embeddingModelArn`,kd=`embeddingModelConfiguration`,Gae=`embeddingModelType`,Kae=`enrichmentStrategyConfiguration`,qae=`endpointServiceName`,Jae=`executionTimeoutSeconds`,Ad=`endpoint`,jd=`filters`,Md=`filterConfiguration`,Yae=`fieldList`,Nd=`fixedLengthDuration`,Pd=`fieldMapping`,Fd=`failureReasons`,Xae=`fixedSizeChunkingConfiguration`,Zae=`graphArn`,Qae=`generationContext`,Id=`http`,$ae=`hierarchicalChunkingConfiguration`,Ld=`httpError`,Rd=`hostType`,zd=`hostUrl`,eoe=`indexArn`,toe=`imageExtractionConfiguration`,noe=`imageExtractionStatus`,Bd=`inclusionFilters`,roe=`ingestionJobId`,ioe=`ingestionJobSummaries`,aoe=`indexName`,ooe=`inclusionPrefixes`,soe=`intermediateStorage`,Vd=`inclusion`,Hd=`knowledgeBase`,coe=`knowledgeBaseArn`,Ud=`knowledgeBaseConfiguration`,Wd=`knowledgeBaseId`,loe=`knowledgeBaseSummaries`,uoe=`kendraIndexArn`,doe=`kmsKeyArn`,foe=`kendraKnowledgeBaseConfiguration`,poe=`lambdaArn`,moe=`levelConfigurations`,hoe=`lastDayOfMonth`,Gd=`message`,Kd=`modelArn`,goe=`modelConfiguration`,_oe=`mongoDbAtlasConfiguration`,voe=`mediaExtractionConfiguration`,qd=`metadataField`,yoe=`managedKnowledgeBaseConfiguration`,boe=`managedKnowledgeBaseConnectorConfiguration`,xoe=`maxPages`,Jd=`maxResults`,Yd=`maxTokens`,Soe=`method`,Coe=`monthly`,Xd=`name`,woe=`neptuneAnalyticsConfiguration`,Toe=`naturalLanguage`,Eoe=`numberOfDocumentsDeleted`,Doe=`numberOfDocumentsFailed`,Ooe=`numberOfDocumentsScanned`,koe=`numberOfDocumentsSkipped`,Aoe=`numberOfModifiedDocumentsIndexed`,joe=`numberOfMetadataDocumentsModified`,Moe=`numberOfMetadataDocumentsScanned`,Noe=`numberOfNewDocumentsIndexed`,Zd=`nextToken`,Poe=`namespace`,Foe=`opensearchManagedClusterConfiguration`,Ioe=`overlapPercentage`,Loe=`opensearchServerlessConfiguration`,Roe=`objectType`,zoe=`overlapTokens`,Boe=`operator`,Voe=`order`,Hoe=`parsingConfiguration`,Uoe=`pineconeConfiguration`,Woe=`provisionedConfiguration`,Goe=`primaryKeyField`,Qd=`parsingModality`,Koe=`patternObjectFilter`,qoe=`parsingPrompt`,Joe=`parsingPromptText`,Yoe=`parsingStrategy`,Xoe=`queryEngineConfiguration`,Zoe=`queryGenerationConfiguration`,Qoe=`resourceArn`,$d=`roleArn`,$oe=`rdsConfiguration`,ef=`redshiftConfiguration`,ese=`redisEnterpriseCloudConfiguration`,tse=`rateLimit`,tf=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockagent`,nse=`startedAt`,rse=`sortBy`,nf=`segmentationConfiguration`,ise=`semanticChunkingConfiguration`,ase=`salesforceConfiguration`,ose=`serverlessConfiguration`,rf=`sourceConfiguration`,sse=`s3Configuration`,af=`storageConfiguration`,cse=`storageConfigurations`,of=`supplementalDataStorageConfiguration`,lse=`sqlKnowledgeBaseConfiguration`,sf=`s3Location`,use=`storageLocations`,dse=`sharePointConfiguration`,cf=`serverSideEncryptionConfiguration`,fse=`syncSchedule`,pse=`stepToApply`,mse=`siteUrls`,hse=`seedUrls`,gse=`s3VectorsConfiguration`,_se=`scope`,vse=`server`,yse=`sql`,lf=`status`,bse=`statistics`,uf=`type`,df=`textField`,xse=`transformationFunction`,Sse=`textIndexName`,Cse=`tenantId`,wse=`transformationLambdaConfiguration`,Tse=`tableName`,Ese=`tableNames`,Dse=`tags`,Ose=`tables`,kse=`transformations`,Ase=`uri`,ff=`updatedAt`,jse=`userAgentHeader`,Mse=`userAgent`,Nse=`urlConfiguration`,pf=`usernamePasswordSecretArn`,Pse=`url`,Fse=`vectorBucketArn`,Ise=`videoExtractionConfiguration`,Lse=`videoExtractionStatus`,mf=`vectorField`,hf=`vectorIngestionConfiguration`,gf=`vectorIndexName`,Rse=`vectorKnowledgeBaseConfiguration`,zse=`values`,Bse=`video`,Vse=`weekly`,Hse=`workgroupArn`,Use=`webConfiguration`,p=`com.amazonaws.bedrockagent`,_f=new mt(tf),Wse=[-3,tf,`BedrockAgentServiceException`,0,[],[]];_f.registerError(Wse,qs);var vf=new mt(p),Gse=[-3,p,rc,{[Ed]:gd,[Ld]:403},[Gd],[0]];vf.registerError(Gse,Js);var Kse=[-3,p,gc,{[Ed]:gd,[Ld]:409},[Gd],[0]];vf.registerError(Kse,Ys);var qse=[-3,p,cl,{[Ed]:vse,[Ld]:500},[Gd],[0]];vf.registerError(qse,Xs);var Jse=[-3,p,tu,{[Ed]:gd,[Ld]:404},[Gd],[0]];vf.registerError(Jse,Zs);var Yse=[-3,p,Eu,{[Ed]:gd,[Ld]:402},[Gd],[0]];vf.registerError(Yse,Qs);var Xse=[-3,p,Pu,{[Ed]:gd,[Ld]:429},[Gd],[0]];vf.registerError(Xse,$s);var Zse=[-3,p,Wu,{[Ed]:gd,[Ld]:400},[Gd,Yae],[0,()=>wue]];vf.registerError(Zse,ec);var Qse=[_f,vf],$se=[0,p,Hc,8,0],ece=[0,p,Uc,8,0],tce=[0,p,Gc,8,0],nce=[0,p,Qc,8,0],rce=[0,p,ol,8,0],ice=[0,p,Pl,8,0],ace=[0,p,xu,8,0],oce=[0,p,Ru,8,0],sce=[0,p,zu,8,0],cce=[0,p,Vu,8,0],lce=[3,p,tc,0,[nf],[()=>dce],1],uce=[3,p,ic,0,[ad],[0],1],dce=[3,p,ac,0,[Nd],[1],1],fce=[3,p,oc,0,[Qd],[0]],pce=[3,p,sc,0,[Hae,Wae,cd,Bse,goe],[1,0,()=>lue,()=>Tue,15]],mce=[3,p,cc,0,[Kd,qoe,Qd],[0,()=>hle,0],1],hce=[3,p,lc,0,[Kae,Kd],[()=>Fce,0],2],gce=[3,p,uc,0,[Eae,Xae,$ae,ise],[0,()=>Ice,()=>zce,()=>Ule],1],_ce=[3,p,dc,0,[Md],[[()=>yf,0]]],vce=[3,p,pc,0,[rf,vd],[()=>yce,[()=>_ce,0]],1],yce=[3,p,wc,0,[zd,Rd,od,yd],[0,0,0,0],4],bce=[3,p,_c,0,[uf,fd],[0,()=>hce],1],yf=[3,p,vc,0,[uf,Koe],[0,[()=>_le,0]],1],xce=[3,p,mc,0,[Wd,Xd,wd,bd,xd,Sd,cf,hf],[[0,1],0,[()=>bf,0],[0,4],0,0,()=>Tf,()=>Of],3],Sce=[3,p,hc,0,[Rae],[[()=>Oce,0]],1],Cce=[3,p,bc,0,[Xd,$d,Ud,bd,xd,af,Dse],[0,0,[()=>Cf,0],[0,4],0,[()=>Ef,0],128],3],wce=[3,p,xc,0,[Hd],[[()=>Sf,0]],1],Tce=[3,p,Sc,0,[Toe,yse],[0,0],2],Ece=[3,p,Tc,0,[soe,kse],[()=>Kce,()=>Cue],2],Dce=[3,p,Pc,0,[],[]],Oce=[3,p,Rc,0,[Wd,Td,Xd,lf,wd,_d,ff,xd,cf,hf,Sd,Fd],[0,0,0,0,[()=>bf,0],5,5,0,()=>Tf,()=>Of,0,64],7],bf=[3,p,Fc,0,[uf,boe,sse,Use,vae,ase,dse],[0,()=>rle,[()=>Lle,0],[()=>oue,0],[()=>vce,0],[()=>Ble,0],[()=>Gle,0]],1],kce=[3,p,Ic,0,[Wd,Td,Xd,lf,ff,xd],[0,0,0,0,5,0],5],Ace=[3,p,Dc,0,[Wd,Td],[[0,1],[0,1]],2],jce=[3,p,Oc,0,[Wd,Td,lf],[0,0,0],3],Mce=[3,p,Ac,0,[Wd],[[0,1]],1],Nce=[3,p,jc,0,[Wd,lf],[0,0],2],Pce=[3,p,Nc,0,[Iae,Lae],[0,1],1],xf=[3,p,zc,0,[dd],[()=>pce]],Fce=[3,p,Bc,0,[Soe],[0],1],Ice=[3,p,Wc,0,[Yd,Ioe],[1,1],2],Lce=[3,p,qc,0,[Wd],[[0,1]],1],Rce=[3,p,Jc,0,[Hd],[[()=>Sf,0]],1],zce=[3,p,Yc,0,[moe,zoe],[()=>fue,1],2],Bce=[3,p,Xc,0,[Yd],[1],1],Vce=[3,p,$c,0,[noe],[0],1],Hce=[3,p,el,0,[sd,Boe,zse],[0,0,64],3],Uce=[3,p,rl,0,[sd,Voe],[0,0],2],Wce=[3,p,nl,0,[Ooe,Moe,Noe,Aoe,joe,Eoe,Doe,koe],[1,1,1,1,1,1,1,1]],Gce=[3,p,il,0,[Wd,Td,roe,lf,nse,ff,xd,bse],[0,0,0,0,5,5,0,()=>Wce],6],Kce=[3,p,sl,0,[sf],[()=>wf],1],qce=[3,p,pl,0,[uoe],[0],1],Sf=[3,p,ll,0,[Wd,Xd,coe,$d,Ud,lf,_d,ff,xd,af,Fd],[0,0,0,0,[()=>Cf,0],0,5,5,0,[()=>Ef,0],64],8],Cf=[3,p,ul,0,[uf,Rse,yoe,foe,lse],[0,()=>eue,()=>nle,()=>qce,[()=>qle,0]],1],Jce=[3,p,dl,0,[Wd,Xd,lf,ff,xd],[0,0,0,5,0],4],Yce=[3,p,ml,0,[],[]],Xce=[3,p,gl,0,[Wd,Jd,Zd],[[0,1],1,0],1],Zce=[3,p,_l,0,[zae,Zd],[()=>due,0],1],Qce=[3,p,yl,0,[Wd,Td,jd,rse,Jd,Zd],[[0,1],[0,1],()=>pue,()=>Uce,1,0],2],$ce=[3,p,bl,0,[ioe,Zd],[()=>mue,0],1],ele=[3,p,Sl,0,[Jd,Zd],[1,0]],tle=[3,p,Cl,0,[loe,Zd],[()=>hue,0],1],nle=[3,p,Dl,0,[Gae,Od,kd,cf,of],[0,0,()=>xf,()=>Tf,()=>Df]],rle=[3,p,Ol,0,[Fae,voe,wae,fse],[()=>Pce,()=>ile,15,()=>Due]],ile=[3,p,El,0,[toe,id,Ise],[()=>Vce,()=>uce,()=>nue]],ale=[3,p,wl,0,[Ad,Cd,Cae,gf,yd,Pd,qae,Sse],[0,0,0,0,0,()=>ole,0,0],6],ole=[3,p,Tl,0,[mf,df,qd],[0,0,0],3],sle=[3,p,kl,0,[Nae],[()=>Eue],1],cle=[3,p,Al,0,[Zae,Pd],[[()=>tce,0],()=>lle],2],lle=[3,p,jl,0,[df,qd],[0,0],2],ule=[3,p,Ml,0,[jae,Aae,gf,Pd],[0,0,[()=>ice,0],()=>dle],4],dle=[3,p,Nl,0,[mf,df,qd],[0,0,0],3],fle=[3,p,Fl,0,[gae,gf,Pd],[0,0,()=>ple],3],ple=[3,p,Il,0,[mf,df,qd],[0,0,0],3],mle=[3,p,Ll,0,[Yoe,fd,ud],[0,()=>mce,()=>fce],1],hle=[3,p,Ul,0,[Joe],[0],1],gle=[3,p,Bl,0,[Roe,Bd,Dd],[[()=>$se,0],[()=>kf,0],[()=>kf,0]],1],_le=[3,p,Vl,0,[jd],[[()=>gue,0]],1],vle=[3,p,Rl,0,[Dae,yd,Pd,Poe],[0,0,()=>yle,0],3],yle=[3,p,zl,0,[df,qd],[0,0],2],ble=[3,p,Wl,0,[Xd,xd,Vd],[0,0,0]],xle=[3,p,Gl,0,[Jae,Qae],[1,[()=>Sle,0]]],Sle=[3,p,Kl,8,[Ose,Tae],[()=>vue,()=>uue]],Cle=[3,p,Jl,0,[Xd,xd,Vd,kae],[0,0,0,()=>_ue],1],wle=[3,p,Xl,0,[Qoe,yd,Cd,Tse,Pd],[0,0,0,0,()=>Tle],5],Tle=[3,p,eu,0,[Goe,mf,df,qd,Sae],[0,0,0,0,0],4],Ele=[3,p,Ql,0,[Ad,gf,yd,Pd],[0,0,0,()=>Dle],4],Dle=[3,p,$l,0,[mf,df,qd],[0,0,0],3],Ole=[3,p,Zl,0,[cse,Xoe,Zoe],[()=>yue,()=>Mle,[()=>xle,0]],2],kle=[3,p,nu,0,[uf,Bae,pf],[0,0,0],1],Ale=[3,p,ru,0,[bae,nd],[0,()=>kle],2],jle=[3,p,iu,0,[Ese],[64],1],Mle=[3,p,au,0,[uf,ose,Woe],[0,()=>Ile,()=>Ale],1],Nle=[3,p,ou,0,[Cd],[0],1],Ple=[3,p,su,0,[uf,rd,ef],[0,()=>jle,()=>Nle],1],Fle=[3,p,lu,0,[uf,pf],[0,0],1],Ile=[3,p,uu,0,[Hse,nd],[0,()=>Fle],2],Lle=[3,p,mu,0,[ld,ooe,pd],[0,[()=>bue,0],0],1],wf=[3,p,bu,0,[Ase],[0],1],Rle=[3,p,Mu,0,[Fse,eoe,aoe],[[()=>cce,0],[()=>nce,0],[()=>rce,0]]],zle=[3,p,du,0,[Md],[[()=>yf,0]]],Ble=[3,p,hu,0,[rf,vd],[()=>Vle,[()=>zle,0]],1],Vle=[3,p,Ou,0,[zd,od,yd],[0,0,0],3],Hle=[3,p,Au,0,[Pse],[0]],Ule=[3,p,fu,0,[Yd,hd,md],[1,1,1],3],Tf=[3,p,ku,0,[doe],[0]],Wle=[3,p,Su,0,[Md],[[()=>yf,0]]],Gle=[3,p,Cu,0,[rf,vd],[()=>Kle,[()=>Wle,0]],1],Kle=[3,p,wu,0,[Uae,mse,Rd,od,yd,Cse],[0,64,0,0,0,0],5],qle=[3,p,yu,0,[uf,ef],[0,[()=>Ole,0]],1],Ef=[3,p,pu,0,[uf,Loe,Foe,Uoe,ese,$oe,_oe,woe,gse],[0,()=>fle,[()=>ule,0],()=>vle,()=>Ele,()=>wle,()=>ale,[()=>cle,0],[()=>Rle,0]],1],Df=[3,p,gu,0,[use],[()=>Sue],1],Jle=[3,p,_u,0,[uf,sf],[0,()=>wf],1],Yle=[3,p,Nu,0,[xse,pse],[()=>Xle,0],2],Xle=[3,p,Fu,0,[wse],[()=>Zle],1],Zle=[3,p,Iu,0,[poe],[0],1],Qle=[3,p,Bu,0,[hse],[()=>xue]],$le=[3,p,Ku,0,[Xd,Gd],[0,0],2],Of=[3,p,Ju,0,[_ae,Oae,Hoe,yae],[()=>gce,()=>Ece,()=>mle,()=>bce]],eue=[3,p,Yu,0,[Od,kd,of],[0,()=>xf,()=>Df],1],tue=[3,p,Hu,0,[nf],[()=>rue],1],nue=[3,p,Gu,0,[Lse],[0],1],rue=[3,p,Xu,0,[Nd],[1],1],iue=[3,p,Zu,0,[xae,Bd,Dd,_se,Mse,jse],[()=>aue,[()=>kf,0],[()=>kf,0],0,[()=>oce,0],[()=>sce,0]]],aue=[3,p,Qu,0,[tse,xoe],[1,1]],oue=[3,p,$u,0,[rf,vd],[()=>sue,[()=>iue,0]],1],sue=[3,p,td,0,[Nse],[()=>Qle],1],cue=[3,p,ed,0,[Pae],[0],1],lue=[1,p,nc,0,()=>lce],uue=[1,p,Cc,0,()=>Tce],due=[1,p,Lc,0,()=>kce],kf=[1,p,Vc,8,[()=>ece,0]],fue=[1,p,Zc,0,()=>Bce],pue=[1,p,tl,0,()=>Hce],mue=[1,p,al,0,()=>Gce],hue=[1,p,fl,0,()=>Jce],gue=[1,p,Hl,8,[()=>gle,0]],_ue=[1,p,ql,0,()=>ble],vue=[1,p,Yl,0,()=>Cle],yue=[1,p,cu,0,()=>Ple],bue=[1,p,Tu,0,[()=>ace,0]],xue=[1,p,ju,0,()=>Hle],Sue=[1,p,vu,0,()=>Jle],Cue=[1,p,Lu,0,()=>Yle],wue=[1,p,qu,0,()=>$le],Tue=[1,p,Uu,0,()=>tue],Eue=[4,p,Mc,0,[Mae,hoe],[1,()=>Yce]],Due=[4,p,Du,0,[Vae,Vse,Coe],[()=>Dce,()=>cue,()=>sle]],Oue=[9,p,fc,{[Id]:[`PUT`,`/knowledgebases/{knowledgeBaseId}/datasources/`,200]},()=>xce,()=>Sce],kue=[9,p,yc,{[Id]:[`PUT`,`/knowledgebases/`,202]},()=>Cce,()=>wce],Aue=[9,p,Ec,{[Id]:[`DELETE`,`/knowledgebases/{knowledgeBaseId}/datasources/{dataSourceId}`,202]},()=>Ace,()=>jce],jue=[9,p,kc,{[Id]:[`DELETE`,`/knowledgebases/{knowledgeBaseId}`,202]},()=>Mce,()=>Nce],Mue=[9,p,Kc,{[Id]:[`GET`,`/knowledgebases/{knowledgeBaseId}`,200]},()=>Lce,()=>Rce],Nue=[9,p,hl,{[Id]:[`POST`,`/knowledgebases/{knowledgeBaseId}/datasources/`,200]},()=>Xce,()=>Zce],Pue=[9,p,vl,{[Id]:[`POST`,`/knowledgebases/{knowledgeBaseId}/datasources/{dataSourceId}/ingestionjobs/`,200]},()=>Qce,()=>$ce],Fue=[9,p,xl,{[Id]:[`POST`,`/knowledgebases/`,200]},()=>ele,()=>tle],Iue=e=>({apiVersion:`2023-06-05`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Ks,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Ts,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockagent`,errorTypeRegistries:Qse,version:`2023-06-05`,serviceTarget:`AmazonBedrockAgentBuildTimeLambda`},serviceId:e?.serviceId??`Bedrock Agent`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),Lue=e=>{let t=te(e),n=()=>t().then(Ae),r=Iue(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:ks.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Rue=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},zue=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Bue=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),Rue(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),zue(n))},Vue=class extends tt{config;constructor(...[t]){let n=Lue(t||{});super(n),this.initConfig=n;let r=Ds(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=Bue(Es(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:Cs,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},Af=e=>Object.assign(e,{eventStreamMarshaller:e.eventStreamSerdeProvider(e)}),Hue=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Uue(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var Wue=e=>{let t=[];return e.operation,t.push(Uue(e)),t},Gue=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},Kue=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),que={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Jue={name:`@aws-sdk/client-bedrock-agent-runtime`,version:`3.1144.0`,description:`AWS SDK for JavaScript Bedrock Agent Runtime Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-agent-runtime`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-agent-runtime`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},jf=`ref`,Mf=-1,Nf=!0,Pf=`isSet`,Ff=`PartitionResult`,If=`booleanEquals`,Lf=`getAttr`,Rf={[jf]:`Endpoint`},zf={[jf]:Ff},Bf={},Vf=[{[jf]:`Region`}],Hf={conditions:[[Pf,[Rf]],[Pf,Vf],[`aws.partition`,Vf,Ff],[If,[{[jf]:`UseFIPS`},Nf]],[If,[{[jf]:`UseDualStack`},Nf]],[If,[{fn:Lf,argv:[zf,`supportsDualStack`]},Nf]],[If,[{fn:Lf,argv:[zf,`supportsFIPS`]},Nf]]],results:[[Mf],[Mf,`Invalid Configuration: FIPS and custom endpoint are not supported`],[Mf,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Rf,Bf],[`https://bedrock-agent-runtime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,Bf],[Mf,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-agent-runtime-fips.{Region}.{PartitionResult#dnsSuffix}`,Bf],[Mf,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-agent-runtime.{Region}.{PartitionResult#dualStackDnsSuffix}`,Bf],[Mf,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-agent-runtime.{Region}.{PartitionResult#dnsSuffix}`,Bf],[Mf,`Invalid Configuration: Missing Region`]]},Yue=2,Xue=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Zue=s.from(Xue,Yue,Hf.conditions,Hf.results),Que=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),$ue=(e,t={})=>Que.get(e,()=>ze(Zue,{endpointParams:e,logger:t.logger}));lt.aws=de;var Uf=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},ede=class e extends Uf{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tde=class e extends Uf{name=`BadGatewayException`;$fault=`server`;resourceName;constructor(t){super({name:`BadGatewayException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},nde=class e extends Uf{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rde=class e extends Uf{name=`DependencyFailedException`;$fault=`client`;resourceName;constructor(t){super({name:`DependencyFailedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},ide=class e extends Uf{name=`InternalServerException`;$fault=`server`;reason;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.reason=t.reason}},ade=class e extends Uf{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ode=class e extends Uf{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sde=class e extends Uf{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cde=class e extends Uf{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lde=class e extends Uf{name=`ModelNotReadyException`;$fault=`client`;constructor(t){super({name:`ModelNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ude=`AccessDeniedException`,dde=`AudioSegment`,fde=`ByteContentBlob`,pde=`BadGatewayException`,mde=`ConflictException`,hde=`DependencyFailedException`,gde=`FilterAttribute`,_de=`FieldForReranking`,vde=`FieldsForReranking`,yde=`GuardrailConfiguration`,bde=`ImplicitFilterConfiguration`,xde=`InputImage`,Sde=`InternalServerException`,Cde=`KnowledgeBaseQuery`,wde=`KnowledgeBaseRetrievalConfiguration`,Tde=`KnowledgeBaseRetrievalResult`,Ede=`KnowledgeBaseRetrievalResults`,Dde=`KnowledgeBaseVectorSearchConfiguration`,Ode=`MetadataAttributeSchema`,kde=`MetadataAttributeSchemaList`,Ade=`MetadataConfigurationForReranking`,jde=`ModelNotReadyException`,Mde=`ManagedSearchBedrockRerankingConfiguration`,Nde=`ManagedSearchBedrockRerankingModelConfiguration`,Pde=`ManagedSearchConfiguration`,Fde=`ManagedSearchRerankingConfiguration`,Ide=`RetrievalFilter`,Lde=`RetrievalFilterList`,Rde=`RerankingMetadataSelectiveModeConfiguration`,zde=`ResourceNotFoundException`,Bde=`RetrievalResultContent`,Vde=`RetrievalResultContentColumn`,Hde=`RetrievalResultCustomDocumentLocation`,Ude=`RetrievalResultConfluenceLocation`,Wde=`RetrievalResultContentRow`,Gde=`RetrievalResultGoogleDriveLocation`,Kde=`RetrievalResultKendraDocumentLocation`,qde=`RetrievalResultLocation`,Jde=`RetrievalResultMetadata`,Yde=`RetrievalResultOneDriveLocation`,Xde=`RetrievalResultS3Location`,Zde=`RetrievalResultSalesforceLocation`,Qde=`RetrievalResultSqlLocation`,$de=`RetrievalResultSharePointLocation`,efe=`RetrievalResultWebLocation`,tfe=`RetrieveRequest`,nfe=`RetrieveResponse`,rfe=`Retrieve`,ife=`ServiceQuotaExceededException`,afe=`ThrottlingException`,ofe=`UserContext`,sfe=`ValidationException`,cfe=`VideoSegment`,lfe=`VectorSearchBedrockRerankingConfiguration`,ufe=`VectorSearchBedrockRerankingModelConfiguration`,dfe=`VectorSearchRerankingConfiguration`,ffe=`andAll`,Wf=`additionalModelRequestFields`,pfe=`audio`,mfe=`byteContent`,Gf=`bedrockRerankingConfiguration`,Kf=`client`,hfe=`customDocumentLocation`,gfe=`confluenceLocation`,_fe=`columnName`,vfe=`columnValue`,yfe=`content`,bfe=`description`,xfe=`documentId`,qf=`error`,Sfe=`equals`,Cfe=`fieldName`,wfe=`fieldsToExclude`,Tfe=`fieldsToInclude`,Jf=`filter`,Efe=`format`,Dfe=`guardrailAction`,Ofe=`guardrailConfiguration`,kfe=`googleDriveLocation`,Afe=`guardrailId`,jfe=`greaterThan`,Mfe=`greaterThanOrEquals`,Nfe=`guardrailVersion`,Pfe=`http`,Yf=`httpError`,Ffe=`inlineContent`,Ife=`implicitFilterConfiguration`,Lfe=`id`,Rfe=`image`,zfe=`in`,Xf=`key`,Bfe=`knowledgeBaseId`,Vfe=`kendraDocumentLocation`,Hfe=`listContains`,Ufe=`lessThan`,Wfe=`lessThanOrEquals`,Gfe=`location`,Zf=`message`,Qf=`modelArn`,Kfe=`metadataAttributes`,$f=`modelConfiguration`,ep=`metadataConfiguration`,qfe=`managedSearchConfiguration`,Jfe=`metadata`,Yfe=`notEquals`,Xfe=`notIn`,tp=`numberOfResults`,np=`numberOfRerankedResults`,rp=`nextToken`,Zfe=`orAll`,Qfe=`oneDriveLocation`,$fe=`overrideSearchType`,epe=`query`,tpe=`reason`,ip=`rerankingConfiguration`,npe=`retrievalConfiguration`,rpe=`rerankingModelType`,ap=`resourceName`,ipe=`retrievalQuery`,ape=`retrievalResults`,ope=`row`,op=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockagentruntime`,spe=`stringContains`,cpe=`s3Location`,lpe=`salesforceLocation`,upe=`sqlLocation`,dpe=`selectiveModeConfiguration`,fpe=`selectionMode`,ppe=`sharePointLocation`,sp=`s3Uri`,mpe=`startsWith`,hpe=`score`,cp=`server`,gpe=`summary`,lp=`text`,_pe=`transcription`,up=`type`,vpe=`userContext`,ype=`userId`,dp=`url`,fp=`uri`,bpe=`vectorSearchConfiguration`,xpe=`value`,Spe=`video`,Cpe=`webLocation`,m=`com.amazonaws.bedrockagentruntime`,pp=new mt(op),wpe=[-3,op,`BedrockAgentRuntimeServiceException`,0,[],[]];pp.registerError(wpe,Uf);var mp=new mt(m),Tpe=[-3,m,ude,{[qf]:Kf,[Yf]:403},[Zf],[0]];mp.registerError(Tpe,ede);var Epe=[-3,m,pde,{[qf]:cp,[Yf]:502},[Zf,ap],[0,0]];mp.registerError(Epe,tde);var Dpe=[-3,m,mde,{[qf]:Kf,[Yf]:409},[Zf],[0]];mp.registerError(Dpe,nde);var Ope=[-3,m,hde,{[qf]:Kf,[Yf]:424},[Zf,ap],[0,0]];mp.registerError(Ope,rde);var kpe=[-3,m,Sde,{[qf]:cp,[Yf]:500},[Zf,tpe],[0,0]];mp.registerError(kpe,ide);var Ape=[-3,m,jde,{[qf]:Kf,[Yf]:424},[Zf],[0]];mp.registerError(Ape,lde);var jpe=[-3,m,zde,{[qf]:Kf,[Yf]:404},[Zf],[0]];mp.registerError(jpe,ade);var Mpe=[-3,m,ife,{[qf]:Kf,[Yf]:400},[Zf],[0]];mp.registerError(Mpe,ode);var Npe=[-3,m,afe,{[qf]:Kf,[Yf]:429},[Zf],[0]];mp.registerError(Npe,sde);var Ppe=[-3,m,sfe,{[qf]:Kf,[Yf]:400},[Zf],[0]];mp.registerError(Ppe,cde);var Fpe=[pp,mp],Ipe=[0,m,fde,8,21],Lpe=[3,m,dde,0,[sp,_pe],[0,0],1],Rpe=[3,m,_de,0,[Cfe],[0],1],hp=[3,m,gde,0,[Xf,xpe],[0,15],2],zpe=[3,m,yde,0,[Afe,Nfe],[0,0],2],Bpe=[3,m,bde,0,[Kfe,Qf],[[()=>vme,0],0],2],Vpe=[3,m,xde,0,[Efe,Ffe],[0,[()=>Ipe,0]],2],Hpe=[3,m,Cde,8,[up,lp,Rfe],[0,0,[()=>Vpe,0]]],Upe=[3,m,wde,0,[bpe,qfe],[[()=>Gpe,0],[()=>Jpe,0]]],Wpe=[3,m,Tde,0,[yfe,Gfe,hpe,Jfe,xfe],[[()=>Qpe,0],[()=>rme,0],1,[()=>bme,0],0],1],Gpe=[3,m,Dde,0,[tp,$fe,Jf,ip,Ife],[1,0,[()=>yp,0],[()=>hme,0],[()=>Bpe,0]]],Kpe=[3,m,Mde,0,[$f,np,ep],[()=>qpe,1,[()=>gp,0]],1],qpe=[3,m,Nde,0,[Qf,Wf],[0,143],1],Jpe=[3,m,Pde,0,[tp,Jf,rpe,ip],[1,[()=>yp,0],0,[()=>Ype,0]]],Ype=[3,m,Fde,0,[up,Gf],[0,[()=>Kpe,0]],1],Xpe=[3,m,Ode,8,[Xf,up,bfe],[0,0,0],3],gp=[3,m,Ade,0,[fpe,dpe],[0,[()=>xme,0]],1],Zpe=[3,m,Ude,0,[dp],[0]],Qpe=[3,m,Bde,8,[up,lp,mfe,Spe,pfe,ope],[0,0,0,()=>gme,()=>Lpe,[()=>yme,0]]],$pe=[3,m,Vde,8,[_fe,vfe,up],[0,0,0]],eme=[3,m,Hde,0,[Lfe],[0]],tme=[3,m,Gde,0,[dp],[0]],nme=[3,m,Kde,0,[fp],[0]],rme=[3,m,qde,8,[up,cpe,Cpe,gfe,lpe,ppe,hfe,Vfe,upe,Qfe,kfe],[0,()=>ame,()=>lme,()=>Zpe,()=>ome,()=>sme,()=>eme,()=>nme,()=>cme,()=>ime,()=>tme],1],ime=[3,m,Yde,0,[dp],[0]],ame=[3,m,Xde,0,[fp],[0]],ome=[3,m,Zde,0,[dp],[0]],sme=[3,m,$de,0,[dp],[0]],cme=[3,m,Qde,0,[epe],[0]],lme=[3,m,efe,0,[dp],[0]],ume=[3,m,tfe,0,[Bfe,ipe,npe,Ofe,rp,vpe],[[0,1],[()=>Hpe,0],[()=>Upe,0],()=>zpe,0,[()=>fme,0]],2],dme=[3,m,nfe,0,[ape,Dfe,rp],[[()=>_me,0],0,0],1],fme=[3,m,ofe,8,[ype],[0],1],pme=[3,m,lfe,0,[$f,np,ep],[()=>mme,1,[()=>gp,0]],1],mme=[3,m,ufe,0,[Qf,Wf],[0,143],1],hme=[3,m,dfe,0,[up,Gf],[0,[()=>pme,0]],1],gme=[3,m,cfe,0,[sp,gpe],[0,0],1],_p=[1,m,vde,8,()=>Rpe],_me=[1,m,Ede,8,[()=>Wpe,0]],vme=[1,m,kde,0,[()=>Xpe,0]],vp=[1,m,Lde,0,[()=>yp,0]],yme=[1,m,Wde,8,[()=>$pe,0]],bme=[2,m,Jde,8,0,15],xme=[4,m,Rde,0,[Tfe,wfe],[[()=>_p,0],[()=>_p,0]]],yp=[4,m,Ide,8,[Sfe,Yfe,jfe,Mfe,Ufe,Wfe,zfe,Xfe,mpe,Hfe,spe,ffe,Zfe],[()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,()=>hp,[()=>vp,0],[()=>vp,0]]],Sme=[9,m,rfe,{[Pfe]:[`POST`,`/knowledgebases/{knowledgeBaseId}/retrieve`,200]},()=>ume,()=>dme],Cme=e=>({apiVersion:`2023-07-26`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??$ue,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Wue,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockagentruntime`,errorTypeRegistries:Fpe,version:`2023-07-26`,serviceTarget:`AmazonBedrockAgentRunTimeService`},serviceId:e?.serviceId??`Bedrock Agent Runtime`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),wme=e=>{let t=te(e),n=()=>t().then(Ae),r=Cme(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:Jue.version}),eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Tme=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Eme=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Dme=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),Tme(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),Eme(n))},Ome=class extends tt{config;constructor(...[t]){let n=wme(t||{});super(n),this.initConfig=n;let r=Kue(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=Dme(Gue(Af(dt(c))),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:Hue,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}};function kme(e){let t=e.signer,n=e.signer,r=Object.assign(e,{eventSigner:t,messageSigner:n}),i=r.eventStreamPayloadHandlerProvider(r);return Object.assign(r,{eventStreamPayloadHandler:i})}var Ame=e=>typeof e==`string`&&e.indexOf(`arn:`)===0&&e.split(`:`).length>=6;function bp(e){let{port:t,query:n}=e,{protocol:r,path:i,hostname:a}=e;r&&r.slice(-1)!==`:`&&(r+=`:`),t&&(a+=`:${t}`),i&&i.charAt(0)!==`/`&&(i=`/${i}`);let o=n?Ze(n):``;o&&o[0]!==`?`&&(o=`?${o}`);let s=``;(e.username!=null||e.password!=null)&&(s=`${e.username??``}:${e.password??``}@`);let c=``;return e.fragment&&(c=`#${e.fragment}`),`${r}//${s}${a}${i}${o}${c}`}var xp=e=>e.protocol===`ws:`||e.protocol===`wss:`,jme=3e3,Mme=class e{metadata={handlerProtocol:`websocket/h1.1`};config={};configPromise;httpHandler;sockets={};static create(t,n=new u){return typeof t?.handle==`function`?t:new e(t,n)}constructor(e,t=new u){this.httpHandler=t;let n=e=>(this.config={...e??{}},this.config);typeof e==`function`?(this.config={},this.configPromise=e().then(e=>n(e))):this.configPromise=Promise.resolve(n(e))}destroy(){for(let[e,t]of Object.entries(this.sockets)){for(let e of t)e.close(1e3,`Socket closed through destroy() call`);delete this.sockets[e]}}async handle(e){this.config=await this.configPromise;let{logger:t}=this.config;if(!xp(e))return t?.debug?.(`@aws-sdk - ws fetching ${e.protocol}${e.hostname}${e.path}`),this.httpHandler.handle(e);let n=bp(e);t?.debug?.(`@aws-sdk - ws connecting ${n.split(`?`)[0]}`);let r=new WebSocket(n);this.sockets[n]||(this.sockets[n]=[]),this.sockets[n].push(r),r.binaryType=`arraybuffer`;let{connectionTimeout:i=jme}=this.config;await this.waitForReady(r,i);let{body:a}=e,o=Nme(a),s=Pme(this.connect(r,o));return{response:new xe({statusCode:200,body:s})}}updateHttpClientConfig(e,t){this.configPromise=this.configPromise.then(n=>(n[e]=t,n))}httpHandlerConfigs(){return this.config??{}}removeNotUsableSockets(e){this.sockets[e]=(this.sockets[e]??[]).filter(e=>![WebSocket.CLOSING,WebSocket.CLOSED].includes(e.readyState))}waitForReady(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>{this.removeNotUsableSockets(e.url),r({$metadata:{httpStatusCode:500,websocketSynthetic500Error:!0}})},t);e.onopen=()=>{clearTimeout(i),n()}})}connect(e,t){let n=[],r=null,i=null,a=e=>{r?(e.error?i(e.error):r({done:e.done,value:e.value}),r=null,i=null):n.push(e)};e.onmessage=e=>{let{data:t}=e;a(typeof t==`string`?{done:!1,value:se(t)}:{done:!1,value:new Uint8Array(t)})},e.onerror=t=>{e.close(),a({done:!0,error:t})},e.onclose=()=>{this.removeNotUsableSockets(e.url),a({done:!0})};let o={[Symbol.asyncIterator]:()=>({async next(){if(n.length>0){let e=n.shift();if(e.error)throw e.error;return{done:e.done,value:e.value}}return new Promise((e,t)=>{r=e,i=t})}})};return(async()=>{try{for await(let n of t)if(e.readyState>=WebSocket.CLOSING)break;else e.send(n)}catch(e){a({done:!0,error:e})}finally{e.close(1e3)}})(),o}},Nme=e=>e[Symbol.asyncIterator]?e:Fme(e)?dee(e):{[Symbol.asyncIterator]:async function*(){yield e}},Pme=e=>typeof ReadableStream==`function`?pee(e):e,Fme=e=>typeof ReadableStream==`function`&&e instanceof ReadableStream,Ime=class{signer;constructor(e){this.signer=e.signer}presign(e,t={}){return this.signer.presign(e,t)}async sign(e,n){return t.isInstance(e)&&xp(e)?{...await this.signer.presign({...e,body:``},{...n,expiresIn:60,unsignableHeaders:new Set(Object.keys(e.headers).filter(e=>e!==`host`))}),body:e.body}:this.signer.sign(e,n)}signMessage(e,t){return this.signer.signMessage(e,t)}},Lme=e=>{let{signer:t}=e;return Object.assign(e,{signer:async e=>{let n=await t(e);if(Rme(n))return new Ime({signer:n});throw Error(`Expected WebsocketSignatureV4 signer, please check the client constructor.`)}})},Rme=e=>!!e,zme=class extends TransformStream{constructor(e,t,n,r,i){let a=e,o=i?.();super({start(){},async transform(e,i){try{let s=new Date(Date.now()+await r()),c={":date":{type:`timestamp`,value:s}},l=await t.sign({message:{body:e,headers:c},priorSignature:a},{signingDate:s,eventStreamCredentials:await o});a=l.signature;let u=n.encode({headers:{...c,":chunk-signature":{type:`binary`,value:uee(l.signature)}},body:e});i.enqueue(u)}catch(e){i.error(e)}}})}},Bme=class{messageSigner;eventStreamCodec;systemClockOffsetProvider;credentials;constructor(e){this.messageSigner=e.messageSigner,this.eventStreamCodec=new mee(e.utf8Encoder,e.utf8Decoder),this.systemClockOffsetProvider=async()=>e.systemClockOffset??0,this.credentials=e.credentials}async handle(e,t,n={}){let r=t.request,{body:i,headers:a,query:o}=r;if(!(i instanceof ReadableStream))throw Error(`Eventstream payload must be a ReadableStream.`);let s=new TransformStream;r.body=s.readable;let c=((a?.authorization??``).match(/Signature=(\w+)$/)??[])[1]??(o&&o[`X-Amz-Signature`])??``;n.__staticSignature&&(c=``);let l=new zme(c,await this.messageSigner(),this.eventStreamCodec,this.systemClockOffsetProvider,this.credentials);i.pipeThrough(l).pipeThrough(s);let u;try{u=await e(t)}catch(e){let t=i.cancel?.();throw t instanceof Promise&&t.catch(()=>{}),e}return u}},Vme=e=>new Bme(e),Hme=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Ume(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function Wme(e){return{schemeId:`smithy.api#httpBearerAuth`,propertiesExtractor:({profile:e,filepath:t,configFilepath:n,ignoreCache:r},i)=>({identityProperties:{profile:e,filepath:t,configFilepath:n,ignoreCache:r}})}}var Gme=e=>{let t=[];return e.operation,t.push(Ume(e)),t.push(Wme(e)),t},Kme=e=>{let t=De(e.token,ie,ke),n=ge(e);return Object.assign(n,{authSchemePreference:Ie(e.authSchemePreference??[]),token:t})},qme=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Jme={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Yme={name:`@aws-sdk/client-bedrock-runtime`,version:`3.1144.0`,description:`AWS SDK for JavaScript Bedrock Runtime Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-runtime`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-runtime`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:browser":`yarn g:vitest run -c vitest.config.browser.e2e.mts`,"test:browser:watch":`yarn g:vitest watch -c vitest.config.browser.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/eventstream-handler-node":`^3.972.35`,"@aws-sdk/middleware-eventstream":`^3.972.30`,"@aws-sdk/middleware-websocket":`^3.972.54`,"@aws-sdk/token-providers":`3.1144.0`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},Sp=`ref`,Cp=-1,wp=!0,Tp=`isSet`,Ep=`PartitionResult`,Dp=`booleanEquals`,Op=`getAttr`,kp={[Sp]:`Endpoint`},Ap={[Sp]:Ep},jp={},Mp=[{[Sp]:`Region`}],Np={conditions:[[Tp,[kp]],[Tp,Mp],[`aws.partition`,Mp,Ep],[Dp,[{[Sp]:`UseFIPS`},wp]],[Dp,[{[Sp]:`UseDualStack`},wp]],[Dp,[{fn:Op,argv:[Ap,`supportsDualStack`]},wp]],[Dp,[{fn:Op,argv:[Ap,`supportsFIPS`]},wp]]],results:[[Cp],[Cp,`Invalid Configuration: FIPS and custom endpoint are not supported`],[Cp,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[kp,jp],[`https://bedrock-runtime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,jp],[Cp,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-runtime-fips.{Region}.{PartitionResult#dnsSuffix}`,jp],[Cp,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-runtime.{Region}.{PartitionResult#dualStackDnsSuffix}`,jp],[Cp,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-runtime.{Region}.{PartitionResult#dnsSuffix}`,jp],[Cp,`Invalid Configuration: Missing Region`]]},Xme=2,Zme=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Qme=s.from(Zme,Xme,Np.conditions,Np.results),$me=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),ehe=(e,t={})=>$me.get(e,()=>ze(Qme,{endpointParams:e,logger:t.logger}));lt.aws=de;var Pp=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},the=class e extends Pp{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nhe=class e extends Pp{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},rhe=class e extends Pp{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ihe=class e extends Pp{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ahe=class e extends Pp{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ohe=class e extends Pp{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},she=class e extends Pp{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},che=class e extends Pp{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},lhe=class e extends Pp{name=`ModelErrorException`;$fault=`client`;originalStatusCode;resourceName;constructor(t){super({name:`ModelErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.originalStatusCode=t.originalStatusCode,this.resourceName=t.resourceName}},uhe=class e extends Pp{name=`ModelNotReadyException`;$fault=`client`;$retryable={};constructor(t){super({name:`ModelNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dhe=class e extends Pp{name=`ModelTimeoutException`;$fault=`client`;constructor(t){super({name:`ModelTimeoutException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fhe=class e extends Pp{name=`ModelStreamErrorException`;$fault=`client`;originalStatusCode;originalMessage;constructor(t){super({name:`ModelStreamErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.originalStatusCode=t.originalStatusCode,this.originalMessage=t.originalMessage}},phe=`AudioBlock`,mhe=`AccessDeniedException`,hhe=`ApplyGuardrail`,ghe=`AppliedGuardrailDetails`,_he=`ApplyGuardrailRequest`,vhe=`ApplyGuardrailResponse`,yhe=`AudioSource`,bhe=`AnyToolChoice`,xhe=`AutoToolChoice`,She=`Citation`,Che=`ContentBlocks`,whe=`ContentBlock`,The=`CitationsConfig`,Ehe=`CitationsContentBlock`,Dhe=`CacheDetail`,Ohe=`CacheDetailsList`,khe=`ConflictException`,Ahe=`CitationGeneratedContent`,jhe=`CitationGeneratedContentList`,Mhe=`CitationLocation`,Nhe=`ConverseMetrics`,Phe=`ConverseOutput`,Fhe=`CachePointBlock`,Ihe=`ConverseRequest`,Lhe=`ConverseResponse`,Rhe=`CitationSourceContent`,zhe=`CitationSourceContentList`,Bhe=`ConverseTrace`,Vhe=`Citations`,Hhe=`Converse`,Uhe=`DocumentBlock`,Whe=`DocumentContentBlocks`,Ghe=`DocumentContentBlock`,Khe=`DocumentCharLocation`,qhe=`DocumentChunkLocation`,Jhe=`DocumentPageLocation`,Yhe=`DocumentSource`,Xhe=`ErrorBlock`,Zhe=`GuardrailAssessment`,Qhe=`GuardrailAssessmentList`,$he=`GuardrailAssessmentListMap`,ege=`GuardrailAssessmentMap`,tge=`GuardrailAutomatedReasoningDifferenceScenarioList`,nge=`GuardrailAutomatedReasoningFinding`,rge=`GuardrailAutomatedReasoningFindingList`,ige=`GuardrailAutomatedReasoningImpossibleFinding`,age=`GuardrailAutomatedReasoningInvalidFinding`,oge=`GuardrailAutomatedReasoningInputTextReference`,sge=`GuardrailAutomatedReasoningInputTextReferenceList`,cge=`GuardrailAutomatedReasoningLogicWarning`,lge=`GuardrailAutomatedReasoningNoTranslationsFinding`,uge=`GuardrailAutomatedReasoningPolicyAssessment`,dge=`GuardrailAutomatedReasoningRule`,fge=`GuardrailAutomatedReasoningRuleList`,pge=`GuardrailAutomatedReasoningScenario`,mge=`GuardrailAutomatedReasoningSatisfiableFinding`,hge=`GuardrailAutomatedReasoningStatementList`,gge=`GuardrailAutomatedReasoningStatementLogicContent`,_ge=`GuardrailAutomatedReasoningStatementNaturalLanguageContent`,vge=`GuardrailAutomatedReasoningStatement`,yge=`GuardrailAutomatedReasoningTranslation`,bge=`GuardrailAutomatedReasoningTranslationAmbiguousFinding`,xge=`GuardrailAutomatedReasoningTooComplexFinding`,Sge=`GuardrailAutomatedReasoningTranslationList`,Cge=`GuardrailAutomatedReasoningTranslationOption`,wge=`GuardrailAutomatedReasoningTranslationOptionList`,Tge=`GuardrailAutomatedReasoningValidFinding`,Ege=`GuardrailConfiguration`,Dge=`GuardrailContentBlock`,Oge=`GuardrailContentBlockList`,kge=`GuardrailConverseContentBlock`,Age=`GuardrailContentFilter`,jge=`GuardrailContentFilterList`,Mge=`GuardrailContextualGroundingFilter`,Nge=`GuardrailContextualGroundingFilters`,Pge=`GuardrailContextualGroundingPolicyAssessment`,Fge=`GuardrailConverseImageBlock`,Ige=`GuardrailConverseImageSource`,Lge=`GuardrailContentPolicyAssessment`,Rge=`GuardrailConverseTextBlock`,zge=`GuardrailCustomWord`,Bge=`GuardrailCustomWordList`,Vge=`GuardrailCoverage`,Hge=`GuardrailImageBlock`,Uge=`GuardrailImageCoverage`,Wge=`GuardrailInvocationMetrics`,Gge=`GuardrailImageSource`,Kge=`GuardrailManagedWord`,qge=`GuardrailManagedWordList`,Jge=`GuardrailOutputContent`,Yge=`GuardrailOutputContentList`,Xge=`GuardrailPiiEntityFilter`,Zge=`GuardrailPiiEntityFilterList`,Qge=`GuardrailRegexFilter`,$ge=`GuardrailRegexFilterList`,e_e=`GuardrailSensitiveInformationPolicyAssessment`,t_e=`GuardrailTopic`,n_e=`GuardrailTraceAssessment`,r_e=`GuardrailTextBlock`,i_e=`GuardrailTextCharactersCoverage`,a_e=`GuardrailTopicList`,o_e=`GuardrailTopicPolicyAssessment`,s_e=`GuardrailUsage`,c_e=`GuardrailWordPolicyAssessment`,l_e=`ImageBlock`,u_e=`InferenceConfiguration`,d_e=`ImageSource`,f_e=`InternalServerException`,p_e=`JsonSchemaDefinition`,m_e=`Message`,h_e=`ModelErrorException`,g_e=`ModelNotReadyException`,__e=`ModelStreamErrorException`,v_e=`ModelTimeoutException`,y_e=`Messages`,b_e=`OutputConfig`,x_e=`OutputFormat`,S_e=`OutputFormatStructure`,C_e=`PerformanceConfiguration`,w_e=`PromptRouterTrace`,T_e=`PromptVariableMap`,E_e=`PromptVariableValues`,D_e=`ReasoningContentBlock`,O_e=`RequestMetadata`,k_e=`ResourceNotFoundException`,A_e=`ReasoningTextBlock`,j_e=`SystemContentBlocks`,M_e=`SystemContentBlock`,N_e=`S3Location`,P_e=`ServiceQuotaExceededException`,F_e=`SearchResultBlock`,I_e=`SearchResultContentBlock`,L_e=`SearchResultContentBlocks`,R_e=`SearchResultLocation`,z_e=`ServiceTier`,B_e=`SpecificToolChoice`,V_e=`SystemTool`,H_e=`ServiceUnavailableException`,U_e=`ToolAdditionBlock`,W_e=`ToolConfiguration`,G_e=`ToolChoice`,K_e=`ThrottlingException`,q_e=`ToolInputSchema`,J_e=`ToolReference`,Y_e=`ToolRemovalBlock`,X_e=`ToolResultBlock`,Z_e=`ToolResultContentBlocks`,Q_e=`ToolResultContentBlock`,$_e=`ToolSpecification`,eve=`TokenUsage`,tve=`ToolUseBlock`,nve=`Tools`,rve=`Tool`,ive=`VideoBlock`,ave=`ValidationException`,ove=`VideoSource`,sve=`WebLocation`,Fp=`action`,cve=`appliedGuardrailDetails`,lve=`additionalModelRequestFields`,uve=`additionalModelResponseFieldPaths`,dve=`additionalModelResponseFields`,Ip=`actionReason`,fve=`automatedReasoningPolicy`,pve=`automatedReasoningPolicyUnits`,mve=`automatedReasoningPolicies`,hve=`any`,gve=`assessments`,_ve=`audio`,vve=`auto`,Lp=`bytes`,yve=`bucketOwner`,Rp=`client`,bve=`citationsContent`,xve=`cacheDetails`,Sve=`claimsFalseScenario`,Cve=`contextualGroundingPolicy`,wve=`contextualGroundingPolicyUnits`,Tve=`contentPolicy`,Eve=`contentPolicyImageUnits`,Dve=`contentPolicyUnits`,zp=`cachePoint`,Bp=`contradictingRules`,Ove=`cacheReadInputTokens`,Vp=`claimsTrueScenario`,kve=`customWords`,Ave=`cacheWriteInputTokens`,Hp=`citations`,Up=`claims`,Wp=`content`,jve=`context`,Gp=`confidence`,Mve=`documentChar`,Nve=`documentChunk`,Kp=`documentIndex`,Pve=`documentPage`,Fve=`differenceScenarios`,qp=`detected`,Jp=`description`,Ive=`domain`,Yp=`document`,Xp=`error`,Lve=`effort`,Rve=`enabled`,Zp=`end`,Qp=`format`,zve=`filterStrength`,Bve=`findings`,$p=`filters`,Vve=`guardrail`,Hve=`guardrailArn`,em=`guardrailCoverage`,Uve=`guardrailConfig`,tm=`guardContent`,Wve=`guardrailId`,nm=`guardrailIdentifier`,Gve=`guardrailOrigin`,Kve=`guardrailOwnership`,qve=`guardrailProcessingLatency`,rm=`guardrailVersion`,im=`guarded`,am=`http`,om=`httpError`,Jve=`input`,Yve=`inputAssessment`,Xve=`inferenceConfig`,Zve=`invocationMetrics`,Qve=`invokedModelId`,$ve=`inputSchema`,sm=`inputTokens`,eye=`identifier`,tye=`images`,cm=`image`,nye=`impossible`,rye=`invalid`,lm=`json`,iye=`jsonSchema`,aye=`location`,oye=`latencyMs`,um=`logicWarning`,sye=`latency`,cye=`logic`,dm=`message`,lye=`modelId`,uye=`modelOutput`,dye=`maxTokens`,fye=`managedWordLists`,fm=`match`,pye=`messages`,mye=`metrics`,pm=`name`,hye=`naturalLanguage`,gye=`noTranslations`,_ye=`outputs`,vye=`outputAssessments`,yye=`outputConfig`,bye=`originalMessage`,xye=`outputScope`,mm=`originalStatusCode`,Sye=`outputTokens`,Cye=`options`,wye=`output`,hm=`premises`,gm=`performanceConfig`,Tye=`piiEntities`,Eye=`promptRouter`,Dye=`promptVariables`,Oye=`policyVersionArn`,_m=`qualifiers`,kye=`reasoningContent`,Aye=`redactedContent`,jye=`requestMetadata`,Mye=`resourceName`,Nye=`reasoningText`,Pye=`regex`,Fye=`regexes`,Iye=`role`,vm=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockruntime`,Lye=`sourceContent`,Rye=`sensitiveInformationPolicy`,zye=`sensitiveInformationPolicyFreeUnits`,Bye=`sensitiveInformationPolicyUnits`,ym=`s3Location`,Vye=`serverName`,Hye=`stopReason`,Uye=`searchResultIndex`,Wye=`searchResultLocation`,bm=`searchResult`,Gye=`supportingRules`,Kye=`stopSequences`,xm=`serviceTier`,qye=`systemTool`,Jye=`satisfiable`,Yye=`score`,Xye=`schema`,Sm=`server`,Zye=`signature`,Cm=`source`,Qye=`status`,wm=`start`,$ye=`statements`,ebe=`strict`,tbe=`structure`,nbe=`system`,Tm=`ttl`,rbe=`toolAddition`,ibe=`translationAmbiguous`,abe=`toolConfig`,obe=`textCharacters`,sbe=`toolChoice`,cbe=`tooComplex`,lbe=`textFormat`,ube=`topicPolicy`,dbe=`topicPolicyUnits`,fbe=`topP`,pbe=`toolResult`,mbe=`toolRemoval`,hbe=`toolSpec`,gbe=`totalTokens`,Em=`toolUseId`,_be=`toolUse`,Dm=`text`,vbe=`temperature`,ybe=`threshold`,Om=`title`,km=`total`,Am=`tool`,bbe=`tools`,xbe=`topics`,jm=`trace`,Mm=`translation`,Sbe=`translations`,Nm=`type`,Pm=`usage`,Cbe=`untranslatedClaims`,wbe=`untranslatedPremises`,Tbe=`uri`,Ebe=`url`,Dbe=`valid`,Fm=`video`,Obe=`web`,kbe=`wordPolicy`,Abe=`wordPolicyUnits`,h=`com.amazonaws.bedrockruntime`,Im=new mt(vm),jbe=[-3,vm,`BedrockRuntimeServiceException`,0,[],[]];Im.registerError(jbe,Pp);var Lm=new mt(h),Mbe=[-3,h,mhe,{[Xp]:Rp,[om]:403},[dm],[0]];Lm.registerError(Mbe,the);var Nbe=[-3,h,khe,{[Xp]:Rp,[om]:400},[dm],[0]];Lm.registerError(Nbe,ahe);var Pbe=[-3,h,f_e,{[Xp]:Sm,[om]:500},[dm],[0]];Lm.registerError(Pbe,nhe);var Fbe=[-3,h,h_e,{[Xp]:Rp,[om]:424},[dm,mm,Mye],[0,1,0]];Lm.registerError(Fbe,lhe);var Ibe=[-3,h,g_e,{[Xp]:Rp,[om]:429},[dm],[0]];Lm.registerError(Ibe,uhe);var Lbe=[-3,h,__e,{[Xp]:Rp,[om]:424},[dm,mm,bye],[0,1,0]];Lm.registerError(Lbe,fhe);var Rbe=[-3,h,v_e,{[Xp]:Rp,[om]:408},[dm],[0]];Lm.registerError(Rbe,dhe);var zbe=[-3,h,k_e,{[Xp]:Rp,[om]:404},[dm],[0]];Lm.registerError(zbe,ohe);var Bbe=[-3,h,P_e,{[Xp]:Rp,[om]:400},[dm],[0]];Lm.registerError(Bbe,she);var Vbe=[-3,h,H_e,{[Xp]:Sm,[om]:503},[dm],[0]];Lm.registerError(Vbe,che);var Hbe=[-3,h,K_e,{[Xp]:Rp,[om]:429},[dm],[0]];Lm.registerError(Hbe,rhe);var Ube=[-3,h,ave,{[Xp]:Rp,[om]:400},[dm],[0]];Lm.registerError(Ube,ihe);var Wbe=[Im,Lm],Gbe=[0,h,gge,8,0],Rm=[0,h,_ge,8,0],Kbe=[3,h,bhe,0,[],[]],qbe=[3,h,ghe,0,[Wve,rm,Hve,Gve,Kve],[0,0,0,64,0]],Jbe=[3,h,_he,0,[nm,rm,Cm,Wp,xye],[[0,1],[0,1],0,[()=>gSe,0],0],4],Ybe=[3,h,vhe,0,[Pm,Fp,_ye,gve,Ip,em],[()=>Jm,0,()=>xSe,[()=>rh,0],0,()=>qm],4],Xbe=[3,h,phe,0,[Qp,Cm,Xp],[0,[()=>PSe,0],[()=>Hm,0]],2],Zbe=[3,h,xhe,0,[],[]],Qbe=[3,h,Dhe,0,[Tm,sm],[0,1],2],zm=[3,h,Fhe,0,[Nm,Tm],[0,0],1],$be=[3,h,She,0,[Om,Cm,Lye,aye],[0,0,()=>lSe,()=>ISe]],Bm=[3,h,The,0,[Rve],[2],1],exe=[3,h,Ehe,0,[Wp,Hp],[()=>sSe,()=>cSe]],txe=[3,h,Nhe,0,[oye],[1],1],nxe=[3,h,Ihe,0,[lye,pye,nbe,Xve,abe,Uve,lve,Dye,uve,jye,gm,xm,yye],[[0,1],[()=>TSe,0],[()=>DSe,0],()=>Hxe,()=>eSe,()=>bxe,15,[()=>MSe,0],64,[()=>NSe,0],()=>Zm,()=>eh,[()=>Wxe,0]],1],rxe=[3,h,Lhe,0,[wye,Hye,Pm,mye,dve,jm,gm,xm],[[()=>zSe,0],0,()=>Qxe,()=>txe,15,[()=>ixe,0],()=>Zm,()=>eh],4],ixe=[3,h,Bhe,0,[Vve,Eye],[[()=>Bxe,0],()=>Kxe]],Vm=[3,h,Uhe,0,[pm,Cm,Qp,jve,Hp],[0,()=>VSe,0,0,()=>Bm],2],axe=[3,h,Khe,0,[Kp,wm,Zp],[1,1,1]],oxe=[3,h,qhe,0,[Kp,wm,Zp],[1,1,1]],sxe=[3,h,Jhe,0,[Kp,wm,Zp],[1,1,1]],Hm=[3,h,Xhe,8,[dm],[0]],Um=[3,h,Zhe,0,[ube,Tve,kbe,Rye,Cve,fve,Zve,cve],[()=>zxe,()=>Sxe,()=>Vxe,()=>Fxe,()=>wxe,[()=>fxe,0],()=>Axe,()=>qbe]],cxe=[3,h,ige,0,[Mm,Bp,um],[[()=>Km,0],()=>ah,[()=>Wm,0]]],lxe=[3,h,oge,0,[Dm],[[()=>Rm,0]]],uxe=[3,h,age,0,[Mm,Bp,um],[[()=>Km,0],()=>ah,[()=>Wm,0]]],Wm=[3,h,cge,0,[Nm,hm,Up],[0,[()=>oh,0],[()=>oh,0]]],dxe=[3,h,lge,0,[],[]],fxe=[3,h,uge,0,[Bve],[[()=>pSe,0]]],pxe=[3,h,dge,0,[eye,Oye],[0,0]],mxe=[3,h,mge,0,[Mm,Vp,Sve,um],[[()=>Km,0],[()=>Gm,0],[()=>Gm,0],[()=>Wm,0]]],Gm=[3,h,pge,0,[$ye],[[()=>oh,0]]],hxe=[3,h,vge,0,[cye,hye],[[()=>Gbe,0],[()=>Rm,0]]],gxe=[3,h,xge,0,[],[]],Km=[3,h,yge,0,[hm,Up,wbe,Cbe,Gp],[[()=>oh,0],[()=>oh,0],[()=>ih,0],[()=>ih,0],1]],_xe=[3,h,bge,0,[Cye,Fve],[[()=>hSe,0],[()=>fSe,0]]],vxe=[3,h,Cge,0,[Sbe],[[()=>mSe,0]]],yxe=[3,h,Tge,0,[Mm,Vp,Gye,um],[[()=>Km,0],[()=>Gm,0],()=>ah,[()=>Wm,0]]],bxe=[3,h,Ege,0,[nm,rm,jm],[0,0,0]],xxe=[3,h,Age,0,[Nm,Gp,Fp,zve,qp],[0,0,0,0,2],3],Sxe=[3,h,Lge,0,[$p],[()=>_Se],1],Cxe=[3,h,Mge,0,[Nm,ybe,Yye,Fp,qp],[0,1,1,0,2],4],wxe=[3,h,Pge,0,[$p],[()=>vSe]],Txe=[3,h,Fge,8,[Qp,Cm],[0,[()=>WSe,0]],2],Exe=[3,h,Rge,0,[Dm,_m],[0,64],1],qm=[3,h,Vge,0,[obe,tye],[()=>Lxe,()=>kxe]],Dxe=[3,h,zge,0,[fm,Fp,qp],[0,0,2],2],Oxe=[3,h,Hge,8,[Qp,Cm],[0,[()=>GSe,0]],2],kxe=[3,h,Uge,0,[im,km],[1,1]],Axe=[3,h,Wge,0,[qve,Pm,em],[1,()=>Jm,()=>qm]],jxe=[3,h,Kge,0,[fm,Nm,Fp,qp],[0,0,0,2],3],Mxe=[3,h,Jge,0,[Dm],[0]],Nxe=[3,h,Xge,0,[fm,Nm,Fp,qp],[0,0,0,2],3],Pxe=[3,h,Qge,0,[Fp,pm,fm,Pye,qp],[0,0,0,0,2],1],Fxe=[3,h,e_e,0,[Tye,Fye],[()=>SSe,()=>CSe],2],Ixe=[3,h,r_e,0,[Dm,_m],[0,64],1],Lxe=[3,h,i_e,0,[im,km],[1,1]],Rxe=[3,h,t_e,0,[pm,Nm,Fp,qp],[0,0,0,2],3],zxe=[3,h,o_e,0,[xbe],[()=>wSe],1],Bxe=[3,h,n_e,0,[uye,Yve,vye,Ip],[64,[()=>jSe,0],[()=>ASe,0],0]],Jm=[3,h,s_e,0,[dbe,Dve,Abe,Bye,zye,wve,Eve,pve,mve],[1,1,1,1,1,1,1,1,1],6],Vxe=[3,h,c_e,0,[kve,fye],[()=>ySe,()=>bSe],2],Ym=[3,h,l_e,0,[Qp,Cm,Xp],[0,[()=>KSe,0],[()=>Hm,0]],2],Hxe=[3,h,u_e,0,[dye,vbe,fbe,Kye],[1,1,1,64]],Uxe=[3,h,p_e,0,[Xye,pm,Jp],[0,0,0],1],Xm=[3,h,m_e,0,[Iye,Wp],[0,[()=>uSe,0]],2],Wxe=[3,h,b_e,0,[lbe,Lve],[[()=>Gxe,0],0]],Gxe=[3,h,x_e,0,[Nm,tbe],[0,[()=>qSe,0]],2],Zm=[3,h,C_e,0,[sye],[0]],Kxe=[3,h,w_e,0,[Qve],[0]],qxe=[3,h,A_e,8,[Dm,Zye],[0,0],1],Qm=[3,h,N_e,0,[Tbe,yve],[0,0],1],$m=[3,h,F_e,0,[Cm,Om,Wp,Hp],[0,0,()=>ESe,()=>Bm],3],Jxe=[3,h,I_e,0,[Dm],[0],1],Yxe=[3,h,R_e,0,[Uye,wm,Zp],[1,1,1]],eh=[3,h,z_e,0,[Nm],[0],1],Xxe=[3,h,B_e,0,[pm],[0],1],Zxe=[3,h,V_e,0,[pm],[0],1],Qxe=[3,h,eve,0,[sm,Sye,gbe,Ove,Ave,xve],[1,1,1,1,1,()=>oSe],3],$xe=[3,h,U_e,0,[Am],[()=>th],1],eSe=[3,h,W_e,0,[bbe,sbe],[()=>kSe,()=>QSe],1],th=[3,h,J_e,0,[Nm,pm,Vye],[0,0,0]],tSe=[3,h,Y_e,0,[Am],[()=>th],1],nSe=[3,h,X_e,0,[Em,Wp,Qye,Nm],[0,[()=>OSe,0],0,0],2],rSe=[3,h,$_e,0,[pm,$ve,Jp,ebe],[0,()=>$Se,0,2],2],iSe=[3,h,tve,0,[Em,pm,Jve,Nm],[0,0,15,0],3],nh=[3,h,ive,0,[Qp,Cm],[0,()=>tCe],2],aSe=[3,h,sve,0,[Ebe,Ive],[0,0]],oSe=[1,h,Ohe,0,()=>Qbe],sSe=[1,h,jhe,0,()=>FSe],cSe=[1,h,Vhe,0,()=>$be],lSe=[1,h,zhe,0,()=>LSe],uSe=[1,h,Che,0,[()=>RSe,0]],dSe=[1,h,Whe,0,()=>BSe],rh=[1,h,Qhe,0,[()=>Um,0]],fSe=[1,h,tge,0,[()=>Gm,0]],pSe=[1,h,rge,0,[()=>HSe,0]],ih=[1,h,sge,0,[()=>lxe,0]],ah=[1,h,fge,0,()=>pxe],oh=[1,h,hge,0,[()=>hxe,0]],mSe=[1,h,Sge,0,[()=>Km,0]],hSe=[1,h,wge,0,[()=>vxe,0]],gSe=[1,h,Oge,0,[()=>USe,0]],_Se=[1,h,jge,0,()=>xxe],vSe=[1,h,Nge,0,()=>Cxe],ySe=[1,h,Bge,0,()=>Dxe],bSe=[1,h,qge,0,()=>jxe],xSe=[1,h,Yge,0,()=>Mxe],SSe=[1,h,Zge,0,()=>Nxe],CSe=[1,h,$ge,0,()=>Pxe],wSe=[1,h,a_e,0,()=>Rxe],TSe=[1,h,y_e,0,[()=>Xm,0]],ESe=[1,h,L_e,0,()=>Jxe],DSe=[1,h,j_e,0,[()=>XSe,0]],OSe=[1,h,Z_e,0,[()=>eCe,0]],kSe=[1,h,nve,0,()=>ZSe],ASe=[2,h,$he,0,[0,0],[()=>rh,0]],jSe=[2,h,ege,0,[0,0],[()=>Um,0]],MSe=[2,h,T_e,8,0,()=>JSe],NSe=[2,h,O_e,8,0,0],PSe=[4,h,yhe,8,[Lp,ym],[21,()=>Qm]],FSe=[4,h,Ahe,0,[Dm],[0]],ISe=[4,h,Mhe,0,[Obe,Mve,Pve,Nve,Wye],[()=>aSe,()=>axe,()=>sxe,()=>oxe,()=>Yxe]],LSe=[4,h,Rhe,0,[Dm],[0]],RSe=[4,h,whe,0,[Dm,cm,Yp,Fm,_ve,_be,pbe,tm,zp,kye,bve,bm,rbe,mbe],[0,[()=>Ym,0],()=>Vm,()=>nh,[()=>Xbe,0],()=>iSe,[()=>nSe,0],[()=>sh,0],()=>zm,[()=>YSe,0],()=>exe,()=>$m,()=>$xe,()=>tSe]],zSe=[4,h,Phe,0,[dm],[[()=>Xm,0]]],BSe=[4,h,Ghe,0,[Dm],[0]],VSe=[4,h,Yhe,0,[Lp,ym,Dm,Wp],[21,()=>Qm,0,()=>dSe]],HSe=[4,h,nge,0,[Dbe,rye,Jye,nye,ibe,cbe,gye],[[()=>yxe,0],[()=>uxe,0],[()=>mxe,0],[()=>cxe,0],[()=>_xe,0],()=>gxe,()=>dxe]],USe=[4,h,Dge,0,[Dm,cm],[()=>Ixe,[()=>Oxe,0]]],sh=[4,h,kge,0,[Dm,cm],[()=>Exe,[()=>Txe,0]]],WSe=[4,h,Ige,8,[Lp],[21]],GSe=[4,h,Gge,8,[Lp],[21]],KSe=[4,h,d_e,8,[Lp,ym],[21,()=>Qm]],qSe=[4,h,S_e,8,[iye],[()=>Uxe]],JSe=[4,h,E_e,0,[Dm],[0]],YSe=[4,h,D_e,8,[Nye,Aye],[[()=>qxe,0],21]],XSe=[4,h,M_e,0,[Dm,tm,zp],[0,[()=>sh,0],()=>zm]],ZSe=[4,h,rve,0,[hbe,qye,zp],[()=>rSe,()=>Zxe,()=>zm]],QSe=[4,h,G_e,0,[vve,hve,Am],[()=>Zbe,()=>Kbe,()=>Xxe]],$Se=[4,h,q_e,0,[lm],[15]],eCe=[4,h,Q_e,0,[lm,Dm,cm,Yp,Fm,bm],[15,0,[()=>Ym,0],()=>Vm,()=>nh,()=>$m]],tCe=[4,h,ove,0,[Lp,ym],[21,()=>Qm]],nCe=[9,h,hhe,{[am]:[`POST`,`/guardrail/{guardrailIdentifier}/version/{guardrailVersion}/apply`,200]},()=>Jbe,()=>Ybe],rCe=[9,h,Hhe,{[am]:[`POST`,`/model/{modelId}/converse`,200]},()=>nxe,()=>rxe],iCe=e=>({apiVersion:`2023-09-30`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??ehe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Gme,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe},{schemeId:`smithy.api#httpBearerAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#httpBearerAuth`),signer:new Ot}],logger:e?.logger??new Ce,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockruntime`,errorTypeRegistries:Wbe,version:`2023-09-30`,serviceTarget:`AmazonBedrockFrontendService`},serviceId:e?.serviceId??`Bedrock Runtime`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),aCe=e=>{let t=te(e),n=()=>t().then(Ae),r=iCe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:Yme.version}),eventStreamPayloadHandlerProvider:e?.eventStreamPayloadHandlerProvider??Vme,eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:Mme.create(e?.requestHandler??n,u.create(n)),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},oCe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials,i=e.token;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r},setToken(e){i=e},token(){return i}}},sCe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials(),token:e.token()}),cCe=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),oCe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),sCe(n))},lCe=class extends tt{config;constructor(...[t]){let n=aCe(t||{});super(n),this.initConfig=n;let r=qme(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=cCe(Lme(kme(Kme(Af(dt(c))))),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:Hme,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials,"smithy.api#httpBearerAuth":e.token})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},uCe=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function dCe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ec2`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var fCe=e=>{let t=[];return e.operation,t.push(dCe(e)),t},pCe=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},mCe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ec2`}),hCe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},gCe={name:`@aws-sdk/client-ec2`,version:`3.1144.0`,description:`AWS SDK for JavaScript Ec2 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ec2`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ec2`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/middleware-sdk-ec2":`^3.972.60`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},ch=`ref`,lh=-1,uh=!0,dh=`isSet`,fh=`PartitionResult`,ph=`booleanEquals`,mh=`getAttr`,hh={[ch]:`Endpoint`},gh={[ch]:fh},_h={},vh=[{[ch]:`Region`}],yh={conditions:[[dh,[hh]],[dh,vh],[`aws.partition`,vh,fh],[ph,[{[ch]:`UseFIPS`},uh]],[ph,[{[ch]:`UseDualStack`},uh]],[ph,[{fn:mh,argv:[gh,`supportsDualStack`]},uh]],[ph,[{fn:mh,argv:[gh,`supportsFIPS`]},uh]],[`stringEquals`,[{fn:mh,argv:[gh,`name`]},`aws-us-gov`]]],results:[[lh],[lh,`Invalid Configuration: FIPS and custom endpoint are not supported`],[lh,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[hh,_h],[`https://ec2-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,_h],[lh,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://ec2.{Region}.amazonaws.com`,_h],[`https://ec2-fips.{Region}.{PartitionResult#dnsSuffix}`,_h],[lh,`FIPS is enabled but this partition does not support FIPS`],[`https://ec2.{Region}.{PartitionResult#dualStackDnsSuffix}`,_h],[lh,`DualStack is enabled but this partition does not support DualStack`],[`https://ec2.{Region}.{PartitionResult#dnsSuffix}`,_h],[lh,`Invalid Configuration: Missing Region`]]},_Ce=2,vCe=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),yCe=s.from(vCe,_Ce,yh.conditions,yh.results),bCe=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),xCe=(e,t={})=>bCe.get(e,()=>ze(yCe,{endpointParams:e,logger:t.logger}));lt.aws=de;var SCe=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},bh=`Address`,CCe=`AllocateAddressRequest`,wCe=`AllocateAddressResult`,TCe=`AssociateAddressRequest`,ECe=`AssociateAddressResult`,DCe=`AllAvailabilityZones`,OCe=`AllocateAddress`,kCe=`ApplianceArn`,ACe=`AssociateAddress`,jCe=`AttachedAppliances`,MCe=`AttributeBooleanValue`,xh=`AcceleratorCount`,Sh=`AssociateCarrierIpAddress`,NCe=`AcceleratorCountRequest`,PCe=`AdditionalFlexibleNetworkInterfaces`,FCe=`AvailableIpAddressCount`,Ch=`AssignIpv6AddressOnCreation`,ICe=`AttachInternetGateway`,LCe=`AttachInternetGatewayRequest`,RCe=`AssociateIamInstanceProfile`,zCe=`AssociateIamInstanceProfileRequest`,BCe=`AssociateIamInstanceProfileResult`,VCe=`AllocationIdList`,HCe=`AssociationIdList`,wh=`AllowedInstanceTypes`,UCe=`AllowedInstanceTypeSet`,WCe=`AllowedInstanceType`,Th=`AdditionalInfo`,Eh=`AllocationId`,Dh=`AllocationIds`,Oh=`AssociationId`,GCe=`AssociationIds`,kh=`AttachmentId`,KCe=`AmiLaunchIndex`,qCe=`AttachmentLimitType`,JCe=`AddressList`,YCe=`AcceleratorManufacturerSet`,Ah=`AcceleratorManufacturers`,XCe=`AcceleratorManufacturer`,jh=`AvailabilityMode`,ZCe=`AcceleratorNameSet`,Mh=`AcceleratorNames`,QCe=`AcceleratorName`,Nh=`AssociatePublicIpAddress`,$Ce=`AmazonProvidedIpv6CidrBlock`,ewe=`AutoProvisionZones`,twe=`AutoRecoverySupported`,nwe=`AssociateRouteTableRequest`,rwe=`AssociateRouteTableResult`,iwe=`AssociateRouteTable`,awe=`AllowReassociation`,owe=`AllRegions`,Ph=`AssociatedResource`,Fh=`AutoRecovery`,swe=`AuthorizeSecurityGroupEgress`,cwe=`AuthorizeSecurityGroupEgressRequest`,lwe=`AuthorizeSecurityGroupEgressResult`,uwe=`AuthorizeSecurityGroupIngressRequest`,dwe=`AuthorizeSecurityGroupIngressResult`,fwe=`AuthorizeSecurityGroupIngress`,pwe=`AutoScalingIps`,Ih=`AmdSevSnp`,Lh=`AssociationState`,mwe=`AttachmentState`,hwe=`ArchitectureTypeList`,Rh=`AcceleratorTotalMemoryMiB`,gwe=`AcceleratorTotalMemoryMiBRequest`,_we=`AcceleratorTypeSet`,zh=`AcceleratorTypes`,vwe=`AcceleratorType`,Bh=`AttachTime`,ywe=`AttachVolumeRequest`,bwe=`AttributeValue`,xwe=`AttachVolume`,Vh=`AvailabilityZone`,Hh=`AvailabilityZoneAddress`,Uh=`AvailabilityZoneAddresses`,Swe=`AvailabilityZoneGeography`,Cwe=`AvailabilityZoneGeographyList`,Wh=`AvailabilityZoneId`,wwe=`AvailabilityZoneList`,Twe=`AvailabilityZoneMessage`,Ewe=`AvailabilityZoneMessageList`,Dwe=`AvailabilityZoneSubGeography`,Owe=`AvailabilityZoneSubGeographyList`,kwe=`AvailabilityZones`,Gh=`Accelerators`,Awe=`Addresses`,Kh=`Affinity`,qh=`Arn`,Jh=`Architecture`,jwe=`Associations`,Yh=`Association`,Mwe=`Attribute`,Xh=`Attachment`,Zh=`Attachments`,Nwe=`BaselineBandwidthInGbps`,Qh=`BaselineBandwidthInMbps`,$h=`BlockDeviceMapping`,Pwe=`BlockDeviceMappingList`,Fwe=`BlockDeviceMappingRequestList`,eg=`BlockDeviceMappings`,tg=`BlockDurationMinutes`,ng=`BaselineEbsBandwidthMbps`,Iwe=`BaselineEbsBandwidthMbpsRequest`,rg=`BaselineIops`,ig=`BootMode`,Lwe=`BootModeOverride`,Rwe=`BootModeTypeList`,ag=`BareMetal`,og=`BurstablePerformance`,sg=`BlockPublicAccessStates`,cg=`BaselinePerformanceFactors`,zwe=`BaselinePerformanceFactorsRequest`,Bwe=`BillingProductList`,Vwe=`BurstablePerformanceSupported`,Hwe=`BillingProducts`,Uwe=`BillingProduct`,lg=`BaselineThroughputInMBps`,ug=`BandwidthWeighting`,Wwe=`BandwidthWeightingTypeList`,Gwe=`BandwidthWeightings`,dg=`CidrBlock`,Kwe=`CidrBlockAssociationSet`,qwe=`CapacityBlockId`,Jwe=`CidrBlockState`,fg=`CreatedBy`,Ywe=`CoreCountList`,pg=`CoreCount`,mg=`CpuCredits`,hg=`CompletionDurationMinutes`,Xwe=`CreationDate`,gg=`CarrierGatewayId`,Zwe=`CurrentGeneration`,_g=`CarrierIp`,Qwe=`CurrentInstanceBootMode`,$we=`CreateInternetGateway`,eTe=`CreateInternetGatewayRequest`,tTe=`CreateInternetGatewayResult`,nTe=`CreateImageRequest`,rTe=`CreateImageResult`,vg=`CidrIp`,yg=`CidrIpv6`,bg=`CidrIpv4`,iTe=`CoreInfo`,aTe=`CreateImage`,oTe=`CreateKeyPair`,sTe=`CreateKeyPairRequest`,cTe=`CreateLaunchTemplate`,lTe=`CreateLaunchTemplateRequest`,uTe=`CreateLaunchTemplateResult`,dTe=`CreateLaunchTemplateVersion`,fTe=`CreateLaunchTemplateVersionRequest`,pTe=`CreateLaunchTemplateVersionResult`,xg=`CpuManufacturers`,mTe=`CpuManufacturerSet`,hTe=`CpuManufacturer`,Sg=`CoreNetworkArn`,gTe=`CreateNatGateway`,_Te=`CreateNatGatewayRequest`,vTe=`CreateNatGatewayResult`,Cg=`CpuOptions`,wg=`CustomerOwnedIp`,Tg=`CustomerOwnedIpv4Pool`,yTe=`CpuOptionsRequest`,bTe=`CpuPerformanceFactor`,xTe=`CpuPerformanceFactorRequest`,STe=`CreatePlacementGroup`,CTe=`CreatePlacementGroupRequest`,wTe=`CreatePlacementGroupResult`,Eg=`CapacityReservationId`,Dg=`CapacityReservationPreference`,TTe=`CreateRouteRequest`,Og=`CapacityReservationResourceGroupArn`,ETe=`CreateRouteResult`,DTe=`CapacityReservationSpecificationResponse`,kg=`CapacityReservationSpecification`,Ag=`CapacityReservationTarget`,OTe=`CapacityReservationTargetResponse`,kTe=`CreateRouteTableRequest`,ATe=`CreateRouteTableResult`,jTe=`CreateRouteTable`,MTe=`CreateRoute`,NTe=`CreateSecurityGroup`,jg=`CreateSecurityGroupRequest`,Mg=`CreateSecurityGroupResult`,Ng=`CopySnapshotRequest`,Pg=`CopySnapshotRequestPSU`,Fg=`CopySnapshotResult`,Ig=`CreateSnapshotRequest`,Lg=`CreateSubnetRequest`,Rg=`CreateSubnetResult`,zg=`CreditSpecificationRequest`,Bg=`CopySnapshot`,Vg=`CreditSpecification`,Hg=`CreateSnapshot`,Ug=`CreateSubnet`,Wg=`CurrentState`,Gg=`ClientToken`,Kg=`ConnectionTrackingConfiguration`,qg=`ConnectionTrackingSpecification`,Jg=`ConnectionTrackingSpecificationRequest`,Yg=`ConnectionTrackingSpecificationResponse`,Xg=`CompletionTime`,Zg=`ConnectivityType`,Qg=`CreateTime`,$g=`CreateVolumeRequest`,e_=`CreateVpcRequest`,t_=`CreateVpcResult`,n_=`CreateVolume`,r_=`CreateVpc`,i_=`Code`,a_=`Configured`,o_=`Count`,s_=`Cpu`,c_=`DescribeAddressesRequest`,l_=`DescribeAddressesResult`,u_=`DisassociateAddressRequest`,d_=`DeleteAssociatedSnapshots`,f_=`DisableApiStop`,p_=`DisableApiTermination`,m_=`DestinationAvailabilityZone`,h_=`DescribeAvailabilityZonesRequest`,g_=`DescribeAvailabilityZonesResult`,__=`DescribeAvailabilityZones`,v_=`DescribeAddresses`,y_=`DisassociateAddress`,b_=`DestinationCidrBlock`,x_=`DefaultConnectionTrackingConfiguration`,S_=`DefaultCores`,C_=`DataEncryptionKeyId`,w_=`DefaultEnaQueueCountPerInterface`,T_=`DefaultForAz`,E_=`DedicatedHostsSupported`,D_=`DeviceIndex`,O_=`DestinationIpv6CidrBlock`,k_=`DeleteInternetGateway`,A_=`DeleteInternetGatewayRequest`,j_=`DescribeInternetGatewaysRequest`,M_=`DescribeInternetGatewaysResult`,N_=`DetachInternetGatewayRequest`,P_=`DescribeInternetGateways`,F_=`DetachInternetGateway`,I_=`DisassociateIamInstanceProfile`,L_=`DescribeIamInstanceProfileAssociations`,R_=`DescribeIamInstanceProfileAssociationsRequest`,z_=`DescribeIamInstanceProfileAssociationsResult`,B_=`DisassociateIamInstanceProfileRequest`,V_=`DisassociateIamInstanceProfileResult`,H_=`DiskInfoList`,U_=`DeregisterImageRequest`,W_=`DeregisterImageResult`,G_=`DescribeImagesRequest`,K_=`DescribeImagesResult`,q_=`DescribeInstancesRequest`,J_=`DescribeInstancesResult`,Y_=`DescribeInstanceTypesRequest`,X_=`DescribeInstanceTypesResult`,Z_=`DescribeInstanceTypes`,Q_=`DeregisterImage`,$_=`DescribeImages`,ev=`DescribeInstances`,tv=`DiskInfo`,nv=`DeleteKeyPair`,rv=`DeleteKeyPairRequest`,iv=`DeleteKeyPairResult`,av=`DescribeKeyPairsRequest`,ov=`DescribeKeyPairsResult`,sv=`DescribeKeyPairs`,cv=`DisableLniAtDeviceIndex`,lv=`DeleteLaunchTemplate`,uv=`DeleteLaunchTemplateRequest`,dv=`DeleteLaunchTemplateResult`,fv=`DescribeLaunchTemplatesRequest`,pv=`DescribeLaunchTemplatesResult`,mv=`DeleteLaunchTemplateVersions`,hv=`DeleteLaunchTemplateVersionsRequest`,gv=`DeleteLaunchTemplateVersionsResponseErrorItem`,_v=`DeleteLaunchTemplateVersionsResponseErrorSet`,vv=`DeleteLaunchTemplateVersionsResponseSuccessItem`,yv=`DeleteLaunchTemplateVersionsResponseSuccessSet`,bv=`DeleteLaunchTemplateVersionsResult`,xv=`DescribeLaunchTemplateVersionsRequest`,Sv=`DescribeLaunchTemplateVersionsResult`,Cv=`DescribeLaunchTemplateVersions`,wv=`DescribeLaunchTemplates`,Tv=`DeviceName`,Ev=`DefaultNetworkCardIndex`,Dv=`DeleteNatGateway`,Ov=`DeleteNatGatewayRequest`,kv=`DeleteNatGatewayResult`,Av=`DescribeNatGatewaysRequest`,jv=`DescribeNatGatewaysResult`,Mv=`DescribeNatGateways`,Nv=`DestinationOutpostArn`,Pv=`DhcpOptionsId`,Fv=`DeleteOnTermination`,Iv=`DeletePlacementGroup`,Lv=`DeletePlacementGroupRequest`,Rv=`DescribePlacementGroupsRequest`,zv=`DescribePlacementGroupsResult`,Bv=`DescribePlacementGroups`,Vv=`DestinationPrefixListId`,Hv=`DeregistrationProtection`,g=`DryRun`,Uv=`DeleteRouteRequest`,Wv=`DescribeRegionsRequest`,Gv=`DescribeRegionsResult`,Kv=`DeleteRouteTable`,qv=`DeleteRouteTableRequest`,Jv=`DescribeRouteTablesRequest`,Yv=`DescribeRouteTablesResult`,Xv=`DisassociateRouteTableRequest`,Zv=`DescribeRouteTables`,Qv=`DisassociateRouteTable`,$v=`DestinationRegion`,ey=`DeleteRoute`,ty=`DescribeRegions`,ny=`DeleteSecurityGroup`,ry=`DeleteSecurityGroupRequest`,iy=`DeleteSecurityGroupResult`,ay=`DescribeSecurityGroupsRequest`,oy=`DescribeSecurityGroupsResult`,sy=`DescribeSecurityGroups`,cy=`DeleteSnapshotRequest`,ly=`DeleteSnapshotReturnCode`,uy=`DeleteSnapshotResultSet`,dy=`DeleteSubnetRequest`,fy=`DeleteSnapshotResults`,py=`DescribeSnapshotsRequest`,my=`DescribeSnapshotsResult`,hy=`DescribeSubnetsRequest`,gy=`DescribeSubnetsResult`,_y=`DeleteSnapshot`,vy=`DeleteSubnet`,yy=`DescribeSnapshots`,by=`DescribeSubnets`,xy=`DefaultTcpEstablishedTimeout`,Sy=`DefaultThreadsPerCore`,Cy=`DeprecationTime`,wy=`DeleteTime`,Ty=`DefaultUdpStreamTimeout`,Ey=`DefaultUdpTimeout`,Dy=`DefaultVCpus`,Oy=`DefaultVersionNumber`,ky=`DeleteVolumeRequest`,Ay=`DeleteVpcRequest`,jy=`DescribeVolumesRequest`,My=`DescribeVolumesResult`,Ny=`DescribeVpcsRequest`,Py=`DescribeVpcsResult`,Fy=`DetachVolumeRequest`,Iy=`DefaultVersion`,Ly=`DeleteVolume`,Ry=`DeleteVpc`,zy=`DescribeVolumes`,By=`DescribeVpcs`,Vy=`DetachVolume`,Hy=`Description`,Uy=`Device`,Wy=`Disks`,Gy=`Domain`,Ky=`EbsBlockDevice`,qy=`ExecutableByStringList`,Jy=`ExecutableBy`,Yy=`EbsCardIndex`,Xy=`EbsCardInfoList`,Zy=`EbsCardInfo`,Qy=`EbsCards`,$y=`EncryptionControl`,eb=`EnableDns64`,tb=`ElasticFileSystem`,nb=`ElasticFileSystemExclusion`,rb=`ElasticGpuAssociation`,ib=`ElasticGpuAssociationId`,ab=`ElasticGpuAssociationList`,ob=`ElasticGpuAssociationState`,sb=`ElasticGpuAssociationTime`,cb=`ElasticGpuAssociations`,lb=`ElasticGpuId`,ub=`ElasticGpuSpecificationList`,db=`ElasticGpuSpecificationResponse`,fb=`ElasticGpuSpecificationResponseList`,pb=`ElasticGpuSpecification`,mb=`ElasticGpuSpecifications`,hb=`ElasticInferenceAccelerator`,gb=`ElasticInferenceAcceleratorAssociation`,_b=`ElasticInferenceAcceleratorAssociationId`,vb=`ElasticInferenceAcceleratorAssociationList`,yb=`ElasticInferenceAcceleratorAssociationState`,bb=`ElasticInferenceAcceleratorAssociationTime`,xb=`ElasticInferenceAcceleratorArn`,Sb=`ElasticInferenceAcceleratorAssociations`,Cb=`ElasticInferenceAccelerators`,wb=`EbsInstanceBlockDevice`,Tb=`EbsInstanceBlockDeviceSpecification`,Eb=`EncryptionInTransitSupported`,Db=`ExcludedInstanceTypeSet`,Ob=`ExcludedInstanceTypes`,kb=`ExcludedInstanceType`,Ab=`EbsInfo`,jb=`EfaInfo`,Mb=`EnableLniAtDeviceIndex`,Nb=`EbsOptimized`,Pb=`EbsOptimizedInfo`,Fb=`EgressOnlyInternetGateway`,Ib=`EgressOnlyInternetGatewayExclusion`,Lb=`EgressOnlyInternetGatewayId`,Rb=`EnclaveOptionsRequest`,zb=`EbsOptimizedSupport`,Bb=`EnclaveOptions`,Vb=`EnablePrimaryIpv6`,Hb=`EnaQueueCount`,Ub=`EnableResourceNameDnsAAAARecord`,Wb=`EnableResourceNameDnsAAAARecordOnLaunch`,Gb=`EnableResourceNameDnsARecord`,Kb=`EnableResourceNameDnsARecordOnLaunch`,qb=`EnaSrdEnabled`,Jb=`EnaSrdSpecification`,Yb=`EnaSrdSpecificationRequest`,Xb=`EnaSrdSupported`,Zb=`EnaSrdUdpEnabled`,Qb=`EnaSrdUdpSpecification`,$b=`EnaSrdUdpSpecificationRequest`,ex=`EfaSupported`,tx=`EncryptionSupport`,nx=`EnaSupport`,rx=`ErrorSet`,ix=`EndTime`,ax=`ExecutableUsers`,ox=`Ebs`,sx=`Enabled`,cx=`Encrypted`,lx=`Endpoint`,ux=`Errors`,dx=`Force`,fx=`FailureCode`,px=`FpgaDeviceInfo`,mx=`FpgaDeviceInfoList`,hx=`FpgaDeviceMemoryInfo`,gx=`FlexibleEnaQueuesSupport`,_x=`FpgaInfo`,vx=`FilterList`,yx=`FailureMessage`,bx=`FromPort`,xx=`FastRestored`,Sx=`FullSnapshotSizeInBytes`,Cx=`FreeTierEligible`,wx=`Filters`,Tx=`Filter`,Ex=`Fpgas`,Dx=`Groups`,Ox=`GroupArn`,kx=`GetConsoleOutput`,Ax=`GetConsoleOutputRequest`,jx=`GetConsoleOutputResult`,Mx=`GroupDescription`,Nx=`GpuDeviceInfo`,Px=`GpuDeviceInfoList`,Fx=`GpuDeviceMemoryInfo`,Ix=`GatewayId`,Lx=`GroupIdentifierList`,Rx=`GroupIdStringList`,zx=`GpuInfo`,Bx=`GroupId`,Vx=`GroupIds`,Hx=`GroupIdentifier`,Ux=`GroupLongName`,Wx=`GroupName`,Gx=`GroupNameStringList`,Kx=`GroupNames`,qx=`GroupOwnerId`,Jx=`GpuPartitionSize`,Yx=`Geography`,Xx=`Gpus`,Zx=`HiddenByDefault`,Qx=`HttpEndpoint`,$x=`HostId`,eS=`HibernationOptions`,tS=`HibernationOptionsRequest`,nS=`HttpProtocolIpv6`,rS=`HttpPutResponseHopLimit`,iS=`HostResourceGroupArn`,aS=`HibernationSupported`,oS=`HttpTokens`,sS=`HostnameType`,cS=`Hibernate`,lS=`Hypervisor`,uS=`Id`,dS=`Ipv6Addresses`,fS=`Ipv6AddressAttribute`,pS=`Ipv6AddressCount`,mS=`InstanceAttachmentEnaSrdSpecification`,hS=`InstanceAttachmentEnaSrdUdpSpecification`,gS=`InferenceAcceleratorInfo`,_S=`Ipv4AddressesPerInterface`,vS=`Ipv6AddressesPerInterface`,yS=`Ipv4AddressesPerSecondaryInterface`,bS=`ImageAllowed`,xS=`IpAddress`,SS=`Ipv6Address`,CS=`InstanceBlockDeviceMapping`,wS=`InstanceBlockDeviceMappingList`,TS=`InstanceBlockDeviceMappingSpecification`,ES=`InstanceBlockDeviceMappingSpecificationList`,DS=`Ipv6CidrBlock`,OS=`Ipv6CidrBlockAssociationSet`,kS=`Ipv6CidrBlockNetworkBorderGroup`,AS=`Ipv6CidrBlockState`,jS=`IncludeDeprecated`,MS=`InferenceDeviceInfo`,NS=`InferenceDeviceInfoList`,PS=`InferenceDeviceMemoryInfo`,FS=`IncludeDisabled`,IS=`IsDefault`,LS=`IsEgress`,RS=`InstanceFamily`,zS=`InternetGateway`,BS=`InternetGatewayAttachment`,VS=`InternetGatewayAttachmentList`,HS=`InternetGatewayBlockMode`,US=`InternetGatewayExclusion`,WS=`InternetGatewayId`,GS=`InternetGatewayIdList`,KS=`InternetGatewayIds`,qS=`InternetGatewayList`,JS=`InstanceGenerationSet`,YS=`InternetGateways`,XS=`InstanceGenerations`,ZS=`InstanceGeneration`,QS=`InstanceId`,$S=`InstanceIpv6Address`,eC=`InstanceIpv6AddressList`,tC=`InstanceIpv6AddressListRequest`,nC=`InstanceIpv6AddressRequest`,rC=`InstanceInterruptionBehavior`,iC=`IamInstanceProfile`,aC=`IamInstanceProfileAssociation`,oC=`IamInstanceProfileAssociationSet`,sC=`IamInstanceProfileAssociations`,cC=`Ipv6IpamPoolId`,lC=`Ipv4IpamPoolId`,uC=`InstanceIpv4PrefixList`,dC=`InstanceIpv6PrefixList`,fC=`IamInstanceProfileSpecification`,pC=`InstanceIpv4Prefix`,mC=`InstanceIpv6Prefix`,hC=`InstanceInitiatedShutdownBehavior`,gC=`ImageIdStringList`,_C=`InstanceIdStringList`,vC=`ImageId`,yC=`ImageIds`,bC=`InstanceIds`,xC=`ImportKeyPair`,SC=`ImportKeyPairRequest`,CC=`ImportKeyPairResult`,wC=`ImageLocation`,TC=`ImageList`,EC=`InstanceLifecycle`,DC=`InstanceList`,OC=`IpList`,kC=`InstanceMaintenanceOptions`,AC=`InstanceMaintenanceOptionsRequest`,jC=`InstanceMarketOptionsRequest`,MC=`InstanceMetadataOptionsRequest`,NC=`InstanceMetadataOptionsResponse`,PC=`InstanceMarketOptions`,FC=`IncludeManagedResources`,IC=`InstanceMetadataTags`,LC=`Ipv6Native`,RC=`InstanceNetworkInterface`,zC=`InstanceNetworkInterfaceAssociation`,BC=`InstanceNetworkInterfaceAttachment`,VC=`InstanceNetworkInterfaceList`,HC=`InstanceNetworkInterfaceSpecification`,UC=`InstanceNetworkInterfaceSpecificationList`,WC=`Ipv6NetmaskLength`,GC=`Ipv4NetmaskLength`,KC=`InstanceNetworkPerformanceOptions`,qC=`InstanceNetworkPerformanceOptionsRequest`,JC=`ImageOwnerAlias`,YC=`IpOwnerId`,XC=`InstanceOwnerId`,ZC=`InstanceOwningService`,QC=`Ipv6PrefixCount`,$C=`Ipv4PrefixCount`,ew=`IpPermissionsEgress`,tw=`IpamPoolId`,nw=`InstancePrivateIpAddress`,rw=`InstancePrivateIpAddressList`,iw=`IsPrimaryIpv6`,aw=`IncludePublicKey`,ow=`Ipv4PrefixListResponse`,sw=`Ipv6PrefixListResponse`,cw=`IpPermissionList`,lw=`Ipv4PrefixList`,uw=`Ipv6PrefixList`,dw=`Ipv4PrefixSpecificationRequest`,fw=`Ipv4PrefixSpecificationResponse`,pw=`Ipv6PrefixSpecificationRequest`,mw=`Ipv6PrefixSpecificationResponse`,hw=`Ipv6Prefixes`,gw=`IpPermissions`,_w=`IpPermission`,vw=`IpProtocol`,yw=`Ipv6Prefix`,bw=`Ipv6Pool`,xw=`Ipv4Prefixes`,Sw=`Ipv4Prefix`,Cw=`IsPrimary`,ww=`IpRangeList`,Tw=`Ipv6RangeList`,Ew=`InstanceRequirementsRequest`,Dw=`InstanceRequirements`,Ow=`IpRanges`,kw=`IpRange`,Aw=`Ipv6Ranges`,jw=`Ipv6Range`,Mw=`InstanceStateChange`,Nw=`InstanceStateChangeList`,Pw=`InstanceSecondaryInterfaceAttachment`,Fw=`InstanceSecondaryInterfaceList`,Iw=`InstanceSecondaryInterfacePrivateIpAddress`,Lw=`InstanceSecondaryInterfacePrivateIpAddressList`,Rw=`InstanceSecondaryInterfacePrivateIpAddressListRequest`,zw=`InstanceSecondaryInterfacePrivateIpAddressRequest`,Bw=`InstanceSecondaryInterfaceSpecification`,Vw=`InstanceSecondaryInterfaceSpecificationListRequest`,Hw=`InstanceSecondaryInterfaceSpecificationRequest`,Uw=`InstanceSecondaryInterface`,Ww=`InstanceStorageInfo`,Gw=`InstanceStorageSupported`,Kw=`ImdsSupport`,qw=`InstanceState`,Jw=`IpSource`,Yw=`Ipv6Supported`,Xw=`InstanceType`,Zw=`InstanceTypeInfoList`,Qw=`InstanceTypeInfo`,$w=`InstanceTypeItem`,eT=`InstanceTypeSpecification`,tT=`ImageType`,nT=`InstanceTenancy`,rT=`InstanceTypes`,iT=`InterfaceType`,aT=`InterfaceTypes`,oT=`ImageUefiDataRequest`,sT=`IncludeUnsupportedInRegion`,cT=`ImageWatermarks`,lT=`ImageWatermarkList`,uT=`ImageWatermark`,dT=`Images`,fT=`Image`,pT=`Instance`,mT=`Instances`,hT=`Iops`,gT=`Key`,_T=`KeyFormat`,vT=`KeyFingerprint`,yT=`KernelId`,bT=`KmsKeyId`,xT=`KeyMaterial`,ST=`KeyName`,CT=`KeyNameStringList`,wT=`KeyNames`,TT=`KeyPairs`,ET=`KeyPairId`,DT=`KeyPairIdStringList`,OT=`KeyPairIds`,kT=`KeyPairInfo`,AT=`KeyPairList`,jT=`KeyPair`,MT=`KeyType`,NT=`Kernel`,PT=`Lambda`,FT=`LicenseConfigurationArn`,IT=`LicenseConfigurationRequest`,LT=`LicenseConfiguration`,RT=`LambdaExclusion`,zT=`LogicalGpuCount`,BT=`LocalGatewayId`,VT=`LinkedGroupId`,HT=`LicenseList`,UT=`LastLaunchedTime`,WT=`LicenseSpecificationListRequest`,GT=`LocalStorageTypes`,KT=`LocalStorageTypeSet`,qT=`LocalStorageType`,JT=`LicenseSpecifications`,YT=`LicenseSpecification`,XT=`LocalStorage`,ZT=`LaunchTemplate`,QT=`LaunchTemplateBlockDeviceMapping`,$T=`LaunchTemplateBlockDeviceMappingList`,eE=`LaunchTemplateBlockDeviceMappingRequest`,tE=`LaunchTemplateBlockDeviceMappingRequestList`,nE=`LaunchTemplateCpuOptions`,rE=`LaunchTemplateCpuOptionsRequest`,iE=`LaunchTemplateCapacityReservationSpecificationRequest`,aE=`LaunchTemplateCapacityReservationSpecificationResponse`,oE=`LaunchTemplateData`,sE=`LaunchTemplateEbsBlockDevice`,cE=`LaunchTemplateEbsBlockDeviceRequest`,lE=`LaunchTemplateElasticInferenceAccelerator`,uE=`LaunchTemplateElasticInferenceAcceleratorList`,dE=`LaunchTemplateElasticInferenceAcceleratorResponse`,fE=`LaunchTemplateElasticInferenceAcceleratorResponseList`,pE=`LaunchTemplateEnclaveOptions`,mE=`LaunchTemplateEnclaveOptionsRequest`,hE=`LaunchTemplateEnaSrdSpecification`,gE=`LaunchTemplateEnaSrdUdpSpecification`,_E=`LaunchTemplateHibernationOptions`,vE=`LaunchTemplateHibernationOptionsRequest`,yE=`LaunchTemplateId`,bE=`LaunchTemplateIamInstanceProfileSpecification`,xE=`LaunchTemplateIamInstanceProfileSpecificationRequest`,SE=`LaunchTemplateInstanceMaintenanceOptions`,CE=`LaunchTemplateInstanceMaintenanceOptionsRequest`,wE=`LaunchTemplateInstanceMarketOptionsRequest`,TE=`LaunchTemplateInstanceMetadataOptionsRequest`,EE=`LaunchTemplateInstanceMarketOptions`,DE=`LaunchTemplateInstanceMetadataOptions`,OE=`LaunchTemplateInstanceNetworkInterfaceSpecification`,kE=`LaunchTemplateInstanceNetworkInterfaceSpecificationList`,AE=`LaunchTemplateInstanceNetworkInterfaceSpecificationRequest`,jE=`LaunchTemplateInstanceNetworkInterfaceSpecificationRequestList`,ME=`LaunchTemplateInstanceSecondaryInterfaceSpecification`,NE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationList`,PE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationRequest`,FE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationRequestList`,IE=`LaunchTemplateIdStringList`,LE=`LaunchTemplateIds`,RE=`LaunchTemplateLicenseConfiguration`,zE=`LaunchTemplateLicenseConfigurationRequest`,BE=`LaunchTemplateLicenseList`,VE=`LaunchTemplateLicenseSpecificationListRequest`,HE=`LaunchTemplatesMonitoring`,UE=`LaunchTemplatesMonitoringRequest`,WE=`LaunchTemplateName`,GE=`LaunchTemplateNetworkPerformanceOptions`,KE=`LaunchTemplateNetworkPerformanceOptionsRequest`,qE=`LaunchTemplateNameStringList`,JE=`LaunchTemplateNames`,YE=`LaunchTemplatePlacement`,XE=`LaunchTemplatePrivateDnsNameOptions`,ZE=`LaunchTemplatePrivateDnsNameOptionsRequest`,QE=`LaunchTemplatePlacementRequest`,$E=`LaunchTemplateSpecification`,eD=`LaunchTemplateSpotMarketOptions`,tD=`LaunchTemplateSpotMarketOptionsRequest`,nD=`LaunchTemplateSet`,rD=`LaunchTemplateTagSpecification`,iD=`LaunchTemplateTagSpecificationList`,aD=`LaunchTemplateTagSpecificationRequest`,oD=`LaunchTemplateTagSpecificationRequestList`,sD=`LaunchTemplateVersion`,cD=`LaunchTemplateVersionSet`,lD=`LaunchTemplateVersions`,uD=`LaunchTemplates`,dD=`LaunchTime`,fD=`LatestVersionNumber`,pD=`Latest`,mD=`Licenses`,hD=`Location`,gD=`Min`,_D=`MultiAttachEnabled`,vD=`MediaAcceleratorInfo`,yD=`MacAddress`,bD=`MaximumBandwidthInMbps`,xD=`MapCustomerOwnedIpOnLaunch`,SD=`MaxCount`,CD=`MinCount`,wD=`MediaDeviceInfo`,TD=`MediaDeviceInfoList`,ED=`MediaDeviceMemoryInfo`,DD=`MaximumEbsAttachments`,OD=`MaximumEbsCards`,kD=`MaximumEfaInterfaces`,AD=`MaximumEnaQueueCount`,jD=`MaximumEnaQueueCountPerInterface`,MD=`MemoryGiBPerVCpu`,ND=`MemoryGiBPerVCpuRequest`,PD=`MaximumIops`,FD=`ModifyInstanceAttributeRequest`,ID=`ModifyInstanceAttributeValue`,LD=`ModifyInstanceAttribute`,RD=`MemoryInfo`,zD=`ModifyLaunchTemplate`,BD=`ModifyLaunchTemplateRequest`,VD=`ModifyLaunchTemplateResult`,HD=`MemoryMiB`,UD=`MemoryMiBRequest`,WD=`MaximumNetworkCards`,GD=`MaximumNetworkInterfaces`,KD=`MetadataOptions`,qD=`MaintenanceOptions`,JD=`MapPublicIpOnLaunch`,YD=`MaxPrice`,XD=`MaxResults`,ZD=`ModifySubnetAttributeRequest`,QD=`ModifySubnetAttribute`,$D=`MaximumSecondaryNetworkInterfaces`,eO=`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`,tO=`ModificationState`,nO=`MaximumThroughputInMBps`,rO=`MarketType`,iO=`MinVersion`,aO=`ModifyVolumeRequest`,oO=`ModifyVolumeResult`,sO=`MaxVersion`,cO=`ModifyVolume`,lO=`Max`,uO=`Main`,dO=`Manufacturer`,fO=`Managed`,pO=`Message`,mO=`Messages`,hO=`Mode`,gO=`Monitoring`,_O=`Name`,vO=`NetworkBorderGroup`,yO=`NetworkBandwidthGbpsRequest`,bO=`NetworkBandwidthGbps`,xO=`NetworkCards`,SO=`NetworkCardIndex`,CO=`NetworkCardInfoList`,wO=`NetworkCardInterfaceTypeList`,TO=`NetworkCardInfo`,EO=`NoDevice`,DO=`NeuronDeviceCoreInfo`,OO=`NeuronDeviceInfo`,kO=`NeuronDeviceInfoList`,AO=`NeuronDeviceMemoryInfo`,jO=`NeuronDevices`,MO=`NitroEnclavesSupport`,NO=`NatGateway`,PO=`NatGatewayAddresses`,FO=`NatGatewayAttachedAppliance`,IO=`NatGatewayAttachedApplianceList`,LO=`NatGatewayAddressList`,RO=`NatGatewayAddress`,zO=`NatGatewayExclusion`,BO=`NatGatewayId`,VO=`NatGatewayIdStringList`,HO=`NatGatewayIds`,UO=`NatGatewayList`,WO=`NatGateways`,GO=`NetworkInterfaceCount`,KO=`NetworkInterfaceCountRequest`,qO=`NetworkInterfaceId`,JO=`NetworkInterfaceOwnerId`,YO=`NetworkInterface`,XO=`NetworkInterfaces`,ZO=`NetworkInfo`,QO=`NeuronInfo`,$O=`NetworkPerformanceOptions`,ek=`NetworkPerformance`,tk=`NoReboot`,nk=`NvmeSupport`,rk=`NitroTpmInfo`,ik=`NitroTpmSupport`,ak=`NitroTpmSupportedVersionsList`,ok=`NextToken`,sk=`NestedVirtualization`,ck=`Origin`,lk=`OutpostArn`,uk=`OwnerAlias`,dk=`OnDemandMaxPricePercentageOverLowestPrice`,fk=`OwnerId`,pk=`OptInStatus`,mk=`OriginalIops`,hk=`OwnerIds`,gk=`OriginalMultiAttachEnabled`,_k=`OdbNetworkArn`,vk=`OperatorRequest`,yk=`OperatorResponse`,bk=`OwnerStringList`,xk=`OriginalSize`,Sk=`OriginalThroughput`,Ck=`OriginalVolumeType`,wk=`Operator`,Tk=`Output`,Ek=`Owners`,Dk=`Owner`,Ok=`Principal`,kk=`ProvisionedBandwidth`,Ak=`PeakBandwidthInGbps`,jk=`ProductCodeId`,Mk=`ProductCodeList`,Nk=`ProductCodeType`,Pk=`PartitionCount`,Fk=`ProductCode`,Ik=`ProductCodes`,Lk=`PrivateDnsHostnameTypeOnLaunch`,Rk=`PrivateDnsName`,zk=`PrivateDnsNameOptions`,Bk=`PrivateDnsNameOptionsOnLaunch`,Vk=`PrivateDnsNameOptionsRequest`,Hk=`PrivateDnsNameOptionsResponse`,Uk=`PublicDnsName`,Wk=`PlatformDetails`,Gk=`PerformanceFactorReference`,Kk=`PerformanceFactorReferenceRequest`,qk=`PerformanceFactorReferenceSet`,Jk=`PerformanceFactorReferenceSetRequest`,Yk=`PlacementGroup`,Xk=`ParentGroupId`,Zk=`PlacementGroupIdStringList`,Qk=`PlacementGroupInfo`,$k=`PlacementGroupList`,eA=`PlacementGroupStrategyList`,tA=`PlacementGroups`,nA=`PublicIp`,rA=`PrivateIpAddressCount`,iA=`PrivateIpAddressSpecification`,aA=`PrivateIpAddressSpecificationList`,oA=`PrivateIpAddress`,sA=`PrivateIpAddresses`,cA=`PublicIpAddress`,lA=`PublicIpv4Pool`,uA=`PublicIpStringList`,dA=`PrimaryIpv6`,fA=`PrivateIp`,pA=`ProcessorInfo`,mA=`PublicIps`,hA=`PublicKey`,gA=`PublicKeyMaterial`,_A=`PrefixListId`,vA=`PrefixListIdList`,yA=`PrefixListIds`,bA=`PartitionNumber`,xA=`PublicSsmParameterName`,SA=`PeeringStatus`,CA=`PhcSupport`,wA=`PreviousState`,TA=`ProvisionTime`,EA=`PresignedUrl`,DA=`PropagatingVgw`,OA=`PropagatingVgwList`,kA=`PropagatingVgws`,AA=`ParentZoneId`,jA=`ParentZoneName`,MA=`Platform`,NA=`Placement`,PA=`Primary`,FA=`Progress`,IA=`Provisioned`,LA=`Public`,RA=`Return`,zA=`ReleaseAddressRequest`,BA=`ReleaseAddress`,VA=`ResolveAlias`,HA=`RestorableByUserIds`,UA=`RestorableBy`,WA=`ReturnCode`,GA=`RamDiskId`,KA=`RootDeviceName`,qA=`RootDeviceType`,JA=`RootDeviceTypeList`,YA=`RequireEncryptionInTransit`,XA=`RestoreExpiryTime`,ZA=`ResponseError`,QA=`ResourceExclusions`,$A=`RegionGeography`,ej=`ReferencedGroupId`,tj=`ReferencedGroupInfo`,nj=`RegionGeographyList`,rj=`RequireHibernateSupport`,ij=`RunInstancesMonitoringEnabled`,aj=`RebootInstancesRequest`,oj=`RegisterImageRequest`,sj=`RegisterImageResult`,cj=`RunInstancesRequest`,lj=`RunInstancesUserData`,uj=`RamdiskId`,dj=`ReservationId`,fj=`RebootInstances`,pj=`RegisterImage`,mj=`RequesterId`,hj=`RunInstances`,gj=`RegionList`,_j=`RequestLaunchTemplateData`,vj=`ResponseLaunchTemplateData`,yj=`ReservationList`,bj=`RouteList`,xj=`RebootMigrationSupport`,Sj=`RebootMigration`,Cj=`RegionName`,wj=`RegionNameStringList`,Tj=`RegionNames`,Ej=`ReferencedSecurityGroup`,Dj=`RevokeSecurityGroupEgress`,Oj=`RevokeSecurityGroupEgressRequest`,kj=`RevokeSecurityGroupEgressResult`,Aj=`RevokeSecurityGroupIngressRequest`,jj=`RevokeSecurityGroupIngressResult`,Mj=`RevokeSecurityGroupIngress`,Nj=`RevokedSecurityGroupRule`,Pj=`RevokedSecurityGroupRuleList`,Fj=`RevokedSecurityGroupRules`,Ij=`RouteTableAssociation`,Lj=`RouteTableAssociationId`,Rj=`RouteTableAssociationList`,zj=`RouteTableAssociationState`,Bj=`RouteTableId`,Vj=`RouteTableIdStringList`,Hj=`RouteTableIds`,Uj=`RouteTableList`,Wj=`ResourceType`,Gj=`RequestTime`,Kj=`RouteTable`,qj=`RouteTables`,Jj=`Ramdisk`,Yj=`References`,Xj=`Reference`,Zj=`Regions`,Qj=`Region`,$j=`Requested`,eM=`Reservations`,tM=`Reservation`,nM=`Route`,rM=`Routes`,iM=`SecondaryAllocationIds`,aM=`SecondaryAllocationId`,oM=`SupportedAdditionalProcessorFeatureList`,sM=`SubnetArn`,cM=`SupportedArchitectures`,lM=`SecureBlob`,uM=`SecureBlobAttributeValue`,dM=`SupportedBootModes`,fM=`SubnetCidrBlockState`,pM=`SustainedClockSpeedInGhz`,mM=`SourceDestCheck`,hM=`SuccessfullyDeletedLaunchTemplateVersions`,gM=`SetDefaultVersion`,_M=`SpreadDomain`,vM=`SupportedFeatures`,yM=`SubGeography`,bM=`SecurityGroupArn`,xM=`SecurityGroupId`,SM=`SecurityGroupIdStringList`,CM=`SecurityGroupIds`,wM=`SecurityGroupList`,TM=`SecurityGroupRules`,EM=`SecurityGroupRuleArn`,DM=`SecurityGroupRuleIds`,OM=`SecurityGroupRuleIdList`,kM=`SecurityGroupRuleId`,AM=`SecurityGroupRuleList`,jM=`SecurityGroupRule`,MM=`SecurityGroupStringList`,NM=`SecurityGroups`,PM=`SecurityGroup`,FM=`SubnetIds`,IM=`SubnetIpv6CidrBlockAssociation`,LM=`SubnetIpv6CidrBlockAssociationSet`,RM=`SourceImageCreationTime`,zM=`SizeInGB`,BM=`SourceImageId`,VM=`SecondaryInterfaceId`,HM=`SourceInstanceId`,UM=`SizeInMiB`,WM=`SecondaryInterfacePrivateIpAddressSpecification`,GM=`SecondaryInterfacePrivateIpAddressSpecificationList`,KM=`SecondaryInterfacePrivateIpAddressSpecificationListRequest`,qM=`SecondaryInterfacePrivateIpAddressSpecificationRequest`,JM=`SpotInstanceRequestId`,YM=`SourceImageRegion`,XM=`StartInstancesRequest`,ZM=`StartInstancesResult`,QM=`StopInstancesRequest`,$M=`StopInstancesResult`,eN=`SupportedInRegion`,tN=`SnapshotIdStringList`,nN=`SubnetIdStringList`,rN=`SupportedInstanceTypes`,iN=`SupportedInstanceTypeSet`,aN=`SpotInstanceType`,oN=`SecondaryInterfaces`,sN=`SecondaryInterface`,cN=`SnapshotId`,lN=`SnapshotIds`,uN=`StartingInstances`,dN=`StartInstances`,fN=`StoppingInstances`,pN=`StopInstances`,mN=`SubnetId`,hN=`SnapshotLocation`,gN=`SnapshotList`,_N=`SpreadLevel`,vN=`SubnetList`,yN=`ServiceManaged`,bN=`SpotMarketOptions`,xN=`SpotMaxPricePercentageOverLowestPrice`,SN=`StatusMessage`,CN=`StateMessage`,wN=`SecondaryNetworkId`,TN=`SriovNetSupport`,EN=`SecondaryNetworkSupported`,DN=`SpotOptions`,ON=`SkipOsShutdown`,kN=`SecondaryPrivateIpAddresses`,AN=`SecondaryPrivateIpAddressCount`,jN=`SecondaryPrivateIpAddress`,MN=`SupportedRootDeviceTypes`,NN=`SourceRegion`,PN=`StateReason`,FN=`SourceSecurityGroupName`,IN=`SourceSecurityGroupOwnerId`,LN=`SourceSnapshotId`,RN=`SecondarySubnetId`,zN=`SupportedStrategies`,BN=`StateTransitionReason`,VN=`SseType`,HN=`StartTime`,UN=`StorageTier`,WN=`SupportedUsageClasses`,GN=`SensitiveUserData`,KN=`SourceVersion`,qN=`SourceVolumeId`,JN=`SupportedVirtualizationTypes`,YN=`SupportedVersions`,XN=`Size`,ZN=`Snapshots`,QN=`Snapshot`,$N=`State`,eP=`Status`,tP=`Strategy`,nP=`Subnet`,rP=`Subnets`,iP=`Tags`,aP=`TcpEstablishedTimeout`,oP=`TotalFpgaMemoryInMiB`,sP=`TransitGatewayId`,cP=`TotalGpuMemoryInMiB`,lP=`TerminateInstances`,uP=`TotalInferenceMemoryInMiB`,dP=`TerminateInstancesRequest`,fP=`TerminateInstancesResult`,pP=`TargetIops`,mP=`TerminatingInstances`,hP=`TagList`,gP=`TotalLocalStorageGB`,_P=`TotalLocalStorageGBRequest`,vP=`TargetMultiAttachEnabled`,yP=`TotalMediaMemoryInMiB`,bP=`TotalNeuronDeviceMemoryInMiB`,xP=`ToPort`,SP=`ThreadsPerCore`,CP=`ThreadsPerCoreList`,wP=`TagSpecifications`,TP=`TotalSizeInGB`,EP=`TagSpecificationList`,DP=`TagSpecification`,OP=`TargetSize`,kP=`TpmSupport`,AP=`TargetThroughput`,jP=`TransferType`,MP=`TargetVolumeType`,NP=`Tag`,PP=`Tenancy`,FP=`Throughput`,IP=`Timestamp`,LP=`Type`,RP=`UsageClassTypeList`,zP=`UefiData`,BP=`UnsuccessfullyDeletedLaunchTemplateVersions`,VP=`UserData`,HP=`UserId`,UP=`UserIdGroupPairs`,WP=`UserIdGroupPairList`,GP=`UserIdGroupPair`,KP=`UnknownIpPermissions`,qP=`UnsupportedInstanceTypes`,JP=`UnsupportedInstanceTypeSet`,YP=`UsageOperation`,XP=`UsageOperationUpdateTime`,ZP=`UdpStreamTimeout`,QP=`UdpTimeout`,$P=`Value`,eF=`VolumeAttachmentList`,tF=`VolumeArn`,nF=`VolumeAttachment`,rF=`VpcCidrBlockAssociation`,iF=`VpcCidrBlockAssociationSet`,aF=`VpcCidrBlockState`,oF=`VCpuCount`,sF=`VCpuCountRange`,cF=`VCpuCountRangeRequest`,lF=`VCpuInfo`,uF=`ValidCores`,dF=`VersionDescription`,fF=`VpcEncryptionControl`,pF=`VpcEncryptionControlConfiguration`,mF=`VpcEncryptionControlExclusion`,hF=`VpcEncryptionControlExclusions`,gF=`VpcEncryptionControlId`,_F=`VpcEndpointId`,vF=`ValidationError`,yF=`VpcId`,bF=`VpcIpv6CidrBlockAssociation`,xF=`VpcIpv6CidrBlockAssociationSet`,SF=`VolumeInitializationRate`,CF=`VolumeIdStringList`,wF=`VpcIdStringList`,TF=`VolumeId`,EF=`VolumeIds`,DF=`VpcIds`,OF=`VpcLattice`,kF=`VpcLatticeExclusion`,AF=`VolumeList`,jF=`VpcList`,MF=`VolumeModification`,NF=`VirtualName`,PF=`VersionNumber`,FF=`VolumeOwnerId`,IF=`VpcPeering`,LF=`VpcPeeringConnectionId`,RF=`VpcPeeringExclusion`,zF=`VirtualPrivateGateway`,BF=`VirtualPrivateGatewayExclusion`,VF=`ValueStringList`,HF=`VersionStringList`,UF=`VolumeSize`,WF=`VolumeType`,GF=`VirtualizationTypeList`,KF=`ValidThreadsPerCore`,qF=`VirtualizationType`,JF=`ValidUntil`,YF=`ValidationWarning`,XF=`Values`,ZF=`Versions`,QF=`Version`,$F=`Volumes`,eI=`Volume`,tI=`Vpc`,nI=`Vpcs`,rI=`Warning`,iI=`WatermarkCreationTime`,aI=`WatermarkKey`,oI=`WorkloadsList`,sI=`Workloads`,cI=`ZoneId`,lI=`ZoneIdStringList`,uI=`ZoneIds`,dI=`ZoneName`,fI=`ZoneNameStringList`,pI=`ZoneNames`,mI=`ZoneType`,hI=`attachedApplianceSet`,gI=`applianceArn`,_I=`associateCarrierIpAddress`,vI=`acceleratorCount`,yI=`additionalFlexibleNetworkInterfaces`,bI=`allocationId`,xI=`availableIpAddressCount`,SI=`assignIpv6AddressOnCreation`,CI=`allowedInstanceTypeSet`,wI=`additionalInfo`,TI=`associationId`,EI=`attachmentId`,DI=`amiLaunchIndex`,OI=`attachmentLimitType`,kI=`availabilityMode`,AI=`acceleratorManufacturerSet`,jI=`acceleratorNameSet`,MI=`associatePublicIpAddress`,NI=`amazonProvidedIpv6CidrBlock`,PI=`autoProvisionZones`,FI=`autoRecoverySupported`,II=`allowReassociation`,LI=`associatedResource`,RI=`autoRecovery`,zI=`associationState`,BI=`autoScalingIps`,VI=`amdSevSnp`,HI=`addressesSet`,UI=`associationSet`,WI=`attachmentSet`,GI=`attachmentState`,KI=`acceleratorTotalMemoryMiB`,qI=`acceleratorTypeSet`,JI=`attachTime`,YI=`availabilityZone`,XI=`availabilityZoneId`,ZI=`availabilityZoneInfo`,QI=`accelerators`,$I=`affinity`,eL=`arn`,tL=`architecture`,nL=`association`,rL=`attachment`,iL=`attribute`,aL=`baselineBandwidthInGbps`,oL=`baselineBandwidthInMbps`,sL=`blockDeviceMapping`,cL=`blockDeviceMappingSet`,lL=`blockDurationMinutes`,uL=`baselineEbsBandwidthMbps`,dL=`baselineIops`,fL=`bootMode`,pL=`bareMetal`,mL=`burstablePerformance`,hL=`blockPublicAccessStates`,gL=`baselinePerformanceFactors`,_L=`burstablePerformanceSupported`,vL=`baselineThroughputInMBps`,yL=`bandwidthWeighting`,bL=`bandwidthWeightings`,xL=`cidrBlock`,SL=`cidrBlockAssociationSet`,CL=`capacityBlockId`,wL=`cidrBlockState`,TL=`createdBy`,EL=`coreCount`,DL=`cpuCredits`,OL=`completionDurationMinutes`,kL=`creationDate`,AL=`carrierGatewayId`,jL=`currentGeneration`,ML=`carrierIp`,NL=`currentInstanceBootMode`,PL=`cidrIp`,FL=`cidrIpv6`,IL=`cidrIpv4`,LL=`coreInfo`,RL=`cpuManufacturerSet`,zL=`coreNetworkArn`,BL=`cpuOptions`,VL=`customerOwnedIp`,HL=`customerOwnedIpv4Pool`,UL=`capacityReservationId`,WL=`capacityReservationPreference`,GL=`capacityReservationResourceGroupArn`,KL=`capacityReservationSpecification`,qL=`capacityReservationTarget`,JL=`creditSpecification`,YL=`currentState`,XL=`clientToken`,ZL=`connectionTrackingConfiguration`,QL=`connectionTrackingSpecification`,$L=`completionTime`,eR=`connectivityType`,tR=`createTime`,nR=`code`,rR=`configured`,iR=`count`,aR=`cpu`,oR=`disableApiStop`,sR=`disableApiTermination`,cR=`destinationCidrBlock`,lR=`defaultCores`,uR=`dataEncryptionKeyId`,dR=`defaultEnaQueueCountPerInterface`,fR=`defaultForAz`,pR=`dedicatedHostsSupported`,mR=`deviceIndex`,hR=`destinationIpv6CidrBlock`,gR=`deviceName`,_R=`defaultNetworkCardIndex`,vR=`dnsName`,yR=`dhcpOptionsId`,bR=`deleteOnTermination`,xR=`destinationPrefixListId`,SR=`deregistrationProtection`,_=`dryRun`,CR=`destinationRegion`,wR=`deleteSnapshotResultSet`,TR=`defaultTcpEstablishedTimeout`,ER=`defaultThreadsPerCore`,DR=`deprecationTime`,OR=`deleteTime`,kR=`defaultUdpStreamTimeout`,AR=`defaultUdpTimeout`,jR=`defaultVCpus`,MR=`defaultVersionNumber`,NR=`defaultVersion`,PR=`description`,FR=`device`,IR=`disks`,LR=`domain`,RR=`ebsCardIndex`,zR=`ebsCardSet`,BR=`encryptionControl`,VR=`enableDns64`,HR=`elasticFileSystem`,UR=`elasticGpuAssociationId`,WR=`elasticGpuAssociationState`,GR=`elasticGpuAssociationSet`,KR=`elasticGpuAssociationTime`,qR=`elasticGpuId`,JR=`elasticGpuSpecificationSet`,YR=`elasticInferenceAcceleratorArn`,XR=`elasticInferenceAcceleratorAssociationId`,ZR=`elasticInferenceAcceleratorAssociationState`,QR=`elasticInferenceAcceleratorAssociationSet`,$R=`elasticInferenceAcceleratorAssociationTime`,ez=`elasticInferenceAcceleratorSet`,tz=`encryptionInTransitSupported`,nz=`excludedInstanceTypeSet`,PTe=`ebsInfo`,FTe=`efaInfo`,ITe=`enableLniAtDeviceIndex`,rz=`ebsOptimized`,LTe=`ebsOptimizedInfo`,RTe=`egressOnlyInternetGateway`,iz=`egressOnlyInternetGatewayId`,zTe=`ebsOptimizedSupport`,az=`enclaveOptions`,oz=`enaQueueCount`,v=`ec2QueryName`,sz=`enableResourceNameDnsAAAARecord`,cz=`enableResourceNameDnsARecord`,lz=`enaSrdEnabled`,uz=`enaSrdSpecification`,BTe=`enaSrdSupported`,dz=`enaSrdUdpEnabled`,fz=`enaSrdUdpSpecification`,VTe=`efaSupported`,pz=`encryptionSupport`,mz=`enaSupport`,HTe=`errorSet`,UTe=`endTime`,hz=`ebs`,gz=`enabled`,_z=`encrypted`,vz=`failureCode`,WTe=`flexibleEnaQueuesSupport`,GTe=`fpgaInfo`,yz=`failureMessage`,bz=`fromPort`,KTe=`fastRestored`,qTe=`fullSnapshotSizeInBytes`,xz=`freeTierEligible`,JTe=`force`,YTe=`fpgas`,XTe=`groupArn`,ZTe=`groupDescription`,Sz=`gatewayId`,QTe=`gpuInfo`,Cz=`groupId`,$Te=`groupLongName`,wz=`groupName`,eEe=`groupOwnerId`,tEe=`gpuPartitionSize`,Tz=`geographySet`,Ez=`groupSet`,nEe=`gpus`,rEe=`groups`,Dz=`hypervisor`,iEe=`hiddenByDefault`,Oz=`httpEndpoint`,kz=`hostId`,Az=`hibernationOptions`,jz=`httpProtocolIpv6`,Mz=`httpPutResponseHopLimit`,Nz=`hostResourceGroupArn`,aEe=`hibernationSupported`,Pz=`httpTokens`,Fz=`hostnameType`,oEe=`id`,Iz=`ipv6AddressAttribute`,Lz=`ipv6AddressCount`,sEe=`inferenceAcceleratorInfo`,cEe=`ipv4AddressesPerInterface`,lEe=`ipv6AddressesPerInterface`,uEe=`ipv4AddressesPerSecondaryInterface`,Rz=`ipv6AddressesSet`,dEe=`imageAllowed`,zz=`ipAddress`,Bz=`ipv6Address`,Vz=`ipv6CidrBlock`,Hz=`ipv6CidrBlockAssociationSet`,Uz=`ipv6CidrBlockState`,fEe=`isDefault`,Wz=`isEgress`,pEe=`instanceFamily`,Gz=`internetGateway`,mEe=`internetGatewayBlockMode`,Kz=`internetGatewayId`,hEe=`internetGatewaySet`,gEe=`instanceGenerationSet`,qz=`instanceId`,_Ee=`instanceInterruptionBehavior`,Jz=`iamInstanceProfile`,Yz=`iamInstanceProfileAssociation`,vEe=`iamInstanceProfileAssociationSet`,Xz=`instanceInitiatedShutdownBehavior`,Zz=`imageId`,yEe=`imageLocation`,bEe=`instanceLifecycle`,xEe=`instanceMarketOptions`,Qz=`instanceMetadataTags`,SEe=`ipv6Native`,CEe=`imageOwnerAlias`,wEe=`imageOwnerId`,TEe=`instanceOwnerId`,EEe=`ipOwnerId`,DEe=`instanceOwningService`,OEe=`ipv4PrefixCount`,kEe=`ipv6PrefixCount`,AEe=`ipPermissionsEgress`,jEe=`isPrimaryIpv6`,$z=`ipv4PrefixSet`,eB=`ipv6PrefixSet`,tB=`ipProtocol`,nB=`ipPermissions`,rB=`ipv4Prefix`,MEe=`ipv6Pool`,iB=`ipv6Prefix`,NEe=`isPublic`,PEe=`isPrimary`,FEe=`instanceRequirements`,IEe=`ipRanges`,LEe=`ipv6Ranges`,REe=`instanceStorageInfo`,zEe=`instanceStorageSupported`,BEe=`imagesSet`,VEe=`imageState`,HEe=`imdsSupport`,aB=`instancesSet`,UEe=`instanceState`,oB=`ipSource`,WEe=`ipv6Supported`,sB=`instanceType`,GEe=`instanceTypeSet`,KEe=`instanceTypeSpecification`,qEe=`interfaceTypeSet`,JEe=`idempotencyToken`,YEe=`imageType`,cB=`instanceTenancy`,lB=`interfaceType`,XEe=`imageWatermarkSet`,uB=`iops`,y=`item`,ZEe=`key`,dB=`keyFingerprint`,fB=`kernelId`,pB=`kmsKeyId`,QEe=`keyMaterial`,mB=`keyName`,hB=`keyPairId`,$Ee=`keySet`,eDe=`keyType`,tDe=`kernel`,nDe=`lambda`,gB=`licenseConfigurationArn`,rDe=`logicalGpuCount`,iDe=`localGatewayId`,aDe=`linkedGroupId`,oDe=`lastLaunchedTime`,sDe=`localStorageTypeSet`,_B=`licenseSet`,cDe=`localStorage`,vB=`launchTemplate`,lDe=`launchTemplateData`,yB=`launchTemplateId`,bB=`launchTemplateName`,uDe=`launchTemplateVersion`,dDe=`launchTemplateVersionSet`,fDe=`launchTemplates`,pDe=`launchTime`,mDe=`latestVersionNumber`,xB=`min`,hDe=`multiAttachEnabled`,gDe=`mediaAcceleratorInfo`,SB=`macAddress`,CB=`maximumBandwidthInMbps`,_De=`mapCustomerOwnedIpOnLaunch`,vDe=`maximumEbsAttachments`,yDe=`maximumEbsCards`,bDe=`maximumEfaInterfaces`,xDe=`maximumEnaQueueCount`,SDe=`maximumEnaQueueCountPerInterface`,CDe=`memoryGiBPerVCpu`,wB=`maximumIops`,TB=`memoryInfo`,wDe=`memoryMiB`,TDe=`maximumNetworkCards`,EB=`maximumNetworkInterfaces`,DB=`metadataOptions`,OB=`maintenanceOptions`,EDe=`maxPrice`,DDe=`mapPublicIpOnLaunch`,kB=`maxResults`,ODe=`messageSet`,kDe=`maximumSecondaryNetworkInterfaces`,ADe=`maxSpotPriceAsPercentageOfOptimalOnDemandPrice`,AB=`modificationState`,jB=`maximumThroughputInMBps`,jDe=`marketType`,MB=`max`,MDe=`main`,NB=`manufacturer`,NDe=`managed`,PB=`message`,PDe=`mode`,FB=`monitoring`,IB=`name`,LB=`networkBorderGroup`,FDe=`networkBandwidthGbps`,IDe=`networkCards`,RB=`networkCardIndex`,zB=`noDevice`,LDe=`neuronDevices`,RDe=`nitroEnclavesSupport`,BB=`natGateway`,zDe=`natGatewayAddressSet`,VB=`natGatewayId`,BDe=`natGatewaySet`,VDe=`networkInterfaceCount`,HB=`networkInterfaceId`,HDe=`networkInterfaceOwnerId`,UB=`networkInterfaceSet`,UDe=`networkInterface`,WDe=`networkInfo`,GDe=`neuronInfo`,WB=`networkPerformanceOptions`,GB=`networkPerformance`,KDe=`noReboot`,KB=`nvmeSupport`,qDe=`nitroTpmInfo`,JDe=`nitroTpmSupport`,qB=`nextToken`,JB=`nestedVirtualization`,YDe=`origin`,YB=`outpostArn`,XDe=`ownerAlias`,ZDe=`onDemandMaxPricePercentageOverLowestPrice`,XB=`ownerId`,ZB=`optInStatus`,QDe=`originalIops`,$De=`originalMultiAttachEnabled`,eOe=`odbNetworkArn`,tOe=`originalSize`,nOe=`originalThroughput`,rOe=`originalVolumeType`,QB=`operator`,iOe=`output`,aOe=`principal`,oOe=`provisionedBandwidth`,sOe=`peakBandwidthInGbps`,$B=`productCodes`,cOe=`partitionCount`,lOe=`productCode`,eV=`privateDnsNameOptions`,uOe=`privateDnsNameOptionsOnLaunch`,tV=`privateDnsName`,dOe=`publicDnsName`,nV=`platformDetails`,fOe=`placementGroup`,pOe=`placementGroupInfo`,mOe=`parentGroupId`,hOe=`placementGroupSet`,rV=`publicIp`,gOe=`privateIpAddressCount`,iV=`privateIpAddressesSet`,_Oe=`privateIpAddressSet`,aV=`privateIpAddress`,oV=`publicIpv4Pool`,vOe=`processorInfo`,yOe=`primaryIpv6`,bOe=`privateIp`,xOe=`publicKey`,SOe=`publicKeyMaterial`,sV=`prefixListId`,COe=`prefixListIds`,cV=`partitionNumber`,wOe=`publicSsmParameterName`,lV=`peeringStatus`,TOe=`phcSupport`,EOe=`previousState`,DOe=`provisionTime`,OOe=`presignedUrl`,kOe=`propagatingVgwSet`,AOe=`parentZoneId`,jOe=`parentZoneName`,uV=`platform`,dV=`placement`,fV=`primary`,pV=`progress`,MOe=`provisioned`,mV=`return`,NOe=`returnCode`,POe=`ramDiskId`,hV=`rootDeviceName`,gV=`rootDeviceType`,FOe=`responseError`,IOe=`requireEncryptionInTransit`,LOe=`restoreExpiryTime`,ROe=`regionEndpoint`,zOe=`resourceExclusions`,BOe=`referencedGroupId`,VOe=`referencedGroupInfo`,HOe=`requireHibernateSupport`,UOe=`reservationId`,_V=`ramdiskId`,WOe=`regionInfo`,GOe=`requesterId`,KOe=`rebootMigrationSupport`,qOe=`rebootMigration`,vV=`regionName`,yV=`revokedSecurityGroupRuleSet`,JOe=`referenceSet`,YOe=`reservationSet`,XOe=`routeSet`,ZOe=`routeTableAssociationId`,bV=`routeTableId`,QOe=`routeTableSet`,xV=`resourceType`,$Oe=`requestTime`,eke=`routeTable`,tke=`ramdisk`,nke=`reason`,rke=`requested`,SV=`smithy.ts.sdk.synthetic.com.amazonaws.ec2`,ike=`supportedArchitectures`,ake=`subnetArn`,oke=`supportedBootModes`,ske=`sustainedClockSpeedInGhz`,CV=`sourceDestCheck`,cke=`successfullyDeletedLaunchTemplateVersionSet`,wV=`spreadDomain`,lke=`supportedFeatures`,TV=`securityGroupArn`,uke=`securityGroupIdSet`,dke=`securityGroupInfo`,fke=`securityGroupRuleArn`,EV=`securityGroupRuleId`,DV=`securityGroupRuleSet`,pke=`subGeographySet`,mke=`securityGroupSet`,hke=`sourceImageCreationTime`,gke=`sizeInGB`,_ke=`sourceInstanceId`,vke=`secondaryInterfaceId`,OV=`sourceImageId`,kV=`sizeInMiB`,AV=`sourceImageRegion`,yke=`spotInstanceRequestId`,bke=`supportedInRegion`,jV=`secondaryInterfaceSet`,xke=`spotInstanceType`,Ske=`supportedInstanceTypeSet`,MV=`snapshotId`,NV=`subnetId`,Cke=`spreadLevel`,wke=`serviceManaged`,Tke=`spotMaxPricePercentageOverLowestPrice`,PV=`statusMessage`,FV=`stateMessage`,Eke=`secondaryNetworkId`,Dke=`secondaryNetworkSupported`,IV=`sriovNetSupport`,Oke=`spotOptions`,LV=`secondaryPrivateIpAddressCount`,kke=`supportedRootDeviceTypes`,RV=`stateReason`,zV=`sourceSecurityGroupName`,BV=`sourceSecurityGroupOwnerId`,VV=`secondarySubnetId`,Ake=`snapshotSet`,jke=`subnetSet`,Mke=`supportedStrategies`,HV=`sseType`,UV=`startTime`,Nke=`storageTier`,Pke=`supportedUsageClasses`,Fke=`sourceVolumeId`,Ike=`supportedVirtualizationTypes`,Lke=`supportedVersions`,Rke=`size`,WV=`state`,GV=`status`,KV=`strategy`,zke=`subnet`,qV=`tcpEstablishedTimeout`,Bke=`totalFpgaMemoryInMiB`,Vke=`transitGatewayId`,Hke=`totalGpuMemoryInMiB`,Uke=`totalInferenceMemoryInMiB`,Wke=`targetIops`,Gke=`totalLocalStorageGB`,Kke=`targetMultiAttachEnabled`,qke=`totalMediaMemoryInMiB`,Jke=`totalNeuronDeviceMemoryInMiB`,JV=`toPort`,YV=`threadsPerCore`,XV=`tagSet`,Yke=`totalSizeInGB`,Xke=`tagSpecificationSet`,Zke=`targetSize`,ZV=`tpmSupport`,Qke=`targetThroughput`,$ke=`transferType`,eAe=`targetVolumeType`,QV=`tenancy`,$V=`throughput`,eH=`timestamp`,tH=`type`,tAe=`unsuccessfullyDeletedLaunchTemplateVersionSet`,nH=`userData`,rH=`userId`,iH=`unknownIpPermissionSet`,nAe=`unsupportedInstanceTypeSet`,aH=`usageOperation`,rAe=`usageOperationUpdateTime`,oH=`udpStreamTimeout`,sH=`udpTimeout`,cH=`value`,iAe=`volumeArn`,aAe=`vCpuCount`,oAe=`vCpuInfo`,sAe=`validCores`,cAe=`versionDescription`,lAe=`vpcEncryptionControlId`,uAe=`vpcEndpointId`,lH=`vpcId`,uH=`volumeInitializationRate`,dH=`volumeId`,dAe=`vpcLattice`,fAe=`volumeModification`,fH=`virtualName`,pH=`versionNumber`,pAe=`volumeOwnerId`,mAe=`vpcPeering`,mH=`vpcPeeringConnectionId`,hAe=`virtualPrivateGateway`,gAe=`volumeSet`,hH=`volumeSize`,_Ae=`vpcSet`,gH=`volumeType`,vAe=`validThreadsPerCore`,_H=`virtualizationType`,yAe=`validUntil`,bAe=`version`,xAe=`vpc`,vH=`warning`,SAe=`watermarkCreationTime`,CAe=`watermarkKey`,wAe=`workloadSet`,b=`xmlName`,TAe=`zoneId`,EAe=`zoneName`,DAe=`zoneState`,OAe=`zoneType`,x=`com.amazonaws.ec2`,yH=new mt(SV),kAe=[-3,SV,`EC2ServiceException`,0,[],[]];yH.registerError(kAe,SCe);var AAe=[yH],jAe=[0,x,Pg,8,0],MAe=[0,x,oT,8,0],NAe=[0,x,ID,8,0],PAe=[0,x,lj,8,0],FAe=[0,x,lM,8,21],bH=[0,x,GN,8,0],IAe=[3,x,xh,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],LAe=[3,x,NCe,0,[gD,lO],[1,1]],RAe=[3,x,Rh,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],zAe=[3,x,gwe,0,[gD,lO],[1,1]],BAe=[3,x,bh,0,[Eh,Oh,Gy,qO,JO,oA,iP,lA,vO,wg,Tg,_g,mN,yN,QS,nA],[[0,{[v]:`AllocationId`,[b]:bI}],[0,{[v]:`AssociationId`,[b]:TI}],[0,{[v]:`Domain`,[b]:LR}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`NetworkInterfaceOwnerId`,[b]:HDe}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`PublicIpv4Pool`,[b]:oV}],[0,{[v]:`NetworkBorderGroup`,[b]:LB}],[0,{[v]:`CustomerOwnedIp`,[b]:VL}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:HL}],[0,{[v]:`CarrierIp`,[b]:ML}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`ServiceManaged`,[b]:wke}],[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`PublicIp`,[b]:rV}]]],VAe=[3,x,CCe,0,[Gy,bh,lA,vO,Tg,wP,tw,g],[0,0,0,0,0,[()=>PU,{[b]:DP}],0,[2,{[v]:`DryRun`,[b]:_}]]],HAe=[3,x,wCe,0,[Eh,lA,vO,Gy,wg,Tg,_g,nA],[[0,{[v]:`AllocationId`,[b]:bI}],[0,{[v]:`PublicIpv4Pool`,[b]:oV}],[0,{[v]:`NetworkBorderGroup`,[b]:LB}],[0,{[v]:`Domain`,[b]:LR}],[0,{[v]:`CustomerOwnedIp`,[b]:VL}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:HL}],[0,{[v]:`CarrierIp`,[b]:ML}],[0,{[v]:`PublicIp`,[b]:rV}]]],UAe=[3,x,TCe,0,[Eh,QS,nA,g,qO,oA,awe],[0,0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[2,{[v]:`AllowReassociation`,[b]:II}]]],WAe=[3,x,ECe,0,[Oh],[[0,{[v]:`AssociationId`,[b]:TI}]]],GAe=[3,x,zCe,0,[iC,QS],[[()=>PH,0],0],2],KAe=[3,x,BCe,0,[aC],[[()=>NH,{[v]:`IamInstanceProfileAssociation`,[b]:Yz}]]],qAe=[3,x,nwe,0,[Bj,Ix,lA,g,mN],[[0,{[v]:`RouteTableId`,[b]:bV}],0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SubnetId`,[b]:NV}]],1],JAe=[3,x,rwe,0,[Oh,Lh],[[0,{[v]:`AssociationId`,[b]:TI}],[()=>YH,{[v]:`AssociationState`,[b]:zI}]]],YAe=[3,x,LCe,0,[WS,yF,g],[[0,{[v]:`InternetGatewayId`,[b]:Kz}],[0,{[v]:`VpcId`,[b]:lH}],[2,{[v]:`DryRun`,[b]:_}]],2],XAe=[3,x,ywe,0,[Uy,QS,TF,Yy,g],[0,0,0,1,[2,{[v]:`DryRun`,[b]:_}]],3],xH=[3,x,MCe,0,[$P],[[2,{[v]:`Value`,[b]:cH}]]],SH=[3,x,bwe,0,[$P],[[0,{[v]:`Value`,[b]:cH}]]],ZAe=[3,x,cwe,0,[Bx,wP,g,FN,IN,vw,bx,xP,vg,gw],[[0,{[v]:`GroupId`,[b]:Cz}],[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SourceSecurityGroupName`,[b]:zV}],[0,{[v]:`SourceSecurityGroupOwnerId`,[b]:BV}],[0,{[v]:`IpProtocol`,[b]:tB}],[1,{[v]:`FromPort`,[b]:bz}],[1,{[v]:`ToPort`,[b]:JV}],[0,{[v]:`CidrIp`,[b]:PL}],[()=>xU,{[v]:`IpPermissions`,[b]:nB}]],1],QAe=[3,x,lwe,0,[RA,TM],[[2,{[v]:`Return`,[b]:mV}],[()=>jU,{[v]:`SecurityGroupRuleSet`,[b]:DV}]]],$Ae=[3,x,uwe,0,[vg,bx,Bx,Wx,gw,vw,FN,IN,xP,wP,g],[0,1,0,0,[()=>xU,0],0,0,0,1,[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}]]],eje=[3,x,dwe,0,[RA,TM],[[2,{[v]:`Return`,[b]:mV}],[()=>jU,{[v]:`SecurityGroupRuleSet`,[b]:DV}]]],tje=[3,x,Vh,0,[pk,mO,Cj,dI,cI,Wx,vO,mI,jA,AA,Ux,Yx,yM,$N],[[0,{[v]:`OptInStatus`,[b]:ZB}],[()=>nLe,{[v]:`MessageSet`,[b]:ODe}],[0,{[v]:`RegionName`,[b]:vV}],[0,{[v]:`ZoneName`,[b]:EAe}],[0,{[v]:`ZoneId`,[b]:TAe}],[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`NetworkBorderGroup`,[b]:LB}],[0,{[v]:`ZoneType`,[b]:OAe}],[0,{[v]:`ParentZoneName`,[b]:jOe}],[0,{[v]:`ParentZoneId`,[b]:AOe}],[0,{[v]:`GroupLongName`,[b]:$Te}],[()=>eLe,{[v]:`GeographySet`,[b]:Tz}],[()=>rLe,{[v]:`SubGeographySet`,[b]:pke}],[0,{[v]:`ZoneState`,[b]:DAe}]]],nje=[3,x,Hh,0,[Vh,Wh,Dh],[0,0,[()=>lU,{[b]:Eh}]]],rje=[3,x,Swe,0,[_O],[[0,{[v]:`Name`,[b]:IB}]]],ije=[3,x,Twe,0,[pO],[[0,{[v]:`Message`,[b]:PB}]]],aje=[3,x,Dwe,0,[_O],[[0,{[v]:`Name`,[b]:IB}]]],oje=[3,x,ng,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],sje=[3,x,Iwe,0,[gD,lO],[1,1]],cje=[3,x,cg,0,[s_],[[()=>vje,{[v]:`Cpu`,[b]:aR}]]],lje=[3,x,zwe,0,[s_],[[()=>yje,0]]],CH=[3,x,$h,0,[ox,EO,Tv,NF],[[()=>sNe,{[v]:`Ebs`,[b]:hz}],[0,{[v]:`NoDevice`,[b]:zB}],[0,{[v]:`DeviceName`,[b]:gR}],[0,{[v]:`VirtualName`,[b]:fH}]]],wH=[3,x,sg,0,[HS],[[0,{[v]:`InternetGatewayBlockMode`,[b]:mEe}]]],uje=[3,x,kg,0,[Dg,Ag],[0,()=>TH]],dje=[3,x,DTe,0,[Dg,Ag],[[0,{[v]:`CapacityReservationPreference`,[b]:WL}],[()=>EH,{[v]:`CapacityReservationTarget`,[b]:qL}]]],TH=[3,x,Ag,0,[Eg,Og],[0,0]],EH=[3,x,OTe,0,[Eg,Og],[[0,{[v]:`CapacityReservationId`,[b]:UL}],[0,{[v]:`CapacityReservationResourceGroupArn`,[b]:GL}]]],fje=[3,x,qg,0,[aP,QP,ZP],[[1,{[v]:`TcpEstablishedTimeout`,[b]:qV}],[1,{[v]:`UdpTimeout`,[b]:sH}],[1,{[v]:`UdpStreamTimeout`,[b]:oH}]]],DH=[3,x,Jg,0,[aP,ZP,QP],[1,1,1]],pje=[3,x,Yg,0,[aP,ZP,QP],[[1,{[v]:`TcpEstablishedTimeout`,[b]:qV}],[1,{[v]:`UdpStreamTimeout`,[b]:oH}],[1,{[v]:`UdpTimeout`,[b]:sH}]]],mje=[3,x,Ng,0,[NN,LN,Hy,Nv,$v,cx,bT,EA,wP,hg,m_,g],[0,0,0,0,[0,{[v]:`DestinationRegion`,[b]:CR}],[2,{[v]:`Encrypted`,[b]:_z}],[0,{[v]:`KmsKeyId`,[b]:pB}],[()=>jAe,{[v]:`PresignedUrl`,[b]:OOe}],[()=>PU,{[b]:DP}],1,0,[2,{[v]:`DryRun`,[b]:_}]],2],hje=[3,x,Fg,0,[iP,cN],[[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`SnapshotId`,[b]:MV}]]],gje=[3,x,Cg,0,[pg,SP,Ih,sk],[[1,{[v]:`CoreCount`,[b]:EL}],[1,{[v]:`ThreadsPerCore`,[b]:YV}],[0,{[v]:`AmdSevSnp`,[b]:VI}],[0,{[v]:`NestedVirtualization`,[b]:JB}]]],_je=[3,x,yTe,0,[pg,SP,Ih,sk],[1,1,0,0]],vje=[3,x,bTe,0,[Yj],[[()=>ORe,{[v]:`ReferenceSet`,[b]:JOe}]]],yje=[3,x,xTe,0,[Yj],[[()=>kRe,{[b]:Xj}]]],bje=[3,x,nTe,0,[QS,_O,wP,hN,Lwe,g,Hy,tk,eg],[[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`Name`,[b]:IB}],[()=>PU,{[b]:DP}],0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Description`,[b]:PR}],[2,{[v]:`NoReboot`,[b]:KDe}],[()=>dU,{[v]:`BlockDeviceMapping`,[b]:sL}]],2],xje=[3,x,rTe,0,[vC],[[0,{[v]:`ImageId`,[b]:Zz}]]],Sje=[3,x,eTe,0,[wP,g],[[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}]]],Cje=[3,x,tTe,0,[zS],[[()=>RH,{[v]:`InternetGateway`,[b]:Gz}]]],wje=[3,x,sTe,0,[ST,MT,wP,_T,g],[0,0,[()=>PU,{[b]:DP}],0,[2,{[v]:`DryRun`,[b]:_}]],1],Tje=[3,x,lTe,0,[WE,oE,g,Gg,dF,wk,wP],[0,[()=>KH,0],2,[0,4],0,()=>HH,[()=>PU,{[b]:DP}]],2],Eje=[3,x,uTe,0,[ZT,rI],[[()=>zH,{[v]:`LaunchTemplate`,[b]:vB}],[()=>$H,{[v]:`Warning`,[b]:vH}]]],Dje=[3,x,fTe,0,[oE,g,Gg,yE,WE,KN,dF,VA],[[()=>KH,0],2,[0,4],0,0,0,0,2],1],Oje=[3,x,pTe,0,[sD,rI],[[()=>BH,{[v]:`LaunchTemplateVersion`,[b]:uDe}],[()=>$H,{[v]:`Warning`,[b]:vH}]]],kje=[3,x,_Te,0,[jh,Eh,Gg,g,mN,yF,Uh,wP,Zg,oA,iM,kN,AN],[0,0,[0,4],2,0,0,[()=>$Ie,{[b]:Hh}],[()=>PU,{[b]:DP}],0,0,[()=>lU,{[b]:aM}],[()=>qLe,{[b]:jN}],1]],Aje=[3,x,vTe,0,[Gg,NO],[[0,{[v]:`ClientToken`,[b]:XL}],[()=>VH,{[v]:`NatGateway`,[b]:BB}]]],jje=[3,x,CTe,0,[Pk,wP,_N,VT,wk,Xk,g,Wx,tP],[1,[()=>PU,{[b]:DP}],0,0,()=>HH,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`Strategy`,[b]:KV}]]],Mje=[3,x,wTe,0,[Yk],[[()=>GH,{[v]:`PlacementGroup`,[b]:fOe}]]],Nje=[3,x,TTe,0,[Bj,Vv,_F,sP,BT,gg,Sg,_k,g,b_,Ix,O_,Lb,QS,qO,LF,BO],[[0,{[v]:`RouteTableId`,[b]:bV}],0,0,0,0,0,0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`DestinationCidrBlock`,[b]:cR}],[0,{[v]:`GatewayId`,[b]:Sz}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:hR}],[0,{[v]:`EgressOnlyInternetGatewayId`,[b]:iz}],[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`VpcPeeringConnectionId`,[b]:mH}],[0,{[v]:`NatGatewayId`,[b]:VB}]],1],Pje=[3,x,ETe,0,[RA],[[2,{[v]:`Return`,[b]:mV}]]],Fje=[3,x,kTe,0,[yF,wP,Gg,g],[[0,{[v]:`VpcId`,[b]:lH}],[()=>PU,{[b]:DP}],[0,4],[2,{[v]:`DryRun`,[b]:_}]],1],Ije=[3,x,ATe,0,[Kj,Gg],[[()=>JH,{[v]:`RouteTable`,[b]:eke}],[0,{[v]:`ClientToken`,[b]:XL}]]],Lje=[3,x,jg,0,[Hy,Wx,yF,wP,g],[[0,{[b]:Mx}],0,0,[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}]],2],Rje=[3,x,Mg,0,[Bx,iP,bM],[[0,{[v]:`GroupId`,[b]:Cz}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`SecurityGroupArn`,[b]:TV}]]],zje=[3,x,Ig,0,[TF,Hy,lk,wP,hD,g],[0,0,0,[()=>PU,{[b]:DP}],0,[2,{[v]:`DryRun`,[b]:_}]],1],Bje=[3,x,Lg,0,[yF,wP,Vh,Wh,dg,DS,lk,LC,lC,GC,cC,WC,g],[0,[()=>PU,{[b]:DP}],0,0,0,0,0,2,0,1,0,1,[2,{[v]:`DryRun`,[b]:_}]],1],Vje=[3,x,Rg,0,[nP],[[()=>QH,{[v]:`Subnet`,[b]:zke}]]],Hje=[3,x,$g,0,[Vh,Wh,cx,hT,bT,lk,XN,cN,WF,wP,_D,FP,Gg,SF,wk,g],[0,0,[2,{[v]:`Encrypted`,[b]:_z}],1,0,0,1,0,0,[()=>PU,{[b]:DP}],2,1,[0,4],1,()=>HH,[2,{[v]:`DryRun`,[b]:_}]]],Uje=[3,x,e_,0,[dg,bw,DS,lC,GC,cC,WC,kS,fF,wP,g,nT,$Ce],[0,0,0,0,1,0,1,0,()=>qIe,[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`InstanceTenancy`,[b]:cB}],[2,{[v]:`AmazonProvidedIpv6CidrBlock`,[b]:NI}]]],Wje=[3,x,t_,0,[tI],[[()=>nU,{[v]:`Vpc`,[b]:xAe}]]],Gje=[3,x,Vg,0,[mg],[[0,{[v]:`CpuCredits`,[b]:DL}]]],OH=[3,x,zg,0,[mg],[0],1],Kje=[3,x,x_,0,[xy,Ey,Ty],[[1,{[v]:`DefaultTcpEstablishedTimeout`,[b]:TR}],[1,{[v]:`DefaultUdpTimeout`,[b]:AR}],[1,{[v]:`DefaultUdpStreamTimeout`,[b]:kR}]]],qje=[3,x,A_,0,[WS,g],[[0,{[v]:`InternetGatewayId`,[b]:Kz}],[2,{[v]:`DryRun`,[b]:_}]],1],Jje=[3,x,rv,0,[ST,ET,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],Yje=[3,x,iv,0,[RA,ET],[[2,{[v]:`Return`,[b]:mV}],[0,{[v]:`KeyPairId`,[b]:hB}]]],Xje=[3,x,uv,0,[g,yE,WE],[2,0,0]],Zje=[3,x,dv,0,[ZT],[[()=>zH,{[v]:`LaunchTemplate`,[b]:vB}]]],Qje=[3,x,hv,0,[ZF,g,yE,WE],[[()=>IU,{[b]:sD}],2,0,0],1],$je=[3,x,gv,0,[yE,WE,PF,ZA],[[0,{[v]:`LaunchTemplateId`,[b]:yB}],[0,{[v]:`LaunchTemplateName`,[b]:bB}],[1,{[v]:`VersionNumber`,[b]:pH}],[()=>uIe,{[v]:`ResponseError`,[b]:FOe}]]],eMe=[3,x,vv,0,[yE,WE,PF],[[0,{[v]:`LaunchTemplateId`,[b]:yB}],[0,{[v]:`LaunchTemplateName`,[b]:bB}],[1,{[v]:`VersionNumber`,[b]:pH}]]],tMe=[3,x,bv,0,[hM,BP],[[()=>uLe,{[v]:`SuccessfullyDeletedLaunchTemplateVersionSet`,[b]:cke}],[()=>lLe,{[v]:`UnsuccessfullyDeletedLaunchTemplateVersionSet`,[b]:tAe}]]],nMe=[3,x,Ov,0,[BO,g],[[0,{[b]:BO}],2],1],rMe=[3,x,kv,0,[BO],[[0,{[v]:`NatGatewayId`,[b]:VB}]]],iMe=[3,x,Lv,0,[Wx,g],[[0,{[v]:`GroupName`,[b]:wz}],[2,{[v]:`DryRun`,[b]:_}]],1],aMe=[3,x,Uv,0,[Bj,Vv,g,b_,O_],[[0,{[v]:`RouteTableId`,[b]:bV}],0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`DestinationCidrBlock`,[b]:cR}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:hR}]],1],oMe=[3,x,qv,0,[Bj,g],[[0,{[v]:`RouteTableId`,[b]:bV}],[2,{[v]:`DryRun`,[b]:_}]],1],sMe=[3,x,ry,0,[Bx,Wx,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],cMe=[3,x,iy,0,[RA,Bx],[[2,{[v]:`Return`,[b]:mV}],[0,{[v]:`GroupId`,[b]:Cz}]]],lMe=[3,x,cy,0,[cN,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],uMe=[3,x,ly,0,[cN,WA],[[0,{[v]:`SnapshotId`,[b]:MV}],[0,{[v]:`ReturnCode`,[b]:NOe}]]],dMe=[3,x,dy,0,[mN,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],fMe=[3,x,ky,0,[TF,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],pMe=[3,x,Ay,0,[yF,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],mMe=[3,x,U_,0,[vC,d_,g],[0,2,[2,{[v]:`DryRun`,[b]:_}]],1],hMe=[3,x,W_,0,[RA,fy],[[2,{[v]:`Return`,[b]:mV}],[()=>dLe,{[v]:`DeleteSnapshotResultSet`,[b]:wR}]]],gMe=[3,x,c_,0,[mA,g,wx,Dh],[[()=>FRe,{[b]:nA}],[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}],[()=>lU,{[b]:Eh}]]],_Me=[3,x,l_,0,[Awe],[[()=>XIe,{[v]:`AddressesSet`,[b]:HI}]]],vMe=[3,x,h_,0,[pI,uI,DCe,g,wx],[[()=>hze,{[b]:dI}],[()=>mze,{[b]:cI}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],yMe=[3,x,g_,0,[kwe],[[()=>tLe,{[v]:`AvailabilityZoneInfo`,[b]:ZI}]]],bMe=[3,x,R_,0,[GCe,wx,XD,ok],[[()=>QIe,{[b]:Oh}],[()=>mU,{[b]:Tx}],1,0]],xMe=[3,x,z_,0,[sC,ok],[[()=>TLe,{[v]:`IamInstanceProfileAssociationSet`,[b]:vEe}],[0,{[v]:`NextToken`,[b]:qB}]]],SMe=[3,x,G_,0,[ax,yC,Ek,jS,FS,XD,ok,g,wx],[[()=>xLe,{[b]:Jy}],[()=>ELe,{[b]:vC}],[()=>TU,{[b]:Dk}],2,2,1,0,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],CMe=[3,x,K_,0,[ok,dT],[[0,{[v]:`NextToken`,[b]:qB}],[()=>DLe,{[v]:`ImagesSet`,[b]:BEe}]]],wMe=[3,x,q_,0,[bC,FC,g,wx,ok,XD],[[()=>vU,{[b]:QS}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}],[0,{[v]:`NextToken`,[b]:qB}],[1,{[v]:`MaxResults`,[b]:kB}]]],TMe=[3,x,J_,0,[ok,eM],[[0,{[v]:`NextToken`,[b]:qB}],[()=>zRe,{[v]:`ReservationSet`,[b]:YOe}]]],EMe=[3,x,Y_,0,[g,rT,wx,XD,ok,sT],[2,[64,{[b]:Xw}],[()=>mU,{[b]:Tx}],1,0,2]],DMe=[3,x,X_,0,[rT,ok],[[()=>ULe,{[v]:`InstanceTypeSet`,[b]:GEe}],[0,{[v]:`NextToken`,[b]:qB}]]],OMe=[3,x,j_,0,[ok,XD,g,KS,wx],[0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>GLe,{[v]:`InternetGatewayId`,[b]:Kz}],[()=>mU,{[b]:Tx}]]],kMe=[3,x,M_,0,[YS,ok],[[()=>KLe,{[v]:`InternetGatewaySet`,[b]:hEe}],[0,{[v]:`NextToken`,[b]:qB}]]],AMe=[3,x,av,0,[wT,OT,aw,g,wx],[[()=>QLe,{[b]:ST}],[()=>$Le,{[b]:ET}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],jMe=[3,x,ov,0,[TT],[[()=>eRe,{[v]:`KeySet`,[b]:$Ee}]]],MMe=[3,x,fv,0,[g,LE,JE,wx,ok,XD,FC],[2,[()=>aRe,{[b]:yE}],[()=>fRe,{[b]:WE}],[()=>mU,{[b]:Tx}],0,1,2]],NMe=[3,x,pv,0,[uD,ok],[[()=>pRe,{[v]:`LaunchTemplates`,[b]:fDe}],[0,{[v]:`NextToken`,[b]:qB}]]],PMe=[3,x,xv,0,[g,yE,WE,ZF,iO,sO,ok,XD,wx,VA,FC],[2,0,0,[()=>IU,{[b]:sD}],0,0,0,1,[()=>mU,{[b]:Tx}],2,2]],FMe=[3,x,Sv,0,[lD,ok],[[()=>gRe,{[v]:`LaunchTemplateVersionSet`,[b]:dDe}],[0,{[v]:`NextToken`,[b]:qB}]]],IMe=[3,x,Av,0,[g,Tx,XD,HO,ok],[2,[()=>mU,0],1,[()=>SRe,{[b]:BO}],0]],LMe=[3,x,jv,0,[WO,ok],[[()=>CRe,{[v]:`NatGatewaySet`,[b]:BDe}],[0,{[v]:`NextToken`,[b]:qB}]]],RMe=[3,x,Rv,0,[Vx,g,Kx,wx],[[()=>ARe,{[b]:Bx}],[2,{[v]:`DryRun`,[b]:_}],[64,{[v]:`GroupName`,[b]:wz}],[()=>mU,{[b]:Tx}]]],zMe=[3,x,zv,0,[tA],[[()=>jRe,{[v]:`PlacementGroupSet`,[b]:hOe}]]],BMe=[3,x,Wv,0,[Tj,owe,g,wx],[[()=>RRe,{[b]:Cj}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],VMe=[3,x,Gv,0,[Zj],[[()=>LRe,{[v]:`RegionInfo`,[b]:WOe}]]],HMe=[3,x,Jv,0,[ok,XD,g,Hj,wx],[0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>URe,{[b]:Bj}],[()=>mU,{[b]:Tx}]]],UMe=[3,x,Yv,0,[qj,ok],[[()=>WRe,{[v]:`RouteTableSet`,[b]:QOe}],[0,{[v]:`NextToken`,[b]:qB}]]],WMe=[3,x,ay,0,[Vx,Kx,ok,XD,g,wx],[[()=>gU,{[b]:Bx}],[()=>wLe,{[b]:Wx}],0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],GMe=[3,x,oy,0,[ok,NM],[[0,{[v]:`NextToken`,[b]:qB}],[()=>qRe,{[v]:`SecurityGroupInfo`,[b]:dke}]]],KMe=[3,x,py,0,[XD,ok,hk,HA,lN,g,wx],[1,0,[()=>TU,{[b]:Dk}],[64,{[b]:UA}],[()=>JRe,{[b]:cN}],[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}]]],qMe=[3,x,my,0,[ok,ZN],[[0,{[v]:`NextToken`,[b]:qB}],[()=>YRe,{[v]:`SnapshotSet`,[b]:Ake}]]],JMe=[3,x,hy,0,[wx,FM,ok,XD,g],[[()=>mU,{[b]:Tx}],[()=>XRe,{[b]:mN}],0,1,[2,{[v]:`DryRun`,[b]:_}]]],YMe=[3,x,gy,0,[ok,rP],[[0,{[v]:`NextToken`,[b]:qB}],[()=>QRe,{[v]:`SubnetSet`,[b]:jke}]]],XMe=[3,x,jy,0,[EF,FC,g,wx,ok,XD],[[()=>sze,{[b]:TF}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>mU,{[b]:Tx}],[0,{[v]:`NextToken`,[b]:qB}],[1,{[v]:`MaxResults`,[b]:kB}]]],ZMe=[3,x,My,0,[ok,$F],[[0,{[v]:`NextToken`,[b]:qB}],[()=>cze,{[v]:`VolumeSet`,[b]:gAe}]]],QMe=[3,x,Ny,0,[wx,DF,ok,XD,g],[[()=>mU,{[b]:Tx}],[()=>uze,{[b]:yF}],0,1,[2,{[v]:`DryRun`,[b]:_}]]],$Me=[3,x,Py,0,[ok,nI],[[0,{[v]:`NextToken`,[b]:qB}],[()=>fze,{[v]:`VpcSet`,[b]:_Ae}]]],eNe=[3,x,N_,0,[WS,yF,g],[[0,{[v]:`InternetGatewayId`,[b]:Kz}],[0,{[v]:`VpcId`,[b]:lH}],[2,{[v]:`DryRun`,[b]:_}]],2],tNe=[3,x,Fy,0,[TF,Uy,dx,QS,g],[0,0,2,0,[2,{[v]:`DryRun`,[b]:_}]],1],nNe=[3,x,u_,0,[Oh,nA,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],rNe=[3,x,B_,0,[Oh],[0],1],iNe=[3,x,V_,0,[aC],[[()=>NH,{[v]:`IamInstanceProfileAssociation`,[b]:Yz}]]],aNe=[3,x,Xv,0,[Oh,g],[[0,{[v]:`AssociationId`,[b]:TI}],[2,{[v]:`DryRun`,[b]:_}]],1],oNe=[3,x,tv,0,[zM,o_,LP],[[1,{[v]:`SizeInGB`,[b]:gke}],[1,{[v]:`Count`,[b]:iR}],[0,{[v]:`Type`,[b]:tH}]]],sNe=[3,x,Ky,0,[Fv,hT,cN,UF,WF,bT,FP,lk,Vh,cx,SF,Wh,Yy],[[2,{[v]:`DeleteOnTermination`,[b]:bR}],[1,{[v]:`Iops`,[b]:uB}],[0,{[v]:`SnapshotId`,[b]:MV}],[1,{[v]:`VolumeSize`,[b]:hH}],[0,{[v]:`VolumeType`,[b]:gH}],[0,{[v]:`KmsKeyId`,[b]:pB}],[1,{[v]:`Throughput`,[b]:$V}],[0,{[v]:`OutpostArn`,[b]:YB}],[0,{[v]:`AvailabilityZone`,[b]:YI}],[2,{[v]:`Encrypted`,[b]:_z}],1,0,1]],cNe=[3,x,Zy,0,[Yy,Qh,lg,rg,bD,nO,PD],[[1,{[v]:`EbsCardIndex`,[b]:RR}],[1,{[v]:`BaselineBandwidthInMbps`,[b]:oL}],[1,{[v]:`BaselineThroughputInMBps`,[b]:vL}],[1,{[v]:`BaselineIops`,[b]:dL}],[1,{[v]:`MaximumBandwidthInMbps`,[b]:CB}],[1,{[v]:`MaximumThroughputInMBps`,[b]:jB}],[1,{[v]:`MaximumIops`,[b]:wB}]]],lNe=[3,x,Ab,0,[zb,tx,Pb,nk,DD,qCe,OD,Qy],[[0,{[v]:`EbsOptimizedSupport`,[b]:zTe}],[0,{[v]:`EncryptionSupport`,[b]:pz}],[()=>fNe,{[v]:`EbsOptimizedInfo`,[b]:LTe}],[0,{[v]:`NvmeSupport`,[b]:KB}],[1,{[v]:`MaximumEbsAttachments`,[b]:vDe}],[0,{[v]:`AttachmentLimitType`,[b]:OI}],[1,{[v]:`MaximumEbsCards`,[b]:yDe}],[()=>pLe,{[v]:`EbsCardSet`,[b]:zR}]]],uNe=[3,x,wb,0,[Bh,Fv,eP,TF,Ph,FF,wk,Yy],[[4,{[v]:`AttachTime`,[b]:JI}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[0,{[v]:`Status`,[b]:GV}],[0,{[v]:`VolumeId`,[b]:dH}],[0,{[v]:`AssociatedResource`,[b]:LI}],[0,{[v]:`VolumeOwnerId`,[b]:pAe}],[()=>UH,{[v]:`Operator`,[b]:QB}],[1,{[v]:`EbsCardIndex`,[b]:RR}]]],dNe=[3,x,Tb,0,[TF,Fv],[[0,{[v]:`VolumeId`,[b]:dH}],[2,{[v]:`DeleteOnTermination`,[b]:bR}]]],fNe=[3,x,Pb,0,[Qh,lg,rg,bD,nO,PD],[[1,{[v]:`BaselineBandwidthInMbps`,[b]:oL}],[1,{[v]:`BaselineThroughputInMBps`,[b]:vL}],[1,{[v]:`BaselineIops`,[b]:dL}],[1,{[v]:`MaximumBandwidthInMbps`,[b]:CB}],[1,{[v]:`MaximumThroughputInMBps`,[b]:jB}],[1,{[v]:`MaximumIops`,[b]:wB}]]],pNe=[3,x,jb,0,[kD],[[1,{[v]:`MaximumEfaInterfaces`,[b]:bDe}]]],mNe=[3,x,rb,0,[lb,ib,ob,sb],[[0,{[v]:`ElasticGpuId`,[b]:qR}],[0,{[v]:`ElasticGpuAssociationId`,[b]:UR}],[0,{[v]:`ElasticGpuAssociationState`,[b]:WR}],[0,{[v]:`ElasticGpuAssociationTime`,[b]:KR}]]],kH=[3,x,pb,0,[LP],[0],1],hNe=[3,x,db,0,[LP],[[0,{[v]:`Type`,[b]:tH}]]],gNe=[3,x,hb,0,[LP,o_],[0,1],1],_Ne=[3,x,gb,0,[xb,_b,yb,bb],[[0,{[v]:`ElasticInferenceAcceleratorArn`,[b]:YR}],[0,{[v]:`ElasticInferenceAcceleratorAssociationId`,[b]:XR}],[0,{[v]:`ElasticInferenceAcceleratorAssociationState`,[b]:ZR}],[4,{[v]:`ElasticInferenceAcceleratorAssociationTime`,[b]:$R}]]],AH=[3,x,Yb,0,[qb,Qb],[2,()=>vNe]],vNe=[3,x,$b,0,[Zb],[2]],yNe=[3,x,Bb,0,[sx],[[2,{[v]:`Enabled`,[b]:gz}]]],jH=[3,x,Rb,0,[sx],[2]],bNe=[3,x,Tx,0,[_O,XF],[0,[()=>FU,{[b]:$P}]]],xNe=[3,x,px,0,[_O,dO,o_,RD],[[0,{[v]:`Name`,[b]:IB}],[0,{[v]:`Manufacturer`,[b]:NB}],[1,{[v]:`Count`,[b]:iR}],[()=>SNe,{[v]:`MemoryInfo`,[b]:TB}]]],SNe=[3,x,hx,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],CNe=[3,x,_x,0,[Ex,oP],[[()=>SLe,{[v]:`Fpgas`,[b]:YTe}],[1,{[v]:`TotalFpgaMemoryInMiB`,[b]:Bke}]]],wNe=[3,x,Ax,0,[QS,pD,g],[0,2,[2,{[v]:`DryRun`,[b]:_}]],1],TNe=[3,x,jx,0,[QS,IP,Tk],[[0,{[v]:`InstanceId`,[b]:qz}],[4,{[v]:`Timestamp`,[b]:eH}],[0,{[v]:`Output`,[b]:iOe}]]],ENe=[3,x,Nx,0,[_O,dO,o_,zT,Jx,sI,RD],[[0,{[v]:`Name`,[b]:IB}],[0,{[v]:`Manufacturer`,[b]:NB}],[1,{[v]:`Count`,[b]:iR}],[1,{[v]:`LogicalGpuCount`,[b]:rDe}],[1,{[v]:`GpuPartitionSize`,[b]:tEe}],[()=>pze,{[v]:`WorkloadSet`,[b]:wAe}],[()=>DNe,{[v]:`MemoryInfo`,[b]:TB}]]],DNe=[3,x,Fx,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],ONe=[3,x,zx,0,[Xx,cP],[[()=>CLe,{[v]:`Gpus`,[b]:nEe}],[1,{[v]:`TotalGpuMemoryInMiB`,[b]:Hke}]]],kNe=[3,x,Hx,0,[Bx,Wx],[[0,{[v]:`GroupId`,[b]:Cz}],[0,{[v]:`GroupName`,[b]:wz}]]],ANe=[3,x,eS,0,[a_],[[2,{[v]:`Configured`,[b]:rR}]]],jNe=[3,x,tS,0,[a_],[2]],MH=[3,x,iC,0,[qh,uS],[[0,{[v]:`Arn`,[b]:eL}],[0,{[v]:`Id`,[b]:oEe}]]],NH=[3,x,aC,0,[Oh,QS,iC,$N,IP],[[0,{[v]:`AssociationId`,[b]:TI}],[0,{[v]:`InstanceId`,[b]:qz}],[()=>MH,{[v]:`IamInstanceProfile`,[b]:Jz}],[0,{[v]:`State`,[b]:WV}],[4,{[v]:`Timestamp`,[b]:eH}]]],PH=[3,x,fC,0,[qh,_O],[[0,{[v]:`Arn`,[b]:eL}],[0,{[v]:`Name`,[b]:IB}]]],MNe=[3,x,fT,0,[Wk,YP,eg,Hy,nx,lS,JC,_O,KA,qA,TN,PN,iP,qF,ig,kP,Cy,Kw,HM,Hv,UT,bS,BM,YM,Cx,xA,cT,eT,vC,wC,$N,fk,Xwe,LA,Ik,Jh,tT,yT,uj,MA],[[0,{[v]:`PlatformDetails`,[b]:nV}],[0,{[v]:`UsageOperation`,[b]:aH}],[()=>oLe,{[v]:`BlockDeviceMapping`,[b]:sL}],[0,{[v]:`Description`,[b]:PR}],[2,{[v]:`EnaSupport`,[b]:mz}],[0,{[v]:`Hypervisor`,[b]:Dz}],[0,{[v]:`ImageOwnerAlias`,[b]:CEe}],[0,{[v]:`Name`,[b]:IB}],[0,{[v]:`RootDeviceName`,[b]:hV}],[0,{[v]:`RootDeviceType`,[b]:gV}],[0,{[v]:`SriovNetSupport`,[b]:IV}],[()=>ZH,{[v]:`StateReason`,[b]:RV}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`VirtualizationType`,[b]:_H}],[0,{[v]:`BootMode`,[b]:fL}],[0,{[v]:`TpmSupport`,[b]:ZV}],[0,{[v]:`DeprecationTime`,[b]:DR}],[0,{[v]:`ImdsSupport`,[b]:HEe}],[0,{[v]:`SourceInstanceId`,[b]:_ke}],[0,{[v]:`DeregistrationProtection`,[b]:SR}],[0,{[v]:`LastLaunchedTime`,[b]:oDe}],[2,{[v]:`ImageAllowed`,[b]:dEe}],[0,{[v]:`SourceImageId`,[b]:OV}],[0,{[v]:`SourceImageRegion`,[b]:AV}],[2,{[v]:`FreeTierEligible`,[b]:xz}],[0,{[v]:`PublicSsmParameterName`,[b]:wOe}],[()=>OLe,{[v]:`ImageWatermarkSet`,[b]:XEe}],[()=>hPe,{[v]:`InstanceTypeSpecification`,[b]:KEe}],[0,{[v]:`ImageId`,[b]:Zz}],[0,{[v]:`ImageLocation`,[b]:yEe}],[0,{[v]:`ImageState`,[b]:VEe}],[0,{[v]:`ImageOwnerId`,[b]:wEe}],[0,{[v]:`CreationDate`,[b]:kL}],[2,{[v]:`IsPublic`,[b]:NEe}],[()=>DU,{[v]:`ProductCodes`,[b]:$B}],[0,{[v]:`Architecture`,[b]:tL}],[0,{[v]:`ImageType`,[b]:YEe}],[0,{[v]:`KernelId`,[b]:fB}],[0,{[v]:`RamdiskId`,[b]:_V}],[0,{[v]:`Platform`,[b]:uV}]]],NNe=[3,x,uT,0,[aI,YM,BM,RM,iI],[[0,{[v]:`WatermarkKey`,[b]:CAe}],[0,{[v]:`SourceImageRegion`,[b]:AV}],[0,{[v]:`SourceImageId`,[b]:OV}],[4,{[v]:`SourceImageCreationTime`,[b]:hke}],[4,{[v]:`WatermarkCreationTime`,[b]:SAe}]]],PNe=[3,x,SC,0,[ST,gA,wP,g],[[0,{[v]:`KeyName`,[b]:mB}],[21,{[v]:`PublicKeyMaterial`,[b]:SOe}],[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}]],2],FNe=[3,x,CC,0,[vT,ST,ET,iP],[[0,{[v]:`KeyFingerprint`,[b]:dB}],[0,{[v]:`KeyName`,[b]:mB}],[0,{[v]:`KeyPairId`,[b]:hB}],[()=>NU,{[v]:`TagSet`,[b]:XV}]]],INe=[3,x,gS,0,[Gh,uP],[[()=>kLe,{[v]:`Accelerators`,[b]:QI}],[1,{[v]:`TotalInferenceMemoryInMiB`,[b]:Uke}]]],LNe=[3,x,MS,0,[o_,_O,dO,RD],[[1,{[v]:`Count`,[b]:iR}],[0,{[v]:`Name`,[b]:IB}],[0,{[v]:`Manufacturer`,[b]:NB}],[()=>RNe,{[v]:`MemoryInfo`,[b]:TB}]]],RNe=[3,x,PS,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],zNe=[3,x,pT,0,[Jh,eg,Gg,Nb,nx,lS,iC,EC,cb,Sb,XO,lk,KA,qA,NM,mM,JM,TN,PN,iP,qF,Cg,qwe,Eg,kg,eS,mD,KD,Bb,ig,Wk,YP,XP,zk,SS,kP,qD,Qwe,$O,wk,oN,QS,vC,$N,Rk,Uk,BN,ST,KCe,Ik,Xw,dD,NA,yT,uj,MA,gO,mN,yF,oA,cA],[[0,{[v]:`Architecture`,[b]:tL}],[()=>ALe,{[v]:`BlockDeviceMapping`,[b]:sL}],[0,{[v]:`ClientToken`,[b]:XL}],[2,{[v]:`EbsOptimized`,[b]:rz}],[2,{[v]:`EnaSupport`,[b]:mz}],[0,{[v]:`Hypervisor`,[b]:Dz}],[()=>MH,{[v]:`IamInstanceProfile`,[b]:Jz}],[0,{[v]:`InstanceLifecycle`,[b]:bEe}],[()=>mLe,{[v]:`ElasticGpuAssociationSet`,[b]:GR}],[()=>vLe,{[v]:`ElasticInferenceAcceleratorAssociationSet`,[b]:QR}],[()=>ILe,{[v]:`NetworkInterfaceSet`,[b]:UB}],[0,{[v]:`OutpostArn`,[b]:YB}],[0,{[v]:`RootDeviceName`,[b]:hV}],[0,{[v]:`RootDeviceType`,[b]:gV}],[()=>hU,{[v]:`GroupSet`,[b]:Ez}],[2,{[v]:`SourceDestCheck`,[b]:CV}],[0,{[v]:`SpotInstanceRequestId`,[b]:yke}],[0,{[v]:`SriovNetSupport`,[b]:IV}],[()=>ZH,{[v]:`StateReason`,[b]:RV}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`VirtualizationType`,[b]:_H}],[()=>gje,{[v]:`CpuOptions`,[b]:BL}],[0,{[v]:`CapacityBlockId`,[b]:CL}],[0,{[v]:`CapacityReservationId`,[b]:UL}],[()=>dje,{[v]:`CapacityReservationSpecification`,[b]:KL}],[()=>ANe,{[v]:`HibernationOptions`,[b]:Az}],[()=>_Re,{[v]:`LicenseSet`,[b]:_B}],[()=>QNe,{[v]:`MetadataOptions`,[b]:DB}],[()=>yNe,{[v]:`EnclaveOptions`,[b]:az}],[0,{[v]:`BootMode`,[b]:fL}],[0,{[v]:`PlatformDetails`,[b]:nV}],[0,{[v]:`UsageOperation`,[b]:aH}],[4,{[v]:`UsageOperationUpdateTime`,[b]:rAe}],[()=>ZFe,{[v]:`PrivateDnsNameOptions`,[b]:eV}],[0,{[v]:`Ipv6Address`,[b]:Bz}],[0,{[v]:`TpmSupport`,[b]:ZV}],[()=>JNe,{[v]:`MaintenanceOptions`,[b]:OB}],[0,{[v]:`CurrentInstanceBootMode`,[b]:NL}],[()=>nPe,{[v]:`NetworkPerformanceOptions`,[b]:WB}],[()=>UH,{[v]:`Operator`,[b]:QB}],[()=>zLe,{[v]:`SecondaryInterfaceSet`,[b]:jV}],[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`ImageId`,[b]:Zz}],[()=>IH,{[v]:`InstanceState`,[b]:UEe}],[0,{[v]:`PrivateDnsName`,[b]:tV}],[0,{[v]:`DnsName`,[b]:vR}],[0,{[v]:`Reason`,[b]:nke}],[0,{[v]:`KeyName`,[b]:mB}],[1,{[v]:`AmiLaunchIndex`,[b]:DI}],[()=>DU,{[v]:`ProductCodes`,[b]:$B}],[0,{[v]:`InstanceType`,[b]:sB}],[4,{[v]:`LaunchTime`,[b]:pDe}],[()=>WH,{[v]:`Placement`,[b]:dV}],[0,{[v]:`KernelId`,[b]:fB}],[0,{[v]:`RamdiskId`,[b]:_V}],[0,{[v]:`Platform`,[b]:uV}],[()=>jFe,{[v]:`Monitoring`,[b]:FB}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[0,{[v]:`IpAddress`,[b]:zz}]]],BNe=[3,x,mS,0,[qb,Qb],[[2,{[v]:`EnaSrdEnabled`,[b]:lz}],[()=>VNe,{[v]:`EnaSrdUdpSpecification`,[b]:fz}]]],VNe=[3,x,hS,0,[Zb],[[2,{[v]:`EnaSrdUdpEnabled`,[b]:dz}]]],HNe=[3,x,CS,0,[Tv,ox],[[0,{[v]:`DeviceName`,[b]:gR}],[()=>uNe,{[v]:`Ebs`,[b]:hz}]]],UNe=[3,x,TS,0,[Tv,ox,NF,EO],[[0,{[v]:`DeviceName`,[b]:gR}],[()=>dNe,{[v]:`Ebs`,[b]:hz}],[0,{[v]:`VirtualName`,[b]:fH}],[0,{[v]:`NoDevice`,[b]:zB}]]],WNe=[3,x,pC,0,[Sw],[[0,{[v]:`Ipv4Prefix`,[b]:rB}]]],GNe=[3,x,$S,0,[SS,iw],[[0,{[v]:`Ipv6Address`,[b]:Bz}],[2,{[v]:`IsPrimaryIpv6`,[b]:jEe}]]],KNe=[3,x,nC,0,[SS],[0]],qNe=[3,x,mC,0,[yw],[[0,{[v]:`Ipv6Prefix`,[b]:iB}]]],JNe=[3,x,kC,0,[Fh,Sj],[[0,{[v]:`AutoRecovery`,[b]:RI}],[0,{[v]:`RebootMigration`,[b]:qOe}]]],YNe=[3,x,AC,0,[Fh],[0]],XNe=[3,x,jC,0,[rO,DN],[0,()=>EIe]],ZNe=[3,x,MC,0,[oS,rS,Qx,nS,IC],[0,1,0,0,0]],QNe=[3,x,NC,0,[$N,oS,rS,Qx,nS,IC],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`HttpTokens`,[b]:Pz}],[1,{[v]:`HttpPutResponseHopLimit`,[b]:Mz}],[0,{[v]:`HttpEndpoint`,[b]:Oz}],[0,{[v]:`HttpProtocolIpv6`,[b]:jz}],[0,{[v]:`InstanceMetadataTags`,[b]:Qz}]]],$Ne=[3,x,RC,0,[Yh,Xh,Hy,Dx,dS,yD,qO,fk,Rk,oA,sA,mM,eP,mN,yF,iT,xw,hw,Kg,wk],[[()=>FH,{[v]:`Association`,[b]:nL}],[()=>ePe,{[v]:`Attachment`,[b]:rL}],[0,{[v]:`Description`,[b]:PR}],[()=>hU,{[v]:`GroupSet`,[b]:Ez}],[()=>yU,{[v]:`Ipv6AddressesSet`,[b]:Rz}],[0,{[v]:`MacAddress`,[b]:SB}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`PrivateDnsName`,[b]:tV}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[()=>RLe,{[v]:`PrivateIpAddressesSet`,[b]:iV}],[2,{[v]:`SourceDestCheck`,[b]:CV}],[0,{[v]:`Status`,[b]:GV}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`InterfaceType`,[b]:lB}],[()=>MLe,{[v]:`Ipv4PrefixSet`,[b]:$z}],[()=>PLe,{[v]:`Ipv6PrefixSet`,[b]:eB}],[()=>pje,{[v]:`ConnectionTrackingConfiguration`,[b]:ZL}],[()=>UH,{[v]:`Operator`,[b]:QB}]]],FH=[3,x,zC,0,[_g,wg,YC,Uk,nA],[[0,{[v]:`CarrierIp`,[b]:ML}],[0,{[v]:`CustomerOwnedIp`,[b]:VL}],[0,{[v]:`IpOwnerId`,[b]:EEe}],[0,{[v]:`PublicDnsName`,[b]:dOe}],[0,{[v]:`PublicIp`,[b]:rV}]]],ePe=[3,x,BC,0,[Bh,kh,Fv,D_,eP,SO,Jb,Hb],[[4,{[v]:`AttachTime`,[b]:JI}],[0,{[v]:`AttachmentId`,[b]:EI}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[1,{[v]:`DeviceIndex`,[b]:mR}],[0,{[v]:`Status`,[b]:GV}],[1,{[v]:`NetworkCardIndex`,[b]:RB}],[()=>BNe,{[v]:`EnaSrdSpecification`,[b]:uz}],[1,{[v]:`EnaQueueCount`,[b]:oz}]]],tPe=[3,x,HC,0,[Nh,Fv,Hy,D_,Dx,pS,dS,qO,oA,sA,AN,mN,Sh,iT,SO,xw,$C,hw,QC,dA,Jb,qg,Hb],[[2,{[v]:`AssociatePublicIpAddress`,[b]:MI}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[0,{[v]:`Description`,[b]:PR}],[1,{[v]:`DeviceIndex`,[b]:mR}],[()=>kU,{[b]:xM}],[1,{[v]:`Ipv6AddressCount`,[b]:Lz}],[()=>yU,{[v]:`Ipv6Addresses`,[b]:Rz}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[()=>EU,{[v]:`PrivateIpAddresses`,[b]:iV}],[1,{[v]:`SecondaryPrivateIpAddressCount`,[b]:LV}],[0,{[v]:`SubnetId`,[b]:NV}],2,0,1,[()=>SU,{[b]:Sw}],1,[()=>CU,{[b]:yw}],1,2,()=>AH,()=>DH,1]],nPe=[3,x,KC,0,[ug],[[0,{[v]:`BandwidthWeighting`,[b]:yL}]]],rPe=[3,x,qC,0,[ug],[0]],iPe=[3,x,nw,0,[Yh,PA,Rk,oA],[[()=>FH,{[v]:`Association`,[b]:nL}],[2,{[v]:`Primary`,[b]:fV}],[0,{[v]:`PrivateDnsName`,[b]:tV}],[0,{[v]:`PrivateIpAddress`,[b]:aV}]]],aPe=[3,x,Dw,0,[oF,HD,xg,MD,Ob,XS,xN,dk,ag,og,rj,GO,XT,GT,gP,ng,zh,xh,Ah,Mh,Rh,bO,wh,eO,cg,YA],[[()=>VIe,{[v]:`VCpuCount`,[b]:aAe}],[()=>CFe,{[v]:`MemoryMiB`,[b]:wDe}],[()=>fU,{[v]:`CpuManufacturerSet`,[b]:RL}],[()=>bFe,{[v]:`MemoryGiBPerVCpu`,[b]:CDe}],[()=>pU,{[v]:`ExcludedInstanceTypeSet`,[b]:nz}],[()=>_U,{[v]:`InstanceGenerationSet`,[b]:gEe}],[1,{[v]:`SpotMaxPricePercentageOverLowestPrice`,[b]:Tke}],[1,{[v]:`OnDemandMaxPricePercentageOverLowestPrice`,[b]:ZDe}],[0,{[v]:`BareMetal`,[b]:pL}],[0,{[v]:`BurstablePerformance`,[b]:mL}],[2,{[v]:`RequireHibernateSupport`,[b]:HOe}],[()=>RFe,{[v]:`NetworkInterfaceCount`,[b]:VDe}],[0,{[v]:`LocalStorage`,[b]:cDe}],[()=>wU,{[v]:`LocalStorageTypeSet`,[b]:sDe}],[()=>LIe,{[v]:`TotalLocalStorageGB`,[b]:Gke}],[()=>oje,{[v]:`BaselineEbsBandwidthMbps`,[b]:uL}],[()=>cU,{[v]:`AcceleratorTypeSet`,[b]:qI}],[()=>IAe,{[v]:`AcceleratorCount`,[b]:vI}],[()=>oU,{[v]:`AcceleratorManufacturerSet`,[b]:AI}],[()=>sU,{[v]:`AcceleratorNameSet`,[b]:jI}],[()=>RAe,{[v]:`AcceleratorTotalMemoryMiB`,[b]:KI}],[()=>PFe,{[v]:`NetworkBandwidthGbps`,[b]:FDe}],[()=>uU,{[v]:`AllowedInstanceTypeSet`,[b]:CI}],[1,{[v]:`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`,[b]:ADe}],[()=>cje,{[v]:`BaselinePerformanceFactors`,[b]:gL}],[2,{[v]:`RequireEncryptionInTransit`,[b]:IOe}]]],oPe=[3,x,Ew,0,[oF,HD,xg,MD,Ob,XS,xN,dk,ag,og,rj,GO,XT,GT,gP,ng,zh,xh,Ah,Mh,Rh,bO,wh,eO,cg,YA],[()=>HIe,()=>wFe,[()=>fU,{[b]:hTe}],()=>xFe,[()=>pU,{[b]:kb}],[()=>_U,{[b]:ZS}],1,1,0,0,2,()=>zFe,0,[()=>wU,{[b]:qT}],()=>RIe,()=>sje,[()=>cU,{[b]:vwe}],()=>LAe,[()=>oU,{[b]:XCe}],[()=>sU,{[b]:QCe}],()=>zAe,()=>FFe,[()=>uU,{[b]:WCe}],1,[()=>lje,0],2],2],sPe=[3,x,Uw,0,[Xh,yD,VM,fk,sA,mM,eP,RN,wN,iT],[[()=>cPe,{[v]:`Attachment`,[b]:rL}],[0,{[v]:`MacAddress`,[b]:SB}],[0,{[v]:`SecondaryInterfaceId`,[b]:vke}],[0,{[v]:`OwnerId`,[b]:XB}],[()=>BLe,{[v]:`PrivateIpAddressSet`,[b]:_Oe}],[2,{[v]:`SourceDestCheck`,[b]:CV}],[0,{[v]:`Status`,[b]:GV}],[0,{[v]:`SecondarySubnetId`,[b]:VV}],[0,{[v]:`SecondaryNetworkId`,[b]:Eke}],[0,{[v]:`InterfaceType`,[b]:lB}]]],cPe=[3,x,Pw,0,[Bh,kh,Fv,D_,eP,SO],[[4,{[v]:`AttachTime`,[b]:JI}],[0,{[v]:`AttachmentId`,[b]:EI}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[1,{[v]:`DeviceIndex`,[b]:mR}],[0,{[v]:`Status`,[b]:GV}],[1,{[v]:`NetworkCardIndex`,[b]:RB}]]],lPe=[3,x,Iw,0,[oA],[[0,{[v]:`PrivateIpAddress`,[b]:aV}]]],uPe=[3,x,zw,0,[oA],[0],1],dPe=[3,x,Hw,0,[Fv,D_,sA,rA,RN,iT,SO],[2,1,[()=>VLe,{[b]:oA}],1,0,0,1]],IH=[3,x,qw,0,[i_,_O],[[1,{[v]:`Code`,[b]:nR}],[0,{[v]:`Name`,[b]:IB}]]],fPe=[3,x,Mw,0,[QS,Wg,wA],[[0,{[v]:`InstanceId`,[b]:qz}],[()=>IH,{[v]:`CurrentState`,[b]:YL}],[()=>IH,{[v]:`PreviousState`,[b]:EOe}]]],pPe=[3,x,Ww,0,[TP,Wy,nk,tx],[[1,{[v]:`TotalSizeInGB`,[b]:Yke}],[()=>fLe,{[v]:`Disks`,[b]:IR}],[0,{[v]:`NvmeSupport`,[b]:KB}],[0,{[v]:`EncryptionSupport`,[b]:pz}]]],mPe=[3,x,Qw,0,[Xw,Zwe,Cx,WN,MN,JN,ag,lS,pA,lF,RD,Gw,Ww,Ab,ZO,zx,_x,Qk,gS,aS,Vwe,E_,twe,dM,MO,ik,rk,vD,QO,CA,xj,eN],[[0,{[v]:`InstanceType`,[b]:sB}],[2,{[v]:`CurrentGeneration`,[b]:jL}],[2,{[v]:`FreeTierEligible`,[b]:xz}],[()=>rze,{[v]:`SupportedUsageClasses`,[b]:Pke}],[()=>BRe,{[v]:`SupportedRootDeviceTypes`,[b]:kke}],[()=>aze,{[v]:`SupportedVirtualizationTypes`,[b]:Ike}],[2,{[v]:`BareMetal`,[b]:pL}],[0,{[v]:`Hypervisor`,[b]:Dz}],[()=>$Fe,{[v]:`ProcessorInfo`,[b]:vOe}],[()=>UIe,{[v]:`VCpuInfo`,[b]:oAe}],[()=>SFe,{[v]:`MemoryInfo`,[b]:TB}],[2,{[v]:`InstanceStorageSupported`,[b]:zEe}],[()=>pPe,{[v]:`InstanceStorageInfo`,[b]:REe}],[()=>lNe,{[v]:`EbsInfo`,[b]:PTe}],[()=>LFe,{[v]:`NetworkInfo`,[b]:WDe}],[()=>ONe,{[v]:`GpuInfo`,[b]:QTe}],[()=>CNe,{[v]:`FpgaInfo`,[b]:GTe}],[()=>qFe,{[v]:`PlacementGroupInfo`,[b]:pOe}],[()=>INe,{[v]:`InferenceAcceleratorInfo`,[b]:sEe}],[2,{[v]:`HibernationSupported`,[b]:aEe}],[2,{[v]:`BurstablePerformanceSupported`,[b]:_L}],[2,{[v]:`DedicatedHostsSupported`,[b]:pR}],[2,{[v]:`AutoRecoverySupported`,[b]:FI}],[()=>sLe,{[v]:`SupportedBootModes`,[b]:oke}],[0,{[v]:`NitroEnclavesSupport`,[b]:RDe}],[0,{[v]:`NitroTpmSupport`,[b]:JDe}],[()=>WFe,{[v]:`NitroTpmInfo`,[b]:qDe}],[()=>_Fe,{[v]:`MediaAcceleratorInfo`,[b]:gDe}],[()=>UFe,{[v]:`NeuronInfo`,[b]:GDe}],[0,{[v]:`PhcSupport`,[b]:TOe}],[0,{[v]:`RebootMigrationSupport`,[b]:KOe}],[2,{[v]:`SupportedInRegion`,[b]:bke}]]],LH=[3,x,$w,0,[Xw],[[0,{[v]:`InstanceType`,[b]:sB}]]],hPe=[3,x,eT,0,[rN,qP],[[()=>eze,{[v]:`SupportedInstanceTypeSet`,[b]:Ske}],[()=>nze,{[v]:`UnsupportedInstanceTypeSet`,[b]:nAe}]]],RH=[3,x,zS,0,[Zh,WS,fk,iP],[[()=>WLe,{[v]:`AttachmentSet`,[b]:WI}],[0,{[v]:`InternetGatewayId`,[b]:Kz}],[0,{[v]:`OwnerId`,[b]:XB}],[()=>NU,{[v]:`TagSet`,[b]:XV}]]],gPe=[3,x,BS,0,[$N,yF],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`VpcId`,[b]:lH}]]],_Pe=[3,x,_w,0,[vw,bx,xP,UP,Ow,Aw,yA],[[0,{[v]:`IpProtocol`,[b]:tB}],[1,{[v]:`FromPort`,[b]:bz}],[1,{[v]:`ToPort`,[b]:JV}],[()=>ize,{[v]:`Groups`,[b]:rEe}],[()=>JLe,{[v]:`IpRanges`,[b]:IEe}],[()=>ZLe,{[v]:`Ipv6Ranges`,[b]:LEe}],[()=>NRe,{[v]:`PrefixListIds`,[b]:COe}]]],vPe=[3,x,kw,0,[Hy,vg],[[0,{[v]:`Description`,[b]:PR}],[0,{[v]:`CidrIp`,[b]:PL}]]],yPe=[3,x,dw,0,[Sw],[0]],bPe=[3,x,fw,0,[Sw],[[0,{[v]:`Ipv4Prefix`,[b]:rB}]]],xPe=[3,x,pw,0,[yw],[0]],SPe=[3,x,mw,0,[yw],[[0,{[v]:`Ipv6Prefix`,[b]:iB}]]],CPe=[3,x,jw,0,[Hy,yg],[[0,{[v]:`Description`,[b]:PR}],[0,{[v]:`CidrIpv6`,[b]:FL}]]],wPe=[3,x,jT,0,[ET,iP,ST,vT,xT],[[0,{[v]:`KeyPairId`,[b]:hB}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`KeyName`,[b]:mB}],[0,{[v]:`KeyFingerprint`,[b]:dB}],[()=>bH,{[v]:`KeyMaterial`,[b]:QEe}]]],TPe=[3,x,kT,0,[ET,MT,iP,hA,Qg,ST,vT],[[0,{[v]:`KeyPairId`,[b]:hB}],[0,{[v]:`KeyType`,[b]:eDe}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`PublicKey`,[b]:xOe}],[4,{[v]:`CreateTime`,[b]:tR}],[0,{[v]:`KeyName`,[b]:mB}],[0,{[v]:`KeyFingerprint`,[b]:dB}]]],zH=[3,x,ZT,0,[yE,WE,Qg,fg,Oy,fD,iP,wk],[[0,{[v]:`LaunchTemplateId`,[b]:yB}],[0,{[v]:`LaunchTemplateName`,[b]:bB}],[4,{[v]:`CreateTime`,[b]:tR}],[0,{[v]:`CreatedBy`,[b]:TL}],[1,{[v]:`DefaultVersionNumber`,[b]:MR}],[1,{[v]:`LatestVersionNumber`,[b]:mDe}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[()=>UH,{[v]:`Operator`,[b]:QB}]]],EPe=[3,x,QT,0,[Tv,NF,ox,EO],[[0,{[v]:`DeviceName`,[b]:gR}],[0,{[v]:`VirtualName`,[b]:fH}],[()=>MPe,{[v]:`Ebs`,[b]:hz}],[0,{[v]:`NoDevice`,[b]:zB}]]],DPe=[3,x,eE,0,[Tv,NF,ox,EO],[0,0,()=>NPe,0]],OPe=[3,x,iE,0,[Dg,Ag],[0,()=>TH]],kPe=[3,x,aE,0,[Dg,Ag],[[0,{[v]:`CapacityReservationPreference`,[b]:WL}],[()=>EH,{[v]:`CapacityReservationTarget`,[b]:qL}]]],APe=[3,x,nE,0,[pg,SP,Ih,sk],[[1,{[v]:`CoreCount`,[b]:EL}],[1,{[v]:`ThreadsPerCore`,[b]:YV}],[0,{[v]:`AmdSevSnp`,[b]:VI}],[0,{[v]:`NestedVirtualization`,[b]:JB}]]],jPe=[3,x,rE,0,[pg,SP,Ih,sk],[1,1,0,0]],MPe=[3,x,sE,0,[cx,Fv,hT,bT,cN,UF,WF,FP,SF,Yy],[[2,{[v]:`Encrypted`,[b]:_z}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[1,{[v]:`Iops`,[b]:uB}],[0,{[v]:`KmsKeyId`,[b]:pB}],[0,{[v]:`SnapshotId`,[b]:MV}],[1,{[v]:`VolumeSize`,[b]:hH}],[0,{[v]:`VolumeType`,[b]:gH}],[1,{[v]:`Throughput`,[b]:$V}],[1,{[v]:`VolumeInitializationRate`,[b]:uH}],[1,{[v]:`EbsCardIndex`,[b]:RR}]]],NPe=[3,x,cE,0,[cx,Fv,hT,bT,cN,UF,WF,FP,SF,Yy],[2,2,1,0,0,1,0,1,1,1]],PPe=[3,x,lE,0,[LP,o_],[0,1],1],FPe=[3,x,dE,0,[LP,o_],[[0,{[v]:`Type`,[b]:tH}],[1,{[v]:`Count`,[b]:iR}]]],IPe=[3,x,hE,0,[qb,Qb],[[2,{[v]:`EnaSrdEnabled`,[b]:lz}],[()=>LPe,{[v]:`EnaSrdUdpSpecification`,[b]:fz}]]],LPe=[3,x,gE,0,[Zb],[[2,{[v]:`EnaSrdUdpEnabled`,[b]:dz}]]],RPe=[3,x,pE,0,[sx],[[2,{[v]:`Enabled`,[b]:gz}]]],zPe=[3,x,mE,0,[sx],[2]],BPe=[3,x,_E,0,[a_],[[2,{[v]:`Configured`,[b]:rR}]]],VPe=[3,x,vE,0,[a_],[2]],HPe=[3,x,bE,0,[qh,_O],[[0,{[v]:`Arn`,[b]:eL}],[0,{[v]:`Name`,[b]:IB}]]],UPe=[3,x,xE,0,[qh,_O],[0,0]],WPe=[3,x,SE,0,[Fh],[[0,{[v]:`AutoRecovery`,[b]:RI}]]],GPe=[3,x,CE,0,[Fh],[0]],KPe=[3,x,EE,0,[rO,DN],[[0,{[v]:`MarketType`,[b]:jDe}],[()=>dFe,{[v]:`SpotOptions`,[b]:Oke}]]],qPe=[3,x,wE,0,[rO,DN],[0,()=>fFe]],JPe=[3,x,DE,0,[$N,oS,rS,Qx,nS,IC],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`HttpTokens`,[b]:Pz}],[1,{[v]:`HttpPutResponseHopLimit`,[b]:Mz}],[0,{[v]:`HttpEndpoint`,[b]:Oz}],[0,{[v]:`HttpProtocolIpv6`,[b]:jz}],[0,{[v]:`InstanceMetadataTags`,[b]:Qz}]]],YPe=[3,x,TE,0,[oS,rS,Qx,nS,IC],[0,1,0,0,0]],XPe=[3,x,OE,0,[Sh,Nh,Fv,Hy,D_,Dx,iT,pS,dS,qO,oA,sA,AN,mN,SO,xw,$C,hw,QC,dA,Jb,qg,Hb],[[2,{[v]:`AssociateCarrierIpAddress`,[b]:_I}],[2,{[v]:`AssociatePublicIpAddress`,[b]:MI}],[2,{[v]:`DeleteOnTermination`,[b]:bR}],[0,{[v]:`Description`,[b]:PR}],[1,{[v]:`DeviceIndex`,[b]:mR}],[()=>gU,{[v]:`GroupSet`,[b]:Ez}],[0,{[v]:`InterfaceType`,[b]:lB}],[1,{[v]:`Ipv6AddressCount`,[b]:Lz}],[()=>yU,{[v]:`Ipv6AddressesSet`,[b]:Rz}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[()=>EU,{[v]:`PrivateIpAddressesSet`,[b]:iV}],[1,{[v]:`SecondaryPrivateIpAddressCount`,[b]:LV}],[0,{[v]:`SubnetId`,[b]:NV}],[1,{[v]:`NetworkCardIndex`,[b]:RB}],[()=>YLe,{[v]:`Ipv4PrefixSet`,[b]:$z}],[1,{[v]:`Ipv4PrefixCount`,[b]:OEe}],[()=>XLe,{[v]:`Ipv6PrefixSet`,[b]:eB}],[1,{[v]:`Ipv6PrefixCount`,[b]:kEe}],[2,{[v]:`PrimaryIpv6`,[b]:yOe}],[()=>IPe,{[v]:`EnaSrdSpecification`,[b]:uz}],[()=>fje,{[v]:`ConnectionTrackingSpecification`,[b]:QL}],[1,{[v]:`EnaQueueCount`,[b]:oz}]]],ZPe=[3,x,AE,0,[Sh,Nh,Fv,Hy,D_,Dx,iT,pS,dS,qO,oA,sA,AN,mN,SO,xw,$C,hw,QC,dA,Jb,qg,Hb],[2,2,2,0,1,[()=>kU,{[b]:xM}],0,1,[()=>NLe,0],0,0,[()=>EU,0],1,0,1,[()=>SU,{[b]:Sw}],1,[()=>CU,{[b]:yw}],1,2,()=>AH,()=>DH,1]],QPe=[3,x,ME,0,[Fv,D_,sA,rA,RN,iT,SO],[[2,{[v]:`DeleteOnTermination`,[b]:bR}],[1,{[v]:`DeviceIndex`,[b]:mR}],[()=>GRe,{[v]:`PrivateIpAddressesSet`,[b]:iV}],[1,{[v]:`PrivateIpAddressCount`,[b]:gOe}],[0,{[v]:`SecondarySubnetId`,[b]:VV}],[0,{[v]:`InterfaceType`,[b]:lB}],[1,{[v]:`NetworkCardIndex`,[b]:RB}]]],$Pe=[3,x,PE,0,[Fv,D_,sA,rA,RN,iT,SO],[2,1,[()=>KRe,{[b]:oA}],1,0,0,1]],eFe=[3,x,RE,0,[FT],[[0,{[v]:`LicenseConfigurationArn`,[b]:gB}]]],tFe=[3,x,zE,0,[FT],[0]],nFe=[3,x,GE,0,[ug],[[0,{[v]:`BandwidthWeighting`,[b]:yL}]]],rFe=[3,x,KE,0,[ug],[0]],iFe=[3,x,YE,0,[Vh,Wh,Kh,Wx,$x,PP,_M,iS,bA,Bx],[[0,{[v]:`AvailabilityZone`,[b]:YI}],[0,{[v]:`AvailabilityZoneId`,[b]:XI}],[0,{[v]:`Affinity`,[b]:$I}],[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`HostId`,[b]:kz}],[0,{[v]:`Tenancy`,[b]:QV}],[0,{[v]:`SpreadDomain`,[b]:wV}],[0,{[v]:`HostResourceGroupArn`,[b]:Nz}],[1,{[v]:`PartitionNumber`,[b]:cV}],[0,{[v]:`GroupId`,[b]:Cz}]]],aFe=[3,x,QE,0,[Vh,Wh,Kh,Wx,$x,PP,_M,iS,bA,Bx],[0,0,0,0,0,0,0,0,1,0]],oFe=[3,x,XE,0,[sS,Gb,Ub],[[0,{[v]:`HostnameType`,[b]:Fz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:cz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:sz}]]],sFe=[3,x,ZE,0,[sS,Gb,Ub],[0,2,2]],cFe=[3,x,HE,0,[sx],[[2,{[v]:`Enabled`,[b]:gz}]]],lFe=[3,x,UE,0,[sx],[2]],uFe=[3,x,$E,0,[yE,WE,QF],[0,0,0]],dFe=[3,x,eD,0,[YD,aN,tg,JF,rC],[[0,{[v]:`MaxPrice`,[b]:EDe}],[0,{[v]:`SpotInstanceType`,[b]:xke}],[1,{[v]:`BlockDurationMinutes`,[b]:lL}],[4,{[v]:`ValidUntil`,[b]:yAe}],[0,{[v]:`InstanceInterruptionBehavior`,[b]:_Ee}]]],fFe=[3,x,tD,0,[YD,aN,tg,JF,rC],[0,0,1,4,0]],pFe=[3,x,rD,0,[Wj,iP],[[0,{[v]:`ResourceType`,[b]:xV}],[()=>NU,{[v]:`TagSet`,[b]:XV}]]],mFe=[3,x,aD,0,[Wj,iP],[0,[()=>NU,{[b]:NP}]]],BH=[3,x,sD,0,[yE,WE,PF,dF,Qg,fg,Iy,oE,wk],[[0,{[v]:`LaunchTemplateId`,[b]:yB}],[0,{[v]:`LaunchTemplateName`,[b]:bB}],[1,{[v]:`VersionNumber`,[b]:pH}],[0,{[v]:`VersionDescription`,[b]:cAe}],[4,{[v]:`CreateTime`,[b]:tR}],[0,{[v]:`CreatedBy`,[b]:TL}],[2,{[v]:`DefaultVersion`,[b]:NR}],[()=>dIe,{[v]:`LaunchTemplateData`,[b]:lDe}],[()=>UH,{[v]:`Operator`,[b]:QB}]]],hFe=[3,x,LT,0,[FT],[[0,{[v]:`LicenseConfigurationArn`,[b]:gB}]]],gFe=[3,x,IT,0,[FT],[0]],_Fe=[3,x,vD,0,[Gh,yP],[[()=>yRe,{[v]:`Accelerators`,[b]:QI}],[1,{[v]:`TotalMediaMemoryInMiB`,[b]:qke}]]],vFe=[3,x,wD,0,[o_,_O,dO,RD],[[1,{[v]:`Count`,[b]:iR}],[0,{[v]:`Name`,[b]:IB}],[0,{[v]:`Manufacturer`,[b]:NB}],[()=>yFe,{[v]:`MemoryInfo`,[b]:TB}]]],yFe=[3,x,ED,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],bFe=[3,x,MD,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],xFe=[3,x,ND,0,[gD,lO],[1,1]],SFe=[3,x,RD,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],CFe=[3,x,HD,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],wFe=[3,x,UD,0,[gD,lO],[1,1],1],TFe=[3,x,FD,0,[QS,mM,Bb,f_,g,Mwe,$P,eg,p_,Xw,NT,Jj,VP,hC,Dx,Nb,TN,nx],[[0,{[v]:`InstanceId`,[b]:qz}],[()=>xH,0],()=>jH,[()=>xH,0],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Attribute`,[b]:iL}],[()=>NAe,{[v]:`Value`,[b]:cH}],[()=>jLe,{[v]:`BlockDeviceMapping`,[b]:sL}],[()=>xH,{[v]:`DisableApiTermination`,[b]:sR}],[()=>SH,{[v]:`InstanceType`,[b]:sB}],[()=>SH,{[v]:`Kernel`,[b]:tDe}],[()=>SH,{[v]:`Ramdisk`,[b]:tke}],[()=>CIe,{[v]:`UserData`,[b]:nH}],[()=>SH,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:Xz}],[()=>gU,{[b]:Bx}],[()=>xH,{[v]:`EbsOptimized`,[b]:rz}],[()=>SH,{[v]:`SriovNetSupport`,[b]:IV}],[()=>xH,{[v]:`EnaSupport`,[b]:mz}]],1],EFe=[3,x,BD,0,[g,Gg,yE,WE,Iy],[2,[0,4],0,0,[0,{[b]:gM}]]],DFe=[3,x,VD,0,[ZT],[[()=>zH,{[v]:`LaunchTemplate`,[b]:vB}]]],OFe=[3,x,ZD,0,[mN,Ch,JD,xD,Tg,eb,Lk,Kb,Wb,Mb,cv],[[0,{[v]:`SubnetId`,[b]:NV}],[()=>xH,0],[()=>xH,0],[()=>xH,0],0,[()=>xH,0],0,[()=>xH,0],[()=>xH,0],1,[()=>xH,0]],1],kFe=[3,x,aO,0,[TF,g,XN,WF,hT,FP,_D],[0,2,1,0,1,1,2],1],AFe=[3,x,oO,0,[MF],[[()=>WIe,{[v]:`VolumeModification`,[b]:fAe}]]],jFe=[3,x,gO,0,[$N],[[0,{[v]:`State`,[b]:WV}]]],VH=[3,x,NO,0,[Qg,wy,fx,yx,PO,BO,kk,$N,mN,yF,iP,Zg,jh,pwe,ewe,jCe,Bj],[[4,{[v]:`CreateTime`,[b]:tR}],[4,{[v]:`DeleteTime`,[b]:OR}],[0,{[v]:`FailureCode`,[b]:vz}],[0,{[v]:`FailureMessage`,[b]:yz}],[()=>bRe,{[v]:`NatGatewayAddressSet`,[b]:zDe}],[0,{[v]:`NatGatewayId`,[b]:VB}],[()=>nIe,{[v]:`ProvisionedBandwidth`,[b]:oOe}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`VpcId`,[b]:lH}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`ConnectivityType`,[b]:eR}],[0,{[v]:`AvailabilityMode`,[b]:kI}],[0,{[v]:`AutoScalingIps`,[b]:BI}],[0,{[v]:`AutoProvisionZones`,[b]:PI}],[()=>xRe,{[v]:`AttachedApplianceSet`,[b]:hI}],[0,{[v]:`RouteTableId`,[b]:bV}]]],MFe=[3,x,RO,0,[Eh,qO,fA,nA,Oh,Cw,yx,eP,Vh,Wh],[[0,{[v]:`AllocationId`,[b]:bI}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`PrivateIp`,[b]:bOe}],[0,{[v]:`PublicIp`,[b]:rV}],[0,{[v]:`AssociationId`,[b]:TI}],[2,{[v]:`IsPrimary`,[b]:PEe}],[0,{[v]:`FailureMessage`,[b]:yz}],[0,{[v]:`Status`,[b]:GV}],[0,{[v]:`AvailabilityZone`,[b]:YI}],[0,{[v]:`AvailabilityZoneId`,[b]:XI}]]],NFe=[3,x,FO,0,[LP,kCe,_F,mwe,tO,fx,yx],[[0,{[v]:`Type`,[b]:tH}],[0,{[v]:`ApplianceArn`,[b]:gI}],[0,{[v]:`VpcEndpointId`,[b]:uAe}],[0,{[v]:`AttachmentState`,[b]:GI}],[0,{[v]:`ModificationState`,[b]:AB}],[0,{[v]:`FailureCode`,[b]:vz}],[0,{[v]:`FailureMessage`,[b]:yz}]]],PFe=[3,x,bO,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],FFe=[3,x,yO,0,[gD,lO],[1,1]],IFe=[3,x,TO,0,[SO,ek,GD,PCe,Nwe,Ak,w_,AD,jD,aT],[[1,{[v]:`NetworkCardIndex`,[b]:RB}],[0,{[v]:`NetworkPerformance`,[b]:GB}],[1,{[v]:`MaximumNetworkInterfaces`,[b]:EB}],[1,{[v]:`AdditionalFlexibleNetworkInterfaces`,[b]:yI}],[1,{[v]:`BaselineBandwidthInGbps`,[b]:aL}],[1,{[v]:`PeakBandwidthInGbps`,[b]:sOe}],[1,{[v]:`DefaultEnaQueueCountPerInterface`,[b]:dR}],[1,{[v]:`MaximumEnaQueueCount`,[b]:xDe}],[1,{[v]:`MaximumEnaQueueCountPerInterface`,[b]:SDe}],[()=>TRe,{[v]:`InterfaceTypeSet`,[b]:qEe}]]],LFe=[3,x,ZO,0,[ek,GD,WD,Ev,xO,_S,vS,Yw,nx,ex,jb,Eb,Xb,Gwe,gx,Kg,EN,$D,yS],[[0,{[v]:`NetworkPerformance`,[b]:GB}],[1,{[v]:`MaximumNetworkInterfaces`,[b]:EB}],[1,{[v]:`MaximumNetworkCards`,[b]:TDe}],[1,{[v]:`DefaultNetworkCardIndex`,[b]:_R}],[()=>wRe,{[v]:`NetworkCards`,[b]:IDe}],[1,{[v]:`Ipv4AddressesPerInterface`,[b]:cEe}],[1,{[v]:`Ipv6AddressesPerInterface`,[b]:lEe}],[2,{[v]:`Ipv6Supported`,[b]:WEe}],[0,{[v]:`EnaSupport`,[b]:mz}],[2,{[v]:`EfaSupported`,[b]:VTe}],[()=>pNe,{[v]:`EfaInfo`,[b]:FTe}],[2,{[v]:`EncryptionInTransitSupported`,[b]:tz}],[2,{[v]:`EnaSrdSupported`,[b]:BTe}],[()=>iLe,{[v]:`BandwidthWeightings`,[b]:bL}],[0,{[v]:`FlexibleEnaQueuesSupport`,[b]:WTe}],[()=>Kje,{[v]:`ConnectionTrackingConfiguration`,[b]:ZL}],[2,{[v]:`SecondaryNetworkSupported`,[b]:Dke}],[1,{[v]:`MaximumSecondaryNetworkInterfaces`,[b]:kDe}],[1,{[v]:`Ipv4AddressesPerSecondaryInterface`,[b]:uEe}]]],RFe=[3,x,GO,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],zFe=[3,x,KO,0,[gD,lO],[1,1]],BFe=[3,x,DO,0,[o_,QF],[[1,{[v]:`Count`,[b]:iR}],[1,{[v]:`Version`,[b]:bAe}]]],VFe=[3,x,OO,0,[o_,_O,iTe,RD],[[1,{[v]:`Count`,[b]:iR}],[0,{[v]:`Name`,[b]:IB}],[()=>BFe,{[v]:`CoreInfo`,[b]:LL}],[()=>HFe,{[v]:`MemoryInfo`,[b]:TB}]]],HFe=[3,x,AO,0,[UM],[[1,{[v]:`SizeInMiB`,[b]:kV}]]],UFe=[3,x,QO,0,[jO,bP],[[()=>ERe,{[v]:`NeuronDevices`,[b]:LDe}],[1,{[v]:`TotalNeuronDeviceMemoryInMiB`,[b]:Jke}]]],WFe=[3,x,rk,0,[YN],[[()=>DRe,{[v]:`SupportedVersions`,[b]:Lke}]]],HH=[3,x,vk,0,[Ok],[0]],UH=[3,x,yk,0,[fO,Ok,Zx],[[2,{[v]:`Managed`,[b]:NDe}],[0,{[v]:`Principal`,[b]:aOe}],[2,{[v]:`HiddenByDefault`,[b]:iEe}]]],GFe=[3,x,Gk,0,[RS],[[0,{[v]:`InstanceFamily`,[b]:pEe}]]],KFe=[3,x,Kk,0,[RS],[0]],WH=[3,x,NA,0,[Wh,Kh,Wx,bA,$x,PP,_M,iS,Bx,Vh],[[0,{[v]:`AvailabilityZoneId`,[b]:XI}],[0,{[v]:`Affinity`,[b]:$I}],[0,{[v]:`GroupName`,[b]:wz}],[1,{[v]:`PartitionNumber`,[b]:cV}],[0,{[v]:`HostId`,[b]:kz}],[0,{[v]:`Tenancy`,[b]:QV}],[0,{[v]:`SpreadDomain`,[b]:wV}],[0,{[v]:`HostResourceGroupArn`,[b]:Nz}],[0,{[v]:`GroupId`,[b]:Cz}],[0,{[v]:`AvailabilityZone`,[b]:YI}]]],GH=[3,x,Yk,0,[Wx,$N,tP,Pk,Bx,iP,Ox,_N,VT,wk,Xk],[[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`Strategy`,[b]:KV}],[1,{[v]:`PartitionCount`,[b]:cOe}],[0,{[v]:`GroupId`,[b]:Cz}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`GroupArn`,[b]:XTe}],[0,{[v]:`SpreadLevel`,[b]:Cke}],[0,{[v]:`LinkedGroupId`,[b]:aDe}],[()=>UH,{[v]:`Operator`,[b]:QB}],[0,{[v]:`ParentGroupId`,[b]:mOe}]]],qFe=[3,x,Qk,0,[zN],[[()=>MRe,{[v]:`SupportedStrategies`,[b]:Mke}]]],JFe=[3,x,_A,0,[Hy,_A],[[0,{[v]:`Description`,[b]:PR}],[0,{[v]:`PrefixListId`,[b]:sV}]]],YFe=[3,x,Bk,0,[sS,Gb,Ub],[[0,{[v]:`HostnameType`,[b]:Fz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:cz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:sz}]]],XFe=[3,x,Vk,0,[sS,Gb,Ub],[0,2,2]],ZFe=[3,x,Hk,0,[sS,Gb,Ub],[[0,{[v]:`HostnameType`,[b]:Fz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:cz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:sz}]]],QFe=[3,x,iA,0,[PA,oA],[[2,{[v]:`Primary`,[b]:fV}],[0,{[v]:`PrivateIpAddress`,[b]:aV}]]],$Fe=[3,x,pA,0,[cM,pM,vM,dO],[[()=>ZIe,{[v]:`SupportedArchitectures`,[b]:ike}],[1,{[v]:`SustainedClockSpeedInGhz`,[b]:ske}],[()=>$Re,{[v]:`SupportedFeatures`,[b]:lke}],[0,{[v]:`Manufacturer`,[b]:NB}]]],eIe=[3,x,Fk,0,[jk,Nk],[[0,{[v]:`ProductCode`,[b]:lOe}],[0,{[v]:`Type`,[b]:tH}]]],tIe=[3,x,DA,0,[Ix],[[0,{[v]:`GatewayId`,[b]:Sz}]]],nIe=[3,x,kk,0,[TA,IA,Gj,$j,eP],[[4,{[v]:`ProvisionTime`,[b]:DOe}],[0,{[v]:`Provisioned`,[b]:MOe}],[4,{[v]:`RequestTime`,[b]:$Oe}],[0,{[v]:`Requested`,[b]:rke}],[0,{[v]:`Status`,[b]:GV}]]],rIe=[3,x,aj,0,[bC,g],[[()=>vU,{[b]:QS}],[2,{[v]:`DryRun`,[b]:_}]],1],iIe=[3,x,Ej,0,[Bx,SA,HP,yF,LF],[[0,{[v]:`GroupId`,[b]:Cz}],[0,{[v]:`PeeringStatus`,[b]:lV}],[0,{[v]:`UserId`,[b]:rH}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`VpcPeeringConnectionId`,[b]:mH}]]],aIe=[3,x,Qj,0,[pk,Yx,Cj,lx],[[0,{[v]:`OptInStatus`,[b]:ZB}],[()=>IRe,{[v]:`GeographySet`,[b]:Tz}],[0,{[v]:`RegionName`,[b]:vV}],[0,{[v]:`RegionEndpoint`,[b]:ROe}]]],oIe=[3,x,$A,0,[_O],[[0,{[v]:`Name`,[b]:IB}]]],sIe=[3,x,oj,0,[_O,wC,Hwe,ig,kP,zP,Kw,wP,g,Hy,Jh,yT,uj,KA,eg,qF,TN,nx],[[0,{[v]:`Name`,[b]:IB}],0,[()=>aLe,{[b]:Uwe}],0,0,[()=>MAe,0],0,[()=>PU,{[b]:DP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Description`,[b]:PR}],[0,{[v]:`Architecture`,[b]:tL}],[0,{[v]:`KernelId`,[b]:fB}],[0,{[v]:`RamdiskId`,[b]:_V}],[0,{[v]:`RootDeviceName`,[b]:hV}],[()=>dU,{[b]:$h}],[0,{[v]:`VirtualizationType`,[b]:_H}],[0,{[v]:`SriovNetSupport`,[b]:IV}],[2,{[v]:`EnaSupport`,[b]:mz}]],1],cIe=[3,x,sj,0,[vC],[[0,{[v]:`ImageId`,[b]:Zz}]]],lIe=[3,x,zA,0,[Eh,nA,vO,g],[0,0,0,[2,{[v]:`DryRun`,[b]:_}]]],KH=[3,x,_j,0,[yT,Nb,iC,eg,XO,vC,Xw,ST,gO,NA,GA,p_,hC,VP,wP,mb,Cb,CM,NM,PC,Vg,Cg,kg,JT,eS,KD,Bb,Dw,zk,qD,f_,wk,$O,oN],[0,2,()=>UPe,[()=>nRe,{[b]:$h}],[()=>sRe,{[b]:YO}],0,0,0,()=>lFe,()=>aFe,0,2,0,[()=>bH,0],[()=>hRe,{[b]:DP}],[()=>hLe,{[b]:pb}],[()=>rRe,{[b]:hb}],[()=>kU,{[b]:xM}],[()=>MU,{[b]:PM}],()=>qPe,()=>OH,()=>jPe,()=>OPe,[()=>dRe,{[b]:YT}],()=>VPe,()=>YPe,()=>zPe,[()=>oPe,0],()=>sFe,()=>GPe,2,()=>HH,()=>rFe,[()=>lRe,{[b]:sN}]]],qH=[3,x,tM,0,[dj,fk,mj,Dx,mT],[[0,{[v]:`ReservationId`,[b]:UOe}],[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`RequesterId`,[b]:GOe}],[()=>hU,{[v]:`GroupSet`,[b]:Ez}],[()=>FLe,{[v]:`InstancesSet`,[b]:aB}]]],uIe=[3,x,ZA,0,[i_,pO],[[0,{[v]:`Code`,[b]:nR}],[0,{[v]:`Message`,[b]:PB}]]],dIe=[3,x,vj,0,[yT,Nb,iC,eg,XO,vC,Xw,ST,gO,NA,GA,p_,hC,VP,wP,mb,Cb,CM,NM,PC,Vg,Cg,kg,JT,eS,KD,Bb,Dw,zk,qD,f_,wk,$O,oN],[[0,{[v]:`KernelId`,[b]:fB}],[2,{[v]:`EbsOptimized`,[b]:rz}],[()=>HPe,{[v]:`IamInstanceProfile`,[b]:Jz}],[()=>tRe,{[v]:`BlockDeviceMappingSet`,[b]:cL}],[()=>oRe,{[v]:`NetworkInterfaceSet`,[b]:UB}],[0,{[v]:`ImageId`,[b]:Zz}],[0,{[v]:`InstanceType`,[b]:sB}],[0,{[v]:`KeyName`,[b]:mB}],[()=>cFe,{[v]:`Monitoring`,[b]:FB}],[()=>iFe,{[v]:`Placement`,[b]:dV}],[0,{[v]:`RamDiskId`,[b]:POe}],[2,{[v]:`DisableApiTermination`,[b]:sR}],[0,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:Xz}],[()=>bH,{[v]:`UserData`,[b]:nH}],[()=>mRe,{[v]:`TagSpecificationSet`,[b]:Xke}],[()=>gLe,{[v]:`ElasticGpuSpecificationSet`,[b]:JR}],[()=>iRe,{[v]:`ElasticInferenceAcceleratorSet`,[b]:ez}],[()=>FU,{[v]:`SecurityGroupIdSet`,[b]:uke}],[()=>FU,{[v]:`SecurityGroupSet`,[b]:mke}],[()=>KPe,{[v]:`InstanceMarketOptions`,[b]:xEe}],[()=>Gje,{[v]:`CreditSpecification`,[b]:JL}],[()=>APe,{[v]:`CpuOptions`,[b]:BL}],[()=>kPe,{[v]:`CapacityReservationSpecification`,[b]:KL}],[()=>uRe,{[v]:`LicenseSet`,[b]:_B}],[()=>BPe,{[v]:`HibernationOptions`,[b]:Az}],[()=>JPe,{[v]:`MetadataOptions`,[b]:DB}],[()=>RPe,{[v]:`EnclaveOptions`,[b]:az}],[()=>aPe,{[v]:`InstanceRequirements`,[b]:FEe}],[()=>oFe,{[v]:`PrivateDnsNameOptions`,[b]:eV}],[()=>WPe,{[v]:`MaintenanceOptions`,[b]:OB}],[2,{[v]:`DisableApiStop`,[b]:oR}],[()=>UH,{[v]:`Operator`,[b]:QB}],[()=>nFe,{[v]:`NetworkPerformanceOptions`,[b]:WB}],[()=>cRe,{[v]:`SecondaryInterfaceSet`,[b]:jV}]]],fIe=[3,x,Nj,0,[kM,Bx,LS,vw,bx,xP,bg,yg,_A,ej,Hy],[[0,{[v]:`SecurityGroupRuleId`,[b]:EV}],[0,{[v]:`GroupId`,[b]:Cz}],[2,{[v]:`IsEgress`,[b]:Wz}],[0,{[v]:`IpProtocol`,[b]:tB}],[1,{[v]:`FromPort`,[b]:bz}],[1,{[v]:`ToPort`,[b]:JV}],[0,{[v]:`CidrIpv4`,[b]:IL}],[0,{[v]:`CidrIpv6`,[b]:FL}],[0,{[v]:`PrefixListId`,[b]:sV}],[0,{[v]:`ReferencedGroupId`,[b]:BOe}],[0,{[v]:`Description`,[b]:PR}]]],pIe=[3,x,Oj,0,[Bx,DM,g,FN,IN,vw,bx,xP,vg,gw],[[0,{[v]:`GroupId`,[b]:Cz}],[()=>AU,{[b]:kM}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SourceSecurityGroupName`,[b]:zV}],[0,{[v]:`SourceSecurityGroupOwnerId`,[b]:BV}],[0,{[v]:`IpProtocol`,[b]:tB}],[1,{[v]:`FromPort`,[b]:bz}],[1,{[v]:`ToPort`,[b]:JV}],[0,{[v]:`CidrIp`,[b]:PL}],[()=>xU,{[v]:`IpPermissions`,[b]:nB}]],1],mIe=[3,x,kj,0,[RA,KP,Fj],[[2,{[v]:`Return`,[b]:mV}],[()=>xU,{[v]:`UnknownIpPermissionSet`,[b]:iH}],[()=>OU,{[v]:`RevokedSecurityGroupRuleSet`,[b]:yV}]]],hIe=[3,x,Aj,0,[vg,bx,Bx,Wx,gw,vw,FN,IN,xP,DM,g],[0,1,0,0,[()=>xU,0],0,0,0,1,[()=>AU,{[b]:kM}],[2,{[v]:`DryRun`,[b]:_}]]],gIe=[3,x,jj,0,[RA,KP,Fj],[[2,{[v]:`Return`,[b]:mV}],[()=>xU,{[v]:`UnknownIpPermissionSet`,[b]:iH}],[()=>OU,{[v]:`RevokedSecurityGroupRuleSet`,[b]:yV}]]],_Ie=[3,x,nM,0,[b_,O_,Vv,Lb,Ix,QS,XC,BO,sP,BT,gg,qO,ck,$N,LF,Sg,_k,xS],[[0,{[v]:`DestinationCidrBlock`,[b]:cR}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:hR}],[0,{[v]:`DestinationPrefixListId`,[b]:xR}],[0,{[v]:`EgressOnlyInternetGatewayId`,[b]:iz}],[0,{[v]:`GatewayId`,[b]:Sz}],[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`InstanceOwnerId`,[b]:TEe}],[0,{[v]:`NatGatewayId`,[b]:VB}],[0,{[v]:`TransitGatewayId`,[b]:Vke}],[0,{[v]:`LocalGatewayId`,[b]:iDe}],[0,{[v]:`CarrierGatewayId`,[b]:AL}],[0,{[v]:`NetworkInterfaceId`,[b]:HB}],[0,{[v]:`Origin`,[b]:YDe}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`VpcPeeringConnectionId`,[b]:mH}],[0,{[v]:`CoreNetworkArn`,[b]:zL}],[0,{[v]:`OdbNetworkArn`,[b]:eOe}],[0,{[v]:`IpAddress`,[b]:zz}]]],JH=[3,x,Kj,0,[jwe,kA,Bj,rM,iP,yF,fk],[[()=>HRe,{[v]:`AssociationSet`,[b]:UI}],[()=>PRe,{[v]:`PropagatingVgwSet`,[b]:kOe}],[0,{[v]:`RouteTableId`,[b]:bV}],[()=>VRe,{[v]:`RouteSet`,[b]:XOe}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`OwnerId`,[b]:XB}]]],vIe=[3,x,Ij,0,[uO,Lj,Bj,mN,Ix,lA,Lh],[[2,{[v]:`Main`,[b]:MDe}],[0,{[v]:`RouteTableAssociationId`,[b]:ZOe}],[0,{[v]:`RouteTableId`,[b]:bV}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`GatewayId`,[b]:Sz}],[0,{[v]:`PublicIpv4Pool`,[b]:oV}],[()=>YH,{[v]:`AssociationState`,[b]:zI}]]],YH=[3,x,zj,0,[$N,SN],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`StatusMessage`,[b]:PV}]]],yIe=[3,x,ij,0,[sx],[[2,{[v]:`Enabled`,[b]:gz}]],1],bIe=[3,x,cj,0,[SD,CD,eg,vC,Xw,pS,dS,yT,ST,gO,NA,uj,CM,NM,mN,VP,pb,Cb,wP,ZT,PC,Vg,Cg,kg,eS,JT,KD,Bb,zk,qD,f_,Vb,$O,wk,oN,g,p_,hC,oA,Gg,Th,XO,iC,Nb],[1,1,[()=>dU,{[b]:$h}],0,0,1,[()=>yU,{[b]:SS}],0,0,[()=>yIe,0],[()=>WH,0],0,[()=>kU,{[b]:xM}],[()=>MU,{[b]:PM}],0,[()=>PAe,0],[()=>_Le,0],[()=>yLe,{[b]:hb}],[()=>PU,{[b]:DP}],()=>uFe,()=>XNe,()=>OH,()=>_je,()=>uje,()=>jNe,[()=>vRe,{[b]:YT}],()=>ZNe,()=>jH,()=>XFe,()=>YNe,2,2,()=>rPe,()=>HH,[()=>HLe,{[b]:sN}],[2,{[v]:`DryRun`,[b]:_}],[2,{[v]:`DisableApiTermination`,[b]:sR}],[0,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:Xz}],[0,{[v]:`PrivateIpAddress`,[b]:aV}],[0,{[v]:`ClientToken`,[JEe]:1,[b]:XL}],[0,{[v]:`AdditionalInfo`,[b]:wI}],[()=>LLe,{[v]:`NetworkInterface`,[b]:UDe}],[()=>PH,{[v]:`IamInstanceProfile`,[b]:Jz}],[2,{[v]:`EbsOptimized`,[b]:rz}]],2],xIe=[3,x,WM,0,[oA],[[0,{[v]:`PrivateIpAddress`,[b]:aV}]]],SIe=[3,x,qM,0,[oA],[0]],CIe=[3,x,uM,0,[$P],[[()=>FAe,{[v]:`Value`,[b]:cH}]]],wIe=[3,x,PM,0,[Bx,ew,iP,yF,bM,fk,Wx,Hy,gw],[[0,{[v]:`GroupId`,[b]:Cz}],[()=>xU,{[v]:`IpPermissionsEgress`,[b]:AEe}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`SecurityGroupArn`,[b]:TV}],[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`GroupDescription`,[b]:ZTe}],[()=>xU,{[v]:`IpPermissions`,[b]:nB}]]],TIe=[3,x,jM,0,[kM,Bx,qx,LS,vw,bx,xP,bg,yg,_A,tj,Hy,iP,EM],[[0,{[v]:`SecurityGroupRuleId`,[b]:EV}],[0,{[v]:`GroupId`,[b]:Cz}],[0,{[v]:`GroupOwnerId`,[b]:eEe}],[2,{[v]:`IsEgress`,[b]:Wz}],[0,{[v]:`IpProtocol`,[b]:tB}],[1,{[v]:`FromPort`,[b]:bz}],[1,{[v]:`ToPort`,[b]:JV}],[0,{[v]:`CidrIpv4`,[b]:IL}],[0,{[v]:`CidrIpv6`,[b]:FL}],[0,{[v]:`PrefixListId`,[b]:sV}],[()=>iIe,{[v]:`ReferencedGroupInfo`,[b]:VOe}],[0,{[v]:`Description`,[b]:PR}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`SecurityGroupRuleArn`,[b]:fke}]]],XH=[3,x,QN,0,[uk,lk,iP,UN,XA,VN,Vh,jP,hg,Xg,Sx,cN,TF,$N,CN,HN,FA,fk,Hy,UF,cx,bT,C_],[[0,{[v]:`OwnerAlias`,[b]:XDe}],[0,{[v]:`OutpostArn`,[b]:YB}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`StorageTier`,[b]:Nke}],[4,{[v]:`RestoreExpiryTime`,[b]:LOe}],[0,{[v]:`SseType`,[b]:HV}],[0,{[v]:`AvailabilityZone`,[b]:YI}],[0,{[v]:`TransferType`,[b]:$ke}],[1,{[v]:`CompletionDurationMinutes`,[b]:OL}],[4,{[v]:`CompletionTime`,[b]:$L}],[1,{[v]:`FullSnapshotSizeInBytes`,[b]:qTe}],[0,{[v]:`SnapshotId`,[b]:MV}],[0,{[v]:`VolumeId`,[b]:dH}],[0,{[v]:`Status`,[b]:GV}],[0,{[v]:`StatusMessage`,[b]:PV}],[4,{[v]:`StartTime`,[b]:UV}],[0,{[v]:`Progress`,[b]:pV}],[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`Description`,[b]:PR}],[1,{[v]:`VolumeSize`,[b]:hH}],[2,{[v]:`Encrypted`,[b]:_z}],[0,{[v]:`KmsKeyId`,[b]:pB}],[0,{[v]:`DataEncryptionKeyId`,[b]:uR}]]],EIe=[3,x,bN,0,[YD,aN,tg,JF,rC],[0,0,1,4,0]],DIe=[3,x,XM,0,[bC,Th,g],[[()=>vU,{[b]:QS}],[0,{[v]:`AdditionalInfo`,[b]:wI}],[2,{[v]:`DryRun`,[b]:_}]],1],OIe=[3,x,ZM,0,[uN],[[()=>bU,{[v]:`InstancesSet`,[b]:aB}]]],ZH=[3,x,PN,0,[i_,pO],[[0,{[v]:`Code`,[b]:nR}],[0,{[v]:`Message`,[b]:PB}]]],kIe=[3,x,QM,0,[bC,cS,ON,g,dx],[[()=>vU,{[b]:QS}],2,2,[2,{[v]:`DryRun`,[b]:_}],[2,{[v]:`Force`,[b]:JTe}]],1],AIe=[3,x,$M,0,[fN],[[()=>bU,{[v]:`InstancesSet`,[b]:aB}]]],QH=[3,x,nP,0,[Wh,Mb,xD,Tg,fk,Ch,OS,iP,sM,lk,eb,LC,Bk,sg,LP,mN,$N,yF,dg,FCe,Vh,T_,JD],[[0,{[v]:`AvailabilityZoneId`,[b]:XI}],[1,{[v]:`EnableLniAtDeviceIndex`,[b]:ITe}],[2,{[v]:`MapCustomerOwnedIpOnLaunch`,[b]:_De}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:HL}],[0,{[v]:`OwnerId`,[b]:XB}],[2,{[v]:`AssignIpv6AddressOnCreation`,[b]:SI}],[()=>ZRe,{[v]:`Ipv6CidrBlockAssociationSet`,[b]:Hz}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`SubnetArn`,[b]:ake}],[0,{[v]:`OutpostArn`,[b]:YB}],[2,{[v]:`EnableDns64`,[b]:VR}],[2,{[v]:`Ipv6Native`,[b]:SEe}],[()=>YFe,{[v]:`PrivateDnsNameOptionsOnLaunch`,[b]:uOe}],[()=>wH,{[v]:`BlockPublicAccessStates`,[b]:hL}],[0,{[v]:`Type`,[b]:tH}],[0,{[v]:`SubnetId`,[b]:NV}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`CidrBlock`,[b]:xL}],[1,{[v]:`AvailableIpAddressCount`,[b]:xI}],[0,{[v]:`AvailabilityZone`,[b]:YI}],[2,{[v]:`DefaultForAz`,[b]:fR}],[2,{[v]:`MapPublicIpOnLaunch`,[b]:DDe}]]],jIe=[3,x,fM,0,[$N,SN],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`StatusMessage`,[b]:PV}]]],MIe=[3,x,IM,0,[Oh,DS,AS,fS,Jw],[[0,{[v]:`AssociationId`,[b]:TI}],[0,{[v]:`Ipv6CidrBlock`,[b]:Vz}],[()=>jIe,{[v]:`Ipv6CidrBlockState`,[b]:Uz}],[0,{[v]:`Ipv6AddressAttribute`,[b]:Iz}],[0,{[v]:`IpSource`,[b]:oB}]]],NIe=[3,x,NP,0,[gT,$P],[[0,{[v]:`Key`,[b]:ZEe}],[0,{[v]:`Value`,[b]:cH}]]],PIe=[3,x,DP,0,[Wj,iP],[[0,{[v]:`ResourceType`,[b]:xV}],[()=>NU,{[b]:NP}]]],FIe=[3,x,dP,0,[bC,dx,ON,g],[[()=>vU,{[b]:QS}],2,2,[2,{[v]:`DryRun`,[b]:_}]],1],IIe=[3,x,fP,0,[mP],[[()=>bU,{[v]:`InstancesSet`,[b]:aB}]]],LIe=[3,x,gP,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],RIe=[3,x,_P,0,[gD,lO],[1,1]],zIe=[3,x,GP,0,[Hy,HP,Wx,Bx,yF,LF,SA],[[0,{[v]:`Description`,[b]:PR}],[0,{[v]:`UserId`,[b]:rH}],[0,{[v]:`GroupName`,[b]:wz}],[0,{[v]:`GroupId`,[b]:Cz}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`VpcPeeringConnectionId`,[b]:mH}],[0,{[v]:`PeeringStatus`,[b]:lV}]]],BIe=[3,x,vF,0,[i_,pO],[[0,{[v]:`Code`,[b]:nR}],[0,{[v]:`Message`,[b]:PB}]]],$H=[3,x,YF,0,[ux],[[()=>bLe,{[v]:`ErrorSet`,[b]:HTe}]]],VIe=[3,x,sF,0,[gD,lO],[[1,{[v]:`Min`,[b]:xB}],[1,{[v]:`Max`,[b]:MB}]]],HIe=[3,x,cF,0,[gD,lO],[1,1],1],UIe=[3,x,lF,0,[Dy,S_,Sy,uF,KF],[[1,{[v]:`DefaultVCpus`,[b]:jR}],[1,{[v]:`DefaultCores`,[b]:lR}],[1,{[v]:`DefaultThreadsPerCore`,[b]:ER}],[()=>cLe,{[v]:`ValidCores`,[b]:sAe}],[()=>tze,{[v]:`ValidThreadsPerCore`,[b]:vAe}]]],eU=[3,x,eI,0,[Wh,lk,qN,hT,iP,WF,xx,_D,FP,VN,wk,SF,tF,fk,TF,XN,cN,Vh,$N,Qg,Zh,cx,bT],[[0,{[v]:`AvailabilityZoneId`,[b]:XI}],[0,{[v]:`OutpostArn`,[b]:YB}],[0,{[v]:`SourceVolumeId`,[b]:Fke}],[1,{[v]:`Iops`,[b]:uB}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[0,{[v]:`VolumeType`,[b]:gH}],[2,{[v]:`FastRestored`,[b]:KTe}],[2,{[v]:`MultiAttachEnabled`,[b]:hDe}],[1,{[v]:`Throughput`,[b]:$V}],[0,{[v]:`SseType`,[b]:HV}],[()=>UH,{[v]:`Operator`,[b]:QB}],[1,{[v]:`VolumeInitializationRate`,[b]:uH}],[0,{[v]:`VolumeArn`,[b]:iAe}],[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`VolumeId`,[b]:dH}],[1,{[v]:`Size`,[b]:Rke}],[0,{[v]:`SnapshotId`,[b]:MV}],[0,{[v]:`AvailabilityZone`,[b]:YI}],[0,{[v]:`Status`,[b]:GV}],[4,{[v]:`CreateTime`,[b]:tR}],[()=>oze,{[v]:`AttachmentSet`,[b]:WI}],[2,{[v]:`Encrypted`,[b]:_z}],[0,{[v]:`KmsKeyId`,[b]:pB}]]],tU=[3,x,nF,0,[Fv,Ph,ZC,Yy,TF,QS,Uy,$N,Bh],[[2,{[v]:`DeleteOnTermination`,[b]:bR}],[0,{[v]:`AssociatedResource`,[b]:LI}],[0,{[v]:`InstanceOwningService`,[b]:DEe}],[1,{[v]:`EbsCardIndex`,[b]:RR}],[0,{[v]:`VolumeId`,[b]:dH}],[0,{[v]:`InstanceId`,[b]:qz}],[0,{[v]:`Device`,[b]:FR}],[0,{[v]:`Status`,[b]:GV}],[4,{[v]:`AttachTime`,[b]:JI}]]],WIe=[3,x,MF,0,[TF,tO,SN,OP,pP,MP,AP,vP,xk,mk,Ck,Sk,gk,FA,HN,ix,wk],[[0,{[v]:`VolumeId`,[b]:dH}],[0,{[v]:`ModificationState`,[b]:AB}],[0,{[v]:`StatusMessage`,[b]:PV}],[1,{[v]:`TargetSize`,[b]:Zke}],[1,{[v]:`TargetIops`,[b]:Wke}],[0,{[v]:`TargetVolumeType`,[b]:eAe}],[1,{[v]:`TargetThroughput`,[b]:Qke}],[2,{[v]:`TargetMultiAttachEnabled`,[b]:Kke}],[1,{[v]:`OriginalSize`,[b]:tOe}],[1,{[v]:`OriginalIops`,[b]:QDe}],[0,{[v]:`OriginalVolumeType`,[b]:rOe}],[1,{[v]:`OriginalThroughput`,[b]:nOe}],[2,{[v]:`OriginalMultiAttachEnabled`,[b]:$De}],[1,{[v]:`Progress`,[b]:pV}],[4,{[v]:`StartTime`,[b]:UV}],[4,{[v]:`EndTime`,[b]:UTe}],[()=>UH,{[v]:`Operator`,[b]:QB}]]],nU=[3,x,tI,0,[fk,nT,OS,Kwe,IS,$y,iP,sg,yF,$N,dg,Pv],[[0,{[v]:`OwnerId`,[b]:XB}],[0,{[v]:`InstanceTenancy`,[b]:cB}],[()=>dze,{[v]:`Ipv6CidrBlockAssociationSet`,[b]:Hz}],[()=>lze,{[v]:`CidrBlockAssociationSet`,[b]:SL}],[2,{[v]:`IsDefault`,[b]:fEe}],[()=>KIe,{[v]:`EncryptionControl`,[b]:BR}],[()=>NU,{[v]:`TagSet`,[b]:XV}],[()=>wH,{[v]:`BlockPublicAccessStates`,[b]:hL}],[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`CidrBlock`,[b]:xL}],[0,{[v]:`DhcpOptionsId`,[b]:yR}]]],GIe=[3,x,rF,0,[Oh,dg,Jwe],[[0,{[v]:`AssociationId`,[b]:TI}],[0,{[v]:`CidrBlock`,[b]:xL}],[()=>rU,{[v]:`CidrBlockState`,[b]:wL}]]],rU=[3,x,aF,0,[$N,SN],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`StatusMessage`,[b]:PV}]]],KIe=[3,x,fF,0,[yF,gF,hO,$N,CN,QA,iP],[[0,{[v]:`VpcId`,[b]:lH}],[0,{[v]:`VpcEncryptionControlId`,[b]:lAe}],[0,{[v]:`Mode`,[b]:PDe}],[0,{[v]:`State`,[b]:WV}],[0,{[v]:`StateMessage`,[b]:FV}],[()=>JIe,{[v]:`ResourceExclusions`,[b]:zOe}],[()=>NU,{[v]:`TagSet`,[b]:XV}]]],qIe=[3,x,pF,0,[hO,US,Ib,zO,BF,RF,RT,kF,nb],[0,0,0,0,0,0,0,0,0],1],iU=[3,x,mF,0,[$N,CN],[[0,{[v]:`State`,[b]:WV}],[0,{[v]:`StateMessage`,[b]:FV}]]],JIe=[3,x,hF,0,[zS,Fb,NO,zF,IF,PT,OF,tb],[[()=>iU,{[v]:`InternetGateway`,[b]:Gz}],[()=>iU,{[v]:`EgressOnlyInternetGateway`,[b]:RTe}],[()=>iU,{[v]:`NatGateway`,[b]:BB}],[()=>iU,{[v]:`VirtualPrivateGateway`,[b]:hAe}],[()=>iU,{[v]:`VpcPeering`,[b]:mAe}],[()=>iU,{[v]:`Lambda`,[b]:nDe}],[()=>iU,{[v]:`VpcLattice`,[b]:dAe}],[()=>iU,{[v]:`ElasticFileSystem`,[b]:HR}]]],YIe=[3,x,bF,0,[Oh,DS,AS,vO,bw,fS,Jw],[[0,{[v]:`AssociationId`,[b]:TI}],[0,{[v]:`Ipv6CidrBlock`,[b]:Vz}],[()=>rU,{[v]:`Ipv6CidrBlockState`,[b]:Uz}],[0,{[v]:`NetworkBorderGroup`,[b]:LB}],[0,{[v]:`Ipv6Pool`,[b]:MEe}],[0,{[v]:`Ipv6AddressAttribute`,[b]:Iz}],[0,{[v]:`IpSource`,[b]:oB}]]],aU=`unit`,oU=[1,x,YCe,0,[0,{[b]:y}]],sU=[1,x,ZCe,0,[0,{[b]:y}]],cU=[1,x,_we,0,[0,{[b]:y}]],XIe=[1,x,JCe,0,[()=>BAe,{[b]:y}]],lU=[1,x,VCe,0,[0,{[b]:Eh}]],uU=[1,x,UCe,0,[0,{[b]:y}]],ZIe=[1,x,hwe,0,[0,{[b]:y}]],QIe=[1,x,HCe,0,[0,{[b]:Oh}]],$Ie=[1,x,Uh,0,[()=>nje,{[b]:Hh}]],eLe=[1,x,Cwe,0,[()=>rje,{[b]:y}]],tLe=[1,x,wwe,0,[()=>tje,{[b]:y}]],nLe=[1,x,Ewe,0,[()=>ije,{[b]:y}]],rLe=[1,x,Owe,0,[()=>aje,{[b]:y}]],iLe=[1,x,Wwe,0,[0,{[b]:y}]],aLe=[1,x,Bwe,0,[0,{[b]:y}]],oLe=[1,x,Pwe,0,[()=>CH,{[b]:y}]],dU=[1,x,Fwe,0,[()=>CH,{[b]:$h}]],sLe=[1,x,Rwe,0,[0,{[b]:y}]],cLe=[1,x,Ywe,0,[1,{[b]:y}]],fU=[1,x,mTe,0,[0,{[b]:y}]],lLe=[1,x,_v,0,[()=>$je,{[b]:y}]],uLe=[1,x,yv,0,[()=>eMe,{[b]:y}]],dLe=[1,x,uy,0,[()=>uMe,{[b]:y}]],fLe=[1,x,H_,0,[()=>oNe,{[b]:y}]],pLe=[1,x,Xy,0,[()=>cNe,{[b]:y}]],mLe=[1,x,ab,0,[()=>mNe,{[b]:y}]],hLe=[1,x,ub,0,[()=>kH,{[b]:pb}]],gLe=[1,x,fb,0,[()=>hNe,{[b]:y}]],_Le=[1,x,mb,0,[()=>kH,{[b]:y}]],vLe=[1,x,vb,0,[()=>_Ne,{[b]:y}]],yLe=[1,x,Cb,0,[()=>gNe,{[b]:y}]],bLe=[1,x,rx,0,[()=>BIe,{[b]:y}]],pU=[1,x,Db,0,[0,{[b]:y}]],xLe=[1,x,qy,0,[0,{[b]:Jy}]],mU=[1,x,vx,0,[()=>bNe,{[b]:Tx}]],SLe=[1,x,mx,0,[()=>xNe,{[b]:y}]],CLe=[1,x,Px,0,[()=>ENe,{[b]:y}]],hU=[1,x,Lx,0,[()=>kNe,{[b]:y}]],gU=[1,x,Rx,0,[0,{[b]:Cz}]],wLe=[1,x,Gx,0,[0,{[b]:Wx}]],TLe=[1,x,oC,0,[()=>NH,{[b]:y}]],ELe=[1,x,gC,0,[0,{[b]:vC}]],DLe=[1,x,TC,0,[()=>MNe,{[b]:y}]],OLe=[1,x,lT,0,[()=>NNe,{[b]:y}]],kLe=[1,x,NS,0,[()=>LNe,0]],ALe=[1,x,wS,0,[()=>HNe,{[b]:y}]],jLe=[1,x,ES,0,[()=>UNe,{[b]:y}]],_U=[1,x,JS,0,[0,{[b]:y}]],vU=[1,x,_C,0,[0,{[b]:QS}]],MLe=[1,x,uC,0,[()=>WNe,{[b]:y}]],yU=[1,x,eC,0,[()=>GNe,{[b]:y}]],NLe=[1,x,tC,0,[()=>KNe,{[b]:$S}]],PLe=[1,x,dC,0,[()=>qNe,{[b]:y}]],FLe=[1,x,DC,0,[()=>zNe,{[b]:y}]],ILe=[1,x,VC,0,[()=>$Ne,{[b]:y}]],LLe=[1,x,UC,0,[()=>tPe,{[b]:y}]],RLe=[1,x,rw,0,[()=>iPe,{[b]:y}]],zLe=[1,x,Fw,0,[()=>sPe,{[b]:y}]],BLe=[1,x,Lw,0,[()=>lPe,{[b]:y}]],VLe=[1,x,Rw,0,[()=>uPe,{[b]:y}]],HLe=[1,x,Vw,0,[()=>dPe,{[b]:y}]],bU=[1,x,Nw,0,[()=>fPe,{[b]:y}]],ULe=[1,x,Zw,0,[()=>mPe,{[b]:y}]],WLe=[1,x,VS,0,[()=>gPe,{[b]:y}]],GLe=[1,x,GS,0,[0,{[b]:y}]],KLe=[1,x,qS,0,[()=>RH,{[b]:y}]],qLe=[1,x,OC,0,[0,{[b]:y}]],xU=[1,x,cw,0,[()=>_Pe,{[b]:y}]],JLe=[1,x,ww,0,[()=>vPe,{[b]:y}]],SU=[1,x,lw,0,[()=>yPe,{[b]:y}]],YLe=[1,x,ow,0,[()=>bPe,{[b]:y}]],CU=[1,x,uw,0,[()=>xPe,{[b]:y}]],XLe=[1,x,sw,0,[()=>SPe,{[b]:y}]],ZLe=[1,x,Tw,0,[()=>CPe,{[b]:y}]],QLe=[1,x,CT,0,[0,{[b]:ST}]],$Le=[1,x,DT,0,[0,{[b]:ET}]],eRe=[1,x,AT,0,[()=>TPe,{[b]:y}]],tRe=[1,x,$T,0,[()=>EPe,{[b]:y}]],nRe=[1,x,tE,0,[()=>DPe,{[b]:$h}]],rRe=[1,x,uE,0,[()=>PPe,{[b]:y}]],iRe=[1,x,fE,0,[()=>FPe,{[b]:y}]],aRe=[1,x,IE,0,[0,{[b]:y}]],oRe=[1,x,kE,0,[()=>XPe,{[b]:y}]],sRe=[1,x,jE,0,[()=>ZPe,{[b]:HC}]],cRe=[1,x,NE,0,[()=>QPe,{[b]:y}]],lRe=[1,x,FE,0,[()=>$Pe,{[b]:Bw}]],uRe=[1,x,BE,0,[()=>eFe,{[b]:y}]],dRe=[1,x,VE,0,[()=>tFe,{[b]:y}]],fRe=[1,x,qE,0,[0,{[b]:y}]],pRe=[1,x,nD,0,[()=>zH,{[b]:y}]],mRe=[1,x,iD,0,[()=>pFe,{[b]:y}]],hRe=[1,x,oD,0,[()=>mFe,{[b]:aD}]],gRe=[1,x,cD,0,[()=>BH,{[b]:y}]],_Re=[1,x,HT,0,[()=>hFe,{[b]:y}]],vRe=[1,x,WT,0,[()=>gFe,{[b]:y}]],wU=[1,x,KT,0,[0,{[b]:y}]],yRe=[1,x,TD,0,[()=>vFe,{[b]:y}]],bRe=[1,x,LO,0,[()=>MFe,{[b]:y}]],xRe=[1,x,IO,0,[()=>NFe,{[b]:y}]],SRe=[1,x,VO,0,[0,{[b]:y}]],CRe=[1,x,UO,0,[()=>VH,{[b]:y}]],wRe=[1,x,CO,0,[()=>IFe,{[b]:y}]],TRe=[1,x,wO,0,[0,{[b]:y}]],ERe=[1,x,kO,0,[()=>VFe,{[b]:y}]],DRe=[1,x,ak,0,[0,{[b]:y}]],TU=[1,x,bk,0,[0,{[b]:Dk}]],ORe=[1,x,qk,0,[()=>GFe,{[b]:y}]],kRe=[1,x,Jk,0,[()=>KFe,{[b]:y}]],ARe=[1,x,Zk,0,[0,{[b]:Bx}]],jRe=[1,x,$k,0,[()=>GH,{[b]:y}]],MRe=[1,x,eA,0,[0,{[b]:y}]],NRe=[1,x,vA,0,[()=>JFe,{[b]:y}]],EU=[1,x,aA,0,[()=>QFe,{[b]:y}]],DU=[1,x,Mk,0,[()=>eIe,{[b]:y}]],PRe=[1,x,OA,0,[()=>tIe,{[b]:y}]],FRe=[1,x,uA,0,[0,{[b]:nA}]],IRe=[1,x,nj,0,[()=>oIe,{[b]:y}]],LRe=[1,x,gj,0,[()=>aIe,{[b]:y}]],RRe=[1,x,wj,0,[0,{[b]:Cj}]],zRe=[1,x,yj,0,[()=>qH,{[b]:y}]],OU=[1,x,Pj,0,[()=>fIe,{[b]:y}]],BRe=[1,x,JA,0,[0,{[b]:y}]],VRe=[1,x,bj,0,[()=>_Ie,{[b]:y}]],HRe=[1,x,Rj,0,[()=>vIe,{[b]:y}]],URe=[1,x,Vj,0,[0,{[b]:y}]],WRe=[1,x,Uj,0,[()=>JH,{[b]:y}]],GRe=[1,x,GM,0,[()=>xIe,{[b]:y}]],KRe=[1,x,KM,0,[()=>SIe,{[b]:WM}]],kU=[1,x,SM,0,[0,{[b]:xM}]],qRe=[1,x,wM,0,[()=>wIe,{[b]:y}]],AU=[1,x,OM,0,[0,{[b]:y}]],jU=[1,x,AM,0,[()=>TIe,{[b]:y}]],MU=[1,x,MM,0,[0,{[b]:PM}]],JRe=[1,x,tN,0,[0,{[b]:cN}]],YRe=[1,x,gN,0,[()=>XH,{[b]:y}]],XRe=[1,x,nN,0,[0,{[b]:mN}]],ZRe=[1,x,LM,0,[()=>MIe,{[b]:y}]],QRe=[1,x,vN,0,[()=>QH,{[b]:y}]],$Re=[1,x,oM,0,[0,{[b]:y}]],eze=[1,x,iN,0,[()=>LH,{[b]:y}]],NU=[1,x,hP,0,[()=>NIe,{[b]:y}]],PU=[1,x,EP,0,[()=>PIe,{[b]:y}]],tze=[1,x,CP,0,[1,{[b]:y}]],nze=[1,x,JP,0,[()=>LH,{[b]:y}]],rze=[1,x,RP,0,[0,{[b]:y}]],ize=[1,x,WP,0,[()=>zIe,{[b]:y}]],FU=[1,x,VF,0,[0,{[b]:y}]],IU=[1,x,HF,0,[0,{[b]:y}]],aze=[1,x,GF,0,[0,{[b]:y}]],oze=[1,x,eF,0,[()=>tU,{[b]:y}]],sze=[1,x,CF,0,[0,{[b]:TF}]],cze=[1,x,AF,0,[()=>eU,{[b]:y}]],lze=[1,x,iF,0,[()=>GIe,{[b]:y}]],uze=[1,x,wF,0,[0,{[b]:yF}]],dze=[1,x,xF,0,[()=>YIe,{[b]:y}]],fze=[1,x,jF,0,[()=>nU,{[b]:y}]],pze=[1,x,oI,0,[0,{[b]:y}]],mze=[1,x,lI,0,[0,{[b]:cI}]],hze=[1,x,fI,0,[0,{[b]:dI}]],gze=[9,x,OCe,0,()=>VAe,()=>HAe],_ze=[9,x,ACe,0,()=>UAe,()=>WAe],vze=[9,x,RCe,0,()=>GAe,()=>KAe],yze=[9,x,iwe,0,()=>qAe,()=>JAe],bze=[9,x,ICe,0,()=>YAe,()=>aU],xze=[9,x,xwe,0,()=>XAe,()=>tU],Sze=[9,x,swe,0,()=>ZAe,()=>QAe],Cze=[9,x,fwe,0,()=>$Ae,()=>eje],wze=[9,x,Bg,0,()=>mje,()=>hje],Tze=[9,x,aTe,0,()=>bje,()=>xje],Eze=[9,x,$we,0,()=>Sje,()=>Cje],Dze=[9,x,oTe,0,()=>wje,()=>wPe],Oze=[9,x,cTe,0,()=>Tje,()=>Eje],kze=[9,x,dTe,0,()=>Dje,()=>Oje],Aze=[9,x,gTe,0,()=>kje,()=>Aje],jze=[9,x,STe,0,()=>jje,()=>Mje],Mze=[9,x,MTe,0,()=>Nje,()=>Pje],Nze=[9,x,jTe,0,()=>Fje,()=>Ije],Pze=[9,x,NTe,0,()=>Lje,()=>Rje],Fze=[9,x,Hg,0,()=>zje,()=>XH],Ize=[9,x,Ug,0,()=>Bje,()=>Vje],Lze=[9,x,n_,0,()=>Hje,()=>eU],Rze=[9,x,r_,0,()=>Uje,()=>Wje],zze=[9,x,k_,0,()=>qje,()=>aU],Bze=[9,x,nv,0,()=>Jje,()=>Yje],Vze=[9,x,lv,0,()=>Xje,()=>Zje],Hze=[9,x,mv,0,()=>Qje,()=>tMe],Uze=[9,x,Dv,0,()=>nMe,()=>rMe],Wze=[9,x,Iv,0,()=>iMe,()=>aU],Gze=[9,x,ey,0,()=>aMe,()=>aU],Kze=[9,x,Kv,0,()=>oMe,()=>aU],qze=[9,x,ny,0,()=>sMe,()=>cMe],Jze=[9,x,_y,0,()=>lMe,()=>aU],Yze=[9,x,vy,0,()=>dMe,()=>aU],Xze=[9,x,Ly,0,()=>fMe,()=>aU],Zze=[9,x,Ry,0,()=>pMe,()=>aU],Qze=[9,x,Q_,0,()=>mMe,()=>hMe],$ze=[9,x,v_,0,()=>gMe,()=>_Me],eBe=[9,x,__,0,()=>vMe,()=>yMe],tBe=[9,x,L_,0,()=>bMe,()=>xMe],nBe=[9,x,$_,0,()=>SMe,()=>CMe],rBe=[9,x,ev,0,()=>wMe,()=>TMe],iBe=[9,x,Z_,0,()=>EMe,()=>DMe],aBe=[9,x,P_,0,()=>OMe,()=>kMe],oBe=[9,x,sv,0,()=>AMe,()=>jMe],sBe=[9,x,wv,0,()=>MMe,()=>NMe],cBe=[9,x,Cv,0,()=>PMe,()=>FMe],lBe=[9,x,Mv,0,()=>IMe,()=>LMe],uBe=[9,x,Bv,0,()=>RMe,()=>zMe],dBe=[9,x,ty,0,()=>BMe,()=>VMe],fBe=[9,x,Zv,0,()=>HMe,()=>UMe],pBe=[9,x,sy,0,()=>WMe,()=>GMe],mBe=[9,x,yy,0,()=>KMe,()=>qMe],hBe=[9,x,by,0,()=>JMe,()=>YMe],gBe=[9,x,zy,0,()=>XMe,()=>ZMe],_Be=[9,x,By,0,()=>QMe,()=>$Me],vBe=[9,x,F_,0,()=>eNe,()=>aU],yBe=[9,x,Vy,0,()=>tNe,()=>tU],bBe=[9,x,y_,0,()=>nNe,()=>aU],xBe=[9,x,I_,0,()=>rNe,()=>iNe],SBe=[9,x,Qv,0,()=>aNe,()=>aU],CBe=[9,x,kx,0,()=>wNe,()=>TNe],wBe=[9,x,xC,0,()=>PNe,()=>FNe],TBe=[9,x,LD,0,()=>TFe,()=>aU],EBe=[9,x,zD,0,()=>EFe,()=>DFe],DBe=[9,x,QD,0,()=>OFe,()=>aU],OBe=[9,x,cO,0,()=>kFe,()=>AFe],kBe=[9,x,fj,0,()=>rIe,()=>aU],ABe=[9,x,pj,0,()=>sIe,()=>cIe],jBe=[9,x,BA,0,()=>lIe,()=>aU],MBe=[9,x,Dj,0,()=>pIe,()=>mIe],NBe=[9,x,Mj,0,()=>hIe,()=>gIe],PBe=[9,x,hj,0,()=>bIe,()=>qH],FBe=[9,x,dN,0,()=>DIe,()=>OIe],IBe=[9,x,pN,0,()=>kIe,()=>AIe],LBe=[9,x,lP,0,()=>FIe,()=>IIe],RBe=e=>({apiVersion:`2016-11-15`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??xCe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??fCe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??qee,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ec2`,errorTypeRegistries:AAe,xmlNamespace:`http://ec2.amazonaws.com/doc/2016-11-15`,version:`2016-11-15`,serviceTarget:`AmazonEC2`},serviceId:e?.serviceId??`EC2`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),zBe=e=>{let t=te(e),n=()=>t().then(Ae),r=RBe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:gCe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},BBe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},VBe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),HBe=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),BBe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),VBe(n))},UBe=class extends tt{config;constructor(...[t]){let n=zBe(t||{});super(n),this.initConfig=n;let r=mCe(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=HBe(pCe(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:uCe,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},WBe=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function GBe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ecr`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var KBe=e=>{let t=[];return e.operation,t.push(GBe(e)),t},qBe=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},JBe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ecr`}),YBe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},XBe={name:`@aws-sdk/client-ecr`,version:`3.1144.0`,description:`AWS SDK for JavaScript Ecr Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ecr`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ecr`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},LU=`ref`,RU=-1,zU=!0,BU=`isSet`,VU=`PartitionResult`,HU=`stringEquals`,UU=`booleanEquals`,WU=`getAttr`,GU={[LU]:`Endpoint`},KU={fn:WU,argv:[{[LU]:VU},`name`]},qU={[LU]:VU},JU={},YU=[{[LU]:`Region`}],XU={conditions:[[BU,[GU]],[BU,YU],[`aws.partition`,YU,VU],[HU,[KU,`aws-eusc`]],[HU,[KU,`aws-iso-f`]],[HU,[KU,`aws-iso-e`]],[HU,[KU,`aws-iso-b`]],[HU,[KU,`aws-iso`]],[HU,[KU,`aws-cn`]],[HU,[KU,`aws-us-gov`]],[HU,[KU,`aws`]],[UU,[{[LU]:`UseFIPS`},zU]],[UU,[{fn:WU,argv:[qU,`supportsFIPS`]},zU]],[UU,[{[LU]:`UseDualStack`},zU]],[UU,[{fn:WU,argv:[qU,`supportsDualStack`]},zU]]],results:[[RU],[RU,`Invalid Configuration: FIPS and custom endpoint are not supported`],[RU,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[GU,JU],[`https://api.ecr.{Region}.{PartitionResult#dnsSuffix}`,JU],[`https://ecr.{Region}.{PartitionResult#dualStackDnsSuffix}`,JU],[`https://api.ecr-fips.{Region}.{PartitionResult#dnsSuffix}`,JU],[`https://ecr-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,JU],[`https://api.ecr-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,JU],[RU,`FIPS and DualStack are enabled, but this partition does not support one or both`],[RU,`FIPS is enabled but this partition does not support FIPS`],[`https://api.ecr.{Region}.{PartitionResult#dualStackDnsSuffix}`,JU],[RU,`DualStack is enabled but this partition does not support DualStack`],[RU,`Invalid Configuration: Missing Region`]]},ZBe=2,QBe=new Int32Array([-1,1,-1,0,23,3,1,4,100000013,2,5,100000013,3,20,6,4,20,7,5,20,8,6,20,9,7,20,10,8,20,11,9,20,12,10,20,13,11,16,14,13,15,100000004,14,100000011,100000012,12,18,17,13,100000009,100000010,13,19,100000006,14,100000008,100000009,11,22,21,13,100000005,100000004,13,100000007,100000006,11,100000001,24,13,100000002,100000003]),$Be=s.from(QBe,ZBe,XU.conditions,XU.results),eVe=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),tVe=(e,t={})=>eVe.get(e,()=>ze($Be,{endpointParams:e,logger:t.logger}));lt.aws=de;var S=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},nVe=class e extends S{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rVe=class e extends S{name=`RepositoryNotFoundException`;$fault=`client`;constructor(t){super({name:`RepositoryNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iVe=class e extends S{name=`ServerException`;$fault=`server`;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},aVe=class e extends S{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oVe=class e extends S{name=`UnableToGetUpstreamImageException`;$fault=`client`;constructor(t){super({name:`UnableToGetUpstreamImageException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sVe=class e extends S{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cVe=class e extends S{name=`EmptyUploadException`;$fault=`client`;constructor(t){super({name:`EmptyUploadException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lVe=class e extends S{name=`InvalidLayerException`;$fault=`client`;constructor(t){super({name:`InvalidLayerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uVe=class e extends S{name=`KmsException`;$fault=`client`;kmsError;constructor(t){super({name:`KmsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.kmsError=t.kmsError}},dVe=class e extends S{name=`LayerAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`LayerAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fVe=class e extends S{name=`LayerPartTooSmallException`;$fault=`client`;constructor(t){super({name:`LayerPartTooSmallException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pVe=class e extends S{name=`UploadNotFoundException`;$fault=`client`;constructor(t){super({name:`UploadNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mVe=class e extends S{name=`PullThroughCacheRuleAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`PullThroughCacheRuleAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hVe=class e extends S{name=`SecretNotFoundException`;$fault=`client`;constructor(t){super({name:`SecretNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gVe=class e extends S{name=`UnableToAccessSecretException`;$fault=`client`;constructor(t){super({name:`UnableToAccessSecretException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_Ve=class e extends S{name=`UnableToDecryptSecretValueException`;$fault=`client`;constructor(t){super({name:`UnableToDecryptSecretValueException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vVe=class e extends S{name=`UnsupportedUpstreamRegistryException`;$fault=`client`;constructor(t){super({name:`UnsupportedUpstreamRegistryException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yVe=class e extends S{name=`InvalidTagParameterException`;$fault=`client`;constructor(t){super({name:`InvalidTagParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bVe=class e extends S{name=`RepositoryAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`RepositoryAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xVe=class e extends S{name=`TooManyTagsException`;$fault=`client`;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},SVe=class e extends S{name=`TemplateAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`TemplateAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ZU=class e extends S{name=`LifecyclePolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CVe=class e extends S{name=`PullThroughCacheRuleNotFoundException`;$fault=`client`;constructor(t){super({name:`PullThroughCacheRuleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wVe=class e extends S{name=`RegistryPolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`RegistryPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TVe=class e extends S{name=`RepositoryNotEmptyException`;$fault=`client`;constructor(t){super({name:`RepositoryNotEmptyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},EVe=class e extends S{name=`TemplateNotFoundException`;$fault=`client`;constructor(t){super({name:`TemplateNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QU=class e extends S{name=`RepositoryPolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`RepositoryPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DVe=class e extends S{name=`SigningConfigurationNotFoundException`;$fault=`client`;constructor(t){super({name:`SigningConfigurationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OVe=class e extends S{name=`ExclusionNotFoundException`;$fault=`client`;constructor(t){super({name:`ExclusionNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kVe=class e extends S{name=`ImageNotFoundException`;$fault=`client`;constructor(t){super({name:`ImageNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},AVe=class e extends S{name=`ScanNotFoundException`;$fault=`client`;constructor(t){super({name:`ScanNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jVe=class e extends S{name=`LayerInaccessibleException`;$fault=`client`;constructor(t){super({name:`LayerInaccessibleException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MVe=class e extends S{name=`LayersNotFoundException`;$fault=`client`;constructor(t){super({name:`LayersNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NVe=class e extends S{name=`UnableToGetUpstreamLayerException`;$fault=`client`;constructor(t){super({name:`UnableToGetUpstreamLayerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PVe=class e extends S{name=`LifecyclePolicyPreviewNotFoundException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyPreviewNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FVe=class e extends S{name=`UnableToListUpstreamImageReferrersException`;$fault=`client`;constructor(t){super({name:`UnableToListUpstreamImageReferrersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},IVe=class e extends S{name=`ImageAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ImageAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LVe=class e extends S{name=`ImageDigestDoesNotMatchException`;$fault=`client`;constructor(t){super({name:`ImageDigestDoesNotMatchException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RVe=class e extends S{name=`ImageTagAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ImageTagAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zVe=class e extends S{name=`ReferencedImagesNotFoundException`;$fault=`client`;constructor(t){super({name:`ReferencedImagesNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BVe=class e extends S{name=`BlockedByOrganizationPolicyException`;$fault=`client`;constructor(t){super({name:`BlockedByOrganizationPolicyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VVe=class e extends S{name=`ExclusionAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ExclusionAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HVe=class e extends S{name=`ImageArchivedException`;$fault=`client`;constructor(t){super({name:`ImageArchivedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},UVe=class e extends S{name=`UnsupportedImageTypeException`;$fault=`client`;constructor(t){super({name:`UnsupportedImageTypeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},WVe=class e extends S{name=`LifecyclePolicyPreviewInProgressException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyPreviewInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},GVe=class e extends S{name=`ImageStorageClassUpdateNotSupportedException`;$fault=`client`;constructor(t){super({name:`ImageStorageClassUpdateNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},KVe=class e extends S{name=`InvalidLayerPartException`;$fault=`client`;registryId;repositoryName;uploadId;lastValidByteReceived;constructor(t){super({name:`InvalidLayerPartException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.registryId=t.registryId,this.repositoryName=t.repositoryName,this.uploadId=t.uploadId,this.lastValidByteReceived=t.lastValidByteReceived}},qVe=`BlockedByOrganizationPolicyException`,JVe=`BatchDeleteImage`,YVe=`BatchDeleteImageRequest`,XVe=`BatchDeleteImageResponse`,ZVe=`CreateRepository`,QVe=`CreateRepositoryRequest`,$Ve=`CreateRepositoryResponse`,eHe=`DescribeImages`,tHe=`DescribeImagesFilter`,nHe=`DescribeImagesRequest`,rHe=`DescribeImagesResponse`,iHe=`DeleteLifecyclePolicy`,aHe=`DeleteLifecyclePolicyRequest`,oHe=`DeleteLifecyclePolicyResponse`,sHe=`DeleteRepository`,cHe=`DeleteRepositoryPolicyRequest`,lHe=`DeleteRepositoryPolicyResponse`,uHe=`DeleteRepositoryPolicy`,dHe=`DeleteRepositoryRequest`,fHe=`DeleteRepositoryResponse`,pHe=`DescribeRepositoriesRequest`,mHe=`DescribeRepositoriesResponse`,hHe=`DescribeRepositories`,gHe=`ExclusionAlreadyExistsException`,_He=`EncryptionConfiguration`,vHe=`ExclusionNotFoundException`,yHe=`EmptyUploadException`,bHe=`GetLifecyclePolicy`,xHe=`GetLifecyclePolicyPreview`,SHe=`GetLifecyclePolicyPreviewRequest`,CHe=`GetLifecyclePolicyPreviewResponse`,wHe=`GetLifecyclePolicyRequest`,THe=`GetLifecyclePolicyResponse`,EHe=`GetRepositoryPolicyRequest`,DHe=`GetRepositoryPolicyResponse`,OHe=`GetRepositoryPolicy`,kHe=`ImageArchivedException`,AHe=`ImageAlreadyExistsException`,jHe=`ImageDetail`,MHe=`ImageDigestDoesNotMatchException`,NHe=`ImageDetailList`,PHe=`ImageFailure`,FHe=`ImageFailureList`,IHe=`ImageIdentifier`,LHe=`ImageIdentifierList`,RHe=`InvalidLayerException`,zHe=`InvalidLayerPartException`,BHe=`ImageNotFoundException`,VHe=`InvalidParameterException`,HHe=`ImageScanningConfiguration`,UHe=`ImageStorageClassUpdateNotSupportedException`,WHe=`ImageScanFindingsSummary`,GHe=`ImageScanStatus`,KHe=`ImageTagAlreadyExistsException`,qHe=`ImageTagMutabilityExclusionFilter`,JHe=`ImageTagMutabilityExclusionFilters`,YHe=`InvalidTagParameterException`,XHe=`Key`,ZHe=`KmsException`,QHe=`LayerAlreadyExistsException`,$He=`LimitExceededException`,eUe=`LayerInaccessibleException`,tUe=`LayersNotFoundException`,nUe=`LifecyclePolicyNotFoundException`,rUe=`LifecyclePolicyPreviewFilter`,iUe=`LifecyclePolicyPreviewInProgressException`,aUe=`LifecyclePolicyPreviewNotFoundException`,oUe=`LifecyclePolicyPreviewResult`,sUe=`LifecyclePolicyPreviewResultList`,cUe=`LifecyclePolicyPreviewSummary`,lUe=`LifecyclePolicyRuleAction`,uUe=`LayerPartTooSmallException`,dUe=`PutImageTagMutability`,fUe=`PutImageTagMutabilityRequest`,pUe=`PutImageTagMutabilityResponse`,mUe=`PutLifecyclePolicy`,hUe=`PutLifecyclePolicyRequest`,gUe=`PutLifecyclePolicyResponse`,_Ue=`PullThroughCacheRuleAlreadyExistsException`,vUe=`PullThroughCacheRuleNotFoundException`,yUe=`RepositoryAlreadyExistsException`,bUe=`ReferencedImagesNotFoundException`,xUe=`RepositoryList`,SUe=`RepositoryNotEmptyException`,CUe=`RepositoryNotFoundException`,wUe=`RegistryPolicyNotFoundException`,TUe=`RepositoryPolicyNotFoundException`,EUe=`Repository`,DUe=`SigningConfigurationNotFoundException`,OUe=`ServerException`,kUe=`ScanNotFoundException`,AUe=`SecretNotFoundException`,jUe=`SetRepositoryPolicy`,MUe=`SetRepositoryPolicyRequest`,NUe=`SetRepositoryPolicyResponse`,PUe=`Tag`,FUe=`TemplateAlreadyExistsException`,IUe=`TransitioningImageTotalCount`,LUe=`TransitioningImageTotalCounts`,RUe=`TagList`,zUe=`TooManyTagsException`,BUe=`TemplateNotFoundException`,VUe=`UnsupportedImageTypeException`,HUe=`UploadNotFoundException`,UUe=`UnableToAccessSecretException`,WUe=`UnableToDecryptSecretValueException`,GUe=`UnableToGetUpstreamImageException`,KUe=`UnableToGetUpstreamLayerException`,qUe=`UnableToListUpstreamImageReferrersException`,JUe=`UnsupportedUpstreamRegistryException`,YUe=`Value`,XUe=`ValidationException`,ZUe=`artifactMediaType`,QUe=`appliedRulePriority`,$Ue=`action`,C=`client`,eWe=`createdAt`,tWe=`description`,w=`error`,$U=`encryptionConfiguration`,nWe=`expiringImageTotalCount`,rWe=`encryptionType`,iWe=`failures`,aWe=`failureCode`,oWe=`failureReason`,sWe=`findingSeverityCounts`,cWe=`filterType`,eW=`filter`,tW=`force`,lWe=`httpError`,uWe=`imageDetails`,nW=`imageDigest`,rW=`imageIds`,dWe=`imageId`,fWe=`imageManifestMediaType`,iW=`imagePushedAt`,aW=`imageStatus`,oW=`imageScanningConfiguration`,pWe=`imageScanCompletedAt`,mWe=`imageScanFindingsSummary`,hWe=`imageSizeInBytes`,gWe=`imageScanStatus`,sW=`imageTags`,_We=`imageTotalCount`,cW=`imageTagMutability`,lW=`imageTagMutabilityExclusionFilters`,vWe=`imageTag`,yWe=`kmsError`,bWe=`kmsKey`,xWe=`lastArchivedAt`,SWe=`lastActivatedAt`,uW=`lastEvaluatedAt`,dW=`lifecyclePolicyText`,CWe=`lastRecordedPullTime`,wWe=`lastValidByteReceived`,T=`message`,fW=`maxResults`,pW=`nextToken`,TWe=`previewResults`,mW=`policyText`,EWe=`repositoryArn`,hW=`registryId`,gW=`repositoryName`,DWe=`repositoryNames`,OWe=`repositoryUri`,_W=`repository`,kWe=`repositories`,vW=`smithy.ts.sdk.synthetic.com.amazonaws.ecr`,AWe=`storageClass`,jWe=`subjectManifestDigest`,MWe=`scanOnPush`,NWe=`server`,yW=`status`,PWe=`summary`,FWe=`tags`,IWe=`transitioningImageTotalCounts`,bW=`tagStatus`,xW=`targetStorageClass`,LWe=`type`,RWe=`uploadId`,zWe=`vulnerabilitySourceUpdatedAt`,E=`com.amazonaws.ecr`,SW=new mt(vW),BWe=[-3,vW,`ECRServiceException`,0,[],[]];SW.registerError(BWe,S);var D=new mt(E),VWe=[-3,E,qVe,{[w]:C},[T],[0]];D.registerError(VWe,BVe);var HWe=[-3,E,yHe,{[w]:C},[T],[0]];D.registerError(HWe,cVe);var UWe=[-3,E,gHe,{[w]:C},[T],[0]];D.registerError(UWe,VVe);var WWe=[-3,E,vHe,{[w]:C},[T],[0]];D.registerError(WWe,OVe);var GWe=[-3,E,AHe,{[w]:C},[T],[0]];D.registerError(GWe,IVe);var KWe=[-3,E,kHe,{[w]:C},[T],[0]];D.registerError(KWe,HVe);var qWe=[-3,E,MHe,{[w]:C},[T],[0]];D.registerError(qWe,LVe);var JWe=[-3,E,BHe,{[w]:C},[T],[0]];D.registerError(JWe,kVe);var YWe=[-3,E,UHe,{[w]:C},[T],[0]];D.registerError(YWe,GVe);var XWe=[-3,E,KHe,{[w]:C},[T],[0]];D.registerError(XWe,RVe);var ZWe=[-3,E,RHe,{[w]:C},[T],[0]];D.registerError(ZWe,lVe);var QWe=[-3,E,zHe,{[w]:C},[hW,gW,RWe,wWe,T],[0,0,0,1,0]];D.registerError(QWe,KVe);var $We=[-3,E,VHe,{[w]:C},[T],[0]];D.registerError($We,nVe);var eGe=[-3,E,YHe,{[w]:C},[T],[0]];D.registerError(eGe,yVe);var tGe=[-3,E,ZHe,{[w]:C},[T,yWe],[0,0]];D.registerError(tGe,uVe);var nGe=[-3,E,QHe,{[w]:C},[T],[0]];D.registerError(nGe,dVe);var rGe=[-3,E,eUe,{[w]:C},[T],[0]];D.registerError(rGe,jVe);var iGe=[-3,E,uUe,{[w]:C},[T],[0]];D.registerError(iGe,fVe);var aGe=[-3,E,tUe,{[w]:C},[T],[0]];D.registerError(aGe,MVe);var oGe=[-3,E,nUe,{[w]:C},[T],[0]];D.registerError(oGe,ZU);var sGe=[-3,E,iUe,{[w]:C},[T],[0]];D.registerError(sGe,WVe);var cGe=[-3,E,aUe,{[w]:C},[T],[0]];D.registerError(cGe,PVe);var lGe=[-3,E,$He,{[w]:C},[T],[0]];D.registerError(lGe,aVe);var uGe=[-3,E,_Ue,{[w]:C},[T],[0]];D.registerError(uGe,mVe);var dGe=[-3,E,vUe,{[w]:C},[T],[0]];D.registerError(dGe,CVe);var fGe=[-3,E,bUe,{[w]:C},[T],[0]];D.registerError(fGe,zVe);var pGe=[-3,E,wUe,{[w]:C},[T],[0]];D.registerError(pGe,wVe);var mGe=[-3,E,yUe,{[w]:C},[T],[0]];D.registerError(mGe,bVe);var hGe=[-3,E,SUe,{[w]:C},[T],[0]];D.registerError(hGe,TVe);var gGe=[-3,E,CUe,{[w]:C},[T],[0]];D.registerError(gGe,rVe);var _Ge=[-3,E,TUe,{[w]:C},[T],[0]];D.registerError(_Ge,QU);var vGe=[-3,E,kUe,{[w]:C},[T],[0]];D.registerError(vGe,AVe);var yGe=[-3,E,AUe,{[w]:C},[T],[0]];D.registerError(yGe,hVe);var bGe=[-3,E,OUe,{[w]:NWe},[T],[0]];D.registerError(bGe,iVe);var xGe=[-3,E,DUe,{[w]:C},[T],[0]];D.registerError(xGe,DVe);var SGe=[-3,E,FUe,{[w]:C},[T],[0]];D.registerError(SGe,SVe);var CGe=[-3,E,BUe,{[w]:C},[T],[0]];D.registerError(CGe,EVe);var wGe=[-3,E,zUe,{[w]:C},[T],[0]];D.registerError(wGe,xVe);var TGe=[-3,E,UUe,{[w]:C},[T],[0]];D.registerError(TGe,gVe);var EGe=[-3,E,WUe,{[w]:C},[T],[0]];D.registerError(EGe,_Ve);var DGe=[-3,E,GUe,{[w]:C},[T],[0]];D.registerError(DGe,oVe);var OGe=[-3,E,KUe,{[w]:C},[T],[0]];D.registerError(OGe,NVe);var kGe=[-3,E,qUe,{[w]:C},[T],[0]];D.registerError(kGe,FVe);var AGe=[-3,E,VUe,{[w]:C},[T],[0]];D.registerError(AGe,UVe);var jGe=[-3,E,JUe,{[w]:C},[T],[0]];D.registerError(jGe,vVe);var MGe=[-3,E,HUe,{[w]:C},[T],[0]];D.registerError(MGe,pVe);var NGe=[-3,E,XUe,{[w]:C,[lWe]:400},[T],[0]];D.registerError(NGe,sVe);var PGe=[SW,D],FGe=[3,E,YVe,0,[gW,rW,hW],[0,()=>DW,0],2],IGe=[3,E,XVe,0,[rW,iWe],[()=>DW,()=>bKe]],LGe=[3,E,QVe,0,[gW,hW,FWe,cW,lW,oW,$U],[0,0,()=>CKe,0,()=>OW,()=>TW,()=>CW],1],RGe=[3,E,$Ve,0,[_W],[()=>EW]],zGe=[3,E,aHe,0,[gW,hW],[0,0],1],BGe=[3,E,oHe,0,[hW,gW,dW,uW],[0,0,0,4]],VGe=[3,E,cHe,0,[gW,hW],[0,0],1],HGe=[3,E,lHe,0,[hW,gW,mW],[0,0,0]],UGe=[3,E,dHe,0,[gW,hW,tW],[0,0,2],1],WGe=[3,E,fHe,0,[_W],[()=>EW]],GGe=[3,E,tHe,0,[bW,aW],[0,0]],KGe=[3,E,nHe,0,[gW,hW,rW,pW,fW,eW],[0,0,()=>DW,0,1,()=>GGe],1],qGe=[3,E,rHe,0,[uWe,pW],[()=>yKe,0]],JGe=[3,E,pHe,0,[hW,DWe,pW,fW],[0,64,0,1]],YGe=[3,E,mHe,0,[kWe,pW],[()=>SKe,0]],CW=[3,E,_He,0,[rWe,bWe],[0,0],1],XGe=[3,E,SHe,0,[gW,hW,rW,pW,fW,eW],[0,0,()=>DW,0,1,()=>sKe],1],ZGe=[3,E,CHe,0,[hW,gW,dW,yW,pW,TWe,PWe],[0,0,0,0,0,()=>xKe,()=>lKe]],QGe=[3,E,wHe,0,[gW,hW],[0,0],1],$Ge=[3,E,THe,0,[hW,gW,dW,uW],[0,0,0,4]],eKe=[3,E,EHe,0,[gW,hW],[0,0],1],tKe=[3,E,DHe,0,[hW,gW,mW],[0,0,0]],nKe=[3,E,jHe,0,[hW,gW,nW,sW,hWe,iW,gWe,mWe,fWe,ZUe,CWe,jWe,aW,xWe,SWe],[0,0,0,64,1,4,()=>aKe,()=>iKe,0,0,4,0,0,4,4]],rKe=[3,E,PHe,0,[dWe,aWe,oWe],[()=>wW,0,0]],wW=[3,E,IHe,0,[nW,vWe],[0,0]],iKe=[3,E,WHe,0,[pWe,zWe,sWe],[4,4,129]],TW=[3,E,HHe,0,[MWe],[2]],aKe=[3,E,GHe,0,[yW,tWe],[0,0]],oKe=[3,E,qHe,0,[cWe,eW],[0,0],2],sKe=[3,E,rUe,0,[bW],[0]],cKe=[3,E,oUe,0,[sW,nW,iW,$Ue,QUe,AWe],[64,0,4,()=>uKe,1,0]],lKe=[3,E,cUe,0,[nWe,IWe],[1,()=>wKe]],uKe=[3,E,lUe,0,[LWe,xW],[0,0]],dKe=[3,E,fUe,0,[gW,cW,hW,lW],[0,0,0,()=>OW],2],fKe=[3,E,pUe,0,[hW,gW,cW,lW],[0,0,0,()=>OW]],pKe=[3,E,hUe,0,[gW,dW,hW],[0,0,0],2],mKe=[3,E,gUe,0,[hW,gW,dW],[0,0,0]],EW=[3,E,EUe,0,[EWe,hW,gW,OWe,eWe,cW,lW,oW,$U],[0,0,0,0,4,0,()=>OW,()=>TW,()=>CW]],hKe=[3,E,MUe,0,[gW,mW,hW,tW],[0,0,0,2],2],gKe=[3,E,NUe,0,[hW,gW,mW],[0,0,0]],_Ke=[3,E,PUe,0,[XHe,YUe],[0,0],2],vKe=[3,E,IUe,0,[xW,_We],[0,1]],yKe=[1,E,NHe,0,()=>nKe],bKe=[1,E,FHe,0,()=>rKe],DW=[1,E,LHe,0,()=>wW],OW=[1,E,JHe,0,()=>oKe],xKe=[1,E,sUe,0,()=>cKe],SKe=[1,E,xUe,0,()=>EW],CKe=[1,E,RUe,0,()=>_Ke],wKe=[1,E,LUe,0,()=>vKe],TKe=[9,E,JVe,0,()=>FGe,()=>IGe],EKe=[9,E,ZVe,0,()=>LGe,()=>RGe],DKe=[9,E,iHe,0,()=>zGe,()=>BGe],OKe=[9,E,sHe,0,()=>UGe,()=>WGe],kKe=[9,E,uHe,0,()=>VGe,()=>HGe],AKe=[9,E,eHe,0,()=>KGe,()=>qGe],jKe=[9,E,hHe,0,()=>JGe,()=>YGe],MKe=[9,E,bHe,0,()=>QGe,()=>$Ge],NKe=[9,E,xHe,0,()=>XGe,()=>ZGe],PKe=[9,E,OHe,0,()=>eKe,()=>tKe],FKe=[9,E,dUe,0,()=>dKe,()=>fKe],IKe=[9,E,mUe,0,()=>pKe,()=>mKe],LKe=[9,E,jUe,0,()=>hKe,()=>gKe],RKe=e=>({apiVersion:`2015-09-21`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??tVe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??KBe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Qt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ecr`,errorTypeRegistries:PGe,xmlNamespace:`http://ecr.amazonaws.com/doc/2015-09-21/`,version:`2015-09-21`,serviceTarget:`AmazonEC2ContainerRegistry_V20150921`},serviceId:e?.serviceId??`ECR`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),zKe=e=>{let t=te(e),n=()=>t().then(Ae),r=RKe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:XBe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},BKe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},VKe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),HKe=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),BKe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),VKe(n))},UKe=class extends tt{config;constructor(...[t]){let n=zKe(t||{});super(n),this.initConfig=n;let r=JBe(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=HKe(qBe(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:WBe,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},WKe=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function GKe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ecs`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var KKe=e=>{let t=[];return e.operation,t.push(GKe(e)),t},qKe=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},JKe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ecs`}),YKe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},XKe={name:`@aws-sdk/client-ecs`,version:`3.1144.0`,description:`AWS SDK for JavaScript Ecs Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ecs`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ecs`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},kW=`ref`,AW=-1,jW=!0,MW=`isSet`,NW=`PartitionResult`,PW=`booleanEquals`,FW=`getAttr`,IW={[kW]:`Endpoint`},LW={[kW]:NW},RW={},zW=[{[kW]:`Region`}],BW={conditions:[[MW,[IW]],[MW,zW],[`aws.partition`,zW,NW],[PW,[{[kW]:`UseFIPS`},jW]],[PW,[{[kW]:`UseDualStack`},jW]],[PW,[{fn:FW,argv:[LW,`supportsDualStack`]},jW]],[PW,[{fn:FW,argv:[LW,`supportsFIPS`]},jW]]],results:[[AW],[AW,`Invalid Configuration: FIPS and custom endpoint are not supported`],[AW,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[IW,RW],[`https://ecs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,RW],[AW,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://ecs-fips.{Region}.{PartitionResult#dnsSuffix}`,RW],[AW,`FIPS is enabled but this partition does not support FIPS`],[`https://ecs.{Region}.{PartitionResult#dualStackDnsSuffix}`,RW],[AW,`DualStack is enabled but this partition does not support DualStack`],[`https://ecs.{Region}.{PartitionResult#dnsSuffix}`,RW],[AW,`Invalid Configuration: Missing Region`]]},ZKe=2,QKe=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),$Ke=s.from(QKe,ZKe,BW.conditions,BW.results),eqe=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),tqe=(e,t={})=>eqe.get(e,()=>ze($Ke,{endpointParams:e,logger:t.logger}));lt.aws=de;var VW=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},nqe=class e extends VW{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rqe=class e extends VW{name=`ClientException`;$fault=`client`;constructor(t){super({name:`ClientException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iqe=class e extends VW{name=`ClusterNotFoundException`;$fault=`client`;constructor(t){super({name:`ClusterNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aqe=class e extends VW{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oqe=class e extends VW{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sqe=class e extends VW{name=`ServerException`;$fault=`server`;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},cqe=class e extends VW{name=`UnsupportedFeatureException`;$fault=`client`;constructor(t){super({name:`UnsupportedFeatureException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lqe=class e extends VW{name=`UpdateInProgressException`;$fault=`client`;constructor(t){super({name:`UpdateInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uqe=class e extends VW{name=`NamespaceNotFoundException`;$fault=`client`;constructor(t){super({name:`NamespaceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dqe=class e extends VW{name=`ClusterContainsCapacityProviderException`;$fault=`client`;constructor(t){super({name:`ClusterContainsCapacityProviderException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fqe=class e extends VW{name=`ClusterContainsContainerInstancesException`;$fault=`client`;constructor(t){super({name:`ClusterContainsContainerInstancesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pqe=class e extends VW{name=`ClusterContainsServicesException`;$fault=`client`;constructor(t){super({name:`ClusterContainsServicesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mqe=class e extends VW{name=`ClusterContainsTasksException`;$fault=`client`;constructor(t){super({name:`ClusterContainsTasksException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hqe=class e extends VW{name=`TargetNotConnectedException`;$fault=`client`;constructor(t){super({name:`TargetNotConnectedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gqe=class e extends VW{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_qe=class e extends VW{name=`TargetNotFoundException`;$fault=`client`;constructor(t){super({name:`TargetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vqe=class e extends VW{name=`ServiceNotFoundException`;$fault=`client`;constructor(t){super({name:`ServiceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yqe=class e extends VW{name=`AttributeLimitExceededException`;$fault=`client`;constructor(t){super({name:`AttributeLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bqe=class e extends VW{name=`MissingVersionException`;$fault=`client`;constructor(t){super({name:`MissingVersionException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xqe=class e extends VW{name=`NoUpdateAvailableException`;$fault=`client`;constructor(t){super({name:`NoUpdateAvailableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Sqe=class e extends VW{name=`ServiceDeploymentNotFoundException`;$fault=`client`;constructor(t){super({name:`ServiceDeploymentNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cqe=class e extends VW{name=`PlatformUnknownException`;$fault=`client`;constructor(t){super({name:`PlatformUnknownException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wqe=class e extends VW{name=`DaemonNotActiveException`;$fault=`client`;constructor(t){super({name:`DaemonNotActiveException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Tqe=class e extends VW{name=`DaemonNotFoundException`;$fault=`client`;constructor(t){super({name:`DaemonNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Eqe=class e extends VW{name=`PlatformTaskDefinitionIncompatibilityException`;$fault=`client`;constructor(t){super({name:`PlatformTaskDefinitionIncompatibilityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dqe=class e extends VW{name=`ServiceNotActiveException`;$fault=`client`;constructor(t){super({name:`ServiceNotActiveException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Oqe=class e extends VW{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kqe=class e extends VW{name=`ConflictException`;$fault=`client`;resourceIds;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceIds=t.resourceIds}},Aqe=class e extends VW{name=`TaskSetNotFoundException`;$fault=`client`;constructor(t){super({name:`TaskSetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jqe=class e extends VW{name=`BlockedException`;$fault=`client`;constructor(t){super({name:`BlockedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mqe=`Attachment`,Nqe=`AdvancedConfiguration`,Pqe=`AttachmentDetails`,Fqe=`AccessDeniedException`,Iqe=`AttributeLimitExceededException`,Lqe=`AwsVpcConfiguration`,Rqe=`Attribute`,zqe=`Attachments`,Bqe=`Attributes`,Vqe=`BlockedException`,Hqe=`Cluster`,Uqe=`CanaryConfiguration`,Wqe=`ClusterContainsContainerInstancesException`,Gqe=`ClusterContainsCapacityProviderException`,Kqe=`CreateClusterRequest`,qqe=`CreateClusterResponse`,Jqe=`ClusterContainsServicesException`,Yqe=`ClusterContainsTasksException`,Xqe=`ClusterConfiguration`,Zqe=`CreateCluster`,Qqe=`ContainerDefinition`,$qe=`ContainerDependency`,eJe=`ContainerDefinitions`,tJe=`ContainerDependencies`,nJe=`ClientException`,rJe=`ConflictException`,iJe=`ContainerInstanceHealthStatus`,aJe=`ContainerInstance`,oJe=`ContainerInstances`,sJe=`ClusterNotFoundException`,cJe=`ContainerOverride`,lJe=`ContainerOverrides`,uJe=`CapacityProviderStrategy`,dJe=`CapacityProviderStrategyItem`,fJe=`ContainerRestartPolicy`,pJe=`ClusterSetting`,mJe=`ClusterServiceConnectDefaults`,hJe=`ClusterServiceConnectDefaultsRequest`,gJe=`CreateServiceRequest`,_Je=`CreateServiceResponse`,vJe=`ClusterSettings`,yJe=`CreateService`,bJe=`Clusters`,xJe=`Container`,SJe=`Containers`,CJe=`Deployment`,wJe=`DeploymentAlarms`,TJe=`DeploymentConfiguration`,EJe=`DeploymentCircuitBreaker`,DJe=`DeregisterContainerInstanceRequest`,OJe=`DeregisterContainerInstanceResponse`,kJe=`DescribeContainerInstancesRequest`,AJe=`DescribeContainerInstancesResponse`,jJe=`DeregisterContainerInstance`,MJe=`DescribeContainerInstances`,NJe=`DeleteClusterRequest`,PJe=`DeleteClusterResponse`,FJe=`DescribeClustersRequest`,IJe=`DescribeClustersResponse`,LJe=`DeploymentController`,RJe=`DeleteCluster`,zJe=`DescribeClusters`,BJe=`DeploymentEphemeralStorage`,VJe=`DeploymentEarlySuccessCriteria`,HJe=`DevicesList`,UJe=`DeploymentLifecycleHook`,WJe=`DeploymentLifecycleHookList`,GJe=`DeploymentLifecycleHookTimeoutConfiguration`,KJe=`DaemonNotActiveException`,qJe=`DaemonNotFoundException`,JJe=`DescribeServicesRequest`,YJe=`DescribeServicesResponse`,XJe=`DescribeServices`,ZJe=`DescribeTasks`,QJe=`DeregisterTaskDefinitionRequest`,$Je=`DeregisterTaskDefinitionResponse`,eYe=`DescribeTaskDefinitionRequest`,tYe=`DescribeTaskDefinitionResponse`,nYe=`DeregisterTaskDefinition`,rYe=`DescribeTaskDefinition`,iYe=`DescribeTasksRequest`,aYe=`DescribeTasksResponse`,oYe=`DockerVolumeConfiguration`,sYe=`Device`,cYe=`Deployments`,lYe=`EBSTagSpecification`,uYe=`EBSTagSpecifications`,dYe=`ExecuteCommandConfiguration`,fYe=`ExecuteCommandLogConfiguration`,pYe=`EnvironmentFile`,mYe=`EFSAuthorizationConfig`,hYe=`EFSVolumeConfiguration`,gYe=`EnvironmentFiles`,_Ye=`EphemeralStorage`,vYe=`EnvironmentVariables`,yYe=`Failure`,bYe=`FirelensConfiguration`,xYe=`FSxWindowsFileServerAuthorizationConfig`,SYe=`FSxWindowsFileServerVolumeConfiguration`,CYe=`Failures`,wYe=`HealthCheck`,TYe=`HostEntry`,EYe=`HostEntryList`,DYe=`HostVolumeProperties`,OYe=`InferenceAccelerator`,kYe=`InferenceAcceleratorOverride`,AYe=`InferenceAcceleratorOverrides`,jYe=`InferenceAccelerators`,MYe=`InstanceHealthCheckResult`,NYe=`InstanceHealthCheckResultList`,PYe=`InvalidParameterException`,FYe=`KernelCapabilities`,IYe=`KeyValuePair`,LYe=`LoadBalancer`,RYe=`LoadBalancers`,zYe=`LinearConfiguration`,BYe=`ListContainerInstances`,VYe=`ListContainerInstancesRequest`,HYe=`ListContainerInstancesResponse`,UYe=`ListClustersRequest`,WYe=`ListClustersResponse`,GYe=`ListClusters`,KYe=`LogConfiguration`,qYe=`LimitExceededException`,JYe=`LinuxParameters`,YYe=`ListServices`,XYe=`ListServicesRequest`,ZYe=`ListServicesResponse`,QYe=`ListTasks`,$Ye=`ListTaskDefinitions`,eXe=`ListTaskDefinitionsRequest`,tXe=`ListTaskDefinitionsResponse`,nXe=`ListTasksRequest`,rXe=`ListTasksResponse`,iXe=`ManagedAgent`,aXe=`ManagedAgents`,oXe=`MetricConfigurationList`,sXe=`MetricConfiguration`,cXe=`MonitoringConfiguration`,lXe=`MountPoint`,uXe=`MountPointList`,dXe=`ManagedStorageConfiguration`,fXe=`MissingVersionException`,pXe=`NetworkBinding`,mXe=`NetworkBindings`,hXe=`NetworkConfiguration`,gXe=`NetworkInterface`,_Xe=`NetworkInterfaces`,vXe=`NamespaceNotFoundException`,yXe=`NoUpdateAvailableException`,bXe=`PlacementConstraint`,xXe=`ProxyConfigurationProperties`,SXe=`PlacementConstraints`,CXe=`ProxyConfiguration`,wXe=`PortMapping`,TXe=`PortMappingList`,EXe=`PlacementStrategy`,DXe=`PlacementStrategies`,OXe=`PlatformTaskDefinitionIncompatibilityException`,kXe=`PlatformUnknownException`,AXe=`Resource`,jXe=`RequiresAttributes`,MXe=`RepositoryCredentials`,NXe=`ResourceInUseException`,PXe=`ResourceNotFoundException`,FXe=`RuntimePlatform`,IXe=`ResourceRequirement`,LXe=`ResourceRequirements`,RXe=`RunTask`,zXe=`RegisterTaskDefinition`,BXe=`RegisterTaskDefinitionRequest`,VXe=`RegisterTaskDefinitionResponse`,HXe=`RunTaskRequest`,UXe=`RunTaskResponse`,WXe=`Resources`,GXe=`Scale`,KXe=`SystemControl`,qXe=`ServiceConnectAccessLogConfiguration`,JXe=`ServiceConnectConfiguration`,YXe=`ServiceConnectClientAlias`,XXe=`ServiceConnectClientAliasList`,ZXe=`ServiceCurrentRevisionSummary`,QXe=`ServiceCurrentRevisionSummaryList`,$Xe=`ServiceConnectService`,eZe=`ServiceConnectServiceList`,tZe=`ServiceConnectServiceResource`,nZe=`ServiceConnectServiceResourceList`,rZe=`ServiceConnectTlsConfiguration`,iZe=`ServiceConnectTlsCertificateAuthority`,aZe=`ServiceConnectTestTrafficHeaderMatchRules`,oZe=`ServiceConnectTestTrafficHeaderRules`,sZe=`ServiceConnectTestTrafficRules`,cZe=`SystemControls`,lZe=`ServiceDeploymentNotFoundException`,uZe=`ServerException`,dZe=`ServiceEvent`,fZe=`ServiceEvents`,pZe=`S3FilesVolumeConfiguration`,mZe=`SecretList`,hZe=`ServiceManagedEBSVolumeConfiguration`,gZe=`ServiceNotActiveException`,_Ze=`ServiceNotFoundException`,vZe=`ServiceRegistry`,yZe=`ServiceRegistries`,bZe=`StopTaskRequest`,xZe=`StopTaskResponse`,SZe=`StopTask`,CZe=`ServiceVolumeConfiguration`,wZe=`ServiceVolumeConfigurations`,TZe=`Secret`,EZe=`Service`,DZe=`Services`,OZe=`Statistics`,kZe=`Tag`,AZe=`ThresholdConfiguration`,jZe=`TimeoutConfiguration`,MZe=`TaskDefinition`,NZe=`TaskDefinitionPlacementConstraint`,PZe=`TaskDefinitionPlacementConstraints`,FZe=`TaskEphemeralStorage`,IZe=`TmpfsList`,LZe=`TaskManagedEBSVolumeConfiguration`,RZe=`TaskManagedEBSVolumeTerminationPolicy`,zZe=`TargetNotConnectedException`,BZe=`TargetNotFoundException`,VZe=`TaskOverride`,HZe=`TaskSet`,UZe=`TaskSetNotFoundException`,WZe=`TaskSets`,GZe=`TaskVolumeConfiguration`,KZe=`TaskVolumeConfigurations`,qZe=`Task`,JZe=`Tags`,YZe=`Tasks`,XZe=`Tmpfs`,ZZe=`Ulimit`,QZe=`UpdateContainerInstancesState`,$Ze=`UpdateContainerInstancesStateRequest`,eQe=`UpdateContainerInstancesStateResponse`,tQe=`UnsupportedFeatureException`,nQe=`UpdateInProgressException`,rQe=`UlimitList`,iQe=`Volume`,aQe=`VolumeFrom`,oQe=`VolumeFromList`,sQe=`VersionInfo`,cQe=`VolumeList`,lQe=`VpcLatticeAdvancedConfiguration`,uQe=`VpcLatticeConfiguration`,dQe=`VpcLatticeConfigurations`,HW=`attachments`,fQe=`agentConnected`,UW=`advancedConfiguration`,WW=`authorizationConfig`,pQe=`awsvpcConfiguration`,mQe=`agentHash`,hQe=`attachmentId`,gQe=`accessLogConfiguration`,_Qe=`alarmNames`,vQe=`appProtocol`,yQe=`accessPointArn`,bQe=`awsPcaAuthorityArn`,xQe=`assignPublicIp`,SQe=`accessPointId`,CQe=`activeServicesCount`,wQe=`attachmentsStatus`,GW=`alternateTargetGroupArn`,TQe=`agentUpdateStatus`,EQe=`agentVersion`,DQe=`availabilityZone`,KW=`availabilityZoneRebalancing`,OQe=`action`,kQe=`add`,AQe=`alarms`,qW=`arn`,JW=`attributes`,jQe=`autoprovision`,MQe=`base`,NQe=`bindIP`,PQe=`bakeTimeInMinutes`,YW=`client`,XW=`clusterArn`,FQe=`configuredAtLaunch`,IQe=`clusterArns`,LQe=`clientAliases`,RQe=`containerArn`,zQe=`connectivityAt`,BQe=`cpuArchitecture`,ZW=`createdAt`,VQe=`canaryBakeTimeInMinutes`,HQe=`createdBy`,UQe=`canaryConfiguration`,QW=`containerDefinitions`,WQe=`computedDesiredCount`,$W=`containerInstanceArn`,GQe=`containerInstanceArns`,eG=`containerInstance`,tG=`containerInstances`,nG=`clusterName`,rG=`containerName`,KQe=`containerOverrides`,qQe=`canaryPercent`,iG=`capacityProviderName`,aG=`containerPortRange`,oG=`capacityProviderStrategy`,JQe=`capacityProvider`,sG=`capacityProviders`,cG=`containerPath`,lG=`containerPort`,uG=`credentialsParameter`,YQe=`credentialSpecs`,XQe=`currentServiceDeployment`,ZQe=`currentServiceRevisions`,dG=`clientToken`,QQe=`cloudWatchEncryptionEnabled`,$Qe=`cloudWatchLogGroupName`,e$e=`capabilities`,fG=`cluster`,pG=`clusters`,mG=`configuration`,hG=`command`,t$e=`compatibilities`,n$e=`condition`,r$e=`connectivity`,i$e=`containers`,a$e=`count`,gG=`cpu`,_G=`details`,o$e=`deregisteredAt`,s$e=`discoveryArn`,vG=`deploymentConfiguration`,c$e=`deploymentCircuitBreaker`,yG=`defaultCapacityProviderStrategy`,bG=`desiredCount`,xG=`deploymentController`,l$e=`dockerLabels`,u$e=`disableNetworking`,d$e=`daemonName`,SG=`deviceName`,CG=`discoveryName`,f$e=`dnsName`,p$e=`dependsOn`,m$e=`deleteOnTermination`,h$e=`driverOpts`,g$e=`deleteRequestedAt`,_$e=`dnsServers`,v$e=`dnsSearchDomains`,y$e=`dockerSecurityOptions`,wG=`desiredStatus`,TG=`deviceType`,b$e=`doubleValue`,x$e=`dockerVolumeConfiguration`,S$e=`dockerVersion`,C$e=`devices`,w$e=`deployments`,T$e=`detail`,E$e=`domain`,D$e=`driver`,O$e=`drop`,EG=`error`,k$e=`exitCode`,A$e=`executeCommandConfiguration`,DG=`enableExecuteCommand`,OG=`enableECSManagedTags`,kG=`environmentFiles`,AG=`enableFaultInjection`,j$e=`extraHosts`,M$e=`externalId`,N$e=`ec2InstanceId`,P$e=`entryPoint`,jG=`executionRoleArn`,F$e=`executionStoppedAt`,I$e=`earlySuccessCriteria`,MG=`ephemeralStorage`,L$e=`efsVolumeConfiguration`,NG=`environment`,PG=`enabled`,FG=`enable`,IG=`encrypted`,R$e=`essential`,z$e=`events`,LG=`expression`,B$e=`exact`,RG=`family`,V$e=`firelensConfiguration`,zG=`fargateEphemeralStorage`,H$e=`fargateEphemeralStorageKmsKeyId`,U$e=`familyPrefix`,W$e=`fileSystemArn`,BG=`fileSystemId`,G$e=`failedTasks`,VG=`filesystemType`,K$e=`fsxWindowsFileServerVolumeConfiguration`,HG=`failures`,q$e=`filter`,J$e=`field`,Y$e=`force`,X$e=`format`,UG=`group`,Z$e=`gpuIds`,WG=`hostname`,Q$e=`healthCheck`,GG=`healthCheckGracePeriodSeconds`,$$e=`hookDetails`,e1e=`httpError`,t1e=`hardLimit`,n1e=`healthyPercent`,r1e=`hostPortRange`,i1e=`hostPath`,KG=`hostPort`,qG=`healthStatus`,a1e=`hookTargetArn`,o1e=`header`,s1e=`host`,JG=`id`,c1e=`ipAddress`,l1e=`inferenceAcceleratorOverrides`,YG=`inferenceAccelerators`,u1e=`ipv6Address`,d1e=`issuerCertificateAuthority`,f1e=`imageDigest`,p1e=`ignoredExitCodes`,XG=`ipcMode`,m1e=`initProcessEnabled`,h1e=`ingressPortOverride`,g1e=`includeQueryParameters`,_1e=`idleTimeoutSeconds`,v1e=`integerValue`,y1e=`iam`,ZG=`image`,b1e=`interactive`,QG=`include`,x1e=`interval`,$G=`iops`,S1e=`key`,C1e=`kmsKey`,eK=`kmsKeyId`,w1e=`links`,tK=`loadBalancers`,T1e=`loadBalancerName`,nK=`logConfiguration`,E1e=`linearConfiguration`,D1e=`logDriver`,O1e=`lifecycleHooks`,k1e=`linuxParameters`,rK=`lastStatus`,A1e=`lastStartedAt`,j1e=`lastStatusChange`,M1e=`lifecycleStages`,iK=`launchType`,N1e=`lastUpdated`,P1e=`longValue`,F1e=`labels`,I1e=`logging`,aK=`message`,L1e=`managedAgents`,R1e=`metricConfigurations`,oK=`managedEBSVolume`,z1e=`minimumHealthyPercent`,sK=`metricNames`,B1e=`mountOptions`,V1e=`mountPoints`,H1e=`maximumPercent`,cK=`memoryReservation`,lK=`maxResults`,U1e=`managedStorageConfiguration`,W1e=`maxSwap`,uK=`memory`,G1e=`monitoring`,dK=`name`,K1e=`networkBindings`,fK=`networkConfiguration`,q1e=`neuronDeviceIds`,J1e=`networkInterfaces`,pK=`networkMode`,mK=`nextToken`,hK=`namespace`,gK=`options`,Y1e=`overallStatus`,X1e=`operatingSystemFamily`,_K=`overrides`,Z1e=`privileged`,vK=`pendingCount`,yK=`placementConstraints`,bK=`proxyConfiguration`,xK=`platformFamily`,Q1e=`privateIpv4Address`,SK=`productionListenerRule`,$1e=`portMappings`,CK=`pidMode`,wK=`portName`,e0e=`perRequestTimeoutSeconds`,TK=`placementStrategy`,t0e=`pullStartedAt`,n0e=`pullStoppedAt`,r0e=`pseudoTerminal`,EK=`pendingTasksCount`,i0e=`pendingTaskCount`,DK=`propagateTags`,OK=`platformVersion`,a0e=`permissions`,kK=`port`,AK=`protocol`,o0e=`properties`,jK=`reason`,MK=`roleArn`,s0e=`restartAttemptPeriod`,NK=`registeredAt`,c0e=`registryArn`,l0e=`requiresAttributes`,u0e=`registeredBy`,d0e=`repositoryCredentials`,f0e=`registeredContainerInstancesCount`,PK=`requiresCompatibilities`,FK=`runningCount`,IK=`rootDirectory`,p0e=`resourceIds`,m0e=`referenceId`,h0e=`runtimeId`,LK=`resourceManagementType`,RK=`readOnly`,g0e=`resetOnHealthyTask`,_0e=`restartPolicy`,zK=`runtimePlatform`,BK=`resourceRequirements`,v0e=`readonlyRootFilesystem`,y0e=`remainingResources`,b0e=`registeredResources`,x0e=`rolloutState`,S0e=`rolloutStateReason`,C0e=`resolutionSeconds`,w0e=`resourceType`,VK=`runningTasksCount`,T0e=`requestedTaskCount`,E0e=`runningTaskCount`,D0e=`revision`,O0e=`retries`,k0e=`role`,HK=`rollback`,UK=`smithy.ts.sdk.synthetic.com.amazonaws.ecs`,A0e=`startedAt`,WK=`serviceArn`,j0e=`serviceArns`,M0e=`stoppedAt`,N0e=`stoppingAt`,GK=`startedBy`,P0e=`s3BucketName`,F0e=`stepBakeTimeInMinutes`,I0e=`systemControls`,KK=`serviceConnectConfiguration`,qK=`serviceConnectDefaults`,L0e=`serviceConnectResources`,R0e=`sourceContainer`,z0e=`stopCode`,B0e=`s3EncryptionEnabled`,V0e=`securityGroups`,JK=`sizeInGiB`,YK=`snapshotId`,H0e=`s3KeyPrefix`,U0e=`softLimit`,W0e=`sharedMemorySize`,XK=`serviceName`,G0e=`secretOptions`,K0e=`startPeriod`,q0e=`sourcePath`,J0e=`stepPercent`,ZK=`statusReason`,QK=`serviceRegistries`,Y0e=`stoppedReason`,$K=`schedulingStrategy`,X0e=`stabilityStatusAt`,Z0e=`sourceServiceRevisionCleanup`,Q0e=`stringSetValue`,$0e=`stabilityStatus`,e2e=`startTimeout`,t2e=`stopTimeout`,n2e=`sourceVolume`,r2e=`s3filesVolumeConfiguration`,i2e=`scale`,a2e=`scope`,o2e=`server`,s2e=`secrets`,c2e=`service`,eq=`services`,tq=`settings`,l2e=`size`,u2e=`sort`,nq=`status`,d2e=`statistics`,f2e=`strategy`,p2e=`subnets`,m2e=`swappiness`,rq=`type`,iq=`taskArn`,h2e=`taskArns`,g2e=`thresholdConfiguration`,_2e=`timeoutConfiguration`,aq=`taskDefinition`,oq=`taskDefinitionArn`,v2e=`taskDefinitionArns`,sq=`transitEncryptionPort`,y2e=`transitEncryption`,cq=`targetGroupArn`,b2e=`targetId`,x2e=`timeoutInMinutes`,lq=`testListenerRule`,S2e=`terminationPolicy`,uq=`taskRoleArn`,C2e=`taskSetArn`,w2e=`taskSets`,dq=`tagSpecifications`,fq=`targetType`,T2e=`testTrafficRules`,pq=`tags`,mq=`tasks`,hq=`task`,gq=`throughput`,_q=`timeout`,E2e=`tls`,D2e=`tmpfs`,O2e=`user`,vq=`updatedAt`,k2e=`ulimits`,A2e=`unit`,yq=`value`,j2e=`versionConsistency`,bq=`volumeConfigurations`,M2e=`volumesFrom`,N2e=`valueFrom`,P2e=`versionInfo`,xq=`volumeInitializationRate`,Sq=`vpcLatticeConfigurations`,Cq=`volumeType`,wq=`version`,Tq=`volumes`,F2e=`weight`,I2e=`workingDirectory`,O=`com.amazonaws.ecs`,Eq=new mt(UK),L2e=[-3,UK,`ECSServiceException`,0,[],[]];Eq.registerError(L2e,VW);var Dq=new mt(O),R2e=[-3,O,Fqe,{[EG]:YW,[e1e]:403},[aK],[0]];Dq.registerError(R2e,nqe);var z2e=[-3,O,Iqe,{[EG]:YW},[aK],[0]];Dq.registerError(z2e,yqe);var B2e=[-3,O,Vqe,{[EG]:YW},[aK],[0]];Dq.registerError(B2e,jqe);var V2e=[-3,O,nJe,{[EG]:YW},[aK],[0]];Dq.registerError(V2e,rqe);var H2e=[-3,O,Gqe,{[EG]:YW},[aK],[0]];Dq.registerError(H2e,dqe);var U2e=[-3,O,Wqe,{[EG]:YW},[aK],[0]];Dq.registerError(U2e,fqe);var W2e=[-3,O,Jqe,{[EG]:YW},[aK],[0]];Dq.registerError(W2e,pqe);var G2e=[-3,O,Yqe,{[EG]:YW},[aK],[0]];Dq.registerError(G2e,mqe);var K2e=[-3,O,sJe,{[EG]:YW},[aK],[0]];Dq.registerError(K2e,iqe);var q2e=[-3,O,rJe,{[EG]:YW},[p0e,aK],[64,0]];Dq.registerError(q2e,kqe);var J2e=[-3,O,KJe,{[EG]:YW},[aK],[0]];Dq.registerError(J2e,wqe);var Y2e=[-3,O,qJe,{[EG]:YW},[aK],[0]];Dq.registerError(Y2e,Tqe);var X2e=[-3,O,PYe,{[EG]:YW},[aK],[0]];Dq.registerError(X2e,aqe);var Z2e=[-3,O,qYe,{[EG]:YW},[aK],[0]];Dq.registerError(Z2e,oqe);var Q2e=[-3,O,fXe,{[EG]:YW},[aK],[0]];Dq.registerError(Q2e,bqe);var $2e=[-3,O,vXe,{[EG]:YW},[aK],[0]];Dq.registerError($2e,uqe);var e4e=[-3,O,yXe,{[EG]:YW},[aK],[0]];Dq.registerError(e4e,xqe);var t4e=[-3,O,OXe,{[EG]:YW},[aK],[0]];Dq.registerError(t4e,Eqe);var n4e=[-3,O,kXe,{[EG]:YW},[aK],[0]];Dq.registerError(n4e,Cqe);var r4e=[-3,O,NXe,{[EG]:YW},[aK],[0]];Dq.registerError(r4e,gqe);var i4e=[-3,O,PXe,{[EG]:YW},[aK],[0]];Dq.registerError(i4e,Oqe);var a4e=[-3,O,uZe,{[EG]:o2e},[aK],[0]];Dq.registerError(a4e,sqe);var o4e=[-3,O,lZe,{[EG]:YW},[aK],[0]];Dq.registerError(o4e,Sqe);var s4e=[-3,O,gZe,{[EG]:YW},[aK],[0]];Dq.registerError(s4e,Dqe);var c4e=[-3,O,_Ze,{[EG]:YW},[aK],[0]];Dq.registerError(c4e,vqe);var l4e=[-3,O,zZe,{[EG]:YW},[aK],[0]];Dq.registerError(l4e,hqe);var u4e=[-3,O,BZe,{[EG]:YW},[aK],[0]];Dq.registerError(u4e,_qe);var d4e=[-3,O,UZe,{[EG]:YW},[aK],[0]];Dq.registerError(d4e,Aqe);var f4e=[-3,O,tQe,{[EG]:YW},[aK],[0]];Dq.registerError(f4e,cqe);var p4e=[-3,O,nQe,{[EG]:YW},[aK],[0]];Dq.registerError(p4e,lqe);var m4e=[Eq,Dq],h4e=[3,O,Nqe,0,[GW,SK,lq,MK],[0,0,0,0]],g4e=[3,O,Mqe,0,[JG,rq,nq,_G],[0,0,0,()=>P6e]],Oq=[3,O,Rqe,0,[dK,yq,fq,b2e],[0,0,0,0],1],_4e=[3,O,Lqe,0,[p2e,V0e,xQe],[64,64,0],1],v4e=[3,O,Uqe,0,[qQe,VQe],[1,1]],y4e=[3,O,dJe,0,[JQe,F2e,MQe],[0,1,1],1],kq=[3,O,Hqe,0,[XW,nG,mG,nq,f0e,VK,EK,CQe,d2e,pq,tq,sG,yG,HW,wQe,qK],[0,0,()=>Aq,0,1,1,1,1,()=>a8e,()=>dJ,()=>Yq,64,()=>Jq,()=>Kq,0,()=>b4e]],Aq=[3,O,Xqe,0,[A$e,U1e],[()=>s3e,()=>P3e]],b4e=[3,O,mJe,0,[hK],[0]],x4e=[3,O,hJe,0,[hK],[0],1],S4e=[3,O,pJe,0,[dK,yq],[0,0]],C4e=[3,O,xJe,0,[RQe,iq,dK,ZG,f1e,h0e,rK,k$e,jK,K1e,J1e,qG,L1e,gG,uK,cK,Z$e,q1e],[0,0,0,0,0,0,0,1,0,()=>J6e,()=>Y6e,0,()=>G6e,0,0,0,64,64]],w4e=[3,O,Qqe,0,[dK,ZG,d0e,gG,uK,cK,w1e,$1e,R$e,_0e,P$e,hG,NG,kG,V1e,M2e,k1e,s2e,p$e,e2e,t2e,j2e,WG,O2e,I2e,u$e,Z1e,v0e,_$e,v$e,j$e,y$e,b1e,r0e,l$e,k2e,nK,Q$e,I0e,BK,V$e,YQe],[0,0,[()=>G3e,0],1,1,1,64,()=>X6e,2,()=>O4e,64,64,[()=>eJ,0],()=>$q,()=>q6e,()=>d8e,()=>x3e,()=>cJ,()=>I6e,1,1,0,0,0,0,2,2,2,64,64,()=>H6e,64,2,2,128,()=>u8e,()=>Lq,()=>p3e,()=>o8e,()=>oJ,()=>u3e,64]],T4e=[3,O,$qe,0,[rG,n$e],[0,0],2],jq=[3,O,aJe,0,[$W,N$e,iG,wq,P2e,y0e,b0e,nq,ZK,fQe,VK,EK,TQe,JW,NK,HW,pq,qG],[0,0,0,1,()=>k6e,()=>sJ,()=>sJ,0,0,2,1,1,0,()=>qq,4,()=>Kq,()=>dJ,()=>E4e]],E4e=[3,O,iJe,0,[Y1e,_G],[0,()=>W6e]],D4e=[3,O,cJe,0,[dK,hG,NG,kG,gG,uK,cK,BK],[0,64,[()=>eJ,0],()=>$q,1,1,1,()=>oJ]],O4e=[3,O,fJe,0,[PG,p1e,s0e],[2,65,1],1],k4e=[3,O,Kqe,0,[nG,pq,tq,mG,sG,yG,qK],[0,()=>dJ,()=>Yq,()=>Aq,64,()=>Jq,()=>x4e]],A4e=[3,O,qqe,0,[fG],[()=>kq]],j4e=[3,O,gJe,0,[XK,fG,aq,KW,tK,QK,bG,dG,iK,oG,OK,k0e,vG,yK,TK,fK,GG,$K,xG,pq,OG,DK,DG,KK,bq,Sq,G1e],[0,0,0,0,()=>rJ,()=>lJ,1,0,0,()=>Jq,0,0,()=>Mq,()=>iJ,()=>aJ,()=>Rq,1,0,()=>Nq,()=>dJ,2,0,2,()=>Hq,()=>uJ,()=>hJ,()=>I3e],1],M4e=[3,O,_Je,0,[c2e],[()=>Vq]],N4e=[3,O,NJe,0,[fG],[0],1],P4e=[3,O,PJe,0,[fG],[()=>kq]],F4e=[3,O,CJe,0,[JG,nq,aq,bG,vK,FK,G$e,ZW,vq,oG,iK,OK,xK,fK,x0e,S0e,KK,L0e,bq,zG,Sq],[0,0,0,1,1,1,1,4,4,()=>Jq,0,0,0,()=>Rq,0,0,()=>Hq,()=>t8e,()=>uJ,()=>Pq,()=>hJ]],I4e=[3,O,wJe,0,[_Qe,HK,FG],[64,2,2],3],L4e=[3,O,EJe,0,[FG,HK,g0e,g2e],[2,2,2,()=>C6e],2],Mq=[3,O,TJe,0,[c$e,H1e,z1e,AQe,f2e,PQe,O1e,E1e,UQe,I$e],[()=>L4e,1,1,()=>I4e,0,1,()=>z6e,()=>b3e,()=>v4e,()=>R4e]],Nq=[3,O,LJe,0,[rq],[0],1],R4e=[3,O,VJe,0,[FG,n1e,Z0e],[2,1,0],1],Pq=[3,O,BJe,0,[eK],[0]],z4e=[3,O,UJe,0,[fq,a1e,MK,M1e,$$e,_2e],[0,0,0,64,15,()=>B4e]],B4e=[3,O,GJe,0,[x2e,OQe],[1,0]],V4e=[3,O,DJe,0,[eG,fG,Y$e],[0,0,2],1],H4e=[3,O,OJe,0,[eG],[()=>jq]],U4e=[3,O,QJe,0,[aq],[0],1],W4e=[3,O,$Je,0,[aq],[[()=>Wq,0]]],G4e=[3,O,FJe,0,[pG,QG],[64,64]],K4e=[3,O,IJe,0,[pG,HG],[()=>F6e,()=>tJ]],q4e=[3,O,kJe,0,[tG,fG,QG],[64,0,64],1],J4e=[3,O,AJe,0,[tG,HG],[()=>Zq,()=>tJ]],Y4e=[3,O,JJe,0,[eq,fG,QG],[64,0,64],1],X4e=[3,O,YJe,0,[eq,HG],[()=>i8e,()=>tJ]],Z4e=[3,O,eYe,0,[aq,QG],[0,64],1],Q4e=[3,O,tYe,0,[aq,pq],[[()=>Wq,0],()=>dJ]],$4e=[3,O,iYe,0,[mq,fG,QG],[64,0,64],1],e3e=[3,O,aYe,0,[mq,HG],[[()=>pJ,0],()=>tJ]],t3e=[3,O,sYe,0,[i1e,cG,a0e],[0,0,64],1],n3e=[3,O,oYe,0,[a2e,jQe,D$e,h$e,F1e],[0,2,0,128,128]],r3e=[3,O,lYe,0,[w0e,pq,DK],[0,()=>dJ,0],1],i3e=[3,O,mYe,0,[SQe,y1e],[0,0]],a3e=[3,O,hYe,0,[BG,IK,y2e,sq,WW],[0,0,0,1,()=>i3e],1],o3e=[3,O,pYe,0,[yq,rq],[0,0],2],Fq=[3,O,_Ye,0,[JK],[1],1],s3e=[3,O,dYe,0,[eK,I1e,nK],[0,0,()=>c3e]],c3e=[3,O,fYe,0,[$Qe,QQe,P0e,B0e,H0e],[0,2,0,2,0]],l3e=[3,O,yYe,0,[qW,jK,T$e],[0,0,0]],u3e=[3,O,bYe,0,[rq,gK],[0,128],1],d3e=[3,O,xYe,0,[uG,E$e],[0,0],2],f3e=[3,O,SYe,0,[BG,IK,WW],[0,0,()=>d3e],3],p3e=[3,O,wYe,0,[hG,x1e,_q,O0e,K0e],[64,1,1,1,1],1],m3e=[3,O,TYe,0,[WG,c1e],[0,0],2],h3e=[3,O,DYe,0,[q0e],[0]],g3e=[3,O,OYe,0,[SG,TG],[0,0],2],_3e=[3,O,kYe,0,[SG,TG],[0,0]],v3e=[3,O,MYe,0,[rq,nq,ZK,N1e,j1e],[0,0,0,4,4]],y3e=[3,O,FYe,0,[kQe,O$e],[64,64]],Iq=[3,O,IYe,0,[dK,yq],[0,0]],b3e=[3,O,zYe,0,[J0e,F0e],[1,1]],x3e=[3,O,JYe,0,[e$e,C$e,m1e,W0e,D2e,W1e,m2e],[()=>y3e,()=>V6e,2,1,()=>l8e,1,1]],S3e=[3,O,UYe,0,[mK,lK],[0,1]],C3e=[3,O,WYe,0,[IQe,mK],[64,0]],w3e=[3,O,VYe,0,[fG,q$e,mK,lK,nq],[0,0,0,1,0]],T3e=[3,O,HYe,0,[GQe,mK],[64,0]],E3e=[3,O,XYe,0,[fG,mK,lK,iK,$K,LK],[0,0,1,0,0,0]],D3e=[3,O,ZYe,0,[j0e,mK],[64,0]],O3e=[3,O,eXe,0,[U$e,nq,u2e,mK,lK],[0,0,0,0,1]],k3e=[3,O,tXe,0,[v2e,mK],[64,0]],A3e=[3,O,nXe,0,[fG,eG,RG,mK,lK,GK,XK,wG,iK,d$e],[0,0,0,0,1,0,0,0,0,0]],j3e=[3,O,rXe,0,[h2e,mK],[64,0]],M3e=[3,O,LYe,0,[cq,T1e,rG,lG,UW],[0,0,0,1,()=>h4e]],Lq=[3,O,KYe,0,[D1e,gK,G0e],[0,128,()=>cJ],1],N3e=[3,O,iXe,0,[A1e,dK,jK,rK],[4,0,0,0]],P3e=[3,O,dXe,0,[eK,H$e],[0,0]],F3e=[3,O,sXe,0,[sK,C0e],[64,1],2],I3e=[3,O,cXe,0,[R1e],[()=>K6e]],L3e=[3,O,lXe,0,[n2e,cG,RK],[0,0,2]],R3e=[3,O,pXe,0,[NQe,lG,KG,AK,aG,r1e],[0,1,1,0,0,0]],Rq=[3,O,hXe,0,[pQe],[()=>_4e]],z3e=[3,O,gXe,0,[hQe,Q1e,u1e],[0,0,0]],B3e=[3,O,bXe,0,[rq,LG],[0,0]],V3e=[3,O,EXe,0,[rq,J$e],[0,0]],H3e=[3,O,wXe,0,[lG,KG,AK,dK,vQe,aG],[1,1,0,0,0,0]],zq=[3,O,CXe,0,[rG,rq,o0e],[0,0,()=>Z6e],1],U3e=[3,O,BXe,0,[RG,QW,uq,jG,pK,Tq,yK,PK,gG,uK,pq,CK,XG,bK,YG,MG,zK,AG],[0,[()=>Xq,0],0,0,0,()=>mJ,()=>fJ,64,0,0,()=>dJ,0,0,()=>zq,()=>nJ,()=>Fq,()=>Bq,2],2],W3e=[3,O,VXe,0,[aq,pq],[[()=>Wq,0],()=>dJ]],G3e=[3,O,MXe,8,[uG],[0],1],K3e=[3,O,AXe,0,[dK,rq,b$e,P1e,v1e,Q0e],[0,0,1,1,1,64]],q3e=[3,O,IXe,0,[yq,rq],[0,0],2],J3e=[3,O,HXe,0,[aq,oG,fG,a$e,OG,DG,UG,iK,fK,_K,yK,TK,OK,DK,m0e,GK,pq,dG,bq],[0,()=>Jq,0,1,2,2,0,0,()=>Rq,[()=>Gq,0],()=>iJ,()=>aJ,0,0,0,0,()=>dJ,[0,4],()=>c8e],1],Y3e=[3,O,UXe,0,[mq,HG],[[()=>pJ,0],()=>tJ]],Bq=[3,O,FXe,0,[BQe,X1e],[0,0]],X3e=[3,O,pZe,0,[W$e,IK,sq,yQe],[0,0,1,0],1],Z3e=[3,O,GXe,0,[yq,A2e],[1,0]],Q3e=[3,O,TZe,0,[dK,N2e],[0,0],2],Vq=[3,O,EZe,0,[WK,XK,XW,tK,QK,nq,bG,FK,vK,iK,oG,OK,xK,aq,vG,w2e,w$e,MK,z$e,ZW,XQe,ZQe,yK,TK,fK,GG,$K,xG,pq,HQe,OG,DK,DG,KW,LK],[0,0,0,()=>rJ,()=>lJ,0,1,1,1,0,()=>Jq,0,0,0,()=>Mq,()=>s8e,()=>B6e,0,()=>r8e,4,0,()=>n8e,()=>iJ,()=>aJ,()=>Rq,1,0,()=>Nq,()=>dJ,0,2,0,2,0,0]],$3e=[3,O,qXe,0,[X$e,g1e],[0,0],1],e6e=[3,O,YXe,0,[kK,f$e,T2e],[1,0,()=>a6e],1],Hq=[3,O,JXe,0,[PG,hK,eq,nK,gQe],[2,0,()=>e8e,()=>Lq,()=>$3e],1],t6e=[3,O,$Xe,0,[wK,CG,LQe,h1e,_q,E2e],[0,0,()=>$6e,1,()=>w6e,()=>s6e],1],n6e=[3,O,tZe,0,[CG,s$e],[0,0]],r6e=[3,O,aZe,0,[B$e],[0],1],i6e=[3,O,oZe,0,[dK,yq],[0,()=>r6e],1],a6e=[3,O,sZe,0,[o1e],[()=>i6e],1],o6e=[3,O,iZe,0,[bQe],[0]],s6e=[3,O,rZe,0,[d1e,C1e,MK],[()=>o6e,0,0],1],c6e=[3,O,ZXe,0,[qW,T0e,E0e,i0e],[0,1,1,1]],l6e=[3,O,dZe,0,[JG,ZW,aK],[0,4,0]],u6e=[3,O,hZe,0,[MK,IG,eK,Cq,JK,YK,xq,$G,gq,dq,VG],[0,2,0,0,1,0,1,1,1,()=>Qq,0],1],d6e=[3,O,vZe,0,[c0e,kK,rG,lG],[0,1,0,1]],f6e=[3,O,CZe,0,[dK,oK],[0,()=>u6e],1],p6e=[3,O,bZe,0,[hq,fG,jK],[0,0,0],1],m6e=[3,O,xZe,0,[hq],[[()=>Uq,0]]],h6e=[3,O,KXe,0,[hK,yq],[0,0]],g6e=[3,O,kZe,0,[S1e,yq],[0,0]],Uq=[3,O,qZe,0,[HW,JW,DQe,iG,XW,r$e,zQe,$W,i$e,gG,ZW,wG,DG,F$e,UG,qG,YG,rK,iK,uK,_K,OK,xK,t0e,n0e,A0e,GK,z0e,M0e,Y0e,N0e,pq,iq,oq,wq,MG,zG],[()=>Kq,()=>qq,0,0,0,0,4,0,()=>R6e,0,4,0,2,4,0,0,()=>nJ,0,0,0,[()=>Gq,0],0,0,4,4,4,0,0,4,0,4,()=>dJ,0,0,1,()=>Fq,()=>v6e]],Wq=[3,O,MZe,0,[oq,QW,RG,uq,jG,pK,D0e,Tq,nq,l0e,yK,t$e,zK,PK,gG,uK,YG,CK,XG,bK,NK,o$e,g$e,u0e,MG,AG],[0,[()=>Xq,0],0,0,0,0,1,()=>mJ,0,()=>Q6e,()=>fJ,64,()=>Bq,64,0,0,()=>nJ,0,0,()=>zq,4,4,4,0,()=>Fq,2]],_6e=[3,O,NZe,0,[rq,LG],[0,0]],v6e=[3,O,FZe,0,[JK,eK],[1,0]],y6e=[3,O,LZe,0,[MK,IG,eK,Cq,JK,YK,xq,$G,gq,dq,S2e,VG],[0,2,0,0,1,0,1,1,1,()=>Qq,()=>b6e,0],1],b6e=[3,O,RZe,0,[m$e],[2],1],Gq=[3,O,VZe,0,[KQe,gG,l1e,jG,uK,uq,MG],[[()=>L6e,0],0,()=>U6e,0,0,0,()=>Fq]],x6e=[3,O,HZe,0,[JG,C2e,WK,XW,GK,M$e,nq,aq,WQe,vK,FK,ZW,vq,iK,oG,OK,xK,fK,tK,QK,i2e,$0e,X0e,pq,zG],[0,0,0,0,0,0,0,0,1,1,1,4,4,0,()=>Jq,0,0,()=>Rq,()=>rJ,()=>lJ,()=>Z3e,0,4,()=>dJ,()=>Pq]],S6e=[3,O,GZe,0,[dK,oK],[0,()=>y6e],1],C6e=[3,O,AZe,0,[rq,yq],[0,1],2],w6e=[3,O,jZe,0,[_1e,e0e],[1,1]],T6e=[3,O,XZe,0,[cG,l2e,B1e],[0,1,64],2],E6e=[3,O,ZZe,0,[dK,U0e,t1e],[0,1,1],3],D6e=[3,O,$Ze,0,[tG,nq,fG],[64,0,0],2],O6e=[3,O,eQe,0,[tG,HG],[()=>Zq,()=>tJ]],k6e=[3,O,sQe,0,[EQe,mQe,S$e],[0,0,0]],A6e=[3,O,iQe,0,[dK,s1e,x$e,L$e,r2e,K$e,FQe],[0,()=>h3e,()=>n3e,()=>a3e,()=>X3e,()=>f3e,2]],j6e=[3,O,aQe,0,[R0e,RK],[0,2]],M6e=[3,O,lQe,0,[GW,SK,lq],[0,0,0]],N6e=[3,O,uQe,0,[MK,cq,wK,UW],[0,0,0,()=>M6e],3],P6e=[1,O,Pqe,0,()=>Iq],Kq=[1,O,zqe,0,()=>g4e],qq=[1,O,Bqe,0,()=>Oq],Jq=[1,O,uJe,0,()=>y4e],F6e=[1,O,bJe,0,()=>kq],Yq=[1,O,vJe,0,()=>S4e],Xq=[1,O,eJe,0,[()=>w4e,0]],I6e=[1,O,tJe,0,()=>T4e],Zq=[1,O,oJe,0,()=>jq],L6e=[1,O,lJe,0,[()=>D4e,0]],R6e=[1,O,SJe,0,()=>C4e],z6e=[1,O,WJe,0,()=>z4e],B6e=[1,O,cYe,0,()=>F4e],V6e=[1,O,HJe,0,()=>t3e],Qq=[1,O,uYe,0,()=>r3e],$q=[1,O,gYe,0,()=>o3e],eJ=[1,O,vYe,8,()=>Iq],tJ=[1,O,CYe,0,()=>l3e],H6e=[1,O,EYe,0,()=>m3e],U6e=[1,O,AYe,0,()=>_3e],nJ=[1,O,jYe,0,()=>g3e],W6e=[1,O,NYe,0,()=>v3e],rJ=[1,O,RYe,0,()=>M3e],G6e=[1,O,aXe,0,()=>N3e],K6e=[1,O,oXe,0,()=>F3e],q6e=[1,O,uXe,0,()=>L3e],J6e=[1,O,mXe,0,()=>R3e],Y6e=[1,O,_Xe,0,()=>z3e],iJ=[1,O,SXe,0,()=>B3e],aJ=[1,O,DXe,0,()=>V3e],X6e=[1,O,TXe,0,()=>H3e],Z6e=[1,O,xXe,0,()=>Iq],Q6e=[1,O,jXe,0,()=>Oq],oJ=[1,O,LXe,0,()=>q3e],sJ=[1,O,WXe,0,()=>K3e],cJ=[1,O,mZe,0,()=>Q3e],$6e=[1,O,XXe,0,()=>e6e],e8e=[1,O,eZe,0,()=>t6e],t8e=[1,O,nZe,0,()=>n6e],n8e=[1,O,QXe,0,()=>c6e],r8e=[1,O,fZe,0,()=>l6e],lJ=[1,O,yZe,0,()=>d6e],i8e=[1,O,DZe,0,()=>Vq],uJ=[1,O,wZe,0,()=>f6e],a8e=[1,O,OZe,0,()=>Iq],o8e=[1,O,cZe,0,()=>h6e],dJ=[1,O,JZe,0,()=>g6e],fJ=[1,O,PZe,0,()=>_6e],pJ=[1,O,YZe,0,[()=>Uq,0]],s8e=[1,O,WZe,0,()=>x6e],c8e=[1,O,KZe,0,()=>S6e],l8e=[1,O,IZe,0,()=>T6e],u8e=[1,O,rQe,0,()=>E6e],d8e=[1,O,oQe,0,()=>j6e],mJ=[1,O,cQe,0,()=>A6e],hJ=[1,O,dQe,0,()=>N6e],f8e=[9,O,Zqe,0,()=>k4e,()=>A4e],p8e=[9,O,yJe,0,()=>j4e,()=>M4e],m8e=[9,O,RJe,2,()=>N4e,()=>P4e],h8e=[9,O,jJe,0,()=>V4e,()=>H4e],g8e=[9,O,nYe,0,()=>U4e,()=>W4e],_8e=[9,O,zJe,0,()=>G4e,()=>K4e],v8e=[9,O,MJe,0,()=>q4e,()=>J4e],y8e=[9,O,XJe,0,()=>Y4e,()=>X4e],b8e=[9,O,rYe,0,()=>Z4e,()=>Q4e],x8e=[9,O,ZJe,0,()=>$4e,()=>e3e],S8e=[9,O,GYe,0,()=>S3e,()=>C3e],C8e=[9,O,BYe,0,()=>w3e,()=>T3e],w8e=[9,O,YYe,0,()=>E3e,()=>D3e],T8e=[9,O,$Ye,0,()=>O3e,()=>k3e],E8e=[9,O,QYe,0,()=>A3e,()=>j3e],D8e=[9,O,zXe,0,()=>U3e,()=>W3e],O8e=[9,O,RXe,0,()=>J3e,()=>Y3e],k8e=[9,O,SZe,0,()=>p6e,()=>m6e],A8e=[9,O,QZe,0,()=>D6e,()=>O6e],j8e=e=>({apiVersion:`2014-11-13`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??tqe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??KKe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Qt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ecs`,errorTypeRegistries:m4e,xmlNamespace:`http://ecs.amazonaws.com/doc/2014-11-13/`,version:`2014-11-13`,serviceTarget:`AmazonEC2ContainerServiceV20141113`},serviceId:e?.serviceId??`ECS`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),M8e=e=>{let t=te(e),n=()=>t().then(Ae),r=j8e(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:XKe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},N8e=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},P8e=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),F8e=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),N8e(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),P8e(n))},I8e=class extends tt{config;constructor(...[t]){let n=M8e(t||{});super(n),this.initConfig=n;let r=JKe(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=F8e(qKe(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:WKe,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},L8e=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function R8e(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`eks`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var z8e=e=>{let t=[];return e.operation,t.push(R8e(e)),t},B8e=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},V8e=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`eks`}),H8e={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},U8e={name:`@aws-sdk/client-eks`,version:`3.1144.0`,description:`AWS SDK for JavaScript Eks Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-eks`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-eks`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},gJ=`ref`,_J=-1,vJ=!0,yJ=`isSet`,bJ=`PartitionResult`,xJ=`booleanEquals`,SJ=`getAttr`,CJ=`stringEquals`,wJ={[gJ]:`Endpoint`},TJ={[gJ]:bJ},EJ={fn:SJ,argv:[TJ,`name`]},DJ={},OJ=[{[gJ]:`Region`}],kJ={conditions:[[yJ,[wJ]],[yJ,OJ],[`aws.partition`,OJ,bJ],[xJ,[{[gJ]:`UseFIPS`},vJ]],[xJ,[{[gJ]:`UseDualStack`},vJ]],[xJ,[{fn:SJ,argv:[TJ,`supportsDualStack`]},vJ]],[xJ,[{fn:SJ,argv:[TJ,`supportsFIPS`]},vJ]],[CJ,[EJ,`aws`]],[CJ,[EJ,`aws-us-gov`]]],results:[[_J],[_J,`Invalid Configuration: FIPS and custom endpoint are not supported`],[_J,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[wJ,DJ],[`https://eks-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,DJ],[_J,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://fips.eks.{Region}.amazonaws.com`,DJ],[`https://eks.{Region}.amazonaws.com`,DJ],[`https://eks-fips.{Region}.{PartitionResult#dnsSuffix}`,DJ],[_J,`FIPS is enabled but this partition does not support FIPS`],[`https://eks.{Region}.{PartitionResult#dualStackDnsSuffix}`,DJ],[_J,`DualStack is enabled but this partition does not support DualStack`],[`https://eks.{Region}.{PartitionResult#dnsSuffix}`,DJ],[_J,`Invalid Configuration: Missing Region`]]},W8e=2,G8e=new Int32Array([-1,1,-1,0,14,3,1,4,100000013,2,5,100000013,3,8,6,4,7,100000012,5,100000010,100000011,4,12,9,6,10,100000009,7,100000006,11,8,100000007,100000008,5,13,100000005,6,100000004,100000005,3,100000001,15,4,100000002,100000003]),K8e=s.from(G8e,W8e,kJ.conditions,kJ.results),q8e=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),J8e=(e,t={})=>q8e.get(e,()=>ze(K8e,{endpointParams:e,logger:t.logger}));lt.aws=de;var AJ=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Y8e=class e extends AJ{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},X8e=class e extends AJ{name=`InvalidParameterException`;$fault=`client`;clusterName;nodegroupName;fargateProfileName;addonName;subscriptionId;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.fargateProfileName=t.fargateProfileName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},Z8e=class e extends AJ{name=`ResourceNotFoundException`;$fault=`client`;clusterName;nodegroupName;fargateProfileName;addonName;subscriptionId;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.fargateProfileName=t.fargateProfileName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},Q8e=class e extends AJ{name=`ServerException`;$fault=`server`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},$8e=class e extends AJ{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},e5e=class e extends AJ{name=`InvalidRequestException`;$fault=`client`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`InvalidRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},t5e=class e extends AJ{name=`ClientException`;$fault=`client`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`ClientException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},n5e=class e extends AJ{name=`ResourceInUseException`;$fault=`client`;clusterName;nodegroupName;addonName;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName}},r5e=class e extends AJ{name=`ThrottlingException`;$fault=`client`;clusterName;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName}},i5e=class e extends AJ{name=`InvalidStateException`;$fault=`client`;clusterName;constructor(t){super({name:`InvalidStateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName}},a5e=class e extends AJ{name=`ResourceLimitExceededException`;$fault=`client`;clusterName;nodegroupName;subscriptionId;constructor(t){super({name:`ResourceLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.subscriptionId=t.subscriptionId}},o5e=class e extends AJ{name=`UnsupportedAvailabilityZoneException`;$fault=`client`;clusterName;nodegroupName;validZones;constructor(t){super({name:`UnsupportedAvailabilityZoneException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.validZones=t.validZones}},s5e=class e extends AJ{name=`BadRequestException`;$fault=`client`;constructor(t){super({name:`BadRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},c5e=class e extends AJ{name=`NotFoundException`;$fault=`client`;constructor(t){super({name:`NotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},l5e=class e extends AJ{name=`ResourcePropagationDelayException`;$fault=`client`;constructor(t){super({name:`ResourcePropagationDelayException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},u5e=`Addon`,d5e=`AssociatedAccessPolicy`,f5e=`AssociatedAccessPoliciesList`,p5e=`AssociateAccessPolicyRequest`,m5e=`AssociateAccessPolicyResponse`,h5e=`AssociateAccessPolicy`,g5e=`ActiveCertificateAuthority`,_5e=`AccessConfigResponse`,v5e=`AccessDeniedException`,y5e=`AccessEntry`,b5e=`AddonHealth`,x5e=`AddonInfo`,S5e=`AddonIssueList`,C5e=`AddonIssue`,w5e=`AddonNamespaceConfigRequest`,T5e=`AddonNamespaceConfigResponse`,E5e=`AccessPolicy`,D5e=`AddonPodIdentityAssociations`,O5e=`AddonPodIdentityAssociationsList`,k5e=`AccessPoliciesList`,A5e=`AccessScope`,j5e=`AutoScalingGroup`,M5e=`AutoScalingGroupList`,N5e=`AddonVersionInfo`,P5e=`AddonVersionInfoList`,F5e=`Addons`,I5e=`BadRequestException`,L5e=`BlockStorage`,R5e=`Cancellation`,z5e=`CreateAccessConfigRequest`,B5e=`CreateAccessEntry`,V5e=`CreateAccessEntryRequest`,H5e=`CreateAccessEntryResponse`,U5e=`CreateAddonRequest`,W5e=`CreateAddonResponse`,G5e=`CreateAddon`,K5e=`ComputeConfigRequest`,q5e=`ComputeConfigResponse`,J5e=`ConnectorConfigResponse`,Y5e=`CreateClusterRequest`,X5e=`CreateClusterResponse`,Z5e=`CreateCluster`,Q5e=`ClientException`,$5e=`ClusterHealth`,e7e=`ClusterIssueList`,t7e=`ClusterIssue`,n7e=`CreateNodegroup`,r7e=`CreateNodegroupRequest`,i7e=`CreateNodegroupResponse`,a7e=`ControlPlanePlacementRequest`,o7e=`ControlPlanePlacementResponse`,s7e=`ControlPlaneScalingConfig`,c7e=`Certificate`,l7e=`Cluster`,u7e=`Compatibility`,d7e=`Compatibilities`,f7e=`DeleteAddon`,p7e=`DeleteAccessEntry`,m7e=`DeleteAccessEntryRequest`,h7e=`DeleteAccessEntryResponse`,g7e=`DescribeAccessEntryRequest`,_7e=`DescribeAccessEntryResponse`,v7e=`DescribeAccessEntry`,y7e=`DisassociateAccessPolicy`,b7e=`DisassociateAccessPolicyRequest`,x7e=`DisassociateAccessPolicyResponse`,S7e=`DeleteAddonRequest`,C7e=`DeleteAddonResponse`,w7e=`DescribeAddonRequest`,T7e=`DescribeAddonResponse`,E7e=`DescribeAddonVersions`,D7e=`DescribeAddonVersionsRequest`,O7e=`DescribeAddonVersionsResponse`,k7e=`DescribeAddon`,A7e=`DeleteClusterRequest`,j7e=`DeleteClusterResponse`,M7e=`DescribeClusterRequest`,N7e=`DescribeClusterResponse`,P7e=`DeleteCluster`,F7e=`DescribeCluster`,I7e=`DeleteNodegroup`,L7e=`DeleteNodegroupRequest`,R7e=`DeleteNodegroupResponse`,z7e=`DescribeNodegroupRequest`,B7e=`DescribeNodegroupResponse`,V7e=`DescribeNodegroup`,H7e=`EncryptionConfig`,U7e=`EncryptionConfigList`,W7e=`ErrorDetail`,G7e=`ErrorDetails`,K7e=`ElasticLoadBalancing`,q7e=`EtcdPlacementRequest`,J7e=`EtcdPlacementResponse`,Y7e=`HorizontalPodAutoscalerControllerConfigRequest`,X7e=`HorizontalPodAutoscalerControllerConfigResponse`,Z7e=`Identity`,Q7e=`IssueList`,$7e=`InvalidParameterException`,e9e=`InvalidRequestException`,t9e=`InvalidStateException`,n9e=`Issue`,r9e=`KubeApiServerConfigRequest`,i9e=`KubeApiServerConfigResponse`,a9e=`KubeControllerManagerConfigRequest`,o9e=`KubeControllerManagerConfigResponse`,s9e=`KubernetesNetworkConfigRequest`,c9e=`KubernetesNetworkConfigResponse`,l9e=`KubeSchedulerConfigRequest`,u9e=`KubeSchedulerConfigResponse`,d9e=`ListAddons`,f9e=`ListAssociatedAccessPolicies`,p9e=`ListAssociatedAccessPoliciesRequest`,m9e=`ListAssociatedAccessPoliciesResponse`,h9e=`ListAccessEntries`,g9e=`ListAccessEntriesRequest`,_9e=`ListAccessEntriesResponse`,v9e=`ListAccessPolicies`,y9e=`ListAccessPoliciesRequest`,b9e=`ListAccessPoliciesResponse`,x9e=`ListAddonsRequest`,S9e=`ListAddonsResponse`,C9e=`ListClustersRequest`,w9e=`ListClustersResponse`,T9e=`ListClusters`,E9e=`ListNodegroups`,D9e=`ListNodegroupsRequest`,O9e=`ListNodegroupsResponse`,k9e=`LogSetup`,A9e=`LogSetups`,j9e=`LaunchTemplateSpecification`,M9e=`Logging`,N9e=`MarketplaceInformation`,P9e=`Nodegroup`,F9e=`NotFoundException`,I9e=`NodegroupHealth`,L9e=`NodegroupResources`,R9e=`NodeRepairConfig`,z9e=`NodeRepairConfigOverrides`,B9e=`NodeRepairConfigOverridesList`,V9e=`NodeResourcesFitConfig`,H9e=`NodegroupScalingConfig`,U9e=`NodegroupUpdateConfig`,W9e=`OutpostConfigRequest`,G9e=`OutpostConfigResponse`,K9e=`OIDC`,q9e=`Provider`,J9e=`PodGcControllerConfigRequest`,Y9e=`PodGcControllerConfigResponse`,X9e=`RemoteAccessConfig`,Z9e=`ResourceInUseException`,Q9e=`ResourceLimitExceededException`,$9e=`RemoteNetworkConfigRequest`,eet=`RemoteNetworkConfigResponse`,tet=`ResourceNotFoundException`,net=`RemoteNodeNetwork`,ret=`RemoteNodeNetworkList`,iet=`ResourcePropagationDelayException`,aet=`RemotePodNetwork`,oet=`RemotePodNetworkList`,set=`ResourceWeight`,cet=`ResourceWeightList`,uet=`StorageConfigRequest`,det=`StorageConfigResponse`,fet=`ServerException`,pet=`ServiceNodePortRange`,met=`ScoringStrategy`,het=`ServiceUnavailableException`,get=`Taint`,_et=`ThrottlingException`,vet=`Update`,yet=`UpdateAddon`,bet=`UpdateAddonRequest`,xet=`UpdateAddonResponse`,Cet=`UnsupportedAvailabilityZoneException`,wet=`UpdateLabelsPayload`,Tet=`UpdateNodegroupConfig`,Eet=`UpdateNodegroupConfigRequest`,Det=`UpdateNodegroupConfigResponse`,Oet=`UpdateParam`,ket=`UpgradePolicyRequest`,Aet=`UpgradePolicyResponse`,jet=`UpdateParams`,Met=`UpdateTaintsPayload`,Net=`VpcConfigRequest`,Pet=`VpcConfigResponse`,Fet=`WarmPoolConfig`,Iet=`ZonalShiftConfigRequest`,Let=`ZonalShiftConfigResponse`,jJ=`arn`,Ret=`addonArn`,zet=`associatedAccessPolicy`,Bet=`associatedAccessPolicies`,Vet=`associatedAt`,Het=`activatedBy`,MJ=`accessConfig`,Uet=`activationCode`,Wet=`activationExpiry`,Get=`accessEntryArn`,NJ=`accessEntry`,Ket=`accessEntries`,qet=`activationId`,PJ=`authenticationMode`,FJ=`addonName`,Jet=`addOrUpdateLabels`,Yet=`addOrUpdateTaints`,Xet=`accessPolicies`,IJ=`associatedPolicyArn`,LJ=`accessScope`,Zet=`autoScalingGroups`,RJ=`amiType`,zJ=`addonVersion`,Qet=`addonVersions`,$et=`active`,BJ=`addon`,VJ=`addons`,ett=`architecture`,HJ=`bootstrapClusterCreatorAdminPermissions`,UJ=`blockStorage`,ttt=`bootstrapSelfManagedAddons`,WJ=`client`,GJ=`createdAt`,ntt=`certificateAuthority`,rtt=`connectorConfig`,KJ=`computeConfig`,itt=`clusterLogging`,qJ=`clusterName`,JJ=`controlPlaneEgressMode`,YJ=`controlPlaneInstanceType`,XJ=`controlPlanePlacement`,ZJ=`controlPlaneScalingConfig`,QJ=`clientRequestToken`,att=`clusterSecurityGroupId`,ott=`computeTypes`,$J=`capacityType`,eY=`configurationValues`,stt=`clusterVersion`,ctt=`cancellation`,tY=`cidrs`,nY=`cluster`,ltt=`clusters`,rY=`code`,utt=`compatibilities`,dtt=`data`,ftt=`defaultNamespace`,iY=`deletionProtection`,ptt=`desiredSize`,aY=`diskSize`,mtt=`defaultVersion`,oY=`error`,sY=`encryptionConfig`,htt=`errorCode`,cY=`etcdInstanceType`,lY=`elasticLoadBalancing`,gtt=`errorMessage`,uY=`endpointPublicAccess`,dY=`endpointPrivateAccess`,fY=`etcdPlacement`,_tt=`ec2SshKey`,pY=`eventTtl`,vtt=`effect`,mY=`enabled`,ytt=`endpoint`,btt=`errors`,hY=`fargateProfileName`,gY=`groupName`,_Y=`health`,vY=`httpError`,yY=`horizontalPodAutoscalerControllerConfig`,bY=`horizontalPodAutoscalerSyncPeriod`,xY=`httpQuery`,SY=`http`,CY=`id`,wY=`ipFamily`,TY=`instanceTypes`,xtt=`identity`,EY=`include`,DY=`issues`,Stt=`issuer`,Ctt=`key`,wtt=`keyArn`,OY=`kubeApiServerConfig`,kY=`kubeControllerManagerConfig`,AY=`kubernetesGroups`,jY=`kubernetesNetworkConfig`,MY=`kubeSchedulerConfig`,NY=`kubernetesVersion`,PY=`logging`,FY=`launchTemplate`,IY=`labels`,LY=`message`,RY=`modifiedAt`,Ttt=`maxGroupPreparedCapacity`,zY=`marketplaceInformation`,Ett=`minPort`,Dtt=`maxParallelNodesRepairedCount`,Ott=`maxParallelNodesRepairedPercentage`,ktt=`maxPort`,BY=`maxResults`,Att=`minRepairWaitTimeMins`,VY=`minSize`,jtt=`maxSize`,Mtt=`maxUnavailable`,Ntt=`maxUnhealthyNodeThresholdCount`,Ptt=`maxUnhealthyNodeThresholdPercentage`,Ftt=`maxUnavailablePercentage`,HY=`name`,Itt=`nodegroupArn`,UY=`namespaceConfig`,Ltt=`nodeMonitoringCondition`,WY=`nodegroupName`,GY=`nodePools`,KY=`nodeRole`,qY=`nodeRoleArn`,JY=`nodeRepairConfig`,Rtt=`nodeRepairConfigOverrides`,YY=`nodeResourcesFit`,XY=`nextToken`,ztt=`nodeUnhealthyReason`,Btt=`namespaces`,ZY=`namespace`,QY=`nodegroup`,Vtt=`nodegroups`,$Y=`owner`,eX=`outpostArns`,tX=`outpostConfig`,Htt=`oidc`,nX=`owners`,rX=`publisher`,iX=`principalArn`,aX=`publicAccessCidrs`,oX=`policyArn`,sX=`podGcControllerConfig`,Utt=`productId`,cX=`podIdentityAssociations`,Wtt=`poolState`,Gtt=`productUrl`,Ktt=`platformVersion`,qtt=`platformVersions`,Jtt=`params`,lX=`provider`,uX=`preserve`,dX=`publishers`,fX=`roleArn`,Ytt=`remoteAccessSecurityGroup`,pX=`remoteAccess`,Xtt=`repairAction`,Ztt=`requiresConfiguration`,mX=`resolveConflicts`,hX=`resourceIds`,Qtt=`requiresIamPermissions`,$tt=`removeLabels`,gX=`remoteNetworkConfig`,_X=`remoteNodeNetworks`,ent=`reuseOnScaleIn`,vX=`remotePodNetworks`,tnt=`removeTaints`,yX=`releaseVersion`,bX=`resourcesVpcConfig`,nnt=`reason`,xX=`resources`,SX=`smithy.ts.sdk.synthetic.com.amazonaws.eks`,rnt=`serviceAccount`,CX=`serviceAccountRoleArn`,wX=`storageConfig`,TX=`scalingConfig`,EX=`securityGroupIds`,DX=`subscriptionId`,OX=`serviceIpv4Cidr`,int=`serviceIpv6Cidr`,kX=`subnetIds`,AX=`spreadLevel`,jX=`serviceNodePortRange`,ant=`sourceSecurityGroups`,ont=`scoringStrategy`,MX=`supportType`,NX=`server`,PX=`status`,FX=`subnets`,IX=`tags`,snt=`taintsList`,LX=`terminatedPodGcThreshold`,RX=`taints`,cnt=`tier`,zX=`type`,BX=`types`,VX=`username`,HX=`updateConfig`,UX=`upgradePolicy`,lnt=`updateStrategy`,WX=`update`,GX=`version`,unt=`vpcId`,dnt=`validZones`,KX=`value`,fnt=`weight`,qX=`warmPoolConfig`,JX=`zonalShiftConfig`,k=`com.amazonaws.eks`,YX=new mt(SX),pnt=[-3,SX,`EKSServiceException`,0,[],[]];YX.registerError(pnt,AJ);var XX=new mt(k),mnt=[-3,k,v5e,{[oY]:WJ,[vY]:403},[LY],[0]];XX.registerError(mnt,Y8e);var hnt=[-3,k,I5e,{[oY]:WJ,[vY]:400},[LY],[0]];XX.registerError(hnt,s5e);var gnt=[-3,k,Q5e,{[oY]:WJ,[vY]:400},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(gnt,t5e);var _nt=[-3,k,$7e,{[oY]:WJ,[vY]:400},[qJ,WY,hY,FJ,DX,LY],[0,0,0,0,0,0]];XX.registerError(_nt,X8e);var vnt=[-3,k,e9e,{[oY]:WJ,[vY]:400},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(vnt,e5e);var ynt=[-3,k,t9e,{[oY]:WJ,[vY]:400},[qJ,LY],[0,0]];XX.registerError(ynt,i5e);var bnt=[-3,k,F9e,{[oY]:WJ,[vY]:404},[LY],[0]];XX.registerError(bnt,c5e);var xnt=[-3,k,Z9e,{[oY]:WJ,[vY]:409},[qJ,WY,FJ,LY],[0,0,0,0]];XX.registerError(xnt,n5e);var Snt=[-3,k,Q9e,{[oY]:WJ,[vY]:400},[qJ,WY,DX,LY],[0,0,0,0]];XX.registerError(Snt,a5e);var Cnt=[-3,k,tet,{[oY]:WJ,[vY]:404},[qJ,WY,hY,FJ,DX,LY],[0,0,0,0,0,0]];XX.registerError(Cnt,Z8e);var wnt=[-3,k,iet,{[oY]:WJ,[vY]:428},[LY],[0]];XX.registerError(wnt,l5e);var Tnt=[-3,k,fet,{[oY]:NX,[vY]:500},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(Tnt,Q8e);var Ent=[-3,k,het,{[oY]:NX,[vY]:503},[LY],[0]];XX.registerError(Ent,$8e);var Dnt=[-3,k,_et,{[oY]:WJ,[vY]:429},[qJ,LY],[0,0]];XX.registerError(Dnt,r5e);var Ont=[-3,k,Cet,{[oY]:WJ,[vY]:400},[LY,qJ,WY,dnt],[0,0,0,64]];XX.registerError(Ont,o5e);var knt=[YX,XX],Ant=[3,k,_5e,0,[HJ,PJ],[2,0]],ZX=[3,k,y5e,0,[qJ,iX,AY,Get,GJ,RY,IX,VX,zX],[0,0,64,0,4,4,128,0,0]],jnt=[3,k,E5e,0,[HY,jJ],[0,0]],QX=[3,k,A5e,0,[zX,Btt],[0,64]],Mnt=[3,k,g5e,0,[CY,Het],[0,0]],$X=[3,k,u5e,0,[FJ,qJ,PX,zJ,_Y,Ret,GJ,RY,CX,IX,rX,$Y,zY,eY,cX,UY],[0,0,0,0,()=>Nnt,0,4,4,0,128,0,0,()=>sZ,0,64,()=>Lnt]],Nnt=[3,k,b5e,0,[DY],[()=>Fit]],Pnt=[3,k,x5e,0,[FJ,zX,Qet,rX,$Y,zY,ftt],[0,0,()=>Lit,0,0,()=>sZ,0]],Fnt=[3,k,C5e,0,[rY,LY,hX],[0,0,64]],Int=[3,k,w5e,0,[ZY],[0]],Lnt=[3,k,T5e,0,[ZY],[0]],Rnt=[3,k,D5e,0,[rnt,fX],[0,0],2],znt=[3,k,N5e,0,[zJ,ett,ott,utt,Ztt,Qtt],[0,64,64,()=>Vit,2,2]],Bnt=[3,k,p5e,0,[qJ,iX,oX,LJ],[[0,1],[0,1],0,()=>QX],4],Vnt=[3,k,m5e,0,[qJ,iX,zet],[0,0,()=>eZ]],eZ=[3,k,d5e,0,[oX,LJ,Vet,RY],[0,()=>QX,4,4]],Hnt=[3,k,j5e,0,[HY],[0]],tZ=[3,k,L5e,0,[mY],[2]],Unt=[3,k,R5e,0,[PX,nnt],[0,0]],Wnt=[3,k,c7e,0,[dtt,$et],[0,()=>Mnt]],nZ=[3,k,l7e,0,[HY,jJ,GJ,GX,ytt,fX,bX,jY,PY,xtt,PX,ntt,QJ,Ktt,IX,sY,rtt,CY,_Y,tX,MJ,UX,JX,gX,KJ,wX,iY,ZJ,OY,MY,kY],[0,0,4,0,0,0,()=>jit,()=>Vrt,()=>oZ,()=>Prt,0,()=>Wnt,0,0,128,()=>vZ,()=>Xnt,0,()=>Gnt,()=>cit,()=>Ant,()=>kit,()=>Nit,()=>pit,()=>Ynt,()=>yit,2,()=>rZ,()=>Lrt,()=>Urt,()=>zrt]],Gnt=[3,k,$5e,0,[DY],[()=>Bit]],Knt=[3,k,t7e,0,[rY,LY,hX],[0,0,64]],qnt=[3,k,u7e,0,[stt,qtt,mtt],[0,64,2]],Jnt=[3,k,K5e,0,[mY,GY,qY],[2,64,0]],Ynt=[3,k,q5e,0,[mY,GY,qY],[2,64,0]],Xnt=[3,k,J5e,0,[qet,Uet,Wet,lX,fX],[0,0,4,0,0]],Znt=[3,k,a7e,0,[gY,AX],[0,0]],Qnt=[3,k,o7e,0,[gY,AX],[0,0]],rZ=[3,k,s7e,0,[cnt],[0]],$nt=[3,k,z5e,0,[HJ,PJ],[2,0]],ert=[3,k,V5e,0,[qJ,iX,AY,IX,QJ,VX,zX],[[0,1],0,64,128,[0,4],0,0],2],trt=[3,k,H5e,0,[NJ],[()=>ZX]],nrt=[3,k,U5e,0,[qJ,FJ,zJ,CX,mX,QJ,IX,eY,cX,UY],[[0,1],0,0,0,0,[0,4],128,0,()=>_Z,()=>Int],2],rrt=[3,k,W5e,0,[BJ],[()=>$X]],irt=[3,k,Y5e,0,[HY,fX,bX,GX,jY,PY,QJ,IX,sY,tX,MJ,ttt,UX,JX,gX,KJ,wX,iY,ZJ,OY,MY,kY],[0,0,()=>Ait,0,()=>Brt,()=>oZ,[0,4],128,()=>vZ,()=>sit,()=>$nt,2,()=>Oit,()=>Mit,()=>fit,()=>Jnt,()=>vit,2,()=>rZ,()=>Irt,()=>Hrt,()=>Rrt],3],art=[3,k,X5e,0,[nY],[()=>nZ]],ort=[3,k,r7e,0,[qJ,WY,FX,KY,TX,aY,TY,RJ,pX,IY,RX,IX,QJ,FY,HX,JY,$J,GX,yX,qX],[[0,1],0,64,0,()=>lZ,1,64,0,()=>pZ,128,()=>xZ,128,[0,4],()=>aZ,()=>uZ,()=>dZ,0,0,0,()=>gZ],4],srt=[3,k,i7e,0,[QY],[()=>cZ]],crt=[3,k,m7e,0,[qJ,iX],[[0,1],[0,1]],2],lrt=[3,k,h7e,0,[],[]],urt=[3,k,S7e,0,[qJ,FJ,uX],[[0,1],[0,1],[2,{[xY]:uX}]],2],drt=[3,k,C7e,0,[BJ],[()=>$X]],frt=[3,k,A7e,0,[HY],[[0,1]],1],prt=[3,k,j7e,0,[nY],[()=>nZ]],mrt=[3,k,L7e,0,[qJ,WY],[[0,1],[0,1]],2],hrt=[3,k,R7e,0,[QY],[()=>cZ]],grt=[3,k,g7e,0,[qJ,iX],[[0,1],[0,1]],2],_rt=[3,k,_7e,0,[NJ],[()=>ZX]],vrt=[3,k,w7e,0,[qJ,FJ],[[0,1],[0,1]],2],yrt=[3,k,T7e,0,[BJ],[()=>$X]],brt=[3,k,D7e,0,[NY,BY,XY,FJ,BX,dX,nX],[[0,{[xY]:NY}],[1,{[xY]:BY}],[0,{[xY]:XY}],[0,{[xY]:FJ}],[64,{[xY]:BX}],[64,{[xY]:dX}],[64,{[xY]:nX}]]],xrt=[3,k,O7e,0,[VJ,XY],[()=>Iit,0]],Srt=[3,k,M7e,0,[HY],[[0,1]],1],Crt=[3,k,N7e,0,[nY],[()=>nZ]],wrt=[3,k,z7e,0,[qJ,WY],[[0,1],[0,1]],2],Trt=[3,k,B7e,0,[QY],[()=>cZ]],Ert=[3,k,b7e,0,[qJ,iX,oX],[[0,1],[0,1],[0,1]],3],Drt=[3,k,x7e,0,[],[]],iZ=[3,k,K7e,0,[mY],[2]],Ort=[3,k,H7e,0,[xX,lX],[64,()=>dit]],krt=[3,k,W7e,0,[htt,gtt,hX],[0,0,64]],Art=[3,k,q7e,0,[AX],[0]],jrt=[3,k,J7e,0,[AX],[0]],Mrt=[3,k,Y7e,0,[bY],[0]],Nrt=[3,k,X7e,0,[bY],[0]],Prt=[3,k,Z7e,0,[Htt],[()=>oit]],Frt=[3,k,n9e,0,[rY,LY,hX],[0,0,64]],Irt=[3,k,r9e,0,[pY,jX],[0,()=>mZ]],Lrt=[3,k,i9e,0,[pY,jX],[0,()=>mZ]],Rrt=[3,k,a9e,0,[sX,yY],[()=>lit,()=>Mrt]],zrt=[3,k,o9e,0,[sX,yY],[()=>uit,()=>Nrt]],Brt=[3,k,s9e,0,[OX,wY,lY],[0,0,()=>iZ]],Vrt=[3,k,c9e,0,[OX,int,wY,lY],[0,0,0,()=>iZ]],Hrt=[3,k,l9e,0,[YY],[()=>fZ]],Urt=[3,k,u9e,0,[YY],[()=>fZ]],aZ=[3,k,j9e,0,[HY,GX,CY],[0,0,0]],Wrt=[3,k,g9e,0,[qJ,IJ,BY,XY],[[0,1],[0,{[xY]:IJ}],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],Grt=[3,k,_9e,0,[Ket,XY],[64,0]],Krt=[3,k,y9e,0,[BY,XY],[[1,{[xY]:BY}],[0,{[xY]:XY}]]],qrt=[3,k,b9e,0,[Xet,XY],[()=>Pit,0]],Jrt=[3,k,x9e,0,[qJ,BY,XY],[[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],Yrt=[3,k,S9e,0,[VJ,XY],[64,0]],Xrt=[3,k,p9e,0,[qJ,iX,BY,XY],[[0,1],[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],2],Zrt=[3,k,m9e,0,[qJ,iX,XY,Bet],[0,0,0,()=>Rit]],Qrt=[3,k,C9e,0,[BY,XY,EY],[[1,{[xY]:BY}],[0,{[xY]:XY}],[64,{[xY]:EY}]]],$rt=[3,k,w9e,0,[ltt,XY],[64,0]],eit=[3,k,D9e,0,[qJ,BY,XY],[[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],tit=[3,k,O9e,0,[Vtt,XY],[64,0]],oZ=[3,k,M9e,0,[itt],[()=>Wit]],nit=[3,k,k9e,0,[BX,mY],[64,2]],sZ=[3,k,N9e,0,[Utt,Gtt],[0,0]],cZ=[3,k,P9e,0,[WY,Itt,qJ,GX,yX,GJ,RY,PX,$J,TX,TY,FX,pX,RJ,KY,IY,RX,xX,aY,_Y,HX,JY,FY,IX,qX],[0,0,0,0,0,4,4,0,0,()=>lZ,64,64,()=>pZ,0,0,128,()=>xZ,()=>iit,1,()=>rit,()=>uZ,()=>dZ,()=>aZ,128,()=>gZ]],rit=[3,k,I9e,0,[DY],[()=>Uit]],iit=[3,k,L9e,0,[Zet,Ytt],[()=>zit,0]],lZ=[3,k,H9e,0,[VY,jtt,ptt],[1,1,1]],uZ=[3,k,U9e,0,[Mtt,Ftt,lnt],[1,1,0]],dZ=[3,k,R9e,0,[mY,Ntt,Ptt,Dtt,Ott,Rtt],[2,1,1,1,1,()=>Git]],ait=[3,k,z9e,0,[Ltt,ztt,Att,Xtt],[0,0,1,0]],fZ=[3,k,V9e,0,[ont],[()=>_it]],oit=[3,k,K9e,0,[Stt],[0]],sit=[3,k,W9e,0,[eX,YJ,XJ,cY,fY],[64,0,()=>Znt,0,()=>Art],2],cit=[3,k,G9e,0,[eX,YJ,XJ,cY,fY],[64,0,()=>Qnt,0,()=>jrt],2],lit=[3,k,J9e,0,[LX],[1]],uit=[3,k,Y9e,0,[LX],[1]],dit=[3,k,q9e,0,[wtt],[0]],pZ=[3,k,X9e,0,[_tt,ant],[0,64]],fit=[3,k,$9e,0,[_X,vX],[()=>yZ,()=>bZ]],pit=[3,k,eet,0,[_X,vX],[()=>yZ,()=>bZ]],mit=[3,k,net,0,[tY],[64]],hit=[3,k,aet,0,[tY],[64]],git=[3,k,set,0,[HY,fnt],[0,1]],_it=[3,k,met,0,[zX,xX],[0,()=>Kit]],mZ=[3,k,pet,0,[Ett,ktt],[1,1]],vit=[3,k,uet,0,[UJ],[()=>tZ]],yit=[3,k,det,0,[UJ],[()=>tZ]],bit=[3,k,get,0,[Ctt,KX,vtt],[0,0,0]],hZ=[3,k,vet,0,[CY,PX,zX,Jtt,GJ,btt,ctt],[0,0,0,()=>qit,4,()=>Hit,()=>Unt]],xit=[3,k,bet,0,[qJ,FJ,zJ,CX,mX,QJ,eY,cX],[[0,1],[0,1],0,0,0,[0,4],0,()=>_Z],2],Sit=[3,k,xet,0,[WX],[()=>hZ]],Cit=[3,k,wet,0,[Jet,$tt],[128,64]],wit=[3,k,Eet,0,[qJ,WY,IY,RX,TX,HX,JY,qX,QJ],[[0,1],[0,1],()=>Cit,()=>Dit,()=>lZ,()=>uZ,()=>dZ,()=>gZ,[0,4]],2],Tit=[3,k,Det,0,[WX],[()=>hZ]],Eit=[3,k,Oet,0,[zX,KX],[0,0]],Dit=[3,k,Met,0,[Yet,tnt],[()=>xZ,()=>xZ]],Oit=[3,k,ket,0,[MX],[0]],kit=[3,k,Aet,0,[MX],[0]],Ait=[3,k,Net,0,[kX,EX,uY,dY,aX,JJ],[64,64,2,2,64,0]],jit=[3,k,Pet,0,[kX,EX,att,unt,uY,dY,aX,JJ],[64,64,0,0,2,2,64,0]],gZ=[3,k,Fet,0,[mY,VY,Ttt,Wtt,ent],[2,1,1,0,2]],Mit=[3,k,Iet,0,[mY],[2]],Nit=[3,k,Let,0,[mY],[2]],Pit=[1,k,k5e,0,()=>jnt],Fit=[1,k,S5e,0,()=>Fnt],_Z=[1,k,O5e,0,()=>Rnt],Iit=[1,k,F5e,0,()=>Pnt],Lit=[1,k,P5e,0,()=>znt],Rit=[1,k,f5e,0,()=>eZ],zit=[1,k,M5e,0,()=>Hnt],Bit=[1,k,e7e,0,()=>Knt],Vit=[1,k,d7e,0,()=>qnt],vZ=[1,k,U7e,0,()=>Ort],Hit=[1,k,G7e,0,()=>krt],Uit=[1,k,Q7e,0,()=>Frt],Wit=[1,k,A9e,0,()=>nit],Git=[1,k,B9e,0,()=>ait],yZ=[1,k,ret,0,()=>mit],bZ=[1,k,oet,0,()=>hit],Kit=[1,k,cet,0,()=>git],xZ=[1,k,snt,0,()=>bit],qit=[1,k,jet,0,()=>Eit],Jit=[9,k,h5e,{[SY]:[`POST`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies`,200]},()=>Bnt,()=>Vnt],Yit=[9,k,B5e,{[SY]:[`POST`,`/clusters/{clusterName}/access-entries`,200]},()=>ert,()=>trt],Xit=[9,k,G5e,{[SY]:[`POST`,`/clusters/{clusterName}/addons`,200]},()=>nrt,()=>rrt],Zit=[9,k,Z5e,{[SY]:[`POST`,`/clusters`,200]},()=>irt,()=>art],Qit=[9,k,n7e,{[SY]:[`POST`,`/clusters/{clusterName}/node-groups`,200]},()=>ort,()=>srt],$it=[9,k,p7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/access-entries/{principalArn}`,200]},()=>crt,()=>lrt],eat=[9,k,f7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/addons/{addonName}`,200]},()=>urt,()=>drt],tat=[9,k,P7e,{[SY]:[`DELETE`,`/clusters/{name}`,200]},()=>frt,()=>prt],nat=[9,k,I7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/node-groups/{nodegroupName}`,200]},()=>mrt,()=>hrt],rat=[9,k,v7e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries/{principalArn}`,200]},()=>grt,()=>_rt],iat=[9,k,k7e,{[SY]:[`GET`,`/clusters/{clusterName}/addons/{addonName}`,200]},()=>vrt,()=>yrt],aat=[9,k,E7e,{[SY]:[`GET`,`/addons/supported-versions`,200]},()=>brt,()=>xrt],oat=[9,k,F7e,{[SY]:[`GET`,`/clusters/{name}`,200]},()=>Srt,()=>Crt],sat=[9,k,V7e,{[SY]:[`GET`,`/clusters/{clusterName}/node-groups/{nodegroupName}`,200]},()=>wrt,()=>Trt],cat=[9,k,y7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies/{policyArn}`,200]},()=>Ert,()=>Drt],lat=[9,k,h9e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries`,200]},()=>Wrt,()=>Grt],uat=[9,k,v9e,{[SY]:[`GET`,`/access-policies`,200]},()=>Krt,()=>qrt],dat=[9,k,d9e,{[SY]:[`GET`,`/clusters/{clusterName}/addons`,200]},()=>Jrt,()=>Yrt],fat=[9,k,f9e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies`,200]},()=>Xrt,()=>Zrt],pat=[9,k,T9e,{[SY]:[`GET`,`/clusters`,200]},()=>Qrt,()=>$rt],mat=[9,k,E9e,{[SY]:[`GET`,`/clusters/{clusterName}/node-groups`,200]},()=>eit,()=>tit],hat=[9,k,yet,{[SY]:[`POST`,`/clusters/{clusterName}/addons/{addonName}/update`,200]},()=>xit,()=>Sit],gat=[9,k,Tet,{[SY]:[`POST`,`/clusters/{clusterName}/node-groups/{nodegroupName}/update-config`,200]},()=>wit,()=>Tit],_at=e=>({apiVersion:`2017-11-01`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??J8e,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??z8e,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.eks`,errorTypeRegistries:knt,version:`2017-11-01`,serviceTarget:`AWSWesleyFrontend`},serviceId:e?.serviceId??`EKS`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),vat=e=>{let t=te(e),n=()=>t().then(Ae),r=_at(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:U8e.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},yat=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},bat=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),xat=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),yat(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),bat(n))},Sat=class extends tt{config;constructor(...[t]){let n=vat(t||{});super(n),this.initConfig=n;let r=V8e(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=xat(B8e(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:L8e,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},Cat=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function wat(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`elasticloadbalancing`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var Tat=e=>{let t=[];return e.operation,t.push(wat(e)),t},Eat=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},Dat=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`elasticloadbalancing`}),Oat={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},kat={name:`@aws-sdk/client-elastic-load-balancing-v2`,version:`3.1144.0`,description:`AWS SDK for JavaScript Elastic Load Balancing V2 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-elastic-load-balancing-v2`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-elastic-load-balancing-v2`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},SZ=`ref`,CZ=-1,wZ=!0,TZ=`isSet`,EZ=`PartitionResult`,DZ=`booleanEquals`,OZ=`getAttr`,kZ={[SZ]:`Endpoint`},AZ={[SZ]:EZ},jZ={},MZ=[{[SZ]:`Region`}],NZ={conditions:[[TZ,[kZ]],[TZ,MZ],[`aws.partition`,MZ,EZ],[DZ,[{[SZ]:`UseFIPS`},wZ]],[DZ,[{[SZ]:`UseDualStack`},wZ]],[DZ,[{fn:OZ,argv:[AZ,`supportsDualStack`]},wZ]],[DZ,[{fn:OZ,argv:[AZ,`supportsFIPS`]},wZ]],[`stringEquals`,[{fn:OZ,argv:[AZ,`name`]},`aws-us-gov`]]],results:[[CZ],[CZ,`Invalid Configuration: FIPS and custom endpoint are not supported`],[CZ,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[kZ,jZ],[`https://elasticloadbalancing-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,jZ],[CZ,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://elasticloadbalancing.{Region}.amazonaws.com`,jZ],[`https://elasticloadbalancing-fips.{Region}.{PartitionResult#dnsSuffix}`,jZ],[CZ,`FIPS is enabled but this partition does not support FIPS`],[`https://elasticloadbalancing.{Region}.{PartitionResult#dualStackDnsSuffix}`,jZ],[CZ,`DualStack is enabled but this partition does not support DualStack`],[`https://elasticloadbalancing.{Region}.{PartitionResult#dnsSuffix}`,jZ],[CZ,`Invalid Configuration: Missing Region`]]},Aat=2,jat=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),Mat=s.from(jat,Aat,NZ.conditions,NZ.results),Nat=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Pat=(e,t={})=>Nat.get(e,()=>ze(Mat,{endpointParams:e,logger:t.logger}));lt.aws=de;var A=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Fat=class e extends A{name=`CertificateNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`CertificateNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Iat=class e extends A{name=`ListenerNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`ListenerNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Lat=class e extends A{name=`TooManyCertificatesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyCertificatesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Rat=class e extends A{name=`DuplicateTagKeysException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTagKeysException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},zat=class e extends A{name=`LoadBalancerNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`LoadBalancerNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Bat=class e extends A{name=`RuleNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RuleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Vat=class e extends A{name=`TargetGroupNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TargetGroupNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Hat=class e extends A{name=`TooManyTagsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Uat=class e extends A{name=`TrustStoreNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Wat=class e extends A{name=`InvalidRevocationContentException`;$fault=`client`;Message;constructor(t){super({name:`InvalidRevocationContentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Gat=class e extends A{name=`RevocationContentNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RevocationContentNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Kat=class e extends A{name=`TooManyTrustStoreRevocationEntriesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTrustStoreRevocationEntriesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},qat=class e extends A{name=`AllocationIdNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`AllocationIdNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Jat=class e extends A{name=`ALPNPolicyNotSupportedException`;$fault=`client`;Message;constructor(t){super({name:`ALPNPolicyNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Yat=class e extends A{name=`AvailabilityZoneNotSupportedException`;$fault=`client`;Message;constructor(t){super({name:`AvailabilityZoneNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Xat=class e extends A{name=`CaCertificatesBundleNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`CaCertificatesBundleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Zat=class e extends A{name=`CapacityDecreaseRequestsLimitExceededException`;$fault=`client`;Message;constructor(t){super({name:`CapacityDecreaseRequestsLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Qat=class e extends A{name=`CapacityReservationPendingException`;$fault=`client`;Message;constructor(t){super({name:`CapacityReservationPendingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},$at=class e extends A{name=`CapacityUnitsLimitExceededException`;$fault=`client`;Message;constructor(t){super({name:`CapacityUnitsLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},eot=class e extends A{name=`DuplicateListenerException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateListenerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},tot=class e extends A{name=`IncompatibleProtocolsException`;$fault=`client`;Message;constructor(t){super({name:`IncompatibleProtocolsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},not=class e extends A{name=`InvalidConfigurationRequestException`;$fault=`client`;Message;constructor(t){super({name:`InvalidConfigurationRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},rot=class e extends A{name=`InvalidLoadBalancerActionException`;$fault=`client`;Message;constructor(t){super({name:`InvalidLoadBalancerActionException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},iot=class e extends A{name=`SSLPolicyNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`SSLPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},aot=class e extends A{name=`TargetGroupAssociationLimitException`;$fault=`client`;Message;constructor(t){super({name:`TargetGroupAssociationLimitException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},oot=class e extends A{name=`TooManyActionsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyActionsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},sot=class e extends A{name=`TooManyListenersException`;$fault=`client`;Message;constructor(t){super({name:`TooManyListenersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},cot=class e extends A{name=`TooManyRegistrationsForTargetIdException`;$fault=`client`;Message;constructor(t){super({name:`TooManyRegistrationsForTargetIdException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},lot=class e extends A{name=`TooManyTargetsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTargetsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},uot=class e extends A{name=`TooManyUniqueTargetGroupsPerLoadBalancerException`;$fault=`client`;Message;constructor(t){super({name:`TooManyUniqueTargetGroupsPerLoadBalancerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},dot=class e extends A{name=`TrustStoreNotReadyException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},fot=class e extends A{name=`UnsupportedProtocolException`;$fault=`client`;Message;constructor(t){super({name:`UnsupportedProtocolException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},pot=class e extends A{name=`DuplicateLoadBalancerNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateLoadBalancerNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},mot=class e extends A{name=`InvalidSchemeException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSchemeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},hot=class e extends A{name=`InvalidSecurityGroupException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSecurityGroupException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},got=class e extends A{name=`InvalidSubnetException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSubnetException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},_ot=class e extends A{name=`OperationNotPermittedException`;$fault=`client`;Message;constructor(t){super({name:`OperationNotPermittedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},vot=class e extends A{name=`ResourceInUseException`;$fault=`client`;Message;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},yot=class e extends A{name=`SubnetNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`SubnetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},bot=class e extends A{name=`TooManyLoadBalancersException`;$fault=`client`;Message;constructor(t){super({name:`TooManyLoadBalancersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},xot=class e extends A{name=`PriorityInUseException`;$fault=`client`;Message;constructor(t){super({name:`PriorityInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Sot=class e extends A{name=`TooManyRulesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyRulesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Cot=class e extends A{name=`TooManyTargetGroupsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTargetGroupsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},wot=class e extends A{name=`DuplicateTargetGroupNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTargetGroupNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Tot=class e extends A{name=`DuplicateTrustStoreNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTrustStoreNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Eot=class e extends A{name=`InvalidCaCertificatesBundleException`;$fault=`client`;Message;constructor(t){super({name:`InvalidCaCertificatesBundleException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Dot=class e extends A{name=`TooManyTrustStoresException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTrustStoresException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Oot=class e extends A{name=`DeleteAssociationSameAccountException`;$fault=`client`;Message;constructor(t){super({name:`DeleteAssociationSameAccountException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},kot=class e extends A{name=`TrustStoreAssociationNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreAssociationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Aot=class e extends A{name=`TrustStoreInUseException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},jot=class e extends A{name=`InvalidTargetException`;$fault=`client`;Message;constructor(t){super({name:`InvalidTargetException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Mot=class e extends A{name=`HealthUnavailableException`;$fault=`server`;Message;constructor(t){super({name:`HealthUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Not=class e extends A{name=`RevocationIdNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RevocationIdNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Pot=class e extends A{name=`ResourceNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Fot=class e extends A{name=`InsufficientCapacityException`;$fault=`server`;Message;constructor(t){super({name:`InsufficientCapacityException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Iot=class e extends A{name=`PriorRequestNotCompleteException`;$fault=`client`;Message;constructor(t){super({name:`PriorRequestNotCompleteException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Lot=`Action`,Rot=`AdditionalClaims`,zot=`AuthenticateCognitoActionConfig`,Bot=`AuthenticateCognitoConfig`,PZ=`AnomalyDetection`,Vot=`AuthorizationEndpoint`,FZ=`AllocationId`,Hot=`AllocationIdNotFoundException`,Uot=`ALPNPolicyNotSupportedException`,IZ=`AdministrativeOverride`,Wot=`AuthenticateOidcActionConfig`,Got=`AuthenticateOidcConfig`,LZ=`AlpnPolicy`,RZ=`AuthenticationRequestExtraParams`,Kot=`AddTags`,qot=`AddTagsInput`,Jot=`AddTagsOutput`,Yot=`AdvertiseTrustStoreCaNames`,zZ=`AvailabilityZone`,Xot=`AvailabilityZoneNotSupportedException`,BZ=`AvailabilityZones`,VZ=`Actions`,HZ=`Attributes`,UZ=`Certificates`,Zot=`CertificateArn`,Qot=`CaCertificatesBundleNotFoundException`,$ot=`CapacityDecreaseRequestsLimitExceededException`,est=`CanonicalHostedZoneId`,tst=`ClientId`,nst=`CertificateList`,rst=`CreateLoadBalancer`,ist=`CreateLoadBalancerInput`,ast=`CreateLoadBalancerOutput`,ost=`CreateListenerInput`,sst=`CreateListenerOutput`,cst=`CreateListener`,lst=`CertificateNotFoundException`,WZ=`CustomerOwnedIpv4Pool`,ust=`CreateRule`,dst=`CreateRuleInput`,fst=`CreateRuleOutput`,pst=`CapacityReservationPendingException`,mst=`ClientSecret`,hst=`ContentType`,gst=`CreateTargetGroup`,_st=`CreateTargetGroupInput`,vst=`CreateTargetGroupOutput`,yst=`CreatedTime`,bst=`CapacityUnitsLimitExceededException`,xst=`Certificate`,Sst=`Cipher`,GZ=`Ciphers`,Cst=`Code`,KZ=`Conditions`,qZ=`Description`,JZ=`DefaultActions`,wst=`DeleteAssociationSameAccountException`,Tst=`DeleteListener`,Est=`DeleteLoadBalancer`,Dst=`DescribeLoadBalancerAttributes`,Ost=`DescribeLoadBalancerAttributesInput`,kst=`DescribeLoadBalancerAttributesOutput`,Ast=`DeleteLoadBalancerInput`,jst=`DescribeLoadBalancersInput`,Mst=`DuplicateLoadBalancerNameException`,Nst=`DeleteLoadBalancerOutput`,Pst=`DescribeLoadBalancersOutput`,Fst=`DescribeLoadBalancers`,Ist=`DuplicateListenerException`,Lst=`DeleteListenerInput`,Rst=`DescribeListenersInput`,zst=`DeleteListenerOutput`,Bst=`DescribeListenersOutput`,Vst=`DescribeListeners`,Hst=`DNSName`,Ust=`DeleteRule`,Wst=`DeleteRuleInput`,Gst=`DescribeRulesInput`,Kst=`DeleteRuleOutput`,qst=`DescribeRulesOutput`,Jst=`DescribeRules`,Yst=`DurationSeconds`,Xst=`DescribeSSLPolicies`,Zst=`DescribeSSLPoliciesInput`,Qst=`DescribeSSLPoliciesOutput`,$st=`DeregisterTargets`,ect=`DeleteTargetGroup`,tct=`DescribeTargetGroupAttributes`,nct=`DescribeTargetGroupAttributesInput`,rct=`DescribeTargetGroupAttributesOutput`,ict=`DeleteTargetGroupInput`,act=`DescribeTargetGroupsInput`,oct=`DuplicateTargetGroupNameException`,sct=`DeleteTargetGroupOutput`,cct=`DescribeTargetGroupsOutput`,lct=`DescribeTargetGroups`,uct=`DescribeTargetHealth`,dct=`DescribeTargetHealthInput`,fct=`DescribeTargetHealthOutput`,pct=`DeregisterTargetsInput`,mct=`DescribeTagsInput`,hct=`DuplicateTagKeysException`,gct=`DeregisterTargetsOutput`,_ct=`DescribeTagsOutput`,vct=`DuplicateTrustStoreNameException`,yct=`DescribeTags`,bct=`Enabled`,YZ=`EnablePrefixForIpv6SourceNat`,XZ=`EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic`,xct=`Format`,Sct=`ForwardActionConfig`,Cct=`ForwardConfig`,wct=`FixedResponseActionConfig`,Tct=`FixedResponseConfig`,Ect=`Field`,Dct=`GrpcCode`,Oct=`Host`,kct=`HttpCode`,ZZ=`HealthCheckEnabled`,QZ=`HealthCheckIntervalSeconds`,$Z=`HealthCheckProtocol`,eQ=`HealthCheckPort`,tQ=`HealthCheckPath`,nQ=`HealthCheckTimeoutSeconds`,Act=`HostHeaderConfig`,jct=`HostHeaderConditionConfig`,Mct=`HttpHeaderConditionConfig`,Nct=`HttpHeaderConfig`,Pct=`HttpHeaderName`,rQ=`HostHeaderRewriteConfig`,Fct=`HttpRequestMethodConfig`,Ict=`HttpRequestMethodConditionConfig`,iQ=`HealthyThresholdCount`,Lct=`HealthUnavailableException`,aQ=`Issuer`,Rct=`IpAddress`,oQ=`IpAddressType`,zct=`InvalidCaCertificatesBundleException`,Bct=`IgnoreClientCertificateExpiry`,Vct=`InsufficientCapacityException`,Hct=`InvalidConfigurationRequestException`,sQ=`IsDefault`,Uct=`Ipv4IpamPoolId`,Wct=`InvalidLoadBalancerActionException`,cQ=`IpamPools`,lQ=`IPv6Address`,Gct=`IncompatibleProtocolsException`,Kct=`InvalidRevocationContentException`,qct=`InvalidSchemeException`,Jct=`InvalidSubnetException`,Yct=`InvalidSecurityGroupException`,Xct=`InvalidTargetException`,Zct=`Id`,Qct=`Include`,$ct=`JwksEndpoint`,elt=`JwtValidationActionAdditionalClaim`,tlt=`JwtValidationActionAdditionalClaims`,nlt=`JwtValidationActionConfig`,rlt=`JwtValidationConfig`,uQ=`Key`,dQ=`Listeners`,fQ=`ListenerArn`,ilt=`ListenerArns`,pQ=`LoadBalancers`,mQ=`LoadBalancerAddresses`,hQ=`LoadBalancerArn`,gQ=`LoadBalancerArns`,alt=`LoadBalancerAddress`,olt=`LoadBalancerAttribute`,slt=`LoadBalancerAttributes`,clt=`LoadBalancerName`,llt=`LoadBalancerNotFoundException`,ult=`LoadBalancerState`,dlt=`LoadBalancerType`,flt=`LoadBalancer`,plt=`ListenerNotFoundException`,mlt=`Listener`,j=`Message`,_Q=`MutualAuthentication`,hlt=`MutualAuthenticationAttributes`,glt=`MessageBody`,_lt=`MitigationInEffect`,vlt=`ModifyListener`,ylt=`ModifyLoadBalancerAttributes`,blt=`ModifyLoadBalancerAttributesInput`,xlt=`ModifyLoadBalancerAttributesOutput`,Slt=`ModifyListenerInput`,Clt=`ModifyListenerOutput`,wlt=`ModifyRule`,Tlt=`ModifyRuleInput`,Elt=`ModifyRuleOutput`,Dlt=`ModifyTargetGroupAttributes`,Olt=`ModifyTargetGroupAttributesInput`,klt=`ModifyTargetGroupAttributesOutput`,vQ=`Matcher`,yQ=`Marker`,Alt=`Mode`,bQ=`Name`,xQ=`NextMarker`,SQ=`Names`,jlt=`Order`,Mlt=`OutpostId`,Nlt=`OperationNotPermittedException`,CQ=`OnUnauthenticatedRequest`,wQ=`Priority`,TQ=`PrivateIPv4Address`,Plt=`PriorityInUseException`,Flt=`PathPatternConfig`,Ilt=`PathPatternConditionConfig`,Llt=`PriorRequestNotCompleteException`,EQ=`PageSize`,DQ=`ProtocolVersion`,Rlt=`Path`,OQ=`Port`,kQ=`Protocol`,zlt=`Query`,Blt=`QueryStringConfig`,Vlt=`QueryStringConditionConfig`,Hlt=`QuicServerId`,Ult=`QueryStringKeyValuePair`,Wlt=`QueryStringKeyValuePairList`,AQ=`Reason`,jQ=`ResourceArns`,Glt=`RedirectActionConfig`,Klt=`ResourceArn`,MQ=`RuleArn`,qlt=`RuleArns`,Jlt=`RedirectConfig`,Ylt=`RewriteConfigList`,Xlt=`RuleConditionList`,Zlt=`RevocationContentNotFoundException`,Qlt=`RewriteConfig`,$lt=`RuleCondition`,eut=`RevocationIdNotFoundException`,tut=`ResourceInUseException`,nut=`ResourceNotFoundException`,rut=`RuleNotFoundException`,iut=`RegisterTargetsInput`,aut=`RemoveTagsInput`,out=`RuleTransformList`,sut=`RegisterTargetsOutput`,cut=`RemoveTagsOutput`,lut=`ResetTransforms`,uut=`RegisterTargets`,dut=`RemoveTags`,fut=`RuleTransform`,NQ=`RegexValues`,put=`Result`,mut=`Regex`,hut=`Replace`,PQ=`Rewrites`,FQ=`Rules`,gut=`Rule`,IQ=`State`,LQ=`StatusCode`,RQ=`SessionCookieName`,zQ=`SecurityGroups`,_ut=`SecurityGroupIds`,BQ=`SubnetId`,vut=`SourceIpConfig`,yut=`SourceIpConditionConfig`,but=`SupportedLoadBalancerTypes`,VQ=`SubnetMappings`,xut=`SubnetMapping`,Sut=`SubnetNotFoundException`,Cut=`SourceNatIpv6Prefixes`,wut=`SourceNatIpv6Prefix`,HQ=`SslPolicy`,UQ=`SslPolicies`,Tut=`SslProtocols`,Eut=`SetSubnets`,Dut=`SetSecurityGroups`,Out=`SetSecurityGroupsInput`,kut=`SetSecurityGroupsOutput`,Aut=`SetSubnetsInput`,jut=`SSLPolicyNotFoundException`,Mut=`SetSubnetsOutput`,WQ=`SessionTimeout`,GQ=`Scope`,KQ=`Scheme`,qQ=`Subnets`,JQ=`Type`,YQ=`TargetControlPort`,XQ=`TagDescriptions`,Nut=`TagDescription`,Put=`TargetDescription`,Fut=`TargetDescriptions`,Iut=`TokenEndpoint`,ZQ=`TargetGroups`,QQ=`TargetGroupArn`,Lut=`TargetGroupAssociationLimitException`,Rut=`TargetGroupArns`,zut=`TargetGroupAttribute`,But=`TargetGroupAttributes`,Vut=`TargetGroupList`,Hut=`TargetGroupName`,Uut=`TargetGroupNotFoundException`,$Q=`TargetGroupStickinessConfig`,Wut=`TargetGroupTuple`,Gut=`TargetGroup`,e$=`TargetHealth`,t$=`TargetHealthDescriptions`,Kut=`TargetHealthDescription`,qut=`TagKeys`,Jut=`TagList`,Yut=`TooManyActionsException`,Xut=`TooManyCertificatesException`,Zut=`TooManyLoadBalancersException`,Qut=`TooManyListenersException`,$ut=`TooManyRulesException`,edt=`TooManyRegistrationsForTargetIdException`,tdt=`TooManyTagsException`,ndt=`TooManyTargetsException`,rdt=`TooManyTargetGroupsException`,idt=`TooManyTrustStoresException`,adt=`TooManyTrustStoreRevocationEntriesException`,odt=`TooManyUniqueTargetGroupsPerLoadBalancerException`,sdt=`TrustStoreArn`,cdt=`TrustStoreAssociationNotFoundException`,ldt=`TrustStoreAssociationStatus`,udt=`TrustStoreInUseException`,ddt=`TrustStoreNotFoundException`,fdt=`TrustStoreNotReadyException`,n$=`TargetType`,r$=`Tags`,pdt=`Tag`,i$=`Targets`,mdt=`Target`,a$=`Transforms`,hdt=`UseExistingClientSecret`,gdt=`UserInfoEndpoint`,_dt=`UserPoolArn`,vdt=`UserPoolClientId`,ydt=`UserPoolDomain`,bdt=`UnsupportedProtocolException`,o$=`UrlRewriteConfig`,s$=`UnhealthyThresholdCount`,c$=`Values`,l$=`VpcId`,u$=`Value`,xdt=`Weight`,Sdt=`ZoneName`,M=`awsQueryError`,N=`client`,P=`error`,F=`httpError`,d$=`smithy.ts.sdk.synthetic.com.amazonaws.elasticloadbalancingv2`,f$=`server`,I=`com.amazonaws.elasticloadbalancingv2`,p$=new mt(d$),Cdt=[-3,d$,`ElasticLoadBalancingV2ServiceException`,0,[],[]];p$.registerError(Cdt,A);var L=new mt(I),wdt=[-3,I,Hot,{[M]:[`AllocationIdNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(wdt,qat);var Tdt=[-3,I,Uot,{[M]:[`ALPNPolicyNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Tdt,Jat);var Edt=[-3,I,Xot,{[M]:[`AvailabilityZoneNotSupported`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Edt,Yat);var Ddt=[-3,I,Qot,{[M]:[`CaCertificatesBundleNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ddt,Xat);var Odt=[-3,I,$ot,{[M]:[`CapacityDecreaseRequestLimitExceeded`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Odt,Zat);var kdt=[-3,I,pst,{[M]:[`CapacityReservationPending`,400],[P]:N,[F]:400},[j],[0]];L.registerError(kdt,Qat);var Adt=[-3,I,bst,{[M]:[`CapacityUnitsLimitExceeded`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Adt,$at);var jdt=[-3,I,lst,{[M]:[`CertificateNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(jdt,Fat);var Mdt=[-3,I,wst,{[M]:[`DeleteAssociationSameAccount`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Mdt,Oot);var Ndt=[-3,I,Ist,{[M]:[`DuplicateListener`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ndt,eot);var Pdt=[-3,I,Mst,{[M]:[`DuplicateLoadBalancerName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Pdt,pot);var Fdt=[-3,I,hct,{[M]:[`DuplicateTagKeys`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Fdt,Rat);var Idt=[-3,I,oct,{[M]:[`DuplicateTargetGroupName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Idt,wot);var Ldt=[-3,I,vct,{[M]:[`DuplicateTrustStoreName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ldt,Tot);var Rdt=[-3,I,Lct,{[M]:[`HealthUnavailable`,500],[P]:f$,[F]:500},[j],[0]];L.registerError(Rdt,Mot);var zdt=[-3,I,Gct,{[M]:[`IncompatibleProtocols`,400],[P]:N,[F]:400},[j],[0]];L.registerError(zdt,tot);var Bdt=[-3,I,Vct,{[M]:[`InsufficientCapacity`,500],[P]:f$,[F]:500},[j],[0]];L.registerError(Bdt,Fot);var Vdt=[-3,I,zct,{[M]:[`InvalidCaCertificatesBundle`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Vdt,Eot);var Hdt=[-3,I,Hct,{[M]:[`InvalidConfigurationRequest`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Hdt,not);var Udt=[-3,I,Wct,{[M]:[`InvalidLoadBalancerAction`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Udt,rot);var Wdt=[-3,I,Kct,{[M]:[`InvalidRevocationContent`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Wdt,Wat);var Gdt=[-3,I,qct,{[M]:[`InvalidScheme`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Gdt,mot);var Kdt=[-3,I,Yct,{[M]:[`InvalidSecurityGroup`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Kdt,hot);var qdt=[-3,I,Jct,{[M]:[`InvalidSubnet`,400],[P]:N,[F]:400},[j],[0]];L.registerError(qdt,got);var Jdt=[-3,I,Xct,{[M]:[`InvalidTarget`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Jdt,jot);var Ydt=[-3,I,plt,{[M]:[`ListenerNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ydt,Iat);var Xdt=[-3,I,llt,{[M]:[`LoadBalancerNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Xdt,zat);var Zdt=[-3,I,Nlt,{[M]:[`OperationNotPermitted`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Zdt,_ot);var Qdt=[-3,I,Plt,{[M]:[`PriorityInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Qdt,xot);var $dt=[-3,I,Llt,{[M]:[`PriorRequestNotComplete`,429],[P]:N,[F]:429},[j],[0]];L.registerError($dt,Iot);var eft=[-3,I,tut,{[M]:[`ResourceInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(eft,vot);var tft=[-3,I,nut,{[M]:[`ResourceNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(tft,Pot);var nft=[-3,I,Zlt,{[M]:[`RevocationContentNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(nft,Gat);var rft=[-3,I,eut,{[M]:[`RevocationIdNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(rft,Not);var ift=[-3,I,rut,{[M]:[`RuleNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(ift,Bat);var aft=[-3,I,jut,{[M]:[`SSLPolicyNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(aft,iot);var oft=[-3,I,Sut,{[M]:[`SubnetNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(oft,yot);var sft=[-3,I,Lut,{[M]:[`TargetGroupAssociationLimit`,400],[P]:N,[F]:400},[j],[0]];L.registerError(sft,aot);var cft=[-3,I,Uut,{[M]:[`TargetGroupNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(cft,Vat);var lft=[-3,I,Yut,{[M]:[`TooManyActions`,400],[P]:N,[F]:400},[j],[0]];L.registerError(lft,oot);var uft=[-3,I,Xut,{[M]:[`TooManyCertificates`,400],[P]:N,[F]:400},[j],[0]];L.registerError(uft,Lat);var dft=[-3,I,Qut,{[M]:[`TooManyListeners`,400],[P]:N,[F]:400},[j],[0]];L.registerError(dft,sot);var fft=[-3,I,Zut,{[M]:[`TooManyLoadBalancers`,400],[P]:N,[F]:400},[j],[0]];L.registerError(fft,bot);var pft=[-3,I,edt,{[M]:[`TooManyRegistrationsForTargetId`,400],[P]:N,[F]:400},[j],[0]];L.registerError(pft,cot);var mft=[-3,I,$ut,{[M]:[`TooManyRules`,400],[P]:N,[F]:400},[j],[0]];L.registerError(mft,Sot);var hft=[-3,I,tdt,{[M]:[`TooManyTags`,400],[P]:N,[F]:400},[j],[0]];L.registerError(hft,Hat);var gft=[-3,I,rdt,{[M]:[`TooManyTargetGroups`,400],[P]:N,[F]:400},[j],[0]];L.registerError(gft,Cot);var _ft=[-3,I,ndt,{[M]:[`TooManyTargets`,400],[P]:N,[F]:400},[j],[0]];L.registerError(_ft,lot);var vft=[-3,I,adt,{[M]:[`TooManyTrustStoreRevocationEntries`,400],[P]:N,[F]:400},[j],[0]];L.registerError(vft,Kat);var yft=[-3,I,idt,{[M]:[`TooManyTrustStores`,400],[P]:N,[F]:400},[j],[0]];L.registerError(yft,Dot);var bft=[-3,I,odt,{[M]:[`TooManyUniqueTargetGroupsPerLoadBalancer`,400],[P]:N,[F]:400},[j],[0]];L.registerError(bft,uot);var xft=[-3,I,cdt,{[M]:[`AssociationNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(xft,kot);var Sft=[-3,I,udt,{[M]:[`TrustStoreInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Sft,Aot);var Cft=[-3,I,ddt,{[M]:[`TrustStoreNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Cft,Uat);var wft=[-3,I,fdt,{[M]:[`TrustStoreNotReady`,400],[P]:N,[F]:400},[j],[0]];L.registerError(wft,dot);var Tft=[-3,I,bdt,{[M]:[`UnsupportedProtocol`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Tft,fot);var Eft=[p$,L],Dft=[3,I,Lot,0,[JQ,QQ,Got,Bot,jlt,Jlt,Tct,Cct,rlt],[0,0,()=>Nft,()=>Mft,1,()=>Upt,()=>ypt,()=>bpt,()=>Ept],1],Oft=[3,I,qot,0,[jQ,r$],[64,()=>k$],2],kft=[3,I,Jot,0,[],[]],Aft=[3,I,IZ,0,[IQ,AQ,qZ],[0,0,0]],jft=[3,I,PZ,0,[put,_lt],[0,0]],Mft=[3,I,zot,0,[_dt,vdt,ydt,RQ,GQ,WQ,RZ,CQ],[0,0,0,0,0,1,128,0],3],Nft=[3,I,Wot,0,[aQ,Vot,Iut,gdt,tst,mst,RQ,GQ,WQ,RZ,CQ,hdt],[0,0,0,0,0,0,0,0,1,128,0,2],5],Pft=[3,I,zZ,0,[Sdt,BQ,Mlt,mQ,Cut],[0,0,0,()=>gmt,64]],Fft=[3,I,xst,0,[Zot,sQ],[0,2]],Ift=[3,I,Sst,0,[bQ,wQ],[0,1]],Lft=[3,I,ost,0,[hQ,JZ,kQ,OQ,HQ,UZ,LZ,r$,_Q],[0,()=>v$,0,1,0,()=>b$,64,()=>k$,()=>g$],2],Rft=[3,I,sst,0,[dQ],[()=>x$]],zft=[3,I,ist,0,[bQ,qQ,VQ,zQ,KQ,r$,JQ,oQ,WZ,YZ,cQ],[0,64,()=>O$,64,0,()=>k$,0,0,0,0,()=>m$],1],Bft=[3,I,ast,0,[pQ],[()=>C$]],Vft=[3,I,dst,0,[fQ,KZ,wQ,VZ,r$,a$],[0,()=>T$,1,()=>v$,()=>k$,()=>D$],4],Hft=[3,I,fst,0,[FQ],[()=>E$]],Uft=[3,I,_st,0,[bQ,kQ,DQ,OQ,l$,$Z,eQ,ZZ,tQ,QZ,nQ,iQ,s$,vQ,n$,r$,oQ,YQ],[0,0,0,1,0,0,0,2,0,1,1,1,1,()=>h$,0,()=>k$,0,1],1],Wft=[3,I,vst,0,[ZQ],[()=>M$]],Gft=[3,I,Lst,0,[fQ],[0],1],Kft=[3,I,zst,0,[],[]],qft=[3,I,Ast,0,[hQ],[0],1],Jft=[3,I,Nst,0,[],[]],Yft=[3,I,Wst,0,[MQ],[0],1],Xft=[3,I,Kst,0,[],[]],Zft=[3,I,ict,0,[QQ],[0],1],Qft=[3,I,sct,0,[],[]],$ft=[3,I,pct,0,[QQ,i$],[0,()=>A$],2],ept=[3,I,gct,0,[],[]],tpt=[3,I,Rst,0,[hQ,ilt,yQ,EQ],[0,64,0,1]],npt=[3,I,Bst,0,[dQ,xQ],[()=>x$,0]],rpt=[3,I,Ost,0,[hQ],[0],1],ipt=[3,I,kst,0,[HZ],[()=>S$]],apt=[3,I,jst,0,[gQ,SQ,yQ,EQ],[64,64,0,1]],opt=[3,I,Pst,0,[pQ,xQ],[()=>C$,0]],spt=[3,I,Gst,0,[fQ,qlt,yQ,EQ],[0,64,0,1]],cpt=[3,I,qst,0,[FQ,xQ],[()=>E$,0]],lpt=[3,I,Zst,0,[SQ,yQ,EQ,dlt],[64,0,1,0]],upt=[3,I,Qst,0,[UQ,xQ],[()=>vmt,0]],dpt=[3,I,mct,0,[jQ],[64],1],fpt=[3,I,_ct,0,[XQ],[()=>ymt]],ppt=[3,I,nct,0,[QQ],[0],1],mpt=[3,I,rct,0,[HZ],[()=>j$]],hpt=[3,I,act,0,[hQ,Rut,SQ,yQ,EQ],[0,64,64,0,1]],gpt=[3,I,cct,0,[ZQ,xQ],[()=>M$,0]],_pt=[3,I,dct,0,[QQ,i$,Qct],[0,()=>A$,64],1],vpt=[3,I,fct,0,[t$],[()=>xmt]],ypt=[3,I,wct,0,[LQ,glt,hst],[0,0,0],1],bpt=[3,I,Sct,0,[ZQ,$Q],[()=>bmt,()=>lmt]],xpt=[3,I,jct,0,[c$,NQ],[64,64]],Spt=[3,I,rQ,0,[PQ],[()=>w$]],Cpt=[3,I,Mct,0,[Pct,c$,NQ],[0,64,64]],wpt=[3,I,Ict,0,[c$],[64]],m$=[3,I,cQ,0,[Uct],[0]],Tpt=[3,I,elt,0,[xct,bQ,c$],[0,0,64],3],Ept=[3,I,nlt,0,[$ct,aQ,Rot],[0,0,()=>hmt],2],Dpt=[3,I,mlt,0,[fQ,hQ,OQ,kQ,UZ,HQ,JZ,LZ,_Q],[0,0,1,0,()=>b$,0,()=>v$,64,()=>g$]],Opt=[3,I,flt,0,[hQ,Hst,est,yst,clt,KQ,l$,IQ,JQ,BZ,zQ,oQ,WZ,XZ,YZ,cQ],[0,0,0,4,0,0,0,()=>jpt,0,()=>y$,64,0,0,0,0,()=>m$]],kpt=[3,I,alt,0,[Rct,FZ,TQ,lQ],[0,0,0,0]],Apt=[3,I,olt,0,[uQ,u$],[0,0]],jpt=[3,I,ult,0,[Cst,AQ],[0,0]],h$=[3,I,vQ,0,[kct,Dct],[0,0]],Mpt=[3,I,Slt,0,[fQ,OQ,kQ,HQ,UZ,JZ,LZ,_Q],[0,1,0,0,()=>b$,()=>v$,64,()=>g$],1],Npt=[3,I,Clt,0,[dQ],[()=>x$]],Ppt=[3,I,blt,0,[hQ,HZ],[0,()=>S$],2],Fpt=[3,I,xlt,0,[HZ],[()=>S$]],Ipt=[3,I,Tlt,0,[MQ,KZ,VZ,a$,lut],[0,()=>T$,()=>v$,()=>D$,2],1],Lpt=[3,I,Elt,0,[FQ],[()=>E$]],Rpt=[3,I,Olt,0,[QQ,HZ],[0,()=>j$],2],zpt=[3,I,klt,0,[HZ],[()=>j$]],g$=[3,I,hlt,0,[Alt,sdt,Bct,ldt,Yot],[0,0,2,0,0]],Bpt=[3,I,Ilt,0,[c$,NQ],[64,64]],Vpt=[3,I,Vlt,0,[c$],[()=>_mt]],Hpt=[3,I,Ult,0,[uQ,u$],[0,0]],Upt=[3,I,Glt,0,[LQ,kQ,OQ,Oct,Rlt,zlt],[0,0,0,0,0,0],1],Wpt=[3,I,iut,0,[QQ,i$],[0,()=>A$],2],Gpt=[3,I,sut,0,[],[]],Kpt=[3,I,aut,0,[jQ,qut],[64,64],2],qpt=[3,I,cut,0,[],[]],Jpt=[3,I,Qlt,0,[mut,hut],[0,0],2],Ypt=[3,I,gut,0,[MQ,wQ,KZ,VZ,sQ,a$],[0,0,()=>T$,()=>v$,2,()=>D$]],Xpt=[3,I,$lt,0,[Ect,c$,Act,Flt,Nct,Blt,Fct,vut,NQ],[0,64,()=>xpt,()=>Bpt,()=>Cpt,()=>Vpt,()=>wpt,()=>nmt,64]],Zpt=[3,I,fut,0,[JQ,rQ,o$],[0,()=>Spt,()=>pmt],1],Qpt=[3,I,Out,0,[hQ,zQ,XZ],[0,64,0],2],$pt=[3,I,kut,0,[_ut,XZ],[64,0]],emt=[3,I,Aut,0,[hQ,qQ,VQ,oQ,YZ],[0,64,()=>O$,0,0],1],tmt=[3,I,Mut,0,[BZ,oQ,YZ],[()=>y$,0,0]],nmt=[3,I,yut,0,[c$,oQ],[64,0]],rmt=[3,I,HQ,0,[Tut,GZ,bQ,but],[64,()=>mmt,0,64]],imt=[3,I,xut,0,[BQ,FZ,TQ,lQ,wut],[0,0,0,0,0]],amt=[3,I,pdt,0,[uQ,u$],[0,0],1],omt=[3,I,Nut,0,[Klt,r$],[0,()=>k$]],_$=[3,I,Put,0,[Zct,OQ,zZ,Hlt],[0,1,0,0],1],smt=[3,I,Gut,0,[QQ,Hut,kQ,OQ,l$,$Z,eQ,ZZ,QZ,nQ,iQ,s$,tQ,vQ,gQ,n$,DQ,oQ,YQ],[0,0,0,1,0,0,0,2,1,1,1,1,0,()=>h$,64,0,0,0,1]],cmt=[3,I,zut,0,[uQ,u$],[0,0]],lmt=[3,I,$Q,0,[bct,Yst],[2,1]],umt=[3,I,Wut,0,[QQ,xdt],[0,1]],dmt=[3,I,e$,0,[IQ,AQ,qZ],[0,0,0]],fmt=[3,I,Kut,0,[mdt,eQ,e$,PZ,IZ],[()=>_$,0,()=>dmt,()=>jft,()=>Aft]],pmt=[3,I,o$,0,[PQ],[()=>w$]],v$=[1,I,VZ,0,()=>Dft],y$=[1,I,BZ,0,()=>Pft],b$=[1,I,nst,0,()=>Fft],mmt=[1,I,GZ,0,()=>Ift],hmt=[1,I,tlt,0,()=>Tpt],x$=[1,I,dQ,0,()=>Dpt],gmt=[1,I,mQ,0,()=>kpt],S$=[1,I,slt,0,()=>Apt],C$=[1,I,pQ,0,()=>Opt],_mt=[1,I,Wlt,0,()=>Hpt],w$=[1,I,Ylt,0,()=>Jpt],T$=[1,I,Xlt,0,()=>Xpt],E$=[1,I,FQ,0,()=>Ypt],D$=[1,I,out,0,()=>Zpt],vmt=[1,I,UQ,0,()=>rmt],O$=[1,I,VQ,0,()=>imt],ymt=[1,I,XQ,0,()=>omt],k$=[1,I,Jut,0,()=>amt],A$=[1,I,Fut,0,()=>_$],j$=[1,I,But,0,()=>cmt],bmt=[1,I,Vut,0,()=>umt],M$=[1,I,ZQ,0,()=>smt],xmt=[1,I,t$,0,()=>fmt],Smt=[9,I,Kot,0,()=>Oft,()=>kft],Cmt=[9,I,cst,0,()=>Lft,()=>Rft],wmt=[9,I,rst,0,()=>zft,()=>Bft],Tmt=[9,I,ust,0,()=>Vft,()=>Hft],Emt=[9,I,gst,0,()=>Uft,()=>Wft],Dmt=[9,I,Tst,0,()=>Gft,()=>Kft],Omt=[9,I,Est,0,()=>qft,()=>Jft],kmt=[9,I,Ust,0,()=>Yft,()=>Xft],Amt=[9,I,ect,0,()=>Zft,()=>Qft],jmt=[9,I,$st,0,()=>$ft,()=>ept],Mmt=[9,I,Vst,0,()=>tpt,()=>npt],Nmt=[9,I,Dst,0,()=>rpt,()=>ipt],Pmt=[9,I,Fst,0,()=>apt,()=>opt],Fmt=[9,I,Jst,0,()=>spt,()=>cpt],Imt=[9,I,Xst,0,()=>lpt,()=>upt],Lmt=[9,I,yct,0,()=>dpt,()=>fpt],Rmt=[9,I,tct,0,()=>ppt,()=>mpt],zmt=[9,I,lct,0,()=>hpt,()=>gpt],Bmt=[9,I,uct,0,()=>_pt,()=>vpt],Vmt=[9,I,vlt,0,()=>Mpt,()=>Npt],Hmt=[9,I,ylt,0,()=>Ppt,()=>Fpt],Umt=[9,I,wlt,0,()=>Ipt,()=>Lpt],Wmt=[9,I,Dlt,0,()=>Rpt,()=>zpt],Gmt=[9,I,uut,0,()=>Wpt,()=>Gpt],Kmt=[9,I,dut,0,()=>Kpt,()=>qpt],qmt=[9,I,Dut,0,()=>Qpt,()=>$pt],Jmt=[9,I,Eut,0,()=>emt,()=>tmt],Ymt=e=>({apiVersion:`2015-12-01`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Pat,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Tat,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Re,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.elasticloadbalancingv2`,errorTypeRegistries:Eft,xmlNamespace:`http://elasticloadbalancing.amazonaws.com/doc/2015-12-01/`,version:`2015-12-01`,serviceTarget:`ElasticLoadBalancing_v10`},serviceId:e?.serviceId??`Elastic Load Balancing v2`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),Xmt=e=>{let t=te(e),n=()=>t().then(Ae),r=Ymt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:kat.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Zmt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Qmt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),$mt=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),Zmt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),Qmt(n))},eht=class extends tt{config;constructor(...[t]){let n=Xmt(t||{});super(n),this.initConfig=n;let r=Dat(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=$mt(Eat(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:Cat,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},tht=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function nht(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`iam`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var rht=e=>{let t=[];return e.operation,t.push(nht(e)),t},iht=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},aht=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`iam`}),oht={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},sht={name:`@aws-sdk/client-iam`,version:`3.1144.0`,description:`AWS SDK for JavaScript Iam Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-iam`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-iam`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},N$=`ref`,P$=`authSchemes`,F$=`name`,I$=`signingRegion`,L$=-1,R$=!0,z$=`isSet`,B$=`PartitionResult`,V$=`stringEquals`,H$=`booleanEquals`,U$=`getAttr`,W$={[N$]:`Endpoint`},G$={fn:U$,argv:[{[N$]:B$},`name`]},K$={[N$]:B$},q$={[P$]:[{[F$]:`sigv4`,[I$]:`us-east-1`}]},J$={[P$]:[{[F$]:`sigv4`,[I$]:`cn-north-1`}]},Y$={[P$]:[{[F$]:`sigv4`,[I$]:`us-gov-west-1`}]},X$={[P$]:[{[F$]:`sigv4`,[I$]:`us-iso-east-1`}]},Z$={[P$]:[{[F$]:`sigv4`,[I$]:`us-isob-east-1`}]},Q$={[P$]:[{[F$]:`sigv4`,[I$]:`eu-isoe-west-1`}]},$$={[P$]:[{[F$]:`sigv4`,[I$]:`us-isof-south-1`}]},e1={[P$]:[{[F$]:`sigv4`,[I$]:`eusc-de-east-1`}]},t1={[P$]:[{[F$]:`sigv4`,[I$]:`{PartitionResult#implicitGlobalRegion}`}]},n1=[{[N$]:`Region`}],r1={conditions:[[z$,[W$]],[z$,n1],[`aws.partition`,n1,B$],[V$,[G$,`aws`]],[V$,[G$,`aws-cn`]],[V$,[G$,`aws-us-gov`]],[V$,[G$,`aws-iso`]],[H$,[{[N$]:`UseFIPS`},R$]],[H$,[{[N$]:`UseDualStack`},R$]],[V$,[G$,`aws-iso-b`]],[V$,[G$,`aws-iso-e`]],[V$,[G$,`aws-iso-f`]],[V$,[G$,`aws-eusc`]],[H$,[{fn:U$,argv:[K$,`supportsDualStack`]},R$]],[H$,[{fn:U$,argv:[K$,`supportsFIPS`]},R$]]],results:[[L$],[L$,`Invalid Configuration: FIPS and custom endpoint are not supported`],[L$,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[W$,{}],[`https://iam.amazonaws.com`,q$],[`https://iam-fips.amazonaws.com`,q$],[`https://iam.global.api.aws`,q$],[`https://iam-fips.global.api.aws`,q$],[`https://iam.global.api.amazonwebservices.com.cn`,J$],[`https://iam-fips.api.amazonwebservices.com.cn`,J$],[`https://iam.cn-north-1.amazonaws.com.cn`,J$],[`https://iam-fips.amazonaws.com.cn`,J$],[`https://iam.us-gov.api.aws`,Y$],[`https://iam.us-gov.amazonaws.com`,Y$],[`https://iam.us-iso-east-1.c2s.ic.gov`,X$],[`https://iam-fips.us-iso-east-1.c2s.ic.gov`,X$],[`https://iam.api.aws.ic.gov`,X$],[`https://iam-fips.api.aws.ic.gov`,X$],[`https://iam.us-isob-east-1.sc2s.sgov.gov`,Z$],[`https://iam-fips.us-isob-east-1.sc2s.sgov.gov`,Z$],[`https://iam.api.aws.scloud`,Z$],[`https://iam-fips.api.aws.scloud`,Z$],[`https://iam.eu-isoe-west-1.cloud.adc-e.uk`,Q$],[`https://iam-fips.cloud.adc-e.uk`,Q$],[`https://iam.api.cloud-aws.adc-e.uk`,Q$],[`https://iam-fips.api.cloud-aws.adc-e.uk`,Q$],[`https://iam.us-isof-south-1.csp.hci.ic.gov`,$$],[`https://iam-fips.csp.hci.ic.gov`,$$],[`https://iam.api.aws.hci.ic.gov`,$$],[`https://iam-fips.api.aws.hci.ic.gov`,$$],[`https://iam.eusc-de-east-1.amazonaws.eu`,e1],[`https://iam-fips.amazonaws.eu`,e1],[`https://iam.global.api.amazonwebservices.eu`,e1],[`https://iam-fips.api.amazonwebservices.eu`,e1],[`https://iam-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}`,t1],[L$,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://iam-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}`,t1],[L$,`FIPS is enabled but this partition does not support FIPS`],[`https://iam.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}`,t1],[L$,`DualStack is enabled but this partition does not support DualStack`],[`https://iam.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}`,t1],[L$,`Invalid Configuration: Missing Region`]]},cht=2,lht=new Int32Array([-1,1,-1,0,42,3,1,4,100000041,2,5,100000041,3,39,6,4,36,7,5,35,8,6,32,9,7,20,10,8,15,11,9,100000018,12,10,100000022,13,11,100000026,14,12,100000030,100000040,9,100000020,16,10,100000024,17,11,100000028,18,12,100000032,19,13,100000038,100000039,8,26,21,9,100000019,22,10,100000023,23,11,100000027,24,12,100000031,25,14,100000036,100000037,9,100000021,27,10,100000025,28,11,100000029,29,12,100000033,30,13,31,100000035,14,100000034,100000035,7,34,33,8,100000016,100000014,8,100000017,100000015,8,100000012,100000013,7,38,37,8,100000008,100000010,8,100000009,100000011,7,41,40,8,100000006,100000004,8,100000007,100000005,7,100000001,43,8,100000002,100000003]),uht=s.from(lht,cht,r1.conditions,r1.results),dht=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),fht=(e,t={})=>dht.get(e,()=>ze(uht,{endpointParams:e,logger:t.logger}));lt.aws=de;var R=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},pht=class e extends R{name=`ConcurrentModificationException`;$fault=`client`;constructor(t){super({name:`ConcurrentModificationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mht=class e extends R{name=`NoSuchEntityException`;$fault=`client`;constructor(t){super({name:`NoSuchEntityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hht=class e extends R{name=`ServiceFailureException`;$fault=`server`;constructor(t){super({name:`ServiceFailureException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},ght=class e extends R{name=`AccountNotManagementOrDelegatedAdministratorException`;$fault=`client`;Message;constructor(t){super({name:`AccountNotManagementOrDelegatedAdministratorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},_ht=class e extends R{name=`EntityAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`EntityAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vht=class e extends R{name=`InvalidInputException`;$fault=`client`;constructor(t){super({name:`InvalidInputException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yht=class e extends R{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bht=class e extends R{name=`MalformedPolicyDocumentException`;$fault=`client`;constructor(t){super({name:`MalformedPolicyDocumentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xht=class e extends R{name=`NameConflictException`;$fault=`client`;constructor(t){super({name:`NameConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Sht=class e extends R{name=`RoleModifiedException`;$fault=`client`;constructor(t){super({name:`RoleModifiedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cht=class e extends R{name=`RoleTemplateDisabledException`;$fault=`client`;constructor(t){super({name:`RoleTemplateDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wht=class e extends R{name=`UnmodifiableEntityException`;$fault=`client`;constructor(t){super({name:`UnmodifiableEntityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Tht=class e extends R{name=`PolicyNotAttachableException`;$fault=`client`;constructor(t){super({name:`PolicyNotAttachableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Eht=class e extends R{name=`EntityTemporarilyUnmodifiableException`;$fault=`client`;constructor(t){super({name:`EntityTemporarilyUnmodifiableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dht=class e extends R{name=`InvalidUserTypeException`;$fault=`client`;constructor(t){super({name:`InvalidUserTypeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Oht=class e extends R{name=`PasswordPolicyViolationException`;$fault=`client`;constructor(t){super({name:`PasswordPolicyViolationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kht=class e extends R{name=`OpenIdIdpCommunicationErrorException`;$fault=`client`;constructor(t){super({name:`OpenIdIdpCommunicationErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Aht=class e extends R{name=`ServiceNotSupportedException`;$fault=`client`;constructor(t){super({name:`ServiceNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jht=class e extends R{name=`DeleteConflictException`;$fault=`client`;constructor(t){super({name:`DeleteConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mht=class e extends R{name=`OrganizationNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`OrganizationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Nht=class e extends R{name=`OrganizationNotInAllFeaturesModeException`;$fault=`client`;Message;constructor(t){super({name:`OrganizationNotInAllFeaturesModeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Pht=class e extends R{name=`ServiceAccessNotEnabledException`;$fault=`client`;Message;constructor(t){super({name:`ServiceAccessNotEnabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Fht=class e extends R{name=`FeatureDisabledException`;$fault=`client`;constructor(t){super({name:`FeatureDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Iht=class e extends R{name=`InvalidAuthenticationCodeException`;$fault=`client`;constructor(t){super({name:`InvalidAuthenticationCodeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Lht=class e extends R{name=`CallerIsNotManagementAccountException`;$fault=`client`;Message;constructor(t){super({name:`CallerIsNotManagementAccountException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Rht=class e extends R{name=`FeatureEnabledException`;$fault=`client`;constructor(t){super({name:`FeatureEnabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zht=class e extends R{name=`ReportGenerationLimitExceededException`;$fault=`client`;constructor(t){super({name:`ReportGenerationLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bht=class e extends R{name=`CredentialReportExpiredException`;$fault=`client`;constructor(t){super({name:`CredentialReportExpiredException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Vht=class e extends R{name=`CredentialReportNotPresentException`;$fault=`client`;constructor(t){super({name:`CredentialReportNotPresentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Hht=class e extends R{name=`CredentialReportNotReadyException`;$fault=`client`;constructor(t){super({name:`CredentialReportNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Uht=class e extends R{name=`UnrecognizedPublicKeyEncodingException`;$fault=`client`;constructor(t){super({name:`UnrecognizedPublicKeyEncodingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Wht=class e extends R{name=`PolicyEvaluationException`;$fault=`server`;constructor(t){super({name:`PolicyEvaluationException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ght=class e extends R{name=`KeyPairMismatchException`;$fault=`client`;constructor(t){super({name:`KeyPairMismatchException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Kht=class e extends R{name=`MalformedCertificateException`;$fault=`client`;constructor(t){super({name:`MalformedCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qht=class e extends R{name=`DuplicateCertificateException`;$fault=`client`;constructor(t){super({name:`DuplicateCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Jht=class e extends R{name=`InvalidCertificateException`;$fault=`client`;constructor(t){super({name:`InvalidCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Yht=class e extends R{name=`DuplicateSSHPublicKeyException`;$fault=`client`;constructor(t){super({name:`DuplicateSSHPublicKeyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xht=class e extends R{name=`InvalidPublicKeyException`;$fault=`client`;constructor(t){super({name:`InvalidPublicKeyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},i1=`Arn`,Zht=`AttachmentCount`,Qht=`AttachGroupPolicy`,$ht=`AttachGroupPolicyRequest`,a1=`AccessKey`,o1=`AccessKeyId`,s1=`AccessKeyMetadata`,egt=`AccountNotManagementOrDelegatedAdministratorException`,tgt=`AttachedPolicy`,ngt=`AttachedPermissionsBoundary`,c1=`AttachedPolicies`,rgt=`AttachRolePolicy`,l1=`AssumeRolePolicyDocument`,igt=`AttachRolePolicyRequest`,agt=`AddRoleToInstanceProfile`,ogt=`AddRoleToInstanceProfileRequest`,sgt=`AttachUserPolicy`,cgt=`AttachUserPolicyRequest`,lgt=`AddUserToGroup`,ugt=`AddUserToGroupRequest`,dgt=`CreateAccessKey`,fgt=`CreateAccessKeyRequest`,pgt=`CreateAccessKeyResponse`,u1=`CreateDate`,mgt=`CreateGroup`,hgt=`CreateGroupRequest`,ggt=`CreateGroupResponse`,_gt=`CallerIsNotManagementAccountException`,vgt=`CreateInstanceProfile`,ygt=`CreateInstanceProfileRequest`,bgt=`CreateInstanceProfileResponse`,xgt=`ConcurrentModificationException`,Sgt=`CreatePolicyRequest`,Cgt=`CreatePolicyResponse`,wgt=`CreatePolicy`,Tgt=`CreateRole`,Egt=`CredentialReportExpiredException`,Dgt=`CredentialReportNotPresentException`,Ogt=`CredentialReportNotReadyException`,kgt=`CreateRoleRequest`,Agt=`CreateRoleResponse`,jgt=`CreateUser`,Mgt=`CreateUserRequest`,Ngt=`CreateUserResponse`,d1=`Description`,Pgt=`DeleteAccessKey`,Fgt=`DeleteAccessKeyRequest`,Igt=`DeleteConflictException`,Lgt=`DuplicateCertificateException`,Rgt=`DeleteGroup`,zgt=`DeleteGroupPolicy`,Bgt=`DeleteGroupPolicyRequest`,Vgt=`DetachGroupPolicyRequest`,Hgt=`DetachGroupPolicy`,Ugt=`DeleteGroupRequest`,Wgt=`DeleteInstanceProfile`,Ggt=`DeleteInstanceProfileRequest`,Kgt=`DeletePolicyRequest`,qgt=`DeletePolicy`,Jgt=`DeleteRolePolicy`,Ygt=`DeleteRolePolicyRequest`,Xgt=`DetachRolePolicyRequest`,Zgt=`DetachRolePolicy`,Qgt=`DeleteRoleRequest`,$gt=`DeleteRole`,e_t=`DuplicateSSHPublicKeyException`,t_t=`DeleteUser`,n_t=`DeleteUserPolicy`,r_t=`DeleteUserPolicyRequest`,i_t=`DetachUserPolicyRequest`,a_t=`DetachUserPolicy`,o_t=`DeleteUserRequest`,s_t=`DefaultVersionId`,c_t=`Document`,l_t=`EntityAlreadyExistsException`,u_t=`EntityTemporarilyUnmodifiableException`,d_t=`FeatureDisabledException`,f_t=`FeatureEnabledException`,f1=`Group`,p_t=`GetGroup`,m_t=`GetGroupPolicy`,h_t=`GetGroupPolicyRequest`,g_t=`GetGroupPolicyResponse`,__t=`GetGroupRequest`,v_t=`GetGroupResponse`,y_t=`GroupId`,b_t=`GetInstanceProfile`,x_t=`GetInstanceProfileRequest`,S_t=`GetInstanceProfileResponse`,p1=`GroupName`,C_t=`GetPolicy`,w_t=`GetPolicyRequest`,T_t=`GetPolicyResponse`,E_t=`GetPolicyVersion`,D_t=`GetPolicyVersionRequest`,O_t=`GetPolicyVersionResponse`,k_t=`GetRole`,A_t=`GetRolePolicy`,j_t=`GetRolePolicyRequest`,M_t=`GetRolePolicyResponse`,N_t=`GetRoleRequest`,P_t=`GetRoleResponse`,F_t=`GetUser`,I_t=`GetUserPolicy`,L_t=`GetUserPolicyRequest`,R_t=`GetUserPolicyResponse`,z_t=`GetUserRequest`,B_t=`GetUserResponse`,m1=`Groups`,V_t=`IsAttachable`,H_t=`InvalidAuthenticationCodeException`,U_t=`InvalidCertificateException`,W_t=`IsDefaultVersion`,G_t=`InvalidInputException`,h1=`InstanceProfile`,K_t=`InstanceProfileId`,q_t=`InvalidPublicKeyException`,g1=`InstanceProfileName`,_1=`InstanceProfiles`,v1=`IsTruncated`,J_t=`InvalidUserTypeException`,Y_t=`Key`,X_t=`KeyPairMismatchException`,Z_t=`ListAttachedGroupPolicies`,Q_t=`ListAttachedGroupPoliciesRequest`,$_t=`ListAttachedGroupPoliciesResponse`,evt=`ListAccessKeys`,tvt=`ListAccessKeysRequest`,nvt=`ListAccessKeysResponse`,rvt=`ListAttachedRolePolicies`,ivt=`ListAttachedRolePoliciesRequest`,avt=`ListAttachedRolePoliciesResponse`,ovt=`ListAttachedUserPolicies`,svt=`ListAttachedUserPoliciesRequest`,cvt=`ListAttachedUserPoliciesResponse`,lvt=`LimitExceededException`,uvt=`ListGroups`,dvt=`ListGroupsForUser`,fvt=`ListGroupsForUserRequest`,pvt=`ListGroupsForUserResponse`,mvt=`ListGroupPolicies`,hvt=`ListGroupPoliciesRequest`,gvt=`ListGroupPoliciesResponse`,_vt=`ListGroupsRequest`,vvt=`ListGroupsResponse`,yvt=`ListInstanceProfiles`,bvt=`ListInstanceProfilesForRole`,xvt=`ListInstanceProfilesForRoleRequest`,Svt=`ListInstanceProfilesForRoleResponse`,Cvt=`ListInstanceProfilesRequest`,wvt=`ListInstanceProfilesResponse`,Tvt=`ListPoliciesRequest`,Evt=`ListPoliciesResponse`,Dvt=`ListPolicies`,Ovt=`ListRoles`,kvt=`ListRolePolicies`,Avt=`ListRolePoliciesRequest`,jvt=`ListRolePoliciesResponse`,Mvt=`ListRolesRequest`,Nvt=`ListRolesResponse`,Pvt=`ListUsers`,Fvt=`LastUsedDate`,Ivt=`ListUserPolicies`,Lvt=`ListUserPoliciesRequest`,Rvt=`ListUserPoliciesResponse`,zvt=`ListUsersRequest`,Bvt=`ListUsersResponse`,y1=`Message`,Vvt=`MalformedCertificateException`,b1=`MaxItems`,Hvt=`MalformedPolicyDocumentException`,x1=`MaxSessionDuration`,S1=`Marker`,Uvt=`NameConflictException`,Wvt=`NoSuchEntityException`,Gvt=`OnlyAttached`,Kvt=`OpenIdIdpCommunicationErrorException`,qvt=`OrganizationNotFoundException`,Jvt=`OrganizationNotInAllFeaturesModeException`,C1=`PolicyArn`,w1=`PermissionsBoundary`,Yvt=`PermissionsBoundaryArn`,Xvt=`PermissionsBoundaryType`,Zvt=`PermissionsBoundaryUsageCount`,T1=`PolicyDocument`,Qvt=`PolicyEvaluationException`,$vt=`PutGroupPolicy`,eyt=`PutGroupPolicyRequest`,tyt=`PolicyId`,nyt=`PasswordLastUsed`,E1=`PolicyName`,ryt=`PolicyNotAttachableException`,D1=`PolicyNames`,iyt=`PasswordPolicyViolationException`,O1=`PathPrefix`,ayt=`PutRolePolicyRequest`,oyt=`PutRolePolicy`,syt=`PolicyUsageFilter`,cyt=`PutUserPolicy`,lyt=`PutUserPolicyRequest`,k1=`PolicyVersion`,A1=`Path`,j1=`Policy`,uyt=`Policies`,dyt=`Region`,fyt=`ReportGenerationLimitExceededException`,pyt=`RoleId`,M1=`RoleLastUsed`,myt=`RoleModifiedException`,N1=`RoleName`,hyt=`RemoveRoleFromInstanceProfile`,gyt=`RemoveRoleFromInstanceProfileRequest`,_yt=`RoleTemplateDisabledException`,vyt=`RemoveUserFromGroup`,yyt=`RemoveUserFromGroupRequest`,P1=`Role`,F1=`Roles`,I1=`Status`,byt=`SecretAccessKey`,xyt=`ServiceAccessNotEnabledException`,Syt=`ServiceFailureException`,Cyt=`ServiceNotSupportedException`,L1=`SourceRoleTemplate`,wyt=`Scope`,R1=`Tags`,Tyt=`TemplateArn`,Eyt=`TemplateMinorVersion`,Dyt=`Tag`,Oyt=`UpdateAccessKey`,kyt=`UpdateAccessKeyRequest`,Ayt=`UpdateDate`,jyt=`UnmodifiableEntityException`,Myt=`UserId`,z1=`UserName`,Nyt=`UnrecognizedPublicKeyEncodingException`,B1=`User`,V1=`Users`,H1=`VersionId`,Pyt=`Value`,Fyt=`accessKeyMetadataListType`,Iyt=`accessKeySecretType`,Lyt=`attachedPoliciesListType`,U1=`awsQueryError`,W1=`client`,z=`error`,Ryt=`groupListType`,B=`httpError`,zyt=`instanceProfileListType`,G1=`message`,Byt=`policyListType`,Vyt=`roleListType`,K1=`smithy.ts.sdk.synthetic.com.amazonaws.iam`,q1=`server`,Hyt=`tagListType`,Uyt=`userListType`,V=`com.amazonaws.iam`,J1=new mt(K1),Wyt=[-3,K1,`IAMServiceException`,0,[],[]];J1.registerError(Wyt,R);var H=new mt(V),Gyt=[-3,V,egt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(Gyt,ght);var Kyt=[-3,V,_gt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(Kyt,Lht);var qyt=[-3,V,xgt,{[U1]:[`ConcurrentModification`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(qyt,pht);var Jyt=[-3,V,Egt,{[U1]:[`ReportExpired`,410],[z]:W1,[B]:410},[G1],[0]];H.registerError(Jyt,Bht);var Yyt=[-3,V,Dgt,{[U1]:[`ReportNotPresent`,410],[z]:W1,[B]:410},[G1],[0]];H.registerError(Yyt,Vht);var Xyt=[-3,V,Ogt,{[U1]:[`ReportInProgress`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(Xyt,Hht);var Zyt=[-3,V,Igt,{[U1]:[`DeleteConflict`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Zyt,jht);var Qyt=[-3,V,Lgt,{[U1]:[`DuplicateCertificate`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Qyt,qht);var $yt=[-3,V,e_t,{[U1]:[`DuplicateSSHPublicKey`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError($yt,Yht);var ebt=[-3,V,l_t,{[U1]:[`EntityAlreadyExists`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(ebt,_ht);var tbt=[-3,V,u_t,{[U1]:[`EntityTemporarilyUnmodifiable`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(tbt,Eht);var nbt=[-3,V,d_t,{[U1]:[`FeatureDisabled`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(nbt,Fht);var rbt=[-3,V,f_t,{[U1]:[`FeatureEnabled`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(rbt,Rht);var ibt=[-3,V,H_t,{[U1]:[`InvalidAuthenticationCode`,403],[z]:W1,[B]:403},[G1],[0]];H.registerError(ibt,Iht);var abt=[-3,V,U_t,{[U1]:[`InvalidCertificate`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(abt,Jht);var obt=[-3,V,G_t,{[U1]:[`InvalidInput`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(obt,vht);var sbt=[-3,V,q_t,{[U1]:[`InvalidPublicKey`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(sbt,Xht);var cbt=[-3,V,J_t,{[U1]:[`InvalidUserType`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(cbt,Dht);var lbt=[-3,V,X_t,{[U1]:[`KeyPairMismatch`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(lbt,Ght);var ubt=[-3,V,lvt,{[U1]:[`LimitExceeded`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(ubt,yht);var dbt=[-3,V,Vvt,{[U1]:[`MalformedCertificate`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(dbt,Kht);var fbt=[-3,V,Hvt,{[U1]:[`MalformedPolicyDocument`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(fbt,bht);var pbt=[-3,V,Uvt,{[U1]:[`NameConflict`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(pbt,xht);var mbt=[-3,V,Wvt,{[U1]:[`NoSuchEntity`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(mbt,mht);var hbt=[-3,V,Kvt,{[U1]:[`OpenIdIdpCommunicationError`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(hbt,kht);var gbt=[-3,V,qvt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(gbt,Mht);var _bt=[-3,V,Jvt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(_bt,Nht);var vbt=[-3,V,iyt,{[U1]:[`PasswordPolicyViolation`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(vbt,Oht);var ybt=[-3,V,Qvt,{[U1]:[`PolicyEvaluation`,500],[z]:q1,[B]:500},[G1],[0]];H.registerError(ybt,Wht);var bbt=[-3,V,ryt,{[U1]:[`PolicyNotAttachable`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(bbt,Tht);var xbt=[-3,V,fyt,{[U1]:[`ReportGenerationLimitExceeded`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(xbt,zht);var Sbt=[-3,V,myt,{[U1]:[`RoleModified`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Sbt,Sht);var Cbt=[-3,V,_yt,{[U1]:[`RoleTemplateDisabled`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Cbt,Cht);var wbt=[-3,V,xyt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(wbt,Pht);var Tbt=[-3,V,Syt,{[U1]:[`ServiceFailure`,500],[z]:q1,[B]:500},[G1],[0]];H.registerError(Tbt,hht);var Ebt=[-3,V,Cyt,{[U1]:[`NotSupportedService`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(Ebt,Aht);var Dbt=[-3,V,jyt,{[U1]:[`UnmodifiableEntity`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Dbt,wht);var Obt=[-3,V,Nyt,{[U1]:[`UnrecognizedPublicKeyEncoding`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Obt,Uht);var kbt=[J1,H],Abt=[0,V,Iyt,8,0],jbt=[3,V,a1,0,[z1,o1,I1,byt,u1],[0,0,0,[()=>Abt,0],4],4],Mbt=[3,V,s1,0,[z1,o1,I1,u1],[0,0,0,4]],Nbt=[3,V,ogt,0,[g1,N1],[0,0],2],Pbt=[3,V,ugt,0,[p1,z1],[0,0],2],Y1=[3,V,ngt,0,[Xvt,Yvt],[0,0]],Fbt=[3,V,tgt,0,[E1,C1],[0,0]],Ibt=[3,V,$ht,0,[p1,C1],[0,0],2],Lbt=[3,V,igt,0,[N1,C1],[0,0],2],Rbt=[3,V,cgt,0,[z1,C1],[0,0],2],zbt=[3,V,fgt,0,[z1],[0]],Bbt=[3,V,pgt,0,[a1],[[()=>jbt,0]],1],Vbt=[3,V,hgt,0,[p1,A1],[0,0],1],Hbt=[3,V,ggt,0,[f1],[()=>X1],1],Ubt=[3,V,ygt,0,[g1,A1,R1],[0,0,()=>o0],1],Wbt=[3,V,bgt,0,[h1],[()=>Z1],1],Gbt=[3,V,Sgt,0,[E1,T1,A1,d1,R1],[0,0,0,0,()=>o0],2],Kbt=[3,V,Cgt,0,[j1],[()=>Q1]],qbt=[3,V,kgt,0,[N1,l1,A1,d1,x1,w1,R1],[0,0,0,0,1,0,()=>o0],2],Jbt=[3,V,Agt,0,[P1],[()=>$1],1],Ybt=[3,V,Mgt,0,[z1,A1,w1,R1],[0,0,0,()=>o0],1],Xbt=[3,V,Ngt,0,[B1],[()=>e0]],Zbt=[3,V,Fgt,0,[o1,z1],[0,0],1],Qbt=[3,V,Bgt,0,[p1,E1],[0,0],2],$bt=[3,V,Ugt,0,[p1],[0],1],ext=[3,V,Ggt,0,[g1],[0],1],txt=[3,V,Kgt,0,[C1],[0],1],nxt=[3,V,Ygt,0,[N1,E1],[0,0],2],rxt=[3,V,Qgt,0,[N1],[0],1],ixt=[3,V,r_t,0,[z1,E1],[0,0],2],axt=[3,V,o_t,0,[z1],[0],1],oxt=[3,V,Vgt,0,[p1,C1],[0,0],2],sxt=[3,V,Xgt,0,[N1,C1],[0,0],2],cxt=[3,V,i_t,0,[z1,C1],[0,0],2],lxt=[3,V,h_t,0,[p1,E1],[0,0],2],uxt=[3,V,g_t,0,[p1,E1,T1],[0,0,0],3],dxt=[3,V,__t,0,[p1,S1,b1],[0,0,1],1],fxt=[3,V,v_t,0,[f1,V1,v1,S1],[()=>X1,()=>s0,2,0],2],pxt=[3,V,x_t,0,[g1],[0],1],mxt=[3,V,S_t,0,[h1],[()=>Z1],1],hxt=[3,V,w_t,0,[C1],[0],1],gxt=[3,V,T_t,0,[j1],[()=>Q1]],_xt=[3,V,D_t,0,[C1,H1],[0,0],2],vxt=[3,V,O_t,0,[k1],[()=>tSt]],yxt=[3,V,j_t,0,[N1,E1],[0,0],2],bxt=[3,V,M_t,0,[N1,E1,T1],[0,0,0],3],xxt=[3,V,N_t,0,[N1],[0],1],Sxt=[3,V,P_t,0,[P1],[()=>$1],1],Cxt=[3,V,L_t,0,[z1,E1],[0,0],2],wxt=[3,V,R_t,0,[z1,E1,T1],[0,0,0],3],Txt=[3,V,z_t,0,[z1],[0]],Ext=[3,V,B_t,0,[B1],[()=>e0],1],X1=[3,V,f1,0,[A1,p1,y_t,i1,u1],[0,0,0,0,4],5],Z1=[3,V,h1,0,[A1,g1,K_t,i1,u1,F1,R1],[0,0,0,0,4,()=>a0,()=>o0],6],Dxt=[3,V,tvt,0,[z1,S1,b1],[0,0,1]],Oxt=[3,V,nvt,0,[s1,v1,S1],[()=>dSt,2,0],1],kxt=[3,V,Q_t,0,[p1,O1,S1,b1],[0,0,0,1],1],Axt=[3,V,$_t,0,[c1,v1,S1],[()=>n0,2,0]],jxt=[3,V,ivt,0,[N1,O1,S1,b1],[0,0,0,1],1],Mxt=[3,V,avt,0,[c1,v1,S1],[()=>n0,2,0]],Nxt=[3,V,svt,0,[z1,O1,S1,b1],[0,0,0,1],1],Pxt=[3,V,cvt,0,[c1,v1,S1],[()=>n0,2,0]],Fxt=[3,V,hvt,0,[p1,S1,b1],[0,0,1],1],Ixt=[3,V,gvt,0,[D1,v1,S1],[64,2,0],1],Lxt=[3,V,fvt,0,[z1,S1,b1],[0,0,1],1],Rxt=[3,V,pvt,0,[m1,v1,S1],[()=>r0,2,0],1],zxt=[3,V,_vt,0,[O1,S1,b1],[0,0,1]],Bxt=[3,V,vvt,0,[m1,v1,S1],[()=>r0,2,0],1],Vxt=[3,V,xvt,0,[N1,S1,b1],[0,0,1],1],Hxt=[3,V,Svt,0,[_1,v1,S1],[()=>i0,2,0],1],Uxt=[3,V,Cvt,0,[O1,S1,b1],[0,0,1]],Wxt=[3,V,wvt,0,[_1,v1,S1],[()=>i0,2,0],1],Gxt=[3,V,Tvt,0,[wyt,Gvt,O1,syt,S1,b1],[0,2,0,0,0,1]],Kxt=[3,V,Evt,0,[uyt,v1,S1],[()=>fSt,2,0]],qxt=[3,V,Avt,0,[N1,S1,b1],[0,0,1],1],Jxt=[3,V,jvt,0,[D1,v1,S1],[64,2,0],1],Yxt=[3,V,Mvt,0,[O1,S1,b1],[0,0,1]],Xxt=[3,V,Nvt,0,[F1,v1,S1],[()=>a0,2,0],1],Zxt=[3,V,Lvt,0,[z1,S1,b1],[0,0,1],1],Qxt=[3,V,Rvt,0,[D1,v1,S1],[64,2,0],1],$xt=[3,V,zvt,0,[O1,S1,b1],[0,0,1]],eSt=[3,V,Bvt,0,[V1,v1,S1],[()=>s0,2,0],1],Q1=[3,V,j1,0,[E1,tyt,i1,A1,s_t,Zht,Zvt,V_t,d1,u1,Ayt,R1],[0,0,0,0,0,1,1,2,0,4,4,()=>o0]],tSt=[3,V,k1,0,[c_t,H1,W_t,u1],[0,0,2,4]],nSt=[3,V,eyt,0,[p1,E1,T1],[0,0,0],3],rSt=[3,V,ayt,0,[N1,E1,T1],[0,0,0],3],iSt=[3,V,lyt,0,[z1,E1,T1],[0,0,0],3],aSt=[3,V,gyt,0,[g1,N1],[0,0],2],oSt=[3,V,yyt,0,[p1,z1],[0,0],2],$1=[3,V,P1,0,[A1,N1,pyt,i1,u1,l1,d1,x1,w1,R1,M1,L1],[0,0,0,0,4,0,0,1,()=>Y1,()=>o0,()=>sSt,()=>cSt],5],sSt=[3,V,M1,0,[Fvt,dyt],[4,0]],cSt=[3,V,L1,0,[Tyt,Eyt],[0,1],2],lSt=[3,V,Dyt,0,[Y_t,Pyt],[0,0],2],uSt=[3,V,kyt,0,[o1,I1,z1],[0,0,0],2],e0=[3,V,B1,0,[A1,z1,Myt,i1,u1,nyt,w1,R1],[0,0,0,0,4,4,()=>Y1,()=>o0],5],t0=`unit`,dSt=[1,V,Fyt,0,()=>Mbt],n0=[1,V,Lyt,0,()=>Fbt],r0=[1,V,Ryt,0,()=>X1],i0=[1,V,zyt,0,()=>Z1],fSt=[1,V,Byt,0,()=>Q1],a0=[1,V,Vyt,0,()=>$1],o0=[1,V,Hyt,0,()=>lSt],s0=[1,V,Uyt,0,()=>e0],pSt=[9,V,agt,0,()=>Nbt,()=>t0],mSt=[9,V,lgt,0,()=>Pbt,()=>t0],hSt=[9,V,Qht,0,()=>Ibt,()=>t0],gSt=[9,V,rgt,0,()=>Lbt,()=>t0],_St=[9,V,sgt,0,()=>Rbt,()=>t0],vSt=[9,V,dgt,0,()=>zbt,()=>Bbt],ySt=[9,V,mgt,0,()=>Vbt,()=>Hbt],bSt=[9,V,vgt,0,()=>Ubt,()=>Wbt],xSt=[9,V,wgt,0,()=>Gbt,()=>Kbt],SSt=[9,V,Tgt,0,()=>qbt,()=>Jbt],CSt=[9,V,jgt,0,()=>Ybt,()=>Xbt],wSt=[9,V,Pgt,0,()=>Zbt,()=>t0],TSt=[9,V,Rgt,0,()=>$bt,()=>t0],ESt=[9,V,zgt,0,()=>Qbt,()=>t0],DSt=[9,V,Wgt,0,()=>ext,()=>t0],OSt=[9,V,qgt,0,()=>txt,()=>t0],kSt=[9,V,$gt,0,()=>rxt,()=>t0],ASt=[9,V,Jgt,0,()=>nxt,()=>t0],jSt=[9,V,t_t,0,()=>axt,()=>t0],MSt=[9,V,n_t,0,()=>ixt,()=>t0],NSt=[9,V,Hgt,0,()=>oxt,()=>t0],PSt=[9,V,Zgt,0,()=>sxt,()=>t0],FSt=[9,V,a_t,0,()=>cxt,()=>t0],ISt=[9,V,p_t,0,()=>dxt,()=>fxt],LSt=[9,V,m_t,0,()=>lxt,()=>uxt],RSt=[9,V,b_t,0,()=>pxt,()=>mxt],zSt=[9,V,C_t,0,()=>hxt,()=>gxt],BSt=[9,V,E_t,0,()=>_xt,()=>vxt],VSt=[9,V,k_t,0,()=>xxt,()=>Sxt],HSt=[9,V,A_t,0,()=>yxt,()=>bxt],USt=[9,V,F_t,0,()=>Txt,()=>Ext],WSt=[9,V,I_t,0,()=>Cxt,()=>wxt],GSt=[9,V,evt,0,()=>Dxt,()=>Oxt],KSt=[9,V,Z_t,0,()=>kxt,()=>Axt],qSt=[9,V,rvt,0,()=>jxt,()=>Mxt],JSt=[9,V,ovt,0,()=>Nxt,()=>Pxt],YSt=[9,V,mvt,0,()=>Fxt,()=>Ixt],XSt=[9,V,uvt,0,()=>zxt,()=>Bxt],ZSt=[9,V,dvt,0,()=>Lxt,()=>Rxt],QSt=[9,V,yvt,0,()=>Uxt,()=>Wxt],$St=[9,V,bvt,0,()=>Vxt,()=>Hxt],eCt=[9,V,Dvt,0,()=>Gxt,()=>Kxt],tCt=[9,V,kvt,0,()=>qxt,()=>Jxt],nCt=[9,V,Ovt,0,()=>Yxt,()=>Xxt],rCt=[9,V,Ivt,0,()=>Zxt,()=>Qxt],iCt=[9,V,Pvt,0,()=>$xt,()=>eSt],aCt=[9,V,$vt,0,()=>nSt,()=>t0],oCt=[9,V,oyt,0,()=>rSt,()=>t0],sCt=[9,V,cyt,0,()=>iSt,()=>t0],cCt=[9,V,hyt,0,()=>aSt,()=>t0],lCt=[9,V,vyt,0,()=>oSt,()=>t0],uCt=[9,V,Oyt,0,()=>uSt,()=>t0],dCt=e=>({apiVersion:`2010-05-08`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??fht,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??rht,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Re,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.iam`,errorTypeRegistries:kbt,xmlNamespace:`https://iam.amazonaws.com/doc/2010-05-08/`,version:`2010-05-08`,serviceTarget:`AWSIdentityManagementV20100508`},serviceId:e?.serviceId??`IAM`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),fCt=e=>{let t=te(e),n=()=>t().then(Ae),r=dCt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:sht.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},pCt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},mCt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),hCt=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),pCt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),mCt(n))},gCt=class extends tt{config;constructor(...[t]){let n=fCt(t||{});super(n),this.initConfig=n;let r=aht(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=hCt(iht(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:tht,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},_Ct=async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function vCt(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`rds`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var yCt=e=>{let t=[];return e.operation,t.push(vCt(e)),t},bCt=e=>{let t=ge(e);return Object.assign(t,{authSchemePreference:Ie(e.authSchemePreference??[])})},xCt=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`rds`}),SCt={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},CCt={name:`@aws-sdk/client-rds`,version:`3.1144.0`,description:`AWS SDK for JavaScript Rds Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-rds`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-rds`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/middleware-sdk-rds":`^3.972.60`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},c0=`ref`,l0=-1,u0=!0,d0=`isSet`,f0=`PartitionResult`,p0=`booleanEquals`,m0=`getAttr`,h0={[c0]:`Endpoint`},g0={[c0]:f0},_0={},v0=[{[c0]:`Region`}],y0={conditions:[[d0,[h0]],[d0,v0],[`aws.partition`,v0,f0],[p0,[{[c0]:`UseFIPS`},u0]],[p0,[{[c0]:`UseDualStack`},u0]],[p0,[{fn:m0,argv:[g0,`supportsDualStack`]},u0]],[p0,[{fn:m0,argv:[g0,`supportsFIPS`]},u0]],[`stringEquals`,[{fn:m0,argv:[g0,`name`]},`aws-us-gov`]]],results:[[l0],[l0,`Invalid Configuration: FIPS and custom endpoint are not supported`],[l0,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[h0,_0],[`https://rds-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,_0],[l0,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://rds.{Region}.amazonaws.com`,_0],[`https://rds-fips.{Region}.{PartitionResult#dnsSuffix}`,_0],[l0,`FIPS is enabled but this partition does not support FIPS`],[`https://rds.{Region}.{PartitionResult#dualStackDnsSuffix}`,_0],[l0,`DualStack is enabled but this partition does not support DualStack`],[`https://rds.{Region}.{PartitionResult#dnsSuffix}`,_0],[l0,`Invalid Configuration: Missing Region`]]},wCt=2,TCt=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),ECt=s.from(TCt,wCt,y0.conditions,y0.results),DCt=new Te({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),OCt=(e,t={})=>DCt.get(e,()=>ze(ECt,{endpointParams:e,logger:t.logger}));lt.aws=de;var U=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},kCt=class e extends U{name=`DBClusterNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ACt=class e extends U{name=`DBClusterRoleAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jCt=class e extends U{name=`DBClusterRoleQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MCt=class e extends U{name=`InvalidDBClusterStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NCt=class e extends U{name=`DBInstanceNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PCt=class e extends U{name=`DBInstanceRoleAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FCt=class e extends U{name=`DBInstanceRoleQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ICt=class e extends U{name=`InvalidDBInstanceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBInstanceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LCt=class e extends U{name=`SourceNotFoundFault`;$fault=`client`;constructor(t){super({name:`SourceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RCt=class e extends U{name=`SubscriptionNotFoundFault`;$fault=`client`;constructor(t){super({name:`SubscriptionNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zCt=class e extends U{name=`BlueGreenDeploymentNotFoundFault`;$fault=`client`;constructor(t){super({name:`BlueGreenDeploymentNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BCt=class e extends U{name=`DBProxyEndpointNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VCt=class e extends U{name=`DBProxyNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HCt=class e extends U{name=`DBProxyTargetGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},UCt=class e extends U{name=`DBShardGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBShardGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},WCt=class e extends U{name=`DBSnapshotNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},GCt=class e extends U{name=`DBSnapshotTenantDatabaseNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotTenantDatabaseNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},KCt=class e extends U{name=`IntegrationNotFoundFault`;$fault=`client`;constructor(t){super({name:`IntegrationNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qCt=class e extends U{name=`InvalidDBClusterEndpointStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterEndpointStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},JCt=class e extends U{name=`TenantDatabaseNotFoundFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},YCt=class e extends U{name=`ResourceNotFoundFault`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},XCt=class e extends U{name=`AuthorizationAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`AuthorizationAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ZCt=class e extends U{name=`AuthorizationQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`AuthorizationQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QCt=class e extends U{name=`DBSecurityGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Ct=class e extends U{name=`InvalidDBSecurityGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSecurityGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ewt=class e extends U{name=`ExportTaskNotFoundFault`;$fault=`client`;constructor(t){super({name:`ExportTaskNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},twt=class e extends U{name=`InvalidExportTaskStateFault`;$fault=`client`;constructor(t){super({name:`InvalidExportTaskStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nwt=class e extends U{name=`DBParameterGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rwt=class e extends U{name=`DBParameterGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iwt=class e extends U{name=`DBParameterGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},awt=class e extends U{name=`DBClusterSnapshotAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterSnapshotAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},owt=class e extends U{name=`DBClusterSnapshotNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterSnapshotNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},swt=class e extends U{name=`InvalidDBClusterSnapshotStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterSnapshotStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cwt=class e extends U{name=`KMSKeyNotAccessibleFault`;$fault=`client`;constructor(t){super({name:`KMSKeyNotAccessibleFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lwt=class e extends U{name=`SnapshotQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`SnapshotQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uwt=class e extends U{name=`CustomAvailabilityZoneNotFoundFault`;$fault=`client`;constructor(t){super({name:`CustomAvailabilityZoneNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dwt=class e extends U{name=`DBSnapshotAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fwt=class e extends U{name=`InvalidDBSnapshotStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSnapshotStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pwt=class e extends U{name=`OptionGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`OptionGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mwt=class e extends U{name=`OptionGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`OptionGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hwt=class e extends U{name=`OptionGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`OptionGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gwt=class e extends U{name=`BlueGreenDeploymentAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`BlueGreenDeploymentAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_wt=class e extends U{name=`DBClusterParameterGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterParameterGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vwt=class e extends U{name=`DBClusterQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ywt=class e extends U{name=`InstanceQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`InstanceQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bwt=class e extends U{name=`SourceClusterNotSupportedFault`;$fault=`client`;constructor(t){super({name:`SourceClusterNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xwt=class e extends U{name=`SourceDatabaseNotSupportedFault`;$fault=`client`;constructor(t){super({name:`SourceDatabaseNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Swt=class e extends U{name=`StorageQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`StorageQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cwt=class e extends U{name=`CreateCustomDBEngineVersionFault`;$fault=`client`;constructor(t){super({name:`CreateCustomDBEngineVersionFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wwt=class e extends U{name=`CustomDBEngineVersionAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Twt=class e extends U{name=`CustomDBEngineVersionNotFoundFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ewt=class e extends U{name=`CustomDBEngineVersionQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dwt=class e extends U{name=`Ec2ImagePropertiesNotSupportedFault`;$fault=`client`;constructor(t){super({name:`Ec2ImagePropertiesNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Owt=class e extends U{name=`InvalidCustomDBEngineVersionStateFault`;$fault=`client`;constructor(t){super({name:`InvalidCustomDBEngineVersionStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kwt=class e extends U{name=`DBClusterAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Awt=class e extends U{name=`DBSubnetGroupDoesNotCoverEnoughAZs`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupDoesNotCoverEnoughAZs`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jwt=class e extends U{name=`DBSubnetGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mwt=class e extends U{name=`DomainNotFoundFault`;$fault=`client`;constructor(t){super({name:`DomainNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Nwt=class e extends U{name=`GlobalClusterNotFoundFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Pwt=class e extends U{name=`InsufficientDBInstanceCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientDBInstanceCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Fwt=class e extends U{name=`InsufficientStorageClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientStorageClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Iwt=class e extends U{name=`InvalidDBSubnetGroupFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetGroupFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Lwt=class e extends U{name=`InvalidDBSubnetGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Rwt=class e extends U{name=`InvalidGlobalClusterStateFault`;$fault=`client`;constructor(t){super({name:`InvalidGlobalClusterStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zwt=class e extends U{name=`InvalidSubnet`;$fault=`client`;constructor(t){super({name:`InvalidSubnet`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bwt=class e extends U{name=`InvalidVPCNetworkStateFault`;$fault=`client`;constructor(t){super({name:`InvalidVPCNetworkStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Vwt=class e extends U{name=`NetworkTypeNotSupported`;$fault=`client`;constructor(t){super({name:`NetworkTypeNotSupported`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Hwt=class e extends U{name=`StorageTypeNotSupportedFault`;$fault=`client`;constructor(t){super({name:`StorageTypeNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Uwt=class e extends U{name=`VpcEncryptionControlViolationException`;$fault=`client`;constructor(t){super({name:`VpcEncryptionControlViolationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Wwt=class e extends U{name=`DBClusterEndpointAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Gwt=class e extends U{name=`DBClusterEndpointQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Kwt=class e extends U{name=`AuthorizationNotFoundFault`;$fault=`client`;constructor(t){super({name:`AuthorizationNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qwt=class e extends U{name=`BackupPolicyNotFoundFault`;$fault=`client`;constructor(t){super({name:`BackupPolicyNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Jwt=class e extends U{name=`CertificateNotFoundFault`;$fault=`client`;constructor(t){super({name:`CertificateNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ywt=class e extends U{name=`DBInstanceAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xwt=class e extends U{name=`ProvisionedIopsNotAvailableInAZFault`;$fault=`client`;constructor(t){super({name:`ProvisionedIopsNotAvailableInAZFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zwt=class e extends U{name=`TenantDatabaseQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qwt=class e extends U{name=`DBSubnetGroupNotAllowedFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupNotAllowedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$wt=class e extends U{name=`DBProxyAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBProxyAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},eTt=class e extends U{name=`DBProxyQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBProxyQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tTt=class e extends U{name=`DBProxyEndpointAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nTt=class e extends U{name=`DBProxyEndpointQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rTt=class e extends U{name=`InvalidDBProxyStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBProxyStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iTt=class e extends U{name=`DBSecurityGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aTt=class e extends U{name=`DBSecurityGroupNotSupportedFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oTt=class e extends U{name=`DBSecurityGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sTt=class e extends U{name=`DBShardGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBShardGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cTt=class e extends U{name=`MaxDBShardGroupLimitReached`;$fault=`client`;constructor(t){super({name:`MaxDBShardGroupLimitReached`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lTt=class e extends U{name=`UnsupportedDBEngineVersionFault`;$fault=`client`;constructor(t){super({name:`UnsupportedDBEngineVersionFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uTt=class e extends U{name=`DBSubnetGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dTt=class e extends U{name=`DBSubnetGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fTt=class e extends U{name=`DBSubnetQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSubnetQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pTt=class e extends U{name=`EventSubscriptionQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`EventSubscriptionQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mTt=class e extends U{name=`SNSInvalidTopicFault`;$fault=`client`;constructor(t){super({name:`SNSInvalidTopicFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hTt=class e extends U{name=`SNSNoAuthorizationFault`;$fault=`client`;constructor(t){super({name:`SNSNoAuthorizationFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gTt=class e extends U{name=`SNSTopicArnNotFoundFault`;$fault=`client`;constructor(t){super({name:`SNSTopicArnNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_Tt=class e extends U{name=`SubscriptionAlreadyExistFault`;$fault=`client`;constructor(t){super({name:`SubscriptionAlreadyExistFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vTt=class e extends U{name=`SubscriptionCategoryNotFoundFault`;$fault=`client`;constructor(t){super({name:`SubscriptionCategoryNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yTt=class e extends U{name=`GlobalClusterAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bTt=class e extends U{name=`GlobalClusterQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xTt=class e extends U{name=`InvalidDBShardGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBShardGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},STt=class e extends U{name=`IntegrationAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`IntegrationAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CTt=class e extends U{name=`IntegrationConflictOperationFault`;$fault=`client`;constructor(t){super({name:`IntegrationConflictOperationFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wTt=class e extends U{name=`IntegrationQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`IntegrationQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TTt=class e extends U{name=`TenantDatabaseAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ETt=class e extends U{name=`InvalidBlueGreenDeploymentStateFault`;$fault=`client`;constructor(t){super({name:`InvalidBlueGreenDeploymentStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DTt=class e extends U{name=`DBClusterAutomatedBackupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterAutomatedBackupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OTt=class e extends U{name=`DBClusterAutomatedBackupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterAutomatedBackupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kTt=class e extends U{name=`InvalidDBClusterAutomatedBackupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterAutomatedBackupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ATt=class e extends U{name=`DBClusterEndpointNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jTt=class e extends U{name=`InvalidDBParameterGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBParameterGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MTt=class e extends U{name=`DBInstanceAutomatedBackupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAutomatedBackupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NTt=class e extends U{name=`DBInstanceAutomatedBackupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAutomatedBackupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PTt=class e extends U{name=`InvalidDBInstanceAutomatedBackupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBInstanceAutomatedBackupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FTt=class e extends U{name=`InvalidDBProxyEndpointStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBProxyEndpointStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ITt=class e extends U{name=`InvalidDBSubnetStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LTt=class e extends U{name=`InvalidEventSubscriptionStateFault`;$fault=`client`;constructor(t){super({name:`InvalidEventSubscriptionStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RTt=class e extends U{name=`InvalidIntegrationStateFault`;$fault=`client`;constructor(t){super({name:`InvalidIntegrationStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zTt=class e extends U{name=`InvalidOptionGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidOptionGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BTt=class e extends U{name=`DBProxyTargetNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VTt=class e extends U{name=`DBClusterBacktrackNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterBacktrackNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HTt=class e extends U{name=`DBInstanceNotReadyFault`;$fault=`client`;constructor(t){super({name:`DBInstanceNotReadyFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},UTt=class e extends U{name=`ReservedDBInstanceNotFoundFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},WTt=class e extends U{name=`ReservedDBInstancesOfferingNotFoundFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstancesOfferingNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},GTt=class e extends U{name=`InvalidResourceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidResourceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},KTt=class e extends U{name=`DBLogFileNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBLogFileNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qTt=class e extends U{name=`InvalidDBClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},JTt=class e extends U{name=`StorageTypeNotAvailableFault`;$fault=`client`;constructor(t){super({name:`StorageTypeNotAvailableFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},YTt=class e extends U{name=`SharedSnapshotQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`SharedSnapshotQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},XTt=class e extends U{name=`DBUpgradeDependencyFailureFault`;$fault=`client`;constructor(t){super({name:`DBUpgradeDependencyFailureFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ZTt=class e extends U{name=`SubnetAlreadyInUse`;$fault=`client`;constructor(t){super({name:`SubnetAlreadyInUse`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QTt=class e extends U{name=`ReservedDBInstanceAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Tt=class e extends U{name=`ReservedDBInstanceQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},eEt=class e extends U{name=`DBProxyTargetAlreadyRegisteredFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetAlreadyRegisteredFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tEt=class e extends U{name=`InsufficientAvailableIPsInSubnetFault`;$fault=`client`;constructor(t){super({name:`InsufficientAvailableIPsInSubnetFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nEt=class e extends U{name=`DBClusterRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rEt=class e extends U{name=`DBInstanceRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iEt=class e extends U{name=`InvalidS3BucketFault`;$fault=`client`;constructor(t){super({name:`InvalidS3BucketFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aEt=class e extends U{name=`InsufficientDBClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientDBClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oEt=class e extends U{name=`InvalidRestoreFault`;$fault=`client`;constructor(t){super({name:`InvalidRestoreFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sEt=class e extends U{name=`PointInTimeRestoreNotEnabledFault`;$fault=`client`;constructor(t){super({name:`PointInTimeRestoreNotEnabledFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cEt=class e extends U{name=`ExportTaskAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`ExportTaskAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lEt=class e extends U{name=`IamRoleMissingPermissionsFault`;$fault=`client`;constructor(t){super({name:`IamRoleMissingPermissionsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uEt=class e extends U{name=`IamRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`IamRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dEt=class e extends U{name=`InvalidExportOnlyFault`;$fault=`client`;constructor(t){super({name:`InvalidExportOnlyFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fEt=class e extends U{name=`InvalidExportSourceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidExportSourceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pEt=`AuthorizationAlreadyExistsFault`,b0=`AvailableAdditionalStorageVolumesOption`,mEt=`AvailableAdditionalStorageVolumesOptionList`,hEt=`AvailableAdditionalStorageVolumesOptions`,x0=`AwsBackupRecoveryPointArn`,gEt=`ApplyImmediately`,S0=`AutomationMode`,C0=`AutoMinorVersionUpgrade`,_Et=`AllowMajorVersionUpgrade`,vEt=`ApplyMethod`,yEt=`AuthorizationNotFoundFault`,w0=`AvailableProcessorFeature`,bEt=`AvailableProcessorFeatureList`,xEt=`AvailableProcessorFeatures`,SEt=`AuthorizationQuotaExceededFault`,CEt=`AssociatedRoles`,wEt=`AutomaticRestartTime`,T0=`AllocatedStorage`,TEt=`AuthSecretArn`,EEt=`ActivityStreamEngineNativeAuditFieldsIncluded`,DEt=`ActivityStreamKmsKeyId`,OEt=`ActivityStreamKinesisStreamName`,kEt=`ActivityStreamMode`,AEt=`ActivityStreamPolicyStatus`,jEt=`ActivityStreamStatus`,MEt=`AdditionalStorageVolume`,NEt=`AdditionalStorageVolumesList`,PEt=`AdditionalStorageVolumeOutput`,FEt=`AdditionalStorageVolumesOutputList`,E0=`AdditionalStorageVolumes`,IEt=`ApplyType`,LEt=`AddTagsToResource`,REt=`AddTagsToResourceMessage`,zEt=`AutoUpgrade`,D0=`AllowedValues`,O0=`AvailabilityZone`,k0=`AvailabilityZoneGroup`,BEt=`AvailabilityZoneList`,VEt=`AvailabilityZones`,HEt=`Address`,UEt=`Arn`,WEt=`BlueGreenDeploymentAlreadyExistsFault`,GEt=`BlueGreenDeploymentNotFoundFault`,KEt=`BackupPolicyNotFoundFault`,A0=`BackupRetentionPeriod`,j0=`BackupTarget`,M0=`CACertificateIdentifier`,qEt=`CAIdentifier`,JEt=`CustomAvailabilityZoneNotFoundFault`,YEt=`CreateCustomDBEngineVersionFault`,N0=`CertificateDetails`,XEt=`CustomDBEngineVersionAlreadyExistsFault`,ZEt=`CustomDBEngineVersionAMI`,QEt=`CustomDBEngineVersionManifest`,$Et=`CustomDBEngineVersionNotFoundFault`,eDt=`CustomDBEngineVersionQuotaExceededFault`,tDt=`CreateDBInstance`,nDt=`CreateDBInstanceMessage`,rDt=`CreateDBInstanceResult`,iDt=`CreateDBParameterGroupMessage`,aDt=`CreateDBParameterGroupResult`,oDt=`CreateDBParameterGroup`,sDt=`CreateDBSubnetGroupMessage`,cDt=`CreateDBSubnetGroupResult`,lDt=`CreateDBSubnetGroup`,uDt=`CreateDBSnapshotMessage`,dDt=`CreateDBSnapshotResult`,fDt=`CreateDBSnapshot`,P0=`CustomIamInstanceProfile`,F0=`CloudwatchLogsExportConfiguration`,pDt=`CertificateNotFoundFault`,mDt=`CustomerOwnedIpEnabled`,hDt=`CertificateRotationRestart`,I0=`CharacterSet`,gDt=`CharacterSetDescription`,L0=`CharacterSetName`,_Dt=`CreateTime`,R0=`CopyTagsToSnapshot`,z0=`Description`,vDt=`DeleteAutomatedBackups`,B0=`DomainAuthSecretArn`,yDt=`DBClusterAutomatedBackupNotFoundFault`,bDt=`DBClusterAutomatedBackupQuotaExceededFault`,xDt=`DBClusterAlreadyExistsFault`,SDt=`DBClusterBacktrackNotFoundFault`,CDt=`DBClusterEndpointAlreadyExistsFault`,wDt=`DBClusterEndpointNotFoundFault`,TDt=`DBClusterEndpointQuotaExceededFault`,V0=`DBClusterIdentifier`,EDt=`DBClusterNotFoundFault`,DDt=`DBClusterParameterGroupNotFoundFault`,ODt=`DBClusterQuotaExceededFault`,kDt=`DBClusterRoleAlreadyExistsFault`,ADt=`DBClusterRoleNotFoundFault`,jDt=`DBClusterRoleQuotaExceededFault`,MDt=`DBClusterSnapshotAlreadyExistsFault`,NDt=`DBClusterSnapshotIdentifier`,PDt=`DBClusterSnapshotNotFoundFault`,FDt=`DBEngineDescription`,IDt=`DBEngineMediaType`,H0=`DBEngineVersion`,LDt=`DBEngineVersionArn`,RDt=`DBEngineVersionDescription`,zDt=`DBEngineVersionList`,BDt=`DBEngineVersionMessage`,VDt=`DBEngineVersions`,U0=`DBInstance`,W0=`DBInstanceArn`,G0=`DBInstanceAutomatedBackup`,K0=`DBInstanceAutomatedBackupsArn`,HDt=`DBInstanceAutomatedBackupList`,UDt=`DBInstanceAutomatedBackupMessage`,WDt=`DBInstanceAutomatedBackupNotFoundFault`,GDt=`DBInstanceAutomatedBackupQuotaExceededFault`,q0=`DBInstanceAutomatedBackupsReplications`,KDt=`DBInstanceAutomatedBackupsReplicationList`,J0=`DBInstanceAutomatedBackupsReplication`,qDt=`DBInstanceAutomatedBackups`,JDt=`DBInstanceAlreadyExistsFault`,Y0=`DBInstanceClass`,X0=`DBInstanceIdentifier`,YDt=`DBInstanceList`,XDt=`DBInstanceMessage`,ZDt=`DBInstanceNotFoundFault`,QDt=`DBInstanceNotReadyFault`,Z0=`DBInstanceRole`,$Dt=`DBInstanceRoleAlreadyExistsFault`,eOt=`DBInstanceRoleNotFoundFault`,tOt=`DBInstanceRoleQuotaExceededFault`,nOt=`DBInstanceRoles`,rOt=`DBInstanceStatus`,Q0=`DBInstanceStatusInfo`,iOt=`DBInstanceStatusInfoList`,aOt=`DBInstances`,oOt=`DBLogFileNotFoundFault`,$0=`DBName`,sOt=`DBProxyAlreadyExistsFault`,cOt=`DBProxyEndpointAlreadyExistsFault`,lOt=`DBProxyEndpointNotFoundFault`,uOt=`DBProxyEndpointQuotaExceededFault`,e2=`DBParameterGroup`,dOt=`DBParameterGroupArn`,fOt=`DBParameterGroupAlreadyExistsFault`,pOt=`DBParameterGroupDetails`,t2=`DBParameterGroupFamily`,mOt=`DBParameterGroupList`,hOt=`DBParameterGroupsMessage`,n2=`DBParameterGroupName`,gOt=`DBParameterGroupNotFoundFault`,_Ot=`DBParameterGroupNameMessage`,vOt=`DBParameterGroupQuotaExceededFault`,yOt=`DBParameterGroupStatus`,bOt=`DBParameterGroupStatusList`,r2=`DBParameterGroups`,xOt=`DBProxyNotFoundFault`,SOt=`DBPortNumber`,COt=`DBProxyQuotaExceededFault`,wOt=`DBProxyTargetAlreadyRegisteredFault`,TOt=`DBProxyTargetGroupNotFoundFault`,EOt=`DBProxyTargetNotFoundFault`,i2=`DBSnapshot`,DOt=`DBSnapshotArn`,OOt=`DBSnapshotAlreadyExistsFault`,kOt=`DBSecurityGroup`,AOt=`DBSecurityGroupAlreadyExistsFault`,jOt=`DBShardGroupAlreadyExistsFault`,MOt=`DBSubnetGroupAlreadyExistsFault`,NOt=`DBSubnetGroupArn`,POt=`DBSubnetGroupDoesNotCoverEnoughAZs`,a2=`DBSubnetGroupDescription`,FOt=`DBSecurityGroupMembership`,IOt=`DBSecurityGroupMembershipList`,LOt=`DBSubnetGroupMessage`,o2=`DBSecurityGroupName`,ROt=`DBSubnetGroupNotAllowedFault`,zOt=`DBSecurityGroupNotFoundFault`,BOt=`DBShardGroupNotFoundFault`,VOt=`DBSubnetGroupNotFoundFault`,HOt=`DBSecurityGroupNameList`,UOt=`DBSecurityGroupNotSupportedFault`,s2=`DBSubnetGroupName`,WOt=`DBSecurityGroupQuotaExceededFault`,GOt=`DBSubnetGroupQuotaExceededFault`,c2=`DBSecurityGroups`,l2=`DBSubnetGroup`,u2=`DBSubnetGroups`,d2=`DBSystemId`,f2=`DBSnapshotIdentifier`,KOt=`DBSnapshotList`,qOt=`DBSnapshotMessage`,JOt=`DBSnapshotNotFoundFault`,YOt=`DBSubnetQuotaExceededFault`,XOt=`DBSnapshotTenantDatabaseNotFoundFault`,ZOt=`DBSnapshots`,QOt=`DBUpgradeDependencyFailureFault`,$Ot=`DefaultCharacterSet`,ekt=`DisableDomain`,tkt=`DescribeDBEngineVersions`,nkt=`DescribeDBEngineVersionsMessage`,rkt=`DeleteDBInstance`,ikt=`DescribeDBInstanceAutomatedBackupsMessage`,akt=`DescribeDBInstanceAutomatedBackups`,okt=`DeleteDBInstanceMessage`,skt=`DescribeDBInstancesMessage`,ckt=`DeleteDBInstanceResult`,lkt=`DescribeDBInstances`,ukt=`DeleteDBParameterGroup`,dkt=`DeleteDBParameterGroupMessage`,fkt=`DescribeDBParameterGroupsMessage`,pkt=`DescribeDBParameterGroups`,mkt=`DescribeDBParametersMessage`,hkt=`DescribeDBParameters`,gkt=`DeleteDBSnapshot`,_kt=`DeleteDBSubnetGroupMessage`,vkt=`DescribeDBSubnetGroupsMessage`,ykt=`DeleteDBSubnetGroup`,bkt=`DescribeDBSubnetGroups`,xkt=`DeleteDBSnapshotMessage`,Skt=`DescribeDBSnapshotsMessage`,Ckt=`DeleteDBSnapshotResult`,wkt=`DescribeDBSnapshots`,p2=`DomainDnsIps`,Tkt=`DescribeEvents`,Ekt=`DescribeEventsMessage`,m2=`DomainFqdn`,Dkt=`DnsIps`,h2=`DomainIAMRoleName`,Okt=`DatabaseInstallationFiles`,kkt=`DatabaseInstallationFilesS3BucketName`,Akt=`DatabaseInstallationFilesS3Prefix`,g2=`DatabaseInsightsMode`,jkt=`DbInstancePort`,Mkt=`DisableLogTypes`,_2=`DedicatedLogVolume`,Nkt=`DomainMemberships`,Pkt=`DomainMembershipList`,v2=`DomainMembership`,Fkt=`DomainNotFoundFault`,y2=`DomainOu`,Ikt=`DescribeOrderableDBInstanceOptions`,Lkt=`DescribeOrderableDBInstanceOptionsMessage`,Rkt=`DefaultOnly`,b2=`DeletionProtection`,x2=`DbiResourceId`,zkt=`DataType`,Bkt=`DefaultValue`,Vkt=`Date`,S2=`Domain`,Hkt=`Duration`,C2=`Engine`,w2=`EventCategories`,Ukt=`EventCategoriesList`,T2=`EnableCloudwatchLogsExports`,Wkt=`EnabledCloudwatchLogsExports`,E2=`EnableCustomerOwnedIp`,Gkt=`EventCategory`,D2=`EnableIAMDatabaseAuthentication`,Kkt=`Ec2ImagePropertiesNotSupportedFault`,qkt=`EventList`,O2=`EngineLifecycleSupport`,Jkt=`EnableLogTypes`,Ykt=`ExportableLogTypes`,Xkt=`EnhancedMonitoringResourceArn`,Zkt=`EventsMessage`,k2=`EnablePerformanceInsights`,Qkt=`EventSubscriptionQuotaExceededFault`,$kt=`ExportTaskAlreadyExistsFault`,eAt=`ExportTaskNotFoundFault`,tAt=`EarliestTime`,nAt=`EndTime`,A2=`EngineVersion`,j2=`Encrypted`,M2=`Endpoint`,N2=`Event`,rAt=`Events`,iAt=`FinalDBSnapshotIdentifier`,aAt=`ForceFailover`,oAt=`FilterList`,sAt=`FeatureName`,cAt=`FQDN`,lAt=`FailureReason`,uAt=`FullSnapshotSizeInBytes`,dAt=`FilterValueList`,P2=`Filters`,F2=`Filter`,fAt=`GlobalClusterAlreadyExistsFault`,pAt=`GlobalClusterNotFoundFault`,mAt=`GlobalClusterQuotaExceededFault`,hAt=`HostedZoneId`,I2=`Iops`,gAt=`IncludeAll`,_At=`IntegrationAlreadyExistsFault`,vAt=`InsufficientAvailableIPsInSubnetFault`,L2=`IAMDatabaseAuthenticationEnabled`,yAt=`IAMRoleName`,bAt=`InvalidBlueGreenDeploymentStateFault`,xAt=`InvalidCustomDBEngineVersionStateFault`,SAt=`IntegrationConflictOperationFault`,R2=`InstanceCreateTime`,CAt=`InvalidDBClusterAutomatedBackupStateFault`,wAt=`InsufficientDBClusterCapacityFault`,TAt=`InvalidDBClusterCapacityFault`,EAt=`InvalidDBClusterEndpointStateFault`,DAt=`InvalidDBClusterStateFault`,OAt=`InvalidDBClusterSnapshotStateFault`,kAt=`InvalidDBInstanceAutomatedBackupStateFault`,AAt=`InsufficientDBInstanceCapacityFault`,jAt=`InvalidDBInstanceStateFault`,MAt=`InvalidDBProxyEndpointStateFault`,NAt=`InvalidDBParameterGroupStateFault`,PAt=`InvalidDBProxyStateFault`,FAt=`InvalidDBSubnetGroupFault`,IAt=`InvalidDBSecurityGroupStateFault`,LAt=`InvalidDBShardGroupStateFault`,RAt=`InvalidDBSubnetGroupStateFault`,zAt=`InvalidDBSnapshotStateFault`,BAt=`InvalidDBSubnetStateFault`,VAt=`InvalidExportOnlyFault`,HAt=`InvalidEventSubscriptionStateFault`,UAt=`InvalidExportSourceStateFault`,WAt=`InvalidExportTaskStateFault`,GAt=`InvalidGlobalClusterStateFault`,KAt=`ImageId`,qAt=`InvalidIntegrationStateFault`,JAt=`IsModifiable`,YAt=`IsMajorVersionUpgrade`,XAt=`IntegrationNotFoundFault`,ZAt=`InvalidOptionGroupStateFault`,z2=`IOPS`,QAt=`IncludePublic`,$At=`InstanceQuotaExceededFault`,ejt=`IntegrationQuotaExceededFault`,tjt=`InvalidRestoreFault`,njt=`IamRoleMissingPermissionsFault`,rjt=`IamRoleNotFoundFault`,ijt=`InvalidResourceStateFault`,ajt=`InvalidSubnet`,ojt=`InvalidS3BucketFault`,sjt=`InsufficientStorageClusterCapacityFault`,cjt=`IsStorageConfigUpgradeAvailable`,ljt=`IncludeShared`,ujt=`InvalidVPCNetworkStateFault`,djt=`Image`,fjt=`Key`,B2=`KmsKeyId`,pjt=`KMSKeyId`,mjt=`KMSKeyNotAccessibleFault`,hjt=`ListenerEndpoint`,V2=`LicenseModel`,gjt=`LatestRestorableTime`,_jt=`ListSupportedCharacterSets`,vjt=`ListSupportedTimezones`,yjt=`LatestTime`,bjt=`ListTagsForResource`,xjt=`ListTagsForResourceMessage`,Sjt=`LogTypesToDisable`,Cjt=`LogTypesToEnable`,H2=`MaxAllocatedStorage`,wjt=`ModifyAdditionalStorageVolume`,Tjt=`ModifyAdditionalStorageVolumesList`,U2=`MultiAZ`,Ejt=`MultiAZCapable`,Djt=`MinCapacity`,Ojt=`MaxCapacity`,kjt=`ModifyDBInstance`,Ajt=`ModifyDBInstanceMessage`,jjt=`ModifyDBInstanceResult`,Mjt=`ModifyDBParameterGroup`,Njt=`ModifyDBParameterGroupMessage`,Pjt=`MaxDBShardGroupLimitReached`,Fjt=`MajorEngineVersion`,Ijt=`MinimumEngineVersion`,Ljt=`MinIops`,Rjt=`MinIopsPerDbInstance`,zjt=`MaxIopsPerDbInstance`,W2=`MinIopsPerGib`,G2=`MaxIopsPerGib`,Bjt=`MaxIops`,K2=`MonitoringInterval`,q2=`ManageMasterUserPassword`,J2=`MaxRecords`,Y2=`MonitoringRoleArn`,X2=`MinStorageSize`,Z2=`MaxStorageSize`,Vjt=`MinStorageThroughput`,Hjt=`MinStorageThroughputPerDbInstance`,Ujt=`MaxStorageThroughputPerDbInstance`,Wjt=`MinStorageThroughputPerIops`,Gjt=`MaxStorageThroughputPerIops`,Kjt=`MaxStorageThroughput`,Q2=`MultiTenant`,$2=`MasterUsername`,e4=`MasterUserAuthenticationType`,t4=`MasterUserPassword`,n4=`MasterUserSecret`,r4=`MasterUserSecretKmsKeyId`,i4=`Marker`,a4=`Message`,o4=`Name`,s4=`NcharCharacterSetName`,qjt=`NewDBInstanceIdentifier`,c4=`NetworkType`,Jjt=`NetworkTypeNotSupported`,Yjt=`Normal`,Xjt=`OutpostCapable`,l4=`OrderableDBInstanceOption`,Zjt=`OrderableDBInstanceOptionsList`,Qjt=`OrderableDBInstanceOptionsMessage`,$jt=`OrderableDBInstanceOptions`,eMt=`OptionGroupAlreadyExistsFault`,tMt=`OptionGroupMemberships`,nMt=`OptionGroupMembershipList`,u4=`OptionGroupMembership`,d4=`OptionGroupName`,rMt=`OptionGroupNotFoundFault`,iMt=`OptionGroupQuotaExceededFault`,aMt=`OriginalSnapshotCreateTime`,oMt=`OU`,sMt=`Outpost`,f4=`Port`,p4=`PubliclyAccessible`,cMt=`ParameterApplyStatus`,m4=`PreferredBackupWindow`,h4=`PendingCloudwatchLogsExports`,g4=`ProcessorFeatures`,lMt=`ProcessorFeatureList`,_4=`ProcessorFeature`,uMt=`PerformanceInsightsEnabled`,v4=`PerformanceInsightsKMSKeyId`,dMt=`ProvisionedIopsNotAvailableInAZFault`,y4=`PerformanceInsightsRetentionPeriod`,fMt=`PointInTimeRestoreNotEnabledFault`,pMt=`ParametersList`,b4=`PendingModifiedValues`,x4=`PreferredMaintenanceWindow`,mMt=`ParameterName`,S4=`PercentProgress`,C4=`PromotionTier`,hMt=`ParameterValue`,w4=`Parameters`,T4=`Parameter`,gMt=`Region`,_Mt=`RoleArn`,vMt=`ReservedDBInstanceAlreadyExistsFault`,yMt=`RestoreDBInstanceFromDBSnapshot`,bMt=`RestoreDBInstanceFromDBSnapshotMessage`,xMt=`RestoreDBInstanceFromDBSnapshotResult`,SMt=`RebootDBInstanceMessage`,CMt=`ReservedDBInstanceNotFoundFault`,wMt=`ReservedDBInstancesOfferingNotFoundFault`,TMt=`ReservedDBInstanceQuotaExceededFault`,EMt=`RebootDBInstanceResult`,DMt=`RebootDBInstance`,OMt=`ResumeFullAutomationModeMinutes`,E4=`ResumeFullAutomationModeTime`,D4=`ReplicaMode`,kMt=`RotateMasterUserPassword`,O4=`ResourceName`,AMt=`ResourceNotFoundFault`,jMt=`ReadReplicaCapable`,MMt=`ReadReplicaDBClusterIdentifiers`,NMt=`ReadReplicaDBClusterIdentifierList`,PMt=`ReadReplicaDBClusterIdentifier`,FMt=`ReadReplicaDBInstanceIdentifiers`,IMt=`ReadReplicaDBInstanceIdentifierList`,LMt=`ReadReplicaDBInstanceIdentifier`,RMt=`ReadReplicaSourceDBClusterIdentifier`,zMt=`ReadReplicaSourceDBInstanceIdentifier`,BMt=`RemoveTagsFromResource`,VMt=`RemoveTagsFromResourceMessage`,HMt=`ResourceType`,k4=`RestoreWindow`,A4=`Source`,UMt=`SourceArn`,WMt=`SubscriptionAlreadyExistFault`,GMt=`SubnetAlreadyInUse`,KMt=`SupportedActivityStreamModes`,qMt=`SupportsAdditionalStorageVolumes`,JMt=`SnapshotAvailabilityZone`,YMt=`SecondaryAvailabilityZone`,XMt=`SubnetAvailabilityZone`,ZMt=`SecretArn`,j4=`SupportsBabelfish`,QMt=`SupportedCACertificateIdentifiers`,$Mt=`SubscriptionCategoryNotFoundFault`,eNt=`SourceClusterNotSupportedFault`,tNt=`SupportsCertificateRotationWithoutRestart`,nNt=`SupportedCharacterSets`,rNt=`SupportedCharacterSetsList`,iNt=`SnapshotCreateTime`,aNt=`SupportsClusters`,oNt=`StartDBInstance`,sNt=`StartDBInstanceMessage`,cNt=`StopDBInstanceMessage`,lNt=`StartDBInstanceResult`,uNt=`StopDBInstanceResult`,dNt=`StopDBInstance`,fNt=`SourceDBSnapshotIdentifier`,pNt=`SupportsDedicatedLogVolume`,mNt=`SourceDatabaseNotSupportedFault`,hNt=`SnapshotDatabaseTime`,M4=`StorageEncrypted`,N4=`SupportedEngineModes`,gNt=`SupportsEnhancedMonitoring`,P4=`StorageEncryptionType`,_Nt=`SetForDelete`,vNt=`SupportedFeatureNames`,yNt=`SkipFinalSnapshot`,F4=`SupportsGlobalDatabases`,bNt=`SubnetGroupStatus`,xNt=`SupportsHttpEndpoint`,I4=`SourceIdentifier`,SNt=`SupportsIAMDatabaseAuthentication`,CNt=`SubnetIdentifierList`,wNt=`StatusInfos`,L4=`SupportsIops`,TNt=`SubnetIds`,R4=`SubnetIdentifier`,z4=`SupportsIntegrations`,ENt=`SupportsKerberosAuthentication`,DNt=`SubnetList`,B4=`SupportsLimitlessDatabase`,ONt=`SupportsLogExportsToCloudwatchLogs`,V4=`SupportsLocalWriteForwarding`,kNt=`SupportedNcharCharacterSets`,ANt=`SourceNotFoundFault`,jNt=`SubscriptionNotFoundFault`,MNt=`SNSInvalidTopicFault`,NNt=`SNSNoAuthorizationFault`,PNt=`SNSTopicArnNotFoundFault`,H4=`SupportedNetworkTypes`,FNt=`SubnetOutpost`,U4=`StorageOperationPercentProgress`,W4=`StorageOperationStatus`,INt=`SupportsPerformanceInsights`,G4=`SupportsParallelQuery`,LNt=`SnapshotQuotaExceededFault`,RNt=`StorageQuotaExceededFault`,zNt=`SourceRegion`,BNt=`SupportsReadReplica`,VNt=`SensitiveString`,K4=`SupportsStorageAutoscaling`,HNt=`SupportsStorageEncryption`,UNt=`SharedSnapshotQuotaExceededFault`,q4=`SupportsStorageThroughput`,WNt=`SecretStatus`,GNt=`SubnetStatus`,J4=`StorageThroughput`,KNt=`SupportedTimezonesList`,qNt=`StorageTypeNotAvailableFault`,JNt=`StorageTypeNotSupportedFault`,YNt=`SnapshotTarget`,Y4=`SnapshotType`,X4=`SourceType`,Z4=`StorageType`,XNt=`StatusType`,ZNt=`StartTime`,QNt=`SupportedTimezones`,Q4=`ServerlessV2FeaturesSupport`,$4=`StorageVolumeStatus`,e3=`Status`,$Nt=`Subnets`,t3=`Subnet`,n3=`Tags`,r3=`TdeCredentialArn`,i3=`TdeCredentialPassword`,ePt=`TenantDatabaseAlreadyExistsFault`,tPt=`TenantDatabaseNotFoundFault`,nPt=`TenantDatabaseQuotaExceededFault`,rPt=`TagKeys`,a3=`TagList`,iPt=`TagListMessage`,aPt=`TimezoneName`,o3=`TagSpecifications`,oPt=`TagSpecificationList`,sPt=`TagSpecification`,s3=`Tag`,c3=`Timezone`,cPt=`UnsupportedDBEngineVersionFault`,l3=`UseDefaultProcessorFeatures`,lPt=`UpgradeRolloutOrder`,u3=`UpgradeTarget`,d3=`Value`,uPt=`VpcEncryptionControlViolationException`,f3=`VpcId`,p3=`VolumeName`,dPt=`VpcSecurityGroups`,m3=`VpcSecurityGroupIds`,fPt=`VpcSecurityGroupIdList`,h3=`VpcSecurityGroupId`,pPt=`VpcSecurityGroupMembershipList`,g3=`VpcSecurityGroupMembership`,mPt=`ValidTill`,hPt=`ValidUpgradeTarget`,gPt=`ValidUpgradeTargetList`,_Pt=`Values`,_3=`Vpc`,W=`awsQueryError`,G=`client`,K=`error`,q=`httpError`,vPt=`item`,J=`message`,v3=`smithy.ts.sdk.synthetic.com.amazonaws.rds`,y3=`xmlName`,Y=`com.amazonaws.rds`,b3=new mt(v3),yPt=[-3,v3,`RDSServiceException`,0,[],[]];b3.registerError(yPt,U);var X=new mt(Y),bPt=[-3,Y,pEt,{[W]:[`AuthorizationAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(bPt,XCt);var xPt=[-3,Y,yEt,{[W]:[`AuthorizationNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(xPt,Kwt);var SPt=[-3,Y,SEt,{[W]:[`AuthorizationQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(SPt,ZCt);var CPt=[-3,Y,KEt,{[W]:[`BackupPolicyNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(CPt,qwt);var wPt=[-3,Y,WEt,{[W]:[`BlueGreenDeploymentAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wPt,gwt);var TPt=[-3,Y,GEt,{[W]:[`BlueGreenDeploymentNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(TPt,zCt);var EPt=[-3,Y,pDt,{[W]:[`CertificateNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(EPt,Jwt);var DPt=[-3,Y,YEt,{[W]:[`CreateCustomDBEngineVersionFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(DPt,Cwt);var OPt=[-3,Y,JEt,{[W]:[`CustomAvailabilityZoneNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(OPt,uwt);var kPt=[-3,Y,XEt,{[W]:[`CustomDBEngineVersionAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(kPt,wwt);var APt=[-3,Y,$Et,{[W]:[`CustomDBEngineVersionNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(APt,Twt);var jPt=[-3,Y,eDt,{[W]:[`CustomDBEngineVersionQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jPt,Ewt);var MPt=[-3,Y,xDt,{[W]:[`DBClusterAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(MPt,kwt);var NPt=[-3,Y,yDt,{[W]:[`DBClusterAutomatedBackupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(NPt,OTt);var PPt=[-3,Y,bDt,{[W]:[`DBClusterAutomatedBackupQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(PPt,DTt);var FPt=[-3,Y,SDt,{[W]:[`DBClusterBacktrackNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(FPt,VTt);var IPt=[-3,Y,CDt,{[W]:[`DBClusterEndpointAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(IPt,Wwt);var LPt=[-3,Y,wDt,{[W]:[`DBClusterEndpointNotFoundFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(LPt,ATt);var RPt=[-3,Y,TDt,{[W]:[`DBClusterEndpointQuotaExceededFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(RPt,Gwt);var zPt=[-3,Y,EDt,{[W]:[`DBClusterNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(zPt,kCt);var BPt=[-3,Y,DDt,{[W]:[`DBClusterParameterGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(BPt,_wt);var VPt=[-3,Y,ODt,{[W]:[`DBClusterQuotaExceededFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(VPt,vwt);var HPt=[-3,Y,kDt,{[W]:[`DBClusterRoleAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(HPt,ACt);var UPt=[-3,Y,ADt,{[W]:[`DBClusterRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(UPt,nEt);var WPt=[-3,Y,jDt,{[W]:[`DBClusterRoleQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(WPt,jCt);var GPt=[-3,Y,MDt,{[W]:[`DBClusterSnapshotAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(GPt,awt);var KPt=[-3,Y,PDt,{[W]:[`DBClusterSnapshotNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(KPt,owt);var qPt=[-3,Y,JDt,{[W]:[`DBInstanceAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(qPt,Ywt);var JPt=[-3,Y,WDt,{[W]:[`DBInstanceAutomatedBackupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(JPt,NTt);var YPt=[-3,Y,GDt,{[W]:[`DBInstanceAutomatedBackupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(YPt,MTt);var XPt=[-3,Y,ZDt,{[W]:[`DBInstanceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(XPt,NCt);var ZPt=[-3,Y,QDt,{[W]:[`DBInstanceNotReady`,400],[K]:G,[q]:400},[J],[0]];X.registerError(ZPt,HTt);var QPt=[-3,Y,$Dt,{[W]:[`DBInstanceRoleAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(QPt,PCt);var $Pt=[-3,Y,eOt,{[W]:[`DBInstanceRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError($Pt,rEt);var eFt=[-3,Y,tOt,{[W]:[`DBInstanceRoleQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(eFt,FCt);var tFt=[-3,Y,oOt,{[W]:[`DBLogFileNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(tFt,KTt);var nFt=[-3,Y,fOt,{[W]:[`DBParameterGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(nFt,nwt);var rFt=[-3,Y,gOt,{[W]:[`DBParameterGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(rFt,rwt);var iFt=[-3,Y,vOt,{[W]:[`DBParameterGroupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(iFt,iwt);var aFt=[-3,Y,sOt,{[W]:[`DBProxyAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(aFt,$wt);var oFt=[-3,Y,cOt,{[W]:[`DBProxyEndpointAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(oFt,tTt);var sFt=[-3,Y,lOt,{[W]:[`DBProxyEndpointNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(sFt,BCt);var cFt=[-3,Y,uOt,{[W]:[`DBProxyEndpointQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(cFt,nTt);var lFt=[-3,Y,xOt,{[W]:[`DBProxyNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(lFt,VCt);var uFt=[-3,Y,COt,{[W]:[`DBProxyQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(uFt,eTt);var dFt=[-3,Y,wOt,{[W]:[`DBProxyTargetAlreadyRegisteredFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(dFt,eEt);var fFt=[-3,Y,TOt,{[W]:[`DBProxyTargetGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(fFt,HCt);var pFt=[-3,Y,EOt,{[W]:[`DBProxyTargetNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(pFt,BTt);var mFt=[-3,Y,AOt,{[W]:[`DBSecurityGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(mFt,iTt);var hFt=[-3,Y,zOt,{[W]:[`DBSecurityGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(hFt,QCt);var gFt=[-3,Y,UOt,{[W]:[`DBSecurityGroupNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(gFt,aTt);var _Ft=[-3,Y,WOt,{[W]:[`QuotaExceeded.DBSecurityGroup`,400],[K]:G,[q]:400},[J],[0]];X.registerError(_Ft,oTt);var vFt=[-3,Y,jOt,{[W]:[`DBShardGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(vFt,sTt);var yFt=[-3,Y,BOt,{[W]:[`DBShardGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(yFt,UCt);var bFt=[-3,Y,OOt,{[W]:[`DBSnapshotAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(bFt,dwt);var xFt=[-3,Y,JOt,{[W]:[`DBSnapshotNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(xFt,WCt);var SFt=[-3,Y,XOt,{[W]:[`DBSnapshotTenantDatabaseNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(SFt,GCt);var CFt=[-3,Y,MOt,{[W]:[`DBSubnetGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(CFt,uTt);var wFt=[-3,Y,POt,{[W]:[`DBSubnetGroupDoesNotCoverEnoughAZs`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wFt,Awt);var TFt=[-3,Y,ROt,{[W]:[`DBSubnetGroupNotAllowedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(TFt,Qwt);var EFt=[-3,Y,VOt,{[W]:[`DBSubnetGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(EFt,jwt);var DFt=[-3,Y,GOt,{[W]:[`DBSubnetGroupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(DFt,dTt);var OFt=[-3,Y,YOt,{[W]:[`DBSubnetQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(OFt,fTt);var kFt=[-3,Y,QOt,{[W]:[`DBUpgradeDependencyFailure`,400],[K]:G,[q]:400},[J],[0]];X.registerError(kFt,XTt);var AFt=[-3,Y,Fkt,{[W]:[`DomainNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(AFt,Mwt);var jFt=[-3,Y,Kkt,{[W]:[`Ec2ImagePropertiesNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jFt,Dwt);var MFt=[-3,Y,Qkt,{[W]:[`EventSubscriptionQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(MFt,pTt);var NFt=[-3,Y,$kt,{[W]:[`ExportTaskAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(NFt,cEt);var PFt=[-3,Y,eAt,{[W]:[`ExportTaskNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(PFt,ewt);var FFt=[-3,Y,fAt,{[W]:[`GlobalClusterAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(FFt,yTt);var IFt=[-3,Y,pAt,{[W]:[`GlobalClusterNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(IFt,Nwt);var LFt=[-3,Y,mAt,{[W]:[`GlobalClusterQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(LFt,bTt);var RFt=[-3,Y,njt,{[W]:[`IamRoleMissingPermissions`,400],[K]:G,[q]:400},[J],[0]];X.registerError(RFt,lEt);var zFt=[-3,Y,rjt,{[W]:[`IamRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(zFt,uEt);var BFt=[-3,Y,$At,{[W]:[`InstanceQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(BFt,ywt);var VFt=[-3,Y,vAt,{[W]:[`InsufficientAvailableIPsInSubnetFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(VFt,tEt);var HFt=[-3,Y,wAt,{[W]:[`InsufficientDBClusterCapacityFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(HFt,aEt);var UFt=[-3,Y,AAt,{[W]:[`InsufficientDBInstanceCapacity`,400],[K]:G,[q]:400},[J],[0]];X.registerError(UFt,Pwt);var WFt=[-3,Y,sjt,{[W]:[`InsufficientStorageClusterCapacity`,400],[K]:G,[q]:400},[J],[0]];X.registerError(WFt,Fwt);var GFt=[-3,Y,_At,{[W]:[`IntegrationAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(GFt,STt);var KFt=[-3,Y,SAt,{[W]:[`IntegrationConflictOperationFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(KFt,CTt);var qFt=[-3,Y,XAt,{[W]:[`IntegrationNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(qFt,KCt);var JFt=[-3,Y,ejt,{[W]:[`IntegrationQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(JFt,wTt);var YFt=[-3,Y,bAt,{[W]:[`InvalidBlueGreenDeploymentStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(YFt,ETt);var XFt=[-3,Y,xAt,{[W]:[`InvalidCustomDBEngineVersionStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(XFt,Owt);var ZFt=[-3,Y,CAt,{[W]:[`InvalidDBClusterAutomatedBackupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(ZFt,kTt);var QFt=[-3,Y,TAt,{[W]:[`InvalidDBClusterCapacityFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(QFt,qTt);var $Ft=[-3,Y,EAt,{[W]:[`InvalidDBClusterEndpointStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError($Ft,qCt);var eIt=[-3,Y,OAt,{[W]:[`InvalidDBClusterSnapshotStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(eIt,swt);var tIt=[-3,Y,DAt,{[W]:[`InvalidDBClusterStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(tIt,MCt);var nIt=[-3,Y,kAt,{[W]:[`InvalidDBInstanceAutomatedBackupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(nIt,PTt);var rIt=[-3,Y,jAt,{[W]:[`InvalidDBInstanceState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(rIt,ICt);var iIt=[-3,Y,NAt,{[W]:[`InvalidDBParameterGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(iIt,jTt);var aIt=[-3,Y,MAt,{[W]:[`InvalidDBProxyEndpointStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(aIt,FTt);var oIt=[-3,Y,PAt,{[W]:[`InvalidDBProxyStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(oIt,rTt);var sIt=[-3,Y,IAt,{[W]:[`InvalidDBSecurityGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(sIt,$Ct);var cIt=[-3,Y,LAt,{[W]:[`InvalidDBShardGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(cIt,xTt);var lIt=[-3,Y,zAt,{[W]:[`InvalidDBSnapshotState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(lIt,fwt);var uIt=[-3,Y,FAt,{[W]:[`InvalidDBSubnetGroupFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(uIt,Iwt);var dIt=[-3,Y,RAt,{[W]:[`InvalidDBSubnetGroupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(dIt,Lwt);var fIt=[-3,Y,BAt,{[W]:[`InvalidDBSubnetStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(fIt,ITt);var pIt=[-3,Y,HAt,{[W]:[`InvalidEventSubscriptionState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(pIt,LTt);var mIt=[-3,Y,VAt,{[W]:[`InvalidExportOnly`,400],[K]:G,[q]:400},[J],[0]];X.registerError(mIt,dEt);var hIt=[-3,Y,UAt,{[W]:[`InvalidExportSourceState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(hIt,fEt);var gIt=[-3,Y,WAt,{[W]:[`InvalidExportTaskStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(gIt,twt);var _It=[-3,Y,GAt,{[W]:[`InvalidGlobalClusterStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(_It,Rwt);var vIt=[-3,Y,qAt,{[W]:[`InvalidIntegrationStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(vIt,RTt);var yIt=[-3,Y,ZAt,{[W]:[`InvalidOptionGroupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(yIt,zTt);var bIt=[-3,Y,ijt,{[W]:[`InvalidResourceStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(bIt,GTt);var xIt=[-3,Y,tjt,{[W]:[`InvalidRestoreFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(xIt,oEt);var SIt=[-3,Y,ojt,{[W]:[`InvalidS3BucketFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(SIt,iEt);var CIt=[-3,Y,ajt,{[W]:[`InvalidSubnet`,400],[K]:G,[q]:400},[J],[0]];X.registerError(CIt,zwt);var wIt=[-3,Y,ujt,{[W]:[`InvalidVPCNetworkStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wIt,Bwt);var TIt=[-3,Y,mjt,{[W]:[`KMSKeyNotAccessibleFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(TIt,cwt);var EIt=[-3,Y,Pjt,{[W]:[`MaxDBShardGroupLimitReached`,400],[K]:G,[q]:400},[J],[0]];X.registerError(EIt,cTt);var DIt=[-3,Y,Jjt,{[W]:[`NetworkTypeNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(DIt,Vwt);var OIt=[-3,Y,eMt,{[W]:[`OptionGroupAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(OIt,pwt);var kIt=[-3,Y,rMt,{[W]:[`OptionGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(kIt,mwt);var AIt=[-3,Y,iMt,{[W]:[`OptionGroupQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(AIt,hwt);var jIt=[-3,Y,fMt,{[W]:[`PointInTimeRestoreNotEnabled`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jIt,sEt);var MIt=[-3,Y,dMt,{[W]:[`ProvisionedIopsNotAvailableInAZFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(MIt,Xwt);var NIt=[-3,Y,vMt,{[W]:[`ReservedDBInstanceAlreadyExists`,404],[K]:G,[q]:404},[J],[0]];X.registerError(NIt,QTt);var PIt=[-3,Y,CMt,{[W]:[`ReservedDBInstanceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(PIt,UTt);var FIt=[-3,Y,TMt,{[W]:[`ReservedDBInstanceQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(FIt,$Tt);var IIt=[-3,Y,wMt,{[W]:[`ReservedDBInstancesOfferingNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(IIt,WTt);var LIt=[-3,Y,AMt,{[W]:[`ResourceNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(LIt,YCt);var RIt=[-3,Y,UNt,{[W]:[`SharedSnapshotQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(RIt,YTt);var zIt=[-3,Y,LNt,{[W]:[`SnapshotQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(zIt,lwt);var BIt=[-3,Y,MNt,{[W]:[`SNSInvalidTopic`,400],[K]:G,[q]:400},[J],[0]];X.registerError(BIt,mTt);var VIt=[-3,Y,NNt,{[W]:[`SNSNoAuthorization`,400],[K]:G,[q]:400},[J],[0]];X.registerError(VIt,hTt);var HIt=[-3,Y,PNt,{[W]:[`SNSTopicArnNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(HIt,gTt);var UIt=[-3,Y,eNt,{[W]:[`SourceClusterNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(UIt,bwt);var WIt=[-3,Y,mNt,{[W]:[`SourceDatabaseNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(WIt,xwt);var GIt=[-3,Y,ANt,{[W]:[`SourceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(GIt,LCt);var KIt=[-3,Y,RNt,{[W]:[`StorageQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(KIt,Swt);var qIt=[-3,Y,qNt,{[W]:[`StorageTypeNotAvailableFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(qIt,JTt);var JIt=[-3,Y,JNt,{[W]:[`StorageTypeNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(JIt,Hwt);var YIt=[-3,Y,GMt,{[W]:[`SubnetAlreadyInUse`,400],[K]:G,[q]:400},[J],[0]];X.registerError(YIt,ZTt);var XIt=[-3,Y,WMt,{[W]:[`SubscriptionAlreadyExist`,400],[K]:G,[q]:400},[J],[0]];X.registerError(XIt,_Tt);var ZIt=[-3,Y,$Mt,{[W]:[`SubscriptionCategoryNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(ZIt,vTt);var QIt=[-3,Y,jNt,{[W]:[`SubscriptionNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(QIt,RCt);var $It=[-3,Y,ePt,{[W]:[`TenantDatabaseAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError($It,TTt);var eLt=[-3,Y,tPt,{[W]:[`TenantDatabaseNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(eLt,JCt);var tLt=[-3,Y,nPt,{[W]:[`TenantDatabaseQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(tLt,Zwt);var nLt=[-3,Y,cPt,{[W]:[`UnsupportedDBEngineVersion`,400],[K]:G,[q]:400},[J],[0]];X.registerError(nLt,lTt);var rLt=[-3,Y,uPt,{[W]:[`VpcEncryptionControlViolationException`,400],[K]:G,[q]:400},[J],[0]];X.registerError(rLt,Uwt);var iLt=[b3,X],x3=[0,Y,VNt,8,0],aLt=[3,Y,MEt,0,[p3,T0,z2,H2,J4,Z4],[0,1,1,1,1,0],1],oLt=[3,Y,PEt,0,[p3,$4,W4,U4,T0,z2,H2,J4,Z4],[0,0,0,1,1,1,1,1,0]],sLt=[3,Y,REt,0,[O4,n3],[0,[()=>R3,0]],2],S3=[3,Y,O0,0,[o4],[0]],cLt=[3,Y,b0,0,[K4,q4,L4,Z4,X2,Z2,Ljt,Bjt,W2,G2,Vjt,Kjt],[2,2,2,0,1,1,1,1,1,1,1,1]],lLt=[3,Y,w0,0,[o4,Bkt,D0],[0,0,0]],uLt=[3,Y,N0,0,[qEt,mPt],[0,4]],C3=[3,Y,I0,0,[L0,gDt],[0,0]],dLt=[3,Y,F0,0,[Jkt,Mkt],[64,64]],fLt=[3,Y,nDt,0,[X0,Y0,C2,$0,T0,$2,t4,c2,m3,O0,s2,x4,n2,A0,m4,f4,U2,A2,C0,V2,I2,J4,d4,L0,s4,p4,n3,V0,Z4,r3,i3,M4,B2,S2,m2,y2,B0,p2,R0,K2,Y2,h2,C4,c3,D2,g2,k2,v4,y4,T2,g4,b2,H2,E2,c4,j0,P0,d2,M0,q2,r4,Q2,_2,O2,E0,o3,e4],[0,0,0,0,1,0,[()=>x3,0],[()=>M3,0],[()=>B3,0],0,0,0,0,1,0,1,2,0,2,0,1,1,0,0,0,2,[()=>R3,0],0,0,0,[()=>x3,0],2,0,0,0,0,0,64,2,1,0,0,1,0,2,0,2,0,1,64,[()=>I3,0],2,1,2,0,0,0,0,0,2,0,2,2,0,()=>A3,[()=>z3,0],0],3],pLt=[3,Y,rDt,0,[U0],[[()=>w3,0]]],mLt=[3,Y,iDt,0,[n2,t2,z0,n3],[0,0,0,[()=>R3,0]],3],hLt=[3,Y,aDt,0,[e2],[()=>T3]],gLt=[3,Y,uDt,0,[f2,X0,n3],[0,0,[()=>R3,0]],2],_Lt=[3,Y,dDt,0,[i2],[[()=>E3,0]]],vLt=[3,Y,sDt,0,[s2,a2,TNt,n3],[0,0,[()=>tzt,0],[()=>R3,0]],3],yLt=[3,Y,cDt,0,[l2],[[()=>D3,0]]],bLt=[3,Y,ZEt,0,[KAt,e3],[0,0]],xLt=[3,Y,H0,0,[C2,Fjt,A2,kkt,Akt,Okt,QEt,t2,FDt,LDt,RDt,$Ot,lAt,djt,IDt,pjt,_Dt,nNt,kNt,hPt,QNt,Ykt,ONt,BNt,N4,vNt,e3,G4,F4,a3,j4,B4,tNt,QMt,V4,z4,Q4],[0,0,0,0,0,64,0,0,0,0,0,()=>C3,0,()=>bLt,0,0,4,[()=>L3,0],[()=>L3,0],[()=>izt,0],[()=>rzt,0],64,2,2,64,64,0,2,2,[()=>R3,0],2,2,2,64,2,2,()=>xRt]],SLt=[3,Y,BDt,0,[i4,VDt],[0,[()=>LRt,0]]],w3=[3,Y,U0,0,[X0,Y0,C2,rOt,$2,$0,M2,T0,R2,m4,A0,c2,dPt,r2,O0,l2,x4,lPt,b4,gjt,U2,A2,C0,zMt,FMt,MMt,D4,V2,I2,J4,tMt,L0,s4,YMt,p4,wNt,Z4,P4,r3,jkt,V0,M4,B2,x2,M0,Nkt,R0,K2,Xkt,Y2,C4,W0,c3,L2,g2,uMt,v4,y4,Wkt,g4,b2,CEt,hjt,H2,a3,S0,E4,mDt,c4,jEt,DEt,OEt,kEt,EEt,x0,q0,j0,wEt,P0,AEt,N0,d2,n4,RMt,S4,Q2,_2,cjt,O2,E0,$4,W4,U4],[0,0,0,0,0,0,()=>O3,1,4,0,1,[()=>WRt,0],[()=>azt,0],[()=>URt,0],0,[()=>D3,0],0,0,[()=>pRt,0],4,2,0,2,0,[()=>ezt,0],[()=>$Rt,0],0,0,1,1,[()=>ZRt,0],0,0,0,2,[()=>VRt,0],0,0,0,1,0,2,0,0,0,[()=>qRt,0],2,1,0,0,1,0,0,2,0,2,0,1,64,[()=>I3,0],2,[()=>BRt,0],()=>O3,1,[()=>R3,0],0,4,2,0,0,0,0,0,2,0,[()=>j3,0],0,4,0,0,()=>uLt,0,()=>nRt,0,0,2,2,2,0,()=>NRt,0,0,1]],CLt=[3,Y,G0,0,[W0,x2,gMt,X0,k4,T0,e3,f4,O0,f3,R2,$2,C2,A2,V2,I2,J4,d4,r3,j2,P4,Z4,B2,c3,L2,A0,m4,K0,q0,j0,Q2,x0,a3,_2,E0],[0,0,0,0,()=>bRt,1,0,1,0,0,4,0,0,0,0,1,1,0,0,2,0,0,0,0,2,1,0,0,[()=>j3,0],0,2,0,[()=>R3,0],2,()=>A3]],wLt=[3,Y,UDt,0,[i4,qDt],[0,[()=>RRt,0]]],TLt=[3,Y,J0,0,[K0],[0]],ELt=[3,Y,XDt,0,[i4,aOt],[0,[()=>zRt,0]]],DLt=[3,Y,Z0,0,[_Mt,sAt,e3],[0,0,0]],OLt=[3,Y,Q0,0,[XNt,Yjt,e3,a4],[0,2,0,0]],T3=[3,Y,e2,0,[n2,t2,z0,dOt],[0,0,0,0]],kLt=[3,Y,pOt,0,[w4,i4],[[()=>F3,0],0]],ALt=[3,Y,_Ot,0,[n2],[0]],jLt=[3,Y,hOt,0,[i4,r2],[0,[()=>HRt,0]]],MLt=[3,Y,yOt,0,[n2,cMt],[0,0]],NLt=[3,Y,FOt,0,[o2,e3],[0,0]],E3=[3,Y,i2,0,[f2,X0,iNt,C2,T0,e3,f4,O0,f3,R2,$2,A2,V2,Y4,I2,J4,d4,S4,zNt,fNt,Z4,r3,j2,P4,A0,m4,B2,DOt,c3,L2,g4,x2,a3,YNt,aMt,hNt,d2,Q2,_2,E0,JMt,uAt],[0,0,4,0,1,0,1,0,0,4,0,0,0,0,1,1,0,1,0,0,0,0,2,0,1,0,0,0,0,2,[()=>I3,0],0,[()=>R3,0],0,4,4,0,2,2,()=>A3,0,1]],PLt=[3,Y,qOt,0,[i4,ZOt],[0,[()=>GRt,0]]],D3=[3,Y,l2,0,[s2,a2,f3,bNt,$Nt,NOt,H4],[0,0,0,0,[()=>nzt,0],0,64]],FLt=[3,Y,LOt,0,[i4,u2],[0,[()=>KRt,0]]],ILt=[3,Y,okt,0,[X0,yNt,iAt,vDt],[0,2,0,2],1],LLt=[3,Y,ckt,0,[U0],[[()=>w3,0]]],RLt=[3,Y,dkt,0,[n2],[0],1],zLt=[3,Y,xkt,0,[f2],[0],1],BLt=[3,Y,Ckt,0,[i2],[[()=>E3,0]]],VLt=[3,Y,_kt,0,[s2],[0],1],HLt=[3,Y,nkt,0,[C2,A2,t2,P2,J2,i4,Rkt,_jt,vjt,gAt],[0,0,0,[()=>P3,0],1,0,2,2,2,2]],ULt=[3,Y,ikt,0,[x2,X0,P2,J2,i4,K0],[0,0,[()=>P3,0],1,0,0]],WLt=[3,Y,skt,0,[X0,P2,J2,i4],[0,[()=>P3,0],1,0]],GLt=[3,Y,fkt,0,[n2,P2,J2,i4],[0,[()=>P3,0],1,0]],KLt=[3,Y,mkt,0,[n2,A4,P2,J2,i4],[0,0,[()=>P3,0],1,0],1],qLt=[3,Y,Skt,0,[X0,f2,Y4,P2,J2,i4,ljt,QAt,x2],[0,0,0,[()=>P3,0],1,0,2,2,0]],JLt=[3,Y,vkt,0,[s2,P2,J2,i4],[0,[()=>P3,0],1,0]],YLt=[3,Y,Ekt,0,[I4,X4,ZNt,nAt,Hkt,w2,P2,J2,i4],[0,0,4,4,1,[()=>N3,0],[()=>P3,0],1,0]],XLt=[3,Y,Lkt,0,[C2,A2,Y0,V2,k0,_3,P2,J2,i4],[0,0,0,0,0,2,[()=>P3,0],1,0],1],ZLt=[3,Y,v2,0,[S2,e3,cAt,yAt,oMt,TEt,Dkt],[0,0,0,0,0,0,64]],O3=[3,Y,M2,0,[HEt,f4,hAt],[0,1,0]],QLt=[3,Y,N2,0,[I4,X4,a4,w2,Vkt,UMt],[0,0,0,[()=>N3,0],4,0]],$Lt=[3,Y,Zkt,0,[i4,rAt],[0,[()=>JRt,0]]],eRt=[3,Y,F2,0,[o4,_Pt],[0,[()=>YRt,0]],2],tRt=[3,Y,xjt,0,[O4,P2],[0,[()=>P3,0]],1],nRt=[3,Y,n4,0,[ZMt,WNt,B2],[0,0,0]],rRt=[3,Y,wjt,0,[p3,T0,z2,H2,J4,Z4,_Nt],[0,1,1,1,1,0,2],1],iRt=[3,Y,Ajt,0,[X0,T0,Y0,s2,c2,m3,gEt,t4,n2,A0,m4,x4,U2,A2,_Et,C0,V2,I2,J4,d4,qjt,Z4,r3,i3,M0,S2,m2,y2,B0,p2,ekt,R0,K2,SOt,p4,Y2,h2,C4,D2,g2,k2,v4,y4,F0,g4,l3,b2,H2,hDt,D4,S0,OMt,E2,c4,x0,q2,kMt,r4,Q2,_2,C2,E0,o3,e4,O2],[0,1,0,0,[()=>M3,0],[()=>B3,0],2,[()=>x3,0],0,1,0,0,2,0,2,2,0,1,1,0,0,0,0,[()=>x3,0],0,0,0,0,0,64,2,2,1,1,2,0,0,1,2,0,2,0,1,()=>dLt,[()=>I3,0],2,2,1,2,0,0,1,2,0,0,2,2,0,2,2,0,()=>XRt,[()=>z3,0],0,0],1],aRt=[3,Y,jjt,0,[U0],[[()=>w3,0]]],oRt=[3,Y,Njt,0,[n2,w4],[0,[()=>F3,0]],2],sRt=[3,Y,u4,0,[d4,e3],[0,0]],cRt=[3,Y,l4,0,[C2,A2,Y0,V2,k0,VEt,Ejt,jMt,_3,HNt,Z4,L4,q4,gNt,SNt,INt,X2,Z2,Rjt,zjt,W2,G2,Hjt,Ujt,Wjt,Gjt,xEt,N4,K4,ENt,Xjt,KMt,F4,H4,aNt,pNt,qMt,xNt,hEt],[0,0,0,0,0,[()=>PRt,0],2,2,2,2,0,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,[()=>IRt,0],64,2,2,2,64,2,64,2,2,2,2,[()=>FRt,0]]],lRt=[3,Y,Qjt,0,[$jt,i4],[[()=>QRt,0],0]],uRt=[3,Y,sMt,0,[UEt],[0]],dRt=[3,Y,T4,0,[mMt,hMt,z0,A4,IEt,zkt,D0,JAt,Ijt,vEt,N4],[0,0,0,0,0,0,0,2,0,0,64]],fRt=[3,Y,h4,0,[Cjt,Sjt],[64,64]],pRt=[3,Y,b4,0,[Y0,T0,t4,f4,A0,U2,A2,V2,I2,J4,X0,Z4,M0,s2,h4,g4,S0,E4,Q2,L2,_2,C2,E0],[0,1,[()=>x3,0],1,1,2,0,0,1,1,0,0,0,0,()=>fRt,[()=>I3,0],0,4,2,2,2,0,()=>A3]],mRt=[3,Y,_4,0,[o4,d3],[0,0]],hRt=[3,Y,SMt,0,[X0,aAt],[0,2],1],gRt=[3,Y,EMt,0,[U0],[[()=>w3,0]]],_Rt=[3,Y,VMt,0,[O4,rPt],[0,64],2],vRt=[3,Y,bMt,0,[X0,f2,Y0,f4,O0,s2,U2,p4,C0,V2,$0,C2,I2,J4,d4,n3,Z4,r3,i3,m3,S2,m2,y2,B0,p2,R0,h2,D2,T2,g4,l3,n2,b2,E2,c4,j0,P0,T0,NDt,A0,m4,_2,M0,O2,E0,o3,q2,r4],[0,0,0,1,0,0,2,2,2,0,0,0,1,1,0,[()=>R3,0],0,0,[()=>x3,0],[()=>B3,0],0,0,0,0,64,2,0,2,64,[()=>I3,0],2,0,2,2,0,0,0,1,0,1,0,2,0,0,()=>A3,[()=>z3,0],2,0],1],yRt=[3,Y,xMt,0,[U0],[[()=>w3,0]]],bRt=[3,Y,k4,0,[tAt,yjt],[4,4]],xRt=[3,Y,Q4,0,[Djt,Ojt],[1,1]],SRt=[3,Y,sNt,0,[X0],[0],1],CRt=[3,Y,lNt,0,[U0],[[()=>w3,0]]],wRt=[3,Y,cNt,0,[X0,f2],[0,0],1],TRt=[3,Y,uNt,0,[U0],[[()=>w3,0]]],ERt=[3,Y,t3,0,[R4,XMt,FNt,GNt],[0,()=>S3,()=>uRt,0]],DRt=[3,Y,s3,0,[fjt,d3],[0,0]],ORt=[3,Y,iPt,0,[a3],[[()=>R3,0]]],kRt=[3,Y,sPt,0,[HMt,n3],[0,[()=>R3,0]]],ARt=[3,Y,c3,0,[aPt],[0]],jRt=[3,Y,u3,0,[C2,A2,z0,zEt,YAt,N4,G4,F4,j4,B4,V4,z4],[0,0,0,2,2,64,2,2,2,2,2,2]],MRt=[3,Y,g3,0,[h3,e3],[0,0]],k3=`unit`,A3=[1,Y,NEt,0,()=>aLt],NRt=[1,Y,FEt,0,()=>oLt],PRt=[1,Y,BEt,0,[()=>S3,{[y3]:O0}]],FRt=[1,Y,mEt,0,[()=>cLt,{[y3]:b0}]],IRt=[1,Y,bEt,0,[()=>lLt,{[y3]:w0}]],LRt=[1,Y,zDt,0,[()=>xLt,{[y3]:H0}]],RRt=[1,Y,HDt,0,[()=>CLt,{[y3]:G0}]],j3=[1,Y,KDt,0,[()=>TLt,{[y3]:J0}]],zRt=[1,Y,YDt,0,[()=>w3,{[y3]:U0}]],BRt=[1,Y,nOt,0,[()=>DLt,{[y3]:Z0}]],VRt=[1,Y,iOt,0,[()=>OLt,{[y3]:Q0}]],HRt=[1,Y,mOt,0,[()=>T3,{[y3]:e2}]],URt=[1,Y,bOt,0,[()=>MLt,{[y3]:e2}]],WRt=[1,Y,IOt,0,[()=>NLt,{[y3]:kOt}]],M3=[1,Y,HOt,0,[0,{[y3]:o2}]],GRt=[1,Y,KOt,0,[()=>E3,{[y3]:i2}]],KRt=[1,Y,u2,0,[()=>D3,{[y3]:l2}]],qRt=[1,Y,Pkt,0,[()=>ZLt,{[y3]:v2}]],N3=[1,Y,Ukt,0,[0,{[y3]:Gkt}]],JRt=[1,Y,qkt,0,[()=>QLt,{[y3]:N2}]],P3=[1,Y,oAt,0,[()=>eRt,{[y3]:F2}]],YRt=[1,Y,dAt,0,[0,{[y3]:d3}]],XRt=[1,Y,Tjt,0,()=>rRt],ZRt=[1,Y,nMt,0,[()=>sRt,{[y3]:u4}]],QRt=[1,Y,Zjt,0,[()=>cRt,{[y3]:l4}]],F3=[1,Y,pMt,0,[()=>dRt,{[y3]:T4}]],I3=[1,Y,lMt,0,[()=>mRt,{[y3]:_4}]],$Rt=[1,Y,NMt,0,[0,{[y3]:PMt}]],ezt=[1,Y,IMt,0,[0,{[y3]:LMt}]],tzt=[1,Y,CNt,0,[0,{[y3]:R4}]],nzt=[1,Y,DNt,0,[()=>ERt,{[y3]:t3}]],L3=[1,Y,rNt,0,[()=>C3,{[y3]:I0}]],rzt=[1,Y,KNt,0,[()=>ARt,{[y3]:c3}]],R3=[1,Y,a3,0,[()=>DRt,{[y3]:s3}]],z3=[1,Y,oPt,0,[()=>kRt,{[y3]:vPt}]],izt=[1,Y,gPt,0,[()=>jRt,{[y3]:u3}]],B3=[1,Y,fPt,0,[0,{[y3]:h3}]],azt=[1,Y,pPt,0,[()=>MRt,{[y3]:g3}]],ozt=[9,Y,LEt,0,()=>sLt,()=>k3],szt=[9,Y,tDt,0,()=>fLt,()=>pLt],czt=[9,Y,oDt,0,()=>mLt,()=>hLt],lzt=[9,Y,fDt,0,()=>gLt,()=>_Lt],uzt=[9,Y,lDt,0,()=>vLt,()=>yLt],dzt=[9,Y,rkt,0,()=>ILt,()=>LLt],fzt=[9,Y,ukt,0,()=>RLt,()=>k3],pzt=[9,Y,gkt,0,()=>zLt,()=>BLt],mzt=[9,Y,ykt,0,()=>VLt,()=>k3],hzt=[9,Y,tkt,0,()=>HLt,()=>SLt],gzt=[9,Y,akt,0,()=>ULt,()=>wLt],_zt=[9,Y,lkt,0,()=>WLt,()=>ELt],vzt=[9,Y,pkt,0,()=>GLt,()=>jLt],yzt=[9,Y,hkt,0,()=>KLt,()=>kLt],bzt=[9,Y,wkt,0,()=>qLt,()=>PLt],xzt=[9,Y,bkt,0,()=>JLt,()=>FLt],Szt=[9,Y,Tkt,0,()=>YLt,()=>$Lt],Czt=[9,Y,Ikt,0,()=>XLt,()=>lRt],wzt=[9,Y,bjt,0,()=>tRt,()=>ORt],Tzt=[9,Y,kjt,0,()=>iRt,()=>aRt],Ezt=[9,Y,Mjt,0,()=>oRt,()=>ALt],Dzt=[9,Y,DMt,0,()=>hRt,()=>gRt],Ozt=[9,Y,BMt,0,()=>_Rt,()=>k3],kzt=[9,Y,yMt,0,()=>vRt,()=>yRt],Azt=[9,Y,oNt,0,()=>SRt,()=>CRt],jzt=[9,Y,dNt,0,()=>wRt,()=>TRt],Mzt=e=>({apiVersion:`2014-10-31`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??OCt,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??yCt,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe}],logger:e?.logger??new Ce,protocol:e?.protocol??Re,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.rds`,errorTypeRegistries:iLt,xmlNamespace:`http://rds.amazonaws.com/doc/2014-10-31/`,version:`2014-10-31`,serviceTarget:`AmazonRDSv19`},serviceId:e?.serviceId??`RDS`,sha256:e?.sha256??ut,urlParser:e?.urlParser??Ne,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),Nzt=e=>{let t=te(e),n=()=>t().then(Ae),r=Mzt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:CCt.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Pzt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Fzt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Izt=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),Pzt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),Fzt(n))},Lzt=class extends tt{config;constructor(...[t]){let n=Nzt(t||{});super(n),this.initConfig=n;let r=xCt(n),a=i(r),o=He(a),s=oe(o),c=Fe(s),l=Izt(bCt(dt(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:_Ct,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(d(this.config))}destroy(){super.destroy()}},V3={WHEN_SUPPORTED:`WHEN_SUPPORTED`,WHEN_REQUIRED:`WHEN_REQUIRED`},Rzt=V3.WHEN_SUPPORTED,H3={WHEN_SUPPORTED:`WHEN_SUPPORTED`,WHEN_REQUIRED:`WHEN_REQUIRED`},zzt=V3.WHEN_SUPPORTED,U3;(function(e){e.MD5=`MD5`,e.CRC32=`CRC32`,e.CRC32C=`CRC32C`,e.CRC64NVME=`CRC64NVME`,e.SHA1=`SHA1`,e.SHA256=`SHA256`})(U3||={});var Bzt;(function(e){e.HEADER=`header`,e.TRAILER=`trailer`})(Bzt||={});var W3=U3.CRC32,Vzt=(e,{requestChecksumRequired:t,requestAlgorithmMember:n,requestChecksumCalculation:r})=>{if(!n)return r===V3.WHEN_SUPPORTED||t?W3:void 0;if(e[n])return e[n]},G3=e=>e===U3.MD5?`content-md5`:`x-amz-checksum-${e.toLowerCase()}`,Hzt=(e,t)=>{let n=e.toLowerCase();for(let e of Object.keys(t))if(n===e.toLowerCase())return!0;return!1},Uzt=(e,t)=>{let n=e.toLowerCase();for(let e of Object.keys(t))if(e.toLowerCase().startsWith(n))return!0;return!1},K3=e=>e!==void 0&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&!nee(e),q3=new Uint32Array(256);for(let e=0;e<256;++e){let t=e;for(let e=0;e<8;++e)t=t&1?2197175160^t>>>1:t>>>1;q3[e]=t>>>0}var Wzt=class{digestLength=4;crc=4294967295;update(e){let t=this.crc;for(let n=0;n>>8^q3[(t^e[n])&255];this.crc=t}async digest(){let e=(this.crc^4294967295)>>>0,t=new Uint8Array(4);return t[0]=e>>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=e&255,t}reset(){this.crc=4294967295}},Gzt=()=>{let e=Array(8);for(let t=0;t<8;t++){let n=Array(512);for(let e=0;e<256;e++){let r=BigInt(e);for(let e=0;e<8*(t+1);e++)r&1n?r=r>>1n^11127430586519243189n:r>>=1n;n[e*2]=Number(r>>32n&4294967295n),n[e*2+1]=Number(r&4294967295n)}e[t]=new Uint32Array(n)}return e},J3,Y3,X3,Z3,Q3,$3,e6,t6,n6,Kzt=()=>{J3||(J3=Gzt(),[Y3,X3,Z3,Q3,$3,e6,t6,n6]=J3)},qzt=class{c1=0;c2=0;constructor(){Kzt(),this.reset()}update(e){let t=e.length,n=0,r=this.c1,i=this.c2;for(;n+8<=t;){let t=((i^e[n++])&255)<<1,a=((i>>>8^e[n++])&255)<<1,o=((i>>>16^e[n++])&255)<<1,s=((i>>>24^e[n++])&255)<<1,c=((r^e[n++])&255)<<1,l=((r>>>8^e[n++])&255)<<1,u=((r>>>16^e[n++])&255)<<1,ee=((r>>>24^e[n++])&255)<<1;r=n6[t]^t6[a]^e6[o]^$3[s]^Q3[c]^Z3[l]^X3[u]^Y3[ee],i=n6[t+1]^t6[a+1]^e6[o+1]^$3[s+1]^Q3[c+1]^Z3[l+1]^X3[u+1]^Y3[ee+1]}for(;n>>8|(r&255)<<24)>>>0,r=r>>>8^Y3[t],i^=Y3[t+1],++n}this.c1=r,this.c2=i}async digest(){let e=this.c1^4294967295,t=this.c2^4294967295;return new Uint8Array([e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255])}reset(){this.c1=4294967295,this.c2=4294967295}},Jzt=[U3.CRC32,U3.CRC32C,U3.CRC64NVME,U3.SHA1,U3.SHA256],r6=[U3.SHA256,U3.SHA1,U3.CRC32,U3.CRC32C,U3.CRC64NVME],i6=(e,t)=>{let{checksumAlgorithms:n={}}=t;switch(e){case U3.MD5:return n?.MD5??t.md5;case U3.CRC32:return n?.CRC32??fee;case U3.CRC32C:return n?.CRC32C??Wzt;case U3.CRC64NVME:return n?.CRC64NVME??qzt;case U3.SHA1:return n?.SHA1??t.sha1;case U3.SHA256:return n?.SHA256??t.sha256;default:if(n?.[e])return n[e];throw Error(`The checksum algorithm "${e}" is not supported by the client. Select one of ${Jzt}, or provide an implementation to the client constructor checksums field.`)}},a6=(e,t)=>{let n=new e;return n.update(ee(t||``)),n.digest()},Yzt={name:`flexibleChecksumsMiddleware`,step:`build`,tags:[`BODY_CHECKSUM`],override:!0},Xzt=(e,n)=>(r,i)=>async a=>{if(!t.isInstance(a.request)||Uzt(`x-amz-checksum-`,a.request.headers))return r(a);let{request:o,input:s}=a,{body:c,headers:l}=o,{base64Encoder:u,streamHasher:ee}=e,{requestChecksumRequired:te,requestAlgorithmMember:ne}=n,d=await e.requestChecksumCalculation(),re=ne?.name,ie=ne?.httpHeader;re&&!s[re]&&(d===V3.WHEN_SUPPORTED||te)&&(s[re]=W3,ie&&(l[ie]=W3));let ae=Vzt(s,{requestChecksumRequired:te,requestAlgorithmMember:ne?.name,requestChecksumCalculation:d}),oe=c,se=l;if(ae){switch(ae){case U3.CRC32:be(i,`FLEXIBLE_CHECKSUMS_REQ_CRC32`,`U`);break;case U3.CRC32C:be(i,`FLEXIBLE_CHECKSUMS_REQ_CRC32C`,`V`);break;case U3.CRC64NVME:be(i,`FLEXIBLE_CHECKSUMS_REQ_CRC64`,`W`);break;case U3.SHA1:be(i,`FLEXIBLE_CHECKSUMS_REQ_SHA1`,`X`);break;case U3.SHA256:be(i,`FLEXIBLE_CHECKSUMS_REQ_SHA256`,`Y`)}let t=G3(ae),n=i6(ae,e);if(K3(c)){let{getAwsChunkedEncodingStream:r,bodyLengthChecker:a}=e;oe=r(typeof e.requestStreamBufferSize==`number`&&e.requestStreamBufferSize>=8192?See(c,e.requestStreamBufferSize,i.logger):c,{base64Encoder:u,bodyLengthChecker:a,checksumLocationName:t,checksumAlgorithmFn:n,streamHasher:ee}),se={...l,"content-encoding":l[`content-encoding`]?`${l[`content-encoding`]},aws-chunked`:`aws-chunked`,"transfer-encoding":`chunked`,"x-amz-decoded-content-length":l[`content-length`],"x-amz-content-sha256":`STREAMING-UNSIGNED-PAYLOAD-TRAILER`,"x-amz-trailer":t},delete se[`content-length`]}else if(!Hzt(t,l)){let e=await a6(n,c);se={...l,[t]:u(e)}}}try{return await r({...a,request:{...o,headers:se,body:oe}})}catch(e){if(e instanceof Error&&e.name===`InvalidChunkSizeError`)try{e.message.endsWith(`.`)||(e.message+=`.`),e.message+=` Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream.`}catch{}throw e}},Zzt={name:`flexibleChecksumsInputMiddleware`,toMiddleware:`serializerMiddleware`,relation:`before`,tags:[`BODY_CHECKSUM`],override:!0},Qzt=(e,t)=>(n,r)=>async i=>{let a=i.input,{requestValidationModeMember:o}=t,s=await e.requestChecksumCalculation(),c=await e.responseChecksumValidation();switch(s){case V3.WHEN_REQUIRED:be(r,`FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED`,`a`);break;case V3.WHEN_SUPPORTED:be(r,`FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED`,`Z`)}switch(c){case H3.WHEN_REQUIRED:be(r,`FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED`,`c`);break;case H3.WHEN_SUPPORTED:be(r,`FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED`,`b`)}return o&&!a[o]&&c===H3.WHEN_SUPPORTED&&(a[o]=`ENABLED`),n(i)},o6=(e=[])=>{let t=[],n=r6.length;for(let r of e){let e=r6.indexOf(r);e===-1?t[n++]=r:t[e]=r}return t.filter(Boolean)},$zt=e=>{let t=e.lastIndexOf(`-`);if(t!==-1){let n=e.slice(t+1);if(!n.startsWith(`0`)){let e=parseInt(n,10);if(!isNaN(e)&&e>=1&&e<=1e4)return!0}}return!1},eBt=async(e,{checksumAlgorithmFn:t,base64Encoder:n})=>n(await a6(t,e)),tBt=async(e,{config:t,responseAlgorithms:n,logger:r})=>{let i=o6(n),{body:a,headers:o}=e;for(let n of i){let i=G3(n),s=o[i];if(s){let o;try{o=i6(n,t)}catch(e){if(n===U3.CRC64NVME){r?.warn(`Skipping ${U3.CRC64NVME} checksum validation: ${e.message}`);continue}throw e}let{base64Encoder:c}=t;if(K3(a)){e.body=yee({expectedChecksum:s,checksumSourceLocation:i,checksum:new o,source:a,base64Encoder:c});return}let l=await eBt(a,{checksumAlgorithmFn:o,base64Encoder:c});if(l===s)break;throw Error(`Checksum mismatch: expected "${l}" but received "${s}" in response header "${i}".`)}}},nBt={name:`flexibleChecksumsResponseMiddleware`,toMiddleware:`deserializerMiddleware`,relation:`after`,tags:[`BODY_CHECKSUM`],override:!0},rBt=(e,n)=>(r,i)=>async a=>{if(!t.isInstance(a.request))return r(a);let o=a.input,s=await r(a),c=s.response,{requestValidationModeMember:l,responseAlgorithms:u}=n;if(l&&o[l]===`ENABLED`){let{clientName:t,commandName:n}=i,r=Object.keys(e.checksumAlgorithms??{}).filter(e=>{let t=G3(e);return c.headers[t]!==void 0}),a=o6([...u??[],...r]);if(t===`S3Client`&&n===`GetObjectCommand`&&a.every(e=>{let t=G3(e),n=c.headers[t];return!n||$zt(n)}))return s;await tBt(c,{config:e,responseAlgorithms:a,logger:i.logger})}return s},s6=(e,t)=>({applyToStack:n=>{n.add(Xzt(e,t),Yzt),n.addRelativeTo(Qzt(e,t),Zzt),n.addRelativeTo(rBt(e,t),nBt)}}),iBt=e=>{let{requestChecksumCalculation:t,responseChecksumValidation:n,requestStreamBufferSize:r}=e;return Object.assign(e,{requestChecksumCalculation:Ie(t??Rzt),responseChecksumValidation:Ie(n??zzt),requestStreamBufferSize:Number(r??0),checksumAlgorithms:e.checksumAlgorithms??{}})},aBt=`content-length`,oBt=`x-amz-decoded-content-length`;function sBt(){return(e,n)=>async r=>{let{request:i}=r;if(t.isInstance(i)&&!(aBt in i.headers)&&!(oBt in i.headers)){let e=`Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage.`;typeof n?.logger?.warn==`function`&&!(n.logger instanceof Ce)?n.logger.warn(e):console.warn(e)}return e({...r})}}var cBt={step:`finalizeRequest`,tags:[`CHECK_CONTENT_LENGTH_HEADER`],name:`getCheckContentLengthHeaderPlugin`,override:!0},lBt=e=>({applyToStack:e=>{e.add(sBt(),cBt)}}),uBt=e=>(t,n)=>async r=>{let i=await e.region(),a=e.region,o=()=>{};n.__s3RegionRedirect&&(Object.defineProperty(e,"region",{writable:!1,value:async()=>n.__s3RegionRedirect}),o=()=>Object.defineProperty(e,"region",{writable:!0,value:a}));try{let a=await t(r);if(n.__s3RegionRedirect&&(o(),i!==await e.region()))throw Error(`Region was not restored following S3 region redirect.`);return a}catch(e){throw o(),e}},dBt={tags:[`REGION_REDIRECT`,`S3`],name:`regionRedirectEndpointMiddleware`,override:!0,relation:`before`,toMiddleware:`endpointV2Middleware`};function fBt(e){return(t,n)=>async r=>{try{return await t(r)}catch(i){if(e.followRegionRedirects){let a=i?.$metadata?.httpStatusCode,o=n.commandName===`HeadBucketCommand`,s=i?.$response?.headers?.[`x-amz-bucket-region`];if(s&&(a===301||a===400&&(i?.name===`IllegalLocationConstraintException`||o))){try{let t=s;n.logger?.debug(`Redirecting from ${await e.region()} to ${t}`),n.__s3RegionRedirect=t,be(n,`S3_REGION_REDIRECT`,`Ah`)}catch(e){throw Error(`Region redirect failed: `+e)}return t(r)}}throw i}}}var pBt={step:`initialize`,tags:[`REGION_REDIRECT`,`S3`],name:`regionRedirectMiddleware`,override:!0},mBt=e=>({applyToStack:t=>{t.add(fBt(e),pBt),t.addRelativeTo(uBt(e),dBt)}}),hBt=class e{data;lastPurgeTime=Date.now();static EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS=3e4;constructor(e={}){this.data=e}get(e){let t=this.data[e];if(t)return t}set(e,t){return this.data[e]=t,t}delete(e){delete this.data[e]}async purgeExpired(){let t=Date.now();if(!(this.lastPurgeTime+e.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS>t))for(let e in this.data){let n=this.data[e];if(!n.isRefreshing){let r=await n.identity;r.expiration&&r.expiration.getTime()(t.expiration?.getTime()??0){i.set(r,new c6(Promise.resolve(e)))})),t)):i.set(r,new c6(this.getIdentity(r))).identity}async getIdentity(e){await this.cache.purgeExpired().catch(e=>{console.warn(`Error while clearing expired entries in S3ExpressIdentityCache: +`+e)});let t=await this.createSessionFn(e);if(!t.Credentials?.AccessKeyId||!t.Credentials?.SecretAccessKey)throw Error(`s3#createSession response credential missing AccessKeyId or SecretAccessKey.`);return{accessKeyId:t.Credentials.AccessKeyId,secretAccessKey:t.Credentials.SecretAccessKey,sessionToken:t.Credentials.SessionToken,expiration:t.Credentials.Expiration?new Date(t.Credentials.Expiration):void 0}}},_Bt=(e,{session:t})=>{let[n,r]=t,{forcePathStyle:i,useAccelerateEndpoint:a,disableMultiregionAccessPoints:o,followRegionRedirects:s,s3ExpressIdentityProvider:c,bucketEndpoint:l,expectContinueHeader:u}=e;return Object.assign(e,{forcePathStyle:i??!1,useAccelerateEndpoint:a??!1,disableMultiregionAccessPoints:o??!1,followRegionRedirects:s??!1,s3ExpressIdentityProvider:c??new gBt(async e=>n().send(new r({Bucket:e}))),bucketEndpoint:l??!1,expectContinueHeader:u??2097152})},vBt=e=>(e,t)=>async n=>{let r=await e(n),{response:i}=r;if(xe.isInstance(i)&&i.headers.expires){i.headers.expiresstring=i.headers.expires;try{ye(i.headers.expires)}catch(e){t.logger?.warn(`AWS SDK Warning for ${t.clientName}::${t.commandName} response parsing (${i.headers.expires}): ${e}`),delete i.headers.expires}}return r},yBt={tags:[`S3`],name:`s3ExpiresMiddleware`,override:!0,relation:`after`,toMiddleware:`deserializerMiddleware`},bBt=e=>({applyToStack:t=>{t.addRelativeTo(vBt(e),yBt)}}),xBt=`sigv4-s3express`,SBt=`x-amz-s3session-token`,CBt=e=>(n,r)=>async i=>{if(r.endpointV2){let n=r.endpointV2,a=n.properties?.authSchemes?.[0]?.name===xBt;if((n.properties?.backend===`S3Express`||n.properties?.bucketType===`Directory`)&&(be(r,`S3_EXPRESS_BUCKET`,`J`),r.isS3ExpressBucket=!0),a){let n=i.input.Bucket;if(n){let a=await e.s3ExpressIdentityProvider.getS3ExpressIdentity(await e.credentials(),{Bucket:n});r.s3ExpressIdentity=a,t.isInstance(i.request)&&a.sessionToken&&(i.request.headers[SBt]=a.sessionToken)}}}return n(i)},wBt={name:`s3ExpressMiddleware`,step:`build`,tags:[`S3`,`S3_EXPRESS`],override:!0},TBt=e=>({applyToStack:t=>{t.add(CBt(e),wBt)}}),EBt=async(e,t,n,r)=>{let i=await r.signWithCredentials(n,e,{});if(i.headers[`X-Amz-Security-Token`]||i.headers[`x-amz-security-token`])throw Error(`X-Amz-Security-Token must not be set for s3-express requests.`);return i},DBt=e=>e=>{throw e},OBt=(e,t)=>{},kBt=e=>(n,r)=>async i=>{if(!t.isInstance(i.request))return n(i);let a=Ve(r).selectedHttpAuthScheme;if(!a)throw Error(`No HttpAuthScheme was selected: unable to sign request`);let{httpAuthOption:{signingProperties:o={}},identity:s,signer:c}=a,l;l=r.s3ExpressIdentity?await EBt(r.s3ExpressIdentity,o,i.request,await e.signer()):await c.sign(i.request,s,o);let u=await n({...i,request:l}).catch((c.errorHandler||DBt)(o));return(c.successHandler||OBt)(u.response,o),u},ABt=e=>({applyToStack:t=>{t.addRelativeTo(kBt(e),ue)}});function jBt(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}var MBt={CopyObjectCommand:!0,UploadPartCopyCommand:!0,CompleteMultipartUploadCommand:!0},NBt=e=>(t,n)=>async r=>{let i=await t(r),{response:a}=i;if(!xe.isInstance(a))return i;let{statusCode:o,body:s}=a;if(o<200||o>=300)return i;let c=await PBt(s,e);if(a.body=jBt(c),c.length===0&&MBt[n.commandName]){let e=Error(`S3 aborted request`);throw e.$metadata={httpStatusCode:503},e.name=`InternalError`,e}let l=e.utf8Encoder(c.subarray(c.length-16));return l&&l.endsWith(``)&&(a.statusCode=503),i},PBt=(e=new Uint8Array,t)=>e instanceof Uint8Array?Promise.resolve(e):t.streamCollector(e)||Promise.resolve(new Uint8Array),FBt={relation:`after`,toMiddleware:`deserializerMiddleware`,tags:[`THROW_200_EXCEPTIONS`,`S3`],name:`throw200ExceptionsMiddleware`,override:!0},l6=e=>({applyToStack:t=>{t.addRelativeTo(NBt(e),FBt)}});function IBt(e){return(t,n)=>async r=>{if(e.bucketEndpoint){let e=n.endpointV2;if(e){let t=r.input.Bucket;if(typeof t==`string`)try{let r=new URL(t);n.endpointV2={...e,url:r}}catch(e){let r=`@aws-sdk/middleware-sdk-s3: bucketEndpoint=true was set but Bucket=${t} could not be parsed as URL.`;throw n.logger?.constructor?.name===`NoOpLogger`?console.warn(r):n.logger?.warn?.(r),e}}}return t(r)}}var LBt={name:`bucketEndpointMiddleware`,override:!0,relation:`after`,toMiddleware:`endpointV2Middleware`};function RBt({bucketEndpoint:e}){return t=>async n=>{let{input:{Bucket:r}}=n;if(!e&&typeof r==`string`&&!Ame(r)&&r.indexOf(`/`)>=0){let e=Error(`Bucket name shouldn't contain '/', received '${r}'`);throw e.name=`InvalidBucketName`,e}return t({...n})}}var zBt={step:`initialize`,tags:[`VALIDATE_BUCKET_NAME`],name:`validateBucketNameMiddleware`,override:!0},BBt=e=>({applyToStack:t=>{t.add(RBt(e),zBt),t.addRelativeTo(IBt(e),LBt)}}),VBt=class extends Zee{async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n),i=Oe.of(e.input),a=i.getSchema(),o=0,s=a[6]??0;if(t&&typeof t==`object`)for(let[e,n]of i.structIterator()){if(++o>s)break;if(e===`Bucket`){if(!t.Bucket&&n.getMergedTraits().httpLabel)throw Error(`No value provided for input HTTP label: Bucket.`);break}}return r}};function HBt(e){return n=>async r=>{let{request:i}=r;if(e.expectContinueHeader!==!1&&t.isInstance(i)&&i.body&&e.runtime===`node`&&e.requestHandler?.constructor?.name!==`FetchHttpHandler`){let t=!0;if(typeof e.expectContinueHeader==`number`)try{t=(Number(i.headers?.[`content-length`])??e.bodyLengthChecker?.(i.body)??1/0)>=e.expectContinueHeader}catch{}else t=!!e.expectContinueHeader;t&&(i.headers.Expect=`100-continue`)}return n({...r,request:i})}}var UBt={step:`build`,tags:[`SET_EXPECT_HEADER`,`EXPECT_HEADER`],name:`addExpectContinueMiddleware`,override:!0},WBt=e=>({applyToStack:t=>{t.add(HBt(e),UBt)}});function GBt(e){return t=>async n=>{let{CreateBucketConfiguration:r}=n.input,i=await e.region();return!r?.LocationConstraint&&!r?.Location&&i!==`us-east-1`&&(n.input.CreateBucketConfiguration=n.input.CreateBucketConfiguration??{},n.input.CreateBucketConfiguration.LocationConstraint=i),t(n)}}var KBt={step:`initialize`,tags:[`LOCATION_CONSTRAINT`,`CREATE_BUCKET_CONFIGURATION`],name:`locationConstraintMiddleware`,override:!0},qBt=e=>({applyToStack:t=>{t.add(GBt(e),KBt)}});function JBt(e){return t=>async n=>{let r={...n.input};for(let t of[{target:`SSECustomerKey`,hash:`SSECustomerKeyMD5`},{target:`CopySourceSSECustomerKey`,hash:`CopySourceSSECustomerKeyMD5`}]){let n=r[t.target];if(n){let i;typeof n==`string`?XBt(n,e)?i=e.base64Decoder(n):(i=e.utf8Decoder(n),r[t.target]=e.base64Encoder(i)):(i=ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n),r[t.target]=e.base64Encoder(i));let a=new e.md5;a.update(i),r[t.hash]=e.base64Encoder(await a.digest())}}return t({...n,input:r})}}var YBt={name:`ssecMiddleware`,step:`initialize`,tags:[`SSE`],override:!0},u6=e=>({applyToStack:t=>{t.add(JBt(e),YBt)}});function XBt(e,t){if(!/^(?:[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))return!1;try{return t.base64Decoder(e).length===32}catch{return!1}}var d6=`ref`,f6=`argv`,p6=`backend`,m6=`authSchemes`,h6=`disableDoubleEncoding`,g6=`signingName`,_6=`signingRegion`,v6=`signingRegionSet`,Z=-1,y6=!0,b6=!1,x6=`isSet`,S6=`booleanEquals`,C6=`stringEquals`,w6=`coalesce`,T6=`substring`,E6=``,D6=`aws.partition`,O6=`partitionResult`,k6=`accessPointSuffix`,A6=`regionPrefix`,j6=e=>`outpostId_ssa_`+e+E6,M6=`hardwareType`,N6=`ite`,P6=`isValidHostLabel`,F6=`sigv4`,I6=`aws.isVirtualHostableS3Bucket`,L6=`url`,R6=`getAttr`,z6=`bucketArn`,B6=`--`,V6=`arnType`,H6=`accesspoint`,U6=e=>`accessPointName_ssa_`+e+E6,W6=`s3-object-lambda`,G6=`s3-outposts`,K6=`bucketPartition`,q6=`us-east-1`,J6=`outpostType`,Y6=`name`,X6=`s3`,Z6=`{url#scheme}://{Bucket}.{url#authority}{url#path}`,Q6=`{url#scheme}://{url#authority}{url#path}`,$6=`{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}`,e8=`https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}`,t8=`https://{Bucket}.s3.{partitionResult#dnsSuffix}`,n8=e=>`{url#scheme}://{accessPointName_ssa_`+e+`}-{bucketArn#accountId}.{url#authority}{url#path}`,r8=e=>"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName_ssa_"+e+"}`",i8=`sigv4a`,a8=`{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}`,o8=`https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,s8=`https://s3.{partitionResult#dnsSuffix}`,c8={[d6]:`UseFIPS`},l8={[d6]:`UseDualStack`},u8={[d6]:`Bucket`},d8={fn:R6,[f6]:[{[d6]:O6},Y6]},f8={[d6]:L6},p8={[d6]:`Region`},m8={[d6]:z6},h8={[d6]:V6},g8={[d6]:`accessPointName_ssa_1`},_8={fn:R6,[f6]:[m8,`region`]},v8={[d6]:M6},y8={fn:R6,[f6]:[m8,`service`]},b8={fn:R6,[f6]:[m8,`accountId`]},x8={[p6]:`S3Express`,[m6]:[{[h6]:!0,[Y6]:`{_s3e_auth}`,[g6]:`s3express`,[_6]:`{Region}`}]},S8={[p6]:`S3Express`,[m6]:[{[h6]:!0,[Y6]:F6,[g6]:`s3express`,[_6]:`{Region}`}]},C8={[m6]:[{[h6]:!0,[Y6]:i8,[g6]:G6,[v6]:[`*`]},{[h6]:!0,[Y6]:F6,[g6]:G6,[_6]:`{Region}`}]},w8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:q6}]},T8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:`{Region}`}]},E8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:W6,[_6]:`{bucketArn#region}`}]},D8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:`{bucketArn#region}`}]},O8={[m6]:[{[h6]:!0,[Y6]:i8,[g6]:G6,[v6]:[`*`]},{[h6]:!0,[Y6]:F6,[g6]:G6,[_6]:`{bucketArn#region}`}]},k8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:W6,[_6]:`{Region}`}]},A8=[p8],j8=[{[d6]:`Endpoint`}],M8=[u8],N8=[u8,0,7,!0],P8=[m8,`resourceId[1]`],ZBt=[`*`],F8={conditions:[[x6,A8],[S6,[{[d6]:`Accelerate`},y6]],[S6,[c8,y6]],[S6,[l8,y6]],[x6,j8],[x6,M8],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,0,6,y6]},E6]},`--x-s3`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:N8},E6]},`--xa-s3`]],[D6,A8,O6],[T6,N8,k6],[C6,[{[d6]:k6},`--op-s3`]],[T6,[u8,8,12,y6],A6],[T6,[u8,32,49,y6],j6(2)],[T6,[u8,49,50,y6],M6],[S6,[{[d6]:`ForcePathStyle`},y6]],[C6,[d8,`aws-cn`]],[N6,[l8,`.dualstack`,E6],`_s3e_ds`],[P6,[{[d6]:j6(2)},b6]],[N6,[c8,`-fips`,E6],`_s3e_fips`],[N6,[{fn:w6,[f6]:[{[d6]:`DisableS3ExpressSessionAuth`},b6]},F6,`sigv4-s3express`],`_s3e_auth`],[I6,[u8,b6]],[`parseURL`,j8,L6],[S6,[{fn:w6,[f6]:[{[d6]:`UseS3ExpressControlEndpoint`},b6]},y6]],[I6,[u8,y6]],[C6,[{fn:R6,[f6]:[f8,`scheme`]},`http`]],[P6,[p8,b6]],[`aws.parseArn`,M8,z6],[R6,[{fn:`split`,[f6]:[u8,B6,0]},`[-2]`],`s3expressAvailabilityZoneId`],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,0,4,b6]},E6]},`arn:`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,16,18,y6]},E6]},B6]],[S6,[{fn:R6,[f6]:[f8,`isIp`]},y6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,21,23,y6]},E6]},B6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,27,29,y6]},E6]},B6]],[C6,[{[d6]:A6},`beta`]],[`uriEncode`,M8,`uri_encoded_bucket`],[P6,[p8,y6]],[S6,[{fn:w6,[f6]:[{[d6]:`UseObjectLambdaEndpoint`},b6]},y6]],[R6,[m8,`resourceId[0]`],V6],[C6,[h8,E6]],[C6,[h8,H6]],[R6,P8,U6(1)],[C6,[g8,E6]],[C6,[_8,E6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,14,16,y6]},E6]},B6]],[C6,[v8,`e`]],[C6,[v8,`o`]],[C6,[p8,`aws-global`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,19,21,y6]},E6]},B6]],[C6,[y8,W6]],[S6,[{fn:w6,[f6]:[{[d6]:`DisableAccessPoints`},b6]},y6]],[C6,[y8,G6]],[D6,[_8],K6],[P6,[g8,y6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,26,28,y6]},E6]},B6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,15,17,y6]},E6]},B6]],[R6,[m8,`resourceId[4]`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,20,22,y6]},E6]},B6]],[S6,[{[d6]:`UseGlobalEndpoint`},y6]],[C6,[p8,q6]],[R6,P8,j6(1)],[S6,[{fn:w6,[f6]:[{[d6]:`UseArnRegion`},y6]},y6]],[P6,[{[d6]:j6(1)},b6]],[R6,[m8,`resourceId[2]`],J6],[C6,[p8,_8]],[C6,[{fn:R6,[f6]:[{[d6]:K6},Y6]},d8]],[S6,[{[d6]:`DisableMultiRegionAccessPoints`},y6]],[P6,[_8,y6]],[C6,[{fn:R6,[f6]:[m8,`partition`]},d8]],[C6,[b8,E6]],[C6,[y8,X6]],[P6,[b8,b6]],[R6,[m8,`resourceId[3]`],U6(2)],[P6,[g8,b6]],[C6,[{[d6]:J6},H6]],[P6,[{[d6]:U6(2)},b6]]],results:[[Z],[Z,`Accelerate cannot be used with FIPS`],[Z,`Cannot set dual-stack in combination with a custom endpoint.`],[Z,`A custom endpoint cannot be combined with FIPS`],[Z,`A custom endpoint cannot be combined with S3 Accelerate`],[Z,`Partition does not support FIPS`],[Z,`S3Express does not support S3 Accelerate.`],[`{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}`,x8],[Z6,x8],[Z,`S3Express bucket name is not a valid virtual hostable name.`],[`https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,S8],[`https://{Bucket}.s3express{_s3e_fips}-{s3expressAvailabilityZoneId}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}`,x8],[Z,`Unrecognized S3Express bucket name format.`],[Q6,x8],[`https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}`,S8],[Z,`Expected a endpoint to be specified but no endpoint was found`],[`https://{Bucket}.ec2.{url#authority}`,C8],[`https://{Bucket}.ec2.s3-outposts.{Region}.{partitionResult#dnsSuffix}`,C8],[`https://{Bucket}.op-{outpostId_ssa_2}.{url#authority}`,C8],[`https://{Bucket}.op-{outpostId_ssa_2}.s3-outposts.{Region}.{partitionResult#dnsSuffix}`,C8],[Z,`Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"`],[Z,`Invalid Outposts Bucket alias - it must be a valid bucket name.`],[Z,"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`."],[Z,"Custom endpoint `{Endpoint}` was not a valid URI"],[Z,`S3 Accelerate cannot be used in this region`],[`https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[$6,w8],[Z6,w8],[$6,T8],[Z6,T8],[e8,w8],[e8,T8],[t8,w8],[t8,T8],[`https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}`,T8],[Z,`Invalid region: region was not a valid DNS name.`],[Z,`S3 Object Lambda does not support Dual-stack`],[Z,`S3 Object Lambda does not support S3 Accelerate`],[Z,`Access points are not supported for this operation`],[Z,"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`"],[Z,`Invalid ARN: Missing account id`],[n8(1),E8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}`,E8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}`,E8],[Z,r8(1)],[Z,"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`"],[Z,"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)"],[Z,"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`"],[Z,"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`."],[Z,`Invalid ARN: bucket ARN is missing a region`],[Z,"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided"],[Z,"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`"],[Z,`Access Points do not support S3 Accelerate`],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[n8(1),D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[Z,`Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}`],[Z,`S3 MRAP does not support dual-stack`],[Z,`S3 MRAP does not support FIPS`],[Z,`S3 MRAP does not support S3 Accelerate`],[Z,`Invalid configuration: Multi-Region Access Point ARNs are disabled.`],[`https://{accessPointName_ssa_1}.accesspoint.s3-global.{partitionResult#dnsSuffix}`,{[m6]:[{[h6]:y6,name:i8,[g6]:X6,[v6]:ZBt}]}],[Z,"Client was configured for partition `{partitionResult#name}` but bucket referred to partition `{bucketArn#partition}`"],[Z,`Invalid Access Point Name`],[Z,`S3 Outposts does not support Dual-stack`],[Z,`S3 Outposts does not support FIPS`],[Z,`S3 Outposts does not support S3 Accelerate`],[Z,`Invalid Arn: Outpost Access Point ARN contains sub resources`],[`https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.{url#authority}`,O8],[`https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}`,O8],[Z,r8(2)],[Z,"Expected an outpost type `accesspoint`, found {outpostType}"],[Z,`Invalid ARN: expected an access point name`],[Z,`Invalid ARN: Expected a 4-component resource`],[Z,"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId_ssa_1}`"],[Z,`Invalid ARN: The Outpost Id was not set`],[Z,`Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})`],[Z,`Invalid ARN: No ARN type specified`],[Z,"Invalid ARN: `{Bucket}` was not a valid ARN"],[Z,`Path-style addressing cannot be used with ARN buckets`],[`https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[`https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[`https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[a8,w8],[a8,T8],[o8,w8],[o8,T8],[`https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[Z,`Path-style addressing cannot be used with S3 Accelerate`],[Q6,k8],[`https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}`,k8],[`https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}`,k8],[`https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://s3-fips.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3-fips.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[Q6,w8],[Q6,T8],[s8,w8],[s8,T8],[`https://s3.{Region}.{partitionResult#dnsSuffix}`,T8],[Z,`A region must be set when sending requests to S3.`]]},QBt=2,$Bt=new Int32Array([-1,1,-1,0,3,100000115,1,424,4,2,272,5,3,233,6,4,85,7,5,15,8,8,9,100000115,16,10,13,18,11,13,19,12,13,22,100000014,13,35,14,100000042,36,100000103,435,6,271,16,7,270,17,8,19,18,14,501,106,9,20,24,10,21,24,11,22,24,12,23,24,13,547,24,14,77,25,20,73,26,26,27,78,37,28,100000086,38,100000086,29,39,47,30,48,100000058,31,50,32,100000085,51,33,136,55,100000076,34,59,35,100000084,60,39,36,61,37,100000083,62,38,146,63,41,100000046,61,40,100000083,62,41,150,64,42,100000054,66,43,100000053,70,44,100000052,71,45,100000081,73,46,100000080,74,100000078,100000079,40,48,100000057,41,100000057,49,42,185,50,48,62,51,49,100000045,52,51,53,526,60,56,54,62,100000055,55,63,57,100000046,62,100000055,57,64,58,100000054,66,59,100000053,69,60,100000065,70,61,100000052,72,100000064,100000051,49,100000045,63,51,64,526,60,67,65,62,100000055,66,63,68,100000046,62,100000055,68,64,69,100000054,66,70,100000053,68,100000047,71,70,72,100000052,72,100000050,100000051,25,74,100000042,46,100000039,75,57,76,100000041,58,100000040,100000041,26,100000088,78,28,100000087,79,34,82,80,35,81,545,36,100000103,100000115,46,100000097,83,57,84,100000099,58,100000098,100000099,5,101,86,8,87,100000115,16,88,89,18,91,89,19,90,92,21,97,95,19,93,92,21,98,95,21,97,94,22,100000014,95,35,96,100000042,36,100000103,100000042,22,100000013,98,35,99,100000042,36,100000101,100,46,100000110,100000111,6,214,102,7,208,103,8,119,104,14,118,105,21,106,100000023,26,107,502,37,108,100000086,38,100000086,109,39,112,110,48,100000058,111,50,136,100000085,40,113,100000057,41,100000057,114,42,115,500,48,100000056,116,52,117,100000072,65,100000069,100000072,21,501,100000023,9,120,124,10,121,124,11,122,124,12,123,124,13,202,124,14,195,125,20,190,126,21,127,100000023,23,128,129,24,189,129,26,130,197,37,131,100000086,38,100000086,132,39,159,133,48,100000058,134,50,135,100000085,51,141,136,55,100000076,137,59,138,100000084,60,100000083,139,61,140,100000083,63,100000083,100000046,55,100000076,142,59,143,100000084,60,148,144,61,145,100000083,62,147,146,63,150,100000046,63,153,100000046,61,149,100000083,62,153,150,64,151,100000054,66,152,100000053,70,100000082,100000052,64,154,100000054,66,155,100000053,70,156,100000052,71,157,100000081,73,158,100000080,74,100000077,100000079,40,160,100000057,41,100000057,161,42,185,162,48,174,163,49,100000045,164,51,165,526,60,168,166,62,100000055,167,63,169,100000046,62,100000055,169,64,170,100000054,66,171,100000053,69,172,100000065,70,173,100000052,72,100000063,100000051,49,100000045,175,51,176,526,60,179,177,62,100000055,178,63,180,100000046,62,100000055,180,64,181,100000054,66,182,100000053,68,100000047,183,70,184,100000052,72,100000048,100000051,48,100000056,186,52,187,100000072,65,100000069,188,67,100000070,100000071,25,100000036,100000042,21,191,100000023,25,192,100000042,30,194,193,46,100000034,100000036,46,100000033,100000035,21,196,100000023,26,100000088,197,28,100000087,198,34,201,199,35,200,545,36,100000101,100000115,46,100000095,100000096,17,203,100000022,20,204,100000021,21,205,550,33,206,550,44,100000016,207,45,100000018,100000020,8,209,215,16,210,220,18,211,220,19,212,224,20,213,227,21,231,401,8,218,215,19,216,100000009,20,217,227,21,231,100000009,16,219,220,18,223,220,19,221,224,20,222,227,21,231,100000012,19,226,224,20,225,100000009,21,100000009,100000012,20,230,227,21,228,100000009,30,229,100000009,34,100000007,100000009,21,231,415,30,232,100000008,34,100000007,100000008,4,100000002,234,5,235,480,6,271,236,7,270,237,8,238,491,9,239,243,10,240,243,11,241,243,12,242,243,13,547,243,14,266,244,20,264,245,26,246,267,37,247,100000086,38,100000086,248,39,249,518,40,250,100000057,41,100000057,251,42,538,252,48,100000043,253,49,100000045,254,51,255,526,60,258,256,62,100000055,257,63,259,100000046,62,100000055,259,64,260,100000054,66,261,100000053,69,262,100000065,70,263,100000052,72,100000062,100000051,25,265,100000042,46,100000031,100000032,26,100000088,267,28,100000087,268,34,269,544,46,100000093,100000094,8,397,100000009,8,407,100000009,3,346,273,4,100000003,274,5,284,275,8,276,100000115,15,100000005,277,16,278,281,18,279,281,19,280,281,22,100000014,281,35,282,100000042,36,100000102,283,46,100000106,100000107,6,405,285,7,395,286,8,295,287,14,501,288,26,289,502,37,290,100000086,38,100000086,291,39,292,307,40,293,100000057,41,100000057,294,42,335,500,9,296,300,10,297,300,11,298,300,12,299,300,13,394,300,14,339,301,15,100000005,302,20,337,303,26,304,341,37,305,100000086,38,100000086,306,39,309,307,48,100000058,308,50,100000074,100000085,40,310,100000057,41,100000057,311,42,335,312,48,324,313,49,100000045,314,51,315,526,60,318,316,62,100000055,317,63,319,100000046,62,100000055,319,64,320,100000054,66,321,100000053,69,322,100000065,70,323,100000052,72,100000061,100000051,49,100000045,325,51,326,526,60,329,327,62,100000055,328,63,330,100000046,62,100000055,330,64,331,100000054,66,332,100000053,68,100000047,333,70,334,100000052,72,100000049,100000051,48,100000056,336,52,100000067,100000072,25,338,100000042,46,100000027,100000028,15,100000005,340,26,100000088,341,28,100000087,342,34,345,343,35,344,545,36,100000102,100000115,46,100000091,100000092,4,100000002,347,5,357,348,8,349,100000115,15,100000005,350,16,351,354,18,352,354,19,353,354,22,100000014,354,35,355,100000042,36,100000043,356,46,100000104,100000105,6,405,358,7,395,359,8,360,491,9,361,365,10,362,365,11,363,365,12,364,365,13,394,365,14,389,366,15,100000005,367,20,387,368,26,369,391,37,370,100000086,38,100000086,371,39,372,518,40,373,100000057,41,100000057,374,42,538,375,48,100000043,376,49,100000045,377,51,378,526,60,381,379,62,100000055,380,63,382,100000046,62,100000055,382,64,383,100000054,66,384,100000053,69,385,100000065,70,386,100000052,72,100000060,100000051,25,388,100000042,46,100000025,100000026,15,100000005,390,26,100000088,391,28,100000087,392,34,393,544,46,100000089,100000090,15,100000005,547,8,396,100000009,15,100000005,397,16,398,410,18,399,410,19,400,410,20,401,100000009,27,402,100000012,29,100000011,403,31,100000011,404,32,100000011,422,8,406,100000009,15,100000005,407,16,408,410,18,409,410,19,411,410,20,100000012,100000009,20,414,412,22,413,100000009,34,100000010,100000009,22,416,415,27,419,100000012,27,418,417,34,100000010,100000012,34,100000010,419,43,100000011,420,47,100000011,421,53,100000011,422,54,100000011,423,56,100000011,100000012,2,100000001,425,3,478,426,4,100000004,427,5,438,428,8,429,100000115,16,430,433,18,431,433,19,432,433,22,100000014,433,35,434,100000042,36,100000044,435,46,100000112,436,57,437,100000114,58,100000113,100000114,6,100000006,439,7,100000006,440,8,450,441,14,501,442,26,443,502,37,444,100000086,38,100000086,445,39,446,465,40,447,100000057,41,100000057,448,42,471,449,48,100000044,500,9,451,455,10,452,455,11,453,455,12,454,455,13,547,455,14,473,456,15,460,457,20,458,461,25,459,100000042,46,100000037,100000038,20,540,461,26,462,474,37,463,100000086,38,100000086,464,39,467,465,48,100000058,466,50,100000075,100000085,40,468,100000057,41,100000057,469,42,471,470,48,100000044,524,48,100000044,472,52,100000068,100000072,26,100000088,474,28,100000087,475,34,100000100,476,35,477,545,36,100000044,100000115,4,100000002,479,5,488,480,8,481,100000115,16,482,485,18,483,485,19,484,485,22,100000014,485,35,486,100000042,36,100000043,487,46,100000108,100000109,6,100000006,489,7,100000006,490,8,503,491,14,501,492,26,493,502,37,494,100000086,38,100000086,495,39,496,518,40,497,100000057,41,100000057,498,42,538,499,48,100000043,500,49,100000045,526,26,100000088,502,28,100000087,100000115,9,504,508,10,505,508,11,506,508,12,507,508,13,547,508,14,541,509,15,513,510,20,511,514,25,512,100000042,46,100000029,100000030,20,540,514,26,515,542,37,516,100000086,38,100000086,517,39,520,518,48,100000058,519,50,100000073,100000085,40,521,100000057,41,100000057,522,42,538,523,48,100000043,524,49,100000045,525,51,529,526,60,100000055,527,62,100000055,528,63,100000055,100000046,60,532,530,62,100000055,531,63,533,100000046,62,100000055,533,64,534,100000054,66,535,100000053,69,536,100000065,70,537,100000052,72,100000059,100000051,48,100000043,539,52,100000066,100000072,25,100000024,100000042,26,100000088,542,28,100000087,543,34,100000100,544,35,546,545,36,100000042,100000115,36,100000043,100000115,17,548,100000022,20,549,100000021,33,552,550,44,100000017,551,45,100000019,100000020,44,100000015,553,45,100000015,100000020]),eVt=s.from($Bt,QBt,F8.conditions,F8.results),tVt=new Te({size:50,params:[`Accelerate`,`Bucket`,`DisableAccessPoints`,`DisableMultiRegionAccessPoints`,`DisableS3ExpressSessionAuth`,`Endpoint`,`ForcePathStyle`,`Region`,`UseArnRegion`,`UseDualStack`,`UseFIPS`,`UseGlobalEndpoint`,`UseObjectLambdaEndpoint`,`UseS3ExpressControlEndpoint`]}),I8=(e,t={})=>tVt.get(e,()=>ze(eVt,{endpointParams:e,logger:t.logger}));lt.aws=de;var nVt=(e=>async(t,n,r)=>{if(!r)throw Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");let i=await e(t,n,r),a=Ve(n)?.commandInstance?.constructor?.getEndpointParameterInstructions;if(!a)throw Error(`getEndpointParameterInstructions() is not defined on '${n.commandName}'`);let o=await cee(r,{getEndpointParameterInstructions:a},t);return Object.assign(i,o)})(async(e,t,n)=>({operation:Ve(t).operation,region:await Ie(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));function L8(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`s3`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function R8(e){return{schemeId:`aws.auth#sigv4a`,signingProperties:{name:`s3`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var rVt=((e,t,n)=>r=>{let i=e(r).properties?.authSchemes;if(!i)return t(r);let a=[];for(let e of i){let{name:t,properties:o={},...s}=e,l=t.toLowerCase();t!==l&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${t}' to '${l}'`);let u;if(l===`sigv4a`){u=`aws.auth#sigv4a`;let e=i.find(e=>{let t=e.name.toLowerCase();return t!==`sigv4a`&&t.startsWith(`sigv4`)});if(c.sigv4aDependency()===`none`&&e)continue}else if(l.startsWith(`sigv4`))u=`aws.auth#sigv4`;else throw Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${l}'`);let ee=n[u];if(!ee)throw Error(`Could not find HttpAuthOption create function for '${u}'`);let te=ee(r);te.schemeId=u,te.signingProperties={...te.signingProperties||{},...s,...o},a.push(te)}return a})(I8,e=>{let t=[];return e.operation,t.push(L8(e)),t.push(R8(e)),t},{"aws.auth#sigv4":L8,"aws.auth#sigv4a":R8}),iVt=e=>{let t=ge(e),r=n(t);return Object.assign(r,{authSchemePreference:Ie(e.authSchemePreference??[])})},aVt=e=>Object.assign(e,{useFipsEndpoint:e.useFipsEndpoint??!1,useDualstackEndpoint:e.useDualstackEndpoint??!1,forcePathStyle:e.forcePathStyle??!1,useAccelerateEndpoint:e.useAccelerateEndpoint??!1,useGlobalEndpoint:e.useGlobalEndpoint??!1,disableMultiregionAccessPoints:e.disableMultiregionAccessPoints??!1,defaultSigningName:`s3`,clientContextParams:e.clientContextParams??{}}),z8=tee({ForcePathStyle:{type:`clientContextParams`,name:`forcePathStyle`},UseArnRegion:{type:`clientContextParams`,name:`useArnRegion`},DisableMultiRegionAccessPoints:{type:`clientContextParams`,name:`disableMultiregionAccessPoints`},Accelerate:{type:`clientContextParams`,name:`useAccelerateEndpoint`},DisableS3ExpressSessionAuth:{type:`clientContextParams`,name:`disableS3ExpressSessionAuth`},UseGlobalEndpoint:{type:`builtInParams`,name:`useGlobalEndpoint`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},`AmazonS3`,`S3Client`,see),oVt={Bucket:{type:`contextParams`,name:`Bucket`},Key:{type:`contextParams`,name:`Key`}},sVt={UseS3ExpressControlEndpoint:{type:`staticContextParams`,value:!0},DisableAccessPoints:{type:`staticContextParams`,value:!0},Bucket:{type:`contextParams`,name:`Bucket`}},cVt={DisableS3ExpressSessionAuth:{type:`staticContextParams`,value:!0},Bucket:{type:`contextParams`,name:`Bucket`}},lVt={Bucket:{type:`contextParams`,name:`Bucket`}},uVt={},dVt={Bucket:{type:`contextParams`,name:`Bucket`},Prefix:{type:`contextParams`,name:`Prefix`}},B8=(e,t,n,r)=>[l6(n)],fVt=(e,t,n,r)=>[l6(n),u6(n)],pVt=(e,t,n,r)=>[l6(n),qBt(n)],mVt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!0}),l6(n)],hVt=(e,t,n,r)=>[s6(n,{requestChecksumRequired:!1,requestValidationModeMember:`ChecksumMode`,responseAlgorithms:[`CRC64NVME`,`CRC32`,`CRC32C`,`SHA256`,`SHA1`,`SHA512`,`MD5`,`XXHASH64`,`XXHASH3`,`XXHASH128`]}),u6(n),bBt(n)],gVt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!1}),lBt(n),l6(n),u6(n)],_Vt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!1}),l6(n),u6(n)],V8=class e extends ae{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},vVt=class e extends V8{name=`NoSuchUpload`;$fault=`client`;constructor(t){super({name:`NoSuchUpload`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yVt=class e extends V8{name=`AccessDenied`;$fault=`client`;constructor(t){super({name:`AccessDenied`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bVt=class e extends V8{name=`ObjectNotInActiveTierError`;$fault=`client`;constructor(t){super({name:`ObjectNotInActiveTierError`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xVt=class e extends V8{name=`BucketAlreadyExists`;$fault=`client`;constructor(t){super({name:`BucketAlreadyExists`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},SVt=class e extends V8{name=`BucketAlreadyOwnedByYou`;$fault=`client`;constructor(t){super({name:`BucketAlreadyOwnedByYou`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CVt=class e extends V8{name=`NoSuchBucket`;$fault=`client`;constructor(t){super({name:`NoSuchBucket`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wVt=class e extends V8{name=`NoSuchKey`;$fault=`client`;constructor(t){super({name:`NoSuchKey`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TVt=class e extends V8{name=`InvalidObjectState`;$fault=`client`;StorageClass;AccessTier;constructor(t){super({name:`InvalidObjectState`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.StorageClass=t.StorageClass,this.AccessTier=t.AccessTier}},EVt=class e extends V8{name=`NoSuchAnnotation`;$fault=`client`;constructor(t){super({name:`NoSuchAnnotation`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DVt=class e extends V8{name=`NotFound`;$fault=`client`;constructor(t){super({name:`NotFound`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OVt=class e extends V8{name=`InvalidPrefix`;$fault=`client`;constructor(t){super({name:`InvalidPrefix`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kVt=class e extends V8{name=`EncryptionTypeMismatch`;$fault=`client`;constructor(t){super({name:`EncryptionTypeMismatch`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},AVt=class e extends V8{name=`InvalidRequest`;$fault=`client`;constructor(t){super({name:`InvalidRequest`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jVt=class e extends V8{name=`InvalidWriteOffset`;$fault=`client`;constructor(t){super({name:`InvalidWriteOffset`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MVt=class e extends V8{name=`TooManyParts`;$fault=`client`;constructor(t){super({name:`TooManyParts`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NVt=class e extends V8{name=`AnnotationLimitExceeded`;$fault=`client`;constructor(t){super({name:`AnnotationLimitExceeded`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PVt=class e extends V8{name=`AnnotationNameTooLong`;$fault=`client`;constructor(t){super({name:`AnnotationNameTooLong`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FVt=class e extends V8{name=`InvalidAnnotationName`;$fault=`client`;constructor(t){super({name:`InvalidAnnotationName`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},IVt=class e extends V8{name=`UnsupportedMediaType`;$fault=`client`;constructor(t){super({name:`UnsupportedMediaType`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LVt=class e extends V8{name=`IdempotencyParameterMismatch`;$fault=`client`;constructor(t){super({name:`IdempotencyParameterMismatch`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RVt=class e extends V8{name=`ObjectAlreadyInActiveTierError`;$fault=`client`;constructor(t){super({name:`ObjectAlreadyInActiveTierError`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},H8=`ACL`,zVt=`AccessDenied`,BVt=`AbortDate`,U8=`AccessKeyId`,VVt=`AnnotationLimitExceeded`,HVt=`AbortMultipartUpload`,UVt=`AbortMultipartUploadOutput`,WVt=`AbortMultipartUploadRequest`,GVt=`AnnotationNameTooLong`,KVt=`AcceptRanges`,qVt=`AbortRuleId`,JVt=`AccessTier`,W8=`Bucket`,G8=`BucketArn`,YVt=`BucketAlreadyExists`,XVt=`BucketAlreadyOwnedByYou`,ZVt=`BypassGovernanceRetention`,QVt=`BucketInfo`,K8=`BucketKeyEnabled`,$Vt=`BucketNamespace`,q8=`BucketRegion`,J8=`Body`,Y8=`Buckets`,X8=`ChecksumAlgorithm`,eHt=`CreateBucket`,Z8=`CreateBucketConfiguration`,tHt=`CreateBucketOutput`,nHt=`CreateBucketRequest`,Q8=`CacheControl`,$8=`ChecksumCRC32`,e5=`ChecksumCRC32C`,t5=`ChecksumCRC64NVME`,n5=`Cache-Control`,rHt=`CreationDate`,r5=`Content-Disposition`,i5=`ContentDisposition`,a5=`Content-Encoding`,o5=`ContentEncoding`,s5=`ContentLanguage`,c5=`Content-Language`,l5=`Content-Length`,u5=`ContentLength`,d5=`Content-MD5`,f5=`ChecksumMD5`,p5=`ContentMD5`,iHt=`CompletedMultipartUpload`,aHt=`CompleteMultipartUploadOutput`,oHt=`CreateMultipartUploadOutput`,sHt=`CompleteMultipartUploadResult`,cHt=`CompleteMultipartUploadRequest`,lHt=`CreateMultipartUploadRequest`,m5=`CompleteMultipartUpload`,uHt=`CreateMultipartUpload`,dHt=`ChecksumMode`,fHt=`CommonPrefix`,pHt=`CommonPrefixList`,mHt=`CompletedPartList`,hHt=`CompletedPart`,gHt=`CommonPrefixes`,_Ht=`ContentRange`,vHt=`Content-Range`,h5=`ChecksumSHA1`,g5=`ChecksumSHA256`,_5=`ChecksumSHA512`,yHt=`CreateSessionOutput`,bHt=`CreateSessionResult`,xHt=`CreateSessionRequest`,SHt=`CreateSession`,v5=`ChecksumType`,y5=`Content-Type`,b5=`ContentType`,x5=`ContinuationToken`,S5=`ChecksumXXHASH64`,C5=`ChecksumXXHASH3`,w5=`ChecksumXXHASH128`,CHt=`Contents`,T5=`Credentials`,E5=`DeleteMarker`,wHt=`DisplayName`,THt=`DeleteObjectOutput`,EHt=`DeleteObjectRequest`,DHt=`DeleteObject`,OHt=`DataRedundancy`,D5=`Delimiter`,O5=`ExpectedBucketOwner`,k5=`ExpiresString`,A5=`ETag`,kHt=`EncryptionTypeMismatch`,j5=`EncodingType`,M5=`Expiration`,N5=`Expires`,AHt=`FetchOwner`,P5=`GrantFullControl`,jHt=`GetObject`,MHt=`GetObjectOutput`,NHt=`GetObjectRequest`,F5=`GrantRead`,I5=`GrantReadACP`,PHt=`GrantWrite`,L5=`GrantWriteACP`,FHt=`InvalidAnnotationName`,IHt=`ID`,R5=`IfMatch`,LHt=`IfMatchInitiatedTime`,RHt=`IfMatchLastModifiedTime`,zHt=`IfMatchSize`,BHt=`If-Modified-Since`,VHt=`IfModifiedSince`,HHt=`InitiateMultipartUploadResult`,z5=`If-Match`,B5=`IfNoneMatch`,V5=`If-None-Match`,UHt=`InvalidObjectState`,WHt=`InvalidPrefix`,GHt=`IdempotencyParameterMismatch`,KHt=`InvalidRequest`,qHt=`IsRestoreInProgress`,JHt=`IsTruncated`,YHt=`IfUnmodifiedSince`,XHt=`If-Unmodified-Since`,ZHt=`InvalidWriteOffset`,H5=`Key`,QHt=`KeyCount`,U5=`Location`,$Ht=`ListAllMyBucketsResult`,eUt=`ListBuckets`,tUt=`ListBucketsOutput`,nUt=`ListBucketsRequest`,rUt=`ListBucketResult`,iUt=`LocationConstraint`,aUt=`LocationInfo`,W5=`LastModified`,oUt=`Last-Modified`,sUt=`ListObjectsV2`,cUt=`ListObjectsV2Output`,lUt=`ListObjectsV2Request`,G5=`Metadata`,uUt=`MaxBuckets`,dUt=`MFA`,K5=`MaxKeys`,fUt=`MissingMeta`,pUt=`MpuObjectSize`,mUt=`MultipartUpload`,q5=`Name`,hUt=`NextContinuationToken`,gUt=`NotFound`,_Ut=`NoSuchAnnotation`,vUt=`NoSuchBucket`,yUt=`NoSuchKey`,bUt=`NoSuchUpload`,J5=`Owner`,xUt=`ObjectAlreadyInActiveTierError`,SUt=`ObjectLockEnabledForBucket`,Y5=`ObjectLockEventHold`,X5=`ObjectLockEventHoldDurationDays`,Z5=`ObjectLockEventHoldDurationYears`,Q5=`ObjectLockLegalHoldStatus`,$5=`ObjectLockMode`,e7=`ObjectLockRetainUntilDate`,CUt=`ObjectList`,wUt=`ObjectNotInActiveTierError`,TUt=`ObjectOwnership`,EUt=`OptionalObjectAttributes`,DUt=`Object`,t7=`Prefix`,OUt=`PartsCount`,n7=`PartNumber`,kUt=`PutObject`,AUt=`PutObjectOutput`,jUt=`PutObjectRequest`,MUt=`PutObjectTagging`,NUt=`PutObjectTaggingOutput`,PUt=`PutObjectTaggingRequest`,FUt=`Parts`,IUt=`Part`,r7=`RequestCharged`,LUt=`ResponseCacheControl`,RUt=`ResponseContentDisposition`,zUt=`ResponseContentEncoding`,BUt=`ResponseContentLanguage`,VUt=`ResponseContentType`,HUt=`ResponseExpires`,UUt=`RestoreExpiryDate`,i7=`RequestPayer`,WUt=`ReplicationStatus`,a7=`RestoreStatus`,o7=`Range`,GUt=`Restore`,s7=`StartAfter`,c7=`SecretAccessKey`,KUt=`StreamingBlob`,l7=`StorageClass`,qUt=`SessionCredentialValue`,JUt=`SessionCredentials`,YUt=`SessionMode`,u7=`ServerSideEncryption`,d7=`SSECustomerAlgorithm`,f7=`SSECustomerKey`,p7=`SSECustomerKeyMD5`,m7=`SSEKMSEncryptionContext`,h7=`SSEKMSKeyId`,g7=`SessionToken`,_7=`Size`,XUt=`Tags`,ZUt=`TagCount`,QUt=`TooManyParts`,v7=`TagSet`,y7=`Tag`,b7=`Tagging`,x7=`Type`,S7=`UploadId`,$Ut=`UnsupportedMediaType`,eWt=`UploadPart`,tWt=`UploadPartOutput`,nWt=`UploadPartRequest`,rWt=`Value`,C7=`VersionId`,iWt=`WriteOffsetBytes`,w7=`WebsiteRedirectLocation`,aWt=`accept-ranges`,oWt=`bucket-region`,T7=`client`,E7=`continuation-token`,sWt=`delimiter`,D7=`error`,cWt=`encoding-type`,lWt=`fetch-owner`,O7=`http`,k7=`httpChecksum`,A7=`httpError`,Q=`httpHeader`,j7=`httpPayload`,M7=`httpPrefixHeaders`,N7=`httpQuery`,uWt=`max-buckets`,dWt=`max-keys`,P7=`prefix`,F7=`partNumber`,fWt=`response-cache-control`,pWt=`response-content-disposition`,mWt=`response-content-encoding`,hWt=`response-content-language`,gWt=`response-content-type`,_Wt=`response-expires`,I7=`smithy.ts.sdk.synthetic.com.amazonaws.s3`,vWt=`start-after`,yWt=`streaming`,L7=`uploadId`,R7=`versionId`,z7=`xmlFlattened`,B7=`xmlName`,V7=`x-amz-acl`,bWt=`x-amz-abort-date`,xWt=`x-amz-abort-rule-id`,SWt=`x-amz-bucket-arn`,CWt=`x-amz-bypass-governance-retention`,wWt=`x-amz-bucket-namespace`,TWt=`x-amz-bucket-object-lock-enabled`,H7=`x-amz-checksum-algorithm`,U7=`x-amz-checksum-crc32`,W7=`x-amz-checksum-crc32c`,G7=`x-amz-checksum-crc64nvme`,K7=`x-amz-checksum-md5`,EWt=`x-amz-checksum-mode`,q7=`x-amz-checksum-sha1`,J7=`x-amz-checksum-sha256`,Y7=`x-amz-checksum-sha512`,DWt=`x-amz-create-session-mode`,X7=`x-amz-checksum-type`,Z7=`x-amz-checksum-xxhash64`,Q7=`x-amz-checksum-xxhash3`,$7=`x-amz-checksum-xxhash128`,e9=`x-amz-delete-marker`,t9=`x-amz-expiration`,n9=`x-amz-expected-bucket-owner`,r9=`x-amz-grant-full-control`,i9=`x-amz-grant-read`,a9=`x-amz-grant-read-acp`,OWt=`x-amz-grant-write`,o9=`x-amz-grant-write-acp`,kWt=`x-amz-if-match-initiated-time`,AWt=`x-amz-if-match-last-modified-time`,jWt=`x-amz-if-match-size`,s9=`x-amz-meta-`,MWt=`x-amz-mfa`,NWt=`x-amz-missing-meta`,PWt=`x-amz-mp-object-size`,FWt=`x-amz-mp-parts-count`,c9=`x-amz-object-lock-event-hold`,l9=`x-amz-object-lock-event-hold-duration-days`,u9=`x-amz-object-lock-event-hold-duration-years`,d9=`x-amz-object-lock-legal-hold`,f9=`x-amz-object-lock-mode`,p9=`x-amz-object-lock-retain-until-date`,IWt=`x-amz-object-ownership`,LWt=`x-amz-optional-object-attributes`,RWt=`x-amz-object-size`,zWt=`x-amz-restore`,m9=`x-amz-request-charged`,h9=`x-amz-request-payer`,BWt=`x-amz-replication-status`,g9=`x-amz-storage-class`,_9=`x-amz-sdk-checksum-algorithm`,v9=`x-amz-server-side-encryption`,y9=`x-amz-server-side-encryption-aws-kms-key-id`,b9=`x-amz-server-side-encryption-bucket-key-enabled`,x9=`x-amz-server-side-encryption-context`,S9=`x-amz-server-side-encryption-customer-algorithm`,C9=`x-amz-server-side-encryption-customer-key`,w9=`x-amz-server-side-encryption-customer-key-MD5`,T9=`x-amz-tagging`,VWt=`x-amz-tagging-count`,E9=`x-amz-version-id`,HWt=`x-amz-write-offset-bytes`,D9=`x-amz-website-redirect-location`,$=`com.amazonaws.s3`,O9=new mt(I7),UWt=[-3,I7,`S3ServiceException`,0,[],[]];O9.registerError(UWt,V8);var k9=new mt($),WWt=[-3,$,zVt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(WWt,yVt);var GWt=[-3,$,VVt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(GWt,NVt);var KWt=[-3,$,GVt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(KWt,PVt);var qWt=[-3,$,YVt,{[D7]:T7,[A7]:409},[],[]];k9.registerError(qWt,xVt);var JWt=[-3,$,XVt,{[D7]:T7,[A7]:409},[],[]];k9.registerError(JWt,SVt);var YWt=[-3,$,kHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(YWt,kVt);var XWt=[-3,$,GHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(XWt,LVt);var ZWt=[-3,$,FHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(ZWt,FVt);var QWt=[-3,$,UHt,{[D7]:T7,[A7]:403},[l7,JVt],[0,0]];k9.registerError(QWt,TVt);var $Wt=[-3,$,WHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError($Wt,OVt);var eGt=[-3,$,KHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(eGt,AVt);var tGt=[-3,$,ZHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(tGt,jVt);var nGt=[-3,$,_Ut,{[D7]:T7,[A7]:404},[],[]];k9.registerError(nGt,EVt);var rGt=[-3,$,vUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(rGt,CVt);var iGt=[-3,$,yUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(iGt,wVt);var aGt=[-3,$,bUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(aGt,vVt);var oGt=[-3,$,gUt,{[D7]:T7},[],[]];k9.registerError(oGt,DVt);var sGt=[-3,$,xUt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(sGt,RVt);var cGt=[-3,$,wUt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(cGt,bVt);var lGt=[-3,$,QUt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(lGt,MVt);var uGt=[-3,$,$Ut,{[D7]:T7,[A7]:415},[],[]];k9.registerError(uGt,IVt);var dGt=[O9,k9],A9=[0,$,qUt,8,0],j9=[0,$,f7,8,0],M9=[0,$,m7,8,0],N9=[0,$,h7,8,0],P9=[0,$,KUt,{[yWt]:1},42],fGt=[3,$,UVt,0,[r7],[[0,{[Q]:m9}]]],pGt=[3,$,WVt,0,[W8,H5,S7,i7,O5,LHt],[[0,1],[0,1],[0,{[N7]:L7}],[0,{[Q]:h9}],[0,{[Q]:n9}],[6,{[Q]:kWt}]],3],mGt=[3,$,W8,0,[q5,rHt,q8,G8],[0,4,0,0]],hGt=[3,$,QVt,0,[OHt,x7],[0,0]],gGt=[3,$,fHt,0,[t7],[0]],_Gt=[3,$,iHt,0,[FUt],[[()=>XGt,{[z7]:1,[B7]:IUt}]]],vGt=[3,$,hHt,0,[A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,n7],[0,0,0,0,0,0,0,0,0,0,0,1]],yGt=[3,$,aHt,{[B7]:sHt},[U5,W8,H5,M5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,u7,C7,h7,K8,r7],[0,0,0,[0,{[Q]:t9}],0,0,0,0,0,0,0,0,0,0,0,0,[0,{[Q]:v9}],[0,{[Q]:E9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:m9}]]],bGt=[3,$,cHt,0,[W8,H5,S7,mUt,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,pUt,i7,O5,R5,B5,d7,f7,p7],[[0,1],[0,1],[0,{[N7]:L7}],[()=>_Gt,{[j7]:1,[B7]:m5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[1,{[Q]:PWt}],[0,{[Q]:h9}],[0,{[Q]:n9}],[0,{[Q]:z5}],[0,{[Q]:V5}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}]],3],xGt=[3,$,Z8,0,[iUt,U5,W8,XUt],[0,()=>IGt,()=>hGt,[()=>I9,0]]],SGt=[3,$,tHt,0,[U5,G8],[[0,{[Q]:U5}],[0,{[Q]:SWt}]]],CGt=[3,$,nHt,0,[W8,H8,Z8,P5,F5,I5,PHt,L5,SUt,TUt,$Vt],[[0,1],[0,{[Q]:V7}],[()=>xGt,{[j7]:1,[B7]:Z8}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:OWt}],[0,{[Q]:o9}],[2,{[Q]:TWt}],[0,{[Q]:IWt}],[0,{[Q]:wWt}]],1],wGt=[3,$,oHt,{[B7]:HHt},[BVt,qVt,W8,H5,S7,u7,d7,p7,h7,m7,K8,r7,X8,v5],[[4,{[Q]:bWt}],[0,{[Q]:xWt}],[0,{[B7]:W8}],0,0,[0,{[Q]:v9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:m9}],[0,{[Q]:H7}],[0,{[Q]:X7}]]],TGt=[3,$,lHt,0,[W8,H5,H8,Q8,i5,o5,s5,b5,N5,P5,F5,I5,L5,G5,u7,l7,w7,d7,f7,p7,h7,m7,K8,i7,b7,$5,e7,Q5,Y5,X5,Z5,O5,X8,v5],[[0,1],[0,1],[0,{[Q]:V7}],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[0,{[Q]:y5}],[4,{[Q]:N5}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:o9}],[128,{[M7]:s9}],[0,{[Q]:v9}],[0,{[Q]:g9}],[0,{[Q]:D9}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:h9}],[0,{[Q]:T9}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}],[0,{[Q]:n9}],[0,{[Q]:H7}],[0,{[Q]:X7}]],2],EGt=[3,$,yHt,{[B7]:bHt},[T5,u7,h7,m7,K8],[[()=>UGt,{[B7]:T5}],[0,{[Q]:v9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}]],1],DGt=[3,$,xHt,0,[W8,YUt,u7,h7,m7,K8],[[0,1],[0,{[Q]:DWt}],[0,{[Q]:v9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}]],1],OGt=[3,$,THt,0,[E5,C7,r7],[[2,{[Q]:e9}],[0,{[Q]:E9}],[0,{[Q]:m9}]]],kGt=[3,$,EHt,0,[W8,H5,dUt,C7,i7,ZVt,O5,R5,RHt,zHt],[[0,1],[0,1],[0,{[Q]:MWt}],[0,{[N7]:R7}],[0,{[Q]:h9}],[2,{[Q]:CWt}],[0,{[Q]:n9}],[0,{[Q]:z5}],[6,{[Q]:AWt}],[1,{[Q]:jWt}]],2],AGt=[3,$,MHt,0,[J8,E5,KVt,M5,GUt,W5,u5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,fUt,C7,Q8,i5,o5,s5,_Ht,b5,N5,k5,w7,u7,G5,d7,p7,h7,K8,l7,r7,WUt,OUt,ZUt,$5,e7,Q5,Y5,X5,Z5],[[()=>P9,16],[2,{[Q]:e9}],[0,{[Q]:aWt}],[0,{[Q]:t9}],[0,{[Q]:zWt}],[4,{[Q]:oUt}],[1,{[Q]:l5}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[1,{[Q]:NWt}],[0,{[Q]:E9}],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[0,{[Q]:vHt}],[0,{[Q]:y5}],[4,{[Q]:N5}],[0,{[Q]:k5}],[0,{[Q]:D9}],[0,{[Q]:v9}],[128,{[M7]:s9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:g9}],[0,{[Q]:m9}],[0,{[Q]:BWt}],[1,{[Q]:FWt}],[1,{[Q]:VWt}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}]]],jGt=[3,$,NHt,0,[W8,H5,R5,VHt,B5,YHt,o7,LUt,RUt,zUt,BUt,VUt,HUt,C7,d7,f7,p7,i7,n7,O5,dHt],[[0,1],[0,1],[0,{[Q]:z5}],[4,{[Q]:BHt}],[0,{[Q]:V5}],[4,{[Q]:XHt}],[0,{[Q]:o7}],[0,{[N7]:fWt}],[0,{[N7]:pWt}],[0,{[N7]:mWt}],[0,{[N7]:hWt}],[0,{[N7]:gWt}],[6,{[N7]:_Wt}],[0,{[N7]:R7}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[0,{[Q]:h9}],[1,{[N7]:F7}],[0,{[Q]:n9}],[0,{[Q]:EWt}]],2],MGt=[3,$,tUt,{[B7]:$Ht},[Y8,J5,x5,t7],[[()=>JGt,0],()=>F9,0,0]],NGt=[3,$,nUt,0,[uUt,x5,t7,q8],[[1,{[N7]:uWt}],[0,{[N7]:E7}],[0,{[N7]:P7}],[0,{[N7]:oWt}]]],PGt=[3,$,cUt,{[B7]:rUt},[JHt,CHt,q5,t7,D5,K5,gHt,j5,QHt,x5,hUt,s7,r7],[2,[()=>ZGt,{[z7]:1}],0,0,0,1,[()=>YGt,{[z7]:1}],0,1,0,0,0,[0,{[Q]:m9}]]],FGt=[3,$,lUt,0,[W8,D5,j5,K5,t7,x5,AHt,s7,i7,O5,EUt],[[0,1],[0,{[N7]:sWt}],[0,{[N7]:cWt}],[1,{[N7]:dWt}],[0,{[N7]:P7}],[0,{[N7]:E7}],[2,{[N7]:lWt}],[0,{[N7]:vWt}],[0,{[Q]:h9}],[0,{[Q]:n9}],[64,{[Q]:LWt}]],1],IGt=[3,$,aUt,0,[x7,q5],[0,0]],LGt=[3,$,DUt,0,[H5,W5,A5,X8,v5,_7,l7,J5,a7],[0,4,0,[64,{[z7]:1}],0,1,0,()=>F9,()=>HGt]],F9=[3,$,J5,0,[wHt,IHt],[0,0]],RGt=[3,$,AUt,0,[M5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,u7,C7,d7,p7,h7,m7,K8,_7,r7],[[0,{[Q]:t9}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[0,{[Q]:v9}],[0,{[Q]:E9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[1,{[Q]:RWt}],[0,{[Q]:m9}]]],zGt=[3,$,jUt,0,[W8,H5,H8,J8,Q8,i5,o5,s5,u5,p5,b5,X8,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,N5,R5,B5,P5,F5,I5,L5,iWt,G5,u7,l7,w7,d7,f7,p7,h7,m7,K8,i7,b7,$5,e7,Q5,Y5,X5,Z5,O5],[[0,1],[0,1],[0,{[Q]:V7}],[()=>P9,16],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[1,{[Q]:l5}],[0,{[Q]:d5}],[0,{[Q]:y5}],[0,{[Q]:_9}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[4,{[Q]:N5}],[0,{[Q]:z5}],[0,{[Q]:V5}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:o9}],[1,{[Q]:HWt}],[128,{[M7]:s9}],[0,{[Q]:v9}],[0,{[Q]:g9}],[0,{[Q]:D9}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:h9}],[0,{[Q]:T9}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}],[0,{[Q]:n9}]],2],BGt=[3,$,NUt,0,[C7],[[0,{[Q]:E9}]]],VGt=[3,$,PUt,0,[W8,H5,b7,C7,p5,X8,O5,i7],[[0,1],[0,1],[()=>GGt,{[j7]:1,[B7]:b7}],[0,{[N7]:R7}],[0,{[Q]:d5}],[0,{[Q]:_9}],[0,{[Q]:n9}],[0,{[Q]:h9}]],3],HGt=[3,$,a7,0,[qHt,UUt],[2,4]],UGt=[3,$,JUt,0,[U8,c7,g7,M5],[[0,{[B7]:U8}],[()=>A9,{[B7]:c7}],[()=>A9,{[B7]:g7}],[4,{[B7]:M5}]],4],WGt=[3,$,y7,0,[H5,rWt],[0,0],2],GGt=[3,$,b7,0,[v7],[[()=>I9,0]],1],KGt=[3,$,tWt,0,[u7,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,d7,p7,h7,K8,r7],[[0,{[Q]:v9}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:m9}]]],qGt=[3,$,nWt,0,[W8,H5,n7,S7,J8,u5,p5,X8,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,d7,f7,p7,i7,O5],[[0,1],[0,1],[1,{[N7]:F7}],[0,{[N7]:L7}],[()=>P9,16],[1,{[Q]:l5}],[0,{[Q]:d5}],[0,{[Q]:_9}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[0,{[Q]:h9}],[0,{[Q]:n9}]],4],JGt=[1,$,Y8,0,[()=>mGt,{[B7]:W8}]],YGt=[1,$,pHt,0,()=>gGt],XGt=[1,$,mHt,0,()=>vGt],ZGt=[1,$,CUt,0,[()=>LGt,0]],I9=[1,$,v7,0,[()=>WGt,{[B7]:y7}]],QGt=[9,$,HVt,{[O7]:[`DELETE`,`/{Key+}?x-id=AbortMultipartUpload`,204]},()=>pGt,()=>fGt],$Gt=[9,$,m5,{[O7]:[`POST`,`/{Key+}`,200]},()=>bGt,()=>yGt],eKt=[9,$,eHt,{[O7]:[`PUT`,`/`,200]},()=>CGt,()=>SGt],tKt=[9,$,uHt,{[O7]:[`POST`,`/{Key+}?uploads`,200]},()=>TGt,()=>wGt],nKt=[9,$,SHt,{[O7]:[`GET`,`/?session`,200]},()=>DGt,()=>EGt],rKt=[9,$,DHt,{[O7]:[`DELETE`,`/{Key+}?x-id=DeleteObject`,204]},()=>kGt,()=>OGt],iKt=[9,$,jHt,{[k7]:`-`,[O7]:[`GET`,`/{Key+}?x-id=GetObject`,200]},()=>jGt,()=>AGt],aKt=[9,$,eUt,{[O7]:[`GET`,`/?x-id=ListBuckets`,200]},()=>NGt,()=>MGt],oKt=[9,$,sUt,{[O7]:[`GET`,`/?list-type=2`,200]},()=>FGt,()=>PGt],sKt=[9,$,kUt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?x-id=PutObject`,200]},()=>zGt,()=>RGt],cKt=[9,$,MUt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?tagging`,200]},()=>VGt,()=>BGt],lKt=[9,$,eWt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?x-id=UploadPart`,200]},()=>qGt,()=>KGt],uKt=class extends z8(cVt,B8,`CreateSession`,nKt){},dKt={name:`@aws-sdk/client-s3`,version:`3.1144.0`,description:`AWS SDK for JavaScript S3 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-s3`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:browser":`yarn g:vitest run -c vitest.config.browser.mts`,"test:browser:watch":`yarn g:vitest watch -c vitest.config.browser.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/checksums":`^3.1001.1`,"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/middleware-sdk-s3":`^3.972.77`,"@aws-sdk/signature-v4-multi-region":`^3.996.47`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@aws-sdk/signature-v4-crt":`3.1144.0`,"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},L9=64,R9=20,z9=new Int32Array([1732584193,4023233417,2562383102,271733878,3285377520]),fKt=new Int32Array([1518500249,1859775393,2400959708,3395469782]),pKt=class e{digestLength=R9;state=Int32Array.from(z9);w;buffer=new Uint8Array(L9);bufferLength=0;bytesHashed=0;finished=!1;inner;outer;constructor(t){if(t){let n=e.normalizeKey(t);this.inner=new e,this.outer=new e;let r=new Uint8Array(128);for(let e=0;e0){for(;n>0&&this.bufferLength=L9;)this.hashBuffer(e,t),t+=L9,n-=L9;for(;n>0;)this.buffer[this.bufferLength++]=e[t++],--n}async digest(){if(this.inner&&this.outer){if(this.finished)throw Error(`Attempted to digest an already finished HMAC.`);this.finished=!0;let e=this.inner.digestSync();return this.outer.update(e),this.outer.digestSync()}return this.digestSync()}reset(){this.state=Int32Array.from(z9),this.buffer=new Uint8Array(L9),this.bufferLength=0,this.bytesHashed=0}digestSync(){let e=this.state.slice(),t=this.buffer.slice(),n=this.bufferLength,r=this.bytesHashed/536870912|0,i=this.bytesHashed<<3;if(t[n++]=128,n>56){for(let e=n;e>>24&255,o[1]=e[0]>>>16&255,o[2]=e[0]>>>8&255,o[3]=e[0]&255,o[4]=e[1]>>>24&255,o[5]=e[1]>>>16&255,o[6]=e[1]>>>8&255,o[7]=e[1]&255,o[8]=e[2]>>>24&255,o[9]=e[2]>>>16&255,o[10]=e[2]>>>8&255,o[11]=e[2]&255,o[12]=e[3]>>>24&255,o[13]=e[3]>>>16&255,o[14]=e[3]>>>8&255,o[15]=e[3]&255,o[16]=e[4]>>>24&255,o[17]=e[4]>>>16&255,o[18]=e[4]>>>8&255,o[19]=e[4]&255,o}static normalizeKey(t){let n=ee(t);if(n.byteLength>L9){let t=new e;t.update(n);let r=t.digestSync(),i=new Uint8Array(L9);return i.set(r),i}let r=new Uint8Array(L9);return r.set(n),r}hashBuffer(e,t){this.hashBufferWith(this.state,e,t)}hashBufferWith(e,t,n){let r=this.w??=new Int32Array(80),i=e[0],a=e[1],o=e[2],s=e[3],c=e[4];for(let e=0;e<16;++e)r[e]=(t[n+e*4]&255)<<24|(t[n+e*4+1]&255)<<16|(t[n+e*4+2]&255)<<8|t[n+e*4+3]&255;for(let e=16;e<80;++e){let t=r[e-3]^r[e-8]^r[e-14]^r[e-16];r[e]=t<<1|t>>>31}for(let e=0;e<80;++e){let t=e<20?0:e<40?1:e<60?2:3,n=((i<<5|i>>>27)+(t===0?a&o^~a&s:t===2?a&o^a&s^o&s:a^o^s)|0)+(c+(fKt[t]+r[e]|0)|0)|0;c=s,s=o,o=a<<30|a>>>2,a=i,i=n}e[0]=e[0]+i|0,e[1]=e[1]+a|0,e[2]=e[2]+o|0,e[3]=e[3]+s|0,e[4]=e[4]+c|0}},mKt=e=>({apiVersion:`2006-03-01`,base64Decoder:e?.base64Decoder??se,base64Encoder:e?.base64Encoder??ne,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??I8,extensions:e?.extensions??[],getAwsChunkedEncodingStream:e?.getAwsChunkedEncodingStream??Tee,httpAuthSchemeProvider:e?.httpAuthSchemeProvider??rVt,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new fe},{schemeId:`aws.auth#sigv4a`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4a`),signer:new aee}],logger:e?.logger??new Ce,md5:e?.md5??ete,protocol:e?.protocol??VBt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.s3`,errorTypeRegistries:dGt,xmlNamespace:`http://s3.amazonaws.com/doc/2006-03-01/`,version:`2006-03-01`,serviceTarget:`AmazonS3`},sdkStreamMixin:e?.sdkStreamMixin??St,serviceId:e?.serviceId??`S3`,sha1:e?.sha1??pKt,sha256:e?.sha256??ut,signerConstructor:e?.signerConstructor??c,signingEscapePath:e?.signingEscapePath??!1,urlParser:e?.urlParser??Ne,useArnRegion:e?.useArnRegion??void 0,utf8Decoder:e?.utf8Decoder??ht,utf8Encoder:e?.utf8Encoder??_t}),hKt=e=>{let t=te(e),n=()=>t().then(Ae),r=mKt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??l,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??Se({serviceId:r.serviceId,clientVersion:dKt.version}),eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??le(`Region is missing`),requestHandler:u.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ot),streamCollector:e?.streamCollector??Ge,streamHasher:e?.streamHasher??$ee,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},gKt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},_Kt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),vKt=(e,t)=>{let n=Object.assign(me(e),pt(e),qe(e),gKt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ve(n),a(n),Le(n),_Kt(n))},yKt=class extends tt{config;constructor(...[t]){let n=hKt(t||{});super(n),this.initConfig=n;let r=aVt(n),a=iBt(i(r)),o=He(a),s=oe(o),c=Fe(s),l=vKt(_Bt(iVt(Af(dt(c))),{session:[()=>this,uKt]}),t?.extensions||[]);this.config=l,this.middlewareStack.use(re(this.config)),this.middlewareStack.use(ft(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(nt(this.config)),this.middlewareStack.use(Me(this.config)),this.middlewareStack.use(Pe(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(et(this.config,{httpAuthSchemeParametersProvider:nVt,identityProviderConfigProvider:async e=>new je({"aws.auth#sigv4":e.credentials,"aws.auth#sigv4a":e.credentials})})),this.middlewareStack.use(d(this.config)),this.middlewareStack.use(BBt(this.config)),this.middlewareStack.use(WBt(this.config)),this.middlewareStack.use(mBt(this.config)),this.middlewareStack.use(TBt(this.config)),this.middlewareStack.use(ABt(this.config))}destroy(){super.destroy()}},B9=`${window.location.protocol}//localhost:9999`,bKt=`${window.location.protocol}//localhost:8443`,V9=null,H9=null,U9=null,W9=null,G9=null,K9=null,q9=null,J9=null,Y9=null,X9=null,Z9=null,Q9=null,$9=null;function xKt(){if(!V9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);V9=new UBe({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),V9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return V9}function SKt(){if(!H9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);H9=new Sat({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),H9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return H9}function CKt(){if(!U9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);U9=new eht({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),U9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return U9}function wKt(){if(!W9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);W9=new Fne({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),W9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return W9}function TKt(){if(!G9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);G9=new gCt({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),G9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return G9}function EKt(){if(!q9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);q9=new UKe({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),q9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return q9}function DKt(){if(!J9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);J9=new I8e({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),J9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return J9}function OKt(){if(!Y9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);Y9=new Lzt({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Y9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Y9}function kKt(){if(!K9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);K9=new yKt({endpoint:bKt,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken},forcePathStyle:!0}),K9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&t.request.path.endsWith(`/`)&&t.request.path!==`/`&&(t.request.path=t.request.path.slice(0,-1)),await e(t)),{step:`build`,name:`removeTrailingSlash`}),K9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/s3${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return K9}function AKt(){if(!X9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);X9=new Vue({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),X9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return X9}function jKt(){if(!Z9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);Z9=new Ome({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Z9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Z9}function MKt(){if(!Q9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);Q9=new Ss({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Q9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Q9}function NKt(){if(!$9){let e=rt();if(!e)throw Error(`AWS credentials not configured`);$9=new lCe({endpoint:B9,region:at(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),$9.middlewareStack.add(e=>async t=>(Ke.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return $9}function PKt(){V9=null,H9=null,U9=null,W9=null,G9=null,K9=null,q9=null,J9=null,Y9=null,X9=null,Z9=null,Q9=null,$9=null}export{bzt as $,wBe as $i,cat as $n,wze as $r,eCt as $t,dVt as A,us as Aa,tBe as Ai,Vmt as An,EKe as Ar,jSt as At,szt as B,ln as Ba,dBe as Bi,Yit as Bn,IKe as Br,VSt as Bt,sKt as C,Aue as Ca,Jze as Ci,Pmt as Cn,E8e as Cr,wSt as Ct,sVt as D,Pue as Da,Qze as Di,Rmt as Dn,A8e as Dr,OSt as Dt,oVt as E,Nue as Ea,Zze as Ei,Lmt as En,k8e as Er,DSt as Et,pVt as F,hs as Fa,oBe as Fi,Kmt as Fn,jKe as Fr,ISt as Ft,fzt as G,gBe as Gi,eat as Gn,gze as Gr,KSt as Gt,lzt as H,pBe as Hi,Zit as Hn,ZU as Hr,USt as Ht,mVt as I,gs as Ia,cBe as Ii,qmt as In,MKe as Ir,LSt as It,hzt as J,yBe as Ji,rat as Jn,yze as Jr,YSt as Jt,pzt as K,_Be as Ki,tat as Kn,_ze as Kr,qSt as Kt,hVt as L,Hne as La,sBe as Li,Jmt as Ln,NKe as Lr,RSt as Lt,fVt as M,fs as Ma,iBe as Mi,Umt as Mn,OKe as Mr,NSt as Mt,gVt as N,ps as Na,rBe as Ni,Wmt as Nn,kKe as Nr,PSt as Nt,lVt as O,Fue as Oa,$ze as Oi,zmt as On,YKe as Or,kSt as Ot,_Vt as P,ms as Pa,aBe as Pi,Gmt as Pn,AKe as Pr,FSt as Pt,yzt as Q,CBe as Qi,sat as Qn,Cze as Qr,$St as Qt,z8 as R,One as Ra,lBe as Ri,Oat as Rn,PKe as Rr,zSt as Rt,oKt as S,kue as Sa,qze as Si,Nmt as Sn,T8e as Sr,CSt as St,lKt as T,Mue as Ta,Xze as Ti,Imt as Tn,O8e as Tr,ESt as Tt,uzt as U,mBe as Ui,Qit as Un,QU as Ur,WSt as Ut,czt as V,fBe as Vi,Xit as Vn,LKe as Vr,HSt as Vt,dzt as W,hBe as Wi,$it as Wn,YBe as Wr,GSt as Wt,_zt as X,xBe as Xi,aat as Xn,xze as Xr,ZSt as Xt,gzt as Y,bBe as Yi,iat as Yn,bze as Yr,XSt as Yt,vzt as Z,SBe as Zi,oat as Zn,Sze as Zr,QSt as Zt,eKt as _,bp as _a,Hze as _i,Omt as _n,b8e as _r,vSt as _t,MKt as a,ABe as aa,Aze as ai,oCt as an,mat as ar,Ezt as at,iKt as b,Af as ba,Gze as bi,jmt as bn,C8e as br,xSt as bt,EKt as c,NBe as ca,Nze as ci,lCt as cn,H8e as cr,kzt as ct,CKt as d,IBe as da,Ize as di,Smt as dn,m8e as dr,SCt as dt,TBe as ea,Tze as ei,tCt as en,lat as er,xzt as et,TKt as f,LBe as fa,Lze as fi,Cmt as fn,h8e as fr,pSt as ft,$Gt as g,Jme as ga,Vze as gi,Dmt as gn,y8e as gr,_St as gt,QGt as h,rCe as ha,Bze as hi,Emt as hn,v8e as hr,gSt as ht,jKt as i,kBe as ia,kze as ii,aCt as in,pat as ir,Tzt as it,B8 as j,ds as ja,nBe as ji,Hmt as jn,DKe as jr,MSt as jt,uVt as k,Os as ka,eBe as ki,Bmt as kn,TKe as kr,ASt as kt,DKt as l,PBe as la,Pze as li,uCt as ln,f8e as lr,Azt as lt,kKt as m,nCe as ma,zze as mi,Tmt as mn,_8e as mr,hSt as mt,wKt as n,DBe as na,Dze as ni,rCt as nn,dat as nr,Czt as nt,NKt as o,jBe as oa,jze as oi,sCt as on,hat as or,Dzt as ot,OKt as p,hCe as pa,Rze as pi,wmt as pn,g8e as pr,mSt as pt,mzt as q,vBe as qi,nat as qn,vze as qr,JSt as qt,AKt as r,OBe as ra,Oze as ri,iCt as rn,fat as rr,wzt as rt,xKt as s,MBe as sa,Mze as si,cCt as sn,gat as sr,Ozt as st,PKt as t,EBe as ta,Eze as ti,nCt as tn,uat as tr,Szt as tt,SKt as u,FBe as ua,Fze as ui,oht as un,p8e as ur,jzt as ut,tKt as v,Sme as va,Uze as vi,kmt as vn,x8e as vr,ySt as vt,cKt as w,jue as wa,Yze as wi,Fmt as wn,D8e as wr,TSt as wt,aKt as x,Oue as xa,Kze as xi,Mmt as xn,w8e as xr,SSt as xt,rKt as y,que as ya,Wze as yi,Amt as yn,S8e as yr,bSt as yt,ozt as z,kne as za,uBe as zi,Jit as zn,FKe as zr,BSt as zt}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-b0hcP1Iz.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-b0hcP1Iz.js deleted file mode 100644 index 9460274a1..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/awsClient-b0hcP1Iz.js +++ /dev/null @@ -1,5 +0,0 @@ -import{$ as e,$t as t,A as n,At as r,B as i,Bt as a,C as o,Ct as s,D as c,Dt as l,E as ee,Et as u,F as te,Ft as d,G as ne,Gt as re,H as ie,Ht as ae,I as oe,It as eee,J as se,K as ce,Kt as le,L as ue,Lt as de,M as fe,Mt as tee,N as pe,Nt as me,Ot as nee,P as he,Pt as ge,Q as _e,Qt as ve,R as ye,Rt as be,S as ree,St as xe,T as Se,Tt as Ce,U as we,Ut as iee,V as Te,Vt as Ee,W as De,Wt as Oe,X as ke,Xt as Ae,Y as je,Yt as Me,Z as Ne,Zt as Pe,_t as Fe,at as Ie,b as aee,bt as Le,ct as oee,dt as Re,et as ze,ft as Be,ht as Ve,it as He,j as Ue,jt as We,k as see,kt as Ge,mt as Ke,nt as qe,o as Je,ot as Ye,pt as Xe,q as Ze,qt as Qe,rt as $e,st as et,t as tt,tt as nt,ut as rt,v as it,vt as at,w as ot,wt as cee,x as st,xt as ct,y as lt,yt as ut,z as dt,zt as ft}from"./cluster-config-xw_Q7X1e.js";import{a as pt,i as mt,n as ht,o as gt,r as _t,t as lee}from"./hex-encoding-B19xAT_7.js";import{a as uee,g as dee,i as fee,p as pee,r as vt}from"./index.browser-C3WbWNjZ.js";function mee(e){return(e.includes(`,`)||e.includes(`"`))&&(e=`"${e.replace(/"/g,`\\"`)}"`),e}function hee(e,t,n){if(n<=0||!Number.isInteger(n))throw Error(`Invalid number of delimiters (`+n+`) for splitEvery.`);let r=e.split(t);if(n===1)return r;let i=[],a=``;for(let e=0;e{if(!Ve(n))throw Error(`@smithy/util-stream: unsupported source type ${n?.constructor?.name??n} in ChecksumStream.`);let a=i??ge;if(typeof TransformStream!=`function`)throw Error(`@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.`);let o=new TransformStream({start(){},async transform(e,n){t.update(e),n.enqueue(e)},async flush(n){let i=await t.digest(),o=a(i);if(e!==o){let t=Error(`Checksum mismatch: expected "${e}" but received "${o}" in response header "${r}".`);n.error(t)}else n.terminate()}});n.pipeThrough(o);let s=o.readable;return Object.setPrototypeOf(s,_ee.prototype),s},yee=class{allocByteArray;byteLength=0;byteArrays=[];constructor(e){this.allocByteArray=e}push(e){this.byteArrays.push(e),this.byteLength+=e.byteLength}flush(){if(this.byteArrays.length===1){let e=this.byteArrays[0];return this.reset(),e}let e=this.allocByteArray(this.byteLength),t=0;for(let n=0;nnew Uint8Array(e))],s=-1,c=async e=>{let{value:l,done:ee}=await r.read(),u=l;if(ee){if(s!==-1){let t=yt(o,s);bt(t)>0&&e.enqueue(t)}e.close()}else{let r=Cee(u,!1);if(s!==r&&(s>=0&&e.enqueue(yt(o,s)),s=r),s===-1){e.enqueue(u);return}let l=bt(u);a+=l;let ee=bt(o[s]);if(l>=t&&ee===0)e.enqueue(u);else{let r=See(o,s,u);!i&&a>t*2&&(i=!0,n?.warn(`@smithy/util-stream - stream chunk size ${l} is below threshold of ${t}, automatically buffering.`)),r>=t?e.enqueue(yt(o,s)):await c(e)}}};return new ReadableStream({pull:c})}var xee=bee;function See(e,t,n){switch(t){case 0:return e[0]+=n,bt(e[0]);case 1:case 2:return e[t].push(n),bt(e[t])}}function yt(e,t){switch(t){case 0:let n=e[0];return e[0]=``,n;case 1:case 2:return e[t].flush()}throw Error(`@smithy/util-stream - invalid index ${t} given to flush()`)}function bt(e){return e?.byteLength??e?.length??0}function Cee(e,t=!0){return t&&typeof Buffer<`u`&&e instanceof Buffer?2:e instanceof Uint8Array?1:typeof e==`string`?0:-1}var wee=(e,t)=>{let{base64Encoder:n,bodyLengthChecker:r,checksumAlgorithmFn:i,checksumLocationName:a,streamHasher:o}=t,s=n!==void 0&&r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0,c=s?o(i,e):void 0,l=e.getReader();return new ReadableStream({async pull(e){let{value:t,done:i}=await l.read();if(i){if(e.enqueue(`0\r -`),s){let t=n(await c);e.enqueue(`${a}:${t}\r\n`),e.enqueue(`\r -`)}e.close()}else e.enqueue(`${(r(t)||0).toString(16)}\r\n${t}\r\n`)}})},xt=`The stream has already been transformed.`,St=e=>{if(!Ct(e)&&!Ve(e)){let t=e?.__proto__?.constructor?.name||e;throw Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${t}`)}let t=!1,n=async()=>{if(t)throw Error(xt);return t=!0,await Ke(e)},r=e=>{if(typeof e.stream!=`function`)throw Error(`Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled. -If you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body`);return e.stream()};return Object.assign(e,{transformToByteArray:n,transformToString:async e=>{let t=await n();if(e===`base64`)return ge(t);if(e===`hex`)return ht(t);if(e===void 0||e===`utf8`||e===`utf-8`)return _t(t);if(typeof TextDecoder==`function`)return new TextDecoder(e).decode(t);throw Error(`TextDecoder is not available, please make sure polyfill is provided.`)},transformToWebStream:()=>{if(t)throw Error(xt);if(t=!0,Ct(e))return r(e);if(Ve(e))return e;throw Error(`Cannot transform payload to web stream, got ${e}`)}})},Ct=e=>typeof Blob==`function`&&e instanceof Blob,wt=class extends oee{async serializeRequest(e,t,n){let r=t&&typeof t==`object`?t:{},i=this.serializer,a={},o={},s=await n.endpoint(),c=ae.of(e?.input),l=[],ee=[],u=!1,te,d=new ve({protocol:``,hostname:``,port:void 0,path:``,fragment:void 0,query:a,headers:o,body:void 0});if(s){this.updateServiceEndpoint(d,s),this.setHostPrefix(d,e,r);let t=iee(e.traits);if(t.http){d.method=t.http[0];let[e,n]=t.http[1].split(`?`);d.path==`/`?d.path=e:d.path+=e;let r=new URLSearchParams(n??``);for(let[e,t]of r)a[e]=t}}for(let[e,t]of c.structIterator()){let n=t.getMergedTraits()??{},s=r[e];if(s==null&&!t.isIdempotencyToken()){if(n.httpLabel&&(d.path.includes(`{${e}+}`)||d.path.includes(`{${e}}`)))throw Error(`No value provided for input HTTP label: ${e}.`);continue}if(n.httpPayload)t.isStreaming()?t.isStructSchema()?r[e]&&(te=await this.serializeEventStream({eventStream:r[e],requestSchema:c})):te=s:(i.write(t,s),te=i.flush());else if(n.httpLabel){i.write(t,s);let n=i.flush();d.path.includes(`{${e}+}`)?d.path=d.path.replace(`{${e}+}`,n.split(`/`).map(Re).join(`/`)):d.path.includes(`{${e}}`)&&(d.path=d.path.replace(`{${e}}`,Re(n)))}else if(n.httpHeader)i.write(t,s),o[n.httpHeader.toLowerCase()]=String(i.flush());else if(typeof n.httpPrefixHeaders==`string`)for(let e in s){if(!gt(s,e))continue;let r=s[e],a=n.httpPrefixHeaders+e;i.write([t.getValueSchema(),{httpHeader:a}],r),o[a.toLowerCase()]=i.flush()}else n.httpQuery||n.httpQueryParams?this.serializeQuery(t,s,a):(u=!0,l.push(e),ee.push(t))}if(u&&r){let[e,t]=(c.getName(!0)??`#Unknown`).split(`#`),n=c.getSchema()[6],a=[3,e,t,c.getMergedTraits(),l,ee,void 0];n?a[6]=n:a.pop(),i.write(a,r),te=i.flush()}return d.headers=o,d.query=a,d.body=te,d}serializeQuery(e,t,n){let r=this.serializer,i=e.getMergedTraits();if(i.httpQueryParams){for(let r in t)if(gt(t,r)&&!(r in n)){let a=t[r],o=e.getValueSchema();Object.assign(o.getMergedTraits(),{...i,httpQuery:r,httpQueryParams:void 0}),this.serializeQuery(o,a,n)}return}if(e.isListSchema()){let a=!!e.getMergedTraits().sparse,o=[];for(let n of t){r.write([e.getValueSchema(),i],n);let t=r.flush();(a||t!==void 0)&&o.push(t)}n[i.httpQuery]=o}else r.write([e,i],t),n[i.httpQuery]=r.flush()}async deserializeResponse(e,t,n){let r=this.deserializer,i=ae.of(e.output),a={};if(n.statusCode>=300){let i=await Be(n.body,t);throw i.byteLength>0&&Object.assign(a,await r.read(15,i)),await this.handleError(e,t,n,a,this.deserializeMetadata(n)),Error(`@smithy/core/protocols - HTTP Protocol error handler failed to throw.`)}for(let e in n.headers){if(!gt(n.headers,e))continue;let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let o=await this.deserializeHttpMessage(i,t,n,a);if(o.length){let e=await Be(n.body,t);if(e.byteLength>0){let t=await r.read(i,e);for(let e of o)t[e]!=null&&(a[e]=t[e])}}else o.discardResponseBody&&await Be(n.body,t);return a.$metadata=this.deserializeMetadata(n),a}async deserializeHttpMessage(e,t,n,r,i){let a;a=r instanceof Set?i:r;let o=!0,s=this.deserializer,c=ae.of(e),l=[];for(let[e,r]of c.structIterator()){let i=r.getMemberTraits();if(i.httpPayload){if(o=!1,r.isStreaming())r.isStructSchema()?a[e]=await this.deserializeEventStream({response:n,responseSchema:c}):a[e]=St(n.body);else if(n.body){let i=await Be(n.body,t);i.byteLength>0&&(a[e]=await s.read(r,i))}}else if(i.httpHeader){let t=String(i.httpHeader).toLowerCase(),o=n.headers[t];if(o!=null){if(r.isListSchema()){let n=r.getValueSchema();n.getMergedTraits().httpHeader=t;let i;i=n.isTimestampSchema()&&n.getSchema()===4?hee(o,`,`,2):nee(o);let c=[];for(let e of i)c.push(await s.read(n,e.trim()));a[e]=c}else a[e]=await s.read(r,o)}}else if(i.httpPrefixHeaders!==void 0){a[e]={};for(let t in n.headers)if(gt(n.headers,t)&&t.startsWith(i.httpPrefixHeaders)){let o=n.headers[t],c=r.getValueSchema();c.getMergedTraits().httpHeader=t,a[e][t.slice(i.httpPrefixHeaders.length)]=await s.read(c,o)}}else i.httpResponseCode?a[e]=n.statusCode:l.push(e)}return l.discardResponseBody=o,l}},Tt=class extends rt{codecDeserializer;stringDeserializer;constructor(e,t){super(),this.codecDeserializer=e,this.stringDeserializer=new Ie(t)}setSerdeContext(e){this.stringDeserializer.setSerdeContext(e),this.codecDeserializer.setSerdeContext(e),this.serdeContext=e}read(e,t){let n=ae.of(e),r=n.getMergedTraits(),i=this.serdeContext?.utf8Encoder??_t;if(r.httpHeader||r.httpResponseCode)return this.stringDeserializer.read(n,i(t));if(r.httpPayload){if(n.isBlobSchema()){let e=this.serdeContext?.utf8Decoder??mt;return typeof t==`string`?e(t):t}if(n.isStringSchema())return`byteLength`in t?i(t):t}return this.codecDeserializer.read(n,t)}},Et=class extends rt{settings;stringBuffer=``;constructor(e){super(),this.settings=e}write(e,t){let n=ae.of(e);switch(typeof t){case`object`:if(t===null){this.stringBuffer=`null`;return}if(n.isTimestampSchema()){if(!(t instanceof Date))throw Error(`@smithy/core/protocols - received non-Date value ${t} when schema expected Date in ${n.getName(!0)}`);switch(Ye(n,this.settings)){case 5:this.stringBuffer=t.toISOString().replace(`.000Z`,`Z`);break;case 6:this.stringBuffer=r(t);break;case 7:this.stringBuffer=String(t.getTime()/1e3);break;default:console.warn(`Missing timestamp format, using epoch seconds`,t),this.stringBuffer=String(t.getTime()/1e3)}return}if(n.isBlobSchema()&&`byteLength`in t){this.stringBuffer=(this.serdeContext?.base64Encoder??ge)(t);return}if(n.isListSchema()&&Array.isArray(t)){let e=``;for(let r of t){this.write([n.getValueSchema(),n.getMergedTraits()],r);let t=this.flush(),i=n.getValueSchema().isTimestampSchema()?t:mee(t);e!==``&&(e+=`, `),e+=i}this.stringBuffer=e;return}this.stringBuffer=JSON.stringify(t,null,2);break;case`string`:let e=n.getMergedTraits().mediaType,i=t;if(e&&((e===`application/json`||e.endsWith(`+json`))&&(i=Ge.from(i)),n.getMergedTraits().httpHeader)){this.stringBuffer=(this.serdeContext?.base64Encoder??ge)(i.toString());return}this.stringBuffer=t;break;default:this.stringBuffer=n.isIdempotencyToken()?Xe():String(t)}}flush(){let e=this.stringBuffer;return this.stringBuffer=``,e}},Dt=class{codecSerializer;stringSerializer;buffer;constructor(e,t,n=new Et(t)){this.codecSerializer=e,this.stringSerializer=n}setSerdeContext(e){this.codecSerializer.setSerdeContext(e),this.stringSerializer.setSerdeContext(e)}write(e,t){let n=ae.of(e),r=n.getMergedTraits();if(r.httpHeader||r.httpLabel||r.httpQuery){this.stringSerializer.write(n,t),this.buffer=this.stringSerializer.flush();return}return this.codecSerializer.write(n,t)}flush(){if(this.buffer!==void 0){let e=this.buffer;return this.buffer=void 0,e}return this.codecSerializer.flush()}},Ot=class{async sign(e,t,n){let r=ve.clone(e);if(!t.token)throw Error("request could not be signed with `token` since the `token` is not defined");return r.headers.Authorization=`Bearer ${t.token}`,r}},kt;function At(){if(kt===void 0)try{if(typeof Buffer!=`function`)kt=!1;else{let e=JSON.parse(Buffer.from([123,125]));kt=typeof e==`object`&&!!e}}catch{kt=!1}return kt}function jt(e,t,n){if(n?.source){let e=n.source;if(typeof t==`number`)return t<=2**53-1&&t>=-(2**53-1)?Nt(e,t)?t:new l(e,`bigDecimal`):Mt(e)?new l(e,`bigDecimal`):/[eE]/.test(e)?Tee(e):BigInt(e)}return t}function Mt(e){let t=e.indexOf(`.`);if(t===-1)return!1;let n=e.search(/[eE]/);if(n===-1)return!0;let r=n-t-1;return parseInt(e.slice(n+1),10)=o.length?o+`0`.repeat(c-o.length):o.slice(0,c)+`.`+o.slice(c)}return i.includes(`.`)&&(i=i.replace(/(\.\d*?)0+$/,`$1`).replace(/\.$/,``)),(t?`-`:``)+i}function Tee(e){let t=e.search(/[eE]/),n=parseInt(e.slice(t+1),10),r=e.startsWith(`-`),i=e.slice(+!!r,t),a=i.indexOf(`.`),o,s;a===-1?(o=i,s=n):(o=i.slice(0,a)+i.slice(a+1),s=n-(i.length-a-1)),o=o.replace(/0+$/,``)||`0`;let c=BigInt(o)*10n**BigInt(s+(i.replace(`.`,``).length-o.length));return r?-c:c}var Ft=Symbol.for(`@aws-sdk/reviver`);function It(e){let t=ae.of(e),n=t.getSchema();if(Array.isArray(n)&&t.isStructSchema()){if(Ft in n)return n[Ft];let e=Lt(t,new Set);return n[Ft]=e,e}return Lt(t,new Set)}function Lt(e,t){let n=e.getSchema();if(t.has(n))return!1;if(t.add(n),e.isBigIntegerSchema()||e.isBigDecimalSchema())return!0;if(e.isStructSchema()){for(let[,n]of e.structIterator())if(Lt(n,t))return!0}else if(e.isListSchema()||e.isMapSchema()){if(Lt(e.getValueSchema(),t))return!0}else if(e.isDocumentSchema())return!0;return!1}var Eee=(e,t)=>Be(e,t).then(e=>(t?.utf8Encoder??_t)(e));async function Dee(e,t,n){let r;if(At()&&typeof e?.[Symbol.asyncIterator]==`function`){let n=await Be(e,t);typeof Buffer==`function`&&(r=Buffer.isBuffer(n)?n:Buffer.from(n.buffer,n.byteOffset,n.byteLength))}if(r||=await Eee(e,t),r.length===0)return{};let i=n&&It(n)?jt:void 0;try{return JSON.parse(r,i)}catch(e){throw e?.name===`SyntaxError`&&Object.defineProperty(e,"$responseBodyText",{value:typeof r==`string`?r:r.toString(`utf8`)}),e}}var Rt=(e,t)=>Object.keys(e).find(e=>e.toLowerCase()===t.toLowerCase()),zt=e=>{let t=e;return typeof t==`number`&&(t=t.toString()),t.indexOf(`,`)>=0&&(t=t.split(`,`)[0]),t.indexOf(`:`)>=0&&(t=t.split(`:`)[0]),t.indexOf(`#`)>=0&&(t=t.split(`#`)[1]),t},Oee=(e,t)=>Bt(e,t,[`header`,`code`,`type`]),kee=(e,t,n=!1)=>Bt(e,t,n?[`code`,`header`,`type`]:[`type`,`code`,`header`]),Bt=({headers:e},t,n)=>{for(;n.length>0;)switch(n.shift()){case`header`:let n=Rt(e??{},`x-amzn-errortype`);if(n!==void 0)return zt(e[n]);break;case`code`:let r=Rt(t??{},`code`);if(r&&t[r]!==void 0)return zt(t[r]);break;case`type`:if(t?.__type!==void 0)return zt(t.__type)}},Aee=class extends o{settings;constructor(e){super(),this.settings=e}async read(e,t){let n=It(e)?jt:void 0,r;if(typeof t==`string`){if(t.length===0)return{};r=JSON.parse(t,n)}else if(t instanceof Uint8Array&&At()){if(t.byteLength===0)return{};let e=Buffer.isBuffer(t)?t:Buffer.from(t.buffer,t.byteOffset,t.byteLength);r=JSON.parse(e,n)}else r=await Dee(t,this.serdeContext,e);return this._read(e,r)}readObject(e,t){return this._read(e,t)}_read(e,t){let n=typeof t==`object`&&!!t,r=ae.of(e);if(n){if(r.isStructSchema())return this._readStruct(r,t);if(Array.isArray(t)&&r.isListSchema()){let e=r.getValueSchema();if(this.needsTransform(e))for(let n=0;nVt+6e4&&(console.warn(`@aws-sdk/core/protocols - WARN - JsonCodec2: you have called a string method on a Uint8Array request body. It has been automatically converted to string. In a future version this will throw an error.`),Vt=e),this.string=_t(this)}return this.string}},Vt=0,Ht=new TextEncoder,Ut=123,Wt=125,Mee=91,Nee=93,Gt=34,Kt=58,qt=44,Jt=92,Pee=new Uint8Array([116,114,117,101]),Fee=new Uint8Array([102,97,108,115,101]),Iee=new Uint8Array([110,117,108,108]),Yt=Array(128).fill(null);Yt[8]=`b`,Yt[9]=`t`,Yt[10]=`n`,Yt[12]=`f`,Yt[13]=`r`,Yt[34]=`"`,Yt[92]=`\\`;for(let e=0;e<32;e++)Yt[e]===null&&(Yt[e]=`u00`+e.toString(16).padStart(2,`0`));var Xt=2048;function Zt(e){return jee.allocUnsafe(e)}var Lee=class e extends o{settings;json;i=0;rootSchema;rawValue;passthrough=!1;constructor(e){super(),this.settings=e,this.json=Zt(Xt)}write(e,t){this.i=0,this.rawValue=t,this.rootSchema=ae.of(e),this.passthrough=this.rootSchema.isBlobSchema()||this.rootSchema.isStringSchema(),this.passthrough||this.writeValue(this.rootSchema,t,void 0)}writeDiscriminatedDocument(e,t){this.i=0,this.rootSchema=ae.of(e);let n=this.rootSchema;if(n.isStructSchema()&&typeof t==`object`&&t){this.writeValue(n,t,void 0);let e=`"__type":"${n.getName(!0)??`Unknown`}",`,r=e.length;this.ensure(r),this.json.copyWithin(1+r,1,this.i),Ht.encodeInto(e,this.json.subarray(1)),this.i+=r}else this.writeValue(n,t,void 0)}flush(){this.rootSchema=void 0;let e=this.i;this.i=0;let t=this.rawValue;if(this.rawValue=void 0,e===0)return t;let n=this.json.subarray(0,e);return this.json=Zt(Xt),n}ensure(e){let{i:t,json:n}=this;if(t+e>n.length){let r=n.length*2;for(;r34&&r<92)this.json[this.i++]=r;else if(r<128){let e=Yt[r];if(e!==null){this.ensure(e.length+1),this.json[this.i++]=Jt;for(let t=0;t=55296&&r<=56319){let i=n+1=56320&&i<=57343){this.ensure(4);let{written:t}=Ht.encodeInto(e.substring(n,n+2),this.json.subarray(this.i));this.i+=t,++n}else this.ensure(6),this.writeUnicodeEscape(r)}else if(r>=56320&&r<=57343)this.ensure(6),this.writeUnicodeEscape(r);else{let{i:e,json:t}=this;r<2048?(t[e++]=192|r>>6,t[e++]=128|r&63):(t[e++]=224|r>>12,t[e++]=128|r>>6&63,t[e++]=128|r&63),this.i=e}}this.json[this.i++]=Gt}writeUnicodeEscape(e){let{json:t,i:n}=this;t[n++]=Jt,t[n++]=117;let r=e.toString(16).padStart(4,`0`);for(let e=0;e<4;++e)t[n++]=r.charCodeAt(e);this.i=n}static B64=(()=>{let e=new Uint8Array(64);for(let t=0;t<64;++t)e[t]=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`.charCodeAt(t);return e})();writeBase64(t){let n=Math.ceil(t.length/3)*4;this.ensure(n+2);let r=this.json,i=e.B64,a=this.i;r[a++]=Gt;let o=t.length,s=o%3,c=o-s;for(let e=0;e>2],r[a++]=i[(n&3)<<4|o>>4],r[a++]=i[(o&15)<<2|s>>6],r[a++]=i[s&63]}if(s===2){let e=t[c],n=t[c+1];r[a++]=i[e>>2],r[a++]=i[(e&3)<<4|n>>4],r[a++]=i[(n&15)<<2],r[a++]=61}else if(s===1){let e=t[c];r[a++]=i[e>>2],r[a++]=i[(e&3)<<4],r[a++]=61,r[a++]=61}r[a++]=Gt,this.i=a}writeValue(e,t,n){if(t==null){if(n?.isStructSchema()){if(t===void 0&&ae.of(e).isIdempotencyToken()){this.writeAsciiQuoted(Xe());return}return}this.ensure(4),this.json.set(Iee,this.i),this.i+=4;return}let r=ae.of(e),i=typeof t==`object`;if(r.isStringSchema()){let e=r.getMergedTraits().mediaType;if(e&&(e===`application/json`||e.endsWith(`+json`))){this.writeJsonString(Ge.from(t).toString());return}}if(i){if(r.isStructSchema()){this.writeStruct(r,t);return}if(Array.isArray(t)&&(r.isListSchema()||r.isDocumentSchema())){this.writeList(r,t,r.isDocumentSchema());return}if(r.isMapSchema()){this.writeMap(r,t,!1);return}if(t instanceof Uint8Array&&(r.isBlobSchema()||r.isDocumentSchema())){this.writeBase64(t);return}if(t instanceof Date&&(r.isTimestampSchema()||r.isDocumentSchema())){this.writeTimestamp(r,t);return}if(t instanceof l){this.writeAscii(t.string);return}if(r.isDocumentSchema()){Array.isArray(t)?this.writeList(r,t,!0):this.writeMap(r,t,!0);return}let e=JSON.stringify(t);this.writeAscii(e);return}if(typeof t==`string`){if(r.isBlobSchema()){let e=(this.serdeContext?.base64Encoder??ge)(t);this.writeAsciiQuoted(e);return}this.writeJsonString(t);return}if(typeof t==`number`){if(Math.abs(t)===1/0||Number.isNaN(t)){this.writeAsciiQuoted(String(t));return}let e=String(t);this.writeAscii(e);return}if(typeof t==`boolean`){this.ensure(5);let{i:e,json:n}=this;t?(n.set(Pee,e),e+=4):(n.set(Fee,e),e+=5),this.i=e;return}if(typeof t==`bigint`){this.writeAscii(t.toString());return}this.writeAscii(String(t))}writeStruct(e,t){this.ensure(2),this.json[this.i++]=Ut;let n=!1,r=typeof t.__type==`string`,i;r&&(i=new Set);for(let[r,a]of e.structIterator()){let o=t[r];if(o==null&&!a.isIdempotencyToken())continue;n&&(this.ensure(1),this.json[this.i++]=qt),n=!0;let s=this.settings.jsonName?a.getMergedTraits().jsonName??r:r;i&&(i.add(r),i.add(s)),this.writeAsciiQuoted(s),this.json[this.i++]=Kt,this.writeValue(a,o,e)}if(!n&&e.isUnionSchema()){let{$unknown:n}=t;if(Array.isArray(n)){let[t,r]=n;this.writeAsciiQuoted(t),this.ensure(1),this.json[this.i++]=Kt,this.writeValue(15,r,e)}}else if(r)for(let e in t){if(i.has(e))continue;i.add(e);let r=t[e];n&&(this.ensure(1),this.json[this.i++]=qt),n=!0,this.writeAsciiQuoted(e),this.ensure(1),this.json[this.i++]=Kt,this.writeValue(15,r,void 0)}this.ensure(1),this.json[this.i++]=Wt}writeList(e,t,n){let r=!!e.getMergedTraits().sparse,i=e.getValueSchema();if(!n&&(i.isStringSchema()||i.isNumericSchema()||i.isBooleanSchema())){let e=!1;for(let n=0;n"]/g,Bee={"&":`&`,"<":`<`,">":`>`,'"':`"`};function Vee(e){return e.replace(zee,e=>Bee[e])}var Hee=/[&"'<>\r\n\u0085\u2028]/g,Uee={"&":`&`,'"':`"`,"'":`'`,"<":`<`,">":`>`,"\r":` `,"\n":` `,"…":`…`,"\u2028":`
`};function Wee(e){return e.replace(Hee,e=>Uee[e])}var tn=class{value;constructor(e){this.value=e}toString(){return Wee(``+this.value)}},nn=class e{name;children;attributes={};static of(t,n,r){let i=new e(t);return n!==void 0&&i.addChildNode(new tn(n)),r!==void 0&&i.withName(r),i}constructor(e,t=[]){this.name=e,this.children=t}withName(e){return this.name=e,this}addAttribute(e,t){return this.attributes[e]=t,this}addChildNode(e){return this.children.push(e),this}removeAttribute(e){return delete this.attributes[e],this}n(e){return this.name=e,this}c(e){return this.children.push(e),this}a(e,t){return t!=null&&(this.attributes[e]=t),this}cc(t,n,r=n){if(t[n]!=null){let i=e.of(n,t[n]).withName(r);this.c(i)}}l(e,t,n,r){e[t]!=null&&r().map(e=>{e.withName(n),this.c(e)})}lc(t,n,r,i){if(t[n]!=null){let t=i(),n=new e(r);t.map(e=>{n.c(e)}),this.c(n)}}toString(){let e=!!this.children.length,t=`<${this.name}`,n=this.attributes;for(let e of Object.keys(n)){let r=n[e];r!=null&&(t+=` ${e}="${Vee(``+r)}"`)}return t+=e?`>${this.children.map(e=>e.toString()).join(``)}`:`/>`}},Gee=class extends lt{options;constructor(e){super(e),this.options=e,Object.assign(this.serializer.settings,{capitalizeKeys:!0,flattenLists:!0,serializeEmptyLists:!1,ec2:!0})}getShapeId(){return`aws.protocols#ec2Query`}useNestedResult(){return!1}},Kee=(e,t)=>{if(t?.Error?.Code!==void 0)return t.Error.Code;if(t?.Code!==void 0)return t.Code;if(e.statusCode==404)return`NotFound`},qee=class extends o{settings;stringBuffer;byteBuffer;buffer;constructor(e){super(),this.settings=e}write(e,t){let n=ae.of(e);if(n.isStringSchema()&&typeof t==`string`)this.stringBuffer=t;else if(n.isBlobSchema())this.byteBuffer=`byteLength`in t?t:(this.serdeContext?.base64Decoder??d)(t);else{this.buffer=this.writeStruct(n,t,void 0);let e=n.getMergedTraits();e.httpPayload&&!e.xmlName&&this.buffer.withName(n.getName())}}flush(){if(this.byteBuffer!==void 0){let e=this.byteBuffer;return delete this.byteBuffer,e}if(this.stringBuffer!==void 0){let e=this.stringBuffer;return delete this.stringBuffer,e}let e=this.buffer;return this.settings.xmlNamespace&&(e?.attributes?.xmlns||e.addAttribute(`xmlns`,this.settings.xmlNamespace)),delete this.buffer,e.toString()}writeStruct(e,t,n){let r=e.getMergedTraits(),i=e.isMemberSchema()&&!r.httpPayload?e.getMemberTraits().xmlName??e.getMemberName():r.xmlName??e.getName();if(!i||!e.isStructSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${e.getName(!0)}.`);let a=nn.of(i),[o,s]=this.getXmlnsAttribute(e,n);for(let[n,r]of e.structIterator()){let e=t[n];if(e!=null||r.isIdempotencyToken()){if(r.getMergedTraits().xmlAttribute){a.addAttribute(r.getMergedTraits().xmlName??n,this.writeSimple(r,e));continue}if(r.isListSchema())this.writeList(r,e,a,s);else if(r.isMapSchema())this.writeMap(r,e,a,s);else if(r.isStructSchema())a.addChildNode(this.writeStruct(r,e,s));else{let t=nn.of(r.getMergedTraits().xmlName??r.getMemberName());this.writeSimpleInto(r,e,t,s),a.addChildNode(t)}}}let{$unknown:c}=t;if(c&&e.isUnionSchema()&&Array.isArray(c)&&Object.keys(t).length===1){let[e,n]=c,r=nn.of(e);if(typeof n!=`string`){if(t instanceof nn||t instanceof tn)a.addChildNode(t);else throw Error(`@aws-sdk - $unknown union member in XML requires value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.`)}this.writeSimpleInto(0,n,r,s),a.addChildNode(r)}return s&&a.addAttribute(o,s),a}writeList(e,t,n,r){if(!e.isMemberSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${e.getName(!0)}`);let i=e.getMergedTraits(),a=e.getValueSchema(),o=a.getMergedTraits(),s=!!o.sparse,c=!!i.xmlFlattened,[l,ee]=this.getXmlnsAttribute(e,r),u=(t,n)=>{if(a.isListSchema())this.writeList(a,Array.isArray(n)?n:[n],t,ee);else if(a.isMapSchema())this.writeMap(a,n,t,ee);else if(a.isStructSchema()){let r=this.writeStruct(a,n,ee);t.addChildNode(r.withName(c?i.xmlName??e.getMemberName():o.xmlName??`member`))}else{let r=nn.of(c?i.xmlName??e.getMemberName():o.xmlName??`member`);this.writeSimpleInto(a,n,r,ee),t.addChildNode(r)}};if(c)for(let e of t)(s||e!=null)&&u(n,e);else{let r=nn.of(i.xmlName??e.getMemberName());ee&&r.addAttribute(l,ee);for(let e of t)(s||e!=null)&&u(r,e);n.addChildNode(r)}}writeMap(e,t,n,r,i=!1){if(!e.isMemberSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${e.getName(!0)}`);let a=e.getMergedTraits(),o=e.getKeySchema(),s=o.getMergedTraits().xmlName??`key`,c=e.getValueSchema(),l=c.getMergedTraits(),ee=l.xmlName??`value`,u=!!l.sparse,te=!!a.xmlFlattened,[d,ne]=this.getXmlnsAttribute(e,r),re=(e,t,n)=>{let r=nn.of(s,t),[i,a]=this.getXmlnsAttribute(o,ne);a&&r.addAttribute(i,a),e.addChildNode(r);let l=nn.of(ee);c.isListSchema()?this.writeList(c,n,l,ne):c.isMapSchema()?this.writeMap(c,n,l,ne,!0):c.isStructSchema()?l=this.writeStruct(c,n,ne):this.writeSimpleInto(c,n,l,ne),e.addChildNode(l)};if(te)for(let r in t){let i=t[r];if(u||i!=null){let t=nn.of(a.xmlName??e.getMemberName());re(t,r,i),n.addChildNode(t)}}else{let r;i||(r=nn.of(a.xmlName??e.getMemberName()),ne&&r.addAttribute(d,ne),n.addChildNode(r));for(let e in t){let a=t[e];if(u||a!=null){let t=nn.of(`entry`);re(t,e,a),(i?n:r).addChildNode(t)}}}}writeSimple(e,t){if(t===null)throw Error(`@aws-sdk/core/protocols - (XML serializer) cannot write null value.`);let n=ae.of(e),i=null;if(t&&typeof t==`object`){if(n.isBlobSchema())i=(this.serdeContext?.base64Encoder??ge)(t);else if(n.isTimestampSchema()&&t instanceof Date)switch(Ye(n,this.settings)){case 5:i=t.toISOString().replace(`.000Z`,`Z`);break;case 6:i=r(t);break;case 7:i=String(t.getTime()/1e3);break;default:console.warn(`Missing timestamp format, using http date`,t),i=r(t)}else if(n.isBigDecimalSchema()&&t)return t instanceof l?t.string:String(t);else if(n.isMapSchema()||n.isListSchema())throw Error(`@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead.`);else throw Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${n.getName(!0)}`)}if((n.isBooleanSchema()||n.isNumericSchema()||n.isBigIntegerSchema()||n.isBigDecimalSchema())&&(i=String(t)),n.isStringSchema()&&(i=t===void 0&&n.isIdempotencyToken()?Xe():String(t)),i===null)throw Error(`Unhandled schema-value pair ${n.getName(!0)}=${t}`);return i}writeSimpleInto(e,t,n,r){let i=this.writeSimple(e,t),a=ae.of(e),o=new tn(i),[s,c]=this.getXmlnsAttribute(a,r);c&&n.addAttribute(s,c),n.addChildNode(o)}getXmlnsAttribute(e,t){let[n,r]=e.getMergedTraits().xmlNamespace??[];return r&&r!==t?[n?`xmlns:${n}`:`xmlns`,r]:[void 0,void 0]}},Jee=class extends o{settings;constructor(e){super(),this.settings=e}createSerializer(){let e=new qee(this.settings);return e.setSerdeContext(this.serdeContext),e}createDeserializer(){let e=new aee(this.settings);return e.setSerdeContext(this.serdeContext),e}},Yee=class extends wt{codec;serializer;deserializer;mixin=new ot;constructor(e){super(e);let t={timestampFormat:{useTrait:!0,default:5},httpBindings:!0,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace};this.codec=new Jee(t),this.serializer=new Dt(this.codec.createSerializer(),t),this.deserializer=new Tt(this.codec.createDeserializer(),t)}getPayloadCodec(){return this.codec}getShapeId(){return`aws.protocols#restXml`}async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n),i=ae.of(e.input);if(!r.headers[`content-type`]){let e=this.mixin.resolveRestContentType(this.getDefaultContentType(),i);e&&(r.headers[`content-type`]=e)}return typeof r.body==`string`&&r.headers[`content-type`]===this.getDefaultContentType()&&!r.body.startsWith(``+r.body),r}async deserializeResponse(e,t,n){return super.deserializeResponse(e,t,n)}async handleError(e,t,n,r,i){let a=Kee(n,r)??`Unknown`;if(this.mixin.compose(this.compositeErrorRegistry,a,this.options.defaultNamespace),r.Error&&typeof r.Error==`object`)for(let e of Object.keys(r.Error))r[e]=r.Error[e],e.toLowerCase()===`message`&&(r.message=r.Error[e]);r.RequestId&&!i.requestId&&(i.requestId=r.RequestId);let{errorSchema:o,errorMetadata:s}=await this.mixin.getErrorSchemaOrThrowBaseException(a,this.options.defaultNamespace,n,r,i),c=ae.of(o),l=r.Error?.message??r.Error?.Message??r.message??r.Message??`UnknownError`,ee=new((this.compositeErrorRegistry.getErrorCtor(o))??Error)({});await this.deserializeHttpMessage(o,t,n,r);let u={},te=this.codec.createDeserializer();for(let[e,t]of c.structIterator()){let n=t.getMergedTraits().xmlName??e,i=r.Error?.[n]??r[n];u[e]=te.readSchema(t,i)}throw this.mixin.decorateServiceException(Object.assign(ee,s,{$fault:c.getMergedTraits().error,message:l},u),r)}getDefaultContentType(){return`application/xml`}hasUnstructuredPayloadBinding(e){for(let[,t]of e.structIterator())if(t.getMergedTraits().httpPayload)return!(t.isStructSchema()||t.isMapSchema()||t.isListSchema());return!1}};async function Xee(e,t,n=1048576){let r=e.size,i=0;for(;i{n.update(e)}),n.digest()},Qee=class{digestLength=16;state=Uint32Array.from(rn);writeBuffer=new DataView(new ArrayBuffer(64));bufferLength=0;bytesHashed=0;update(e){let t=Ce(e),n=0,r=t.byteLength;for(this.bytesHashed+=r;r>0;)this.writeBuffer.setUint8(this.bufferLength++,t[n++]),--r,this.bufferLength===64&&(on(this.state,this.writeBuffer),this.bufferLength=0)}async digest(){let e=Uint32Array.from(this.state),t=new DataView(this.writeBuffer.buffer.slice(0)),n=this.bufferLength,r=this.bytesHashed*8;if(t.setUint8(n++,128),this.bufferLength%64>=56){for(let e=n;e<64;++e)t.setUint8(e,0);on(e,t),n=0}for(let e=n;e<56;++e)t.setUint8(e,0);t.setUint32(56,r>>>0,!0),t.setUint32(60,Math.floor(r/2**32),!0),on(e,t);let i=new Uint8Array(16),a=new DataView(i.buffer);for(let t=0;t<4;++t)a.setUint32(t*4,e[t],!0);return i}reset(){this.state.set(rn),this.writeBuffer=new DataView(new ArrayBuffer(64)),this.bufferLength=0,this.bytesHashed=0}},rn=[1732584193,4023233417,2562383102,271733878],an=4294967295,$ee=Uint8Array.of(7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21),ete=Array.from({length:64},(e,t)=>Math.abs(Math.sin(t+1))*2**32>>>0);function on(e,t){let n=e[0],r=e[1],i=e[2],a=e[3];for(let e=0;e<64;++e){let o,s;e<16?(o=r&i|~r&a,s=e):e<32?(o=a&r|i&~a,s=(5*e+1)%16):e<48?(o=r^i^a,s=(3*e+5)%16):(o=i^(r|~a),s=7*e%16);let c=t.getUint32(s*4,!0),l=a;a=i,i=r;let ee=$ee[(e>>4)*4+(e&3)],u=(n+o&an)+(c+ete[e]&an)&an;r=r+((u<>>32-ee)>>>0)&an,n=l}e[0]=e[0]+n&an,e[1]=e[1]+r&an,e[2]=e[2]+i&an,e[3]=e[3]+a&an}var tte=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function nte(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`acm`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var rte=e=>{let t=[];return e.operation,t.push(nte(e)),t},ite=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},sn=e=>Object.assign(e,{useFipsEndpoint:e.useFipsEndpoint??!1,useDualstackEndpoint:e.useDualstackEndpoint??!1,defaultSigningName:`acm`,clientContextParams:e.clientContextParams??{}}),cn={ServiceType:{type:`clientContextParams`,name:`serviceType`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},ln={name:`@aws-sdk/client-acm`,version:`3.1135.0`,description:`AWS SDK for JavaScript Acm Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-acm`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-acm`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},un=`PartitionResult`,dn=`stringEquals`,fn=`booleanEquals`,pn={fn:`getAttr`,argv:[{ref:un},`name`]},mn={},hn={conditions:[[`isSet`,[{ref:`Endpoint`}]],[`aws.partition`,[{ref:`Region`}],un],[dn,[{ref:`ServiceType`},`ACM-ACME`]],[dn,[pn,`aws`]],[fn,[{ref:`UseFIPS`},!0]],[fn,[{ref:`UseDualStack`},!0]],[dn,[pn,`aws-us-gov`]]],results:[[-1],[`{Endpoint}`,mn],[-1,`FIPS endpoints are not available for ACME operations`],[`https://acm-acme.{Region}.{PartitionResult#dualStackDnsSuffix}`,mn],[-1,`ACME operations are only available in commercial AWS partitions`],[`https://acm-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,mn],[`https://acm.{Region}.amazonaws.com`,mn],[`https://acm-fips.{Region}.{PartitionResult#dnsSuffix}`,mn],[`https://acm.{Region}.{PartitionResult#dualStackDnsSuffix}`,mn],[`https://acm.{Region}.{PartitionResult#dnsSuffix}`,mn],[-1,`Region must be set to resolve an endpoint.`]]},gn=2,_n=new Int32Array([-1,1,-1,0,100000001,3,1,4,100000010,2,9,5,4,7,6,5,100000008,100000009,5,100000005,8,6,100000006,100000007,3,10,100000004,4,100000002,100000003]),vn=xe.from(_n,gn,hn.conditions,hn.results),yn=new ct({size:50,params:[`Endpoint`,`Region`,`ServiceType`,`UseDualStack`,`UseFIPS`]}),bn=(e,t={})=>yn.get(e,()=>ut(vn,{endpointParams:e,logger:t.logger}));Le.aws=oe;var xn=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Sn=class e extends xn{name=`AccessDeniedException`;$fault=`client`;Message;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Cn=class e extends xn{name=`InvalidArnException`;$fault=`client`;constructor(t){super({name:`InvalidArnException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wn=class e extends xn{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Tn=class e extends xn{name=`InvalidTagException`;$fault=`client`;constructor(t){super({name:`InvalidTagException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},En=class e extends xn{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dn=class e extends xn{name=`TagPolicyException`;$fault=`client`;constructor(t){super({name:`TagPolicyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},On=class e extends xn{name=`ThrottlingException`;$fault=`client`;throttlingReasons;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.throttlingReasons=t.throttlingReasons}},kn=class e extends xn{name=`TooManyTagsException`;$fault=`client`;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},An=class e extends xn{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jn=class e extends xn{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mn=class e extends xn{name=`InternalServerException`;$fault=`server`;$retryable={};constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Nn=class e extends xn{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Pn=class e extends xn{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Fn=class e extends xn{name=`RequestInProgressException`;$fault=`client`;constructor(t){super({name:`RequestInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},In=class e extends xn{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ln=class e extends xn{name=`InvalidArgsException`;$fault=`client`;constructor(t){super({name:`InvalidArgsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Rn=class e extends xn{name=`InvalidDomainValidationOptionsException`;$fault=`client`;constructor(t){super({name:`InvalidDomainValidationOptionsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zn=class e extends xn{name=`InvalidStateException`;$fault=`client`;constructor(t){super({name:`InvalidStateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bn=`AccessDeniedException`,Vn=`CreatedAt`,Hn=`CertificateArn`,Un=`CertificateChain`,Wn=`ConflictException`,Gn=`CertificateKeyPairOrigin`,Kn=`CertificateKeyPairOrigins`,qn=`CertificateSummary`,Jn=`CertificateSummaryList`,Yn=`CertificateStatuses`,Xn=`Certificate`,Zn=`DomainName`,Qn=`Exported`,$n=`ExtendedKeyUsages`,er=`ExportOption`,tr=`Filters`,nr=`HasAdditionalSubjectAlternativeNames`,rr=`ImportedAt`,ir=`InvalidArgsException`,ar=`InvalidArnException`,or=`IssuedAt`,sr=`ImportCertificate`,cr=`ImportCertificateRequest`,lr=`ImportCertificateResponse`,ur=`InvalidDomainValidationOptionsException`,dr=`InvalidParameterException`,fr=`InternalServerException`,pr=`InvalidStateException`,mr=`InvalidTagException`,hr=`InUse`,gr=`Includes`,_r=`Key`,vr=`KeyAlgorithm`,ate=`KeyUsages`,ote=`ListCertificates`,ste=`ListCertificatesRequest`,cte=`ListCertificatesResponse`,lte=`LimitExceededException`,ute=`Message`,dte=`ManagedBy`,fte=`MaxItems`,pte=`NotAfter`,mte=`NotBefore`,yr=`NextToken`,hte=`PrivateKey`,gte=`PrivateKeyBlob`,_te=`RevokedAt`,vte=`RenewalEligibility`,yte=`RequestInProgressException`,bte=`ResourceInUseException`,xte=`ResourceNotFoundException`,Ste=`Status`,Cte=`SubjectAlternativeNameSummaries`,wte=`SortBy`,Tte=`SortOrder`,Ete=`ServiceQuotaExceededException`,Dte=`Type`,Ote=`ThrottlingException`,kte=`TagList`,Ate=`TooManyTagsException`,jte=`TagPolicyException`,Mte=`ThrottlingReason`,Nte=`ThrottlingReasonList`,Pte=`Tags`,Fte=`Tag`,Ite=`Value`,Lte=`ValidationException`,br=`awsQueryError`,xr=`client`,Sr=`error`,Rte=`extendedKeyUsage`,zte=`exportOption`,Cr=`httpError`,Bte=`keyTypes`,Vte=`keyUsage`,wr=`message`,Hte=`managedBy`,Ute=`reason`,Wte=`resource`,Tr=`smithy.ts.sdk.synthetic.com.amazonaws.acm`,Gte=`server`,Kte=`throttlingReasons`,Er=`com.amazonaws.acm`,Dr=pt.for(Tr),qte=[-3,Tr,`ACMServiceException`,0,[],[]];Dr.registerError(qte,xn);var Or=pt.for(Er),Jte=[-3,Er,Bn,{[br]:[`AccessDenied`,403],[Sr]:xr,[Cr]:403},[ute],[0]];Or.registerError(Jte,Sn);var Yte=[-3,Er,Wn,{[Sr]:xr},[wr],[0]];Or.registerError(Yte,jn);var Xte=[-3,Er,fr,{[Sr]:Gte},[wr],[0]];Or.registerError(Xte,Mn);var Zte=[-3,Er,ir,{[Sr]:xr},[wr],[0]];Or.registerError(Zte,Ln);var Qte=[-3,Er,ar,{[Sr]:xr},[wr],[0]];Or.registerError(Qte,Cn);var $te=[-3,Er,ur,{[Sr]:xr},[wr],[0]];Or.registerError($te,Rn);var ene=[-3,Er,dr,{[Sr]:xr},[wr],[0]];Or.registerError(ene,wn);var tne=[-3,Er,pr,{[Sr]:xr},[wr],[0]];Or.registerError(tne,zn);var nne=[-3,Er,mr,{[Sr]:xr},[wr],[0]];Or.registerError(nne,Tn);var rne=[-3,Er,lte,{[Sr]:xr},[wr],[0]];Or.registerError(rne,In);var ine=[-3,Er,yte,{[Sr]:xr},[wr],[0]];Or.registerError(ine,Fn);var ane=[-3,Er,bte,{[Sr]:xr},[wr],[0]];Or.registerError(ane,Pn);var one=[-3,Er,xte,{[Sr]:xr},[wr],[0]];Or.registerError(one,En);var sne=[-3,Er,Ete,{[Sr]:xr},[wr],[0]];Or.registerError(sne,Nn);var cne=[-3,Er,jte,{[Sr]:xr},[wr],[0]];Or.registerError(cne,Dn);var lne=[-3,Er,Ote,{[br]:[`Throttling`,400],[Sr]:xr,[Cr]:400},[wr,Kte],[0,()=>wne]];Or.registerError(lne,On);var une=[-3,Er,Ate,{[Sr]:xr},[wr],[0]];Or.registerError(une,kn);var dne=[-3,Er,Lte,{[br]:[`ValidationError`,400],[Sr]:xr,[Cr]:400},[wr],[0]];Or.registerError(dne,An);var fne=[Dr,Or],pne=[0,Er,gte,8,21],mne=[3,Er,qn,0,[Hn,Zn,Cte,nr,Ste,Dte,vr,ate,$n,er,hr,Qn,vte,mte,pte,Vn,or,rr,_te,dte,Gn],[0,0,64,2,0,0,0,64,64,0,2,2,0,4,4,4,4,4,4,0,0]],hne=[3,Er,tr,0,[Rte,Vte,Bte,zte,Hte],[64,64,64,0,0]],gne=[3,Er,cr,0,[Xn,hte,Hn,Un,Pte],[21,[()=>pne,0],0,21,()=>Cne],2],_ne=[3,Er,lr,0,[Hn],[0]],vne=[3,Er,ste,0,[Yn,Kn,gr,yr,fte,wte,Tte],[64,64,()=>hne,0,1,0,0]],yne=[3,Er,cte,0,[yr,Jn],[0,()=>Sne]],bne=[3,Er,Fte,0,[_r,Ite],[0,0],1],xne=[3,Er,Mte,0,[Ute,Wte],[0,0]],Sne=[1,Er,Jn,0,()=>mne],Cne=[1,Er,kte,0,()=>bne],wne=[1,Er,Nte,0,()=>xne],Tne=[9,Er,sr,0,()=>gne,()=>_ne],Ene=[9,Er,ote,0,()=>vne,()=>yne],Dne=e=>({apiVersion:`2015-12-08`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??bn,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??rte,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.acm`,errorTypeRegistries:fne,version:`2015-12-08`,serviceTarget:`CertificateManager`},serviceId:e?.serviceId??`ACM`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),One=e=>{let t=he(e),n=()=>t().then(a),r=Dne(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:ln.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},kne=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Ane=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),jne=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),kne(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),Ane(n))},Mne=class extends le{config;constructor(...[t]){let n=One(t||{});super(n),this.initConfig=n;let r=sn(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=jne(ite(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:tte,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},Nne=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Pne(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function Fne(e){return{schemeId:`smithy.api#httpBearerAuth`,propertiesExtractor:({profile:e,filepath:t,configFilepath:n,ignoreCache:r},i)=>({identityProperties:{profile:e,filepath:t,configFilepath:n,ignoreCache:r}})}}var Ine=e=>{let t=[];return e.operation,t.push(Pne(e)),t.push(Fne(e)),t},Lne=e=>{let t=ie(e.token,Te,i),n=c(e);return Object.assign(n,{authSchemePreference:Ae(e.authSchemePreference??[]),token:t})},Rne=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),zne={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Bne={name:`@aws-sdk/client-bedrock`,version:`3.1135.0`,description:`AWS SDK for JavaScript Bedrock Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/token-providers":`3.1135.0`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},kr=`ref`,Ar=-1,jr=!0,Mr=`isSet`,Nr=`PartitionResult`,Pr=`booleanEquals`,Fr=`getAttr`,Ir={[kr]:`Endpoint`},Lr={[kr]:Nr},Rr={},zr=[{[kr]:`Region`}],Br={conditions:[[Mr,[Ir]],[Mr,zr],[`aws.partition`,zr,Nr],[Pr,[{[kr]:`UseFIPS`},jr]],[Pr,[{[kr]:`UseDualStack`},jr]],[Pr,[{fn:Fr,argv:[Lr,`supportsDualStack`]},jr]],[Pr,[{fn:Fr,argv:[Lr,`supportsFIPS`]},jr]]],results:[[Ar],[Ar,`Invalid Configuration: FIPS and custom endpoint are not supported`],[Ar,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Ir,Rr],[`https://bedrock-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,Rr],[Ar,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-fips.{Region}.{PartitionResult#dnsSuffix}`,Rr],[Ar,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock.{Region}.{PartitionResult#dualStackDnsSuffix}`,Rr],[Ar,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock.{Region}.{PartitionResult#dnsSuffix}`,Rr],[Ar,`Invalid Configuration: Missing Region`]]},Vne=2,Hne=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Une=xe.from(Hne,Vne,Br.conditions,Br.results),Wne=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Gne=(e,t={})=>Wne.get(e,()=>ut(Une,{endpointParams:e,logger:t.logger}));Le.aws=oe;var Vr=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Kne=class e extends Vr{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qne=class e extends Vr{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Jne=class e extends Vr{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Yne=class e extends Vr{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xne=class e extends Vr{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zne=class e extends Vr{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qne=class e extends Vr{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$ne=class e extends Vr{name=`TooManyTagsException`;$fault=`client`;resourceName;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},ere=class e extends Vr{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tre=class e extends Vr{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},nre=`AccessDeniedException`,rre=`ConflictException`,ire=`CreateGuardrail`,are=`CreateGuardrailRequest`,ore=`CreateGuardrailResponse`,sre=`CreateGuardrailVersion`,cre=`CreateGuardrailVersionRequest`,lre=`CreateGuardrailVersionResponse`,ure=`DeleteGuardrail`,dre=`DeleteGuardrailRequest`,fre=`DeleteGuardrailResponse`,pre=`FoundationModelLifecycle`,mre=`FoundationModelSummary`,hre=`FoundationModelSummaryList`,gre=`GuardrailAutomatedReasoningPolicy`,_re=`GuardrailAutomatedReasoningPolicyConfig`,vre=`GuardrailBlockedMessaging`,yre=`GuardrailContentFilter`,bre=`GuardrailContentFilterAction`,xre=`GuardrailContentFilterConfig`,Sre=`GuardrailContentFiltersConfig`,Cre=`GuardrailContentFiltersTier`,wre=`GuardrailContentFiltersTierConfig`,Tre=`GuardrailContentFiltersTierName`,Ere=`GuardrailContentFilters`,Dre=`GuardrailContextualGroundingAction`,Ore=`GuardrailContextualGroundingFilter`,kre=`GuardrailContextualGroundingFilterConfig`,Are=`GuardrailContextualGroundingFiltersConfig`,jre=`GuardrailContextualGroundingFilters`,Mre=`GuardrailContextualGroundingPolicy`,Nre=`GuardrailContextualGroundingPolicyConfig`,Pre=`GuardrailContentPolicy`,Fre=`GuardrailContentPolicyConfig`,Ire=`GuardrailCrossRegionConfig`,Lre=`GuardrailCrossRegionDetails`,Rre=`GuardrailDescription`,zre=`GuardrailFailureRecommendation`,Bre=`GuardrailFailureRecommendations`,Vre=`GetGuardrail`,Hre=`GetGuardrailRequest`,Ure=`GetGuardrailResponse`,Wre=`GuardrailModality`,Gre=`GuardrailManagedWords`,Kre=`GuardrailManagedWordsConfig`,qre=`GuardrailManagedWordLists`,Jre=`GuardrailManagedWordListsConfig`,Yre=`GuardrailModalities`,Xre=`GuardrailName`,Zre=`GuardrailPiiEntity`,Qre=`GuardrailPiiEntityConfig`,$re=`GuardrailPiiEntitiesConfig`,eie=`GuardrailPiiEntities`,tie=`GuardrailRegex`,nie=`GuardrailRegexConfig`,rie=`GuardrailRegexesConfig`,iie=`GuardrailRegexes`,aie=`GuardrailSummary`,oie=`GuardrailSensitiveInformationPolicy`,sie=`GuardrailSensitiveInformationPolicyConfig`,cie=`GuardrailStatusReason`,lie=`GuardrailStatusReasons`,uie=`GuardrailSummaries`,die=`GuardrailTopic`,fie=`GuardrailTopicAction`,pie=`GuardrailTopicConfig`,mie=`GuardrailTopicsConfig`,hie=`GuardrailTopicDefinition`,gie=`GuardrailTopicExample`,_ie=`GuardrailTopicExamples`,vie=`GuardrailTopicName`,yie=`GuardrailTopicPolicy`,bie=`GuardrailTopicPolicyConfig`,xie=`GuardrailTopicsTier`,Sie=`GuardrailTopicsTierConfig`,Cie=`GuardrailTopicsTierName`,wie=`GuardrailTopics`,Tie=`GuardrailWord`,Eie=`GuardrailWordAction`,Die=`GuardrailWordConfig`,Oie=`GuardrailWordsConfig`,kie=`GuardrailWordPolicy`,Aie=`GuardrailWordPolicyConfig`,jie=`GuardrailWords`,Mie=`InternalServerException`,Nie=`ListFoundationModels`,Pie=`ListFoundationModelsRequest`,Fie=`ListFoundationModelsResponse`,Iie=`ListGuardrails`,Lie=`ListGuardrailsRequest`,Rie=`ListGuardrailsResponse`,zie=`ResourceInUseException`,Bie=`ResourceNotFoundException`,Vie=`ServiceQuotaExceededException`,Hie=`ServiceUnavailableException`,Uie=`Tag`,Wie=`ThrottlingException`,Gie=`TagList`,Kie=`TooManyTagsException`,qie=`UpdateGuardrail`,Jie=`UpdateGuardrailRequest`,Yie=`UpdateGuardrailResponse`,Xie=`ValidationException`,Zie=`automatedReasoningPolicy`,Hr=`automatedReasoningPolicyConfig`,Ur=`action`,Qie=`arn`,Wr=`byCustomizationType`,Gr=`blockedInputMessaging`,Kr=`byInferenceType`,qr=`blockedOutputsMessaging`,Jr=`byOutputModality`,Yr=`byProvider`,Xr=`client`,Zr=`createdAt`,$ie=`contextualGroundingPolicy`,Qr=`contextualGroundingPolicyConfig`,eae=`contentPolicy`,$r=`contentPolicyConfig`,ei=`crossRegionConfig`,ti=`crossRegionDetails`,ni=`clientRequestToken`,tae=`customizationsSupported`,ri=`confidenceThreshold`,ii=`description`,ai=`definition`,oi=`error`,nae=`endOfLifeTime`,si=`enabled`,ci=`examples`,li=`filtersConfig`,rae=`failureRecommendations`,ui=`filters`,iae=`guardrails`,di=`guardrailArn`,fi=`guardrailIdentifier`,pi=`guardrailId`,aae=`guardrailProfileArn`,oae=`guardrailProfileIdentifier`,sae=`guardrailProfileId`,mi=`guardrailVersion`,hi=`httpError`,gi=`httpQuery`,_i=`http`,cae=`id`,vi=`inputAction`,yi=`inputEnabled`,bi=`inputModalities`,xi=`inputStrength`,lae=`inferenceTypesSupported`,uae=`key`,dae=`kmsKeyArn`,Si=`kmsKeyId`,fae=`legacyTime`,Ci=`message`,pae=`modelArn`,mae=`modelId`,wi=`modelLifecycle`,Ti=`modelName`,Ei=`maxResults`,Di=`modelSummaries`,Oi=`managedWordLists`,ki=`managedWordListsConfig`,Ai=`name`,ji=`nextToken`,Mi=`outputAction`,Ni=`outputEnabled`,Pi=`outputModalities`,Fi=`outputStrength`,Ii=`publicExtendedAccessTime`,Li=`piiEntitiesConfig`,Ri=`piiEntities`,zi=`providerName`,Bi=`pattern`,Vi=`policies`,Hi=`regexesConfig`,Ui=`resourceName`,Wi=`responseStreamingSupported`,Gi=`regexes`,Ki=`smithy.ts.sdk.synthetic.com.amazonaws.bedrock`,qi=`sensitiveInformationPolicy`,Ji=`sensitiveInformationPolicyConfig`,Yi=`startOfLifeTime`,Xi=`statusReasons`,Zi=`server`,Qi=`status`,$i=`tierConfig`,ea=`topicsConfig`,ta=`tierName`,na=`topicPolicy`,ra=`topicPolicyConfig`,ia=`tags`,aa=`text`,oa=`threshold`,sa=`tier`,ca=`topics`,la=`type`,ua=`updatedAt`,da=`value`,fa=`version`,pa=`words`,ma=`wordsConfig`,ha=`wordPolicy`,ga=`wordPolicyConfig`,f=`com.amazonaws.bedrock`,_a=pt.for(Ki),va=[-3,Ki,`BedrockServiceException`,0,[],[]];_a.registerError(va,Vr);var ya=pt.for(f),ba=[-3,f,nre,{[oi]:Xr,[hi]:403},[Ci],[0]];ya.registerError(ba,Kne);var xa=[-3,f,rre,{[oi]:Xr,[hi]:400},[Ci],[0]];ya.registerError(xa,Xne);var Sa=[-3,f,Mie,{[oi]:Zi,[hi]:500},[Ci],[0]];ya.registerError(Sa,qne);var Ca=[-3,f,zie,{[oi]:Xr,[hi]:400},[Ci],[0]];ya.registerError(Ca,ere);var wa=[-3,f,Bie,{[oi]:Xr,[hi]:404},[Ci],[0]];ya.registerError(wa,Zne);var Ta=[-3,f,Vie,{[oi]:Xr,[hi]:400},[Ci],[0]];ya.registerError(Ta,Qne);var Ea=[-3,f,Hie,{[oi]:Zi,[hi]:503},[Ci],[0]];ya.registerError(Ea,tre);var Da=[-3,f,Wie,{[oi]:Xr,[hi]:429},[Ci],[0]];ya.registerError(Da,Jne);var Oa=[-3,f,Kie,{[oi]:Xr,[hi]:400},[Ci,Ui],[0,0]];ya.registerError(Oa,$ne);var ka=[-3,f,Xie,{[oi]:Xr,[hi]:400},[Ci],[0]];ya.registerError(ka,Yne);var Aa=[_a,ya],ja=[0,f,vre,8,0],Ma=[0,f,bre,8,0],Na=[0,f,Tre,8,0],Pa=[0,f,Dre,8,0],Fa=[0,f,Rre,8,0],Ia=[0,f,zre,8,0],La=[0,f,Wre,8,0],Ra=[0,f,Xre,8,0],za=[0,f,cie,8,0],Ba=[0,f,fie,8,0],Va=[0,f,hie,8,0],Ha=[0,f,gie,8,0],Ua=[0,f,vie,8,0],Wa=[0,f,Cie,8,0],Ga=[0,f,Eie,8,0],Ka=[3,f,are,0,[Ai,Gr,qr,ii,ra,$r,ga,Ji,Qr,Hr,ei,Si,ia,ni],[[()=>Ra,0],[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>ko,0],[()=>lo,0],[()=>Fo,0],()=>wo,[()=>mo,0],()=>ro,()=>ho,0,()=>ls,[0,4]],3],qa=[3,f,ore,0,[pi,di,fa,Zr],[0,0,0,5],4],Ja=[3,f,cre,0,[fi,ii,ni],[[0,1],[()=>Fa,0],[0,4]],1],Ya=[3,f,lre,0,[pi,fa],[0,0],2],Xa=[3,f,dre,0,[fi,mi],[[0,1],[0,{[gi]:mi}]],1],Za=[3,f,fre,0,[],[]],Qa=[3,f,pre,0,[Qi,Yi,nae,fae,Ii],[0,5,5,5,5],1],$a=[3,f,mre,0,[pae,mae,Ti,zi,bi,Pi,Wi,tae,lae,wi],[0,0,0,0,64,64,2,64,64,()=>Qa],2],eo=[3,f,Hre,0,[fi,mi],[[0,1],[0,{[gi]:mi}]],1],to=[3,f,Ure,0,[Ai,pi,di,fa,Qi,Zr,ua,Gr,qr,ii,na,eae,ha,qi,$ie,Zie,ti,Xi,rae,dae],[[()=>Ra,0],0,0,0,0,5,5,[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>Oo,0],[()=>co,0],[()=>Po,0],()=>Co,[()=>po,0],()=>no,()=>go,[()=>ns,0],[()=>Jo,0],0],9],no=[3,f,gre,0,[Vi,ri],[64,1],1],ro=[3,f,_re,0,[Vi,ri],[64,1],1],io=[3,f,yre,0,[la,xi,Fi,bi,Pi,vi,Mi,yi,Ni],[0,0,0,[()=>Zo,0],[()=>Zo,0],[()=>Ma,0],[()=>Ma,0],2,2],3],ao=[3,f,xre,0,[la,xi,Fi,bi,Pi,vi,Mi,yi,Ni],[0,0,0,[()=>Zo,0],[()=>Zo,0],[()=>Ma,0],[()=>Ma,0],2,2],3],oo=[3,f,Cre,0,[ta],[[()=>Na,0]],1],so=[3,f,wre,0,[ta],[[()=>Na,0]],1],co=[3,f,Pre,0,[ui,sa],[[()=>Wo,0],[()=>oo,0]]],lo=[3,f,Fre,0,[li,$i],[[()=>Go,0],[()=>so,0]],1],uo=[3,f,Ore,0,[la,oa,Ur,si],[0,1,[()=>Pa,0],2],2],fo=[3,f,kre,0,[la,oa,Ur,si],[0,1,[()=>Pa,0],2],2],po=[3,f,Mre,0,[ui],[[()=>Ko,0]],1],mo=[3,f,Nre,0,[li],[[()=>qo,0]],1],ho=[3,f,Ire,0,[oae],[0],1],go=[3,f,Lre,0,[sae,aae],[0,0]],_o=[3,f,Gre,0,[la,vi,Mi,yi,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],vo=[3,f,Kre,0,[la,vi,Mi,yi,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],yo=[3,f,Zre,0,[la,Ur,vi,Mi,yi,Ni],[0,0,0,0,2,2],2],bo=[3,f,Qre,0,[la,Ur,vi,Mi,yi,Ni],[0,0,0,0,2,2],2],xo=[3,f,tie,0,[Ai,Bi,Ur,ii,vi,Mi,yi,Ni],[0,0,0,0,0,0,2,2],3],So=[3,f,nie,0,[Ai,Bi,Ur,ii,vi,Mi,yi,Ni],[0,0,0,0,0,0,2,2],3],Co=[3,f,oie,0,[Ri,Gi],[()=>Qo,()=>es]],wo=[3,f,sie,0,[Li,Hi],[()=>$o,()=>ts]],To=[3,f,aie,0,[cae,Qie,Qi,Ai,fa,Zr,ua,ii,ti],[0,0,0,[()=>Ra,0],0,5,5,[()=>Fa,0],()=>go],7],Eo=[3,f,die,0,[Ai,ai,ci,la,vi,Mi,yi,Ni],[[()=>Ua,0],[()=>Va,0],[()=>is,0],0,[()=>Ba,0],[()=>Ba,0],2,2],2],Do=[3,f,pie,0,[Ai,ai,la,ci,vi,Mi,yi,Ni],[[()=>Ua,0],[()=>Va,0],0,[()=>is,0],[()=>Ba,0],[()=>Ba,0],2,2],3],Oo=[3,f,yie,0,[ca,sa],[[()=>as,0],[()=>Ao,0]],1],ko=[3,f,bie,0,[ea,$i],[[()=>os,0],[()=>jo,0]],1],Ao=[3,f,xie,0,[ta],[[()=>Wa,0]],1],jo=[3,f,Sie,0,[ta],[[()=>Wa,0]],1],Mo=[3,f,Tie,0,[aa,vi,Mi,yi,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],No=[3,f,Die,0,[aa,vi,Mi,yi,Ni],[0,[()=>Ga,0],[()=>Ga,0],2,2],1],Po=[3,f,kie,0,[pa,Oi],[[()=>ss,0],[()=>Yo,0]]],Fo=[3,f,Aie,0,[ma,ki],[[()=>cs,0],[()=>Xo,0]]],Io=[3,f,Pie,0,[Yr,Wr,Jr,Kr],[[0,{[gi]:Yr}],[0,{[gi]:Wr}],[0,{[gi]:Jr}],[0,{[gi]:Kr}]]],Lo=[3,f,Fie,0,[Di],[()=>Uo]],Ro=[3,f,Lie,0,[fi,Ei,ji],[[0,{[gi]:fi}],[1,{[gi]:Ei}],[0,{[gi]:ji}]]],zo=[3,f,Rie,0,[iae,ji],[[()=>rs,0],0],1],Bo=[3,f,Uie,0,[uae,da],[0,0],2],Vo=[3,f,Jie,0,[fi,Ai,Gr,qr,ii,ra,$r,ga,Ji,Qr,Hr,ei,Si],[[0,1],[()=>Ra,0],[()=>ja,0],[()=>ja,0],[()=>Fa,0],[()=>ko,0],[()=>lo,0],[()=>Fo,0],()=>wo,[()=>mo,0],()=>ro,()=>ho,0],4],Ho=[3,f,Yie,0,[pi,di,fa,ua],[0,0,0,5],4],Uo=[1,f,hre,0,()=>$a],Wo=[1,f,Ere,0,[()=>io,0]],Go=[1,f,Sre,0,[()=>ao,0]],Ko=[1,f,jre,0,[()=>uo,0]],qo=[1,f,Are,0,[()=>fo,0]],Jo=[1,f,Bre,0,[()=>Ia,0]],Yo=[1,f,qre,0,[()=>_o,0]],Xo=[1,f,Jre,0,[()=>vo,0]],Zo=[1,f,Yre,0,[()=>La,0]],Qo=[1,f,eie,0,()=>yo],$o=[1,f,$re,0,()=>bo],es=[1,f,iie,0,()=>xo],ts=[1,f,rie,0,()=>So],ns=[1,f,lie,0,[()=>za,0]],rs=[1,f,uie,0,[()=>To,0]],is=[1,f,_ie,0,[()=>Ha,0]],as=[1,f,wie,0,[()=>Eo,0]],os=[1,f,mie,0,[()=>Do,0]],ss=[1,f,jie,0,[()=>Mo,0]],cs=[1,f,Oie,0,[()=>No,0]],ls=[1,f,Gie,0,()=>Bo],us=[9,f,ire,{[_i]:[`POST`,`/guardrails`,202]},()=>Ka,()=>qa],ds=[9,f,sre,{[_i]:[`POST`,`/guardrails/{guardrailIdentifier}`,202]},()=>Ja,()=>Ya],fs=[9,f,ure,{[_i]:[`DELETE`,`/guardrails/{guardrailIdentifier}`,202]},()=>Xa,()=>Za],ps=[9,f,Vre,{[_i]:[`GET`,`/guardrails/{guardrailIdentifier}`,200]},()=>eo,()=>to],ms=[9,f,Nie,{[_i]:[`GET`,`/foundation-models`,200]},()=>Io,()=>Lo],hs=[9,f,Iie,{[_i]:[`GET`,`/guardrails`,200]},()=>Ro,()=>zo],gs=[9,f,qie,{[_i]:[`PUT`,`/guardrails/{guardrailIdentifier}`,202]},()=>Vo,()=>Ho],_s=e=>({apiVersion:`2023-04-20`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Gne,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Ine,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue},{schemeId:`smithy.api#httpBearerAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#httpBearerAuth`),signer:new Ot}],logger:e?.logger??new de,protocol:e?.protocol??en,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrock`,errorTypeRegistries:Aa,version:`2023-04-20`,serviceTarget:`AmazonBedrockControlPlaneService`},serviceId:e?.serviceId??`Bedrock`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),vs=e=>{let t=he(e),n=()=>t().then(a),r=_s(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:Bne.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},ys=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials,i=e.token;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r},setToken(e){i=e},token(){return i}}},bs=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials(),token:e.token()}),xs=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),ys(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),bs(n))},Ss=class extends le{config;constructor(...[t]){let n=vs(t||{});super(n),this.initConfig=n;let r=Rne(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=xs(Lne(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:Nne,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials,"smithy.api#httpBearerAuth":e.token})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},Cs=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function ws(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var Ts=e=>{let t=[];return e.operation,t.push(ws(e)),t},Es=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},Ds=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Os={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},ks={name:`@aws-sdk/client-bedrock-agent`,version:`3.1135.0`,description:`AWS SDK for JavaScript Bedrock Agent Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-agent`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-agent`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},As=`ref`,js=-1,Ms=!0,Ns=`isSet`,Ps=`PartitionResult`,Fs=`booleanEquals`,Is=`getAttr`,Ls={[As]:`Endpoint`},Rs={[As]:Ps},zs={},Bs=[{[As]:`Region`}],Vs={conditions:[[Ns,[Ls]],[Ns,Bs],[`aws.partition`,Bs,Ps],[Fs,[{[As]:`UseFIPS`},Ms]],[Fs,[{[As]:`UseDualStack`},Ms]],[Fs,[{fn:Is,argv:[Rs,`supportsDualStack`]},Ms]],[Fs,[{fn:Is,argv:[Rs,`supportsFIPS`]},Ms]]],results:[[js],[js,`Invalid Configuration: FIPS and custom endpoint are not supported`],[js,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Ls,zs],[`https://bedrock-agent-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,zs],[js,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-agent-fips.{Region}.{PartitionResult#dnsSuffix}`,zs],[js,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-agent.{Region}.{PartitionResult#dualStackDnsSuffix}`,zs],[js,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-agent.{Region}.{PartitionResult#dnsSuffix}`,zs],[js,`Invalid Configuration: Missing Region`]]},Hs=2,Us=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Ws=xe.from(Us,Hs,Vs.conditions,Vs.results),Gs=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Ks=(e,t={})=>Gs.get(e,()=>ut(Ws,{endpointParams:e,logger:t.logger}));Le.aws=oe;var qs=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Js=class e extends qs{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ys=class e extends qs{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xs=class e extends qs{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zs=class e extends qs{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qs=class e extends qs{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$s=class e extends qs{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ec=class e extends qs{name=`ValidationException`;$fault=`client`;fieldList;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.fieldList=t.fieldList}},tc=`AudioConfiguration`,nc=`AudioConfigurations`,rc=`AccessDeniedException`,ic=`AudioExtractionConfiguration`,ac=`AudioSegmentationConfiguration`,oc=`BedrockDataAutomationConfiguration`,sc=`BedrockEmbeddingModelConfiguration`,cc=`BedrockFoundationModelConfiguration`,lc=`BedrockFoundationModelContextEnrichmentConfiguration`,uc=`ChunkingConfiguration`,dc=`ConfluenceCrawlerConfiguration`,fc=`CreateDataSource`,pc=`ConfluenceDataSourceConfiguration`,mc=`CreateDataSourceRequest`,hc=`CreateDataSourceResponse`,gc=`ConflictException`,_c=`ContextEnrichmentConfiguration`,vc=`CrawlFilterConfiguration`,yc=`CreateKnowledgeBase`,bc=`CreateKnowledgeBaseRequest`,xc=`CreateKnowledgeBaseResponse`,Sc=`CuratedQuery`,Cc=`CuratedQueries`,wc=`ConfluenceSourceConfiguration`,Tc=`CustomTransformationConfiguration`,Ec=`DeleteDataSource`,Dc=`DeleteDataSourceRequest`,Oc=`DeleteDataSourceResponse`,kc=`DeleteKnowledgeBase`,Ac=`DeleteKnowledgeBaseRequest`,jc=`DeleteKnowledgeBaseResponse`,Mc=`DayOfMonth`,Nc=`DeletionProtectionConfiguration`,Pc=`DailySchedule`,Fc=`DataSourceConfiguration`,Ic=`DataSourceSummary`,Lc=`DataSourceSummaries`,Rc=`DataSource`,zc=`EmbeddingModelConfiguration`,Bc=`EnrichmentStrategyConfiguration`,Vc=`FilterList`,Hc=`FilteredObjectType`,Uc=`FilterPattern`,Wc=`FixedSizeChunkingConfiguration`,Gc=`GraphArn`,Kc=`GetKnowledgeBase`,qc=`GetKnowledgeBaseRequest`,Jc=`GetKnowledgeBaseResponse`,Yc=`HierarchicalChunkingConfiguration`,Xc=`HierarchicalChunkingLevelConfiguration`,Zc=`HierarchicalChunkingLevelConfigurations`,Qc=`IndexArn`,$c=`ImageExtractionConfiguration`,el=`IngestionJobFilter`,tl=`IngestionJobFilters`,nl=`IngestionJobStatistics`,rl=`IngestionJobSortBy`,il=`IngestionJobSummary`,al=`IngestionJobSummaries`,ol=`IndexName`,sl=`IntermediateStorage`,cl=`InternalServerException`,ll=`KnowledgeBase`,ul=`KnowledgeBaseConfiguration`,dl=`KnowledgeBaseSummary`,fl=`KnowledgeBaseSummaries`,pl=`KendraKnowledgeBaseConfiguration`,ml=`LastDayOfMonth`,hl=`ListDataSources`,gl=`ListDataSourcesRequest`,_l=`ListDataSourcesResponse`,vl=`ListIngestionJobs`,yl=`ListIngestionJobsRequest`,bl=`ListIngestionJobsResponse`,xl=`ListKnowledgeBases`,Sl=`ListKnowledgeBasesRequest`,Cl=`ListKnowledgeBasesResponse`,wl=`MongoDbAtlasConfiguration`,Tl=`MongoDbAtlasFieldMapping`,El=`MediaExtractionConfiguration`,Dl=`ManagedKnowledgeBaseConfiguration`,Ol=`ManagedKnowledgeBaseConnectorConfiguration`,kl=`MonthlySchedule`,Al=`NeptuneAnalyticsConfiguration`,jl=`NeptuneAnalyticsFieldMapping`,Ml=`OpenSearchManagedClusterConfiguration`,Nl=`OpenSearchManagedClusterFieldMapping`,Pl=`OpenSearchManagedClusterIndexName`,Fl=`OpenSearchServerlessConfiguration`,Il=`OpenSearchServerlessFieldMapping`,Ll=`ParsingConfiguration`,Rl=`PineconeConfiguration`,zl=`PineconeFieldMapping`,Bl=`PatternObjectFilter`,Vl=`PatternObjectFilterConfiguration`,Hl=`PatternObjectFilterList`,Ul=`ParsingPrompt`,Wl=`QueryGenerationColumn`,Gl=`QueryGenerationConfiguration`,Kl=`QueryGenerationContext`,ql=`QueryGenerationColumns`,Jl=`QueryGenerationTable`,Yl=`QueryGenerationTables`,Xl=`RdsConfiguration`,Zl=`RedshiftConfiguration`,Ql=`RedisEnterpriseCloudConfiguration`,$l=`RedisEnterpriseCloudFieldMapping`,eu=`RdsFieldMapping`,tu=`ResourceNotFoundException`,nu=`RedshiftProvisionedAuthConfiguration`,ru=`RedshiftProvisionedConfiguration`,iu=`RedshiftQueryEngineAwsDataCatalogStorageConfiguration`,au=`RedshiftQueryEngineConfiguration`,ou=`RedshiftQueryEngineRedshiftStorageConfiguration`,su=`RedshiftQueryEngineStorageConfiguration`,cu=`RedshiftQueryEngineStorageConfigurations`,lu=`RedshiftServerlessAuthConfiguration`,uu=`RedshiftServerlessConfiguration`,du=`SalesforceCrawlerConfiguration`,fu=`SemanticChunkingConfiguration`,pu=`StorageConfiguration`,mu=`S3DataSourceConfiguration`,hu=`SalesforceDataSourceConfiguration`,gu=`SupplementalDataStorageConfiguration`,_u=`SupplementalDataStorageLocation`,vu=`SupplementalDataStorageLocations`,yu=`SqlKnowledgeBaseConfiguration`,bu=`S3Location`,xu=`S3Prefix`,Su=`SharePointCrawlerConfiguration`,Cu=`SharePointDataSourceConfiguration`,wu=`SharePointSourceConfiguration`,Tu=`S3Prefixes`,Eu=`ServiceQuotaExceededException`,Du=`SyncSchedule`,Ou=`SalesforceSourceConfiguration`,ku=`ServerSideEncryptionConfiguration`,Au=`SeedUrl`,ju=`SeedUrls`,Mu=`S3VectorsConfiguration`,Nu=`Transformation`,Pu=`ThrottlingException`,Fu=`TransformationFunction`,Iu=`TransformationLambdaConfiguration`,Lu=`Transformations`,Ru=`UserAgent`,zu=`UserAgentHeader`,Bu=`UrlConfiguration`,Vu=`VectorBucketArn`,Hu=`VideoConfiguration`,Uu=`VideoConfigurations`,Wu=`ValidationException`,Gu=`VideoExtractionConfiguration`,Ku=`ValidationExceptionField`,qu=`ValidationExceptionFieldList`,Ju=`VectorIngestionConfiguration`,Yu=`VectorKnowledgeBaseConfiguration`,Xu=`VideoSegmentationConfiguration`,Zu=`WebCrawlerConfiguration`,Qu=`WebCrawlerLimits`,$u=`WebDataSourceConfiguration`,ed=`WeeklySchedule`,td=`WebSourceConfiguration`,nd=`authConfiguration`,rd=`awsDataCatalogConfiguration`,id=`audioExtractionConfiguration`,ad=`audioExtractionStatus`,od=`authType`,sd=`attribute`,cd=`audio`,ld=`bucketArn`,ud=`bedrockDataAutomationConfiguration`,dd=`bedrockEmbeddingModelConfiguration`,fd=`bedrockFoundationModelConfiguration`,pd=`bucketOwnerAccountId`,md=`breakpointPercentileThreshold`,hd=`bufferSize`,gd=`client`,_d=`createdAt`,vd=`collectionArn`,yd=`crawlerConfiguration`,hae=`chunkingConfiguration`,gae=`confluenceConfiguration`,_ae=`contextEnrichmentConfiguration`,vae=`clusterIdentifier`,yae=`crawlerLimits`,bae=`customMetadataField`,xae=`collectionName`,Sae=`connectorParameters`,Cae=`curatedQueries`,wae=`chunkingStrategy`,bd=`credentialsSecretArn`,Tae=`connectionString`,xd=`clientToken`,Eae=`customTransformationConfiguration`,Dae=`columns`,Sd=`description`,Oae=`domainArn`,Cd=`dataDeletionPolicy`,kae=`domainEndpoint`,wd=`databaseName`,Aae=`dayNumber`,jae=`dayOfMonth`,Mae=`dayOfWeek`,Nae=`deletionProtectionConfiguration`,Pae=`deletionProtectionStatus`,Fae=`deletionProtectionThreshold`,Iae=`dataSource`,Td=`dataSourceConfiguration`,Ed=`dataSourceId`,Lae=`dataSourceSummaries`,Rae=`databaseUser`,zae=`daily`,Bae=`dimensions`,Vae=`domain`,Dd=`error`,Hae=`embeddingDataType`,Od=`exclusionFilters`,kd=`embeddingModelArn`,Ad=`embeddingModelConfiguration`,Uae=`embeddingModelType`,Wae=`enrichmentStrategyConfiguration`,Gae=`endpointServiceName`,Kae=`executionTimeoutSeconds`,jd=`endpoint`,Md=`filters`,Nd=`filterConfiguration`,qae=`fieldList`,Pd=`fixedLengthDuration`,Fd=`fieldMapping`,Id=`failureReasons`,Jae=`fixedSizeChunkingConfiguration`,Yae=`graphArn`,Xae=`generationContext`,Ld=`http`,Zae=`hierarchicalChunkingConfiguration`,Rd=`httpError`,zd=`hostType`,Bd=`hostUrl`,Qae=`indexArn`,$ae=`imageExtractionConfiguration`,eoe=`imageExtractionStatus`,Vd=`inclusionFilters`,toe=`ingestionJobId`,noe=`ingestionJobSummaries`,roe=`indexName`,ioe=`inclusionPrefixes`,aoe=`intermediateStorage`,Hd=`inclusion`,Ud=`knowledgeBase`,ooe=`knowledgeBaseArn`,Wd=`knowledgeBaseConfiguration`,Gd=`knowledgeBaseId`,soe=`knowledgeBaseSummaries`,coe=`kendraIndexArn`,loe=`kmsKeyArn`,uoe=`kendraKnowledgeBaseConfiguration`,doe=`lambdaArn`,foe=`levelConfigurations`,poe=`lastDayOfMonth`,Kd=`message`,qd=`modelArn`,moe=`modelConfiguration`,hoe=`mongoDbAtlasConfiguration`,goe=`mediaExtractionConfiguration`,Jd=`metadataField`,_oe=`managedKnowledgeBaseConfiguration`,voe=`managedKnowledgeBaseConnectorConfiguration`,yoe=`maxPages`,Yd=`maxResults`,Xd=`maxTokens`,boe=`method`,xoe=`monthly`,Zd=`name`,Soe=`neptuneAnalyticsConfiguration`,Coe=`naturalLanguage`,woe=`numberOfDocumentsDeleted`,Toe=`numberOfDocumentsFailed`,Eoe=`numberOfDocumentsScanned`,Doe=`numberOfDocumentsSkipped`,Ooe=`numberOfModifiedDocumentsIndexed`,koe=`numberOfMetadataDocumentsModified`,Aoe=`numberOfMetadataDocumentsScanned`,joe=`numberOfNewDocumentsIndexed`,Qd=`nextToken`,Moe=`namespace`,Noe=`opensearchManagedClusterConfiguration`,Poe=`overlapPercentage`,Foe=`opensearchServerlessConfiguration`,Ioe=`objectType`,Loe=`overlapTokens`,Roe=`operator`,zoe=`order`,Boe=`parsingConfiguration`,Voe=`pineconeConfiguration`,Hoe=`provisionedConfiguration`,Uoe=`primaryKeyField`,$d=`parsingModality`,Woe=`patternObjectFilter`,Goe=`parsingPrompt`,Koe=`parsingPromptText`,qoe=`parsingStrategy`,Joe=`queryEngineConfiguration`,Yoe=`queryGenerationConfiguration`,Xoe=`resourceArn`,ef=`roleArn`,Zoe=`rdsConfiguration`,tf=`redshiftConfiguration`,Qoe=`redisEnterpriseCloudConfiguration`,$oe=`rateLimit`,nf=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockagent`,ese=`startedAt`,tse=`sortBy`,rf=`segmentationConfiguration`,nse=`semanticChunkingConfiguration`,rse=`salesforceConfiguration`,ise=`serverlessConfiguration`,af=`sourceConfiguration`,ase=`s3Configuration`,of=`storageConfiguration`,ose=`storageConfigurations`,sf=`supplementalDataStorageConfiguration`,sse=`sqlKnowledgeBaseConfiguration`,cf=`s3Location`,cse=`storageLocations`,lse=`sharePointConfiguration`,lf=`serverSideEncryptionConfiguration`,use=`syncSchedule`,dse=`stepToApply`,fse=`siteUrls`,pse=`seedUrls`,mse=`s3VectorsConfiguration`,hse=`scope`,gse=`server`,_se=`sql`,uf=`status`,vse=`statistics`,df=`type`,ff=`textField`,yse=`transformationFunction`,bse=`textIndexName`,xse=`tenantId`,Sse=`transformationLambdaConfiguration`,Cse=`tableName`,wse=`tableNames`,Tse=`tags`,Ese=`tables`,Dse=`transformations`,Ose=`uri`,pf=`updatedAt`,kse=`userAgentHeader`,Ase=`userAgent`,jse=`urlConfiguration`,mf=`usernamePasswordSecretArn`,Mse=`url`,Nse=`vectorBucketArn`,Pse=`videoExtractionConfiguration`,Fse=`videoExtractionStatus`,hf=`vectorField`,gf=`vectorIngestionConfiguration`,_f=`vectorIndexName`,Ise=`vectorKnowledgeBaseConfiguration`,Lse=`values`,Rse=`video`,zse=`weekly`,Bse=`workgroupArn`,Vse=`webConfiguration`,p=`com.amazonaws.bedrockagent`,vf=pt.for(nf),Hse=[-3,nf,`BedrockAgentServiceException`,0,[],[]];vf.registerError(Hse,qs);var yf=pt.for(p),Use=[-3,p,rc,{[Dd]:gd,[Rd]:403},[Kd],[0]];yf.registerError(Use,Js);var Wse=[-3,p,gc,{[Dd]:gd,[Rd]:409},[Kd],[0]];yf.registerError(Wse,Ys);var Gse=[-3,p,cl,{[Dd]:gse,[Rd]:500},[Kd],[0]];yf.registerError(Gse,Xs);var Kse=[-3,p,tu,{[Dd]:gd,[Rd]:404},[Kd],[0]];yf.registerError(Kse,Zs);var qse=[-3,p,Eu,{[Dd]:gd,[Rd]:402},[Kd],[0]];yf.registerError(qse,Qs);var Jse=[-3,p,Pu,{[Dd]:gd,[Rd]:429},[Kd],[0]];yf.registerError(Jse,$s);var Yse=[-3,p,Wu,{[Dd]:gd,[Rd]:400},[Kd,qae],[0,()=>Sue]];yf.registerError(Yse,ec);var Xse=[vf,yf],Zse=[0,p,Hc,8,0],Qse=[0,p,Uc,8,0],$se=[0,p,Gc,8,0],ece=[0,p,Qc,8,0],tce=[0,p,ol,8,0],nce=[0,p,Pl,8,0],rce=[0,p,xu,8,0],ice=[0,p,Ru,8,0],ace=[0,p,zu,8,0],oce=[0,p,Vu,8,0],sce=[3,p,tc,0,[rf],[()=>lce],1],cce=[3,p,ic,0,[ad],[0],1],lce=[3,p,ac,0,[Pd],[1],1],uce=[3,p,oc,0,[$d],[0]],dce=[3,p,sc,0,[Bae,Hae,cd,Rse,moe],[1,0,()=>sue,()=>Cue,15]],fce=[3,p,cc,0,[qd,Goe,$d],[0,()=>ple,0],1],pce=[3,p,lc,0,[Wae,qd],[()=>Nce,0],2],mce=[3,p,uc,0,[wae,Jae,Zae,nse],[0,()=>Pce,()=>Lce,()=>Vle],1],hce=[3,p,dc,0,[Nd],[[()=>bf,0]]],gce=[3,p,pc,0,[af,yd],[()=>_ce,[()=>hce,0]],1],_ce=[3,p,wc,0,[Bd,zd,od,bd],[0,0,0,0],4],vce=[3,p,_c,0,[df,fd],[0,()=>pce],1],bf=[3,p,vc,0,[df,Woe],[0,[()=>hle,0]],1],yce=[3,p,mc,0,[Gd,Zd,Td,xd,Sd,Cd,lf,gf],[[0,1],0,[()=>xf,0],[0,4],0,0,()=>Ef,()=>kf],3],bce=[3,p,hc,0,[Iae],[[()=>Ece,0]],1],xce=[3,p,bc,0,[Zd,ef,Wd,xd,Sd,of,Tse],[0,0,[()=>wf,0],[0,4],0,[()=>Df,0],128],3],Sce=[3,p,xc,0,[Ud],[[()=>Cf,0]],1],Cce=[3,p,Sc,0,[Coe,_se],[0,0],2],wce=[3,p,Tc,0,[aoe,Dse],[()=>Wce,()=>xue],2],Tce=[3,p,Pc,0,[],[]],Ece=[3,p,Rc,0,[Gd,Ed,Zd,uf,Td,_d,pf,Sd,lf,gf,Cd,Id],[0,0,0,0,[()=>xf,0],5,5,0,()=>Ef,()=>kf,0,64],7],xf=[3,p,Fc,0,[df,voe,ase,Vse,gae,rse,lse],[0,()=>tle,[()=>Fle,0],[()=>iue,0],[()=>gce,0],[()=>Rle,0],[()=>Ule,0]],1],Dce=[3,p,Ic,0,[Gd,Ed,Zd,uf,pf,Sd],[0,0,0,0,5,0],5],Oce=[3,p,Dc,0,[Gd,Ed],[[0,1],[0,1]],2],kce=[3,p,Oc,0,[Gd,Ed,uf],[0,0,0],3],Ace=[3,p,Ac,0,[Gd],[[0,1]],1],jce=[3,p,jc,0,[Gd,uf],[0,0],2],Mce=[3,p,Nc,0,[Pae,Fae],[0,1],1],Sf=[3,p,zc,0,[dd],[()=>dce]],Nce=[3,p,Bc,0,[boe],[0],1],Pce=[3,p,Wc,0,[Xd,Poe],[1,1],2],Fce=[3,p,qc,0,[Gd],[[0,1]],1],Ice=[3,p,Jc,0,[Ud],[[()=>Cf,0]],1],Lce=[3,p,Yc,0,[foe,Loe],[()=>uue,1],2],Rce=[3,p,Xc,0,[Xd],[1],1],zce=[3,p,$c,0,[eoe],[0],1],Bce=[3,p,el,0,[sd,Roe,Lse],[0,0,64],3],Vce=[3,p,rl,0,[sd,zoe],[0,0],2],Hce=[3,p,nl,0,[Eoe,Aoe,joe,Ooe,koe,woe,Toe,Doe],[1,1,1,1,1,1,1,1]],Uce=[3,p,il,0,[Gd,Ed,toe,uf,ese,pf,Sd,vse],[0,0,0,0,5,5,0,()=>Hce],6],Wce=[3,p,sl,0,[cf],[()=>Tf],1],Gce=[3,p,pl,0,[coe],[0],1],Cf=[3,p,ll,0,[Gd,Zd,ooe,ef,Wd,uf,_d,pf,Sd,of,Id],[0,0,0,0,[()=>wf,0],0,5,5,0,[()=>Df,0],64],8],wf=[3,p,ul,0,[df,Ise,_oe,uoe,sse],[0,()=>Qle,()=>ele,()=>Gce,[()=>Gle,0]],1],Kce=[3,p,dl,0,[Gd,Zd,uf,pf,Sd],[0,0,0,5,0],4],qce=[3,p,ml,0,[],[]],Jce=[3,p,gl,0,[Gd,Yd,Qd],[[0,1],1,0],1],Yce=[3,p,_l,0,[Lae,Qd],[()=>lue,0],1],Xce=[3,p,yl,0,[Gd,Ed,Md,tse,Yd,Qd],[[0,1],[0,1],()=>due,()=>Vce,1,0],2],Zce=[3,p,bl,0,[noe,Qd],[()=>fue,0],1],Qce=[3,p,Sl,0,[Yd,Qd],[1,0]],$ce=[3,p,Cl,0,[soe,Qd],[()=>pue,0],1],ele=[3,p,Dl,0,[Uae,kd,Ad,lf,sf],[0,0,()=>Sf,()=>Ef,()=>Of]],tle=[3,p,Ol,0,[Nae,goe,Sae,use],[()=>Mce,()=>nle,15,()=>Tue]],nle=[3,p,El,0,[$ae,id,Pse],[()=>zce,()=>cce,()=>eue]],rle=[3,p,wl,0,[jd,wd,xae,_f,bd,Fd,Gae,bse],[0,0,0,0,0,()=>ile,0,0],6],ile=[3,p,Tl,0,[hf,ff,Jd],[0,0,0],3],ale=[3,p,kl,0,[jae],[()=>wue],1],ole=[3,p,Al,0,[Yae,Fd],[[()=>$se,0],()=>sle],2],sle=[3,p,jl,0,[ff,Jd],[0,0],2],cle=[3,p,Ml,0,[kae,Oae,_f,Fd],[0,0,[()=>nce,0],()=>lle],4],lle=[3,p,Nl,0,[hf,ff,Jd],[0,0,0],3],ule=[3,p,Fl,0,[vd,_f,Fd],[0,0,()=>dle],3],dle=[3,p,Il,0,[hf,ff,Jd],[0,0,0],3],fle=[3,p,Ll,0,[qoe,fd,ud],[0,()=>fce,()=>uce],1],ple=[3,p,Ul,0,[Koe],[0],1],mle=[3,p,Bl,0,[Ioe,Vd,Od],[[()=>Zse,0],[()=>Af,0],[()=>Af,0]],1],hle=[3,p,Vl,0,[Md],[[()=>mue,0]],1],gle=[3,p,Rl,0,[Tae,bd,Fd,Moe],[0,0,()=>_le,0],3],_le=[3,p,zl,0,[ff,Jd],[0,0],2],vle=[3,p,Wl,0,[Zd,Sd,Hd],[0,0,0]],yle=[3,p,Gl,0,[Kae,Xae],[1,[()=>ble,0]]],ble=[3,p,Kl,8,[Ese,Cae],[()=>gue,()=>cue]],xle=[3,p,Jl,0,[Zd,Sd,Hd,Dae],[0,0,0,()=>hue],1],Sle=[3,p,Xl,0,[Xoe,bd,wd,Cse,Fd],[0,0,0,0,()=>Cle],5],Cle=[3,p,eu,0,[Uoe,hf,ff,Jd,bae],[0,0,0,0,0],4],wle=[3,p,Ql,0,[jd,_f,bd,Fd],[0,0,0,()=>Tle],4],Tle=[3,p,$l,0,[hf,ff,Jd],[0,0,0],3],Ele=[3,p,Zl,0,[ose,Joe,Yoe],[()=>_ue,()=>Ale,[()=>yle,0]],2],Dle=[3,p,nu,0,[df,Rae,mf],[0,0,0],1],Ole=[3,p,ru,0,[vae,nd],[0,()=>Dle],2],kle=[3,p,iu,0,[wse],[64],1],Ale=[3,p,au,0,[df,ise,Hoe],[0,()=>Ple,()=>Ole],1],jle=[3,p,ou,0,[wd],[0],1],Mle=[3,p,su,0,[df,rd,tf],[0,()=>kle,()=>jle],1],Nle=[3,p,lu,0,[df,mf],[0,0],1],Ple=[3,p,uu,0,[Bse,nd],[0,()=>Nle],2],Fle=[3,p,mu,0,[ld,ioe,pd],[0,[()=>vue,0],0],1],Tf=[3,p,bu,0,[Ose],[0],1],Ile=[3,p,Mu,0,[Nse,Qae,roe],[[()=>oce,0],[()=>ece,0],[()=>tce,0]]],Lle=[3,p,du,0,[Nd],[[()=>bf,0]]],Rle=[3,p,hu,0,[af,yd],[()=>zle,[()=>Lle,0]],1],zle=[3,p,Ou,0,[Bd,od,bd],[0,0,0],3],Ble=[3,p,Au,0,[Mse],[0]],Vle=[3,p,fu,0,[Xd,hd,md],[1,1,1],3],Ef=[3,p,ku,0,[loe],[0]],Hle=[3,p,Su,0,[Nd],[[()=>bf,0]]],Ule=[3,p,Cu,0,[af,yd],[()=>Wle,[()=>Hle,0]],1],Wle=[3,p,wu,0,[Vae,fse,zd,od,bd,xse],[0,64,0,0,0,0],5],Gle=[3,p,yu,0,[df,tf],[0,[()=>Ele,0]],1],Df=[3,p,pu,0,[df,Foe,Noe,Voe,Qoe,Zoe,hoe,Soe,mse],[0,()=>ule,[()=>cle,0],()=>gle,()=>wle,()=>Sle,()=>rle,[()=>ole,0],[()=>Ile,0]],1],Of=[3,p,gu,0,[cse],[()=>bue],1],Kle=[3,p,_u,0,[df,cf],[0,()=>Tf],1],qle=[3,p,Nu,0,[yse,dse],[()=>Jle,0],2],Jle=[3,p,Fu,0,[Sse],[()=>Yle],1],Yle=[3,p,Iu,0,[doe],[0],1],Xle=[3,p,Bu,0,[pse],[()=>yue]],Zle=[3,p,Ku,0,[Zd,Kd],[0,0],2],kf=[3,p,Ju,0,[hae,Eae,Boe,_ae],[()=>mce,()=>wce,()=>fle,()=>vce]],Qle=[3,p,Yu,0,[kd,Ad,sf],[0,()=>Sf,()=>Of],1],$le=[3,p,Hu,0,[rf],[()=>tue],1],eue=[3,p,Gu,0,[Fse],[0],1],tue=[3,p,Xu,0,[Pd],[1],1],nue=[3,p,Zu,0,[yae,Vd,Od,hse,Ase,kse],[()=>rue,[()=>Af,0],[()=>Af,0],0,[()=>ice,0],[()=>ace,0]]],rue=[3,p,Qu,0,[$oe,yoe],[1,1]],iue=[3,p,$u,0,[af,yd],[()=>aue,[()=>nue,0]],1],aue=[3,p,td,0,[jse],[()=>Xle],1],oue=[3,p,ed,0,[Mae],[0],1],sue=[1,p,nc,0,()=>sce],cue=[1,p,Cc,0,()=>Cce],lue=[1,p,Lc,0,()=>Dce],Af=[1,p,Vc,8,[()=>Qse,0]],uue=[1,p,Zc,0,()=>Rce],due=[1,p,tl,0,()=>Bce],fue=[1,p,al,0,()=>Uce],pue=[1,p,fl,0,()=>Kce],mue=[1,p,Hl,8,[()=>mle,0]],hue=[1,p,ql,0,()=>vle],gue=[1,p,Yl,0,()=>xle],_ue=[1,p,cu,0,()=>Mle],vue=[1,p,Tu,0,[()=>rce,0]],yue=[1,p,ju,0,()=>Ble],bue=[1,p,vu,0,()=>Kle],xue=[1,p,Lu,0,()=>qle],Sue=[1,p,qu,0,()=>Zle],Cue=[1,p,Uu,0,()=>$le],wue=[4,p,Mc,0,[Aae,poe],[1,()=>qce]],Tue=[4,p,Du,0,[zae,zse,xoe],[()=>Tce,()=>oue,()=>ale]],Eue=[9,p,fc,{[Ld]:[`PUT`,`/knowledgebases/{knowledgeBaseId}/datasources/`,200]},()=>yce,()=>bce],Due=[9,p,yc,{[Ld]:[`PUT`,`/knowledgebases/`,202]},()=>xce,()=>Sce],Oue=[9,p,Ec,{[Ld]:[`DELETE`,`/knowledgebases/{knowledgeBaseId}/datasources/{dataSourceId}`,202]},()=>Oce,()=>kce],kue=[9,p,kc,{[Ld]:[`DELETE`,`/knowledgebases/{knowledgeBaseId}`,202]},()=>Ace,()=>jce],Aue=[9,p,Kc,{[Ld]:[`GET`,`/knowledgebases/{knowledgeBaseId}`,200]},()=>Fce,()=>Ice],jue=[9,p,hl,{[Ld]:[`POST`,`/knowledgebases/{knowledgeBaseId}/datasources/`,200]},()=>Jce,()=>Yce],Mue=[9,p,vl,{[Ld]:[`POST`,`/knowledgebases/{knowledgeBaseId}/datasources/{dataSourceId}/ingestionjobs/`,200]},()=>Xce,()=>Zce],Nue=[9,p,xl,{[Ld]:[`POST`,`/knowledgebases/`,200]},()=>Qce,()=>$ce],Pue=e=>({apiVersion:`2023-06-05`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Ks,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Ts,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??en,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockagent`,errorTypeRegistries:Xse,version:`2023-06-05`,serviceTarget:`AmazonBedrockAgentBuildTimeLambda`},serviceId:e?.serviceId??`Bedrock Agent`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),Fue=e=>{let t=he(e),n=()=>t().then(a),r=Pue(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:ks.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Iue=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},Lue=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Rue=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),Iue(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),Lue(n))},zue=class extends le{config;constructor(...[t]){let n=Fue(t||{});super(n),this.initConfig=n;let r=Ds(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=Rue(Es(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:Cs,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},jf=e=>Object.assign(e,{eventStreamMarshaller:e.eventStreamSerdeProvider(e)}),Bue=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Vue(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var Hue=e=>{let t=[];return e.operation,t.push(Vue(e)),t},Uue=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},Wue=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Gue={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Kue={name:`@aws-sdk/client-bedrock-agent-runtime`,version:`3.1135.0`,description:`AWS SDK for JavaScript Bedrock Agent Runtime Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-agent-runtime`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-agent-runtime`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},Mf=`ref`,Nf=-1,Pf=!0,Ff=`isSet`,If=`PartitionResult`,Lf=`booleanEquals`,Rf=`getAttr`,zf={[Mf]:`Endpoint`},Bf={[Mf]:If},Vf={},Hf=[{[Mf]:`Region`}],Uf={conditions:[[Ff,[zf]],[Ff,Hf],[`aws.partition`,Hf,If],[Lf,[{[Mf]:`UseFIPS`},Pf]],[Lf,[{[Mf]:`UseDualStack`},Pf]],[Lf,[{fn:Rf,argv:[Bf,`supportsDualStack`]},Pf]],[Lf,[{fn:Rf,argv:[Bf,`supportsFIPS`]},Pf]]],results:[[Nf],[Nf,`Invalid Configuration: FIPS and custom endpoint are not supported`],[Nf,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[zf,Vf],[`https://bedrock-agent-runtime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,Vf],[Nf,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-agent-runtime-fips.{Region}.{PartitionResult#dnsSuffix}`,Vf],[Nf,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-agent-runtime.{Region}.{PartitionResult#dualStackDnsSuffix}`,Vf],[Nf,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-agent-runtime.{Region}.{PartitionResult#dnsSuffix}`,Vf],[Nf,`Invalid Configuration: Missing Region`]]},que=2,Jue=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Yue=xe.from(Jue,que,Uf.conditions,Uf.results),Xue=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Zue=(e,t={})=>Xue.get(e,()=>ut(Yue,{endpointParams:e,logger:t.logger}));Le.aws=oe;var Wf=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Que=class e extends Wf{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$ue=class e extends Wf{name=`BadGatewayException`;$fault=`server`;resourceName;constructor(t){super({name:`BadGatewayException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},ede=class e extends Wf{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tde=class e extends Wf{name=`DependencyFailedException`;$fault=`client`;resourceName;constructor(t){super({name:`DependencyFailedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceName=t.resourceName}},nde=class e extends Wf{name=`InternalServerException`;$fault=`server`;reason;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.reason=t.reason}},rde=class e extends Wf{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ide=class e extends Wf{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ade=class e extends Wf{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ode=class e extends Wf{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sde=class e extends Wf{name=`ModelNotReadyException`;$fault=`client`;constructor(t){super({name:`ModelNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cde=`AccessDeniedException`,lde=`AudioSegment`,ude=`ByteContentBlob`,dde=`BadGatewayException`,fde=`ConflictException`,pde=`DependencyFailedException`,mde=`FilterAttribute`,hde=`FieldForReranking`,gde=`FieldsForReranking`,_de=`GuardrailConfiguration`,vde=`ImplicitFilterConfiguration`,yde=`InputImage`,bde=`InternalServerException`,xde=`KnowledgeBaseQuery`,Sde=`KnowledgeBaseRetrievalConfiguration`,Cde=`KnowledgeBaseRetrievalResult`,wde=`KnowledgeBaseRetrievalResults`,Tde=`KnowledgeBaseVectorSearchConfiguration`,Ede=`MetadataAttributeSchema`,Dde=`MetadataAttributeSchemaList`,Ode=`MetadataConfigurationForReranking`,kde=`ModelNotReadyException`,Ade=`ManagedSearchBedrockRerankingConfiguration`,jde=`ManagedSearchBedrockRerankingModelConfiguration`,Mde=`ManagedSearchConfiguration`,Nde=`ManagedSearchRerankingConfiguration`,Pde=`RetrievalFilter`,Fde=`RetrievalFilterList`,Ide=`RerankingMetadataSelectiveModeConfiguration`,Lde=`ResourceNotFoundException`,Rde=`RetrievalResultContent`,zde=`RetrievalResultContentColumn`,Bde=`RetrievalResultCustomDocumentLocation`,Vde=`RetrievalResultConfluenceLocation`,Hde=`RetrievalResultContentRow`,Ude=`RetrievalResultGoogleDriveLocation`,Wde=`RetrievalResultKendraDocumentLocation`,Gde=`RetrievalResultLocation`,Kde=`RetrievalResultMetadata`,qde=`RetrievalResultOneDriveLocation`,Jde=`RetrievalResultS3Location`,Yde=`RetrievalResultSalesforceLocation`,Xde=`RetrievalResultSqlLocation`,Zde=`RetrievalResultSharePointLocation`,Qde=`RetrievalResultWebLocation`,$de=`RetrieveRequest`,efe=`RetrieveResponse`,tfe=`Retrieve`,nfe=`ServiceQuotaExceededException`,rfe=`ThrottlingException`,ife=`UserContext`,afe=`ValidationException`,ofe=`VideoSegment`,sfe=`VectorSearchBedrockRerankingConfiguration`,cfe=`VectorSearchBedrockRerankingModelConfiguration`,lfe=`VectorSearchRerankingConfiguration`,ufe=`andAll`,Gf=`additionalModelRequestFields`,dfe=`audio`,ffe=`byteContent`,Kf=`bedrockRerankingConfiguration`,qf=`client`,pfe=`customDocumentLocation`,mfe=`confluenceLocation`,hfe=`columnName`,gfe=`columnValue`,_fe=`content`,vfe=`description`,yfe=`documentId`,Jf=`error`,bfe=`equals`,xfe=`fieldName`,Sfe=`fieldsToExclude`,Cfe=`fieldsToInclude`,Yf=`filter`,wfe=`format`,Tfe=`guardrailAction`,Efe=`guardrailConfiguration`,Dfe=`googleDriveLocation`,Ofe=`guardrailId`,kfe=`greaterThan`,Afe=`greaterThanOrEquals`,jfe=`guardrailVersion`,Mfe=`http`,Xf=`httpError`,Nfe=`inlineContent`,Pfe=`implicitFilterConfiguration`,Ffe=`id`,Ife=`image`,Lfe=`in`,Zf=`key`,Rfe=`knowledgeBaseId`,zfe=`kendraDocumentLocation`,Bfe=`listContains`,Vfe=`lessThan`,Hfe=`lessThanOrEquals`,Ufe=`location`,Qf=`message`,$f=`modelArn`,Wfe=`metadataAttributes`,ep=`modelConfiguration`,tp=`metadataConfiguration`,Gfe=`managedSearchConfiguration`,Kfe=`metadata`,qfe=`notEquals`,Jfe=`notIn`,np=`numberOfResults`,rp=`numberOfRerankedResults`,ip=`nextToken`,Yfe=`orAll`,Xfe=`oneDriveLocation`,Zfe=`overrideSearchType`,Qfe=`query`,$fe=`reason`,ap=`rerankingConfiguration`,epe=`retrievalConfiguration`,tpe=`rerankingModelType`,op=`resourceName`,npe=`retrievalQuery`,rpe=`retrievalResults`,ipe=`row`,sp=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockagentruntime`,ape=`stringContains`,ope=`s3Location`,spe=`salesforceLocation`,cpe=`sqlLocation`,lpe=`selectiveModeConfiguration`,upe=`selectionMode`,dpe=`sharePointLocation`,cp=`s3Uri`,fpe=`startsWith`,ppe=`score`,lp=`server`,mpe=`summary`,up=`text`,hpe=`transcription`,dp=`type`,gpe=`userContext`,_pe=`userId`,fp=`url`,pp=`uri`,vpe=`vectorSearchConfiguration`,ype=`value`,bpe=`video`,xpe=`webLocation`,m=`com.amazonaws.bedrockagentruntime`,mp=pt.for(sp),Spe=[-3,sp,`BedrockAgentRuntimeServiceException`,0,[],[]];mp.registerError(Spe,Wf);var hp=pt.for(m),Cpe=[-3,m,cde,{[Jf]:qf,[Xf]:403},[Qf],[0]];hp.registerError(Cpe,Que);var wpe=[-3,m,dde,{[Jf]:lp,[Xf]:502},[Qf,op],[0,0]];hp.registerError(wpe,$ue);var Tpe=[-3,m,fde,{[Jf]:qf,[Xf]:409},[Qf],[0]];hp.registerError(Tpe,ede);var Epe=[-3,m,pde,{[Jf]:qf,[Xf]:424},[Qf,op],[0,0]];hp.registerError(Epe,tde);var Dpe=[-3,m,bde,{[Jf]:lp,[Xf]:500},[Qf,$fe],[0,0]];hp.registerError(Dpe,nde);var Ope=[-3,m,kde,{[Jf]:qf,[Xf]:424},[Qf],[0]];hp.registerError(Ope,sde);var kpe=[-3,m,Lde,{[Jf]:qf,[Xf]:404},[Qf],[0]];hp.registerError(kpe,rde);var Ape=[-3,m,nfe,{[Jf]:qf,[Xf]:400},[Qf],[0]];hp.registerError(Ape,ide);var jpe=[-3,m,rfe,{[Jf]:qf,[Xf]:429},[Qf],[0]];hp.registerError(jpe,ade);var Mpe=[-3,m,afe,{[Jf]:qf,[Xf]:400},[Qf],[0]];hp.registerError(Mpe,ode);var Npe=[mp,hp],Ppe=[0,m,ude,8,21],Fpe=[3,m,lde,0,[cp,hpe],[0,0],1],Ipe=[3,m,hde,0,[xfe],[0],1],gp=[3,m,mde,0,[Zf,ype],[0,15],2],Lpe=[3,m,_de,0,[Ofe,jfe],[0,0],2],Rpe=[3,m,vde,0,[Wfe,$f],[[()=>gme,0],0],2],zpe=[3,m,yde,0,[wfe,Nfe],[0,[()=>Ppe,0]],2],Bpe=[3,m,xde,8,[dp,up,Ife],[0,0,[()=>zpe,0]]],Vpe=[3,m,Sde,0,[vpe,Gfe],[[()=>Upe,0],[()=>Kpe,0]]],Hpe=[3,m,Cde,0,[_fe,Ufe,ppe,Kfe,yfe],[[()=>Xpe,0],[()=>tme,0],1,[()=>vme,0],0],1],Upe=[3,m,Tde,0,[np,Zfe,Yf,ap,Pfe],[1,0,[()=>bp,0],[()=>pme,0],[()=>Rpe,0]]],Wpe=[3,m,Ade,0,[ep,rp,tp],[()=>Gpe,1,[()=>_p,0]],1],Gpe=[3,m,jde,0,[$f,Gf],[0,143],1],Kpe=[3,m,Mde,0,[np,Yf,tpe,ap],[1,[()=>bp,0],0,[()=>qpe,0]]],qpe=[3,m,Nde,0,[dp,Kf],[0,[()=>Wpe,0]],1],Jpe=[3,m,Ede,8,[Zf,dp,vfe],[0,0,0],3],_p=[3,m,Ode,0,[upe,lpe],[0,[()=>yme,0]],1],Ype=[3,m,Vde,0,[fp],[0]],Xpe=[3,m,Rde,8,[dp,up,ffe,bpe,dfe,ipe],[0,0,0,()=>mme,()=>Fpe,[()=>_me,0]]],Zpe=[3,m,zde,8,[hfe,gfe,dp],[0,0,0]],Qpe=[3,m,Bde,0,[Ffe],[0]],$pe=[3,m,Ude,0,[fp],[0]],eme=[3,m,Wde,0,[pp],[0]],tme=[3,m,Gde,8,[dp,ope,xpe,mfe,spe,dpe,pfe,zfe,cpe,Xfe,Dfe],[0,()=>rme,()=>sme,()=>Ype,()=>ime,()=>ame,()=>Qpe,()=>eme,()=>ome,()=>nme,()=>$pe],1],nme=[3,m,qde,0,[fp],[0]],rme=[3,m,Jde,0,[pp],[0]],ime=[3,m,Yde,0,[fp],[0]],ame=[3,m,Zde,0,[fp],[0]],ome=[3,m,Xde,0,[Qfe],[0]],sme=[3,m,Qde,0,[fp],[0]],cme=[3,m,$de,0,[Rfe,npe,epe,Efe,ip,gpe],[[0,1],[()=>Bpe,0],[()=>Vpe,0],()=>Lpe,0,[()=>ume,0]],2],lme=[3,m,efe,0,[rpe,Tfe,ip],[[()=>hme,0],0,0],1],ume=[3,m,ife,8,[_pe],[0],1],dme=[3,m,sfe,0,[ep,rp,tp],[()=>fme,1,[()=>_p,0]],1],fme=[3,m,cfe,0,[$f,Gf],[0,143],1],pme=[3,m,lfe,0,[dp,Kf],[0,[()=>dme,0]],1],mme=[3,m,ofe,0,[cp,mpe],[0,0],1],vp=[1,m,gde,8,()=>Ipe],hme=[1,m,wde,8,[()=>Hpe,0]],gme=[1,m,Dde,0,[()=>Jpe,0]],yp=[1,m,Fde,0,[()=>bp,0]],_me=[1,m,Hde,8,[()=>Zpe,0]],vme=[2,m,Kde,8,0,15],yme=[4,m,Ide,0,[Cfe,Sfe],[[()=>vp,0],[()=>vp,0]]],bp=[4,m,Pde,8,[bfe,qfe,kfe,Afe,Vfe,Hfe,Lfe,Jfe,fpe,Bfe,ape,ufe,Yfe],[()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,()=>gp,[()=>yp,0],[()=>yp,0]]],bme=[9,m,tfe,{[Mfe]:[`POST`,`/knowledgebases/{knowledgeBaseId}/retrieve`,200]},()=>cme,()=>lme],xme=e=>({apiVersion:`2023-07-26`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Zue,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Hue,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??en,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockagentruntime`,errorTypeRegistries:Npe,version:`2023-07-26`,serviceTarget:`AmazonBedrockAgentRunTimeService`},serviceId:e?.serviceId??`Bedrock Agent Runtime`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),Sme=e=>{let t=he(e),n=()=>t().then(a),r=xme(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:Kue.version}),eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Cme=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},wme=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Tme=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),Cme(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),wme(n))},Eme=class extends le{config;constructor(...[t]){let n=Sme(t||{});super(n),this.initConfig=n;let r=Wue(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=Tme(Uue(jf(at(s))),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:Bue,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}};function Dme(e){let t=e.signer,n=e.signer,r=Object.assign(e,{eventSigner:t,messageSigner:n}),i=r.eventStreamPayloadHandlerProvider(r);return Object.assign(r,{eventStreamPayloadHandler:i})}var Ome=e=>typeof e==`string`&&e.indexOf(`arn:`)===0&&e.split(`:`).length>=6;function xp(e){let{port:t,query:n}=e,{protocol:r,path:i,hostname:a}=e;r&&r.slice(-1)!==`:`&&(r+=`:`),t&&(a+=`:${t}`),i&&i.charAt(0)!==`/`&&(i=`/${i}`);let o=n?nt(n):``;o&&o[0]!==`?`&&(o=`?${o}`);let s=``;(e.username!=null||e.password!=null)&&(s=`${e.username??``}:${e.password??``}@`);let c=``;return e.fragment&&(c=`#${e.fragment}`),`${r}//${s}${a}${i}${o}${c}`}var Sp=e=>e.protocol===`ws:`||e.protocol===`wss:`,kme=3e3,Ame=class e{metadata={handlerProtocol:`websocket/h1.1`};config={};configPromise;httpHandler;sockets={};static create(t,n=new Se){return typeof t?.handle==`function`?t:new e(t,n)}constructor(e,t=new Se){this.httpHandler=t;let n=e=>(this.config={...e??{}},this.config);typeof e==`function`?(this.config={},this.configPromise=e().then(e=>n(e))):this.configPromise=Promise.resolve(n(e))}destroy(){for(let[e,t]of Object.entries(this.sockets)){for(let e of t)e.close(1e3,`Socket closed through destroy() call`);delete this.sockets[e]}}async handle(e){this.config=await this.configPromise;let{logger:t}=this.config;if(!Sp(e))return t?.debug?.(`@aws-sdk - ws fetching ${e.protocol}${e.hostname}${e.path}`),this.httpHandler.handle(e);let n=xp(e);t?.debug?.(`@aws-sdk - ws connecting ${n.split(`?`)[0]}`);let r=new WebSocket(n);this.sockets[n]||(this.sockets[n]=[]),this.sockets[n].push(r),r.binaryType=`arraybuffer`;let{connectionTimeout:i=kme}=this.config;await this.waitForReady(r,i);let{body:a}=e,o=jme(a),s=Mme(this.connect(r,o));return{response:new Pe({statusCode:200,body:s})}}updateHttpClientConfig(e,t){this.configPromise=this.configPromise.then(n=>(n[e]=t,n))}httpHandlerConfigs(){return this.config??{}}removeNotUsableSockets(e){this.sockets[e]=(this.sockets[e]??[]).filter(e=>![WebSocket.CLOSING,WebSocket.CLOSED].includes(e.readyState))}waitForReady(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>{this.removeNotUsableSockets(e.url),r({$metadata:{httpStatusCode:500,websocketSynthetic500Error:!0}})},t);e.onopen=()=>{clearTimeout(i),n()}})}connect(e,t){let n=[],r=null,i=null,a=e=>{r?(e.error?i(e.error):r({done:e.done,value:e.value}),r=null,i=null):n.push(e)};e.onmessage=e=>{let{data:t}=e;a(typeof t==`string`?{done:!1,value:d(t)}:{done:!1,value:new Uint8Array(t)})},e.onerror=t=>{e.close(),a({done:!0,error:t})},e.onclose=()=>{this.removeNotUsableSockets(e.url),a({done:!0})};let o={[Symbol.asyncIterator]:()=>({async next(){if(n.length>0){let e=n.shift();if(e.error)throw e.error;return{done:e.done,value:e.value}}return new Promise((e,t)=>{r=e,i=t})}})};return(async()=>{try{for await(let n of t)if(e.readyState>=WebSocket.CLOSING)break;else e.send(n)}catch(e){a({done:!0,error:e})}finally{e.close(1e3)}})(),o}},jme=e=>e[Symbol.asyncIterator]?e:Nme(e)?uee(e):{[Symbol.asyncIterator]:async function*(){yield e}},Mme=e=>typeof ReadableStream==`function`?fee(e):e,Nme=e=>typeof ReadableStream==`function`&&e instanceof ReadableStream,Pme=class{signer;constructor(e){this.signer=e.signer}presign(e,t={}){return this.signer.presign(e,t)}async sign(e,t){return ve.isInstance(e)&&Sp(e)?{...await this.signer.presign({...e,body:``},{...t,expiresIn:60,unsignableHeaders:new Set(Object.keys(e.headers).filter(e=>e!==`host`))}),body:e.body}:this.signer.sign(e,t)}signMessage(e,t){return this.signer.signMessage(e,t)}},Fme=e=>{let{signer:t}=e;return Object.assign(e,{signer:async e=>{let n=await t(e);if(Ime(n))return new Pme({signer:n});throw Error(`Expected WebsocketSignatureV4 signer, please check the client constructor.`)}})},Ime=e=>!!e,Lme=class extends TransformStream{constructor(e,t,n,r,i){let a=e,o=i?.();super({start(){},async transform(e,i){try{let s=new Date(Date.now()+await r()),c={":date":{type:`timestamp`,value:s}},l=await t.sign({message:{body:e,headers:c},priorSignature:a},{signingDate:s,eventStreamCredentials:await o});a=l.signature;let ee=n.encode({headers:{...c,":chunk-signature":{type:`binary`,value:lee(l.signature)}},body:e});i.enqueue(ee)}catch(e){i.error(e)}}})}},Rme=class{messageSigner;eventStreamCodec;systemClockOffsetProvider;credentials;constructor(e){this.messageSigner=e.messageSigner,this.eventStreamCodec=new pee(e.utf8Encoder,e.utf8Decoder),this.systemClockOffsetProvider=async()=>e.systemClockOffset??0,this.credentials=e.credentials}async handle(e,t,n={}){let r=t.request,{body:i,headers:a,query:o}=r;if(!(i instanceof ReadableStream))throw Error(`Eventstream payload must be a ReadableStream.`);let s=new TransformStream;r.body=s.readable;let c=((a?.authorization??``).match(/Signature=(\w+)$/)??[])[1]??(o&&o[`X-Amz-Signature`])??``;n.__staticSignature&&(c=``);let l=new Lme(c,await this.messageSigner(),this.eventStreamCodec,this.systemClockOffsetProvider,this.credentials);i.pipeThrough(l).pipeThrough(s);let ee;try{ee=await e(t)}catch(e){let t=i.cancel?.();throw t instanceof Promise&&t.catch(()=>{}),e}return ee}},zme=e=>new Rme(e),Bme=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Vme(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`bedrock`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function Hme(e){return{schemeId:`smithy.api#httpBearerAuth`,propertiesExtractor:({profile:e,filepath:t,configFilepath:n,ignoreCache:r},i)=>({identityProperties:{profile:e,filepath:t,configFilepath:n,ignoreCache:r}})}}var Ume=e=>{let t=[];return e.operation,t.push(Vme(e)),t.push(Hme(e)),t},Wme=e=>{let t=ie(e.token,Te,i),n=c(e);return Object.assign(n,{authSchemePreference:Ae(e.authSchemePreference??[]),token:t})},Gme=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`bedrock`}),Kme={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},qme={name:`@aws-sdk/client-bedrock-runtime`,version:`3.1135.0`,description:`AWS SDK for JavaScript Bedrock Runtime Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-runtime`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-bedrock-runtime`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:browser":`yarn g:vitest run -c vitest.config.browser.e2e.mts`,"test:browser:watch":`yarn g:vitest watch -c vitest.config.browser.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/eventstream-handler-node":`^3.972.34`,"@aws-sdk/middleware-eventstream":`^3.972.29`,"@aws-sdk/middleware-websocket":`^3.972.53`,"@aws-sdk/token-providers":`3.1135.0`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},Cp=`ref`,wp=-1,Tp=!0,Ep=`isSet`,Dp=`PartitionResult`,Op=`booleanEquals`,kp=`getAttr`,Ap={[Cp]:`Endpoint`},jp={[Cp]:Dp},Mp={},Np=[{[Cp]:`Region`}],Pp={conditions:[[Ep,[Ap]],[Ep,Np],[`aws.partition`,Np,Dp],[Op,[{[Cp]:`UseFIPS`},Tp]],[Op,[{[Cp]:`UseDualStack`},Tp]],[Op,[{fn:kp,argv:[jp,`supportsDualStack`]},Tp]],[Op,[{fn:kp,argv:[jp,`supportsFIPS`]},Tp]]],results:[[wp],[wp,`Invalid Configuration: FIPS and custom endpoint are not supported`],[wp,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[Ap,Mp],[`https://bedrock-runtime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,Mp],[wp,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://bedrock-runtime-fips.{Region}.{PartitionResult#dnsSuffix}`,Mp],[wp,`FIPS is enabled but this partition does not support FIPS`],[`https://bedrock-runtime.{Region}.{PartitionResult#dualStackDnsSuffix}`,Mp],[wp,`DualStack is enabled but this partition does not support DualStack`],[`https://bedrock-runtime.{Region}.{PartitionResult#dnsSuffix}`,Mp],[wp,`Invalid Configuration: Missing Region`]]},Jme=2,Yme=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),Xme=xe.from(Yme,Jme,Pp.conditions,Pp.results),Zme=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Qme=(e,t={})=>Zme.get(e,()=>ut(Xme,{endpointParams:e,logger:t.logger}));Le.aws=oe;var Fp=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},$me=class e extends Fp{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ehe=class e extends Fp{name=`InternalServerException`;$fault=`server`;constructor(t){super({name:`InternalServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},the=class e extends Fp{name=`ThrottlingException`;$fault=`client`;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nhe=class e extends Fp{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rhe=class e extends Fp{name=`ConflictException`;$fault=`client`;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ihe=class e extends Fp{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ahe=class e extends Fp{name=`ServiceQuotaExceededException`;$fault=`client`;constructor(t){super({name:`ServiceQuotaExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ohe=class e extends Fp{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},she=class e extends Fp{name=`ModelErrorException`;$fault=`client`;originalStatusCode;resourceName;constructor(t){super({name:`ModelErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.originalStatusCode=t.originalStatusCode,this.resourceName=t.resourceName}},che=class e extends Fp{name=`ModelNotReadyException`;$fault=`client`;$retryable={};constructor(t){super({name:`ModelNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lhe=class e extends Fp{name=`ModelTimeoutException`;$fault=`client`;constructor(t){super({name:`ModelTimeoutException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uhe=class e extends Fp{name=`ModelStreamErrorException`;$fault=`client`;originalStatusCode;originalMessage;constructor(t){super({name:`ModelStreamErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.originalStatusCode=t.originalStatusCode,this.originalMessage=t.originalMessage}},dhe=`AudioBlock`,fhe=`AccessDeniedException`,phe=`ApplyGuardrail`,mhe=`AppliedGuardrailDetails`,hhe=`ApplyGuardrailRequest`,ghe=`ApplyGuardrailResponse`,_he=`AudioSource`,vhe=`AnyToolChoice`,yhe=`AutoToolChoice`,bhe=`Citation`,xhe=`ContentBlocks`,She=`ContentBlock`,Che=`CitationsConfig`,whe=`CitationsContentBlock`,The=`CacheDetail`,Ehe=`CacheDetailsList`,Dhe=`ConflictException`,Ohe=`CitationGeneratedContent`,khe=`CitationGeneratedContentList`,Ahe=`CitationLocation`,jhe=`ConverseMetrics`,Mhe=`ConverseOutput`,Nhe=`CachePointBlock`,Phe=`ConverseRequest`,Fhe=`ConverseResponse`,Ihe=`CitationSourceContent`,Lhe=`CitationSourceContentList`,Rhe=`ConverseTrace`,zhe=`Citations`,Bhe=`Converse`,Vhe=`DocumentBlock`,Hhe=`DocumentContentBlocks`,Uhe=`DocumentContentBlock`,Whe=`DocumentCharLocation`,Ghe=`DocumentChunkLocation`,Khe=`DocumentPageLocation`,qhe=`DocumentSource`,Jhe=`ErrorBlock`,Yhe=`GuardrailAssessment`,Xhe=`GuardrailAssessmentList`,Zhe=`GuardrailAssessmentListMap`,Qhe=`GuardrailAssessmentMap`,$he=`GuardrailAutomatedReasoningDifferenceScenarioList`,ege=`GuardrailAutomatedReasoningFinding`,tge=`GuardrailAutomatedReasoningFindingList`,nge=`GuardrailAutomatedReasoningImpossibleFinding`,rge=`GuardrailAutomatedReasoningInvalidFinding`,ige=`GuardrailAutomatedReasoningInputTextReference`,age=`GuardrailAutomatedReasoningInputTextReferenceList`,oge=`GuardrailAutomatedReasoningLogicWarning`,sge=`GuardrailAutomatedReasoningNoTranslationsFinding`,cge=`GuardrailAutomatedReasoningPolicyAssessment`,lge=`GuardrailAutomatedReasoningRule`,uge=`GuardrailAutomatedReasoningRuleList`,dge=`GuardrailAutomatedReasoningScenario`,fge=`GuardrailAutomatedReasoningSatisfiableFinding`,pge=`GuardrailAutomatedReasoningStatementList`,mge=`GuardrailAutomatedReasoningStatementLogicContent`,hge=`GuardrailAutomatedReasoningStatementNaturalLanguageContent`,gge=`GuardrailAutomatedReasoningStatement`,_ge=`GuardrailAutomatedReasoningTranslation`,vge=`GuardrailAutomatedReasoningTranslationAmbiguousFinding`,yge=`GuardrailAutomatedReasoningTooComplexFinding`,bge=`GuardrailAutomatedReasoningTranslationList`,xge=`GuardrailAutomatedReasoningTranslationOption`,Sge=`GuardrailAutomatedReasoningTranslationOptionList`,Cge=`GuardrailAutomatedReasoningValidFinding`,wge=`GuardrailConfiguration`,Tge=`GuardrailContentBlock`,Ege=`GuardrailContentBlockList`,Dge=`GuardrailConverseContentBlock`,Oge=`GuardrailContentFilter`,kge=`GuardrailContentFilterList`,Age=`GuardrailContextualGroundingFilter`,jge=`GuardrailContextualGroundingFilters`,Mge=`GuardrailContextualGroundingPolicyAssessment`,Nge=`GuardrailConverseImageBlock`,Pge=`GuardrailConverseImageSource`,Fge=`GuardrailContentPolicyAssessment`,Ige=`GuardrailConverseTextBlock`,Lge=`GuardrailCustomWord`,Rge=`GuardrailCustomWordList`,zge=`GuardrailCoverage`,Bge=`GuardrailImageBlock`,Vge=`GuardrailImageCoverage`,Hge=`GuardrailInvocationMetrics`,Uge=`GuardrailImageSource`,Wge=`GuardrailManagedWord`,Gge=`GuardrailManagedWordList`,Kge=`GuardrailOutputContent`,qge=`GuardrailOutputContentList`,Jge=`GuardrailPiiEntityFilter`,Yge=`GuardrailPiiEntityFilterList`,Xge=`GuardrailRegexFilter`,Zge=`GuardrailRegexFilterList`,Qge=`GuardrailSensitiveInformationPolicyAssessment`,$ge=`GuardrailTopic`,e_e=`GuardrailTraceAssessment`,t_e=`GuardrailTextBlock`,n_e=`GuardrailTextCharactersCoverage`,r_e=`GuardrailTopicList`,i_e=`GuardrailTopicPolicyAssessment`,a_e=`GuardrailUsage`,o_e=`GuardrailWordPolicyAssessment`,s_e=`ImageBlock`,c_e=`InferenceConfiguration`,l_e=`ImageSource`,u_e=`InternalServerException`,d_e=`JsonSchemaDefinition`,f_e=`Message`,p_e=`ModelErrorException`,m_e=`ModelNotReadyException`,h_e=`ModelStreamErrorException`,g_e=`ModelTimeoutException`,__e=`Messages`,v_e=`OutputConfig`,y_e=`OutputFormat`,b_e=`OutputFormatStructure`,x_e=`PerformanceConfiguration`,S_e=`PromptRouterTrace`,C_e=`PromptVariableMap`,w_e=`PromptVariableValues`,T_e=`ReasoningContentBlock`,E_e=`RequestMetadata`,D_e=`ResourceNotFoundException`,O_e=`ReasoningTextBlock`,k_e=`SystemContentBlocks`,A_e=`SystemContentBlock`,j_e=`S3Location`,M_e=`ServiceQuotaExceededException`,N_e=`SearchResultBlock`,P_e=`SearchResultContentBlock`,F_e=`SearchResultContentBlocks`,I_e=`SearchResultLocation`,L_e=`ServiceTier`,R_e=`SpecificToolChoice`,z_e=`SystemTool`,B_e=`ServiceUnavailableException`,V_e=`ToolAdditionBlock`,H_e=`ToolConfiguration`,U_e=`ToolChoice`,W_e=`ThrottlingException`,G_e=`ToolInputSchema`,K_e=`ToolReference`,q_e=`ToolRemovalBlock`,J_e=`ToolResultBlock`,Y_e=`ToolResultContentBlocks`,X_e=`ToolResultContentBlock`,Z_e=`ToolSpecification`,Q_e=`TokenUsage`,$_e=`ToolUseBlock`,eve=`Tools`,tve=`Tool`,nve=`VideoBlock`,rve=`ValidationException`,ive=`VideoSource`,ave=`WebLocation`,Ip=`action`,ove=`appliedGuardrailDetails`,sve=`additionalModelRequestFields`,cve=`additionalModelResponseFieldPaths`,lve=`additionalModelResponseFields`,Lp=`actionReason`,uve=`automatedReasoningPolicy`,dve=`automatedReasoningPolicyUnits`,fve=`automatedReasoningPolicies`,pve=`any`,mve=`assessments`,hve=`audio`,gve=`auto`,Rp=`bytes`,_ve=`bucketOwner`,zp=`client`,vve=`citationsContent`,yve=`cacheDetails`,bve=`claimsFalseScenario`,xve=`contextualGroundingPolicy`,Sve=`contextualGroundingPolicyUnits`,Cve=`contentPolicy`,wve=`contentPolicyImageUnits`,Tve=`contentPolicyUnits`,Bp=`cachePoint`,Vp=`contradictingRules`,Eve=`cacheReadInputTokens`,Hp=`claimsTrueScenario`,Dve=`customWords`,Ove=`cacheWriteInputTokens`,Up=`citations`,Wp=`claims`,Gp=`content`,kve=`context`,Kp=`confidence`,Ave=`documentChar`,jve=`documentChunk`,qp=`documentIndex`,Mve=`documentPage`,Nve=`differenceScenarios`,Jp=`detected`,Yp=`description`,Pve=`domain`,Xp=`document`,Zp=`error`,Fve=`effort`,Ive=`enabled`,Qp=`end`,$p=`format`,Lve=`filterStrength`,Rve=`findings`,em=`filters`,zve=`guardrail`,Bve=`guardrailArn`,tm=`guardrailCoverage`,Vve=`guardrailConfig`,nm=`guardContent`,Hve=`guardrailId`,rm=`guardrailIdentifier`,Uve=`guardrailOrigin`,Wve=`guardrailOwnership`,Gve=`guardrailProcessingLatency`,im=`guardrailVersion`,am=`guarded`,om=`http`,sm=`httpError`,Kve=`input`,qve=`inputAssessment`,Jve=`inferenceConfig`,Yve=`invocationMetrics`,Xve=`invokedModelId`,Zve=`inputSchema`,cm=`inputTokens`,Qve=`identifier`,$ve=`images`,lm=`image`,eye=`impossible`,tye=`invalid`,um=`json`,nye=`jsonSchema`,rye=`location`,iye=`latencyMs`,dm=`logicWarning`,aye=`latency`,oye=`logic`,fm=`message`,sye=`modelId`,cye=`modelOutput`,lye=`maxTokens`,uye=`managedWordLists`,pm=`match`,dye=`messages`,fye=`metrics`,mm=`name`,pye=`naturalLanguage`,mye=`noTranslations`,hye=`outputs`,gye=`outputAssessments`,_ye=`outputConfig`,vye=`originalMessage`,yye=`outputScope`,hm=`originalStatusCode`,bye=`outputTokens`,xye=`options`,Sye=`output`,gm=`premises`,_m=`performanceConfig`,Cye=`piiEntities`,wye=`promptRouter`,Tye=`promptVariables`,Eye=`policyVersionArn`,vm=`qualifiers`,Dye=`reasoningContent`,Oye=`redactedContent`,kye=`requestMetadata`,Aye=`resourceName`,jye=`reasoningText`,Mye=`regex`,Nye=`regexes`,Pye=`role`,ym=`smithy.ts.sdk.synthetic.com.amazonaws.bedrockruntime`,Fye=`sourceContent`,Iye=`sensitiveInformationPolicy`,Lye=`sensitiveInformationPolicyFreeUnits`,Rye=`sensitiveInformationPolicyUnits`,bm=`s3Location`,zye=`serverName`,Bye=`stopReason`,Vye=`searchResultIndex`,Hye=`searchResultLocation`,xm=`searchResult`,Uye=`supportingRules`,Wye=`stopSequences`,Sm=`serviceTier`,Gye=`systemTool`,Kye=`satisfiable`,qye=`score`,Jye=`schema`,Cm=`server`,Yye=`signature`,wm=`source`,Xye=`status`,Tm=`start`,Zye=`statements`,Qye=`strict`,$ye=`structure`,ebe=`system`,Em=`ttl`,tbe=`toolAddition`,nbe=`translationAmbiguous`,rbe=`toolConfig`,ibe=`textCharacters`,abe=`toolChoice`,obe=`tooComplex`,sbe=`textFormat`,cbe=`topicPolicy`,lbe=`topicPolicyUnits`,ube=`topP`,dbe=`toolResult`,fbe=`toolRemoval`,pbe=`toolSpec`,mbe=`totalTokens`,Dm=`toolUseId`,hbe=`toolUse`,Om=`text`,gbe=`temperature`,_be=`threshold`,km=`title`,Am=`total`,jm=`tool`,vbe=`tools`,ybe=`topics`,Mm=`trace`,Nm=`translation`,bbe=`translations`,Pm=`type`,Fm=`usage`,xbe=`untranslatedClaims`,Sbe=`untranslatedPremises`,Cbe=`uri`,wbe=`url`,Tbe=`valid`,Im=`video`,Ebe=`web`,Dbe=`wordPolicy`,Obe=`wordPolicyUnits`,h=`com.amazonaws.bedrockruntime`,Lm=pt.for(ym),kbe=[-3,ym,`BedrockRuntimeServiceException`,0,[],[]];Lm.registerError(kbe,Fp);var Rm=pt.for(h),Abe=[-3,h,fhe,{[Zp]:zp,[sm]:403},[fm],[0]];Rm.registerError(Abe,$me);var jbe=[-3,h,Dhe,{[Zp]:zp,[sm]:400},[fm],[0]];Rm.registerError(jbe,rhe);var Mbe=[-3,h,u_e,{[Zp]:Cm,[sm]:500},[fm],[0]];Rm.registerError(Mbe,ehe);var Nbe=[-3,h,p_e,{[Zp]:zp,[sm]:424},[fm,hm,Aye],[0,1,0]];Rm.registerError(Nbe,she);var Pbe=[-3,h,m_e,{[Zp]:zp,[sm]:429},[fm],[0]];Rm.registerError(Pbe,che);var Fbe=[-3,h,h_e,{[Zp]:zp,[sm]:424},[fm,hm,vye],[0,1,0]];Rm.registerError(Fbe,uhe);var Ibe=[-3,h,g_e,{[Zp]:zp,[sm]:408},[fm],[0]];Rm.registerError(Ibe,lhe);var Lbe=[-3,h,D_e,{[Zp]:zp,[sm]:404},[fm],[0]];Rm.registerError(Lbe,ihe);var Rbe=[-3,h,M_e,{[Zp]:zp,[sm]:400},[fm],[0]];Rm.registerError(Rbe,ahe);var zbe=[-3,h,B_e,{[Zp]:Cm,[sm]:503},[fm],[0]];Rm.registerError(zbe,ohe);var Bbe=[-3,h,W_e,{[Zp]:zp,[sm]:429},[fm],[0]];Rm.registerError(Bbe,the);var Vbe=[-3,h,rve,{[Zp]:zp,[sm]:400},[fm],[0]];Rm.registerError(Vbe,nhe);var Hbe=[Lm,Rm],Ube=[0,h,mge,8,0],zm=[0,h,hge,8,0],Wbe=[3,h,vhe,0,[],[]],Gbe=[3,h,mhe,0,[Hve,im,Bve,Uve,Wve],[0,0,0,64,0]],Kbe=[3,h,hhe,0,[rm,im,wm,Gp,yye],[[0,1],[0,1],0,[()=>mSe,0],0],4],qbe=[3,h,ghe,0,[Fm,Ip,hye,mve,Lp,tm],[()=>Ym,0,()=>ySe,[()=>ih,0],0,()=>Jm],4],Jbe=[3,h,dhe,0,[$p,wm,Zp],[0,[()=>MSe,0],[()=>Um,0]],2],Ybe=[3,h,yhe,0,[],[]],Xbe=[3,h,The,0,[Em,cm],[0,1],2],Bm=[3,h,Nhe,0,[Pm,Em],[0,0],1],Zbe=[3,h,bhe,0,[km,wm,Fye,rye],[0,0,()=>sSe,()=>PSe]],Vm=[3,h,Che,0,[Ive],[2],1],Qbe=[3,h,whe,0,[Gp,Up],[()=>aSe,()=>oSe]],$be=[3,h,jhe,0,[iye],[1],1],exe=[3,h,Phe,0,[sye,dye,ebe,Jve,rbe,Vve,sve,Tye,cve,kye,_m,Sm,_ye],[[0,1],[()=>CSe,0],[()=>TSe,0],()=>Bxe,()=>Qxe,()=>vxe,15,[()=>ASe,0],64,[()=>jSe,0],()=>Qm,()=>th,[()=>Hxe,0]],1],txe=[3,h,Fhe,0,[Sye,Bye,Fm,fye,lve,Mm,_m,Sm],[[()=>LSe,0],0,()=>Xxe,()=>$be,15,[()=>nxe,0],()=>Qm,()=>th],4],nxe=[3,h,Rhe,0,[zve,wye],[[()=>Rxe,0],()=>Wxe]],Hm=[3,h,Vhe,0,[mm,wm,$p,kve,Up],[0,()=>zSe,0,0,()=>Vm],2],rxe=[3,h,Whe,0,[qp,Tm,Qp],[1,1,1]],ixe=[3,h,Ghe,0,[qp,Tm,Qp],[1,1,1]],axe=[3,h,Khe,0,[qp,Tm,Qp],[1,1,1]],Um=[3,h,Jhe,8,[fm],[0]],Wm=[3,h,Yhe,0,[cbe,Cve,Dbe,Iye,xve,uve,Yve,ove],[()=>Lxe,()=>bxe,()=>zxe,()=>Nxe,()=>Sxe,[()=>uxe,0],()=>Oxe,()=>Gbe]],oxe=[3,h,nge,0,[Nm,Vp,dm],[[()=>qm,0],()=>oh,[()=>Gm,0]]],sxe=[3,h,ige,0,[Om],[[()=>zm,0]]],cxe=[3,h,rge,0,[Nm,Vp,dm],[[()=>qm,0],()=>oh,[()=>Gm,0]]],Gm=[3,h,oge,0,[Pm,gm,Wp],[0,[()=>sh,0],[()=>sh,0]]],lxe=[3,h,sge,0,[],[]],uxe=[3,h,cge,0,[Rve],[[()=>dSe,0]]],dxe=[3,h,lge,0,[Qve,Eye],[0,0]],fxe=[3,h,fge,0,[Nm,Hp,bve,dm],[[()=>qm,0],[()=>Km,0],[()=>Km,0],[()=>Gm,0]]],Km=[3,h,dge,0,[Zye],[[()=>sh,0]]],pxe=[3,h,gge,0,[oye,pye],[[()=>Ube,0],[()=>zm,0]]],mxe=[3,h,yge,0,[],[]],qm=[3,h,_ge,0,[gm,Wp,Sbe,xbe,Kp],[[()=>sh,0],[()=>sh,0],[()=>ah,0],[()=>ah,0],1]],hxe=[3,h,vge,0,[xye,Nve],[[()=>pSe,0],[()=>uSe,0]]],gxe=[3,h,xge,0,[bbe],[[()=>fSe,0]]],_xe=[3,h,Cge,0,[Nm,Hp,Uye,dm],[[()=>qm,0],[()=>Km,0],()=>oh,[()=>Gm,0]]],vxe=[3,h,wge,0,[rm,im,Mm],[0,0,0]],yxe=[3,h,Oge,0,[Pm,Kp,Ip,Lve,Jp],[0,0,0,0,2],3],bxe=[3,h,Fge,0,[em],[()=>hSe],1],xxe=[3,h,Age,0,[Pm,_be,qye,Ip,Jp],[0,1,1,0,2],4],Sxe=[3,h,Mge,0,[em],[()=>gSe]],Cxe=[3,h,Nge,8,[$p,wm],[0,[()=>HSe,0]],2],wxe=[3,h,Ige,0,[Om,vm],[0,64],1],Jm=[3,h,zge,0,[ibe,$ve],[()=>Fxe,()=>Dxe]],Txe=[3,h,Lge,0,[pm,Ip,Jp],[0,0,2],2],Exe=[3,h,Bge,8,[$p,wm],[0,[()=>USe,0]],2],Dxe=[3,h,Vge,0,[am,Am],[1,1]],Oxe=[3,h,Hge,0,[Gve,Fm,tm],[1,()=>Ym,()=>Jm]],kxe=[3,h,Wge,0,[pm,Pm,Ip,Jp],[0,0,0,2],3],Axe=[3,h,Kge,0,[Om],[0]],jxe=[3,h,Jge,0,[pm,Pm,Ip,Jp],[0,0,0,2],3],Mxe=[3,h,Xge,0,[Ip,mm,pm,Mye,Jp],[0,0,0,0,2],1],Nxe=[3,h,Qge,0,[Cye,Nye],[()=>bSe,()=>xSe],2],Pxe=[3,h,t_e,0,[Om,vm],[0,64],1],Fxe=[3,h,n_e,0,[am,Am],[1,1]],Ixe=[3,h,$ge,0,[mm,Pm,Ip,Jp],[0,0,0,2],3],Lxe=[3,h,i_e,0,[ybe],[()=>SSe],1],Rxe=[3,h,e_e,0,[cye,qve,gye,Lp],[64,[()=>kSe,0],[()=>OSe,0],0]],Ym=[3,h,a_e,0,[lbe,Tve,Obe,Rye,Lye,Sve,wve,dve,fve],[1,1,1,1,1,1,1,1,1],6],zxe=[3,h,o_e,0,[Dve,uye],[()=>_Se,()=>vSe],2],Xm=[3,h,s_e,0,[$p,wm,Zp],[0,[()=>WSe,0],[()=>Um,0]],2],Bxe=[3,h,c_e,0,[lye,gbe,ube,Wye],[1,1,1,64]],Vxe=[3,h,d_e,0,[Jye,mm,Yp],[0,0,0],1],Zm=[3,h,f_e,0,[Pye,Gp],[0,[()=>cSe,0]],2],Hxe=[3,h,v_e,0,[sbe,Fve],[[()=>Uxe,0],0]],Uxe=[3,h,y_e,0,[Pm,$ye],[0,[()=>GSe,0]],2],Qm=[3,h,x_e,0,[aye],[0]],Wxe=[3,h,S_e,0,[Xve],[0]],Gxe=[3,h,O_e,8,[Om,Yye],[0,0],1],$m=[3,h,j_e,0,[Cbe,_ve],[0,0],1],eh=[3,h,N_e,0,[wm,km,Gp,Up],[0,0,()=>wSe,()=>Vm],3],Kxe=[3,h,P_e,0,[Om],[0],1],qxe=[3,h,I_e,0,[Vye,Tm,Qp],[1,1,1]],th=[3,h,L_e,0,[Pm],[0],1],Jxe=[3,h,R_e,0,[mm],[0],1],Yxe=[3,h,z_e,0,[mm],[0],1],Xxe=[3,h,Q_e,0,[cm,bye,mbe,Eve,Ove,yve],[1,1,1,1,1,()=>iSe],3],Zxe=[3,h,V_e,0,[jm],[()=>nh],1],Qxe=[3,h,H_e,0,[vbe,abe],[()=>DSe,()=>XSe],1],nh=[3,h,K_e,0,[Pm,mm,zye],[0,0,0]],$xe=[3,h,q_e,0,[jm],[()=>nh],1],eSe=[3,h,J_e,0,[Dm,Gp,Xye,Pm],[0,[()=>ESe,0],0,0],2],tSe=[3,h,Z_e,0,[mm,Zve,Yp,Qye],[0,()=>ZSe,0,2],2],nSe=[3,h,$_e,0,[Dm,mm,Kve,Pm],[0,0,15,0],3],rh=[3,h,nve,0,[$p,wm],[0,()=>$Se],2],rSe=[3,h,ave,0,[wbe,Pve],[0,0]],iSe=[1,h,Ehe,0,()=>Xbe],aSe=[1,h,khe,0,()=>NSe],oSe=[1,h,zhe,0,()=>Zbe],sSe=[1,h,Lhe,0,()=>FSe],cSe=[1,h,xhe,0,[()=>ISe,0]],lSe=[1,h,Hhe,0,()=>RSe],ih=[1,h,Xhe,0,[()=>Wm,0]],uSe=[1,h,$he,0,[()=>Km,0]],dSe=[1,h,tge,0,[()=>BSe,0]],ah=[1,h,age,0,[()=>sxe,0]],oh=[1,h,uge,0,()=>dxe],sh=[1,h,pge,0,[()=>pxe,0]],fSe=[1,h,bge,0,[()=>qm,0]],pSe=[1,h,Sge,0,[()=>gxe,0]],mSe=[1,h,Ege,0,[()=>VSe,0]],hSe=[1,h,kge,0,()=>yxe],gSe=[1,h,jge,0,()=>xxe],_Se=[1,h,Rge,0,()=>Txe],vSe=[1,h,Gge,0,()=>kxe],ySe=[1,h,qge,0,()=>Axe],bSe=[1,h,Yge,0,()=>jxe],xSe=[1,h,Zge,0,()=>Mxe],SSe=[1,h,r_e,0,()=>Ixe],CSe=[1,h,__e,0,[()=>Zm,0]],wSe=[1,h,F_e,0,()=>Kxe],TSe=[1,h,k_e,0,[()=>JSe,0]],ESe=[1,h,Y_e,0,[()=>QSe,0]],DSe=[1,h,eve,0,()=>YSe],OSe=[2,h,Zhe,0,[0,0],[()=>ih,0]],kSe=[2,h,Qhe,0,[0,0],[()=>Wm,0]],ASe=[2,h,C_e,8,0,()=>KSe],jSe=[2,h,E_e,8,0,0],MSe=[4,h,_he,8,[Rp,bm],[21,()=>$m]],NSe=[4,h,Ohe,0,[Om],[0]],PSe=[4,h,Ahe,0,[Ebe,Ave,Mve,jve,Hye],[()=>rSe,()=>rxe,()=>axe,()=>ixe,()=>qxe]],FSe=[4,h,Ihe,0,[Om],[0]],ISe=[4,h,She,0,[Om,lm,Xp,Im,hve,hbe,dbe,nm,Bp,Dye,vve,xm,tbe,fbe],[0,[()=>Xm,0],()=>Hm,()=>rh,[()=>Jbe,0],()=>nSe,[()=>eSe,0],[()=>ch,0],()=>Bm,[()=>qSe,0],()=>Qbe,()=>eh,()=>Zxe,()=>$xe]],LSe=[4,h,Mhe,0,[fm],[[()=>Zm,0]]],RSe=[4,h,Uhe,0,[Om],[0]],zSe=[4,h,qhe,0,[Rp,bm,Om,Gp],[21,()=>$m,0,()=>lSe]],BSe=[4,h,ege,0,[Tbe,tye,Kye,eye,nbe,obe,mye],[[()=>_xe,0],[()=>cxe,0],[()=>fxe,0],[()=>oxe,0],[()=>hxe,0],()=>mxe,()=>lxe]],VSe=[4,h,Tge,0,[Om,lm],[()=>Pxe,[()=>Exe,0]]],ch=[4,h,Dge,0,[Om,lm],[()=>wxe,[()=>Cxe,0]]],HSe=[4,h,Pge,8,[Rp],[21]],USe=[4,h,Uge,8,[Rp],[21]],WSe=[4,h,l_e,8,[Rp,bm],[21,()=>$m]],GSe=[4,h,b_e,8,[nye],[()=>Vxe]],KSe=[4,h,w_e,0,[Om],[0]],qSe=[4,h,T_e,8,[jye,Oye],[[()=>Gxe,0],21]],JSe=[4,h,A_e,0,[Om,nm,Bp],[0,[()=>ch,0],()=>Bm]],YSe=[4,h,tve,0,[pbe,Gye,Bp],[()=>tSe,()=>Yxe,()=>Bm]],XSe=[4,h,U_e,0,[gve,pve,jm],[()=>Ybe,()=>Wbe,()=>Jxe]],ZSe=[4,h,G_e,0,[um],[15]],QSe=[4,h,X_e,0,[um,Om,lm,Xp,Im,xm],[15,0,[()=>Xm,0],()=>Hm,()=>rh,()=>eh]],$Se=[4,h,ive,0,[Rp,bm],[21,()=>$m]],eCe=[9,h,phe,{[om]:[`POST`,`/guardrail/{guardrailIdentifier}/version/{guardrailVersion}/apply`,200]},()=>Kbe,()=>qbe],tCe=[9,h,Bhe,{[om]:[`POST`,`/model/{modelId}/converse`,200]},()=>exe,()=>txe],nCe=e=>({apiVersion:`2023-09-30`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Qme,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Ume,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue},{schemeId:`smithy.api#httpBearerAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#httpBearerAuth`),signer:new Ot}],logger:e?.logger??new de,protocol:e?.protocol??en,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.bedrockruntime`,errorTypeRegistries:Hbe,version:`2023-09-30`,serviceTarget:`AmazonBedrockFrontendService`},serviceId:e?.serviceId??`Bedrock Runtime`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),rCe=e=>{let t=he(e),n=()=>t().then(a),r=nCe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:qme.version}),eventStreamPayloadHandlerProvider:e?.eventStreamPayloadHandlerProvider??zme,eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Ame.create(e?.requestHandler??n,Se.create(n)),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},iCe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials,i=e.token;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r},setToken(e){i=e},token(){return i}}},aCe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials(),token:e.token()}),oCe=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),iCe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),aCe(n))},sCe=class extends le{config;constructor(...[t]){let n=rCe(t||{});super(n),this.initConfig=n;let r=Gme(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=oCe(Fme(Dme(Wme(jf(at(s))))),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:Bme,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials,"smithy.api#httpBearerAuth":e.token})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},cCe=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function lCe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ec2`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var uCe=e=>{let t=[];return e.operation,t.push(lCe(e)),t},dCe=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},fCe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ec2`}),pCe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},mCe={name:`@aws-sdk/client-ec2`,version:`3.1135.0`,description:`AWS SDK for JavaScript Ec2 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ec2`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ec2`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/middleware-sdk-ec2":`^3.972.59`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},lh=`ref`,uh=-1,dh=!0,fh=`isSet`,ph=`PartitionResult`,mh=`booleanEquals`,hh=`getAttr`,gh={[lh]:`Endpoint`},_h={[lh]:ph},vh={},yh=[{[lh]:`Region`}],bh={conditions:[[fh,[gh]],[fh,yh],[`aws.partition`,yh,ph],[mh,[{[lh]:`UseFIPS`},dh]],[mh,[{[lh]:`UseDualStack`},dh]],[mh,[{fn:hh,argv:[_h,`supportsDualStack`]},dh]],[mh,[{fn:hh,argv:[_h,`supportsFIPS`]},dh]],[`stringEquals`,[{fn:hh,argv:[_h,`name`]},`aws-us-gov`]]],results:[[uh],[uh,`Invalid Configuration: FIPS and custom endpoint are not supported`],[uh,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[gh,vh],[`https://ec2-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,vh],[uh,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://ec2.{Region}.amazonaws.com`,vh],[`https://ec2-fips.{Region}.{PartitionResult#dnsSuffix}`,vh],[uh,`FIPS is enabled but this partition does not support FIPS`],[`https://ec2.{Region}.{PartitionResult#dualStackDnsSuffix}`,vh],[uh,`DualStack is enabled but this partition does not support DualStack`],[`https://ec2.{Region}.{PartitionResult#dnsSuffix}`,vh],[uh,`Invalid Configuration: Missing Region`]]},hCe=2,gCe=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),_Ce=xe.from(gCe,hCe,bh.conditions,bh.results),vCe=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),yCe=(e,t={})=>vCe.get(e,()=>ut(_Ce,{endpointParams:e,logger:t.logger}));Le.aws=oe;var bCe=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},xh=`Address`,xCe=`AllocateAddressRequest`,SCe=`AllocateAddressResult`,CCe=`AssociateAddressRequest`,wCe=`AssociateAddressResult`,TCe=`AllAvailabilityZones`,ECe=`AllocateAddress`,DCe=`ApplianceArn`,OCe=`AssociateAddress`,kCe=`AttachedAppliances`,ACe=`AttributeBooleanValue`,Sh=`AcceleratorCount`,Ch=`AssociateCarrierIpAddress`,jCe=`AcceleratorCountRequest`,MCe=`AdditionalFlexibleNetworkInterfaces`,NCe=`AvailableIpAddressCount`,wh=`AssignIpv6AddressOnCreation`,PCe=`AttachInternetGateway`,FCe=`AttachInternetGatewayRequest`,ICe=`AssociateIamInstanceProfile`,LCe=`AssociateIamInstanceProfileRequest`,RCe=`AssociateIamInstanceProfileResult`,zCe=`AllocationIdList`,BCe=`AssociationIdList`,Th=`AllowedInstanceTypes`,VCe=`AllowedInstanceTypeSet`,HCe=`AllowedInstanceType`,Eh=`AdditionalInfo`,Dh=`AllocationId`,Oh=`AllocationIds`,kh=`AssociationId`,UCe=`AssociationIds`,Ah=`AttachmentId`,WCe=`AmiLaunchIndex`,GCe=`AttachmentLimitType`,KCe=`AddressList`,qCe=`AcceleratorManufacturerSet`,jh=`AcceleratorManufacturers`,JCe=`AcceleratorManufacturer`,Mh=`AvailabilityMode`,YCe=`AcceleratorNameSet`,Nh=`AcceleratorNames`,XCe=`AcceleratorName`,Ph=`AssociatePublicIpAddress`,ZCe=`AmazonProvidedIpv6CidrBlock`,QCe=`AutoProvisionZones`,$Ce=`AutoRecoverySupported`,ewe=`AssociateRouteTableRequest`,twe=`AssociateRouteTableResult`,nwe=`AssociateRouteTable`,rwe=`AllowReassociation`,iwe=`AllRegions`,Fh=`AssociatedResource`,Ih=`AutoRecovery`,awe=`AuthorizeSecurityGroupEgress`,owe=`AuthorizeSecurityGroupEgressRequest`,swe=`AuthorizeSecurityGroupEgressResult`,cwe=`AuthorizeSecurityGroupIngressRequest`,lwe=`AuthorizeSecurityGroupIngressResult`,uwe=`AuthorizeSecurityGroupIngress`,dwe=`AutoScalingIps`,Lh=`AmdSevSnp`,Rh=`AssociationState`,fwe=`AttachmentState`,pwe=`ArchitectureTypeList`,zh=`AcceleratorTotalMemoryMiB`,mwe=`AcceleratorTotalMemoryMiBRequest`,hwe=`AcceleratorTypeSet`,Bh=`AcceleratorTypes`,gwe=`AcceleratorType`,Vh=`AttachTime`,_we=`AttachVolumeRequest`,vwe=`AttributeValue`,ywe=`AttachVolume`,Hh=`AvailabilityZone`,Uh=`AvailabilityZoneAddress`,Wh=`AvailabilityZoneAddresses`,bwe=`AvailabilityZoneGeography`,xwe=`AvailabilityZoneGeographyList`,Gh=`AvailabilityZoneId`,Swe=`AvailabilityZoneList`,Cwe=`AvailabilityZoneMessage`,wwe=`AvailabilityZoneMessageList`,Twe=`AvailabilityZoneSubGeography`,Ewe=`AvailabilityZoneSubGeographyList`,Dwe=`AvailabilityZones`,Kh=`Accelerators`,Owe=`Addresses`,qh=`Affinity`,Jh=`Arn`,Yh=`Architecture`,kwe=`Associations`,Xh=`Association`,Awe=`Attribute`,Zh=`Attachment`,Qh=`Attachments`,jwe=`BaselineBandwidthInGbps`,$h=`BaselineBandwidthInMbps`,eg=`BlockDeviceMapping`,Mwe=`BlockDeviceMappingList`,Nwe=`BlockDeviceMappingRequestList`,tg=`BlockDeviceMappings`,ng=`BlockDurationMinutes`,rg=`BaselineEbsBandwidthMbps`,Pwe=`BaselineEbsBandwidthMbpsRequest`,ig=`BaselineIops`,ag=`BootMode`,Fwe=`BootModeOverride`,Iwe=`BootModeTypeList`,og=`BareMetal`,sg=`BurstablePerformance`,cg=`BlockPublicAccessStates`,lg=`BaselinePerformanceFactors`,Lwe=`BaselinePerformanceFactorsRequest`,Rwe=`BillingProductList`,zwe=`BurstablePerformanceSupported`,Bwe=`BillingProducts`,Vwe=`BillingProduct`,ug=`BaselineThroughputInMBps`,dg=`BandwidthWeighting`,Hwe=`BandwidthWeightingTypeList`,Uwe=`BandwidthWeightings`,fg=`CidrBlock`,Wwe=`CidrBlockAssociationSet`,Gwe=`CapacityBlockId`,Kwe=`CidrBlockState`,pg=`CreatedBy`,qwe=`CoreCountList`,mg=`CoreCount`,hg=`CpuCredits`,gg=`CompletionDurationMinutes`,Jwe=`CreationDate`,_g=`CarrierGatewayId`,Ywe=`CurrentGeneration`,vg=`CarrierIp`,Xwe=`CurrentInstanceBootMode`,Zwe=`CreateInternetGateway`,Qwe=`CreateInternetGatewayRequest`,$we=`CreateInternetGatewayResult`,eTe=`CreateImageRequest`,tTe=`CreateImageResult`,yg=`CidrIp`,bg=`CidrIpv6`,xg=`CidrIpv4`,nTe=`CoreInfo`,rTe=`CreateImage`,iTe=`CreateKeyPair`,aTe=`CreateKeyPairRequest`,oTe=`CreateLaunchTemplate`,sTe=`CreateLaunchTemplateRequest`,cTe=`CreateLaunchTemplateResult`,lTe=`CreateLaunchTemplateVersion`,uTe=`CreateLaunchTemplateVersionRequest`,dTe=`CreateLaunchTemplateVersionResult`,Sg=`CpuManufacturers`,fTe=`CpuManufacturerSet`,pTe=`CpuManufacturer`,Cg=`CoreNetworkArn`,mTe=`CreateNatGateway`,hTe=`CreateNatGatewayRequest`,gTe=`CreateNatGatewayResult`,wg=`CpuOptions`,Tg=`CustomerOwnedIp`,Eg=`CustomerOwnedIpv4Pool`,_Te=`CpuOptionsRequest`,vTe=`CpuPerformanceFactor`,yTe=`CpuPerformanceFactorRequest`,bTe=`CreatePlacementGroup`,xTe=`CreatePlacementGroupRequest`,STe=`CreatePlacementGroupResult`,Dg=`CapacityReservationId`,Og=`CapacityReservationPreference`,CTe=`CreateRouteRequest`,kg=`CapacityReservationResourceGroupArn`,wTe=`CreateRouteResult`,TTe=`CapacityReservationSpecificationResponse`,Ag=`CapacityReservationSpecification`,jg=`CapacityReservationTarget`,ETe=`CapacityReservationTargetResponse`,DTe=`CreateRouteTableRequest`,OTe=`CreateRouteTableResult`,kTe=`CreateRouteTable`,Mg=`CreateRoute`,Ng=`CreateSecurityGroup`,Pg=`CreateSecurityGroupRequest`,Fg=`CreateSecurityGroupResult`,Ig=`CopySnapshotRequest`,Lg=`CopySnapshotRequestPSU`,Rg=`CopySnapshotResult`,zg=`CreateSnapshotRequest`,Bg=`CreateSubnetRequest`,Vg=`CreateSubnetResult`,Hg=`CreditSpecificationRequest`,Ug=`CopySnapshot`,Wg=`CreditSpecification`,Gg=`CreateSnapshot`,Kg=`CreateSubnet`,qg=`CurrentState`,Jg=`ClientToken`,Yg=`ConnectionTrackingConfiguration`,Xg=`ConnectionTrackingSpecification`,Zg=`ConnectionTrackingSpecificationRequest`,Qg=`ConnectionTrackingSpecificationResponse`,$g=`CompletionTime`,e_=`ConnectivityType`,t_=`CreateTime`,n_=`CreateVolumeRequest`,r_=`CreateVpcRequest`,i_=`CreateVpcResult`,a_=`CreateVolume`,o_=`CreateVpc`,s_=`Code`,c_=`Configured`,l_=`Count`,u_=`Cpu`,d_=`DescribeAddressesRequest`,f_=`DescribeAddressesResult`,p_=`DisassociateAddressRequest`,m_=`DeleteAssociatedSnapshots`,h_=`DisableApiStop`,g_=`DisableApiTermination`,__=`DestinationAvailabilityZone`,v_=`DescribeAvailabilityZonesRequest`,y_=`DescribeAvailabilityZonesResult`,b_=`DescribeAvailabilityZones`,x_=`DescribeAddresses`,S_=`DisassociateAddress`,C_=`DestinationCidrBlock`,w_=`DefaultConnectionTrackingConfiguration`,T_=`DefaultCores`,E_=`DataEncryptionKeyId`,D_=`DefaultEnaQueueCountPerInterface`,O_=`DefaultForAz`,k_=`DedicatedHostsSupported`,A_=`DeviceIndex`,j_=`DestinationIpv6CidrBlock`,M_=`DeleteInternetGateway`,N_=`DeleteInternetGatewayRequest`,P_=`DescribeInternetGatewaysRequest`,F_=`DescribeInternetGatewaysResult`,I_=`DetachInternetGatewayRequest`,L_=`DescribeInternetGateways`,R_=`DetachInternetGateway`,z_=`DisassociateIamInstanceProfile`,B_=`DescribeIamInstanceProfileAssociations`,V_=`DescribeIamInstanceProfileAssociationsRequest`,H_=`DescribeIamInstanceProfileAssociationsResult`,U_=`DisassociateIamInstanceProfileRequest`,W_=`DisassociateIamInstanceProfileResult`,G_=`DiskInfoList`,K_=`DeregisterImageRequest`,q_=`DeregisterImageResult`,J_=`DescribeImagesRequest`,Y_=`DescribeImagesResult`,X_=`DescribeInstancesRequest`,Z_=`DescribeInstancesResult`,Q_=`DescribeInstanceTypesRequest`,$_=`DescribeInstanceTypesResult`,ev=`DescribeInstanceTypes`,tv=`DeregisterImage`,nv=`DescribeImages`,rv=`DescribeInstances`,iv=`DiskInfo`,av=`DeleteKeyPair`,ov=`DeleteKeyPairRequest`,sv=`DeleteKeyPairResult`,cv=`DescribeKeyPairsRequest`,lv=`DescribeKeyPairsResult`,uv=`DescribeKeyPairs`,dv=`DisableLniAtDeviceIndex`,fv=`DeleteLaunchTemplate`,pv=`DeleteLaunchTemplateRequest`,mv=`DeleteLaunchTemplateResult`,hv=`DescribeLaunchTemplatesRequest`,gv=`DescribeLaunchTemplatesResult`,_v=`DeleteLaunchTemplateVersions`,vv=`DeleteLaunchTemplateVersionsRequest`,yv=`DeleteLaunchTemplateVersionsResponseErrorItem`,bv=`DeleteLaunchTemplateVersionsResponseErrorSet`,xv=`DeleteLaunchTemplateVersionsResponseSuccessItem`,Sv=`DeleteLaunchTemplateVersionsResponseSuccessSet`,Cv=`DeleteLaunchTemplateVersionsResult`,wv=`DescribeLaunchTemplateVersionsRequest`,Tv=`DescribeLaunchTemplateVersionsResult`,Ev=`DescribeLaunchTemplateVersions`,Dv=`DescribeLaunchTemplates`,Ov=`DeviceName`,kv=`DefaultNetworkCardIndex`,Av=`DeleteNatGateway`,jv=`DeleteNatGatewayRequest`,Mv=`DeleteNatGatewayResult`,Nv=`DescribeNatGatewaysRequest`,Pv=`DescribeNatGatewaysResult`,Fv=`DescribeNatGateways`,Iv=`DestinationOutpostArn`,Lv=`DhcpOptionsId`,Rv=`DeleteOnTermination`,zv=`DeletePlacementGroup`,Bv=`DeletePlacementGroupRequest`,Vv=`DescribePlacementGroupsRequest`,Hv=`DescribePlacementGroupsResult`,Uv=`DescribePlacementGroups`,Wv=`DestinationPrefixListId`,Gv=`DeregistrationProtection`,g=`DryRun`,Kv=`DeleteRouteRequest`,qv=`DescribeRegionsRequest`,Jv=`DescribeRegionsResult`,Yv=`DeleteRouteTable`,Xv=`DeleteRouteTableRequest`,Zv=`DescribeRouteTablesRequest`,Qv=`DescribeRouteTablesResult`,$v=`DisassociateRouteTableRequest`,ey=`DescribeRouteTables`,ty=`DisassociateRouteTable`,ny=`DestinationRegion`,ry=`DeleteRoute`,iy=`DescribeRegions`,ay=`DeleteSecurityGroup`,oy=`DeleteSecurityGroupRequest`,sy=`DeleteSecurityGroupResult`,cy=`DescribeSecurityGroupsRequest`,ly=`DescribeSecurityGroupsResult`,uy=`DescribeSecurityGroups`,dy=`DeleteSnapshotRequest`,fy=`DeleteSnapshotReturnCode`,py=`DeleteSnapshotResultSet`,my=`DeleteSubnetRequest`,hy=`DeleteSnapshotResults`,gy=`DescribeSnapshotsRequest`,_y=`DescribeSnapshotsResult`,vy=`DescribeSubnetsRequest`,yy=`DescribeSubnetsResult`,by=`DeleteSnapshot`,xy=`DeleteSubnet`,Sy=`DescribeSnapshots`,Cy=`DescribeSubnets`,wy=`DefaultTcpEstablishedTimeout`,Ty=`DefaultThreadsPerCore`,Ey=`DeprecationTime`,Dy=`DeleteTime`,Oy=`DefaultUdpStreamTimeout`,ky=`DefaultUdpTimeout`,Ay=`DefaultVCpus`,jy=`DefaultVersionNumber`,My=`DeleteVolumeRequest`,Ny=`DeleteVpcRequest`,Py=`DescribeVolumesRequest`,Fy=`DescribeVolumesResult`,Iy=`DescribeVpcsRequest`,Ly=`DescribeVpcsResult`,Ry=`DetachVolumeRequest`,zy=`DefaultVersion`,By=`DeleteVolume`,Vy=`DeleteVpc`,Hy=`DescribeVolumes`,Uy=`DescribeVpcs`,Wy=`DetachVolume`,Gy=`Description`,Ky=`Device`,qy=`Disks`,Jy=`Domain`,Yy=`EbsBlockDevice`,Xy=`ExecutableByStringList`,Zy=`ExecutableBy`,Qy=`EbsCardIndex`,$y=`EbsCardInfoList`,eb=`EbsCardInfo`,tb=`EbsCards`,nb=`EncryptionControl`,rb=`EnableDns64`,ib=`ElasticFileSystem`,ab=`ElasticFileSystemExclusion`,ob=`ElasticGpuAssociation`,sb=`ElasticGpuAssociationId`,cb=`ElasticGpuAssociationList`,lb=`ElasticGpuAssociationState`,ub=`ElasticGpuAssociationTime`,db=`ElasticGpuAssociations`,fb=`ElasticGpuId`,pb=`ElasticGpuSpecificationList`,mb=`ElasticGpuSpecificationResponse`,hb=`ElasticGpuSpecificationResponseList`,gb=`ElasticGpuSpecification`,_b=`ElasticGpuSpecifications`,vb=`ElasticInferenceAccelerator`,yb=`ElasticInferenceAcceleratorAssociation`,bb=`ElasticInferenceAcceleratorAssociationId`,xb=`ElasticInferenceAcceleratorAssociationList`,Sb=`ElasticInferenceAcceleratorAssociationState`,Cb=`ElasticInferenceAcceleratorAssociationTime`,wb=`ElasticInferenceAcceleratorArn`,Tb=`ElasticInferenceAcceleratorAssociations`,Eb=`ElasticInferenceAccelerators`,Db=`EbsInstanceBlockDevice`,Ob=`EbsInstanceBlockDeviceSpecification`,kb=`EncryptionInTransitSupported`,Ab=`ExcludedInstanceTypeSet`,jb=`ExcludedInstanceTypes`,Mb=`ExcludedInstanceType`,Nb=`EbsInfo`,Pb=`EfaInfo`,Fb=`EnableLniAtDeviceIndex`,Ib=`EbsOptimized`,Lb=`EbsOptimizedInfo`,Rb=`EgressOnlyInternetGateway`,zb=`EgressOnlyInternetGatewayExclusion`,Bb=`EgressOnlyInternetGatewayId`,Vb=`EnclaveOptionsRequest`,Hb=`EbsOptimizedSupport`,Ub=`EnclaveOptions`,Wb=`EnablePrimaryIpv6`,Gb=`EnaQueueCount`,Kb=`EnableResourceNameDnsAAAARecord`,qb=`EnableResourceNameDnsAAAARecordOnLaunch`,Jb=`EnableResourceNameDnsARecord`,Yb=`EnableResourceNameDnsARecordOnLaunch`,Xb=`EnaSrdEnabled`,Zb=`EnaSrdSpecification`,Qb=`EnaSrdSpecificationRequest`,$b=`EnaSrdSupported`,ex=`EnaSrdUdpEnabled`,tx=`EnaSrdUdpSpecification`,nx=`EnaSrdUdpSpecificationRequest`,rx=`EfaSupported`,ix=`EncryptionSupport`,ax=`EnaSupport`,ox=`ErrorSet`,sx=`EndTime`,cx=`ExecutableUsers`,lx=`Ebs`,ux=`Enabled`,dx=`Encrypted`,fx=`Endpoint`,px=`Errors`,mx=`Force`,hx=`FailureCode`,gx=`FpgaDeviceInfo`,_x=`FpgaDeviceInfoList`,vx=`FpgaDeviceMemoryInfo`,yx=`FlexibleEnaQueuesSupport`,bx=`FpgaInfo`,xx=`FilterList`,Sx=`FailureMessage`,Cx=`FromPort`,wx=`FastRestored`,Tx=`FullSnapshotSizeInBytes`,Ex=`FreeTierEligible`,Dx=`Filters`,Ox=`Filter`,kx=`Fpgas`,Ax=`Groups`,jx=`GroupArn`,Mx=`GetConsoleOutput`,Nx=`GetConsoleOutputRequest`,Px=`GetConsoleOutputResult`,Fx=`GroupDescription`,Ix=`GpuDeviceInfo`,Lx=`GpuDeviceInfoList`,Rx=`GpuDeviceMemoryInfo`,zx=`GatewayId`,Bx=`GroupIdentifierList`,Vx=`GroupIdStringList`,Hx=`GpuInfo`,Ux=`GroupId`,Wx=`GroupIds`,Gx=`GroupIdentifier`,Kx=`GroupLongName`,qx=`GroupName`,Jx=`GroupNameStringList`,Yx=`GroupNames`,Xx=`GroupOwnerId`,Zx=`GpuPartitionSize`,Qx=`Geography`,$x=`Gpus`,eS=`HiddenByDefault`,tS=`HttpEndpoint`,nS=`HostId`,rS=`HibernationOptions`,iS=`HibernationOptionsRequest`,aS=`HttpProtocolIpv6`,oS=`HttpPutResponseHopLimit`,sS=`HostResourceGroupArn`,cS=`HibernationSupported`,lS=`HttpTokens`,uS=`HostnameType`,dS=`Hibernate`,fS=`Hypervisor`,pS=`Id`,mS=`Ipv6Addresses`,hS=`Ipv6AddressAttribute`,gS=`Ipv6AddressCount`,_S=`InstanceAttachmentEnaSrdSpecification`,vS=`InstanceAttachmentEnaSrdUdpSpecification`,yS=`InferenceAcceleratorInfo`,bS=`Ipv4AddressesPerInterface`,xS=`Ipv6AddressesPerInterface`,SS=`Ipv4AddressesPerSecondaryInterface`,CS=`ImageAllowed`,wS=`IpAddress`,TS=`Ipv6Address`,ES=`InstanceBlockDeviceMapping`,DS=`InstanceBlockDeviceMappingList`,OS=`InstanceBlockDeviceMappingSpecification`,kS=`InstanceBlockDeviceMappingSpecificationList`,AS=`Ipv6CidrBlock`,jS=`Ipv6CidrBlockAssociationSet`,MS=`Ipv6CidrBlockNetworkBorderGroup`,NS=`Ipv6CidrBlockState`,PS=`IncludeDeprecated`,FS=`InferenceDeviceInfo`,IS=`InferenceDeviceInfoList`,LS=`InferenceDeviceMemoryInfo`,RS=`IncludeDisabled`,zS=`IsDefault`,BS=`IsEgress`,VS=`InstanceFamily`,HS=`InternetGateway`,US=`InternetGatewayAttachment`,WS=`InternetGatewayAttachmentList`,GS=`InternetGatewayBlockMode`,KS=`InternetGatewayExclusion`,qS=`InternetGatewayId`,JS=`InternetGatewayIdList`,YS=`InternetGatewayIds`,XS=`InternetGatewayList`,ZS=`InstanceGenerationSet`,QS=`InternetGateways`,$S=`InstanceGenerations`,eC=`InstanceGeneration`,tC=`InstanceId`,nC=`InstanceIpv6Address`,rC=`InstanceIpv6AddressList`,iC=`InstanceIpv6AddressListRequest`,aC=`InstanceIpv6AddressRequest`,oC=`InstanceInterruptionBehavior`,sC=`IamInstanceProfile`,cC=`IamInstanceProfileAssociation`,lC=`IamInstanceProfileAssociationSet`,uC=`IamInstanceProfileAssociations`,dC=`Ipv6IpamPoolId`,fC=`Ipv4IpamPoolId`,pC=`InstanceIpv4PrefixList`,mC=`InstanceIpv6PrefixList`,hC=`IamInstanceProfileSpecification`,gC=`InstanceIpv4Prefix`,_C=`InstanceIpv6Prefix`,vC=`InstanceInitiatedShutdownBehavior`,yC=`ImageIdStringList`,bC=`InstanceIdStringList`,xC=`ImageId`,SC=`ImageIds`,CC=`InstanceIds`,wC=`ImportKeyPair`,TC=`ImportKeyPairRequest`,EC=`ImportKeyPairResult`,DC=`ImageLocation`,OC=`ImageList`,kC=`InstanceLifecycle`,AC=`InstanceList`,jC=`IpList`,MC=`InstanceMaintenanceOptions`,NC=`InstanceMaintenanceOptionsRequest`,PC=`InstanceMarketOptionsRequest`,FC=`InstanceMetadataOptionsRequest`,IC=`InstanceMetadataOptionsResponse`,LC=`InstanceMarketOptions`,RC=`IncludeManagedResources`,zC=`InstanceMetadataTags`,BC=`Ipv6Native`,VC=`InstanceNetworkInterface`,HC=`InstanceNetworkInterfaceAssociation`,UC=`InstanceNetworkInterfaceAttachment`,WC=`InstanceNetworkInterfaceList`,GC=`InstanceNetworkInterfaceSpecification`,KC=`InstanceNetworkInterfaceSpecificationList`,qC=`Ipv6NetmaskLength`,JC=`Ipv4NetmaskLength`,YC=`InstanceNetworkPerformanceOptions`,XC=`InstanceNetworkPerformanceOptionsRequest`,ZC=`ImageOwnerAlias`,QC=`IpOwnerId`,$C=`InstanceOwnerId`,ew=`InstanceOwningService`,tw=`Ipv6PrefixCount`,nw=`Ipv4PrefixCount`,rw=`IpPermissionsEgress`,iw=`IpamPoolId`,aw=`InstancePrivateIpAddress`,ow=`InstancePrivateIpAddressList`,sw=`IsPrimaryIpv6`,cw=`IncludePublicKey`,lw=`Ipv4PrefixListResponse`,uw=`Ipv6PrefixListResponse`,dw=`IpPermissionList`,fw=`Ipv4PrefixList`,pw=`Ipv6PrefixList`,mw=`Ipv4PrefixSpecificationRequest`,hw=`Ipv4PrefixSpecificationResponse`,gw=`Ipv6PrefixSpecificationRequest`,_w=`Ipv6PrefixSpecificationResponse`,vw=`Ipv6Prefixes`,yw=`IpPermissions`,bw=`IpPermission`,xw=`IpProtocol`,Sw=`Ipv6Prefix`,Cw=`Ipv6Pool`,ww=`Ipv4Prefixes`,Tw=`Ipv4Prefix`,Ew=`IsPrimary`,Dw=`IpRangeList`,Ow=`Ipv6RangeList`,kw=`InstanceRequirementsRequest`,Aw=`InstanceRequirements`,jw=`IpRanges`,Mw=`IpRange`,Nw=`Ipv6Ranges`,Pw=`Ipv6Range`,Fw=`InstanceStateChange`,Iw=`InstanceStateChangeList`,Lw=`InstanceSecondaryInterfaceAttachment`,Rw=`InstanceSecondaryInterfaceList`,zw=`InstanceSecondaryInterfacePrivateIpAddress`,Bw=`InstanceSecondaryInterfacePrivateIpAddressList`,Vw=`InstanceSecondaryInterfacePrivateIpAddressListRequest`,Hw=`InstanceSecondaryInterfacePrivateIpAddressRequest`,Uw=`InstanceSecondaryInterfaceSpecification`,Ww=`InstanceSecondaryInterfaceSpecificationListRequest`,Gw=`InstanceSecondaryInterfaceSpecificationRequest`,Kw=`InstanceSecondaryInterface`,qw=`InstanceStorageInfo`,Jw=`InstanceStorageSupported`,Yw=`ImdsSupport`,Xw=`InstanceState`,Zw=`IpSource`,Qw=`Ipv6Supported`,$w=`InstanceType`,eT=`InstanceTypeInfoList`,tT=`InstanceTypeInfo`,nT=`InstanceTypeItem`,rT=`InstanceTypeSpecification`,iT=`ImageType`,aT=`InstanceTenancy`,oT=`InstanceTypes`,sT=`InterfaceType`,cT=`InterfaceTypes`,lT=`ImageUefiDataRequest`,uT=`IncludeUnsupportedInRegion`,dT=`ImageWatermarks`,fT=`ImageWatermarkList`,pT=`ImageWatermark`,mT=`Images`,hT=`Image`,gT=`Instance`,_T=`Instances`,vT=`Iops`,yT=`Key`,bT=`KeyFormat`,xT=`KeyFingerprint`,ST=`KernelId`,CT=`KmsKeyId`,wT=`KeyMaterial`,TT=`KeyName`,ET=`KeyNameStringList`,DT=`KeyNames`,OT=`KeyPairs`,kT=`KeyPairId`,AT=`KeyPairIdStringList`,jT=`KeyPairIds`,MT=`KeyPairInfo`,NT=`KeyPairList`,PT=`KeyPair`,FT=`KeyType`,IT=`Kernel`,LT=`Lambda`,RT=`LicenseConfigurationArn`,zT=`LicenseConfigurationRequest`,BT=`LicenseConfiguration`,VT=`LambdaExclusion`,HT=`LogicalGpuCount`,UT=`LocalGatewayId`,WT=`LinkedGroupId`,GT=`LicenseList`,KT=`LastLaunchedTime`,qT=`LicenseSpecifications`,JT=`LicenseSpecificationListRequest`,YT=`LocalStorageTypes`,XT=`LocalStorageTypeSet`,ZT=`LocalStorageType`,QT=`LicenseSpecification`,$T=`LocalStorage`,eE=`LaunchTemplate`,tE=`LaunchTemplateBlockDeviceMapping`,nE=`LaunchTemplateBlockDeviceMappingList`,rE=`LaunchTemplateBlockDeviceMappingRequest`,iE=`LaunchTemplateBlockDeviceMappingRequestList`,aE=`LaunchTemplateCpuOptions`,oE=`LaunchTemplateCpuOptionsRequest`,sE=`LaunchTemplateCapacityReservationSpecificationRequest`,cE=`LaunchTemplateCapacityReservationSpecificationResponse`,lE=`LaunchTemplateData`,uE=`LaunchTemplateEbsBlockDevice`,dE=`LaunchTemplateEbsBlockDeviceRequest`,fE=`LaunchTemplateElasticInferenceAccelerator`,pE=`LaunchTemplateElasticInferenceAcceleratorList`,mE=`LaunchTemplateElasticInferenceAcceleratorResponse`,hE=`LaunchTemplateElasticInferenceAcceleratorResponseList`,gE=`LaunchTemplateEnclaveOptions`,_E=`LaunchTemplateEnclaveOptionsRequest`,vE=`LaunchTemplateEnaSrdSpecification`,yE=`LaunchTemplateEnaSrdUdpSpecification`,bE=`LaunchTemplateHibernationOptions`,xE=`LaunchTemplateHibernationOptionsRequest`,SE=`LaunchTemplateId`,CE=`LaunchTemplateIamInstanceProfileSpecification`,wE=`LaunchTemplateIamInstanceProfileSpecificationRequest`,TE=`LaunchTemplateInstanceMaintenanceOptions`,EE=`LaunchTemplateInstanceMaintenanceOptionsRequest`,DE=`LaunchTemplateInstanceMarketOptionsRequest`,OE=`LaunchTemplateInstanceMetadataOptionsRequest`,kE=`LaunchTemplateInstanceMarketOptions`,AE=`LaunchTemplateInstanceMetadataOptions`,jE=`LaunchTemplateInstanceNetworkInterfaceSpecification`,ME=`LaunchTemplateInstanceNetworkInterfaceSpecificationList`,NE=`LaunchTemplateInstanceNetworkInterfaceSpecificationRequest`,PE=`LaunchTemplateInstanceNetworkInterfaceSpecificationRequestList`,FE=`LaunchTemplateInstanceSecondaryInterfaceSpecification`,IE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationList`,LE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationRequest`,RE=`LaunchTemplateInstanceSecondaryInterfaceSpecificationRequestList`,zE=`LaunchTemplateIdStringList`,BE=`LaunchTemplateIds`,VE=`LaunchTemplateLicenseConfiguration`,HE=`LaunchTemplateLicenseConfigurationRequest`,UE=`LaunchTemplateLicenseList`,WE=`LaunchTemplateLicenseSpecificationListRequest`,GE=`LaunchTemplatesMonitoring`,KE=`LaunchTemplatesMonitoringRequest`,qE=`LaunchTemplateName`,JE=`LaunchTemplateNetworkPerformanceOptions`,YE=`LaunchTemplateNetworkPerformanceOptionsRequest`,XE=`LaunchTemplateNameStringList`,ZE=`LaunchTemplateNames`,QE=`LaunchTemplatePlacement`,$E=`LaunchTemplatePrivateDnsNameOptions`,eD=`LaunchTemplatePrivateDnsNameOptionsRequest`,tD=`LaunchTemplatePlacementRequest`,nD=`LaunchTemplateSpecification`,rD=`LaunchTemplateSpotMarketOptions`,iD=`LaunchTemplateSpotMarketOptionsRequest`,aD=`LaunchTemplateSet`,oD=`LaunchTemplateTagSpecification`,sD=`LaunchTemplateTagSpecificationList`,cD=`LaunchTemplateTagSpecificationRequest`,lD=`LaunchTemplateTagSpecificationRequestList`,uD=`LaunchTemplateVersion`,dD=`LaunchTemplateVersionSet`,fD=`LaunchTemplateVersions`,pD=`LaunchTemplates`,mD=`LaunchTime`,hD=`LatestVersionNumber`,gD=`Latest`,_D=`Licenses`,vD=`Location`,yD=`Min`,bD=`MultiAttachEnabled`,xD=`MediaAcceleratorInfo`,SD=`MacAddress`,CD=`MaximumBandwidthInMbps`,wD=`MapCustomerOwnedIpOnLaunch`,TD=`MaxCount`,ED=`MinCount`,DD=`MediaDeviceInfo`,OD=`MediaDeviceInfoList`,kD=`MediaDeviceMemoryInfo`,AD=`MaximumEbsAttachments`,jD=`MaximumEbsCards`,MD=`MaximumEfaInterfaces`,ND=`MaximumEnaQueueCount`,PD=`MaximumEnaQueueCountPerInterface`,FD=`MemoryGiBPerVCpu`,ID=`MemoryGiBPerVCpuRequest`,LD=`MaximumIops`,RD=`ModifyInstanceAttributeRequest`,zD=`ModifyInstanceAttributeValue`,BD=`ModifyInstanceAttribute`,VD=`MemoryInfo`,HD=`ModifyLaunchTemplate`,UD=`ModifyLaunchTemplateRequest`,WD=`ModifyLaunchTemplateResult`,GD=`MemoryMiB`,KD=`MemoryMiBRequest`,qD=`MaximumNetworkCards`,JD=`MaximumNetworkInterfaces`,YD=`MetadataOptions`,XD=`MaintenanceOptions`,ZD=`MapPublicIpOnLaunch`,QD=`MaxPrice`,$D=`MaxResults`,eO=`ModifySubnetAttributeRequest`,tO=`ModifySubnetAttribute`,nO=`MaximumSecondaryNetworkInterfaces`,rO=`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`,iO=`ModificationState`,aO=`MaximumThroughputInMBps`,oO=`MarketType`,sO=`MinVersion`,cO=`ModifyVolumeRequest`,lO=`ModifyVolumeResult`,uO=`MaxVersion`,dO=`ModifyVolume`,fO=`Max`,pO=`Main`,mO=`Manufacturer`,hO=`Managed`,gO=`Message`,_O=`Messages`,vO=`Mode`,yO=`Monitoring`,bO=`Name`,xO=`NetworkBorderGroup`,SO=`NetworkBandwidthGbpsRequest`,CO=`NetworkBandwidthGbps`,wO=`NetworkCards`,TO=`NetworkCardIndex`,EO=`NetworkCardInfoList`,DO=`NetworkCardInterfaceTypeList`,OO=`NetworkCardInfo`,kO=`NoDevice`,AO=`NeuronDeviceCoreInfo`,jO=`NeuronDeviceInfo`,MO=`NeuronDeviceInfoList`,NO=`NeuronDeviceMemoryInfo`,PO=`NeuronDevices`,FO=`NitroEnclavesSupport`,IO=`NatGateway`,LO=`NatGatewayAddresses`,RO=`NatGatewayAttachedAppliance`,zO=`NatGatewayAttachedApplianceList`,BO=`NatGatewayAddressList`,VO=`NatGatewayAddress`,HO=`NatGatewayExclusion`,UO=`NatGatewayId`,WO=`NatGatewayIdStringList`,GO=`NatGatewayIds`,KO=`NatGatewayList`,qO=`NatGateways`,JO=`NetworkInterfaceCount`,YO=`NetworkInterfaceCountRequest`,XO=`NetworkInterfaceId`,ZO=`NetworkInterfaceOwnerId`,QO=`NetworkInterface`,$O=`NetworkInterfaces`,ek=`NetworkInfo`,tk=`NeuronInfo`,nk=`NetworkPerformanceOptions`,rk=`NetworkPerformance`,ik=`NoReboot`,ak=`NvmeSupport`,ok=`NitroTpmInfo`,sk=`NitroTpmSupport`,ck=`NitroTpmSupportedVersionsList`,lk=`NextToken`,uk=`NestedVirtualization`,dk=`Origin`,fk=`OutpostArn`,pk=`OwnerAlias`,mk=`OnDemandMaxPricePercentageOverLowestPrice`,hk=`OwnerId`,gk=`OptInStatus`,_k=`OriginalIops`,vk=`OwnerIds`,yk=`OriginalMultiAttachEnabled`,bk=`OdbNetworkArn`,xk=`OperatorRequest`,Sk=`OperatorResponse`,Ck=`OwnerStringList`,wk=`OriginalSize`,Tk=`OriginalThroughput`,Ek=`OriginalVolumeType`,Dk=`Operator`,Ok=`Output`,kk=`Owners`,Ak=`Owner`,jk=`Principal`,Mk=`ProvisionedBandwidth`,Nk=`PeakBandwidthInGbps`,Pk=`ProductCodeId`,Fk=`ProductCodeList`,Ik=`ProductCodeType`,Lk=`PartitionCount`,Rk=`ProductCode`,zk=`ProductCodes`,Bk=`PrivateDnsHostnameTypeOnLaunch`,Vk=`PrivateDnsName`,Hk=`PrivateDnsNameOptions`,Uk=`PrivateDnsNameOptionsOnLaunch`,Wk=`PrivateDnsNameOptionsRequest`,Gk=`PrivateDnsNameOptionsResponse`,Kk=`PublicDnsName`,qk=`PlatformDetails`,Jk=`PerformanceFactorReference`,Yk=`PerformanceFactorReferenceRequest`,Xk=`PerformanceFactorReferenceSet`,Zk=`PerformanceFactorReferenceSetRequest`,Qk=`PlacementGroup`,$k=`ParentGroupId`,eA=`PlacementGroupIdStringList`,tA=`PlacementGroupInfo`,nA=`PlacementGroupList`,rA=`PlacementGroupStrategyList`,iA=`PlacementGroups`,aA=`PublicIp`,oA=`PrivateIpAddressCount`,sA=`PrivateIpAddressSpecification`,cA=`PrivateIpAddressSpecificationList`,lA=`PrivateIpAddress`,uA=`PrivateIpAddresses`,dA=`PublicIpAddress`,fA=`PublicIpv4Pool`,pA=`PublicIpStringList`,mA=`PrimaryIpv6`,hA=`PrivateIp`,gA=`ProcessorInfo`,_A=`PublicIps`,vA=`PublicKey`,yA=`PublicKeyMaterial`,bA=`PrefixListId`,xA=`PrefixListIdList`,SA=`PrefixListIds`,CA=`PartitionNumber`,wA=`PublicSsmParameterName`,TA=`PeeringStatus`,EA=`PhcSupport`,DA=`PreviousState`,OA=`ProvisionTime`,kA=`PresignedUrl`,AA=`PropagatingVgw`,jA=`PropagatingVgwList`,MA=`PropagatingVgws`,NA=`ParentZoneId`,PA=`ParentZoneName`,FA=`Platform`,IA=`Placement`,LA=`Primary`,RA=`Progress`,zA=`Provisioned`,BA=`Public`,VA=`Return`,HA=`ReleaseAddressRequest`,UA=`ReleaseAddress`,WA=`ResolveAlias`,GA=`RestorableByUserIds`,KA=`RestorableBy`,qA=`ReturnCode`,JA=`RamDiskId`,YA=`RootDeviceName`,XA=`RootDeviceType`,ZA=`RootDeviceTypeList`,QA=`RequireEncryptionInTransit`,$A=`RestoreExpiryTime`,ej=`ResponseError`,tj=`ResourceExclusions`,nj=`RegionGeography`,rj=`ReferencedGroupId`,ij=`ReferencedGroupInfo`,aj=`RegionGeographyList`,oj=`RequireHibernateSupport`,sj=`RunInstancesMonitoringEnabled`,cj=`RebootInstancesRequest`,lj=`RegisterImageRequest`,uj=`RegisterImageResult`,dj=`RunInstancesRequest`,fj=`RunInstancesUserData`,pj=`RamdiskId`,mj=`ReservationId`,hj=`RebootInstances`,gj=`RegisterImage`,_j=`RequesterId`,vj=`RunInstances`,yj=`RegionList`,bj=`RequestLaunchTemplateData`,xj=`ResponseLaunchTemplateData`,Sj=`ReservationList`,Cj=`RouteList`,wj=`RebootMigrationSupport`,Tj=`RebootMigration`,Ej=`RegionName`,Dj=`RegionNameStringList`,Oj=`RegionNames`,kj=`ReferencedSecurityGroup`,Aj=`RevokeSecurityGroupEgress`,jj=`RevokeSecurityGroupEgressRequest`,Mj=`RevokeSecurityGroupEgressResult`,Nj=`RevokeSecurityGroupIngressRequest`,Pj=`RevokeSecurityGroupIngressResult`,Fj=`RevokeSecurityGroupIngress`,Ij=`RevokedSecurityGroupRule`,Lj=`RevokedSecurityGroupRuleList`,Rj=`RevokedSecurityGroupRules`,zj=`RouteTableAssociation`,Bj=`RouteTableAssociationId`,Vj=`RouteTableAssociationList`,Hj=`RouteTableAssociationState`,Uj=`RouteTableId`,Wj=`RouteTableIdStringList`,Gj=`RouteTableIds`,Kj=`RouteTableList`,qj=`ResourceType`,Jj=`RequestTime`,Yj=`RouteTable`,Xj=`RouteTables`,Zj=`Ramdisk`,Qj=`References`,$j=`Reference`,eM=`Regions`,tM=`Region`,nM=`Requested`,rM=`Reservations`,iM=`Reservation`,aM=`Route`,oM=`Routes`,sM=`SecondaryAllocationIds`,cM=`SecondaryAllocationId`,lM=`SupportedAdditionalProcessorFeatureList`,uM=`SubnetArn`,dM=`SupportedArchitectures`,fM=`SecureBlob`,pM=`SecureBlobAttributeValue`,mM=`SupportedBootModes`,hM=`SubnetCidrBlockState`,gM=`SustainedClockSpeedInGhz`,_M=`SourceDestCheck`,vM=`SuccessfullyDeletedLaunchTemplateVersions`,yM=`SetDefaultVersion`,bM=`SpreadDomain`,xM=`SupportedFeatures`,SM=`SubGeography`,CM=`SecurityGroupArn`,wM=`SecurityGroupId`,TM=`SecurityGroupIdStringList`,EM=`SecurityGroupIds`,DM=`SecurityGroupList`,OM=`SecurityGroupRules`,kM=`SecurityGroupRuleArn`,AM=`SecurityGroupRuleIds`,jM=`SecurityGroupRuleIdList`,MM=`SecurityGroupRuleId`,NM=`SecurityGroupRuleList`,PM=`SecurityGroupRule`,FM=`SecurityGroupStringList`,IM=`SecurityGroups`,LM=`SecurityGroup`,RM=`SubnetIds`,zM=`SubnetIpv6CidrBlockAssociation`,BM=`SubnetIpv6CidrBlockAssociationSet`,VM=`SourceImageCreationTime`,HM=`SizeInGB`,UM=`SourceImageId`,WM=`SecondaryInterfaceId`,GM=`SourceInstanceId`,KM=`SizeInMiB`,qM=`SecondaryInterfacePrivateIpAddressSpecification`,JM=`SecondaryInterfacePrivateIpAddressSpecificationList`,YM=`SecondaryInterfacePrivateIpAddressSpecificationListRequest`,XM=`SecondaryInterfacePrivateIpAddressSpecificationRequest`,ZM=`SpotInstanceRequestId`,QM=`SourceImageRegion`,$M=`StartInstancesRequest`,eN=`StartInstancesResult`,tN=`StopInstancesRequest`,nN=`StopInstancesResult`,rN=`SupportedInRegion`,iN=`SnapshotIdStringList`,aN=`SubnetIdStringList`,oN=`SupportedInstanceTypes`,sN=`SupportedInstanceTypeSet`,cN=`SpotInstanceType`,lN=`SecondaryInterfaces`,uN=`SecondaryInterface`,dN=`SnapshotId`,fN=`SnapshotIds`,pN=`StartingInstances`,mN=`StartInstances`,hN=`StoppingInstances`,gN=`StopInstances`,_N=`SubnetId`,vN=`SnapshotLocation`,yN=`SnapshotList`,bN=`SpreadLevel`,xN=`SubnetList`,SN=`ServiceManaged`,CN=`SpotMarketOptions`,wN=`SpotMaxPricePercentageOverLowestPrice`,TN=`StatusMessage`,EN=`StateMessage`,DN=`SecondaryNetworkId`,ON=`SriovNetSupport`,kN=`SecondaryNetworkSupported`,AN=`SpotOptions`,jN=`SkipOsShutdown`,MN=`SecondaryPrivateIpAddresses`,NN=`SecondaryPrivateIpAddressCount`,PN=`SecondaryPrivateIpAddress`,FN=`SupportedRootDeviceTypes`,IN=`SourceRegion`,LN=`StateReason`,RN=`SourceSecurityGroupName`,zN=`SourceSecurityGroupOwnerId`,BN=`SourceSnapshotId`,VN=`SecondarySubnetId`,HN=`SupportedStrategies`,UN=`StateTransitionReason`,WN=`SseType`,GN=`StartTime`,KN=`StorageTier`,qN=`SupportedUsageClasses`,JN=`SensitiveUserData`,YN=`SourceVersion`,XN=`SourceVolumeId`,ZN=`SupportedVirtualizationTypes`,QN=`SupportedVersions`,$N=`Size`,eP=`Snapshots`,tP=`Snapshot`,nP=`State`,rP=`Status`,iP=`Strategy`,aP=`Subnet`,oP=`Subnets`,sP=`Tags`,cP=`TcpEstablishedTimeout`,lP=`TotalFpgaMemoryInMiB`,uP=`TransitGatewayId`,dP=`TotalGpuMemoryInMiB`,fP=`TerminateInstances`,pP=`TotalInferenceMemoryInMiB`,mP=`TerminateInstancesRequest`,hP=`TerminateInstancesResult`,gP=`TargetIops`,_P=`TerminatingInstances`,vP=`TagList`,yP=`TotalLocalStorageGB`,bP=`TotalLocalStorageGBRequest`,xP=`TargetMultiAttachEnabled`,SP=`TotalMediaMemoryInMiB`,CP=`TotalNeuronDeviceMemoryInMiB`,wP=`ToPort`,TP=`ThreadsPerCore`,EP=`ThreadsPerCoreList`,DP=`TagSpecifications`,OP=`TotalSizeInGB`,kP=`TagSpecificationList`,AP=`TagSpecification`,jP=`TargetSize`,MP=`TpmSupport`,NP=`TargetThroughput`,PP=`TransferType`,FP=`TargetVolumeType`,IP=`Tag`,LP=`Tenancy`,RP=`Throughput`,zP=`Timestamp`,BP=`Type`,VP=`UsageClassTypeList`,HP=`UefiData`,UP=`UnsuccessfullyDeletedLaunchTemplateVersions`,WP=`UserData`,GP=`UserId`,KP=`UserIdGroupPairs`,qP=`UserIdGroupPairList`,JP=`UserIdGroupPair`,YP=`UnknownIpPermissions`,XP=`UnsupportedInstanceTypes`,ZP=`UnsupportedInstanceTypeSet`,QP=`UsageOperation`,$P=`UsageOperationUpdateTime`,eF=`UdpStreamTimeout`,tF=`UdpTimeout`,nF=`Value`,rF=`VolumeAttachmentList`,iF=`VolumeArn`,aF=`VolumeAttachment`,oF=`VpcCidrBlockAssociation`,sF=`VpcCidrBlockAssociationSet`,cF=`VpcCidrBlockState`,lF=`VCpuCount`,uF=`VCpuCountRange`,dF=`VCpuCountRangeRequest`,fF=`VCpuInfo`,pF=`ValidCores`,mF=`VersionDescription`,hF=`VpcEncryptionControl`,gF=`VpcEncryptionControlConfiguration`,_F=`VpcEncryptionControlExclusion`,vF=`VpcEncryptionControlExclusions`,yF=`VpcEncryptionControlId`,bF=`VpcEndpointId`,xF=`ValidationError`,SF=`VpcId`,CF=`VpcIpv6CidrBlockAssociation`,wF=`VpcIpv6CidrBlockAssociationSet`,TF=`VolumeInitializationRate`,EF=`VolumeIdStringList`,DF=`VpcIdStringList`,OF=`VolumeId`,kF=`VolumeIds`,AF=`VpcIds`,jF=`VpcLattice`,MF=`VpcLatticeExclusion`,NF=`VolumeList`,PF=`VpcList`,FF=`VolumeModification`,IF=`VirtualName`,LF=`VersionNumber`,RF=`VolumeOwnerId`,zF=`VpcPeering`,BF=`VpcPeeringConnectionId`,VF=`VpcPeeringExclusion`,HF=`VirtualPrivateGateway`,UF=`VirtualPrivateGatewayExclusion`,WF=`ValueStringList`,GF=`VersionStringList`,KF=`VolumeSize`,qF=`VolumeType`,JF=`VirtualizationTypeList`,YF=`ValidThreadsPerCore`,XF=`VirtualizationType`,ZF=`ValidUntil`,QF=`ValidationWarning`,$F=`Values`,eI=`Versions`,tI=`Version`,nI=`Volumes`,rI=`Volume`,iI=`Vpc`,aI=`Vpcs`,oI=`Warning`,sI=`WatermarkCreationTime`,cI=`WatermarkKey`,lI=`WorkloadsList`,uI=`Workloads`,dI=`ZoneId`,fI=`ZoneIdStringList`,pI=`ZoneIds`,mI=`ZoneName`,hI=`ZoneNameStringList`,gI=`ZoneNames`,_I=`ZoneType`,vI=`attachedApplianceSet`,yI=`applianceArn`,bI=`associateCarrierIpAddress`,xI=`acceleratorCount`,SI=`additionalFlexibleNetworkInterfaces`,CI=`allocationId`,wI=`availableIpAddressCount`,TI=`assignIpv6AddressOnCreation`,EI=`allowedInstanceTypeSet`,DI=`additionalInfo`,OI=`associationId`,kI=`attachmentId`,AI=`amiLaunchIndex`,jI=`attachmentLimitType`,MI=`availabilityMode`,NI=`acceleratorManufacturerSet`,PI=`acceleratorNameSet`,FI=`associatePublicIpAddress`,II=`amazonProvidedIpv6CidrBlock`,LI=`autoProvisionZones`,RI=`autoRecoverySupported`,zI=`allowReassociation`,BI=`associatedResource`,VI=`autoRecovery`,HI=`associationState`,UI=`autoScalingIps`,WI=`amdSevSnp`,GI=`addressesSet`,KI=`associationSet`,qI=`attachmentSet`,JI=`attachmentState`,YI=`acceleratorTotalMemoryMiB`,XI=`acceleratorTypeSet`,ZI=`attachTime`,QI=`availabilityZone`,$I=`availabilityZoneId`,eL=`availabilityZoneInfo`,tL=`accelerators`,nL=`affinity`,rL=`arn`,iL=`architecture`,aL=`association`,oL=`attachment`,sL=`attribute`,cL=`baselineBandwidthInGbps`,lL=`baselineBandwidthInMbps`,uL=`blockDeviceMapping`,dL=`blockDeviceMappingSet`,fL=`blockDurationMinutes`,pL=`baselineEbsBandwidthMbps`,mL=`baselineIops`,hL=`bootMode`,gL=`bareMetal`,_L=`burstablePerformance`,vL=`blockPublicAccessStates`,yL=`baselinePerformanceFactors`,bL=`burstablePerformanceSupported`,xL=`baselineThroughputInMBps`,SL=`bandwidthWeighting`,CL=`bandwidthWeightings`,wL=`cidrBlock`,TL=`cidrBlockAssociationSet`,EL=`capacityBlockId`,DL=`cidrBlockState`,OL=`createdBy`,kL=`coreCount`,AL=`cpuCredits`,jL=`completionDurationMinutes`,ML=`creationDate`,NL=`carrierGatewayId`,PL=`currentGeneration`,FL=`carrierIp`,IL=`currentInstanceBootMode`,LL=`cidrIp`,RL=`cidrIpv6`,zL=`cidrIpv4`,BL=`coreInfo`,VL=`cpuManufacturerSet`,HL=`coreNetworkArn`,UL=`cpuOptions`,WL=`customerOwnedIp`,GL=`customerOwnedIpv4Pool`,KL=`capacityReservationId`,qL=`capacityReservationPreference`,JL=`capacityReservationResourceGroupArn`,YL=`capacityReservationSpecification`,XL=`capacityReservationTarget`,ZL=`creditSpecification`,QL=`currentState`,$L=`clientToken`,eR=`connectionTrackingConfiguration`,tR=`connectionTrackingSpecification`,nR=`completionTime`,rR=`connectivityType`,iR=`createTime`,aR=`code`,oR=`configured`,sR=`count`,cR=`cpu`,lR=`disableApiStop`,uR=`disableApiTermination`,dR=`destinationCidrBlock`,fR=`defaultCores`,pR=`dataEncryptionKeyId`,mR=`defaultEnaQueueCountPerInterface`,hR=`defaultForAz`,gR=`dedicatedHostsSupported`,_R=`deviceIndex`,vR=`destinationIpv6CidrBlock`,yR=`deviceName`,bR=`defaultNetworkCardIndex`,xR=`dnsName`,SR=`dhcpOptionsId`,CR=`deleteOnTermination`,wR=`destinationPrefixListId`,TR=`deregistrationProtection`,_=`dryRun`,ER=`destinationRegion`,DR=`deleteSnapshotResultSet`,OR=`defaultTcpEstablishedTimeout`,kR=`defaultThreadsPerCore`,AR=`deprecationTime`,jR=`deleteTime`,MR=`defaultUdpStreamTimeout`,NR=`defaultUdpTimeout`,PR=`defaultVCpus`,FR=`defaultVersionNumber`,IR=`defaultVersion`,LR=`description`,RR=`device`,zR=`disks`,BR=`domain`,VR=`ebsCardIndex`,HR=`ebsCardSet`,UR=`encryptionControl`,WR=`enableDns64`,GR=`elasticFileSystem`,KR=`elasticGpuAssociationId`,qR=`elasticGpuAssociationState`,JR=`elasticGpuAssociationSet`,YR=`elasticGpuAssociationTime`,XR=`elasticGpuId`,ZR=`elasticGpuSpecificationSet`,QR=`elasticInferenceAcceleratorArn`,$R=`elasticInferenceAcceleratorAssociationId`,ez=`elasticInferenceAcceleratorAssociationState`,tz=`elasticInferenceAcceleratorAssociationSet`,nz=`elasticInferenceAcceleratorAssociationTime`,rz=`elasticInferenceAcceleratorSet`,iz=`encryptionInTransitSupported`,az=`excludedInstanceTypeSet`,oz=`ebsInfo`,ATe=`efaInfo`,jTe=`enableLniAtDeviceIndex`,sz=`ebsOptimized`,MTe=`ebsOptimizedInfo`,NTe=`egressOnlyInternetGateway`,cz=`egressOnlyInternetGatewayId`,PTe=`ebsOptimizedSupport`,lz=`enclaveOptions`,uz=`enaQueueCount`,v=`ec2QueryName`,dz=`enableResourceNameDnsAAAARecord`,fz=`enableResourceNameDnsARecord`,pz=`enaSrdEnabled`,mz=`enaSrdSpecification`,FTe=`enaSrdSupported`,hz=`enaSrdUdpEnabled`,gz=`enaSrdUdpSpecification`,ITe=`efaSupported`,_z=`encryptionSupport`,vz=`enaSupport`,LTe=`errorSet`,RTe=`endTime`,yz=`ebs`,bz=`enabled`,xz=`encrypted`,Sz=`failureCode`,zTe=`flexibleEnaQueuesSupport`,BTe=`fpgaInfo`,Cz=`failureMessage`,wz=`fromPort`,VTe=`fastRestored`,HTe=`fullSnapshotSizeInBytes`,Tz=`freeTierEligible`,UTe=`force`,WTe=`fpgas`,GTe=`groupArn`,KTe=`groupDescription`,Ez=`gatewayId`,qTe=`gpuInfo`,Dz=`groupId`,JTe=`groupLongName`,Oz=`groupName`,YTe=`groupOwnerId`,XTe=`gpuPartitionSize`,kz=`geographySet`,Az=`groupSet`,ZTe=`gpus`,QTe=`groups`,jz=`hypervisor`,$Te=`hiddenByDefault`,Mz=`httpEndpoint`,Nz=`hostId`,Pz=`hibernationOptions`,Fz=`httpProtocolIpv6`,Iz=`httpPutResponseHopLimit`,Lz=`hostResourceGroupArn`,eEe=`hibernationSupported`,Rz=`httpTokens`,zz=`hostnameType`,tEe=`id`,Bz=`ipv6AddressAttribute`,Vz=`ipv6AddressCount`,nEe=`inferenceAcceleratorInfo`,rEe=`ipv4AddressesPerInterface`,iEe=`ipv6AddressesPerInterface`,aEe=`ipv4AddressesPerSecondaryInterface`,Hz=`ipv6AddressesSet`,oEe=`imageAllowed`,Uz=`ipAddress`,Wz=`ipv6Address`,Gz=`ipv6CidrBlock`,Kz=`ipv6CidrBlockAssociationSet`,qz=`ipv6CidrBlockState`,sEe=`isDefault`,Jz=`isEgress`,cEe=`instanceFamily`,Yz=`internetGateway`,lEe=`internetGatewayBlockMode`,Xz=`internetGatewayId`,uEe=`internetGatewaySet`,dEe=`instanceGenerationSet`,Zz=`instanceId`,fEe=`instanceInterruptionBehavior`,Qz=`iamInstanceProfile`,$z=`iamInstanceProfileAssociation`,pEe=`iamInstanceProfileAssociationSet`,eB=`instanceInitiatedShutdownBehavior`,tB=`imageId`,mEe=`imageLocation`,hEe=`instanceLifecycle`,gEe=`instanceMarketOptions`,nB=`instanceMetadataTags`,_Ee=`ipv6Native`,vEe=`imageOwnerAlias`,yEe=`imageOwnerId`,bEe=`instanceOwnerId`,xEe=`ipOwnerId`,SEe=`instanceOwningService`,CEe=`ipv4PrefixCount`,wEe=`ipv6PrefixCount`,TEe=`ipPermissionsEgress`,EEe=`isPrimaryIpv6`,rB=`ipv4PrefixSet`,iB=`ipv6PrefixSet`,aB=`ipProtocol`,oB=`ipPermissions`,sB=`ipv4Prefix`,DEe=`ipv6Pool`,cB=`ipv6Prefix`,OEe=`isPublic`,kEe=`isPrimary`,AEe=`instanceRequirements`,jEe=`ipRanges`,MEe=`ipv6Ranges`,NEe=`instanceStorageInfo`,PEe=`instanceStorageSupported`,FEe=`imagesSet`,IEe=`imageState`,LEe=`imdsSupport`,lB=`instancesSet`,REe=`instanceState`,uB=`ipSource`,zEe=`ipv6Supported`,dB=`instanceType`,BEe=`instanceTypeSet`,VEe=`instanceTypeSpecification`,HEe=`interfaceTypeSet`,UEe=`idempotencyToken`,WEe=`imageType`,fB=`instanceTenancy`,pB=`interfaceType`,GEe=`imageWatermarkSet`,mB=`iops`,y=`item`,KEe=`key`,hB=`keyFingerprint`,gB=`kernelId`,_B=`kmsKeyId`,qEe=`keyMaterial`,vB=`keyName`,yB=`keyPairId`,JEe=`keySet`,YEe=`keyType`,XEe=`kernel`,ZEe=`lambda`,bB=`licenseConfigurationArn`,QEe=`logicalGpuCount`,$Ee=`localGatewayId`,eDe=`linkedGroupId`,tDe=`lastLaunchedTime`,nDe=`localStorageTypeSet`,xB=`licenseSet`,rDe=`localStorage`,SB=`launchTemplate`,iDe=`launchTemplateData`,CB=`launchTemplateId`,wB=`launchTemplateName`,aDe=`launchTemplateVersion`,oDe=`launchTemplateVersionSet`,sDe=`launchTemplates`,cDe=`launchTime`,lDe=`latestVersionNumber`,TB=`min`,uDe=`multiAttachEnabled`,dDe=`mediaAcceleratorInfo`,EB=`macAddress`,DB=`maximumBandwidthInMbps`,fDe=`mapCustomerOwnedIpOnLaunch`,pDe=`maximumEbsAttachments`,mDe=`maximumEbsCards`,hDe=`maximumEfaInterfaces`,gDe=`maximumEnaQueueCount`,_De=`maximumEnaQueueCountPerInterface`,vDe=`memoryGiBPerVCpu`,OB=`maximumIops`,kB=`memoryInfo`,yDe=`memoryMiB`,bDe=`maximumNetworkCards`,AB=`maximumNetworkInterfaces`,jB=`metadataOptions`,MB=`maintenanceOptions`,xDe=`maxPrice`,SDe=`mapPublicIpOnLaunch`,NB=`maxResults`,CDe=`messageSet`,wDe=`maximumSecondaryNetworkInterfaces`,TDe=`maxSpotPriceAsPercentageOfOptimalOnDemandPrice`,PB=`modificationState`,FB=`maximumThroughputInMBps`,EDe=`marketType`,IB=`max`,DDe=`main`,LB=`manufacturer`,ODe=`managed`,RB=`message`,kDe=`mode`,zB=`monitoring`,BB=`name`,VB=`networkBorderGroup`,ADe=`networkBandwidthGbps`,jDe=`networkCards`,HB=`networkCardIndex`,UB=`noDevice`,MDe=`neuronDevices`,NDe=`nitroEnclavesSupport`,WB=`natGateway`,PDe=`natGatewayAddressSet`,GB=`natGatewayId`,FDe=`natGatewaySet`,IDe=`networkInterfaceCount`,KB=`networkInterfaceId`,LDe=`networkInterfaceOwnerId`,qB=`networkInterfaceSet`,RDe=`networkInterface`,zDe=`networkInfo`,BDe=`neuronInfo`,JB=`networkPerformanceOptions`,YB=`networkPerformance`,VDe=`noReboot`,XB=`nvmeSupport`,HDe=`nitroTpmInfo`,UDe=`nitroTpmSupport`,ZB=`nextToken`,QB=`nestedVirtualization`,WDe=`origin`,$B=`outpostArn`,GDe=`ownerAlias`,KDe=`onDemandMaxPricePercentageOverLowestPrice`,eV=`ownerId`,tV=`optInStatus`,qDe=`originalIops`,JDe=`originalMultiAttachEnabled`,YDe=`odbNetworkArn`,XDe=`originalSize`,ZDe=`originalThroughput`,QDe=`originalVolumeType`,nV=`operator`,$De=`output`,eOe=`principal`,tOe=`provisionedBandwidth`,nOe=`peakBandwidthInGbps`,rV=`productCodes`,rOe=`partitionCount`,iOe=`productCode`,iV=`privateDnsNameOptions`,aOe=`privateDnsNameOptionsOnLaunch`,aV=`privateDnsName`,oOe=`publicDnsName`,oV=`platformDetails`,sOe=`placementGroup`,cOe=`placementGroupInfo`,lOe=`parentGroupId`,uOe=`placementGroupSet`,sV=`publicIp`,dOe=`privateIpAddressCount`,cV=`privateIpAddressesSet`,fOe=`privateIpAddressSet`,lV=`privateIpAddress`,uV=`publicIpv4Pool`,pOe=`processorInfo`,mOe=`primaryIpv6`,hOe=`privateIp`,gOe=`publicKey`,_Oe=`publicKeyMaterial`,dV=`prefixListId`,vOe=`prefixListIds`,fV=`partitionNumber`,yOe=`publicSsmParameterName`,pV=`peeringStatus`,bOe=`phcSupport`,xOe=`previousState`,SOe=`provisionTime`,COe=`presignedUrl`,wOe=`propagatingVgwSet`,TOe=`parentZoneId`,EOe=`parentZoneName`,mV=`platform`,hV=`placement`,gV=`primary`,_V=`progress`,DOe=`provisioned`,vV=`return`,OOe=`returnCode`,kOe=`ramDiskId`,yV=`rootDeviceName`,bV=`rootDeviceType`,AOe=`responseError`,jOe=`requireEncryptionInTransit`,MOe=`restoreExpiryTime`,NOe=`regionEndpoint`,POe=`resourceExclusions`,FOe=`referencedGroupId`,IOe=`referencedGroupInfo`,LOe=`requireHibernateSupport`,ROe=`reservationId`,xV=`ramdiskId`,zOe=`regionInfo`,BOe=`requesterId`,VOe=`rebootMigrationSupport`,HOe=`rebootMigration`,SV=`regionName`,CV=`revokedSecurityGroupRuleSet`,UOe=`referenceSet`,WOe=`reservationSet`,GOe=`routeSet`,KOe=`routeTableAssociationId`,wV=`routeTableId`,qOe=`routeTableSet`,TV=`resourceType`,JOe=`requestTime`,YOe=`routeTable`,XOe=`ramdisk`,ZOe=`reason`,QOe=`requested`,EV=`smithy.ts.sdk.synthetic.com.amazonaws.ec2`,$Oe=`supportedArchitectures`,eke=`subnetArn`,tke=`supportedBootModes`,nke=`sustainedClockSpeedInGhz`,DV=`sourceDestCheck`,rke=`successfullyDeletedLaunchTemplateVersionSet`,OV=`spreadDomain`,ike=`supportedFeatures`,kV=`securityGroupArn`,ake=`securityGroupIdSet`,oke=`securityGroupInfo`,ske=`securityGroupRuleArn`,AV=`securityGroupRuleId`,jV=`securityGroupRuleSet`,cke=`subGeographySet`,lke=`securityGroupSet`,uke=`sourceImageCreationTime`,dke=`sizeInGB`,fke=`sourceInstanceId`,pke=`secondaryInterfaceId`,MV=`sourceImageId`,NV=`sizeInMiB`,PV=`sourceImageRegion`,mke=`spotInstanceRequestId`,hke=`supportedInRegion`,FV=`secondaryInterfaceSet`,gke=`spotInstanceType`,_ke=`supportedInstanceTypeSet`,IV=`snapshotId`,LV=`subnetId`,vke=`spreadLevel`,yke=`serviceManaged`,bke=`spotMaxPricePercentageOverLowestPrice`,RV=`statusMessage`,zV=`stateMessage`,xke=`secondaryNetworkId`,Ske=`secondaryNetworkSupported`,BV=`sriovNetSupport`,Cke=`spotOptions`,VV=`secondaryPrivateIpAddressCount`,wke=`supportedRootDeviceTypes`,HV=`stateReason`,UV=`sourceSecurityGroupName`,WV=`sourceSecurityGroupOwnerId`,GV=`secondarySubnetId`,Tke=`snapshotSet`,Eke=`subnetSet`,Dke=`supportedStrategies`,KV=`sseType`,qV=`startTime`,Oke=`storageTier`,kke=`supportedUsageClasses`,Ake=`sourceVolumeId`,jke=`supportedVirtualizationTypes`,Mke=`supportedVersions`,Nke=`size`,JV=`state`,YV=`status`,XV=`strategy`,Pke=`subnet`,ZV=`tcpEstablishedTimeout`,Fke=`totalFpgaMemoryInMiB`,Ike=`transitGatewayId`,Lke=`totalGpuMemoryInMiB`,Rke=`totalInferenceMemoryInMiB`,zke=`targetIops`,Bke=`totalLocalStorageGB`,Vke=`targetMultiAttachEnabled`,Hke=`totalMediaMemoryInMiB`,Uke=`totalNeuronDeviceMemoryInMiB`,QV=`toPort`,$V=`threadsPerCore`,eH=`tagSet`,Wke=`totalSizeInGB`,Gke=`tagSpecificationSet`,Kke=`targetSize`,tH=`tpmSupport`,qke=`targetThroughput`,Jke=`transferType`,Yke=`targetVolumeType`,nH=`tenancy`,rH=`throughput`,iH=`timestamp`,aH=`type`,Xke=`unsuccessfullyDeletedLaunchTemplateVersionSet`,oH=`userData`,sH=`userId`,cH=`unknownIpPermissionSet`,Zke=`unsupportedInstanceTypeSet`,lH=`usageOperation`,Qke=`usageOperationUpdateTime`,uH=`udpStreamTimeout`,dH=`udpTimeout`,fH=`value`,$ke=`volumeArn`,eAe=`vCpuCount`,tAe=`vCpuInfo`,nAe=`validCores`,rAe=`versionDescription`,iAe=`vpcEncryptionControlId`,aAe=`vpcEndpointId`,pH=`vpcId`,mH=`volumeInitializationRate`,hH=`volumeId`,oAe=`vpcLattice`,sAe=`volumeModification`,gH=`virtualName`,_H=`versionNumber`,cAe=`volumeOwnerId`,lAe=`vpcPeering`,vH=`vpcPeeringConnectionId`,uAe=`virtualPrivateGateway`,dAe=`volumeSet`,yH=`volumeSize`,fAe=`vpcSet`,bH=`volumeType`,pAe=`validThreadsPerCore`,xH=`virtualizationType`,mAe=`validUntil`,hAe=`version`,gAe=`vpc`,SH=`warning`,_Ae=`watermarkCreationTime`,vAe=`watermarkKey`,yAe=`workloadSet`,b=`xmlName`,bAe=`zoneId`,xAe=`zoneName`,SAe=`zoneState`,CAe=`zoneType`,x=`com.amazonaws.ec2`,CH=pt.for(EV),wAe=[-3,EV,`EC2ServiceException`,0,[],[]];CH.registerError(wAe,bCe);var TAe=[CH],EAe=[0,x,Lg,8,0],DAe=[0,x,lT,8,0],OAe=[0,x,zD,8,0],kAe=[0,x,fj,8,0],AAe=[0,x,fM,8,21],wH=[0,x,JN,8,0],jAe=[3,x,Sh,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],MAe=[3,x,jCe,0,[yD,fO],[1,1]],NAe=[3,x,zh,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],PAe=[3,x,mwe,0,[yD,fO],[1,1]],FAe=[3,x,xh,0,[Dh,kh,Jy,XO,ZO,lA,sP,fA,xO,Tg,Eg,vg,_N,SN,tC,aA],[[0,{[v]:`AllocationId`,[b]:CI}],[0,{[v]:`AssociationId`,[b]:OI}],[0,{[v]:`Domain`,[b]:BR}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`NetworkInterfaceOwnerId`,[b]:LDe}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`PublicIpv4Pool`,[b]:uV}],[0,{[v]:`NetworkBorderGroup`,[b]:VB}],[0,{[v]:`CustomerOwnedIp`,[b]:WL}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:GL}],[0,{[v]:`CarrierIp`,[b]:FL}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`ServiceManaged`,[b]:yke}],[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`PublicIp`,[b]:sV}]]],IAe=[3,x,xCe,0,[Jy,xh,fA,xO,Eg,DP,iw,g],[0,0,0,0,0,[()=>RU,{[b]:AP}],0,[2,{[v]:`DryRun`,[b]:_}]]],LAe=[3,x,SCe,0,[Dh,fA,xO,Jy,Tg,Eg,vg,aA],[[0,{[v]:`AllocationId`,[b]:CI}],[0,{[v]:`PublicIpv4Pool`,[b]:uV}],[0,{[v]:`NetworkBorderGroup`,[b]:VB}],[0,{[v]:`Domain`,[b]:BR}],[0,{[v]:`CustomerOwnedIp`,[b]:WL}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:GL}],[0,{[v]:`CarrierIp`,[b]:FL}],[0,{[v]:`PublicIp`,[b]:sV}]]],RAe=[3,x,CCe,0,[Dh,tC,aA,g,XO,lA,rwe],[0,0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[2,{[v]:`AllowReassociation`,[b]:zI}]]],zAe=[3,x,wCe,0,[kh],[[0,{[v]:`AssociationId`,[b]:OI}]]],BAe=[3,x,LCe,0,[sC,tC],[[()=>RH,0],0],2],VAe=[3,x,RCe,0,[cC],[[()=>LH,{[v]:`IamInstanceProfileAssociation`,[b]:$z}]]],HAe=[3,x,ewe,0,[Uj,zx,fA,g,_N],[[0,{[v]:`RouteTableId`,[b]:wV}],0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SubnetId`,[b]:LV}]],1],UAe=[3,x,twe,0,[kh,Rh],[[0,{[v]:`AssociationId`,[b]:OI}],[()=>$H,{[v]:`AssociationState`,[b]:HI}]]],WAe=[3,x,FCe,0,[qS,SF,g],[[0,{[v]:`InternetGatewayId`,[b]:Xz}],[0,{[v]:`VpcId`,[b]:pH}],[2,{[v]:`DryRun`,[b]:_}]],2],GAe=[3,x,_we,0,[Ky,tC,OF,Qy,g],[0,0,0,1,[2,{[v]:`DryRun`,[b]:_}]],3],TH=[3,x,ACe,0,[nF],[[2,{[v]:`Value`,[b]:fH}]]],EH=[3,x,vwe,0,[nF],[[0,{[v]:`Value`,[b]:fH}]]],KAe=[3,x,owe,0,[Ux,DP,g,RN,zN,xw,Cx,wP,yg,yw],[[0,{[v]:`GroupId`,[b]:Dz}],[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SourceSecurityGroupName`,[b]:UV}],[0,{[v]:`SourceSecurityGroupOwnerId`,[b]:WV}],[0,{[v]:`IpProtocol`,[b]:aB}],[1,{[v]:`FromPort`,[b]:wz}],[1,{[v]:`ToPort`,[b]:QV}],[0,{[v]:`CidrIp`,[b]:LL}],[()=>TU,{[v]:`IpPermissions`,[b]:oB}]],1],qAe=[3,x,swe,0,[VA,OM],[[2,{[v]:`Return`,[b]:vV}],[()=>FU,{[v]:`SecurityGroupRuleSet`,[b]:jV}]]],JAe=[3,x,cwe,0,[yg,Cx,Ux,qx,yw,xw,RN,zN,wP,DP,g],[0,1,0,0,[()=>TU,0],0,0,0,1,[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}]]],YAe=[3,x,lwe,0,[VA,OM],[[2,{[v]:`Return`,[b]:vV}],[()=>FU,{[v]:`SecurityGroupRuleSet`,[b]:jV}]]],XAe=[3,x,Hh,0,[gk,_O,Ej,mI,dI,qx,xO,_I,PA,NA,Kx,Qx,SM,nP],[[0,{[v]:`OptInStatus`,[b]:tV}],[()=>ZIe,{[v]:`MessageSet`,[b]:CDe}],[0,{[v]:`RegionName`,[b]:SV}],[0,{[v]:`ZoneName`,[b]:xAe}],[0,{[v]:`ZoneId`,[b]:bAe}],[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`NetworkBorderGroup`,[b]:VB}],[0,{[v]:`ZoneType`,[b]:CAe}],[0,{[v]:`ParentZoneName`,[b]:EOe}],[0,{[v]:`ParentZoneId`,[b]:TOe}],[0,{[v]:`GroupLongName`,[b]:JTe}],[()=>YIe,{[v]:`GeographySet`,[b]:kz}],[()=>QIe,{[v]:`SubGeographySet`,[b]:cke}],[0,{[v]:`ZoneState`,[b]:SAe}]]],ZAe=[3,x,Uh,0,[Hh,Gh,Oh],[0,0,[()=>pU,{[b]:Dh}]]],QAe=[3,x,bwe,0,[bO],[[0,{[v]:`Name`,[b]:BB}]]],$Ae=[3,x,Cwe,0,[gO],[[0,{[v]:`Message`,[b]:RB}]]],eje=[3,x,Twe,0,[bO],[[0,{[v]:`Name`,[b]:BB}]]],tje=[3,x,rg,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],nje=[3,x,Pwe,0,[yD,fO],[1,1]],rje=[3,x,lg,0,[u_],[[()=>pje,{[v]:`Cpu`,[b]:cR}]]],ije=[3,x,Lwe,0,[u_],[[()=>mje,0]]],DH=[3,x,eg,0,[lx,kO,Ov,IF],[[()=>nNe,{[v]:`Ebs`,[b]:yz}],[0,{[v]:`NoDevice`,[b]:UB}],[0,{[v]:`DeviceName`,[b]:yR}],[0,{[v]:`VirtualName`,[b]:gH}]]],OH=[3,x,cg,0,[GS],[[0,{[v]:`InternetGatewayBlockMode`,[b]:lEe}]]],aje=[3,x,Ag,0,[Og,jg],[0,()=>kH]],oje=[3,x,TTe,0,[Og,jg],[[0,{[v]:`CapacityReservationPreference`,[b]:qL}],[()=>AH,{[v]:`CapacityReservationTarget`,[b]:XL}]]],kH=[3,x,jg,0,[Dg,kg],[0,0]],AH=[3,x,ETe,0,[Dg,kg],[[0,{[v]:`CapacityReservationId`,[b]:KL}],[0,{[v]:`CapacityReservationResourceGroupArn`,[b]:JL}]]],sje=[3,x,Xg,0,[cP,tF,eF],[[1,{[v]:`TcpEstablishedTimeout`,[b]:ZV}],[1,{[v]:`UdpTimeout`,[b]:dH}],[1,{[v]:`UdpStreamTimeout`,[b]:uH}]]],jH=[3,x,Zg,0,[cP,eF,tF],[1,1,1]],cje=[3,x,Qg,0,[cP,eF,tF],[[1,{[v]:`TcpEstablishedTimeout`,[b]:ZV}],[1,{[v]:`UdpStreamTimeout`,[b]:uH}],[1,{[v]:`UdpTimeout`,[b]:dH}]]],lje=[3,x,Ig,0,[IN,BN,Gy,Iv,ny,dx,CT,kA,DP,gg,__,g],[0,0,0,0,[0,{[v]:`DestinationRegion`,[b]:ER}],[2,{[v]:`Encrypted`,[b]:xz}],[0,{[v]:`KmsKeyId`,[b]:_B}],[()=>EAe,{[v]:`PresignedUrl`,[b]:COe}],[()=>RU,{[b]:AP}],1,0,[2,{[v]:`DryRun`,[b]:_}]],2],uje=[3,x,Rg,0,[sP,dN],[[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`SnapshotId`,[b]:IV}]]],dje=[3,x,wg,0,[mg,TP,Lh,uk],[[1,{[v]:`CoreCount`,[b]:kL}],[1,{[v]:`ThreadsPerCore`,[b]:$V}],[0,{[v]:`AmdSevSnp`,[b]:WI}],[0,{[v]:`NestedVirtualization`,[b]:QB}]]],fje=[3,x,_Te,0,[mg,TP,Lh,uk],[1,1,0,0]],pje=[3,x,vTe,0,[Qj],[[()=>CRe,{[v]:`ReferenceSet`,[b]:UOe}]]],mje=[3,x,yTe,0,[Qj],[[()=>wRe,{[b]:$j}]]],hje=[3,x,eTe,0,[tC,bO,DP,vN,Fwe,g,Gy,ik,tg],[[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`Name`,[b]:BB}],[()=>RU,{[b]:AP}],0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Description`,[b]:LR}],[2,{[v]:`NoReboot`,[b]:VDe}],[()=>hU,{[v]:`BlockDeviceMapping`,[b]:uL}]],2],gje=[3,x,tTe,0,[xC],[[0,{[v]:`ImageId`,[b]:tB}]]],_je=[3,x,Qwe,0,[DP,g],[[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}]]],vje=[3,x,$we,0,[HS],[[()=>HH,{[v]:`InternetGateway`,[b]:Yz}]]],yje=[3,x,aTe,0,[TT,FT,DP,bT,g],[0,0,[()=>RU,{[b]:AP}],0,[2,{[v]:`DryRun`,[b]:_}]],1],bje=[3,x,sTe,0,[qE,lE,g,Jg,mF,Dk,DP],[0,[()=>XH,0],2,[0,4],0,()=>KH,[()=>RU,{[b]:AP}]],2],xje=[3,x,cTe,0,[eE,oI],[[()=>UH,{[v]:`LaunchTemplate`,[b]:SB}],[()=>rU,{[v]:`Warning`,[b]:SH}]]],Sje=[3,x,uTe,0,[lE,g,Jg,SE,qE,YN,mF,WA],[[()=>XH,0],2,[0,4],0,0,0,0,2],1],Cje=[3,x,dTe,0,[uD,oI],[[()=>WH,{[v]:`LaunchTemplateVersion`,[b]:aDe}],[()=>rU,{[v]:`Warning`,[b]:SH}]]],wje=[3,x,hTe,0,[Mh,Dh,Jg,g,_N,SF,Wh,DP,e_,lA,sM,MN,NN],[0,0,[0,4],2,0,0,[()=>JIe,{[b]:Uh}],[()=>RU,{[b]:AP}],0,0,[()=>pU,{[b]:cM}],[()=>HLe,{[b]:PN}],1]],Tje=[3,x,gTe,0,[Jg,IO],[[0,{[v]:`ClientToken`,[b]:$L}],[()=>GH,{[v]:`NatGateway`,[b]:WB}]]],Eje=[3,x,xTe,0,[Lk,DP,bN,WT,Dk,$k,g,qx,iP],[1,[()=>RU,{[b]:AP}],0,0,()=>KH,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`Strategy`,[b]:XV}]]],Dje=[3,x,STe,0,[Qk],[[()=>YH,{[v]:`PlacementGroup`,[b]:sOe}]]],Oje=[3,x,CTe,0,[Uj,Wv,bF,uP,UT,_g,Cg,bk,g,C_,zx,j_,Bb,tC,XO,BF,UO],[[0,{[v]:`RouteTableId`,[b]:wV}],0,0,0,0,0,0,0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`DestinationCidrBlock`,[b]:dR}],[0,{[v]:`GatewayId`,[b]:Ez}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:vR}],[0,{[v]:`EgressOnlyInternetGatewayId`,[b]:cz}],[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`VpcPeeringConnectionId`,[b]:vH}],[0,{[v]:`NatGatewayId`,[b]:GB}]],1],kje=[3,x,wTe,0,[VA],[[2,{[v]:`Return`,[b]:vV}]]],Aje=[3,x,DTe,0,[SF,DP,Jg,g],[[0,{[v]:`VpcId`,[b]:pH}],[()=>RU,{[b]:AP}],[0,4],[2,{[v]:`DryRun`,[b]:_}]],1],jje=[3,x,OTe,0,[Yj,Jg],[[()=>QH,{[v]:`RouteTable`,[b]:YOe}],[0,{[v]:`ClientToken`,[b]:$L}]]],Mje=[3,x,Pg,0,[Gy,qx,SF,DP,g],[[0,{[b]:Fx}],0,0,[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}]],2],Nje=[3,x,Fg,0,[Ux,sP,CM],[[0,{[v]:`GroupId`,[b]:Dz}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`SecurityGroupArn`,[b]:kV}]]],Pje=[3,x,zg,0,[OF,Gy,fk,DP,vD,g],[0,0,0,[()=>RU,{[b]:AP}],0,[2,{[v]:`DryRun`,[b]:_}]],1],Fje=[3,x,Bg,0,[SF,DP,Hh,Gh,fg,AS,fk,BC,fC,JC,dC,qC,g],[0,[()=>RU,{[b]:AP}],0,0,0,0,0,2,0,1,0,1,[2,{[v]:`DryRun`,[b]:_}]],1],Ije=[3,x,Vg,0,[aP],[[()=>nU,{[v]:`Subnet`,[b]:Pke}]]],Lje=[3,x,n_,0,[Hh,Gh,dx,vT,CT,fk,$N,dN,qF,DP,bD,RP,Jg,TF,Dk,g],[0,0,[2,{[v]:`Encrypted`,[b]:xz}],1,0,0,1,0,0,[()=>RU,{[b]:AP}],2,1,[0,4],1,()=>KH,[2,{[v]:`DryRun`,[b]:_}]]],Rje=[3,x,r_,0,[fg,Cw,AS,fC,JC,dC,qC,MS,hF,DP,g,aT,ZCe],[0,0,0,0,1,0,1,0,()=>HIe,[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`InstanceTenancy`,[b]:fB}],[2,{[v]:`AmazonProvidedIpv6CidrBlock`,[b]:II}]]],zje=[3,x,i_,0,[iI],[[()=>oU,{[v]:`Vpc`,[b]:gAe}]]],Bje=[3,x,Wg,0,[hg],[[0,{[v]:`CpuCredits`,[b]:AL}]]],MH=[3,x,Hg,0,[hg],[0],1],Vje=[3,x,w_,0,[wy,ky,Oy],[[1,{[v]:`DefaultTcpEstablishedTimeout`,[b]:OR}],[1,{[v]:`DefaultUdpTimeout`,[b]:NR}],[1,{[v]:`DefaultUdpStreamTimeout`,[b]:MR}]]],Hje=[3,x,N_,0,[qS,g],[[0,{[v]:`InternetGatewayId`,[b]:Xz}],[2,{[v]:`DryRun`,[b]:_}]],1],Uje=[3,x,ov,0,[TT,kT,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],Wje=[3,x,sv,0,[VA,kT],[[2,{[v]:`Return`,[b]:vV}],[0,{[v]:`KeyPairId`,[b]:yB}]]],Gje=[3,x,pv,0,[g,SE,qE],[2,0,0]],Kje=[3,x,mv,0,[eE],[[()=>UH,{[v]:`LaunchTemplate`,[b]:SB}]]],qje=[3,x,vv,0,[eI,g,SE,qE],[[()=>BU,{[b]:uD}],2,0,0],1],Jje=[3,x,yv,0,[SE,qE,LF,ej],[[0,{[v]:`LaunchTemplateId`,[b]:CB}],[0,{[v]:`LaunchTemplateName`,[b]:wB}],[1,{[v]:`VersionNumber`,[b]:_H}],[()=>aIe,{[v]:`ResponseError`,[b]:AOe}]]],Yje=[3,x,xv,0,[SE,qE,LF],[[0,{[v]:`LaunchTemplateId`,[b]:CB}],[0,{[v]:`LaunchTemplateName`,[b]:wB}],[1,{[v]:`VersionNumber`,[b]:_H}]]],Xje=[3,x,Cv,0,[vM,UP],[[()=>aLe,{[v]:`SuccessfullyDeletedLaunchTemplateVersionSet`,[b]:rke}],[()=>iLe,{[v]:`UnsuccessfullyDeletedLaunchTemplateVersionSet`,[b]:Xke}]]],Zje=[3,x,jv,0,[UO,g],[[0,{[b]:UO}],2],1],Qje=[3,x,Mv,0,[UO],[[0,{[v]:`NatGatewayId`,[b]:GB}]]],$je=[3,x,Bv,0,[qx,g],[[0,{[v]:`GroupName`,[b]:Oz}],[2,{[v]:`DryRun`,[b]:_}]],1],eMe=[3,x,Kv,0,[Uj,Wv,g,C_,j_],[[0,{[v]:`RouteTableId`,[b]:wV}],0,[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`DestinationCidrBlock`,[b]:dR}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:vR}]],1],tMe=[3,x,Xv,0,[Uj,g],[[0,{[v]:`RouteTableId`,[b]:wV}],[2,{[v]:`DryRun`,[b]:_}]],1],nMe=[3,x,oy,0,[Ux,qx,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],rMe=[3,x,sy,0,[VA,Ux],[[2,{[v]:`Return`,[b]:vV}],[0,{[v]:`GroupId`,[b]:Dz}]]],iMe=[3,x,dy,0,[dN,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],aMe=[3,x,fy,0,[dN,qA],[[0,{[v]:`SnapshotId`,[b]:IV}],[0,{[v]:`ReturnCode`,[b]:OOe}]]],oMe=[3,x,my,0,[_N,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],sMe=[3,x,My,0,[OF,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],cMe=[3,x,Ny,0,[SF,g],[0,[2,{[v]:`DryRun`,[b]:_}]],1],lMe=[3,x,K_,0,[xC,m_,g],[0,2,[2,{[v]:`DryRun`,[b]:_}]],1],uMe=[3,x,q_,0,[VA,hy],[[2,{[v]:`Return`,[b]:vV}],[()=>oLe,{[v]:`DeleteSnapshotResultSet`,[b]:DR}]]],dMe=[3,x,d_,0,[_A,g,Dx,Oh],[[()=>ARe,{[b]:aA}],[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}],[()=>pU,{[b]:Dh}]]],fMe=[3,x,f_,0,[Owe],[[()=>GIe,{[v]:`AddressesSet`,[b]:GI}]]],pMe=[3,x,v_,0,[gI,pI,TCe,g,Dx],[[()=>uze,{[b]:mI}],[()=>lze,{[b]:dI}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],mMe=[3,x,y_,0,[Dwe],[[()=>XIe,{[v]:`AvailabilityZoneInfo`,[b]:eL}]]],hMe=[3,x,V_,0,[UCe,Dx,$D,lk],[[()=>qIe,{[b]:kh}],[()=>vU,{[b]:Ox}],1,0]],gMe=[3,x,H_,0,[uC,lk],[[()=>bLe,{[v]:`IamInstanceProfileAssociationSet`,[b]:pEe}],[0,{[v]:`NextToken`,[b]:ZB}]]],_Me=[3,x,J_,0,[cx,SC,kk,PS,RS,$D,lk,g,Dx],[[()=>gLe,{[b]:Zy}],[()=>xLe,{[b]:xC}],[()=>kU,{[b]:Ak}],2,2,1,0,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],vMe=[3,x,Y_,0,[lk,mT],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>SLe,{[v]:`ImagesSet`,[b]:FEe}]]],yMe=[3,x,X_,0,[CC,RC,g,Dx,lk,$D],[[()=>SU,{[b]:tC}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}],[0,{[v]:`NextToken`,[b]:ZB}],[1,{[v]:`MaxResults`,[b]:NB}]]],bMe=[3,x,Z_,0,[lk,rM],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>PRe,{[v]:`ReservationSet`,[b]:WOe}]]],xMe=[3,x,Q_,0,[g,oT,Dx,$D,lk,uT],[2,[64,{[b]:$w}],[()=>vU,{[b]:Ox}],1,0,2]],SMe=[3,x,$_,0,[oT,lk],[[()=>RLe,{[v]:`InstanceTypeSet`,[b]:BEe}],[0,{[v]:`NextToken`,[b]:ZB}]]],CMe=[3,x,P_,0,[lk,$D,g,YS,Dx],[0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>BLe,{[v]:`InternetGatewayId`,[b]:Xz}],[()=>vU,{[b]:Ox}]]],wMe=[3,x,F_,0,[QS,lk],[[()=>VLe,{[v]:`InternetGatewaySet`,[b]:uEe}],[0,{[v]:`NextToken`,[b]:ZB}]]],TMe=[3,x,cv,0,[DT,jT,cw,g,Dx],[[()=>qLe,{[b]:TT}],[()=>JLe,{[b]:kT}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],EMe=[3,x,lv,0,[OT],[[()=>YLe,{[v]:`KeySet`,[b]:JEe}]]],DMe=[3,x,hv,0,[g,BE,ZE,Dx,lk,$D,RC],[2,[()=>eRe,{[b]:SE}],[()=>sRe,{[b]:qE}],[()=>vU,{[b]:Ox}],0,1,2]],OMe=[3,x,gv,0,[pD,lk],[[()=>cRe,{[v]:`LaunchTemplates`,[b]:sDe}],[0,{[v]:`NextToken`,[b]:ZB}]]],kMe=[3,x,wv,0,[g,SE,qE,eI,sO,uO,lk,$D,Dx,WA,RC],[2,0,0,[()=>BU,{[b]:uD}],0,0,0,1,[()=>vU,{[b]:Ox}],2,2]],AMe=[3,x,Tv,0,[fD,lk],[[()=>dRe,{[v]:`LaunchTemplateVersionSet`,[b]:oDe}],[0,{[v]:`NextToken`,[b]:ZB}]]],jMe=[3,x,Nv,0,[g,Ox,$D,GO,lk],[2,[()=>vU,0],1,[()=>_Re,{[b]:UO}],0]],MMe=[3,x,Pv,0,[qO,lk],[[()=>vRe,{[v]:`NatGatewaySet`,[b]:FDe}],[0,{[v]:`NextToken`,[b]:ZB}]]],NMe=[3,x,Vv,0,[Wx,g,Yx,Dx],[[()=>TRe,{[b]:Ux}],[2,{[v]:`DryRun`,[b]:_}],[64,{[v]:`GroupName`,[b]:Oz}],[()=>vU,{[b]:Ox}]]],PMe=[3,x,Hv,0,[iA],[[()=>ERe,{[v]:`PlacementGroupSet`,[b]:uOe}]]],FMe=[3,x,qv,0,[Oj,iwe,g,Dx],[[()=>NRe,{[b]:Ej}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],IMe=[3,x,Jv,0,[eM],[[()=>MRe,{[v]:`RegionInfo`,[b]:zOe}]]],LMe=[3,x,Zv,0,[lk,$D,g,Gj,Dx],[0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>RRe,{[b]:Uj}],[()=>vU,{[b]:Ox}]]],RMe=[3,x,Qv,0,[Xj,lk],[[()=>zRe,{[v]:`RouteTableSet`,[b]:qOe}],[0,{[v]:`NextToken`,[b]:ZB}]]],zMe=[3,x,cy,0,[Wx,Yx,lk,$D,g,Dx],[[()=>bU,{[b]:Ux}],[()=>yLe,{[b]:qx}],0,1,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],BMe=[3,x,ly,0,[lk,IM],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>HRe,{[v]:`SecurityGroupInfo`,[b]:oke}]]],VMe=[3,x,gy,0,[$D,lk,vk,GA,fN,g,Dx],[1,0,[()=>kU,{[b]:Ak}],[64,{[b]:KA}],[()=>URe,{[b]:dN}],[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}]]],HMe=[3,x,_y,0,[lk,eP],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>WRe,{[v]:`SnapshotSet`,[b]:Tke}]]],UMe=[3,x,vy,0,[Dx,RM,lk,$D,g],[[()=>vU,{[b]:Ox}],[()=>GRe,{[b]:_N}],0,1,[2,{[v]:`DryRun`,[b]:_}]]],WMe=[3,x,yy,0,[lk,oP],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>qRe,{[v]:`SubnetSet`,[b]:Eke}]]],GMe=[3,x,Py,0,[kF,RC,g,Dx,lk,$D],[[()=>nze,{[b]:OF}],2,[2,{[v]:`DryRun`,[b]:_}],[()=>vU,{[b]:Ox}],[0,{[v]:`NextToken`,[b]:ZB}],[1,{[v]:`MaxResults`,[b]:NB}]]],KMe=[3,x,Fy,0,[lk,nI],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>rze,{[v]:`VolumeSet`,[b]:dAe}]]],qMe=[3,x,Iy,0,[Dx,AF,lk,$D,g],[[()=>vU,{[b]:Ox}],[()=>aze,{[b]:SF}],0,1,[2,{[v]:`DryRun`,[b]:_}]]],JMe=[3,x,Ly,0,[lk,aI],[[0,{[v]:`NextToken`,[b]:ZB}],[()=>sze,{[v]:`VpcSet`,[b]:fAe}]]],YMe=[3,x,I_,0,[qS,SF,g],[[0,{[v]:`InternetGatewayId`,[b]:Xz}],[0,{[v]:`VpcId`,[b]:pH}],[2,{[v]:`DryRun`,[b]:_}]],2],XMe=[3,x,Ry,0,[OF,Ky,mx,tC,g],[0,0,2,0,[2,{[v]:`DryRun`,[b]:_}]],1],ZMe=[3,x,p_,0,[kh,aA,g],[0,0,[2,{[v]:`DryRun`,[b]:_}]]],QMe=[3,x,U_,0,[kh],[0],1],$Me=[3,x,W_,0,[cC],[[()=>LH,{[v]:`IamInstanceProfileAssociation`,[b]:$z}]]],eNe=[3,x,$v,0,[kh,g],[[0,{[v]:`AssociationId`,[b]:OI}],[2,{[v]:`DryRun`,[b]:_}]],1],tNe=[3,x,iv,0,[HM,l_,BP],[[1,{[v]:`SizeInGB`,[b]:dke}],[1,{[v]:`Count`,[b]:sR}],[0,{[v]:`Type`,[b]:aH}]]],nNe=[3,x,Yy,0,[Rv,vT,dN,KF,qF,CT,RP,fk,Hh,dx,TF,Gh,Qy],[[2,{[v]:`DeleteOnTermination`,[b]:CR}],[1,{[v]:`Iops`,[b]:mB}],[0,{[v]:`SnapshotId`,[b]:IV}],[1,{[v]:`VolumeSize`,[b]:yH}],[0,{[v]:`VolumeType`,[b]:bH}],[0,{[v]:`KmsKeyId`,[b]:_B}],[1,{[v]:`Throughput`,[b]:rH}],[0,{[v]:`OutpostArn`,[b]:$B}],[0,{[v]:`AvailabilityZone`,[b]:QI}],[2,{[v]:`Encrypted`,[b]:xz}],1,0,1]],rNe=[3,x,eb,0,[Qy,$h,ug,ig,CD,aO,LD],[[1,{[v]:`EbsCardIndex`,[b]:VR}],[1,{[v]:`BaselineBandwidthInMbps`,[b]:lL}],[1,{[v]:`BaselineThroughputInMBps`,[b]:xL}],[1,{[v]:`BaselineIops`,[b]:mL}],[1,{[v]:`MaximumBandwidthInMbps`,[b]:DB}],[1,{[v]:`MaximumThroughputInMBps`,[b]:FB}],[1,{[v]:`MaximumIops`,[b]:OB}]]],iNe=[3,x,Nb,0,[Hb,ix,Lb,ak,AD,GCe,jD,tb],[[0,{[v]:`EbsOptimizedSupport`,[b]:PTe}],[0,{[v]:`EncryptionSupport`,[b]:_z}],[()=>sNe,{[v]:`EbsOptimizedInfo`,[b]:MTe}],[0,{[v]:`NvmeSupport`,[b]:XB}],[1,{[v]:`MaximumEbsAttachments`,[b]:pDe}],[0,{[v]:`AttachmentLimitType`,[b]:jI}],[1,{[v]:`MaximumEbsCards`,[b]:mDe}],[()=>cLe,{[v]:`EbsCardSet`,[b]:HR}]]],aNe=[3,x,Db,0,[Vh,Rv,rP,OF,Fh,RF,Dk,Qy],[[4,{[v]:`AttachTime`,[b]:ZI}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[0,{[v]:`Status`,[b]:YV}],[0,{[v]:`VolumeId`,[b]:hH}],[0,{[v]:`AssociatedResource`,[b]:BI}],[0,{[v]:`VolumeOwnerId`,[b]:cAe}],[()=>qH,{[v]:`Operator`,[b]:nV}],[1,{[v]:`EbsCardIndex`,[b]:VR}]]],oNe=[3,x,Ob,0,[OF,Rv],[[0,{[v]:`VolumeId`,[b]:hH}],[2,{[v]:`DeleteOnTermination`,[b]:CR}]]],sNe=[3,x,Lb,0,[$h,ug,ig,CD,aO,LD],[[1,{[v]:`BaselineBandwidthInMbps`,[b]:lL}],[1,{[v]:`BaselineThroughputInMBps`,[b]:xL}],[1,{[v]:`BaselineIops`,[b]:mL}],[1,{[v]:`MaximumBandwidthInMbps`,[b]:DB}],[1,{[v]:`MaximumThroughputInMBps`,[b]:FB}],[1,{[v]:`MaximumIops`,[b]:OB}]]],cNe=[3,x,Pb,0,[MD],[[1,{[v]:`MaximumEfaInterfaces`,[b]:hDe}]]],lNe=[3,x,ob,0,[fb,sb,lb,ub],[[0,{[v]:`ElasticGpuId`,[b]:XR}],[0,{[v]:`ElasticGpuAssociationId`,[b]:KR}],[0,{[v]:`ElasticGpuAssociationState`,[b]:qR}],[0,{[v]:`ElasticGpuAssociationTime`,[b]:YR}]]],NH=[3,x,gb,0,[BP],[0],1],uNe=[3,x,mb,0,[BP],[[0,{[v]:`Type`,[b]:aH}]]],dNe=[3,x,vb,0,[BP,l_],[0,1],1],fNe=[3,x,yb,0,[wb,bb,Sb,Cb],[[0,{[v]:`ElasticInferenceAcceleratorArn`,[b]:QR}],[0,{[v]:`ElasticInferenceAcceleratorAssociationId`,[b]:$R}],[0,{[v]:`ElasticInferenceAcceleratorAssociationState`,[b]:ez}],[4,{[v]:`ElasticInferenceAcceleratorAssociationTime`,[b]:nz}]]],PH=[3,x,Qb,0,[Xb,tx],[2,()=>pNe]],pNe=[3,x,nx,0,[ex],[2]],mNe=[3,x,Ub,0,[ux],[[2,{[v]:`Enabled`,[b]:bz}]]],FH=[3,x,Vb,0,[ux],[2]],hNe=[3,x,Ox,0,[bO,$F],[0,[()=>zU,{[b]:nF}]]],gNe=[3,x,gx,0,[bO,mO,l_,VD],[[0,{[v]:`Name`,[b]:BB}],[0,{[v]:`Manufacturer`,[b]:LB}],[1,{[v]:`Count`,[b]:sR}],[()=>_Ne,{[v]:`MemoryInfo`,[b]:kB}]]],_Ne=[3,x,vx,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],vNe=[3,x,bx,0,[kx,lP],[[()=>_Le,{[v]:`Fpgas`,[b]:WTe}],[1,{[v]:`TotalFpgaMemoryInMiB`,[b]:Fke}]]],yNe=[3,x,Nx,0,[tC,gD,g],[0,2,[2,{[v]:`DryRun`,[b]:_}]],1],bNe=[3,x,Px,0,[tC,zP,Ok],[[0,{[v]:`InstanceId`,[b]:Zz}],[4,{[v]:`Timestamp`,[b]:iH}],[0,{[v]:`Output`,[b]:$De}]]],xNe=[3,x,Ix,0,[bO,mO,l_,HT,Zx,uI,VD],[[0,{[v]:`Name`,[b]:BB}],[0,{[v]:`Manufacturer`,[b]:LB}],[1,{[v]:`Count`,[b]:sR}],[1,{[v]:`LogicalGpuCount`,[b]:QEe}],[1,{[v]:`GpuPartitionSize`,[b]:XTe}],[()=>cze,{[v]:`WorkloadSet`,[b]:yAe}],[()=>SNe,{[v]:`MemoryInfo`,[b]:kB}]]],SNe=[3,x,Rx,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],CNe=[3,x,Hx,0,[$x,dP],[[()=>vLe,{[v]:`Gpus`,[b]:ZTe}],[1,{[v]:`TotalGpuMemoryInMiB`,[b]:Lke}]]],wNe=[3,x,Gx,0,[Ux,qx],[[0,{[v]:`GroupId`,[b]:Dz}],[0,{[v]:`GroupName`,[b]:Oz}]]],TNe=[3,x,rS,0,[c_],[[2,{[v]:`Configured`,[b]:oR}]]],ENe=[3,x,iS,0,[c_],[2]],IH=[3,x,sC,0,[Jh,pS],[[0,{[v]:`Arn`,[b]:rL}],[0,{[v]:`Id`,[b]:tEe}]]],LH=[3,x,cC,0,[kh,tC,sC,nP,zP],[[0,{[v]:`AssociationId`,[b]:OI}],[0,{[v]:`InstanceId`,[b]:Zz}],[()=>IH,{[v]:`IamInstanceProfile`,[b]:Qz}],[0,{[v]:`State`,[b]:JV}],[4,{[v]:`Timestamp`,[b]:iH}]]],RH=[3,x,hC,0,[Jh,bO],[[0,{[v]:`Arn`,[b]:rL}],[0,{[v]:`Name`,[b]:BB}]]],DNe=[3,x,hT,0,[qk,QP,tg,Gy,ax,fS,ZC,bO,YA,XA,ON,LN,sP,XF,ag,MP,Ey,Yw,GM,Gv,KT,CS,UM,QM,Ex,wA,dT,rT,xC,DC,nP,hk,Jwe,BA,zk,Yh,iT,ST,pj,FA],[[0,{[v]:`PlatformDetails`,[b]:oV}],[0,{[v]:`UsageOperation`,[b]:lH}],[()=>tLe,{[v]:`BlockDeviceMapping`,[b]:uL}],[0,{[v]:`Description`,[b]:LR}],[2,{[v]:`EnaSupport`,[b]:vz}],[0,{[v]:`Hypervisor`,[b]:jz}],[0,{[v]:`ImageOwnerAlias`,[b]:vEe}],[0,{[v]:`Name`,[b]:BB}],[0,{[v]:`RootDeviceName`,[b]:yV}],[0,{[v]:`RootDeviceType`,[b]:bV}],[0,{[v]:`SriovNetSupport`,[b]:BV}],[()=>tU,{[v]:`StateReason`,[b]:HV}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`VirtualizationType`,[b]:xH}],[0,{[v]:`BootMode`,[b]:hL}],[0,{[v]:`TpmSupport`,[b]:tH}],[0,{[v]:`DeprecationTime`,[b]:AR}],[0,{[v]:`ImdsSupport`,[b]:LEe}],[0,{[v]:`SourceInstanceId`,[b]:fke}],[0,{[v]:`DeregistrationProtection`,[b]:TR}],[0,{[v]:`LastLaunchedTime`,[b]:tDe}],[2,{[v]:`ImageAllowed`,[b]:oEe}],[0,{[v]:`SourceImageId`,[b]:MV}],[0,{[v]:`SourceImageRegion`,[b]:PV}],[2,{[v]:`FreeTierEligible`,[b]:Tz}],[0,{[v]:`PublicSsmParameterName`,[b]:yOe}],[()=>CLe,{[v]:`ImageWatermarkSet`,[b]:GEe}],[()=>uPe,{[v]:`InstanceTypeSpecification`,[b]:VEe}],[0,{[v]:`ImageId`,[b]:tB}],[0,{[v]:`ImageLocation`,[b]:mEe}],[0,{[v]:`ImageState`,[b]:IEe}],[0,{[v]:`ImageOwnerId`,[b]:yEe}],[0,{[v]:`CreationDate`,[b]:ML}],[2,{[v]:`IsPublic`,[b]:OEe}],[()=>jU,{[v]:`ProductCodes`,[b]:rV}],[0,{[v]:`Architecture`,[b]:iL}],[0,{[v]:`ImageType`,[b]:WEe}],[0,{[v]:`KernelId`,[b]:gB}],[0,{[v]:`RamdiskId`,[b]:xV}],[0,{[v]:`Platform`,[b]:mV}]]],ONe=[3,x,pT,0,[cI,QM,UM,VM,sI],[[0,{[v]:`WatermarkKey`,[b]:vAe}],[0,{[v]:`SourceImageRegion`,[b]:PV}],[0,{[v]:`SourceImageId`,[b]:MV}],[4,{[v]:`SourceImageCreationTime`,[b]:uke}],[4,{[v]:`WatermarkCreationTime`,[b]:_Ae}]]],kNe=[3,x,TC,0,[TT,yA,DP,g],[[0,{[v]:`KeyName`,[b]:vB}],[21,{[v]:`PublicKeyMaterial`,[b]:_Oe}],[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}]],2],ANe=[3,x,EC,0,[xT,TT,kT,sP],[[0,{[v]:`KeyFingerprint`,[b]:hB}],[0,{[v]:`KeyName`,[b]:vB}],[0,{[v]:`KeyPairId`,[b]:yB}],[()=>LU,{[v]:`TagSet`,[b]:eH}]]],jNe=[3,x,yS,0,[Kh,pP],[[()=>wLe,{[v]:`Accelerators`,[b]:tL}],[1,{[v]:`TotalInferenceMemoryInMiB`,[b]:Rke}]]],MNe=[3,x,FS,0,[l_,bO,mO,VD],[[1,{[v]:`Count`,[b]:sR}],[0,{[v]:`Name`,[b]:BB}],[0,{[v]:`Manufacturer`,[b]:LB}],[()=>NNe,{[v]:`MemoryInfo`,[b]:kB}]]],NNe=[3,x,LS,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],PNe=[3,x,gT,0,[Yh,tg,Jg,Ib,ax,fS,sC,kC,db,Tb,$O,fk,YA,XA,IM,_M,ZM,ON,LN,sP,XF,wg,Gwe,Dg,Ag,rS,_D,YD,Ub,ag,qk,QP,$P,Hk,TS,MP,XD,Xwe,nk,Dk,lN,tC,xC,nP,Vk,Kk,UN,TT,WCe,zk,$w,mD,IA,ST,pj,FA,yO,_N,SF,lA,dA],[[0,{[v]:`Architecture`,[b]:iL}],[()=>TLe,{[v]:`BlockDeviceMapping`,[b]:uL}],[0,{[v]:`ClientToken`,[b]:$L}],[2,{[v]:`EbsOptimized`,[b]:sz}],[2,{[v]:`EnaSupport`,[b]:vz}],[0,{[v]:`Hypervisor`,[b]:jz}],[()=>IH,{[v]:`IamInstanceProfile`,[b]:Qz}],[0,{[v]:`InstanceLifecycle`,[b]:hEe}],[()=>lLe,{[v]:`ElasticGpuAssociationSet`,[b]:JR}],[()=>pLe,{[v]:`ElasticInferenceAcceleratorAssociationSet`,[b]:tz}],[()=>jLe,{[v]:`NetworkInterfaceSet`,[b]:qB}],[0,{[v]:`OutpostArn`,[b]:$B}],[0,{[v]:`RootDeviceName`,[b]:yV}],[0,{[v]:`RootDeviceType`,[b]:bV}],[()=>yU,{[v]:`GroupSet`,[b]:Az}],[2,{[v]:`SourceDestCheck`,[b]:DV}],[0,{[v]:`SpotInstanceRequestId`,[b]:mke}],[0,{[v]:`SriovNetSupport`,[b]:BV}],[()=>tU,{[v]:`StateReason`,[b]:HV}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`VirtualizationType`,[b]:xH}],[()=>dje,{[v]:`CpuOptions`,[b]:UL}],[0,{[v]:`CapacityBlockId`,[b]:EL}],[0,{[v]:`CapacityReservationId`,[b]:KL}],[()=>oje,{[v]:`CapacityReservationSpecification`,[b]:YL}],[()=>TNe,{[v]:`HibernationOptions`,[b]:Pz}],[()=>fRe,{[v]:`LicenseSet`,[b]:xB}],[()=>qNe,{[v]:`MetadataOptions`,[b]:jB}],[()=>mNe,{[v]:`EnclaveOptions`,[b]:lz}],[0,{[v]:`BootMode`,[b]:hL}],[0,{[v]:`PlatformDetails`,[b]:oV}],[0,{[v]:`UsageOperation`,[b]:lH}],[4,{[v]:`UsageOperationUpdateTime`,[b]:Qke}],[()=>KFe,{[v]:`PrivateDnsNameOptions`,[b]:iV}],[0,{[v]:`Ipv6Address`,[b]:Wz}],[0,{[v]:`TpmSupport`,[b]:tH}],[()=>UNe,{[v]:`MaintenanceOptions`,[b]:MB}],[0,{[v]:`CurrentInstanceBootMode`,[b]:IL}],[()=>ZNe,{[v]:`NetworkPerformanceOptions`,[b]:JB}],[()=>qH,{[v]:`Operator`,[b]:nV}],[()=>PLe,{[v]:`SecondaryInterfaceSet`,[b]:FV}],[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`ImageId`,[b]:tB}],[()=>BH,{[v]:`InstanceState`,[b]:REe}],[0,{[v]:`PrivateDnsName`,[b]:aV}],[0,{[v]:`DnsName`,[b]:xR}],[0,{[v]:`Reason`,[b]:ZOe}],[0,{[v]:`KeyName`,[b]:vB}],[1,{[v]:`AmiLaunchIndex`,[b]:AI}],[()=>jU,{[v]:`ProductCodes`,[b]:rV}],[0,{[v]:`InstanceType`,[b]:dB}],[4,{[v]:`LaunchTime`,[b]:cDe}],[()=>JH,{[v]:`Placement`,[b]:hV}],[0,{[v]:`KernelId`,[b]:gB}],[0,{[v]:`RamdiskId`,[b]:xV}],[0,{[v]:`Platform`,[b]:mV}],[()=>EFe,{[v]:`Monitoring`,[b]:zB}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[0,{[v]:`IpAddress`,[b]:Uz}]]],FNe=[3,x,_S,0,[Xb,tx],[[2,{[v]:`EnaSrdEnabled`,[b]:pz}],[()=>INe,{[v]:`EnaSrdUdpSpecification`,[b]:gz}]]],INe=[3,x,vS,0,[ex],[[2,{[v]:`EnaSrdUdpEnabled`,[b]:hz}]]],LNe=[3,x,ES,0,[Ov,lx],[[0,{[v]:`DeviceName`,[b]:yR}],[()=>aNe,{[v]:`Ebs`,[b]:yz}]]],RNe=[3,x,OS,0,[Ov,lx,IF,kO],[[0,{[v]:`DeviceName`,[b]:yR}],[()=>oNe,{[v]:`Ebs`,[b]:yz}],[0,{[v]:`VirtualName`,[b]:gH}],[0,{[v]:`NoDevice`,[b]:UB}]]],zNe=[3,x,gC,0,[Tw],[[0,{[v]:`Ipv4Prefix`,[b]:sB}]]],BNe=[3,x,nC,0,[TS,sw],[[0,{[v]:`Ipv6Address`,[b]:Wz}],[2,{[v]:`IsPrimaryIpv6`,[b]:EEe}]]],VNe=[3,x,aC,0,[TS],[0]],HNe=[3,x,_C,0,[Sw],[[0,{[v]:`Ipv6Prefix`,[b]:cB}]]],UNe=[3,x,MC,0,[Ih,Tj],[[0,{[v]:`AutoRecovery`,[b]:VI}],[0,{[v]:`RebootMigration`,[b]:HOe}]]],WNe=[3,x,NC,0,[Ih],[0]],GNe=[3,x,PC,0,[oO,AN],[0,()=>xIe]],KNe=[3,x,FC,0,[lS,oS,tS,aS,zC],[0,1,0,0,0]],qNe=[3,x,IC,0,[nP,lS,oS,tS,aS,zC],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`HttpTokens`,[b]:Rz}],[1,{[v]:`HttpPutResponseHopLimit`,[b]:Iz}],[0,{[v]:`HttpEndpoint`,[b]:Mz}],[0,{[v]:`HttpProtocolIpv6`,[b]:Fz}],[0,{[v]:`InstanceMetadataTags`,[b]:nB}]]],JNe=[3,x,VC,0,[Xh,Zh,Gy,Ax,mS,SD,XO,hk,Vk,lA,uA,_M,rP,_N,SF,sT,ww,vw,Yg,Dk],[[()=>zH,{[v]:`Association`,[b]:aL}],[()=>YNe,{[v]:`Attachment`,[b]:oL}],[0,{[v]:`Description`,[b]:LR}],[()=>yU,{[v]:`GroupSet`,[b]:Az}],[()=>CU,{[v]:`Ipv6AddressesSet`,[b]:Hz}],[0,{[v]:`MacAddress`,[b]:EB}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`PrivateDnsName`,[b]:aV}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[()=>NLe,{[v]:`PrivateIpAddressesSet`,[b]:cV}],[2,{[v]:`SourceDestCheck`,[b]:DV}],[0,{[v]:`Status`,[b]:YV}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`InterfaceType`,[b]:pB}],[()=>DLe,{[v]:`Ipv4PrefixSet`,[b]:rB}],[()=>kLe,{[v]:`Ipv6PrefixSet`,[b]:iB}],[()=>cje,{[v]:`ConnectionTrackingConfiguration`,[b]:eR}],[()=>qH,{[v]:`Operator`,[b]:nV}]]],zH=[3,x,HC,0,[vg,Tg,QC,Kk,aA],[[0,{[v]:`CarrierIp`,[b]:FL}],[0,{[v]:`CustomerOwnedIp`,[b]:WL}],[0,{[v]:`IpOwnerId`,[b]:xEe}],[0,{[v]:`PublicDnsName`,[b]:oOe}],[0,{[v]:`PublicIp`,[b]:sV}]]],YNe=[3,x,UC,0,[Vh,Ah,Rv,A_,rP,TO,Zb,Gb],[[4,{[v]:`AttachTime`,[b]:ZI}],[0,{[v]:`AttachmentId`,[b]:kI}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[1,{[v]:`DeviceIndex`,[b]:_R}],[0,{[v]:`Status`,[b]:YV}],[1,{[v]:`NetworkCardIndex`,[b]:HB}],[()=>FNe,{[v]:`EnaSrdSpecification`,[b]:mz}],[1,{[v]:`EnaQueueCount`,[b]:uz}]]],XNe=[3,x,GC,0,[Ph,Rv,Gy,A_,Ax,gS,mS,XO,lA,uA,NN,_N,Ch,sT,TO,ww,nw,vw,tw,mA,Zb,Xg,Gb],[[2,{[v]:`AssociatePublicIpAddress`,[b]:FI}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[0,{[v]:`Description`,[b]:LR}],[1,{[v]:`DeviceIndex`,[b]:_R}],[()=>NU,{[b]:wM}],[1,{[v]:`Ipv6AddressCount`,[b]:Vz}],[()=>CU,{[v]:`Ipv6Addresses`,[b]:Hz}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[()=>AU,{[v]:`PrivateIpAddresses`,[b]:cV}],[1,{[v]:`SecondaryPrivateIpAddressCount`,[b]:VV}],[0,{[v]:`SubnetId`,[b]:LV}],2,0,1,[()=>EU,{[b]:Tw}],1,[()=>DU,{[b]:Sw}],1,2,()=>PH,()=>jH,1]],ZNe=[3,x,YC,0,[dg],[[0,{[v]:`BandwidthWeighting`,[b]:SL}]]],QNe=[3,x,XC,0,[dg],[0]],$Ne=[3,x,aw,0,[Xh,LA,Vk,lA],[[()=>zH,{[v]:`Association`,[b]:aL}],[2,{[v]:`Primary`,[b]:gV}],[0,{[v]:`PrivateDnsName`,[b]:aV}],[0,{[v]:`PrivateIpAddress`,[b]:lV}]]],ePe=[3,x,Aw,0,[lF,GD,Sg,FD,jb,$S,wN,mk,og,sg,oj,JO,$T,YT,yP,rg,Bh,Sh,jh,Nh,zh,CO,Th,rO,lg,QA],[[()=>IIe,{[v]:`VCpuCount`,[b]:eAe}],[()=>vFe,{[v]:`MemoryMiB`,[b]:yDe}],[()=>gU,{[v]:`CpuManufacturerSet`,[b]:VL}],[()=>hFe,{[v]:`MemoryGiBPerVCpu`,[b]:vDe}],[()=>_U,{[v]:`ExcludedInstanceTypeSet`,[b]:az}],[()=>xU,{[v]:`InstanceGenerationSet`,[b]:dEe}],[1,{[v]:`SpotMaxPricePercentageOverLowestPrice`,[b]:bke}],[1,{[v]:`OnDemandMaxPricePercentageOverLowestPrice`,[b]:KDe}],[0,{[v]:`BareMetal`,[b]:gL}],[0,{[v]:`BurstablePerformance`,[b]:_L}],[2,{[v]:`RequireHibernateSupport`,[b]:LOe}],[()=>NFe,{[v]:`NetworkInterfaceCount`,[b]:IDe}],[0,{[v]:`LocalStorage`,[b]:rDe}],[()=>OU,{[v]:`LocalStorageTypeSet`,[b]:nDe}],[()=>MIe,{[v]:`TotalLocalStorageGB`,[b]:Bke}],[()=>tje,{[v]:`BaselineEbsBandwidthMbps`,[b]:pL}],[()=>fU,{[v]:`AcceleratorTypeSet`,[b]:XI}],[()=>jAe,{[v]:`AcceleratorCount`,[b]:xI}],[()=>uU,{[v]:`AcceleratorManufacturerSet`,[b]:NI}],[()=>dU,{[v]:`AcceleratorNameSet`,[b]:PI}],[()=>NAe,{[v]:`AcceleratorTotalMemoryMiB`,[b]:YI}],[()=>kFe,{[v]:`NetworkBandwidthGbps`,[b]:ADe}],[()=>mU,{[v]:`AllowedInstanceTypeSet`,[b]:EI}],[1,{[v]:`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`,[b]:TDe}],[()=>rje,{[v]:`BaselinePerformanceFactors`,[b]:yL}],[2,{[v]:`RequireEncryptionInTransit`,[b]:jOe}]]],tPe=[3,x,kw,0,[lF,GD,Sg,FD,jb,$S,wN,mk,og,sg,oj,JO,$T,YT,yP,rg,Bh,Sh,jh,Nh,zh,CO,Th,rO,lg,QA],[()=>LIe,()=>yFe,[()=>gU,{[b]:pTe}],()=>gFe,[()=>_U,{[b]:Mb}],[()=>xU,{[b]:eC}],1,1,0,0,2,()=>PFe,0,[()=>OU,{[b]:ZT}],()=>NIe,()=>nje,[()=>fU,{[b]:gwe}],()=>MAe,[()=>uU,{[b]:JCe}],[()=>dU,{[b]:XCe}],()=>PAe,()=>AFe,[()=>mU,{[b]:HCe}],1,[()=>ije,0],2],2],nPe=[3,x,Kw,0,[Zh,SD,WM,hk,uA,_M,rP,VN,DN,sT],[[()=>rPe,{[v]:`Attachment`,[b]:oL}],[0,{[v]:`MacAddress`,[b]:EB}],[0,{[v]:`SecondaryInterfaceId`,[b]:pke}],[0,{[v]:`OwnerId`,[b]:eV}],[()=>FLe,{[v]:`PrivateIpAddressSet`,[b]:fOe}],[2,{[v]:`SourceDestCheck`,[b]:DV}],[0,{[v]:`Status`,[b]:YV}],[0,{[v]:`SecondarySubnetId`,[b]:GV}],[0,{[v]:`SecondaryNetworkId`,[b]:xke}],[0,{[v]:`InterfaceType`,[b]:pB}]]],rPe=[3,x,Lw,0,[Vh,Ah,Rv,A_,rP,TO],[[4,{[v]:`AttachTime`,[b]:ZI}],[0,{[v]:`AttachmentId`,[b]:kI}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[1,{[v]:`DeviceIndex`,[b]:_R}],[0,{[v]:`Status`,[b]:YV}],[1,{[v]:`NetworkCardIndex`,[b]:HB}]]],iPe=[3,x,zw,0,[lA],[[0,{[v]:`PrivateIpAddress`,[b]:lV}]]],aPe=[3,x,Hw,0,[lA],[0],1],oPe=[3,x,Gw,0,[Rv,A_,uA,oA,VN,sT,TO],[2,1,[()=>ILe,{[b]:lA}],1,0,0,1]],BH=[3,x,Xw,0,[s_,bO],[[1,{[v]:`Code`,[b]:aR}],[0,{[v]:`Name`,[b]:BB}]]],sPe=[3,x,Fw,0,[tC,qg,DA],[[0,{[v]:`InstanceId`,[b]:Zz}],[()=>BH,{[v]:`CurrentState`,[b]:QL}],[()=>BH,{[v]:`PreviousState`,[b]:xOe}]]],cPe=[3,x,qw,0,[OP,qy,ak,ix],[[1,{[v]:`TotalSizeInGB`,[b]:Wke}],[()=>sLe,{[v]:`Disks`,[b]:zR}],[0,{[v]:`NvmeSupport`,[b]:XB}],[0,{[v]:`EncryptionSupport`,[b]:_z}]]],lPe=[3,x,tT,0,[$w,Ywe,Ex,qN,FN,ZN,og,fS,gA,fF,VD,Jw,qw,Nb,ek,Hx,bx,tA,yS,cS,zwe,k_,$Ce,mM,FO,sk,ok,xD,tk,EA,wj,rN],[[0,{[v]:`InstanceType`,[b]:dB}],[2,{[v]:`CurrentGeneration`,[b]:PL}],[2,{[v]:`FreeTierEligible`,[b]:Tz}],[()=>QRe,{[v]:`SupportedUsageClasses`,[b]:kke}],[()=>FRe,{[v]:`SupportedRootDeviceTypes`,[b]:wke}],[()=>eze,{[v]:`SupportedVirtualizationTypes`,[b]:jke}],[2,{[v]:`BareMetal`,[b]:gL}],[0,{[v]:`Hypervisor`,[b]:jz}],[()=>JFe,{[v]:`ProcessorInfo`,[b]:pOe}],[()=>RIe,{[v]:`VCpuInfo`,[b]:tAe}],[()=>_Fe,{[v]:`MemoryInfo`,[b]:kB}],[2,{[v]:`InstanceStorageSupported`,[b]:PEe}],[()=>cPe,{[v]:`InstanceStorageInfo`,[b]:NEe}],[()=>iNe,{[v]:`EbsInfo`,[b]:oz}],[()=>MFe,{[v]:`NetworkInfo`,[b]:zDe}],[()=>CNe,{[v]:`GpuInfo`,[b]:qTe}],[()=>vNe,{[v]:`FpgaInfo`,[b]:BTe}],[()=>HFe,{[v]:`PlacementGroupInfo`,[b]:cOe}],[()=>jNe,{[v]:`InferenceAcceleratorInfo`,[b]:nEe}],[2,{[v]:`HibernationSupported`,[b]:eEe}],[2,{[v]:`BurstablePerformanceSupported`,[b]:bL}],[2,{[v]:`DedicatedHostsSupported`,[b]:gR}],[2,{[v]:`AutoRecoverySupported`,[b]:RI}],[()=>nLe,{[v]:`SupportedBootModes`,[b]:tke}],[0,{[v]:`NitroEnclavesSupport`,[b]:NDe}],[0,{[v]:`NitroTpmSupport`,[b]:UDe}],[()=>zFe,{[v]:`NitroTpmInfo`,[b]:HDe}],[()=>fFe,{[v]:`MediaAcceleratorInfo`,[b]:dDe}],[()=>RFe,{[v]:`NeuronInfo`,[b]:BDe}],[0,{[v]:`PhcSupport`,[b]:bOe}],[0,{[v]:`RebootMigrationSupport`,[b]:VOe}],[2,{[v]:`SupportedInRegion`,[b]:hke}]]],VH=[3,x,nT,0,[$w],[[0,{[v]:`InstanceType`,[b]:dB}]]],uPe=[3,x,rT,0,[oN,XP],[[()=>YRe,{[v]:`SupportedInstanceTypeSet`,[b]:_ke}],[()=>ZRe,{[v]:`UnsupportedInstanceTypeSet`,[b]:Zke}]]],HH=[3,x,HS,0,[Qh,qS,hk,sP],[[()=>zLe,{[v]:`AttachmentSet`,[b]:qI}],[0,{[v]:`InternetGatewayId`,[b]:Xz}],[0,{[v]:`OwnerId`,[b]:eV}],[()=>LU,{[v]:`TagSet`,[b]:eH}]]],dPe=[3,x,US,0,[nP,SF],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`VpcId`,[b]:pH}]]],fPe=[3,x,bw,0,[xw,Cx,wP,KP,jw,Nw,SA],[[0,{[v]:`IpProtocol`,[b]:aB}],[1,{[v]:`FromPort`,[b]:wz}],[1,{[v]:`ToPort`,[b]:QV}],[()=>$Re,{[v]:`Groups`,[b]:QTe}],[()=>ULe,{[v]:`IpRanges`,[b]:jEe}],[()=>KLe,{[v]:`Ipv6Ranges`,[b]:MEe}],[()=>ORe,{[v]:`PrefixListIds`,[b]:vOe}]]],pPe=[3,x,Mw,0,[Gy,yg],[[0,{[v]:`Description`,[b]:LR}],[0,{[v]:`CidrIp`,[b]:LL}]]],mPe=[3,x,mw,0,[Tw],[0]],hPe=[3,x,hw,0,[Tw],[[0,{[v]:`Ipv4Prefix`,[b]:sB}]]],gPe=[3,x,gw,0,[Sw],[0]],_Pe=[3,x,_w,0,[Sw],[[0,{[v]:`Ipv6Prefix`,[b]:cB}]]],vPe=[3,x,Pw,0,[Gy,bg],[[0,{[v]:`Description`,[b]:LR}],[0,{[v]:`CidrIpv6`,[b]:RL}]]],yPe=[3,x,PT,0,[kT,sP,TT,xT,wT],[[0,{[v]:`KeyPairId`,[b]:yB}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`KeyName`,[b]:vB}],[0,{[v]:`KeyFingerprint`,[b]:hB}],[()=>wH,{[v]:`KeyMaterial`,[b]:qEe}]]],bPe=[3,x,MT,0,[kT,FT,sP,vA,t_,TT,xT],[[0,{[v]:`KeyPairId`,[b]:yB}],[0,{[v]:`KeyType`,[b]:YEe}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`PublicKey`,[b]:gOe}],[4,{[v]:`CreateTime`,[b]:iR}],[0,{[v]:`KeyName`,[b]:vB}],[0,{[v]:`KeyFingerprint`,[b]:hB}]]],UH=[3,x,eE,0,[SE,qE,t_,pg,jy,hD,sP,Dk],[[0,{[v]:`LaunchTemplateId`,[b]:CB}],[0,{[v]:`LaunchTemplateName`,[b]:wB}],[4,{[v]:`CreateTime`,[b]:iR}],[0,{[v]:`CreatedBy`,[b]:OL}],[1,{[v]:`DefaultVersionNumber`,[b]:FR}],[1,{[v]:`LatestVersionNumber`,[b]:lDe}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[()=>qH,{[v]:`Operator`,[b]:nV}]]],xPe=[3,x,tE,0,[Ov,IF,lx,kO],[[0,{[v]:`DeviceName`,[b]:yR}],[0,{[v]:`VirtualName`,[b]:gH}],[()=>DPe,{[v]:`Ebs`,[b]:yz}],[0,{[v]:`NoDevice`,[b]:UB}]]],SPe=[3,x,rE,0,[Ov,IF,lx,kO],[0,0,()=>OPe,0]],CPe=[3,x,sE,0,[Og,jg],[0,()=>kH]],wPe=[3,x,cE,0,[Og,jg],[[0,{[v]:`CapacityReservationPreference`,[b]:qL}],[()=>AH,{[v]:`CapacityReservationTarget`,[b]:XL}]]],TPe=[3,x,aE,0,[mg,TP,Lh,uk],[[1,{[v]:`CoreCount`,[b]:kL}],[1,{[v]:`ThreadsPerCore`,[b]:$V}],[0,{[v]:`AmdSevSnp`,[b]:WI}],[0,{[v]:`NestedVirtualization`,[b]:QB}]]],EPe=[3,x,oE,0,[mg,TP,Lh,uk],[1,1,0,0]],DPe=[3,x,uE,0,[dx,Rv,vT,CT,dN,KF,qF,RP,TF,Qy],[[2,{[v]:`Encrypted`,[b]:xz}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[1,{[v]:`Iops`,[b]:mB}],[0,{[v]:`KmsKeyId`,[b]:_B}],[0,{[v]:`SnapshotId`,[b]:IV}],[1,{[v]:`VolumeSize`,[b]:yH}],[0,{[v]:`VolumeType`,[b]:bH}],[1,{[v]:`Throughput`,[b]:rH}],[1,{[v]:`VolumeInitializationRate`,[b]:mH}],[1,{[v]:`EbsCardIndex`,[b]:VR}]]],OPe=[3,x,dE,0,[dx,Rv,vT,CT,dN,KF,qF,RP,TF,Qy],[2,2,1,0,0,1,0,1,1,1]],kPe=[3,x,fE,0,[BP,l_],[0,1],1],APe=[3,x,mE,0,[BP,l_],[[0,{[v]:`Type`,[b]:aH}],[1,{[v]:`Count`,[b]:sR}]]],jPe=[3,x,vE,0,[Xb,tx],[[2,{[v]:`EnaSrdEnabled`,[b]:pz}],[()=>MPe,{[v]:`EnaSrdUdpSpecification`,[b]:gz}]]],MPe=[3,x,yE,0,[ex],[[2,{[v]:`EnaSrdUdpEnabled`,[b]:hz}]]],NPe=[3,x,gE,0,[ux],[[2,{[v]:`Enabled`,[b]:bz}]]],PPe=[3,x,_E,0,[ux],[2]],FPe=[3,x,bE,0,[c_],[[2,{[v]:`Configured`,[b]:oR}]]],IPe=[3,x,xE,0,[c_],[2]],LPe=[3,x,CE,0,[Jh,bO],[[0,{[v]:`Arn`,[b]:rL}],[0,{[v]:`Name`,[b]:BB}]]],RPe=[3,x,wE,0,[Jh,bO],[0,0]],zPe=[3,x,TE,0,[Ih],[[0,{[v]:`AutoRecovery`,[b]:VI}]]],BPe=[3,x,EE,0,[Ih],[0]],VPe=[3,x,kE,0,[oO,AN],[[0,{[v]:`MarketType`,[b]:EDe}],[()=>oFe,{[v]:`SpotOptions`,[b]:Cke}]]],HPe=[3,x,DE,0,[oO,AN],[0,()=>sFe]],UPe=[3,x,AE,0,[nP,lS,oS,tS,aS,zC],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`HttpTokens`,[b]:Rz}],[1,{[v]:`HttpPutResponseHopLimit`,[b]:Iz}],[0,{[v]:`HttpEndpoint`,[b]:Mz}],[0,{[v]:`HttpProtocolIpv6`,[b]:Fz}],[0,{[v]:`InstanceMetadataTags`,[b]:nB}]]],WPe=[3,x,OE,0,[lS,oS,tS,aS,zC],[0,1,0,0,0]],GPe=[3,x,jE,0,[Ch,Ph,Rv,Gy,A_,Ax,sT,gS,mS,XO,lA,uA,NN,_N,TO,ww,nw,vw,tw,mA,Zb,Xg,Gb],[[2,{[v]:`AssociateCarrierIpAddress`,[b]:bI}],[2,{[v]:`AssociatePublicIpAddress`,[b]:FI}],[2,{[v]:`DeleteOnTermination`,[b]:CR}],[0,{[v]:`Description`,[b]:LR}],[1,{[v]:`DeviceIndex`,[b]:_R}],[()=>bU,{[v]:`GroupSet`,[b]:Az}],[0,{[v]:`InterfaceType`,[b]:pB}],[1,{[v]:`Ipv6AddressCount`,[b]:Vz}],[()=>CU,{[v]:`Ipv6AddressesSet`,[b]:Hz}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[()=>AU,{[v]:`PrivateIpAddressesSet`,[b]:cV}],[1,{[v]:`SecondaryPrivateIpAddressCount`,[b]:VV}],[0,{[v]:`SubnetId`,[b]:LV}],[1,{[v]:`NetworkCardIndex`,[b]:HB}],[()=>WLe,{[v]:`Ipv4PrefixSet`,[b]:rB}],[1,{[v]:`Ipv4PrefixCount`,[b]:CEe}],[()=>GLe,{[v]:`Ipv6PrefixSet`,[b]:iB}],[1,{[v]:`Ipv6PrefixCount`,[b]:wEe}],[2,{[v]:`PrimaryIpv6`,[b]:mOe}],[()=>jPe,{[v]:`EnaSrdSpecification`,[b]:mz}],[()=>sje,{[v]:`ConnectionTrackingSpecification`,[b]:tR}],[1,{[v]:`EnaQueueCount`,[b]:uz}]]],KPe=[3,x,NE,0,[Ch,Ph,Rv,Gy,A_,Ax,sT,gS,mS,XO,lA,uA,NN,_N,TO,ww,nw,vw,tw,mA,Zb,Xg,Gb],[2,2,2,0,1,[()=>NU,{[b]:wM}],0,1,[()=>OLe,0],0,0,[()=>AU,0],1,0,1,[()=>EU,{[b]:Tw}],1,[()=>DU,{[b]:Sw}],1,2,()=>PH,()=>jH,1]],qPe=[3,x,FE,0,[Rv,A_,uA,oA,VN,sT,TO],[[2,{[v]:`DeleteOnTermination`,[b]:CR}],[1,{[v]:`DeviceIndex`,[b]:_R}],[()=>BRe,{[v]:`PrivateIpAddressesSet`,[b]:cV}],[1,{[v]:`PrivateIpAddressCount`,[b]:dOe}],[0,{[v]:`SecondarySubnetId`,[b]:GV}],[0,{[v]:`InterfaceType`,[b]:pB}],[1,{[v]:`NetworkCardIndex`,[b]:HB}]]],JPe=[3,x,LE,0,[Rv,A_,uA,oA,VN,sT,TO],[2,1,[()=>VRe,{[b]:lA}],1,0,0,1]],YPe=[3,x,VE,0,[RT],[[0,{[v]:`LicenseConfigurationArn`,[b]:bB}]]],XPe=[3,x,HE,0,[RT],[0]],ZPe=[3,x,JE,0,[dg],[[0,{[v]:`BandwidthWeighting`,[b]:SL}]]],QPe=[3,x,YE,0,[dg],[0]],$Pe=[3,x,QE,0,[Hh,Gh,qh,qx,nS,LP,bM,sS,CA,Ux],[[0,{[v]:`AvailabilityZone`,[b]:QI}],[0,{[v]:`AvailabilityZoneId`,[b]:$I}],[0,{[v]:`Affinity`,[b]:nL}],[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`HostId`,[b]:Nz}],[0,{[v]:`Tenancy`,[b]:nH}],[0,{[v]:`SpreadDomain`,[b]:OV}],[0,{[v]:`HostResourceGroupArn`,[b]:Lz}],[1,{[v]:`PartitionNumber`,[b]:fV}],[0,{[v]:`GroupId`,[b]:Dz}]]],eFe=[3,x,tD,0,[Hh,Gh,qh,qx,nS,LP,bM,sS,CA,Ux],[0,0,0,0,0,0,0,0,1,0]],tFe=[3,x,$E,0,[uS,Jb,Kb],[[0,{[v]:`HostnameType`,[b]:zz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:fz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:dz}]]],nFe=[3,x,eD,0,[uS,Jb,Kb],[0,2,2]],rFe=[3,x,GE,0,[ux],[[2,{[v]:`Enabled`,[b]:bz}]]],iFe=[3,x,KE,0,[ux],[2]],aFe=[3,x,nD,0,[SE,qE,tI],[0,0,0]],oFe=[3,x,rD,0,[QD,cN,ng,ZF,oC],[[0,{[v]:`MaxPrice`,[b]:xDe}],[0,{[v]:`SpotInstanceType`,[b]:gke}],[1,{[v]:`BlockDurationMinutes`,[b]:fL}],[4,{[v]:`ValidUntil`,[b]:mAe}],[0,{[v]:`InstanceInterruptionBehavior`,[b]:fEe}]]],sFe=[3,x,iD,0,[QD,cN,ng,ZF,oC],[0,0,1,4,0]],cFe=[3,x,oD,0,[qj,sP],[[0,{[v]:`ResourceType`,[b]:TV}],[()=>LU,{[v]:`TagSet`,[b]:eH}]]],lFe=[3,x,cD,0,[qj,sP],[0,[()=>LU,{[b]:IP}]]],WH=[3,x,uD,0,[SE,qE,LF,mF,t_,pg,zy,lE,Dk],[[0,{[v]:`LaunchTemplateId`,[b]:CB}],[0,{[v]:`LaunchTemplateName`,[b]:wB}],[1,{[v]:`VersionNumber`,[b]:_H}],[0,{[v]:`VersionDescription`,[b]:rAe}],[4,{[v]:`CreateTime`,[b]:iR}],[0,{[v]:`CreatedBy`,[b]:OL}],[2,{[v]:`DefaultVersion`,[b]:IR}],[()=>oIe,{[v]:`LaunchTemplateData`,[b]:iDe}],[()=>qH,{[v]:`Operator`,[b]:nV}]]],uFe=[3,x,BT,0,[RT],[[0,{[v]:`LicenseConfigurationArn`,[b]:bB}]]],dFe=[3,x,zT,0,[RT],[0]],fFe=[3,x,xD,0,[Kh,SP],[[()=>mRe,{[v]:`Accelerators`,[b]:tL}],[1,{[v]:`TotalMediaMemoryInMiB`,[b]:Hke}]]],pFe=[3,x,DD,0,[l_,bO,mO,VD],[[1,{[v]:`Count`,[b]:sR}],[0,{[v]:`Name`,[b]:BB}],[0,{[v]:`Manufacturer`,[b]:LB}],[()=>mFe,{[v]:`MemoryInfo`,[b]:kB}]]],mFe=[3,x,kD,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],hFe=[3,x,FD,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],gFe=[3,x,ID,0,[yD,fO],[1,1]],_Fe=[3,x,VD,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],vFe=[3,x,GD,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],yFe=[3,x,KD,0,[yD,fO],[1,1],1],bFe=[3,x,RD,0,[tC,_M,Ub,h_,g,Awe,nF,tg,g_,$w,IT,Zj,WP,vC,Ax,Ib,ON,ax],[[0,{[v]:`InstanceId`,[b]:Zz}],[()=>TH,0],()=>FH,[()=>TH,0],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Attribute`,[b]:sL}],[()=>OAe,{[v]:`Value`,[b]:fH}],[()=>ELe,{[v]:`BlockDeviceMapping`,[b]:uL}],[()=>TH,{[v]:`DisableApiTermination`,[b]:uR}],[()=>EH,{[v]:`InstanceType`,[b]:dB}],[()=>EH,{[v]:`Kernel`,[b]:XEe}],[()=>EH,{[v]:`Ramdisk`,[b]:XOe}],[()=>vIe,{[v]:`UserData`,[b]:oH}],[()=>EH,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:eB}],[()=>bU,{[b]:Ux}],[()=>TH,{[v]:`EbsOptimized`,[b]:sz}],[()=>EH,{[v]:`SriovNetSupport`,[b]:BV}],[()=>TH,{[v]:`EnaSupport`,[b]:vz}]],1],xFe=[3,x,UD,0,[g,Jg,SE,qE,zy],[2,[0,4],0,0,[0,{[b]:yM}]]],SFe=[3,x,WD,0,[eE],[[()=>UH,{[v]:`LaunchTemplate`,[b]:SB}]]],CFe=[3,x,eO,0,[_N,wh,ZD,wD,Eg,rb,Bk,Yb,qb,Fb,dv],[[0,{[v]:`SubnetId`,[b]:LV}],[()=>TH,0],[()=>TH,0],[()=>TH,0],0,[()=>TH,0],0,[()=>TH,0],[()=>TH,0],1,[()=>TH,0]],1],wFe=[3,x,cO,0,[OF,g,$N,qF,vT,RP,bD],[0,2,1,0,1,1,2],1],TFe=[3,x,lO,0,[FF],[[()=>zIe,{[v]:`VolumeModification`,[b]:sAe}]]],EFe=[3,x,yO,0,[nP],[[0,{[v]:`State`,[b]:JV}]]],GH=[3,x,IO,0,[t_,Dy,hx,Sx,LO,UO,Mk,nP,_N,SF,sP,e_,Mh,dwe,QCe,kCe,Uj],[[4,{[v]:`CreateTime`,[b]:iR}],[4,{[v]:`DeleteTime`,[b]:jR}],[0,{[v]:`FailureCode`,[b]:Sz}],[0,{[v]:`FailureMessage`,[b]:Cz}],[()=>hRe,{[v]:`NatGatewayAddressSet`,[b]:PDe}],[0,{[v]:`NatGatewayId`,[b]:GB}],[()=>ZFe,{[v]:`ProvisionedBandwidth`,[b]:tOe}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`VpcId`,[b]:pH}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`ConnectivityType`,[b]:rR}],[0,{[v]:`AvailabilityMode`,[b]:MI}],[0,{[v]:`AutoScalingIps`,[b]:UI}],[0,{[v]:`AutoProvisionZones`,[b]:LI}],[()=>gRe,{[v]:`AttachedApplianceSet`,[b]:vI}],[0,{[v]:`RouteTableId`,[b]:wV}]]],DFe=[3,x,VO,0,[Dh,XO,hA,aA,kh,Ew,Sx,rP,Hh,Gh],[[0,{[v]:`AllocationId`,[b]:CI}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`PrivateIp`,[b]:hOe}],[0,{[v]:`PublicIp`,[b]:sV}],[0,{[v]:`AssociationId`,[b]:OI}],[2,{[v]:`IsPrimary`,[b]:kEe}],[0,{[v]:`FailureMessage`,[b]:Cz}],[0,{[v]:`Status`,[b]:YV}],[0,{[v]:`AvailabilityZone`,[b]:QI}],[0,{[v]:`AvailabilityZoneId`,[b]:$I}]]],OFe=[3,x,RO,0,[BP,DCe,bF,fwe,iO,hx,Sx],[[0,{[v]:`Type`,[b]:aH}],[0,{[v]:`ApplianceArn`,[b]:yI}],[0,{[v]:`VpcEndpointId`,[b]:aAe}],[0,{[v]:`AttachmentState`,[b]:JI}],[0,{[v]:`ModificationState`,[b]:PB}],[0,{[v]:`FailureCode`,[b]:Sz}],[0,{[v]:`FailureMessage`,[b]:Cz}]]],kFe=[3,x,CO,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],AFe=[3,x,SO,0,[yD,fO],[1,1]],jFe=[3,x,OO,0,[TO,rk,JD,MCe,jwe,Nk,D_,ND,PD,cT],[[1,{[v]:`NetworkCardIndex`,[b]:HB}],[0,{[v]:`NetworkPerformance`,[b]:YB}],[1,{[v]:`MaximumNetworkInterfaces`,[b]:AB}],[1,{[v]:`AdditionalFlexibleNetworkInterfaces`,[b]:SI}],[1,{[v]:`BaselineBandwidthInGbps`,[b]:cL}],[1,{[v]:`PeakBandwidthInGbps`,[b]:nOe}],[1,{[v]:`DefaultEnaQueueCountPerInterface`,[b]:mR}],[1,{[v]:`MaximumEnaQueueCount`,[b]:gDe}],[1,{[v]:`MaximumEnaQueueCountPerInterface`,[b]:_De}],[()=>bRe,{[v]:`InterfaceTypeSet`,[b]:HEe}]]],MFe=[3,x,ek,0,[rk,JD,qD,kv,wO,bS,xS,Qw,ax,rx,Pb,kb,$b,Uwe,yx,Yg,kN,nO,SS],[[0,{[v]:`NetworkPerformance`,[b]:YB}],[1,{[v]:`MaximumNetworkInterfaces`,[b]:AB}],[1,{[v]:`MaximumNetworkCards`,[b]:bDe}],[1,{[v]:`DefaultNetworkCardIndex`,[b]:bR}],[()=>yRe,{[v]:`NetworkCards`,[b]:jDe}],[1,{[v]:`Ipv4AddressesPerInterface`,[b]:rEe}],[1,{[v]:`Ipv6AddressesPerInterface`,[b]:iEe}],[2,{[v]:`Ipv6Supported`,[b]:zEe}],[0,{[v]:`EnaSupport`,[b]:vz}],[2,{[v]:`EfaSupported`,[b]:ITe}],[()=>cNe,{[v]:`EfaInfo`,[b]:ATe}],[2,{[v]:`EncryptionInTransitSupported`,[b]:iz}],[2,{[v]:`EnaSrdSupported`,[b]:FTe}],[()=>$Ie,{[v]:`BandwidthWeightings`,[b]:CL}],[0,{[v]:`FlexibleEnaQueuesSupport`,[b]:zTe}],[()=>Vje,{[v]:`ConnectionTrackingConfiguration`,[b]:eR}],[2,{[v]:`SecondaryNetworkSupported`,[b]:Ske}],[1,{[v]:`MaximumSecondaryNetworkInterfaces`,[b]:wDe}],[1,{[v]:`Ipv4AddressesPerSecondaryInterface`,[b]:aEe}]]],NFe=[3,x,JO,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],PFe=[3,x,YO,0,[yD,fO],[1,1]],FFe=[3,x,AO,0,[l_,tI],[[1,{[v]:`Count`,[b]:sR}],[1,{[v]:`Version`,[b]:hAe}]]],IFe=[3,x,jO,0,[l_,bO,nTe,VD],[[1,{[v]:`Count`,[b]:sR}],[0,{[v]:`Name`,[b]:BB}],[()=>FFe,{[v]:`CoreInfo`,[b]:BL}],[()=>LFe,{[v]:`MemoryInfo`,[b]:kB}]]],LFe=[3,x,NO,0,[KM],[[1,{[v]:`SizeInMiB`,[b]:NV}]]],RFe=[3,x,tk,0,[PO,CP],[[()=>xRe,{[v]:`NeuronDevices`,[b]:MDe}],[1,{[v]:`TotalNeuronDeviceMemoryInMiB`,[b]:Uke}]]],zFe=[3,x,ok,0,[QN],[[()=>SRe,{[v]:`SupportedVersions`,[b]:Mke}]]],KH=[3,x,xk,0,[jk],[0]],qH=[3,x,Sk,0,[hO,jk,eS],[[2,{[v]:`Managed`,[b]:ODe}],[0,{[v]:`Principal`,[b]:eOe}],[2,{[v]:`HiddenByDefault`,[b]:$Te}]]],BFe=[3,x,Jk,0,[VS],[[0,{[v]:`InstanceFamily`,[b]:cEe}]]],VFe=[3,x,Yk,0,[VS],[0]],JH=[3,x,IA,0,[Gh,qh,qx,CA,nS,LP,bM,sS,Ux,Hh],[[0,{[v]:`AvailabilityZoneId`,[b]:$I}],[0,{[v]:`Affinity`,[b]:nL}],[0,{[v]:`GroupName`,[b]:Oz}],[1,{[v]:`PartitionNumber`,[b]:fV}],[0,{[v]:`HostId`,[b]:Nz}],[0,{[v]:`Tenancy`,[b]:nH}],[0,{[v]:`SpreadDomain`,[b]:OV}],[0,{[v]:`HostResourceGroupArn`,[b]:Lz}],[0,{[v]:`GroupId`,[b]:Dz}],[0,{[v]:`AvailabilityZone`,[b]:QI}]]],YH=[3,x,Qk,0,[qx,nP,iP,Lk,Ux,sP,jx,bN,WT,Dk,$k],[[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`Strategy`,[b]:XV}],[1,{[v]:`PartitionCount`,[b]:rOe}],[0,{[v]:`GroupId`,[b]:Dz}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`GroupArn`,[b]:GTe}],[0,{[v]:`SpreadLevel`,[b]:vke}],[0,{[v]:`LinkedGroupId`,[b]:eDe}],[()=>qH,{[v]:`Operator`,[b]:nV}],[0,{[v]:`ParentGroupId`,[b]:lOe}]]],HFe=[3,x,tA,0,[HN],[[()=>DRe,{[v]:`SupportedStrategies`,[b]:Dke}]]],UFe=[3,x,bA,0,[Gy,bA],[[0,{[v]:`Description`,[b]:LR}],[0,{[v]:`PrefixListId`,[b]:dV}]]],WFe=[3,x,Uk,0,[uS,Jb,Kb],[[0,{[v]:`HostnameType`,[b]:zz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:fz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:dz}]]],GFe=[3,x,Wk,0,[uS,Jb,Kb],[0,2,2]],KFe=[3,x,Gk,0,[uS,Jb,Kb],[[0,{[v]:`HostnameType`,[b]:zz}],[2,{[v]:`EnableResourceNameDnsARecord`,[b]:fz}],[2,{[v]:`EnableResourceNameDnsAAAARecord`,[b]:dz}]]],qFe=[3,x,sA,0,[LA,lA],[[2,{[v]:`Primary`,[b]:gV}],[0,{[v]:`PrivateIpAddress`,[b]:lV}]]],JFe=[3,x,gA,0,[dM,gM,xM,mO],[[()=>KIe,{[v]:`SupportedArchitectures`,[b]:$Oe}],[1,{[v]:`SustainedClockSpeedInGhz`,[b]:nke}],[()=>JRe,{[v]:`SupportedFeatures`,[b]:ike}],[0,{[v]:`Manufacturer`,[b]:LB}]]],YFe=[3,x,Rk,0,[Pk,Ik],[[0,{[v]:`ProductCode`,[b]:iOe}],[0,{[v]:`Type`,[b]:aH}]]],XFe=[3,x,AA,0,[zx],[[0,{[v]:`GatewayId`,[b]:Ez}]]],ZFe=[3,x,Mk,0,[OA,zA,Jj,nM,rP],[[4,{[v]:`ProvisionTime`,[b]:SOe}],[0,{[v]:`Provisioned`,[b]:DOe}],[4,{[v]:`RequestTime`,[b]:JOe}],[0,{[v]:`Requested`,[b]:QOe}],[0,{[v]:`Status`,[b]:YV}]]],QFe=[3,x,cj,0,[CC,g],[[()=>SU,{[b]:tC}],[2,{[v]:`DryRun`,[b]:_}]],1],$Fe=[3,x,kj,0,[Ux,TA,GP,SF,BF],[[0,{[v]:`GroupId`,[b]:Dz}],[0,{[v]:`PeeringStatus`,[b]:pV}],[0,{[v]:`UserId`,[b]:sH}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`VpcPeeringConnectionId`,[b]:vH}]]],eIe=[3,x,tM,0,[gk,Qx,Ej,fx],[[0,{[v]:`OptInStatus`,[b]:tV}],[()=>jRe,{[v]:`GeographySet`,[b]:kz}],[0,{[v]:`RegionName`,[b]:SV}],[0,{[v]:`RegionEndpoint`,[b]:NOe}]]],tIe=[3,x,nj,0,[bO],[[0,{[v]:`Name`,[b]:BB}]]],nIe=[3,x,lj,0,[bO,DC,Bwe,ag,MP,HP,Yw,DP,g,Gy,Yh,ST,pj,YA,tg,XF,ON,ax],[[0,{[v]:`Name`,[b]:BB}],0,[()=>eLe,{[b]:Vwe}],0,0,[()=>DAe,0],0,[()=>RU,{[b]:AP}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`Description`,[b]:LR}],[0,{[v]:`Architecture`,[b]:iL}],[0,{[v]:`KernelId`,[b]:gB}],[0,{[v]:`RamdiskId`,[b]:xV}],[0,{[v]:`RootDeviceName`,[b]:yV}],[()=>hU,{[b]:eg}],[0,{[v]:`VirtualizationType`,[b]:xH}],[0,{[v]:`SriovNetSupport`,[b]:BV}],[2,{[v]:`EnaSupport`,[b]:vz}]],1],rIe=[3,x,uj,0,[xC],[[0,{[v]:`ImageId`,[b]:tB}]]],iIe=[3,x,HA,0,[Dh,aA,xO,g],[0,0,0,[2,{[v]:`DryRun`,[b]:_}]]],XH=[3,x,bj,0,[ST,Ib,sC,tg,$O,xC,$w,TT,yO,IA,JA,g_,vC,WP,DP,_b,Eb,EM,IM,LC,Wg,wg,Ag,qT,rS,YD,Ub,Aw,Hk,XD,h_,Dk,nk,lN],[0,2,()=>RPe,[()=>ZLe,{[b]:eg}],[()=>nRe,{[b]:QO}],0,0,0,()=>iFe,()=>eFe,0,2,0,[()=>wH,0],[()=>uRe,{[b]:AP}],[()=>uLe,{[b]:gb}],[()=>QLe,{[b]:vb}],[()=>NU,{[b]:wM}],[()=>IU,{[b]:LM}],()=>HPe,()=>MH,()=>EPe,()=>CPe,[()=>oRe,{[b]:QT}],()=>IPe,()=>WPe,()=>PPe,[()=>tPe,0],()=>nFe,()=>BPe,2,()=>KH,()=>QPe,[()=>iRe,{[b]:uN}]]],ZH=[3,x,iM,0,[mj,hk,_j,Ax,_T],[[0,{[v]:`ReservationId`,[b]:ROe}],[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`RequesterId`,[b]:BOe}],[()=>yU,{[v]:`GroupSet`,[b]:Az}],[()=>ALe,{[v]:`InstancesSet`,[b]:lB}]]],aIe=[3,x,ej,0,[s_,gO],[[0,{[v]:`Code`,[b]:aR}],[0,{[v]:`Message`,[b]:RB}]]],oIe=[3,x,xj,0,[ST,Ib,sC,tg,$O,xC,$w,TT,yO,IA,JA,g_,vC,WP,DP,_b,Eb,EM,IM,LC,Wg,wg,Ag,qT,rS,YD,Ub,Aw,Hk,XD,h_,Dk,nk,lN],[[0,{[v]:`KernelId`,[b]:gB}],[2,{[v]:`EbsOptimized`,[b]:sz}],[()=>LPe,{[v]:`IamInstanceProfile`,[b]:Qz}],[()=>XLe,{[v]:`BlockDeviceMappingSet`,[b]:dL}],[()=>tRe,{[v]:`NetworkInterfaceSet`,[b]:qB}],[0,{[v]:`ImageId`,[b]:tB}],[0,{[v]:`InstanceType`,[b]:dB}],[0,{[v]:`KeyName`,[b]:vB}],[()=>rFe,{[v]:`Monitoring`,[b]:zB}],[()=>$Pe,{[v]:`Placement`,[b]:hV}],[0,{[v]:`RamDiskId`,[b]:kOe}],[2,{[v]:`DisableApiTermination`,[b]:uR}],[0,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:eB}],[()=>wH,{[v]:`UserData`,[b]:oH}],[()=>lRe,{[v]:`TagSpecificationSet`,[b]:Gke}],[()=>dLe,{[v]:`ElasticGpuSpecificationSet`,[b]:ZR}],[()=>$Le,{[v]:`ElasticInferenceAcceleratorSet`,[b]:rz}],[()=>zU,{[v]:`SecurityGroupIdSet`,[b]:ake}],[()=>zU,{[v]:`SecurityGroupSet`,[b]:lke}],[()=>VPe,{[v]:`InstanceMarketOptions`,[b]:gEe}],[()=>Bje,{[v]:`CreditSpecification`,[b]:ZL}],[()=>TPe,{[v]:`CpuOptions`,[b]:UL}],[()=>wPe,{[v]:`CapacityReservationSpecification`,[b]:YL}],[()=>aRe,{[v]:`LicenseSet`,[b]:xB}],[()=>FPe,{[v]:`HibernationOptions`,[b]:Pz}],[()=>UPe,{[v]:`MetadataOptions`,[b]:jB}],[()=>NPe,{[v]:`EnclaveOptions`,[b]:lz}],[()=>ePe,{[v]:`InstanceRequirements`,[b]:AEe}],[()=>tFe,{[v]:`PrivateDnsNameOptions`,[b]:iV}],[()=>zPe,{[v]:`MaintenanceOptions`,[b]:MB}],[2,{[v]:`DisableApiStop`,[b]:lR}],[()=>qH,{[v]:`Operator`,[b]:nV}],[()=>ZPe,{[v]:`NetworkPerformanceOptions`,[b]:JB}],[()=>rRe,{[v]:`SecondaryInterfaceSet`,[b]:FV}]]],sIe=[3,x,Ij,0,[MM,Ux,BS,xw,Cx,wP,xg,bg,bA,rj,Gy],[[0,{[v]:`SecurityGroupRuleId`,[b]:AV}],[0,{[v]:`GroupId`,[b]:Dz}],[2,{[v]:`IsEgress`,[b]:Jz}],[0,{[v]:`IpProtocol`,[b]:aB}],[1,{[v]:`FromPort`,[b]:wz}],[1,{[v]:`ToPort`,[b]:QV}],[0,{[v]:`CidrIpv4`,[b]:zL}],[0,{[v]:`CidrIpv6`,[b]:RL}],[0,{[v]:`PrefixListId`,[b]:dV}],[0,{[v]:`ReferencedGroupId`,[b]:FOe}],[0,{[v]:`Description`,[b]:LR}]]],cIe=[3,x,jj,0,[Ux,AM,g,RN,zN,xw,Cx,wP,yg,yw],[[0,{[v]:`GroupId`,[b]:Dz}],[()=>PU,{[b]:MM}],[2,{[v]:`DryRun`,[b]:_}],[0,{[v]:`SourceSecurityGroupName`,[b]:UV}],[0,{[v]:`SourceSecurityGroupOwnerId`,[b]:WV}],[0,{[v]:`IpProtocol`,[b]:aB}],[1,{[v]:`FromPort`,[b]:wz}],[1,{[v]:`ToPort`,[b]:QV}],[0,{[v]:`CidrIp`,[b]:LL}],[()=>TU,{[v]:`IpPermissions`,[b]:oB}]],1],lIe=[3,x,Mj,0,[VA,YP,Rj],[[2,{[v]:`Return`,[b]:vV}],[()=>TU,{[v]:`UnknownIpPermissionSet`,[b]:cH}],[()=>MU,{[v]:`RevokedSecurityGroupRuleSet`,[b]:CV}]]],uIe=[3,x,Nj,0,[yg,Cx,Ux,qx,yw,xw,RN,zN,wP,AM,g],[0,1,0,0,[()=>TU,0],0,0,0,1,[()=>PU,{[b]:MM}],[2,{[v]:`DryRun`,[b]:_}]]],dIe=[3,x,Pj,0,[VA,YP,Rj],[[2,{[v]:`Return`,[b]:vV}],[()=>TU,{[v]:`UnknownIpPermissionSet`,[b]:cH}],[()=>MU,{[v]:`RevokedSecurityGroupRuleSet`,[b]:CV}]]],fIe=[3,x,aM,0,[C_,j_,Wv,Bb,zx,tC,$C,UO,uP,UT,_g,XO,dk,nP,BF,Cg,bk,wS],[[0,{[v]:`DestinationCidrBlock`,[b]:dR}],[0,{[v]:`DestinationIpv6CidrBlock`,[b]:vR}],[0,{[v]:`DestinationPrefixListId`,[b]:wR}],[0,{[v]:`EgressOnlyInternetGatewayId`,[b]:cz}],[0,{[v]:`GatewayId`,[b]:Ez}],[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`InstanceOwnerId`,[b]:bEe}],[0,{[v]:`NatGatewayId`,[b]:GB}],[0,{[v]:`TransitGatewayId`,[b]:Ike}],[0,{[v]:`LocalGatewayId`,[b]:$Ee}],[0,{[v]:`CarrierGatewayId`,[b]:NL}],[0,{[v]:`NetworkInterfaceId`,[b]:KB}],[0,{[v]:`Origin`,[b]:WDe}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`VpcPeeringConnectionId`,[b]:vH}],[0,{[v]:`CoreNetworkArn`,[b]:HL}],[0,{[v]:`OdbNetworkArn`,[b]:YDe}],[0,{[v]:`IpAddress`,[b]:Uz}]]],QH=[3,x,Yj,0,[kwe,MA,Uj,oM,sP,SF,hk],[[()=>LRe,{[v]:`AssociationSet`,[b]:KI}],[()=>kRe,{[v]:`PropagatingVgwSet`,[b]:wOe}],[0,{[v]:`RouteTableId`,[b]:wV}],[()=>IRe,{[v]:`RouteSet`,[b]:GOe}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`OwnerId`,[b]:eV}]]],pIe=[3,x,zj,0,[pO,Bj,Uj,_N,zx,fA,Rh],[[2,{[v]:`Main`,[b]:DDe}],[0,{[v]:`RouteTableAssociationId`,[b]:KOe}],[0,{[v]:`RouteTableId`,[b]:wV}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`GatewayId`,[b]:Ez}],[0,{[v]:`PublicIpv4Pool`,[b]:uV}],[()=>$H,{[v]:`AssociationState`,[b]:HI}]]],$H=[3,x,Hj,0,[nP,TN],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`StatusMessage`,[b]:RV}]]],mIe=[3,x,sj,0,[ux],[[2,{[v]:`Enabled`,[b]:bz}]],1],hIe=[3,x,dj,0,[TD,ED,tg,xC,$w,gS,mS,ST,TT,yO,IA,pj,EM,IM,_N,WP,gb,Eb,DP,eE,LC,Wg,wg,Ag,rS,qT,YD,Ub,Hk,XD,h_,Wb,nk,Dk,lN,g,g_,vC,lA,Jg,Eh,$O,sC,Ib],[1,1,[()=>hU,{[b]:eg}],0,0,1,[()=>CU,{[b]:TS}],0,0,[()=>mIe,0],[()=>JH,0],0,[()=>NU,{[b]:wM}],[()=>IU,{[b]:LM}],0,[()=>kAe,0],[()=>fLe,0],[()=>mLe,{[b]:vb}],[()=>RU,{[b]:AP}],()=>aFe,()=>GNe,()=>MH,()=>fje,()=>aje,()=>ENe,[()=>pRe,{[b]:QT}],()=>KNe,()=>FH,()=>GFe,()=>WNe,2,2,()=>QNe,()=>KH,[()=>LLe,{[b]:uN}],[2,{[v]:`DryRun`,[b]:_}],[2,{[v]:`DisableApiTermination`,[b]:uR}],[0,{[v]:`InstanceInitiatedShutdownBehavior`,[b]:eB}],[0,{[v]:`PrivateIpAddress`,[b]:lV}],[0,{[v]:`ClientToken`,[UEe]:1,[b]:$L}],[0,{[v]:`AdditionalInfo`,[b]:DI}],[()=>MLe,{[v]:`NetworkInterface`,[b]:RDe}],[()=>RH,{[v]:`IamInstanceProfile`,[b]:Qz}],[2,{[v]:`EbsOptimized`,[b]:sz}]],2],gIe=[3,x,qM,0,[lA],[[0,{[v]:`PrivateIpAddress`,[b]:lV}]]],_Ie=[3,x,XM,0,[lA],[0]],vIe=[3,x,pM,0,[nF],[[()=>AAe,{[v]:`Value`,[b]:fH}]]],yIe=[3,x,LM,0,[Ux,rw,sP,SF,CM,hk,qx,Gy,yw],[[0,{[v]:`GroupId`,[b]:Dz}],[()=>TU,{[v]:`IpPermissionsEgress`,[b]:TEe}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`SecurityGroupArn`,[b]:kV}],[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`GroupDescription`,[b]:KTe}],[()=>TU,{[v]:`IpPermissions`,[b]:oB}]]],bIe=[3,x,PM,0,[MM,Ux,Xx,BS,xw,Cx,wP,xg,bg,bA,ij,Gy,sP,kM],[[0,{[v]:`SecurityGroupRuleId`,[b]:AV}],[0,{[v]:`GroupId`,[b]:Dz}],[0,{[v]:`GroupOwnerId`,[b]:YTe}],[2,{[v]:`IsEgress`,[b]:Jz}],[0,{[v]:`IpProtocol`,[b]:aB}],[1,{[v]:`FromPort`,[b]:wz}],[1,{[v]:`ToPort`,[b]:QV}],[0,{[v]:`CidrIpv4`,[b]:zL}],[0,{[v]:`CidrIpv6`,[b]:RL}],[0,{[v]:`PrefixListId`,[b]:dV}],[()=>$Fe,{[v]:`ReferencedGroupInfo`,[b]:IOe}],[0,{[v]:`Description`,[b]:LR}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`SecurityGroupRuleArn`,[b]:ske}]]],eU=[3,x,tP,0,[pk,fk,sP,KN,$A,WN,Hh,PP,gg,$g,Tx,dN,OF,nP,EN,GN,RA,hk,Gy,KF,dx,CT,E_],[[0,{[v]:`OwnerAlias`,[b]:GDe}],[0,{[v]:`OutpostArn`,[b]:$B}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`StorageTier`,[b]:Oke}],[4,{[v]:`RestoreExpiryTime`,[b]:MOe}],[0,{[v]:`SseType`,[b]:KV}],[0,{[v]:`AvailabilityZone`,[b]:QI}],[0,{[v]:`TransferType`,[b]:Jke}],[1,{[v]:`CompletionDurationMinutes`,[b]:jL}],[4,{[v]:`CompletionTime`,[b]:nR}],[1,{[v]:`FullSnapshotSizeInBytes`,[b]:HTe}],[0,{[v]:`SnapshotId`,[b]:IV}],[0,{[v]:`VolumeId`,[b]:hH}],[0,{[v]:`Status`,[b]:YV}],[0,{[v]:`StatusMessage`,[b]:RV}],[4,{[v]:`StartTime`,[b]:qV}],[0,{[v]:`Progress`,[b]:_V}],[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`Description`,[b]:LR}],[1,{[v]:`VolumeSize`,[b]:yH}],[2,{[v]:`Encrypted`,[b]:xz}],[0,{[v]:`KmsKeyId`,[b]:_B}],[0,{[v]:`DataEncryptionKeyId`,[b]:pR}]]],xIe=[3,x,CN,0,[QD,cN,ng,ZF,oC],[0,0,1,4,0]],SIe=[3,x,$M,0,[CC,Eh,g],[[()=>SU,{[b]:tC}],[0,{[v]:`AdditionalInfo`,[b]:DI}],[2,{[v]:`DryRun`,[b]:_}]],1],CIe=[3,x,eN,0,[pN],[[()=>wU,{[v]:`InstancesSet`,[b]:lB}]]],tU=[3,x,LN,0,[s_,gO],[[0,{[v]:`Code`,[b]:aR}],[0,{[v]:`Message`,[b]:RB}]]],wIe=[3,x,tN,0,[CC,dS,jN,g,mx],[[()=>SU,{[b]:tC}],2,2,[2,{[v]:`DryRun`,[b]:_}],[2,{[v]:`Force`,[b]:UTe}]],1],TIe=[3,x,nN,0,[hN],[[()=>wU,{[v]:`InstancesSet`,[b]:lB}]]],nU=[3,x,aP,0,[Gh,Fb,wD,Eg,hk,wh,jS,sP,uM,fk,rb,BC,Uk,cg,BP,_N,nP,SF,fg,NCe,Hh,O_,ZD],[[0,{[v]:`AvailabilityZoneId`,[b]:$I}],[1,{[v]:`EnableLniAtDeviceIndex`,[b]:jTe}],[2,{[v]:`MapCustomerOwnedIpOnLaunch`,[b]:fDe}],[0,{[v]:`CustomerOwnedIpv4Pool`,[b]:GL}],[0,{[v]:`OwnerId`,[b]:eV}],[2,{[v]:`AssignIpv6AddressOnCreation`,[b]:TI}],[()=>KRe,{[v]:`Ipv6CidrBlockAssociationSet`,[b]:Kz}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`SubnetArn`,[b]:eke}],[0,{[v]:`OutpostArn`,[b]:$B}],[2,{[v]:`EnableDns64`,[b]:WR}],[2,{[v]:`Ipv6Native`,[b]:_Ee}],[()=>WFe,{[v]:`PrivateDnsNameOptionsOnLaunch`,[b]:aOe}],[()=>OH,{[v]:`BlockPublicAccessStates`,[b]:vL}],[0,{[v]:`Type`,[b]:aH}],[0,{[v]:`SubnetId`,[b]:LV}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`CidrBlock`,[b]:wL}],[1,{[v]:`AvailableIpAddressCount`,[b]:wI}],[0,{[v]:`AvailabilityZone`,[b]:QI}],[2,{[v]:`DefaultForAz`,[b]:hR}],[2,{[v]:`MapPublicIpOnLaunch`,[b]:SDe}]]],EIe=[3,x,hM,0,[nP,TN],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`StatusMessage`,[b]:RV}]]],DIe=[3,x,zM,0,[kh,AS,NS,hS,Zw],[[0,{[v]:`AssociationId`,[b]:OI}],[0,{[v]:`Ipv6CidrBlock`,[b]:Gz}],[()=>EIe,{[v]:`Ipv6CidrBlockState`,[b]:qz}],[0,{[v]:`Ipv6AddressAttribute`,[b]:Bz}],[0,{[v]:`IpSource`,[b]:uB}]]],OIe=[3,x,IP,0,[yT,nF],[[0,{[v]:`Key`,[b]:KEe}],[0,{[v]:`Value`,[b]:fH}]]],kIe=[3,x,AP,0,[qj,sP],[[0,{[v]:`ResourceType`,[b]:TV}],[()=>LU,{[b]:IP}]]],AIe=[3,x,mP,0,[CC,mx,jN,g],[[()=>SU,{[b]:tC}],2,2,[2,{[v]:`DryRun`,[b]:_}]],1],jIe=[3,x,hP,0,[_P],[[()=>wU,{[v]:`InstancesSet`,[b]:lB}]]],MIe=[3,x,yP,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],NIe=[3,x,bP,0,[yD,fO],[1,1]],PIe=[3,x,JP,0,[Gy,GP,qx,Ux,SF,BF,TA],[[0,{[v]:`Description`,[b]:LR}],[0,{[v]:`UserId`,[b]:sH}],[0,{[v]:`GroupName`,[b]:Oz}],[0,{[v]:`GroupId`,[b]:Dz}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`VpcPeeringConnectionId`,[b]:vH}],[0,{[v]:`PeeringStatus`,[b]:pV}]]],FIe=[3,x,xF,0,[s_,gO],[[0,{[v]:`Code`,[b]:aR}],[0,{[v]:`Message`,[b]:RB}]]],rU=[3,x,QF,0,[px],[[()=>hLe,{[v]:`ErrorSet`,[b]:LTe}]]],IIe=[3,x,uF,0,[yD,fO],[[1,{[v]:`Min`,[b]:TB}],[1,{[v]:`Max`,[b]:IB}]]],LIe=[3,x,dF,0,[yD,fO],[1,1],1],RIe=[3,x,fF,0,[Ay,T_,Ty,pF,YF],[[1,{[v]:`DefaultVCpus`,[b]:PR}],[1,{[v]:`DefaultCores`,[b]:fR}],[1,{[v]:`DefaultThreadsPerCore`,[b]:kR}],[()=>rLe,{[v]:`ValidCores`,[b]:nAe}],[()=>XRe,{[v]:`ValidThreadsPerCore`,[b]:pAe}]]],iU=[3,x,rI,0,[Gh,fk,XN,vT,sP,qF,wx,bD,RP,WN,Dk,TF,iF,hk,OF,$N,dN,Hh,nP,t_,Qh,dx,CT],[[0,{[v]:`AvailabilityZoneId`,[b]:$I}],[0,{[v]:`OutpostArn`,[b]:$B}],[0,{[v]:`SourceVolumeId`,[b]:Ake}],[1,{[v]:`Iops`,[b]:mB}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[0,{[v]:`VolumeType`,[b]:bH}],[2,{[v]:`FastRestored`,[b]:VTe}],[2,{[v]:`MultiAttachEnabled`,[b]:uDe}],[1,{[v]:`Throughput`,[b]:rH}],[0,{[v]:`SseType`,[b]:KV}],[()=>qH,{[v]:`Operator`,[b]:nV}],[1,{[v]:`VolumeInitializationRate`,[b]:mH}],[0,{[v]:`VolumeArn`,[b]:$ke}],[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`VolumeId`,[b]:hH}],[1,{[v]:`Size`,[b]:Nke}],[0,{[v]:`SnapshotId`,[b]:IV}],[0,{[v]:`AvailabilityZone`,[b]:QI}],[0,{[v]:`Status`,[b]:YV}],[4,{[v]:`CreateTime`,[b]:iR}],[()=>tze,{[v]:`AttachmentSet`,[b]:qI}],[2,{[v]:`Encrypted`,[b]:xz}],[0,{[v]:`KmsKeyId`,[b]:_B}]]],aU=[3,x,aF,0,[Rv,Fh,ew,Qy,OF,tC,Ky,nP,Vh],[[2,{[v]:`DeleteOnTermination`,[b]:CR}],[0,{[v]:`AssociatedResource`,[b]:BI}],[0,{[v]:`InstanceOwningService`,[b]:SEe}],[1,{[v]:`EbsCardIndex`,[b]:VR}],[0,{[v]:`VolumeId`,[b]:hH}],[0,{[v]:`InstanceId`,[b]:Zz}],[0,{[v]:`Device`,[b]:RR}],[0,{[v]:`Status`,[b]:YV}],[4,{[v]:`AttachTime`,[b]:ZI}]]],zIe=[3,x,FF,0,[OF,iO,TN,jP,gP,FP,NP,xP,wk,_k,Ek,Tk,yk,RA,GN,sx,Dk],[[0,{[v]:`VolumeId`,[b]:hH}],[0,{[v]:`ModificationState`,[b]:PB}],[0,{[v]:`StatusMessage`,[b]:RV}],[1,{[v]:`TargetSize`,[b]:Kke}],[1,{[v]:`TargetIops`,[b]:zke}],[0,{[v]:`TargetVolumeType`,[b]:Yke}],[1,{[v]:`TargetThroughput`,[b]:qke}],[2,{[v]:`TargetMultiAttachEnabled`,[b]:Vke}],[1,{[v]:`OriginalSize`,[b]:XDe}],[1,{[v]:`OriginalIops`,[b]:qDe}],[0,{[v]:`OriginalVolumeType`,[b]:QDe}],[1,{[v]:`OriginalThroughput`,[b]:ZDe}],[2,{[v]:`OriginalMultiAttachEnabled`,[b]:JDe}],[1,{[v]:`Progress`,[b]:_V}],[4,{[v]:`StartTime`,[b]:qV}],[4,{[v]:`EndTime`,[b]:RTe}],[()=>qH,{[v]:`Operator`,[b]:nV}]]],oU=[3,x,iI,0,[hk,aT,jS,Wwe,zS,nb,sP,cg,SF,nP,fg,Lv],[[0,{[v]:`OwnerId`,[b]:eV}],[0,{[v]:`InstanceTenancy`,[b]:fB}],[()=>oze,{[v]:`Ipv6CidrBlockAssociationSet`,[b]:Kz}],[()=>ize,{[v]:`CidrBlockAssociationSet`,[b]:TL}],[2,{[v]:`IsDefault`,[b]:sEe}],[()=>VIe,{[v]:`EncryptionControl`,[b]:UR}],[()=>LU,{[v]:`TagSet`,[b]:eH}],[()=>OH,{[v]:`BlockPublicAccessStates`,[b]:vL}],[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`CidrBlock`,[b]:wL}],[0,{[v]:`DhcpOptionsId`,[b]:SR}]]],BIe=[3,x,oF,0,[kh,fg,Kwe],[[0,{[v]:`AssociationId`,[b]:OI}],[0,{[v]:`CidrBlock`,[b]:wL}],[()=>sU,{[v]:`CidrBlockState`,[b]:DL}]]],sU=[3,x,cF,0,[nP,TN],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`StatusMessage`,[b]:RV}]]],VIe=[3,x,hF,0,[SF,yF,vO,nP,EN,tj,sP],[[0,{[v]:`VpcId`,[b]:pH}],[0,{[v]:`VpcEncryptionControlId`,[b]:iAe}],[0,{[v]:`Mode`,[b]:kDe}],[0,{[v]:`State`,[b]:JV}],[0,{[v]:`StateMessage`,[b]:zV}],[()=>UIe,{[v]:`ResourceExclusions`,[b]:POe}],[()=>LU,{[v]:`TagSet`,[b]:eH}]]],HIe=[3,x,gF,0,[vO,KS,zb,HO,UF,VF,VT,MF,ab],[0,0,0,0,0,0,0,0,0],1],cU=[3,x,_F,0,[nP,EN],[[0,{[v]:`State`,[b]:JV}],[0,{[v]:`StateMessage`,[b]:zV}]]],UIe=[3,x,vF,0,[HS,Rb,IO,HF,zF,LT,jF,ib],[[()=>cU,{[v]:`InternetGateway`,[b]:Yz}],[()=>cU,{[v]:`EgressOnlyInternetGateway`,[b]:NTe}],[()=>cU,{[v]:`NatGateway`,[b]:WB}],[()=>cU,{[v]:`VirtualPrivateGateway`,[b]:uAe}],[()=>cU,{[v]:`VpcPeering`,[b]:lAe}],[()=>cU,{[v]:`Lambda`,[b]:ZEe}],[()=>cU,{[v]:`VpcLattice`,[b]:oAe}],[()=>cU,{[v]:`ElasticFileSystem`,[b]:GR}]]],WIe=[3,x,CF,0,[kh,AS,NS,xO,Cw,hS,Zw],[[0,{[v]:`AssociationId`,[b]:OI}],[0,{[v]:`Ipv6CidrBlock`,[b]:Gz}],[()=>sU,{[v]:`Ipv6CidrBlockState`,[b]:qz}],[0,{[v]:`NetworkBorderGroup`,[b]:VB}],[0,{[v]:`Ipv6Pool`,[b]:DEe}],[0,{[v]:`Ipv6AddressAttribute`,[b]:Bz}],[0,{[v]:`IpSource`,[b]:uB}]]],lU=`unit`,uU=[1,x,qCe,0,[0,{[b]:y}]],dU=[1,x,YCe,0,[0,{[b]:y}]],fU=[1,x,hwe,0,[0,{[b]:y}]],GIe=[1,x,KCe,0,[()=>FAe,{[b]:y}]],pU=[1,x,zCe,0,[0,{[b]:Dh}]],mU=[1,x,VCe,0,[0,{[b]:y}]],KIe=[1,x,pwe,0,[0,{[b]:y}]],qIe=[1,x,BCe,0,[0,{[b]:kh}]],JIe=[1,x,Wh,0,[()=>ZAe,{[b]:Uh}]],YIe=[1,x,xwe,0,[()=>QAe,{[b]:y}]],XIe=[1,x,Swe,0,[()=>XAe,{[b]:y}]],ZIe=[1,x,wwe,0,[()=>$Ae,{[b]:y}]],QIe=[1,x,Ewe,0,[()=>eje,{[b]:y}]],$Ie=[1,x,Hwe,0,[0,{[b]:y}]],eLe=[1,x,Rwe,0,[0,{[b]:y}]],tLe=[1,x,Mwe,0,[()=>DH,{[b]:y}]],hU=[1,x,Nwe,0,[()=>DH,{[b]:eg}]],nLe=[1,x,Iwe,0,[0,{[b]:y}]],rLe=[1,x,qwe,0,[1,{[b]:y}]],gU=[1,x,fTe,0,[0,{[b]:y}]],iLe=[1,x,bv,0,[()=>Jje,{[b]:y}]],aLe=[1,x,Sv,0,[()=>Yje,{[b]:y}]],oLe=[1,x,py,0,[()=>aMe,{[b]:y}]],sLe=[1,x,G_,0,[()=>tNe,{[b]:y}]],cLe=[1,x,$y,0,[()=>rNe,{[b]:y}]],lLe=[1,x,cb,0,[()=>lNe,{[b]:y}]],uLe=[1,x,pb,0,[()=>NH,{[b]:gb}]],dLe=[1,x,hb,0,[()=>uNe,{[b]:y}]],fLe=[1,x,_b,0,[()=>NH,{[b]:y}]],pLe=[1,x,xb,0,[()=>fNe,{[b]:y}]],mLe=[1,x,Eb,0,[()=>dNe,{[b]:y}]],hLe=[1,x,ox,0,[()=>FIe,{[b]:y}]],_U=[1,x,Ab,0,[0,{[b]:y}]],gLe=[1,x,Xy,0,[0,{[b]:Zy}]],vU=[1,x,xx,0,[()=>hNe,{[b]:Ox}]],_Le=[1,x,_x,0,[()=>gNe,{[b]:y}]],vLe=[1,x,Lx,0,[()=>xNe,{[b]:y}]],yU=[1,x,Bx,0,[()=>wNe,{[b]:y}]],bU=[1,x,Vx,0,[0,{[b]:Dz}]],yLe=[1,x,Jx,0,[0,{[b]:qx}]],bLe=[1,x,lC,0,[()=>LH,{[b]:y}]],xLe=[1,x,yC,0,[0,{[b]:xC}]],SLe=[1,x,OC,0,[()=>DNe,{[b]:y}]],CLe=[1,x,fT,0,[()=>ONe,{[b]:y}]],wLe=[1,x,IS,0,[()=>MNe,0]],TLe=[1,x,DS,0,[()=>LNe,{[b]:y}]],ELe=[1,x,kS,0,[()=>RNe,{[b]:y}]],xU=[1,x,ZS,0,[0,{[b]:y}]],SU=[1,x,bC,0,[0,{[b]:tC}]],DLe=[1,x,pC,0,[()=>zNe,{[b]:y}]],CU=[1,x,rC,0,[()=>BNe,{[b]:y}]],OLe=[1,x,iC,0,[()=>VNe,{[b]:nC}]],kLe=[1,x,mC,0,[()=>HNe,{[b]:y}]],ALe=[1,x,AC,0,[()=>PNe,{[b]:y}]],jLe=[1,x,WC,0,[()=>JNe,{[b]:y}]],MLe=[1,x,KC,0,[()=>XNe,{[b]:y}]],NLe=[1,x,ow,0,[()=>$Ne,{[b]:y}]],PLe=[1,x,Rw,0,[()=>nPe,{[b]:y}]],FLe=[1,x,Bw,0,[()=>iPe,{[b]:y}]],ILe=[1,x,Vw,0,[()=>aPe,{[b]:y}]],LLe=[1,x,Ww,0,[()=>oPe,{[b]:y}]],wU=[1,x,Iw,0,[()=>sPe,{[b]:y}]],RLe=[1,x,eT,0,[()=>lPe,{[b]:y}]],zLe=[1,x,WS,0,[()=>dPe,{[b]:y}]],BLe=[1,x,JS,0,[0,{[b]:y}]],VLe=[1,x,XS,0,[()=>HH,{[b]:y}]],HLe=[1,x,jC,0,[0,{[b]:y}]],TU=[1,x,dw,0,[()=>fPe,{[b]:y}]],ULe=[1,x,Dw,0,[()=>pPe,{[b]:y}]],EU=[1,x,fw,0,[()=>mPe,{[b]:y}]],WLe=[1,x,lw,0,[()=>hPe,{[b]:y}]],DU=[1,x,pw,0,[()=>gPe,{[b]:y}]],GLe=[1,x,uw,0,[()=>_Pe,{[b]:y}]],KLe=[1,x,Ow,0,[()=>vPe,{[b]:y}]],qLe=[1,x,ET,0,[0,{[b]:TT}]],JLe=[1,x,AT,0,[0,{[b]:kT}]],YLe=[1,x,NT,0,[()=>bPe,{[b]:y}]],XLe=[1,x,nE,0,[()=>xPe,{[b]:y}]],ZLe=[1,x,iE,0,[()=>SPe,{[b]:eg}]],QLe=[1,x,pE,0,[()=>kPe,{[b]:y}]],$Le=[1,x,hE,0,[()=>APe,{[b]:y}]],eRe=[1,x,zE,0,[0,{[b]:y}]],tRe=[1,x,ME,0,[()=>GPe,{[b]:y}]],nRe=[1,x,PE,0,[()=>KPe,{[b]:GC}]],rRe=[1,x,IE,0,[()=>qPe,{[b]:y}]],iRe=[1,x,RE,0,[()=>JPe,{[b]:Uw}]],aRe=[1,x,UE,0,[()=>YPe,{[b]:y}]],oRe=[1,x,WE,0,[()=>XPe,{[b]:y}]],sRe=[1,x,XE,0,[0,{[b]:y}]],cRe=[1,x,aD,0,[()=>UH,{[b]:y}]],lRe=[1,x,sD,0,[()=>cFe,{[b]:y}]],uRe=[1,x,lD,0,[()=>lFe,{[b]:cD}]],dRe=[1,x,dD,0,[()=>WH,{[b]:y}]],fRe=[1,x,GT,0,[()=>uFe,{[b]:y}]],pRe=[1,x,JT,0,[()=>dFe,{[b]:y}]],OU=[1,x,XT,0,[0,{[b]:y}]],mRe=[1,x,OD,0,[()=>pFe,{[b]:y}]],hRe=[1,x,BO,0,[()=>DFe,{[b]:y}]],gRe=[1,x,zO,0,[()=>OFe,{[b]:y}]],_Re=[1,x,WO,0,[0,{[b]:y}]],vRe=[1,x,KO,0,[()=>GH,{[b]:y}]],yRe=[1,x,EO,0,[()=>jFe,{[b]:y}]],bRe=[1,x,DO,0,[0,{[b]:y}]],xRe=[1,x,MO,0,[()=>IFe,{[b]:y}]],SRe=[1,x,ck,0,[0,{[b]:y}]],kU=[1,x,Ck,0,[0,{[b]:Ak}]],CRe=[1,x,Xk,0,[()=>BFe,{[b]:y}]],wRe=[1,x,Zk,0,[()=>VFe,{[b]:y}]],TRe=[1,x,eA,0,[0,{[b]:Ux}]],ERe=[1,x,nA,0,[()=>YH,{[b]:y}]],DRe=[1,x,rA,0,[0,{[b]:y}]],ORe=[1,x,xA,0,[()=>UFe,{[b]:y}]],AU=[1,x,cA,0,[()=>qFe,{[b]:y}]],jU=[1,x,Fk,0,[()=>YFe,{[b]:y}]],kRe=[1,x,jA,0,[()=>XFe,{[b]:y}]],ARe=[1,x,pA,0,[0,{[b]:aA}]],jRe=[1,x,aj,0,[()=>tIe,{[b]:y}]],MRe=[1,x,yj,0,[()=>eIe,{[b]:y}]],NRe=[1,x,Dj,0,[0,{[b]:Ej}]],PRe=[1,x,Sj,0,[()=>ZH,{[b]:y}]],MU=[1,x,Lj,0,[()=>sIe,{[b]:y}]],FRe=[1,x,ZA,0,[0,{[b]:y}]],IRe=[1,x,Cj,0,[()=>fIe,{[b]:y}]],LRe=[1,x,Vj,0,[()=>pIe,{[b]:y}]],RRe=[1,x,Wj,0,[0,{[b]:y}]],zRe=[1,x,Kj,0,[()=>QH,{[b]:y}]],BRe=[1,x,JM,0,[()=>gIe,{[b]:y}]],VRe=[1,x,YM,0,[()=>_Ie,{[b]:qM}]],NU=[1,x,TM,0,[0,{[b]:wM}]],HRe=[1,x,DM,0,[()=>yIe,{[b]:y}]],PU=[1,x,jM,0,[0,{[b]:y}]],FU=[1,x,NM,0,[()=>bIe,{[b]:y}]],IU=[1,x,FM,0,[0,{[b]:LM}]],URe=[1,x,iN,0,[0,{[b]:dN}]],WRe=[1,x,yN,0,[()=>eU,{[b]:y}]],GRe=[1,x,aN,0,[0,{[b]:_N}]],KRe=[1,x,BM,0,[()=>DIe,{[b]:y}]],qRe=[1,x,xN,0,[()=>nU,{[b]:y}]],JRe=[1,x,lM,0,[0,{[b]:y}]],YRe=[1,x,sN,0,[()=>VH,{[b]:y}]],LU=[1,x,vP,0,[()=>OIe,{[b]:y}]],RU=[1,x,kP,0,[()=>kIe,{[b]:y}]],XRe=[1,x,EP,0,[1,{[b]:y}]],ZRe=[1,x,ZP,0,[()=>VH,{[b]:y}]],QRe=[1,x,VP,0,[0,{[b]:y}]],$Re=[1,x,qP,0,[()=>PIe,{[b]:y}]],zU=[1,x,WF,0,[0,{[b]:y}]],BU=[1,x,GF,0,[0,{[b]:y}]],eze=[1,x,JF,0,[0,{[b]:y}]],tze=[1,x,rF,0,[()=>aU,{[b]:y}]],nze=[1,x,EF,0,[0,{[b]:OF}]],rze=[1,x,NF,0,[()=>iU,{[b]:y}]],ize=[1,x,sF,0,[()=>BIe,{[b]:y}]],aze=[1,x,DF,0,[0,{[b]:SF}]],oze=[1,x,wF,0,[()=>WIe,{[b]:y}]],sze=[1,x,PF,0,[()=>oU,{[b]:y}]],cze=[1,x,lI,0,[0,{[b]:y}]],lze=[1,x,fI,0,[0,{[b]:dI}]],uze=[1,x,hI,0,[0,{[b]:mI}]],dze=[9,x,ECe,0,()=>IAe,()=>LAe],fze=[9,x,OCe,0,()=>RAe,()=>zAe],pze=[9,x,ICe,0,()=>BAe,()=>VAe],mze=[9,x,nwe,0,()=>HAe,()=>UAe],hze=[9,x,PCe,0,()=>WAe,()=>lU],gze=[9,x,ywe,0,()=>GAe,()=>aU],_ze=[9,x,awe,0,()=>KAe,()=>qAe],vze=[9,x,uwe,0,()=>JAe,()=>YAe],yze=[9,x,Ug,0,()=>lje,()=>uje],bze=[9,x,rTe,0,()=>hje,()=>gje],xze=[9,x,Zwe,0,()=>_je,()=>vje],Sze=[9,x,iTe,0,()=>yje,()=>yPe],Cze=[9,x,oTe,0,()=>bje,()=>xje],wze=[9,x,lTe,0,()=>Sje,()=>Cje],Tze=[9,x,mTe,0,()=>wje,()=>Tje],Eze=[9,x,bTe,0,()=>Eje,()=>Dje],Dze=[9,x,Mg,0,()=>Oje,()=>kje],Oze=[9,x,kTe,0,()=>Aje,()=>jje],kze=[9,x,Ng,0,()=>Mje,()=>Nje],Aze=[9,x,Gg,0,()=>Pje,()=>eU],jze=[9,x,Kg,0,()=>Fje,()=>Ije],Mze=[9,x,a_,0,()=>Lje,()=>iU],Nze=[9,x,o_,0,()=>Rje,()=>zje],Pze=[9,x,M_,0,()=>Hje,()=>lU],Fze=[9,x,av,0,()=>Uje,()=>Wje],Ize=[9,x,fv,0,()=>Gje,()=>Kje],Lze=[9,x,_v,0,()=>qje,()=>Xje],Rze=[9,x,Av,0,()=>Zje,()=>Qje],zze=[9,x,zv,0,()=>$je,()=>lU],Bze=[9,x,ry,0,()=>eMe,()=>lU],Vze=[9,x,Yv,0,()=>tMe,()=>lU],Hze=[9,x,ay,0,()=>nMe,()=>rMe],Uze=[9,x,by,0,()=>iMe,()=>lU],Wze=[9,x,xy,0,()=>oMe,()=>lU],Gze=[9,x,By,0,()=>sMe,()=>lU],Kze=[9,x,Vy,0,()=>cMe,()=>lU],qze=[9,x,tv,0,()=>lMe,()=>uMe],Jze=[9,x,x_,0,()=>dMe,()=>fMe],Yze=[9,x,b_,0,()=>pMe,()=>mMe],Xze=[9,x,B_,0,()=>hMe,()=>gMe],Zze=[9,x,nv,0,()=>_Me,()=>vMe],Qze=[9,x,rv,0,()=>yMe,()=>bMe],$ze=[9,x,ev,0,()=>xMe,()=>SMe],eBe=[9,x,L_,0,()=>CMe,()=>wMe],tBe=[9,x,uv,0,()=>TMe,()=>EMe],nBe=[9,x,Dv,0,()=>DMe,()=>OMe],rBe=[9,x,Ev,0,()=>kMe,()=>AMe],iBe=[9,x,Fv,0,()=>jMe,()=>MMe],aBe=[9,x,Uv,0,()=>NMe,()=>PMe],oBe=[9,x,iy,0,()=>FMe,()=>IMe],sBe=[9,x,ey,0,()=>LMe,()=>RMe],cBe=[9,x,uy,0,()=>zMe,()=>BMe],lBe=[9,x,Sy,0,()=>VMe,()=>HMe],uBe=[9,x,Cy,0,()=>UMe,()=>WMe],dBe=[9,x,Hy,0,()=>GMe,()=>KMe],fBe=[9,x,Uy,0,()=>qMe,()=>JMe],pBe=[9,x,R_,0,()=>YMe,()=>lU],mBe=[9,x,Wy,0,()=>XMe,()=>aU],hBe=[9,x,S_,0,()=>ZMe,()=>lU],gBe=[9,x,z_,0,()=>QMe,()=>$Me],_Be=[9,x,ty,0,()=>eNe,()=>lU],vBe=[9,x,Mx,0,()=>yNe,()=>bNe],yBe=[9,x,wC,0,()=>kNe,()=>ANe],bBe=[9,x,BD,0,()=>bFe,()=>lU],xBe=[9,x,HD,0,()=>xFe,()=>SFe],SBe=[9,x,tO,0,()=>CFe,()=>lU],CBe=[9,x,dO,0,()=>wFe,()=>TFe],wBe=[9,x,hj,0,()=>QFe,()=>lU],TBe=[9,x,gj,0,()=>nIe,()=>rIe],EBe=[9,x,UA,0,()=>iIe,()=>lU],DBe=[9,x,Aj,0,()=>cIe,()=>lIe],OBe=[9,x,Fj,0,()=>uIe,()=>dIe],kBe=[9,x,vj,0,()=>hIe,()=>ZH],ABe=[9,x,mN,0,()=>SIe,()=>CIe],jBe=[9,x,gN,0,()=>wIe,()=>TIe],MBe=[9,x,fP,0,()=>AIe,()=>jIe],NBe=e=>({apiVersion:`2016-11-15`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??yCe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??uCe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??Gee,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ec2`,errorTypeRegistries:TAe,xmlNamespace:`http://ec2.amazonaws.com/doc/2016-11-15`,version:`2016-11-15`,serviceTarget:`AmazonEC2`},serviceId:e?.serviceId??`EC2`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),PBe=e=>{let t=he(e),n=()=>t().then(a),r=NBe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:mCe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},FBe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},IBe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),LBe=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),FBe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),IBe(n))},RBe=class extends le{config;constructor(...[t]){let n=PBe(t||{});super(n),this.initConfig=n;let r=fCe(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=LBe(dCe(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:cCe,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},zBe=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function BBe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ecr`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var VBe=e=>{let t=[];return e.operation,t.push(BBe(e)),t},HBe=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},UBe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ecr`}),WBe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},GBe={name:`@aws-sdk/client-ecr`,version:`3.1135.0`,description:`AWS SDK for JavaScript Ecr Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ecr`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ecr`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},VU=`ref`,HU=-1,UU=!0,WU=`isSet`,GU=`PartitionResult`,KU=`stringEquals`,qU=`booleanEquals`,JU=`getAttr`,YU={[VU]:`Endpoint`},XU={fn:JU,argv:[{[VU]:GU},`name`]},ZU={[VU]:GU},QU={},$U=[{[VU]:`Region`}],eW={conditions:[[WU,[YU]],[WU,$U],[`aws.partition`,$U,GU],[KU,[XU,`aws-eusc`]],[KU,[XU,`aws-iso-f`]],[KU,[XU,`aws-iso-e`]],[KU,[XU,`aws-iso-b`]],[KU,[XU,`aws-iso`]],[KU,[XU,`aws-cn`]],[KU,[XU,`aws-us-gov`]],[KU,[XU,`aws`]],[qU,[{[VU]:`UseFIPS`},UU]],[qU,[{fn:JU,argv:[ZU,`supportsFIPS`]},UU]],[qU,[{[VU]:`UseDualStack`},UU]],[qU,[{fn:JU,argv:[ZU,`supportsDualStack`]},UU]]],results:[[HU],[HU,`Invalid Configuration: FIPS and custom endpoint are not supported`],[HU,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[YU,QU],[`https://api.ecr.{Region}.{PartitionResult#dnsSuffix}`,QU],[`https://ecr.{Region}.{PartitionResult#dualStackDnsSuffix}`,QU],[`https://api.ecr-fips.{Region}.{PartitionResult#dnsSuffix}`,QU],[`https://ecr-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,QU],[`https://api.ecr-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,QU],[HU,`FIPS and DualStack are enabled, but this partition does not support one or both`],[HU,`FIPS is enabled but this partition does not support FIPS`],[`https://api.ecr.{Region}.{PartitionResult#dualStackDnsSuffix}`,QU],[HU,`DualStack is enabled but this partition does not support DualStack`],[HU,`Invalid Configuration: Missing Region`]]},KBe=2,qBe=new Int32Array([-1,1,-1,0,23,3,1,4,100000013,2,5,100000013,3,20,6,4,20,7,5,20,8,6,20,9,7,20,10,8,20,11,9,20,12,10,20,13,11,16,14,13,15,100000004,14,100000011,100000012,12,18,17,13,100000009,100000010,13,19,100000006,14,100000008,100000009,11,22,21,13,100000005,100000004,13,100000007,100000006,11,100000001,24,13,100000002,100000003]),JBe=xe.from(qBe,KBe,eW.conditions,eW.results),YBe=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),XBe=(e,t={})=>YBe.get(e,()=>ut(JBe,{endpointParams:e,logger:t.logger}));Le.aws=oe;var S=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},ZBe=class e extends S{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QBe=class e extends S{name=`RepositoryNotFoundException`;$fault=`client`;constructor(t){super({name:`RepositoryNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Be=class e extends S{name=`ServerException`;$fault=`server`;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},eVe=class e extends S{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tVe=class e extends S{name=`UnableToGetUpstreamImageException`;$fault=`client`;constructor(t){super({name:`UnableToGetUpstreamImageException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nVe=class e extends S{name=`ValidationException`;$fault=`client`;constructor(t){super({name:`ValidationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rVe=class e extends S{name=`EmptyUploadException`;$fault=`client`;constructor(t){super({name:`EmptyUploadException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iVe=class e extends S{name=`InvalidLayerException`;$fault=`client`;constructor(t){super({name:`InvalidLayerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aVe=class e extends S{name=`KmsException`;$fault=`client`;kmsError;constructor(t){super({name:`KmsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.kmsError=t.kmsError}},oVe=class e extends S{name=`LayerAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`LayerAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sVe=class e extends S{name=`LayerPartTooSmallException`;$fault=`client`;constructor(t){super({name:`LayerPartTooSmallException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cVe=class e extends S{name=`UploadNotFoundException`;$fault=`client`;constructor(t){super({name:`UploadNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lVe=class e extends S{name=`PullThroughCacheRuleAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`PullThroughCacheRuleAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uVe=class e extends S{name=`SecretNotFoundException`;$fault=`client`;constructor(t){super({name:`SecretNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dVe=class e extends S{name=`UnableToAccessSecretException`;$fault=`client`;constructor(t){super({name:`UnableToAccessSecretException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fVe=class e extends S{name=`UnableToDecryptSecretValueException`;$fault=`client`;constructor(t){super({name:`UnableToDecryptSecretValueException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pVe=class e extends S{name=`UnsupportedUpstreamRegistryException`;$fault=`client`;constructor(t){super({name:`UnsupportedUpstreamRegistryException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mVe=class e extends S{name=`InvalidTagParameterException`;$fault=`client`;constructor(t){super({name:`InvalidTagParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hVe=class e extends S{name=`RepositoryAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`RepositoryAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gVe=class e extends S{name=`TooManyTagsException`;$fault=`client`;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_Ve=class e extends S{name=`TemplateAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`TemplateAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tW=class e extends S{name=`LifecyclePolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vVe=class e extends S{name=`PullThroughCacheRuleNotFoundException`;$fault=`client`;constructor(t){super({name:`PullThroughCacheRuleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yVe=class e extends S{name=`RegistryPolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`RegistryPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bVe=class e extends S{name=`RepositoryNotEmptyException`;$fault=`client`;constructor(t){super({name:`RepositoryNotEmptyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xVe=class e extends S{name=`TemplateNotFoundException`;$fault=`client`;constructor(t){super({name:`TemplateNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nW=class e extends S{name=`RepositoryPolicyNotFoundException`;$fault=`client`;constructor(t){super({name:`RepositoryPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},SVe=class e extends S{name=`SigningConfigurationNotFoundException`;$fault=`client`;constructor(t){super({name:`SigningConfigurationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CVe=class e extends S{name=`ExclusionNotFoundException`;$fault=`client`;constructor(t){super({name:`ExclusionNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wVe=class e extends S{name=`ImageNotFoundException`;$fault=`client`;constructor(t){super({name:`ImageNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TVe=class e extends S{name=`ScanNotFoundException`;$fault=`client`;constructor(t){super({name:`ScanNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},EVe=class e extends S{name=`LayerInaccessibleException`;$fault=`client`;constructor(t){super({name:`LayerInaccessibleException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DVe=class e extends S{name=`LayersNotFoundException`;$fault=`client`;constructor(t){super({name:`LayersNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OVe=class e extends S{name=`UnableToGetUpstreamLayerException`;$fault=`client`;constructor(t){super({name:`UnableToGetUpstreamLayerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kVe=class e extends S{name=`LifecyclePolicyPreviewNotFoundException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyPreviewNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},AVe=class e extends S{name=`UnableToListUpstreamImageReferrersException`;$fault=`client`;constructor(t){super({name:`UnableToListUpstreamImageReferrersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jVe=class e extends S{name=`ImageAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ImageAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MVe=class e extends S{name=`ImageDigestDoesNotMatchException`;$fault=`client`;constructor(t){super({name:`ImageDigestDoesNotMatchException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NVe=class e extends S{name=`ImageTagAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ImageTagAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PVe=class e extends S{name=`ReferencedImagesNotFoundException`;$fault=`client`;constructor(t){super({name:`ReferencedImagesNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FVe=class e extends S{name=`BlockedByOrganizationPolicyException`;$fault=`client`;constructor(t){super({name:`BlockedByOrganizationPolicyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},IVe=class e extends S{name=`ExclusionAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`ExclusionAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LVe=class e extends S{name=`ImageArchivedException`;$fault=`client`;constructor(t){super({name:`ImageArchivedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RVe=class e extends S{name=`UnsupportedImageTypeException`;$fault=`client`;constructor(t){super({name:`UnsupportedImageTypeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zVe=class e extends S{name=`LifecyclePolicyPreviewInProgressException`;$fault=`client`;constructor(t){super({name:`LifecyclePolicyPreviewInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BVe=class e extends S{name=`ImageStorageClassUpdateNotSupportedException`;$fault=`client`;constructor(t){super({name:`ImageStorageClassUpdateNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VVe=class e extends S{name=`InvalidLayerPartException`;$fault=`client`;registryId;repositoryName;uploadId;lastValidByteReceived;constructor(t){super({name:`InvalidLayerPartException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.registryId=t.registryId,this.repositoryName=t.repositoryName,this.uploadId=t.uploadId,this.lastValidByteReceived=t.lastValidByteReceived}},HVe=`BlockedByOrganizationPolicyException`,UVe=`BatchDeleteImage`,WVe=`BatchDeleteImageRequest`,GVe=`BatchDeleteImageResponse`,KVe=`CreateRepository`,qVe=`CreateRepositoryRequest`,JVe=`CreateRepositoryResponse`,YVe=`DescribeImages`,XVe=`DescribeImagesFilter`,ZVe=`DescribeImagesRequest`,QVe=`DescribeImagesResponse`,$Ve=`DeleteLifecyclePolicy`,eHe=`DeleteLifecyclePolicyRequest`,tHe=`DeleteLifecyclePolicyResponse`,nHe=`DeleteRepository`,rHe=`DeleteRepositoryPolicyRequest`,iHe=`DeleteRepositoryPolicyResponse`,aHe=`DeleteRepositoryPolicy`,oHe=`DeleteRepositoryRequest`,sHe=`DeleteRepositoryResponse`,cHe=`DescribeRepositoriesRequest`,lHe=`DescribeRepositoriesResponse`,uHe=`DescribeRepositories`,dHe=`ExclusionAlreadyExistsException`,fHe=`EncryptionConfiguration`,pHe=`ExclusionNotFoundException`,mHe=`EmptyUploadException`,hHe=`GetLifecyclePolicy`,gHe=`GetLifecyclePolicyPreview`,_He=`GetLifecyclePolicyPreviewRequest`,vHe=`GetLifecyclePolicyPreviewResponse`,yHe=`GetLifecyclePolicyRequest`,bHe=`GetLifecyclePolicyResponse`,xHe=`GetRepositoryPolicyRequest`,SHe=`GetRepositoryPolicyResponse`,CHe=`GetRepositoryPolicy`,wHe=`ImageArchivedException`,THe=`ImageAlreadyExistsException`,EHe=`ImageDetail`,DHe=`ImageDigestDoesNotMatchException`,OHe=`ImageDetailList`,kHe=`ImageFailure`,AHe=`ImageFailureList`,jHe=`ImageIdentifier`,MHe=`ImageIdentifierList`,NHe=`InvalidLayerException`,PHe=`InvalidLayerPartException`,FHe=`ImageNotFoundException`,IHe=`InvalidParameterException`,LHe=`ImageScanningConfiguration`,RHe=`ImageStorageClassUpdateNotSupportedException`,zHe=`ImageScanFindingsSummary`,BHe=`ImageScanStatus`,VHe=`ImageTagAlreadyExistsException`,HHe=`ImageTagMutabilityExclusionFilter`,UHe=`ImageTagMutabilityExclusionFilters`,WHe=`InvalidTagParameterException`,GHe=`Key`,KHe=`KmsException`,qHe=`LayerAlreadyExistsException`,JHe=`LimitExceededException`,YHe=`LayerInaccessibleException`,XHe=`LayersNotFoundException`,ZHe=`LifecyclePolicyNotFoundException`,QHe=`LifecyclePolicyPreviewFilter`,$He=`LifecyclePolicyPreviewInProgressException`,eUe=`LifecyclePolicyPreviewNotFoundException`,tUe=`LifecyclePolicyPreviewResult`,nUe=`LifecyclePolicyPreviewResultList`,rUe=`LifecyclePolicyPreviewSummary`,iUe=`LifecyclePolicyRuleAction`,aUe=`LayerPartTooSmallException`,oUe=`PutImageTagMutability`,sUe=`PutImageTagMutabilityRequest`,cUe=`PutImageTagMutabilityResponse`,lUe=`PutLifecyclePolicy`,uUe=`PutLifecyclePolicyRequest`,dUe=`PutLifecyclePolicyResponse`,fUe=`PullThroughCacheRuleAlreadyExistsException`,pUe=`PullThroughCacheRuleNotFoundException`,mUe=`RepositoryAlreadyExistsException`,hUe=`ReferencedImagesNotFoundException`,gUe=`RepositoryList`,_Ue=`RepositoryNotEmptyException`,vUe=`RepositoryNotFoundException`,yUe=`RegistryPolicyNotFoundException`,bUe=`RepositoryPolicyNotFoundException`,xUe=`Repository`,SUe=`SigningConfigurationNotFoundException`,CUe=`ServerException`,wUe=`ScanNotFoundException`,TUe=`SecretNotFoundException`,EUe=`SetRepositoryPolicy`,DUe=`SetRepositoryPolicyRequest`,OUe=`SetRepositoryPolicyResponse`,kUe=`Tag`,AUe=`TemplateAlreadyExistsException`,jUe=`TransitioningImageTotalCount`,MUe=`TransitioningImageTotalCounts`,NUe=`TagList`,PUe=`TooManyTagsException`,FUe=`TemplateNotFoundException`,IUe=`UnsupportedImageTypeException`,LUe=`UploadNotFoundException`,RUe=`UnableToAccessSecretException`,zUe=`UnableToDecryptSecretValueException`,BUe=`UnableToGetUpstreamImageException`,VUe=`UnableToGetUpstreamLayerException`,HUe=`UnableToListUpstreamImageReferrersException`,UUe=`UnsupportedUpstreamRegistryException`,WUe=`Value`,GUe=`ValidationException`,KUe=`artifactMediaType`,qUe=`appliedRulePriority`,JUe=`action`,C=`client`,YUe=`createdAt`,XUe=`description`,w=`error`,rW=`encryptionConfiguration`,ZUe=`expiringImageTotalCount`,QUe=`encryptionType`,$Ue=`failures`,eWe=`failureCode`,tWe=`failureReason`,nWe=`findingSeverityCounts`,rWe=`filterType`,iW=`filter`,aW=`force`,iWe=`httpError`,aWe=`imageDetails`,oW=`imageDigest`,sW=`imageIds`,oWe=`imageId`,sWe=`imageManifestMediaType`,cW=`imagePushedAt`,lW=`imageStatus`,uW=`imageScanningConfiguration`,cWe=`imageScanCompletedAt`,lWe=`imageScanFindingsSummary`,uWe=`imageSizeInBytes`,dWe=`imageScanStatus`,dW=`imageTags`,fWe=`imageTotalCount`,fW=`imageTagMutability`,pW=`imageTagMutabilityExclusionFilters`,pWe=`imageTag`,mWe=`kmsError`,hWe=`kmsKey`,gWe=`lastArchivedAt`,_We=`lastActivatedAt`,mW=`lastEvaluatedAt`,hW=`lifecyclePolicyText`,vWe=`lastRecordedPullTime`,yWe=`lastValidByteReceived`,T=`message`,gW=`maxResults`,_W=`nextToken`,bWe=`previewResults`,vW=`policyText`,xWe=`repositoryArn`,yW=`registryId`,bW=`repositoryName`,SWe=`repositoryNames`,CWe=`repositoryUri`,xW=`repository`,wWe=`repositories`,SW=`smithy.ts.sdk.synthetic.com.amazonaws.ecr`,TWe=`storageClass`,EWe=`subjectManifestDigest`,DWe=`scanOnPush`,OWe=`server`,CW=`status`,kWe=`summary`,AWe=`tags`,jWe=`transitioningImageTotalCounts`,wW=`tagStatus`,TW=`targetStorageClass`,MWe=`type`,NWe=`uploadId`,PWe=`vulnerabilitySourceUpdatedAt`,E=`com.amazonaws.ecr`,EW=pt.for(SW),FWe=[-3,SW,`ECRServiceException`,0,[],[]];EW.registerError(FWe,S);var D=pt.for(E),IWe=[-3,E,HVe,{[w]:C},[T],[0]];D.registerError(IWe,FVe);var LWe=[-3,E,mHe,{[w]:C},[T],[0]];D.registerError(LWe,rVe);var RWe=[-3,E,dHe,{[w]:C},[T],[0]];D.registerError(RWe,IVe);var zWe=[-3,E,pHe,{[w]:C},[T],[0]];D.registerError(zWe,CVe);var BWe=[-3,E,THe,{[w]:C},[T],[0]];D.registerError(BWe,jVe);var VWe=[-3,E,wHe,{[w]:C},[T],[0]];D.registerError(VWe,LVe);var HWe=[-3,E,DHe,{[w]:C},[T],[0]];D.registerError(HWe,MVe);var UWe=[-3,E,FHe,{[w]:C},[T],[0]];D.registerError(UWe,wVe);var WWe=[-3,E,RHe,{[w]:C},[T],[0]];D.registerError(WWe,BVe);var GWe=[-3,E,VHe,{[w]:C},[T],[0]];D.registerError(GWe,NVe);var KWe=[-3,E,NHe,{[w]:C},[T],[0]];D.registerError(KWe,iVe);var qWe=[-3,E,PHe,{[w]:C},[yW,bW,NWe,yWe,T],[0,0,0,1,0]];D.registerError(qWe,VVe);var JWe=[-3,E,IHe,{[w]:C},[T],[0]];D.registerError(JWe,ZBe);var YWe=[-3,E,WHe,{[w]:C},[T],[0]];D.registerError(YWe,mVe);var XWe=[-3,E,KHe,{[w]:C},[T,mWe],[0,0]];D.registerError(XWe,aVe);var ZWe=[-3,E,qHe,{[w]:C},[T],[0]];D.registerError(ZWe,oVe);var QWe=[-3,E,YHe,{[w]:C},[T],[0]];D.registerError(QWe,EVe);var $We=[-3,E,aUe,{[w]:C},[T],[0]];D.registerError($We,sVe);var eGe=[-3,E,XHe,{[w]:C},[T],[0]];D.registerError(eGe,DVe);var tGe=[-3,E,ZHe,{[w]:C},[T],[0]];D.registerError(tGe,tW);var nGe=[-3,E,$He,{[w]:C},[T],[0]];D.registerError(nGe,zVe);var rGe=[-3,E,eUe,{[w]:C},[T],[0]];D.registerError(rGe,kVe);var iGe=[-3,E,JHe,{[w]:C},[T],[0]];D.registerError(iGe,eVe);var aGe=[-3,E,fUe,{[w]:C},[T],[0]];D.registerError(aGe,lVe);var oGe=[-3,E,pUe,{[w]:C},[T],[0]];D.registerError(oGe,vVe);var sGe=[-3,E,hUe,{[w]:C},[T],[0]];D.registerError(sGe,PVe);var cGe=[-3,E,yUe,{[w]:C},[T],[0]];D.registerError(cGe,yVe);var lGe=[-3,E,mUe,{[w]:C},[T],[0]];D.registerError(lGe,hVe);var uGe=[-3,E,_Ue,{[w]:C},[T],[0]];D.registerError(uGe,bVe);var dGe=[-3,E,vUe,{[w]:C},[T],[0]];D.registerError(dGe,QBe);var fGe=[-3,E,bUe,{[w]:C},[T],[0]];D.registerError(fGe,nW);var pGe=[-3,E,wUe,{[w]:C},[T],[0]];D.registerError(pGe,TVe);var mGe=[-3,E,TUe,{[w]:C},[T],[0]];D.registerError(mGe,uVe);var hGe=[-3,E,CUe,{[w]:OWe},[T],[0]];D.registerError(hGe,$Be);var gGe=[-3,E,SUe,{[w]:C},[T],[0]];D.registerError(gGe,SVe);var _Ge=[-3,E,AUe,{[w]:C},[T],[0]];D.registerError(_Ge,_Ve);var vGe=[-3,E,FUe,{[w]:C},[T],[0]];D.registerError(vGe,xVe);var yGe=[-3,E,PUe,{[w]:C},[T],[0]];D.registerError(yGe,gVe);var bGe=[-3,E,RUe,{[w]:C},[T],[0]];D.registerError(bGe,dVe);var xGe=[-3,E,zUe,{[w]:C},[T],[0]];D.registerError(xGe,fVe);var SGe=[-3,E,BUe,{[w]:C},[T],[0]];D.registerError(SGe,tVe);var CGe=[-3,E,VUe,{[w]:C},[T],[0]];D.registerError(CGe,OVe);var wGe=[-3,E,HUe,{[w]:C},[T],[0]];D.registerError(wGe,AVe);var TGe=[-3,E,IUe,{[w]:C},[T],[0]];D.registerError(TGe,RVe);var EGe=[-3,E,UUe,{[w]:C},[T],[0]];D.registerError(EGe,pVe);var DGe=[-3,E,LUe,{[w]:C},[T],[0]];D.registerError(DGe,cVe);var OGe=[-3,E,GUe,{[w]:C,[iWe]:400},[T],[0]];D.registerError(OGe,nVe);var kGe=[EW,D],AGe=[3,E,WVe,0,[bW,sW,yW],[0,()=>jW,0],2],jGe=[3,E,GVe,0,[sW,$Ue],[()=>jW,()=>hKe]],MGe=[3,E,qVe,0,[bW,yW,AWe,fW,pW,uW,rW],[0,0,()=>vKe,0,()=>MW,()=>kW,()=>DW],1],NGe=[3,E,JVe,0,[xW],[()=>AW]],PGe=[3,E,eHe,0,[bW,yW],[0,0],1],FGe=[3,E,tHe,0,[yW,bW,hW,mW],[0,0,0,4]],IGe=[3,E,rHe,0,[bW,yW],[0,0],1],LGe=[3,E,iHe,0,[yW,bW,vW],[0,0,0]],RGe=[3,E,oHe,0,[bW,yW,aW],[0,0,2],1],zGe=[3,E,sHe,0,[xW],[()=>AW]],BGe=[3,E,XVe,0,[wW,lW],[0,0]],VGe=[3,E,ZVe,0,[bW,yW,sW,_W,gW,iW],[0,0,()=>jW,0,1,()=>BGe],1],HGe=[3,E,QVe,0,[aWe,_W],[()=>mKe,0]],UGe=[3,E,cHe,0,[yW,SWe,_W,gW],[0,64,0,1]],WGe=[3,E,lHe,0,[wWe,_W],[()=>_Ke,0]],DW=[3,E,fHe,0,[QUe,hWe],[0,0],1],GGe=[3,E,_He,0,[bW,yW,sW,_W,gW,iW],[0,0,()=>jW,0,1,()=>nKe],1],KGe=[3,E,vHe,0,[yW,bW,hW,CW,_W,bWe,kWe],[0,0,0,0,0,()=>gKe,()=>iKe]],qGe=[3,E,yHe,0,[bW,yW],[0,0],1],JGe=[3,E,bHe,0,[yW,bW,hW,mW],[0,0,0,4]],YGe=[3,E,xHe,0,[bW,yW],[0,0],1],XGe=[3,E,SHe,0,[yW,bW,vW],[0,0,0]],ZGe=[3,E,EHe,0,[yW,bW,oW,dW,uWe,cW,dWe,lWe,sWe,KUe,vWe,EWe,lW,gWe,_We],[0,0,0,64,1,4,()=>eKe,()=>$Ge,0,0,4,0,0,4,4]],QGe=[3,E,kHe,0,[oWe,eWe,tWe],[()=>OW,0,0]],OW=[3,E,jHe,0,[oW,pWe],[0,0]],$Ge=[3,E,zHe,0,[cWe,PWe,nWe],[4,4,129]],kW=[3,E,LHe,0,[DWe],[2]],eKe=[3,E,BHe,0,[CW,XUe],[0,0]],tKe=[3,E,HHe,0,[rWe,iW],[0,0],2],nKe=[3,E,QHe,0,[wW],[0]],rKe=[3,E,tUe,0,[dW,oW,cW,JUe,qUe,TWe],[64,0,4,()=>aKe,1,0]],iKe=[3,E,rUe,0,[ZUe,jWe],[1,()=>yKe]],aKe=[3,E,iUe,0,[MWe,TW],[0,0]],oKe=[3,E,sUe,0,[bW,fW,yW,pW],[0,0,0,()=>MW],2],sKe=[3,E,cUe,0,[yW,bW,fW,pW],[0,0,0,()=>MW]],cKe=[3,E,uUe,0,[bW,hW,yW],[0,0,0],2],lKe=[3,E,dUe,0,[yW,bW,hW],[0,0,0]],AW=[3,E,xUe,0,[xWe,yW,bW,CWe,YUe,fW,pW,uW,rW],[0,0,0,0,4,0,()=>MW,()=>kW,()=>DW]],uKe=[3,E,DUe,0,[bW,vW,yW,aW],[0,0,0,2],2],dKe=[3,E,OUe,0,[yW,bW,vW],[0,0,0]],fKe=[3,E,kUe,0,[GHe,WUe],[0,0],2],pKe=[3,E,jUe,0,[TW,fWe],[0,1]],mKe=[1,E,OHe,0,()=>ZGe],hKe=[1,E,AHe,0,()=>QGe],jW=[1,E,MHe,0,()=>OW],MW=[1,E,UHe,0,()=>tKe],gKe=[1,E,nUe,0,()=>rKe],_Ke=[1,E,gUe,0,()=>AW],vKe=[1,E,NUe,0,()=>fKe],yKe=[1,E,MUe,0,()=>pKe],bKe=[9,E,UVe,0,()=>AGe,()=>jGe],xKe=[9,E,KVe,0,()=>MGe,()=>NGe],SKe=[9,E,$Ve,0,()=>PGe,()=>FGe],CKe=[9,E,nHe,0,()=>RGe,()=>zGe],wKe=[9,E,aHe,0,()=>IGe,()=>LGe],TKe=[9,E,YVe,0,()=>VGe,()=>HGe],EKe=[9,E,uHe,0,()=>UGe,()=>WGe],DKe=[9,E,hHe,0,()=>qGe,()=>JGe],OKe=[9,E,gHe,0,()=>GGe,()=>KGe],kKe=[9,E,CHe,0,()=>YGe,()=>XGe],AKe=[9,E,oUe,0,()=>oKe,()=>sKe],jKe=[9,E,lUe,0,()=>cKe,()=>lKe],MKe=[9,E,EUe,0,()=>uKe,()=>dKe],NKe=e=>({apiVersion:`2015-09-21`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??XBe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??VBe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ecr`,errorTypeRegistries:kGe,xmlNamespace:`http://ecr.amazonaws.com/doc/2015-09-21/`,version:`2015-09-21`,serviceTarget:`AmazonEC2ContainerRegistry_V20150921`},serviceId:e?.serviceId??`ECR`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),PKe=e=>{let t=he(e),n=()=>t().then(a),r=NKe(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:GBe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},FKe=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},IKe=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),LKe=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),FKe(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),IKe(n))},RKe=class extends le{config;constructor(...[t]){let n=PKe(t||{});super(n),this.initConfig=n;let r=UBe(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=LKe(HBe(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:zBe,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},zKe=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function BKe(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`ecs`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var VKe=e=>{let t=[];return e.operation,t.push(BKe(e)),t},HKe=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},UKe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`ecs`}),WKe={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},GKe={name:`@aws-sdk/client-ecs`,version:`3.1135.0`,description:`AWS SDK for JavaScript Ecs Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ecs`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-ecs`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},NW=`ref`,PW=-1,FW=!0,IW=`isSet`,LW=`PartitionResult`,RW=`booleanEquals`,zW=`getAttr`,BW={[NW]:`Endpoint`},VW={[NW]:LW},HW={},UW=[{[NW]:`Region`}],WW={conditions:[[IW,[BW]],[IW,UW],[`aws.partition`,UW,LW],[RW,[{[NW]:`UseFIPS`},FW]],[RW,[{[NW]:`UseDualStack`},FW]],[RW,[{fn:zW,argv:[VW,`supportsDualStack`]},FW]],[RW,[{fn:zW,argv:[VW,`supportsFIPS`]},FW]]],results:[[PW],[PW,`Invalid Configuration: FIPS and custom endpoint are not supported`],[PW,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[BW,HW],[`https://ecs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,HW],[PW,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://ecs-fips.{Region}.{PartitionResult#dnsSuffix}`,HW],[PW,`FIPS is enabled but this partition does not support FIPS`],[`https://ecs.{Region}.{PartitionResult#dualStackDnsSuffix}`,HW],[PW,`DualStack is enabled but this partition does not support DualStack`],[`https://ecs.{Region}.{PartitionResult#dnsSuffix}`,HW],[PW,`Invalid Configuration: Missing Region`]]},KKe=2,qKe=new Int32Array([-1,1,-1,0,12,3,1,4,100000011,2,5,100000011,3,8,6,4,7,100000010,5,100000008,100000009,4,10,9,6,100000006,100000007,5,11,100000005,6,100000004,100000005,3,100000001,13,4,100000002,100000003]),JKe=xe.from(qKe,KKe,WW.conditions,WW.results),YKe=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),XKe=(e,t={})=>YKe.get(e,()=>ut(JKe,{endpointParams:e,logger:t.logger}));Le.aws=oe;var GW=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},ZKe=class e extends GW{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QKe=class e extends GW{name=`ClientException`;$fault=`client`;constructor(t){super({name:`ClientException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Ke=class e extends GW{name=`ClusterNotFoundException`;$fault=`client`;constructor(t){super({name:`ClusterNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},eqe=class e extends GW{name=`InvalidParameterException`;$fault=`client`;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tqe=class e extends GW{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nqe=class e extends GW{name=`ServerException`;$fault=`server`;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},rqe=class e extends GW{name=`UnsupportedFeatureException`;$fault=`client`;constructor(t){super({name:`UnsupportedFeatureException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iqe=class e extends GW{name=`UpdateInProgressException`;$fault=`client`;constructor(t){super({name:`UpdateInProgressException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aqe=class e extends GW{name=`NamespaceNotFoundException`;$fault=`client`;constructor(t){super({name:`NamespaceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oqe=class e extends GW{name=`ClusterContainsCapacityProviderException`;$fault=`client`;constructor(t){super({name:`ClusterContainsCapacityProviderException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sqe=class e extends GW{name=`ClusterContainsContainerInstancesException`;$fault=`client`;constructor(t){super({name:`ClusterContainsContainerInstancesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cqe=class e extends GW{name=`ClusterContainsServicesException`;$fault=`client`;constructor(t){super({name:`ClusterContainsServicesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lqe=class e extends GW{name=`ClusterContainsTasksException`;$fault=`client`;constructor(t){super({name:`ClusterContainsTasksException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uqe=class e extends GW{name=`TargetNotConnectedException`;$fault=`client`;constructor(t){super({name:`TargetNotConnectedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dqe=class e extends GW{name=`ResourceInUseException`;$fault=`client`;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fqe=class e extends GW{name=`TargetNotFoundException`;$fault=`client`;constructor(t){super({name:`TargetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pqe=class e extends GW{name=`ServiceNotFoundException`;$fault=`client`;constructor(t){super({name:`ServiceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mqe=class e extends GW{name=`AttributeLimitExceededException`;$fault=`client`;constructor(t){super({name:`AttributeLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hqe=class e extends GW{name=`MissingVersionException`;$fault=`client`;constructor(t){super({name:`MissingVersionException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gqe=class e extends GW{name=`NoUpdateAvailableException`;$fault=`client`;constructor(t){super({name:`NoUpdateAvailableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_qe=class e extends GW{name=`ServiceDeploymentNotFoundException`;$fault=`client`;constructor(t){super({name:`ServiceDeploymentNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vqe=class e extends GW{name=`PlatformUnknownException`;$fault=`client`;constructor(t){super({name:`PlatformUnknownException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yqe=class e extends GW{name=`DaemonNotActiveException`;$fault=`client`;constructor(t){super({name:`DaemonNotActiveException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bqe=class e extends GW{name=`DaemonNotFoundException`;$fault=`client`;constructor(t){super({name:`DaemonNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xqe=class e extends GW{name=`PlatformTaskDefinitionIncompatibilityException`;$fault=`client`;constructor(t){super({name:`PlatformTaskDefinitionIncompatibilityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Sqe=class e extends GW{name=`ServiceNotActiveException`;$fault=`client`;constructor(t){super({name:`ServiceNotActiveException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cqe=class e extends GW{name=`ResourceNotFoundException`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wqe=class e extends GW{name=`ConflictException`;$fault=`client`;resourceIds;constructor(t){super({name:`ConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.resourceIds=t.resourceIds}},Tqe=class e extends GW{name=`TaskSetNotFoundException`;$fault=`client`;constructor(t){super({name:`TaskSetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Eqe=class e extends GW{name=`BlockedException`;$fault=`client`;constructor(t){super({name:`BlockedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dqe=`Attachment`,Oqe=`AdvancedConfiguration`,kqe=`AttachmentDetails`,Aqe=`AccessDeniedException`,jqe=`AttributeLimitExceededException`,Mqe=`AwsVpcConfiguration`,Nqe=`Attribute`,Pqe=`Attachments`,Fqe=`Attributes`,Iqe=`BlockedException`,Lqe=`Cluster`,Rqe=`CanaryConfiguration`,zqe=`ClusterContainsContainerInstancesException`,Bqe=`ClusterContainsCapacityProviderException`,Vqe=`CreateClusterRequest`,Hqe=`CreateClusterResponse`,Uqe=`ClusterContainsServicesException`,Wqe=`ClusterContainsTasksException`,Gqe=`ClusterConfiguration`,Kqe=`CreateCluster`,qqe=`ContainerDefinition`,Jqe=`ContainerDependency`,Yqe=`ContainerDefinitions`,Xqe=`ContainerDependencies`,Zqe=`ClientException`,Qqe=`ConflictException`,$qe=`ContainerInstanceHealthStatus`,eJe=`ContainerInstance`,tJe=`ContainerInstances`,nJe=`ClusterNotFoundException`,rJe=`ContainerOverride`,iJe=`ContainerOverrides`,aJe=`CapacityProviderStrategy`,oJe=`CapacityProviderStrategyItem`,sJe=`ContainerRestartPolicy`,cJe=`ClusterSetting`,lJe=`ClusterServiceConnectDefaults`,uJe=`ClusterServiceConnectDefaultsRequest`,dJe=`CreateServiceRequest`,fJe=`CreateServiceResponse`,pJe=`ClusterSettings`,mJe=`CreateService`,hJe=`Clusters`,gJe=`Container`,_Je=`Containers`,vJe=`Deployment`,yJe=`DeploymentAlarms`,bJe=`DeploymentConfiguration`,xJe=`DeploymentCircuitBreaker`,SJe=`DeregisterContainerInstanceRequest`,CJe=`DeregisterContainerInstanceResponse`,wJe=`DescribeContainerInstancesRequest`,TJe=`DescribeContainerInstancesResponse`,EJe=`DeregisterContainerInstance`,DJe=`DescribeContainerInstances`,OJe=`DeleteClusterRequest`,kJe=`DeleteClusterResponse`,AJe=`DescribeClustersRequest`,jJe=`DescribeClustersResponse`,MJe=`DeploymentController`,NJe=`DeleteCluster`,PJe=`DescribeClusters`,FJe=`DeploymentEphemeralStorage`,IJe=`DeploymentEarlySuccessCriteria`,LJe=`DevicesList`,RJe=`DeploymentLifecycleHook`,zJe=`DeploymentLifecycleHookList`,BJe=`DeploymentLifecycleHookTimeoutConfiguration`,VJe=`DaemonNotActiveException`,HJe=`DaemonNotFoundException`,UJe=`DescribeServicesRequest`,WJe=`DescribeServicesResponse`,GJe=`DescribeServices`,KJe=`DescribeTasks`,qJe=`DeregisterTaskDefinitionRequest`,JJe=`DeregisterTaskDefinitionResponse`,YJe=`DescribeTaskDefinitionRequest`,XJe=`DescribeTaskDefinitionResponse`,ZJe=`DeregisterTaskDefinition`,QJe=`DescribeTaskDefinition`,$Je=`DescribeTasksRequest`,eYe=`DescribeTasksResponse`,tYe=`DockerVolumeConfiguration`,nYe=`Device`,rYe=`Deployments`,iYe=`EBSTagSpecification`,aYe=`EBSTagSpecifications`,oYe=`ExecuteCommandConfiguration`,sYe=`ExecuteCommandLogConfiguration`,cYe=`EnvironmentFile`,lYe=`EFSAuthorizationConfig`,uYe=`EFSVolumeConfiguration`,dYe=`EnvironmentFiles`,fYe=`EphemeralStorage`,pYe=`EnvironmentVariables`,mYe=`Failure`,hYe=`FirelensConfiguration`,gYe=`FSxWindowsFileServerAuthorizationConfig`,_Ye=`FSxWindowsFileServerVolumeConfiguration`,vYe=`Failures`,yYe=`HealthCheck`,bYe=`HostEntry`,xYe=`HostEntryList`,SYe=`HostVolumeProperties`,CYe=`InferenceAccelerator`,wYe=`InferenceAcceleratorOverride`,TYe=`InferenceAcceleratorOverrides`,EYe=`InferenceAccelerators`,DYe=`InstanceHealthCheckResult`,OYe=`InstanceHealthCheckResultList`,kYe=`InvalidParameterException`,AYe=`KernelCapabilities`,jYe=`KeyValuePair`,MYe=`LoadBalancer`,NYe=`LoadBalancers`,PYe=`LinearConfiguration`,FYe=`ListContainerInstances`,IYe=`ListContainerInstancesRequest`,LYe=`ListContainerInstancesResponse`,RYe=`ListClustersRequest`,zYe=`ListClustersResponse`,BYe=`ListClusters`,VYe=`LogConfiguration`,HYe=`LimitExceededException`,UYe=`LinuxParameters`,WYe=`ListServices`,GYe=`ListServicesRequest`,KYe=`ListServicesResponse`,qYe=`ListTasks`,JYe=`ListTaskDefinitions`,YYe=`ListTaskDefinitionsRequest`,XYe=`ListTaskDefinitionsResponse`,ZYe=`ListTasksRequest`,QYe=`ListTasksResponse`,$Ye=`ManagedAgent`,eXe=`ManagedAgents`,tXe=`MetricConfigurationList`,nXe=`MetricConfiguration`,rXe=`MonitoringConfiguration`,iXe=`MountPoint`,aXe=`MountPointList`,oXe=`ManagedStorageConfiguration`,sXe=`MissingVersionException`,cXe=`NetworkBinding`,lXe=`NetworkBindings`,uXe=`NetworkConfiguration`,dXe=`NetworkInterface`,fXe=`NetworkInterfaces`,pXe=`NamespaceNotFoundException`,mXe=`NoUpdateAvailableException`,hXe=`PlacementConstraint`,gXe=`ProxyConfigurationProperties`,_Xe=`PlacementConstraints`,vXe=`ProxyConfiguration`,yXe=`PortMapping`,bXe=`PortMappingList`,xXe=`PlacementStrategy`,SXe=`PlacementStrategies`,CXe=`PlatformTaskDefinitionIncompatibilityException`,wXe=`PlatformUnknownException`,TXe=`Resource`,EXe=`RequiresAttributes`,DXe=`RepositoryCredentials`,OXe=`ResourceInUseException`,kXe=`ResourceNotFoundException`,AXe=`RuntimePlatform`,jXe=`ResourceRequirement`,MXe=`ResourceRequirements`,NXe=`RunTask`,PXe=`RegisterTaskDefinition`,FXe=`RegisterTaskDefinitionRequest`,IXe=`RegisterTaskDefinitionResponse`,LXe=`RunTaskRequest`,RXe=`RunTaskResponse`,zXe=`Resources`,BXe=`Scale`,VXe=`SystemControl`,HXe=`ServiceConnectAccessLogConfiguration`,UXe=`ServiceConnectConfiguration`,WXe=`ServiceConnectClientAlias`,GXe=`ServiceConnectClientAliasList`,KXe=`ServiceCurrentRevisionSummary`,qXe=`ServiceCurrentRevisionSummaryList`,JXe=`ServiceConnectService`,YXe=`ServiceConnectServiceList`,XXe=`ServiceConnectServiceResource`,ZXe=`ServiceConnectServiceResourceList`,QXe=`ServiceConnectTlsConfiguration`,$Xe=`ServiceConnectTlsCertificateAuthority`,eZe=`ServiceConnectTestTrafficHeaderMatchRules`,tZe=`ServiceConnectTestTrafficHeaderRules`,nZe=`ServiceConnectTestTrafficRules`,rZe=`SystemControls`,iZe=`ServiceDeploymentNotFoundException`,aZe=`ServerException`,oZe=`ServiceEvent`,sZe=`ServiceEvents`,cZe=`S3FilesVolumeConfiguration`,lZe=`SecretList`,uZe=`ServiceManagedEBSVolumeConfiguration`,dZe=`ServiceNotActiveException`,fZe=`ServiceNotFoundException`,pZe=`ServiceRegistry`,mZe=`ServiceRegistries`,hZe=`StopTaskRequest`,gZe=`StopTaskResponse`,_Ze=`StopTask`,vZe=`ServiceVolumeConfiguration`,yZe=`ServiceVolumeConfigurations`,bZe=`Secret`,xZe=`Service`,SZe=`Services`,CZe=`Statistics`,wZe=`Tag`,TZe=`ThresholdConfiguration`,EZe=`TimeoutConfiguration`,DZe=`TaskDefinition`,OZe=`TaskDefinitionPlacementConstraint`,kZe=`TaskDefinitionPlacementConstraints`,AZe=`TaskEphemeralStorage`,jZe=`TmpfsList`,MZe=`TaskManagedEBSVolumeConfiguration`,NZe=`TaskManagedEBSVolumeTerminationPolicy`,PZe=`TargetNotConnectedException`,FZe=`TargetNotFoundException`,IZe=`TaskOverride`,LZe=`TaskSet`,RZe=`TaskSetNotFoundException`,zZe=`TaskSets`,BZe=`TaskVolumeConfiguration`,VZe=`TaskVolumeConfigurations`,HZe=`Task`,UZe=`Tags`,WZe=`Tasks`,GZe=`Tmpfs`,KZe=`Ulimit`,qZe=`UpdateContainerInstancesState`,JZe=`UpdateContainerInstancesStateRequest`,YZe=`UpdateContainerInstancesStateResponse`,XZe=`UnsupportedFeatureException`,ZZe=`UpdateInProgressException`,QZe=`UlimitList`,$Ze=`Volume`,eQe=`VolumeFrom`,tQe=`VolumeFromList`,nQe=`VersionInfo`,rQe=`VolumeList`,iQe=`VpcLatticeConfiguration`,aQe=`VpcLatticeConfigurations`,KW=`attachments`,oQe=`agentConnected`,sQe=`advancedConfiguration`,qW=`authorizationConfig`,cQe=`awsvpcConfiguration`,lQe=`agentHash`,uQe=`attachmentId`,dQe=`accessLogConfiguration`,fQe=`alarmNames`,pQe=`appProtocol`,mQe=`accessPointArn`,hQe=`awsPcaAuthorityArn`,gQe=`assignPublicIp`,_Qe=`accessPointId`,vQe=`activeServicesCount`,yQe=`attachmentsStatus`,bQe=`alternateTargetGroupArn`,xQe=`agentUpdateStatus`,SQe=`agentVersion`,CQe=`availabilityZone`,JW=`availabilityZoneRebalancing`,wQe=`action`,TQe=`add`,EQe=`alarms`,YW=`arn`,XW=`attributes`,DQe=`autoprovision`,OQe=`base`,kQe=`bindIP`,AQe=`bakeTimeInMinutes`,ZW=`client`,QW=`clusterArn`,jQe=`configuredAtLaunch`,MQe=`clusterArns`,NQe=`clientAliases`,PQe=`containerArn`,FQe=`connectivityAt`,IQe=`cpuArchitecture`,$W=`createdAt`,LQe=`canaryBakeTimeInMinutes`,RQe=`createdBy`,zQe=`canaryConfiguration`,eG=`containerDefinitions`,BQe=`computedDesiredCount`,tG=`containerInstanceArn`,VQe=`containerInstanceArns`,nG=`containerInstance`,rG=`containerInstances`,iG=`clusterName`,aG=`containerName`,HQe=`containerOverrides`,UQe=`canaryPercent`,oG=`capacityProviderName`,sG=`containerPortRange`,cG=`capacityProviderStrategy`,WQe=`capacityProvider`,lG=`capacityProviders`,uG=`containerPath`,dG=`containerPort`,fG=`credentialsParameter`,GQe=`credentialSpecs`,KQe=`currentServiceDeployment`,qQe=`currentServiceRevisions`,pG=`clientToken`,JQe=`cloudWatchEncryptionEnabled`,YQe=`cloudWatchLogGroupName`,XQe=`capabilities`,mG=`cluster`,hG=`clusters`,gG=`configuration`,_G=`command`,ZQe=`compatibilities`,QQe=`condition`,$Qe=`connectivity`,e$e=`containers`,t$e=`count`,vG=`cpu`,yG=`details`,n$e=`deregisteredAt`,r$e=`discoveryArn`,bG=`deploymentConfiguration`,i$e=`deploymentCircuitBreaker`,xG=`defaultCapacityProviderStrategy`,SG=`desiredCount`,CG=`deploymentController`,a$e=`dockerLabels`,o$e=`disableNetworking`,s$e=`daemonName`,wG=`deviceName`,TG=`discoveryName`,c$e=`dnsName`,l$e=`dependsOn`,u$e=`deleteOnTermination`,d$e=`driverOpts`,f$e=`deleteRequestedAt`,p$e=`dnsServers`,m$e=`dnsSearchDomains`,h$e=`dockerSecurityOptions`,EG=`desiredStatus`,DG=`deviceType`,g$e=`doubleValue`,_$e=`dockerVolumeConfiguration`,v$e=`dockerVersion`,y$e=`devices`,b$e=`deployments`,x$e=`detail`,S$e=`domain`,C$e=`driver`,w$e=`drop`,OG=`error`,T$e=`exitCode`,E$e=`executeCommandConfiguration`,kG=`enableExecuteCommand`,AG=`enableECSManagedTags`,jG=`environmentFiles`,MG=`enableFaultInjection`,D$e=`extraHosts`,O$e=`externalId`,k$e=`ec2InstanceId`,A$e=`entryPoint`,NG=`executionRoleArn`,j$e=`executionStoppedAt`,M$e=`earlySuccessCriteria`,PG=`ephemeralStorage`,N$e=`efsVolumeConfiguration`,FG=`environment`,IG=`enabled`,LG=`enable`,RG=`encrypted`,P$e=`essential`,F$e=`events`,zG=`expression`,I$e=`exact`,BG=`family`,L$e=`firelensConfiguration`,VG=`fargateEphemeralStorage`,R$e=`fargateEphemeralStorageKmsKeyId`,z$e=`familyPrefix`,B$e=`fileSystemArn`,HG=`fileSystemId`,V$e=`failedTasks`,UG=`filesystemType`,H$e=`fsxWindowsFileServerVolumeConfiguration`,WG=`failures`,U$e=`filter`,W$e=`field`,G$e=`force`,K$e=`format`,GG=`group`,q$e=`gpuIds`,KG=`hostname`,J$e=`healthCheck`,qG=`healthCheckGracePeriodSeconds`,Y$e=`hookDetails`,X$e=`httpError`,Z$e=`hardLimit`,Q$e=`healthyPercent`,JG=`hostPortRange`,$$e=`hostPath`,YG=`hostPort`,XG=`healthStatus`,e1e=`hookTargetArn`,t1e=`header`,n1e=`host`,ZG=`id`,r1e=`ipAddress`,i1e=`inferenceAcceleratorOverrides`,QG=`inferenceAccelerators`,a1e=`ipv6Address`,o1e=`issuerCertificateAuthority`,s1e=`imageDigest`,c1e=`ignoredExitCodes`,$G=`ipcMode`,l1e=`initProcessEnabled`,u1e=`ingressPortOverride`,d1e=`includeQueryParameters`,f1e=`idleTimeoutSeconds`,p1e=`integerValue`,m1e=`iam`,eK=`image`,h1e=`interactive`,tK=`include`,g1e=`interval`,nK=`iops`,_1e=`key`,v1e=`kmsKey`,rK=`kmsKeyId`,y1e=`links`,iK=`loadBalancers`,b1e=`loadBalancerName`,aK=`logConfiguration`,x1e=`linearConfiguration`,S1e=`logDriver`,C1e=`lifecycleHooks`,w1e=`linuxParameters`,oK=`lastStatus`,T1e=`lastStartedAt`,E1e=`lastStatusChange`,D1e=`lifecycleStages`,sK=`launchType`,O1e=`lastUpdated`,k1e=`longValue`,A1e=`labels`,j1e=`logging`,cK=`message`,M1e=`managedAgents`,N1e=`metricConfigurations`,lK=`managedEBSVolume`,P1e=`minimumHealthyPercent`,F1e=`metricNames`,I1e=`mountOptions`,L1e=`mountPoints`,R1e=`maximumPercent`,uK=`memoryReservation`,dK=`maxResults`,z1e=`managedStorageConfiguration`,B1e=`maxSwap`,fK=`memory`,V1e=`monitoring`,pK=`name`,H1e=`networkBindings`,mK=`networkConfiguration`,U1e=`neuronDeviceIds`,W1e=`networkInterfaces`,hK=`networkMode`,gK=`nextToken`,_K=`namespace`,vK=`options`,G1e=`overallStatus`,K1e=`operatingSystemFamily`,yK=`overrides`,q1e=`privileged`,bK=`pendingCount`,xK=`placementConstraints`,SK=`proxyConfiguration`,CK=`platformFamily`,J1e=`privateIpv4Address`,Y1e=`productionListenerRule`,X1e=`portMappings`,wK=`pidMode`,TK=`portName`,Z1e=`perRequestTimeoutSeconds`,EK=`placementStrategy`,Q1e=`pullStartedAt`,$1e=`pullStoppedAt`,e0e=`pseudoTerminal`,DK=`pendingTasksCount`,t0e=`pendingTaskCount`,OK=`propagateTags`,kK=`platformVersion`,n0e=`permissions`,AK=`port`,jK=`protocol`,r0e=`properties`,MK=`reason`,NK=`roleArn`,i0e=`restartAttemptPeriod`,PK=`registeredAt`,a0e=`registryArn`,o0e=`requiresAttributes`,s0e=`registeredBy`,c0e=`repositoryCredentials`,l0e=`registeredContainerInstancesCount`,FK=`requiresCompatibilities`,IK=`runningCount`,LK=`rootDirectory`,u0e=`resourceIds`,d0e=`referenceId`,f0e=`runtimeId`,RK=`resourceManagementType`,zK=`readOnly`,p0e=`resetOnHealthyTask`,m0e=`restartPolicy`,BK=`runtimePlatform`,VK=`resourceRequirements`,h0e=`readonlyRootFilesystem`,g0e=`remainingResources`,_0e=`registeredResources`,v0e=`rolloutState`,y0e=`rolloutStateReason`,b0e=`resolutionSeconds`,x0e=`resourceType`,HK=`runningTasksCount`,S0e=`requestedTaskCount`,C0e=`runningTaskCount`,w0e=`revision`,T0e=`retries`,E0e=`role`,UK=`rollback`,WK=`smithy.ts.sdk.synthetic.com.amazonaws.ecs`,D0e=`startedAt`,GK=`serviceArn`,O0e=`serviceArns`,k0e=`stoppedAt`,A0e=`stoppingAt`,KK=`startedBy`,j0e=`s3BucketName`,M0e=`stepBakeTimeInMinutes`,N0e=`systemControls`,qK=`serviceConnectConfiguration`,JK=`serviceConnectDefaults`,P0e=`serviceConnectResources`,F0e=`sourceContainer`,I0e=`stopCode`,L0e=`s3EncryptionEnabled`,R0e=`securityGroups`,YK=`sizeInGiB`,XK=`snapshotId`,z0e=`s3KeyPrefix`,B0e=`softLimit`,V0e=`sharedMemorySize`,ZK=`serviceName`,H0e=`secretOptions`,U0e=`startPeriod`,W0e=`sourcePath`,G0e=`stepPercent`,QK=`statusReason`,$K=`serviceRegistries`,K0e=`stoppedReason`,eq=`schedulingStrategy`,q0e=`stabilityStatusAt`,J0e=`sourceServiceRevisionCleanup`,Y0e=`stringSetValue`,X0e=`stabilityStatus`,Z0e=`startTimeout`,Q0e=`stopTimeout`,$0e=`sourceVolume`,e2e=`s3filesVolumeConfiguration`,t2e=`scale`,n2e=`scope`,r2e=`server`,i2e=`secrets`,a2e=`service`,tq=`services`,nq=`settings`,o2e=`size`,s2e=`sort`,rq=`status`,c2e=`statistics`,l2e=`strategy`,u2e=`subnets`,d2e=`swappiness`,iq=`type`,aq=`taskArn`,f2e=`taskArns`,p2e=`thresholdConfiguration`,m2e=`timeoutConfiguration`,oq=`taskDefinition`,sq=`taskDefinitionArn`,h2e=`taskDefinitionArns`,cq=`transitEncryptionPort`,g2e=`transitEncryption`,lq=`targetGroupArn`,_2e=`targetId`,v2e=`timeoutInMinutes`,y2e=`testListenerRule`,b2e=`terminationPolicy`,uq=`taskRoleArn`,x2e=`taskSetArn`,S2e=`taskSets`,dq=`tagSpecifications`,fq=`targetType`,C2e=`testTrafficRules`,pq=`tags`,mq=`tasks`,hq=`task`,gq=`throughput`,_q=`timeout`,w2e=`tls`,T2e=`tmpfs`,E2e=`user`,vq=`updatedAt`,D2e=`ulimits`,O2e=`unit`,yq=`value`,k2e=`versionConsistency`,bq=`volumeConfigurations`,A2e=`volumesFrom`,j2e=`valueFrom`,M2e=`versionInfo`,xq=`volumeInitializationRate`,Sq=`vpcLatticeConfigurations`,Cq=`volumeType`,wq=`version`,Tq=`volumes`,N2e=`weight`,P2e=`workingDirectory`,O=`com.amazonaws.ecs`,Eq=pt.for(WK),F2e=[-3,WK,`ECSServiceException`,0,[],[]];Eq.registerError(F2e,GW);var Dq=pt.for(O),I2e=[-3,O,Aqe,{[OG]:ZW,[X$e]:403},[cK],[0]];Dq.registerError(I2e,ZKe);var L2e=[-3,O,jqe,{[OG]:ZW},[cK],[0]];Dq.registerError(L2e,mqe);var R2e=[-3,O,Iqe,{[OG]:ZW},[cK],[0]];Dq.registerError(R2e,Eqe);var z2e=[-3,O,Zqe,{[OG]:ZW},[cK],[0]];Dq.registerError(z2e,QKe);var B2e=[-3,O,Bqe,{[OG]:ZW},[cK],[0]];Dq.registerError(B2e,oqe);var V2e=[-3,O,zqe,{[OG]:ZW},[cK],[0]];Dq.registerError(V2e,sqe);var H2e=[-3,O,Uqe,{[OG]:ZW},[cK],[0]];Dq.registerError(H2e,cqe);var U2e=[-3,O,Wqe,{[OG]:ZW},[cK],[0]];Dq.registerError(U2e,lqe);var W2e=[-3,O,nJe,{[OG]:ZW},[cK],[0]];Dq.registerError(W2e,$Ke);var G2e=[-3,O,Qqe,{[OG]:ZW},[u0e,cK],[64,0]];Dq.registerError(G2e,wqe);var K2e=[-3,O,VJe,{[OG]:ZW},[cK],[0]];Dq.registerError(K2e,yqe);var q2e=[-3,O,HJe,{[OG]:ZW},[cK],[0]];Dq.registerError(q2e,bqe);var J2e=[-3,O,kYe,{[OG]:ZW},[cK],[0]];Dq.registerError(J2e,eqe);var Y2e=[-3,O,HYe,{[OG]:ZW},[cK],[0]];Dq.registerError(Y2e,tqe);var X2e=[-3,O,sXe,{[OG]:ZW},[cK],[0]];Dq.registerError(X2e,hqe);var Z2e=[-3,O,pXe,{[OG]:ZW},[cK],[0]];Dq.registerError(Z2e,aqe);var Q2e=[-3,O,mXe,{[OG]:ZW},[cK],[0]];Dq.registerError(Q2e,gqe);var $2e=[-3,O,CXe,{[OG]:ZW},[cK],[0]];Dq.registerError($2e,xqe);var e4e=[-3,O,wXe,{[OG]:ZW},[cK],[0]];Dq.registerError(e4e,vqe);var t4e=[-3,O,OXe,{[OG]:ZW},[cK],[0]];Dq.registerError(t4e,dqe);var n4e=[-3,O,kXe,{[OG]:ZW},[cK],[0]];Dq.registerError(n4e,Cqe);var r4e=[-3,O,aZe,{[OG]:r2e},[cK],[0]];Dq.registerError(r4e,nqe);var i4e=[-3,O,iZe,{[OG]:ZW},[cK],[0]];Dq.registerError(i4e,_qe);var a4e=[-3,O,dZe,{[OG]:ZW},[cK],[0]];Dq.registerError(a4e,Sqe);var o4e=[-3,O,fZe,{[OG]:ZW},[cK],[0]];Dq.registerError(o4e,pqe);var s4e=[-3,O,PZe,{[OG]:ZW},[cK],[0]];Dq.registerError(s4e,uqe);var c4e=[-3,O,FZe,{[OG]:ZW},[cK],[0]];Dq.registerError(c4e,fqe);var l4e=[-3,O,RZe,{[OG]:ZW},[cK],[0]];Dq.registerError(l4e,Tqe);var u4e=[-3,O,XZe,{[OG]:ZW},[cK],[0]];Dq.registerError(u4e,rqe);var d4e=[-3,O,ZZe,{[OG]:ZW},[cK],[0]];Dq.registerError(d4e,iqe);var f4e=[Eq,Dq],p4e=[3,O,Oqe,0,[bQe,Y1e,y2e,NK],[0,0,0,0]],m4e=[3,O,Dqe,0,[ZG,iq,rq,yG],[0,0,0,()=>j6e]],Oq=[3,O,Nqe,0,[pK,yq,fq,_2e],[0,0,0,0],1],h4e=[3,O,Mqe,0,[u2e,R0e,gQe],[64,64,0],1],g4e=[3,O,Rqe,0,[UQe,LQe],[1,1]],_4e=[3,O,oJe,0,[WQe,N2e,OQe],[0,1,1],1],kq=[3,O,Lqe,0,[QW,iG,gG,rq,l0e,HK,DK,vQe,c2e,pq,nq,lG,xG,KW,yQe,JK],[0,0,()=>Aq,0,1,1,1,1,()=>n8e,()=>dJ,()=>Yq,64,()=>Jq,()=>Kq,0,()=>v4e]],Aq=[3,O,Gqe,0,[E$e,z1e],[()=>a3e,()=>M3e]],v4e=[3,O,lJe,0,[_K],[0]],y4e=[3,O,uJe,0,[_K],[0],1],b4e=[3,O,cJe,0,[pK,yq],[0,0]],x4e=[3,O,gJe,0,[PQe,aq,pK,eK,s1e,f0e,oK,T$e,MK,H1e,W1e,XG,M1e,vG,fK,uK,q$e,U1e],[0,0,0,0,0,0,0,1,0,()=>G6e,()=>K6e,0,()=>H6e,0,0,0,64,64]],S4e=[3,O,qqe,0,[pK,eK,c0e,vG,fK,uK,y1e,X1e,P$e,m0e,A$e,_G,FG,jG,L1e,A2e,w1e,i2e,l$e,Z0e,Q0e,k2e,KG,E2e,P2e,o$e,q1e,h0e,p$e,m$e,D$e,h$e,h1e,e0e,a$e,D2e,aK,J$e,N0e,VK,L$e,GQe],[0,0,[()=>U3e,0],1,1,1,64,()=>q6e,2,()=>E4e,64,64,[()=>eJ,0],()=>$q,()=>W6e,()=>c8e,()=>y3e,()=>cJ,()=>N6e,1,1,0,0,0,0,2,2,2,64,64,()=>z6e,64,2,2,128,()=>s8e,()=>Lq,()=>d3e,()=>r8e,()=>oJ,()=>c3e,64]],C4e=[3,O,Jqe,0,[aG,QQe],[0,0],2],jq=[3,O,eJe,0,[tG,k$e,oG,wq,M2e,g0e,_0e,rq,QK,oQe,HK,DK,xQe,XW,PK,KW,pq,XG],[0,0,0,1,()=>D6e,()=>sJ,()=>sJ,0,0,2,1,1,0,()=>qq,4,()=>Kq,()=>dJ,()=>w4e]],w4e=[3,O,$qe,0,[G1e,yG],[0,()=>V6e]],T4e=[3,O,rJe,0,[pK,_G,FG,jG,vG,fK,uK,VK],[0,64,[()=>eJ,0],()=>$q,1,1,1,()=>oJ]],E4e=[3,O,sJe,0,[IG,c1e,i0e],[2,65,1],1],D4e=[3,O,Vqe,0,[iG,pq,nq,gG,lG,xG,JK],[0,()=>dJ,()=>Yq,()=>Aq,64,()=>Jq,()=>y4e]],O4e=[3,O,Hqe,0,[mG],[()=>kq]],k4e=[3,O,dJe,0,[ZK,mG,oq,JW,iK,$K,SG,pG,sK,cG,kK,E0e,bG,xK,EK,mK,qG,eq,CG,pq,AG,OK,kG,qK,bq,Sq,V1e],[0,0,0,0,()=>rJ,()=>lJ,1,0,0,()=>Jq,0,0,()=>Mq,()=>iJ,()=>aJ,()=>Rq,1,0,()=>Nq,()=>dJ,2,0,2,()=>Hq,()=>uJ,()=>hJ,()=>P3e],1],A4e=[3,O,fJe,0,[a2e],[()=>Vq]],j4e=[3,O,OJe,0,[mG],[0],1],M4e=[3,O,kJe,0,[mG],[()=>kq]],N4e=[3,O,vJe,0,[ZG,rq,oq,SG,bK,IK,V$e,$W,vq,cG,sK,kK,CK,mK,v0e,y0e,qK,P0e,bq,VG,Sq],[0,0,0,1,1,1,1,4,4,()=>Jq,0,0,0,()=>Rq,0,0,()=>Hq,()=>Q6e,()=>uJ,()=>Pq,()=>hJ]],P4e=[3,O,yJe,0,[fQe,UK,LG],[64,2,2],3],F4e=[3,O,xJe,0,[LG,UK,p0e,p2e],[2,2,2,()=>x6e],2],Mq=[3,O,bJe,0,[i$e,R1e,P1e,EQe,l2e,AQe,C1e,x1e,zQe,M$e],[()=>F4e,1,1,()=>P4e,0,1,()=>I6e,()=>v3e,()=>g4e,()=>I4e]],Nq=[3,O,MJe,0,[iq],[0],1],I4e=[3,O,IJe,0,[LG,Q$e,J0e],[2,1,0],1],Pq=[3,O,FJe,0,[rK],[0]],L4e=[3,O,RJe,0,[fq,e1e,NK,D1e,Y$e,m2e],[0,0,0,64,15,()=>R4e]],R4e=[3,O,BJe,0,[v2e,wQe],[1,0]],z4e=[3,O,SJe,0,[nG,mG,G$e],[0,0,2],1],B4e=[3,O,CJe,0,[nG],[()=>jq]],V4e=[3,O,qJe,0,[oq],[0],1],H4e=[3,O,JJe,0,[oq],[[()=>Wq,0]]],U4e=[3,O,AJe,0,[hG,tK],[64,64]],W4e=[3,O,jJe,0,[hG,WG],[()=>M6e,()=>tJ]],G4e=[3,O,wJe,0,[rG,mG,tK],[64,0,64],1],K4e=[3,O,TJe,0,[rG,WG],[()=>Zq,()=>tJ]],q4e=[3,O,UJe,0,[tq,mG,tK],[64,0,64],1],J4e=[3,O,WJe,0,[tq,WG],[()=>t8e,()=>tJ]],Y4e=[3,O,YJe,0,[oq,tK],[0,64],1],X4e=[3,O,XJe,0,[oq,pq],[[()=>Wq,0],()=>dJ]],Z4e=[3,O,$Je,0,[mq,mG,tK],[64,0,64],1],Q4e=[3,O,eYe,0,[mq,WG],[[()=>pJ,0],()=>tJ]],$4e=[3,O,nYe,0,[$$e,uG,n0e],[0,0,64],1],e3e=[3,O,tYe,0,[n2e,DQe,C$e,d$e,A1e],[0,2,0,128,128]],t3e=[3,O,iYe,0,[x0e,pq,OK],[0,()=>dJ,0],1],n3e=[3,O,lYe,0,[_Qe,m1e],[0,0]],r3e=[3,O,uYe,0,[HG,LK,g2e,cq,qW],[0,0,0,1,()=>n3e],1],i3e=[3,O,cYe,0,[yq,iq],[0,0],2],Fq=[3,O,fYe,0,[YK],[1],1],a3e=[3,O,oYe,0,[rK,j1e,aK],[0,0,()=>o3e]],o3e=[3,O,sYe,0,[YQe,JQe,j0e,L0e,z0e],[0,2,0,2,0]],s3e=[3,O,mYe,0,[YW,MK,x$e],[0,0,0]],c3e=[3,O,hYe,0,[iq,vK],[0,128],1],l3e=[3,O,gYe,0,[fG,S$e],[0,0],2],u3e=[3,O,_Ye,0,[HG,LK,qW],[0,0,()=>l3e],3],d3e=[3,O,yYe,0,[_G,g1e,_q,T0e,U0e],[64,1,1,1,1],1],f3e=[3,O,bYe,0,[KG,r1e],[0,0],2],p3e=[3,O,SYe,0,[W0e],[0]],m3e=[3,O,CYe,0,[wG,DG],[0,0],2],h3e=[3,O,wYe,0,[wG,DG],[0,0]],g3e=[3,O,DYe,0,[iq,rq,QK,O1e,E1e],[0,0,0,4,4]],_3e=[3,O,AYe,0,[TQe,w$e],[64,64]],Iq=[3,O,jYe,0,[pK,yq],[0,0]],v3e=[3,O,PYe,0,[G0e,M0e],[1,1]],y3e=[3,O,UYe,0,[XQe,y$e,l1e,V0e,T2e,B1e,d2e],[()=>_3e,()=>R6e,2,1,()=>o8e,1,1]],b3e=[3,O,RYe,0,[gK,dK],[0,1]],x3e=[3,O,zYe,0,[MQe,gK],[64,0]],S3e=[3,O,IYe,0,[mG,U$e,gK,dK,rq],[0,0,0,1,0]],C3e=[3,O,LYe,0,[VQe,gK],[64,0]],w3e=[3,O,GYe,0,[mG,gK,dK,sK,eq,RK],[0,0,1,0,0,0]],T3e=[3,O,KYe,0,[O0e,gK],[64,0]],E3e=[3,O,YYe,0,[z$e,rq,s2e,gK,dK],[0,0,0,0,1]],D3e=[3,O,XYe,0,[h2e,gK],[64,0]],O3e=[3,O,ZYe,0,[mG,nG,BG,gK,dK,KK,ZK,EG,sK,s$e],[0,0,0,0,1,0,0,0,0,0]],k3e=[3,O,QYe,0,[f2e,gK],[64,0]],A3e=[3,O,MYe,0,[lq,b1e,aG,dG,sQe],[0,0,0,1,()=>p4e]],Lq=[3,O,VYe,0,[S1e,vK,H0e],[0,128,()=>cJ],1],j3e=[3,O,$Ye,0,[T1e,pK,MK,oK],[4,0,0,0]],M3e=[3,O,oXe,0,[rK,R$e],[0,0]],N3e=[3,O,nXe,0,[F1e,b0e],[64,1],2],P3e=[3,O,rXe,0,[N1e],[()=>U6e]],F3e=[3,O,iXe,0,[$0e,uG,zK],[0,0,2]],I3e=[3,O,cXe,0,[kQe,dG,YG,jK,sG,JG],[0,1,1,0,0,0]],Rq=[3,O,uXe,0,[cQe],[()=>h4e]],L3e=[3,O,dXe,0,[uQe,J1e,a1e],[0,0,0]],R3e=[3,O,hXe,0,[iq,zG],[0,0]],z3e=[3,O,xXe,0,[iq,W$e],[0,0]],B3e=[3,O,yXe,0,[dG,YG,jK,pK,pQe,sG],[1,1,0,0,0,0]],zq=[3,O,vXe,0,[aG,iq,r0e],[0,0,()=>J6e],1],V3e=[3,O,FXe,0,[BG,eG,uq,NG,hK,Tq,xK,FK,vG,fK,pq,wK,$G,SK,QG,PG,BK,MG],[0,[()=>Xq,0],0,0,0,()=>mJ,()=>fJ,64,0,0,()=>dJ,0,0,()=>zq,()=>nJ,()=>Fq,()=>Bq,2],2],H3e=[3,O,IXe,0,[oq,pq],[[()=>Wq,0],()=>dJ]],U3e=[3,O,DXe,8,[fG],[0],1],W3e=[3,O,TXe,0,[pK,iq,g$e,k1e,p1e,Y0e],[0,0,1,1,1,64]],G3e=[3,O,jXe,0,[yq,iq],[0,0],2],K3e=[3,O,LXe,0,[oq,cG,mG,t$e,AG,kG,GG,sK,mK,yK,xK,EK,kK,OK,d0e,KK,pq,pG,bq],[0,()=>Jq,0,1,2,2,0,0,()=>Rq,[()=>Gq,0],()=>iJ,()=>aJ,0,0,0,0,()=>dJ,[0,4],()=>a8e],1],q3e=[3,O,RXe,0,[mq,WG],[[()=>pJ,0],()=>tJ]],Bq=[3,O,AXe,0,[IQe,K1e],[0,0]],J3e=[3,O,cZe,0,[B$e,LK,cq,mQe],[0,0,1,0],1],Y3e=[3,O,BXe,0,[yq,O2e],[1,0]],X3e=[3,O,bZe,0,[pK,j2e],[0,0],2],Vq=[3,O,xZe,0,[GK,ZK,QW,iK,$K,rq,SG,IK,bK,sK,cG,kK,CK,oq,bG,S2e,b$e,NK,F$e,$W,KQe,qQe,xK,EK,mK,qG,eq,CG,pq,RQe,AG,OK,kG,JW,RK],[0,0,0,()=>rJ,()=>lJ,0,1,1,1,0,()=>Jq,0,0,0,()=>Mq,()=>i8e,()=>L6e,0,()=>e8e,4,0,()=>$6e,()=>iJ,()=>aJ,()=>Rq,1,0,()=>Nq,()=>dJ,0,2,0,2,0,0]],Z3e=[3,O,HXe,0,[K$e,d1e],[0,0],1],Q3e=[3,O,WXe,0,[AK,c$e,C2e],[1,0,()=>r6e],1],Hq=[3,O,UXe,0,[IG,_K,tq,aK,dQe],[2,0,()=>Z6e,()=>Lq,()=>Z3e],1],$3e=[3,O,JXe,0,[TK,TG,NQe,u1e,_q,w2e],[0,0,()=>X6e,1,()=>S6e,()=>a6e],1],e6e=[3,O,XXe,0,[TG,r$e],[0,0]],t6e=[3,O,eZe,0,[I$e],[0],1],n6e=[3,O,tZe,0,[pK,yq],[0,()=>t6e],1],r6e=[3,O,nZe,0,[t1e],[()=>n6e],1],i6e=[3,O,$Xe,0,[hQe],[0]],a6e=[3,O,QXe,0,[o1e,v1e,NK],[()=>i6e,0,0],1],o6e=[3,O,KXe,0,[YW,S0e,C0e,t0e],[0,1,1,1]],s6e=[3,O,oZe,0,[ZG,$W,cK],[0,4,0]],c6e=[3,O,uZe,0,[NK,RG,rK,Cq,YK,XK,xq,nK,gq,dq,UG],[0,2,0,0,1,0,1,1,1,()=>Qq,0],1],l6e=[3,O,pZe,0,[a0e,AK,aG,dG],[0,1,0,1]],u6e=[3,O,vZe,0,[pK,lK],[0,()=>c6e],1],d6e=[3,O,hZe,0,[hq,mG,MK],[0,0,0],1],f6e=[3,O,gZe,0,[hq],[[()=>Uq,0]]],p6e=[3,O,VXe,0,[_K,yq],[0,0]],m6e=[3,O,wZe,0,[_1e,yq],[0,0]],Uq=[3,O,HZe,0,[KW,XW,CQe,oG,QW,$Qe,FQe,tG,e$e,vG,$W,EG,kG,j$e,GG,XG,QG,oK,sK,fK,yK,kK,CK,Q1e,$1e,D0e,KK,I0e,k0e,K0e,A0e,pq,aq,sq,wq,PG,VG],[()=>Kq,()=>qq,0,0,0,0,4,0,()=>F6e,0,4,0,2,4,0,0,()=>nJ,0,0,0,[()=>Gq,0],0,0,4,4,4,0,0,4,0,4,()=>dJ,0,0,1,()=>Fq,()=>g6e]],Wq=[3,O,DZe,0,[sq,eG,BG,uq,NG,hK,w0e,Tq,rq,o0e,xK,ZQe,BK,FK,vG,fK,QG,wK,$G,SK,PK,n$e,f$e,s0e,PG,MG],[0,[()=>Xq,0],0,0,0,0,1,()=>mJ,0,()=>Y6e,()=>fJ,64,()=>Bq,64,0,0,()=>nJ,0,0,()=>zq,4,4,4,0,()=>Fq,2]],h6e=[3,O,OZe,0,[iq,zG],[0,0]],g6e=[3,O,AZe,0,[YK,rK],[1,0]],_6e=[3,O,MZe,0,[NK,RG,rK,Cq,YK,XK,xq,nK,gq,dq,b2e,UG],[0,2,0,0,1,0,1,1,1,()=>Qq,()=>v6e,0],1],v6e=[3,O,NZe,0,[u$e],[2],1],Gq=[3,O,IZe,0,[HQe,vG,i1e,NG,fK,uq,PG],[[()=>P6e,0],0,()=>B6e,0,0,0,()=>Fq]],y6e=[3,O,LZe,0,[ZG,x2e,GK,QW,KK,O$e,rq,oq,BQe,bK,IK,$W,vq,sK,cG,kK,CK,mK,iK,$K,t2e,X0e,q0e,pq,VG],[0,0,0,0,0,0,0,0,1,1,1,4,4,0,()=>Jq,0,0,()=>Rq,()=>rJ,()=>lJ,()=>Y3e,0,4,()=>dJ,()=>Pq]],b6e=[3,O,BZe,0,[pK,lK],[0,()=>_6e],1],x6e=[3,O,TZe,0,[iq,yq],[0,1],2],S6e=[3,O,EZe,0,[f1e,Z1e],[1,1]],C6e=[3,O,GZe,0,[uG,o2e,I1e],[0,1,64],2],w6e=[3,O,KZe,0,[pK,B0e,Z$e],[0,1,1],3],T6e=[3,O,JZe,0,[rG,rq,mG],[64,0,0],2],E6e=[3,O,YZe,0,[rG,WG],[()=>Zq,()=>tJ]],D6e=[3,O,nQe,0,[SQe,lQe,v$e],[0,0,0]],O6e=[3,O,$Ze,0,[pK,n1e,_$e,N$e,e2e,H$e,jQe],[0,()=>p3e,()=>e3e,()=>r3e,()=>J3e,()=>u3e,2]],k6e=[3,O,eQe,0,[F0e,zK],[0,2]],A6e=[3,O,iQe,0,[NK,lq,TK],[0,0,0],3],j6e=[1,O,kqe,0,()=>Iq],Kq=[1,O,Pqe,0,()=>m4e],qq=[1,O,Fqe,0,()=>Oq],Jq=[1,O,aJe,0,()=>_4e],M6e=[1,O,hJe,0,()=>kq],Yq=[1,O,pJe,0,()=>b4e],Xq=[1,O,Yqe,0,[()=>S4e,0]],N6e=[1,O,Xqe,0,()=>C4e],Zq=[1,O,tJe,0,()=>jq],P6e=[1,O,iJe,0,[()=>T4e,0]],F6e=[1,O,_Je,0,()=>x4e],I6e=[1,O,zJe,0,()=>L4e],L6e=[1,O,rYe,0,()=>N4e],R6e=[1,O,LJe,0,()=>$4e],Qq=[1,O,aYe,0,()=>t3e],$q=[1,O,dYe,0,()=>i3e],eJ=[1,O,pYe,8,()=>Iq],tJ=[1,O,vYe,0,()=>s3e],z6e=[1,O,xYe,0,()=>f3e],B6e=[1,O,TYe,0,()=>h3e],nJ=[1,O,EYe,0,()=>m3e],V6e=[1,O,OYe,0,()=>g3e],rJ=[1,O,NYe,0,()=>A3e],H6e=[1,O,eXe,0,()=>j3e],U6e=[1,O,tXe,0,()=>N3e],W6e=[1,O,aXe,0,()=>F3e],G6e=[1,O,lXe,0,()=>I3e],K6e=[1,O,fXe,0,()=>L3e],iJ=[1,O,_Xe,0,()=>R3e],aJ=[1,O,SXe,0,()=>z3e],q6e=[1,O,bXe,0,()=>B3e],J6e=[1,O,gXe,0,()=>Iq],Y6e=[1,O,EXe,0,()=>Oq],oJ=[1,O,MXe,0,()=>G3e],sJ=[1,O,zXe,0,()=>W3e],cJ=[1,O,lZe,0,()=>X3e],X6e=[1,O,GXe,0,()=>Q3e],Z6e=[1,O,YXe,0,()=>$3e],Q6e=[1,O,ZXe,0,()=>e6e],$6e=[1,O,qXe,0,()=>o6e],e8e=[1,O,sZe,0,()=>s6e],lJ=[1,O,mZe,0,()=>l6e],t8e=[1,O,SZe,0,()=>Vq],uJ=[1,O,yZe,0,()=>u6e],n8e=[1,O,CZe,0,()=>Iq],r8e=[1,O,rZe,0,()=>p6e],dJ=[1,O,UZe,0,()=>m6e],fJ=[1,O,kZe,0,()=>h6e],pJ=[1,O,WZe,0,[()=>Uq,0]],i8e=[1,O,zZe,0,()=>y6e],a8e=[1,O,VZe,0,()=>b6e],o8e=[1,O,jZe,0,()=>C6e],s8e=[1,O,QZe,0,()=>w6e],c8e=[1,O,tQe,0,()=>k6e],mJ=[1,O,rQe,0,()=>O6e],hJ=[1,O,aQe,0,()=>A6e],l8e=[9,O,Kqe,0,()=>D4e,()=>O4e],u8e=[9,O,mJe,0,()=>k4e,()=>A4e],d8e=[9,O,NJe,2,()=>j4e,()=>M4e],f8e=[9,O,EJe,0,()=>z4e,()=>B4e],p8e=[9,O,ZJe,0,()=>V4e,()=>H4e],m8e=[9,O,PJe,0,()=>U4e,()=>W4e],h8e=[9,O,DJe,0,()=>G4e,()=>K4e],g8e=[9,O,GJe,0,()=>q4e,()=>J4e],_8e=[9,O,QJe,0,()=>Y4e,()=>X4e],v8e=[9,O,KJe,0,()=>Z4e,()=>Q4e],y8e=[9,O,BYe,0,()=>b3e,()=>x3e],b8e=[9,O,FYe,0,()=>S3e,()=>C3e],x8e=[9,O,WYe,0,()=>w3e,()=>T3e],S8e=[9,O,JYe,0,()=>E3e,()=>D3e],C8e=[9,O,qYe,0,()=>O3e,()=>k3e],w8e=[9,O,PXe,0,()=>V3e,()=>H3e],T8e=[9,O,NXe,0,()=>K3e,()=>q3e],E8e=[9,O,_Ze,0,()=>d6e,()=>f6e],D8e=[9,O,qZe,0,()=>T6e,()=>E6e],O8e=e=>({apiVersion:`2014-11-13`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??XKe,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??VKe,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??$t,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.ecs`,errorTypeRegistries:f4e,xmlNamespace:`http://ecs.amazonaws.com/doc/2014-11-13/`,version:`2014-11-13`,serviceTarget:`AmazonEC2ContainerServiceV20141113`},serviceId:e?.serviceId??`ECS`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),k8e=e=>{let t=he(e),n=()=>t().then(a),r=O8e(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:GKe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},A8e=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},j8e=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),M8e=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),A8e(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),j8e(n))},N8e=class extends le{config;constructor(...[t]){let n=k8e(t||{});super(n),this.initConfig=n;let r=UKe(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=M8e(HKe(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:zKe,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},P8e=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function F8e(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`eks`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var I8e=e=>{let t=[];return e.operation,t.push(F8e(e)),t},L8e=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},R8e=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`eks`}),z8e={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},B8e={name:`@aws-sdk/client-eks`,version:`3.1135.0`,description:`AWS SDK for JavaScript Eks Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-eks`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-eks`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},gJ=`ref`,_J=-1,vJ=!0,yJ=`isSet`,bJ=`PartitionResult`,xJ=`booleanEquals`,SJ=`getAttr`,CJ=`stringEquals`,wJ={[gJ]:`Endpoint`},TJ={[gJ]:bJ},EJ={fn:SJ,argv:[TJ,`name`]},DJ={},OJ=[{[gJ]:`Region`}],kJ={conditions:[[yJ,[wJ]],[yJ,OJ],[`aws.partition`,OJ,bJ],[xJ,[{[gJ]:`UseFIPS`},vJ]],[xJ,[{[gJ]:`UseDualStack`},vJ]],[xJ,[{fn:SJ,argv:[TJ,`supportsDualStack`]},vJ]],[xJ,[{fn:SJ,argv:[TJ,`supportsFIPS`]},vJ]],[CJ,[EJ,`aws`]],[CJ,[EJ,`aws-us-gov`]]],results:[[_J],[_J,`Invalid Configuration: FIPS and custom endpoint are not supported`],[_J,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[wJ,DJ],[`https://eks-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,DJ],[_J,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://fips.eks.{Region}.amazonaws.com`,DJ],[`https://eks.{Region}.amazonaws.com`,DJ],[`https://eks-fips.{Region}.{PartitionResult#dnsSuffix}`,DJ],[_J,`FIPS is enabled but this partition does not support FIPS`],[`https://eks.{Region}.{PartitionResult#dualStackDnsSuffix}`,DJ],[_J,`DualStack is enabled but this partition does not support DualStack`],[`https://eks.{Region}.{PartitionResult#dnsSuffix}`,DJ],[_J,`Invalid Configuration: Missing Region`]]},V8e=2,H8e=new Int32Array([-1,1,-1,0,14,3,1,4,100000013,2,5,100000013,3,8,6,4,7,100000012,5,100000010,100000011,4,12,9,6,10,100000009,7,100000006,11,8,100000007,100000008,5,13,100000005,6,100000004,100000005,3,100000001,15,4,100000002,100000003]),U8e=xe.from(H8e,V8e,kJ.conditions,kJ.results),W8e=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),G8e=(e,t={})=>W8e.get(e,()=>ut(U8e,{endpointParams:e,logger:t.logger}));Le.aws=oe;var AJ=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},K8e=class e extends AJ{name=`AccessDeniedException`;$fault=`client`;constructor(t){super({name:`AccessDeniedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},q8e=class e extends AJ{name=`InvalidParameterException`;$fault=`client`;clusterName;nodegroupName;fargateProfileName;addonName;subscriptionId;constructor(t){super({name:`InvalidParameterException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.fargateProfileName=t.fargateProfileName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},J8e=class e extends AJ{name=`ResourceNotFoundException`;$fault=`client`;clusterName;nodegroupName;fargateProfileName;addonName;subscriptionId;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.fargateProfileName=t.fargateProfileName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},Y8e=class e extends AJ{name=`ServerException`;$fault=`server`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`ServerException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},X8e=class e extends AJ{name=`ServiceUnavailableException`;$fault=`server`;constructor(t){super({name:`ServiceUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Z8e=class e extends AJ{name=`InvalidRequestException`;$fault=`client`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`InvalidRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},Q8e=class e extends AJ{name=`ClientException`;$fault=`client`;clusterName;nodegroupName;addonName;subscriptionId;constructor(t){super({name:`ClientException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName,this.subscriptionId=t.subscriptionId}},$8e=class e extends AJ{name=`ResourceInUseException`;$fault=`client`;clusterName;nodegroupName;addonName;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.addonName=t.addonName}},e5e=class e extends AJ{name=`ThrottlingException`;$fault=`client`;clusterName;constructor(t){super({name:`ThrottlingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName}},t5e=class e extends AJ{name=`InvalidStateException`;$fault=`client`;clusterName;constructor(t){super({name:`InvalidStateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName}},n5e=class e extends AJ{name=`ResourceLimitExceededException`;$fault=`client`;clusterName;nodegroupName;subscriptionId;constructor(t){super({name:`ResourceLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.subscriptionId=t.subscriptionId}},r5e=class e extends AJ{name=`UnsupportedAvailabilityZoneException`;$fault=`client`;clusterName;nodegroupName;validZones;constructor(t){super({name:`UnsupportedAvailabilityZoneException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.clusterName=t.clusterName,this.nodegroupName=t.nodegroupName,this.validZones=t.validZones}},i5e=class e extends AJ{name=`BadRequestException`;$fault=`client`;constructor(t){super({name:`BadRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},a5e=class e extends AJ{name=`NotFoundException`;$fault=`client`;constructor(t){super({name:`NotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},o5e=class e extends AJ{name=`ResourcePropagationDelayException`;$fault=`client`;constructor(t){super({name:`ResourcePropagationDelayException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},s5e=`Addon`,c5e=`AssociatedAccessPolicy`,l5e=`AssociatedAccessPoliciesList`,u5e=`AssociateAccessPolicyRequest`,d5e=`AssociateAccessPolicyResponse`,f5e=`AssociateAccessPolicy`,p5e=`ActiveCertificateAuthority`,m5e=`AccessConfigResponse`,h5e=`AccessDeniedException`,g5e=`AccessEntry`,_5e=`AddonHealth`,v5e=`AddonInfo`,y5e=`AddonIssueList`,b5e=`AddonIssue`,x5e=`AddonNamespaceConfigRequest`,S5e=`AddonNamespaceConfigResponse`,C5e=`AccessPolicy`,w5e=`AddonPodIdentityAssociations`,T5e=`AddonPodIdentityAssociationsList`,E5e=`AccessPoliciesList`,D5e=`AccessScope`,O5e=`AutoScalingGroup`,k5e=`AutoScalingGroupList`,A5e=`AddonVersionInfo`,j5e=`AddonVersionInfoList`,M5e=`Addons`,N5e=`BadRequestException`,P5e=`BlockStorage`,F5e=`Cancellation`,I5e=`CreateAccessConfigRequest`,L5e=`CreateAccessEntry`,R5e=`CreateAccessEntryRequest`,z5e=`CreateAccessEntryResponse`,B5e=`CreateAddonRequest`,V5e=`CreateAddonResponse`,H5e=`CreateAddon`,U5e=`ComputeConfigRequest`,W5e=`ComputeConfigResponse`,G5e=`ConnectorConfigResponse`,K5e=`CreateClusterRequest`,q5e=`CreateClusterResponse`,J5e=`CreateCluster`,Y5e=`ClientException`,X5e=`ClusterHealth`,Z5e=`ClusterIssueList`,Q5e=`ClusterIssue`,$5e=`CreateNodegroup`,e7e=`CreateNodegroupRequest`,t7e=`CreateNodegroupResponse`,n7e=`ControlPlanePlacementRequest`,r7e=`ControlPlanePlacementResponse`,i7e=`ControlPlaneScalingConfig`,a7e=`Certificate`,o7e=`Cluster`,s7e=`Compatibility`,c7e=`Compatibilities`,l7e=`DeleteAddon`,u7e=`DeleteAccessEntry`,d7e=`DeleteAccessEntryRequest`,f7e=`DeleteAccessEntryResponse`,p7e=`DescribeAccessEntryRequest`,m7e=`DescribeAccessEntryResponse`,h7e=`DescribeAccessEntry`,g7e=`DisassociateAccessPolicy`,_7e=`DisassociateAccessPolicyRequest`,v7e=`DisassociateAccessPolicyResponse`,y7e=`DeleteAddonRequest`,b7e=`DeleteAddonResponse`,x7e=`DescribeAddonRequest`,S7e=`DescribeAddonResponse`,C7e=`DescribeAddonVersions`,w7e=`DescribeAddonVersionsRequest`,T7e=`DescribeAddonVersionsResponse`,E7e=`DescribeAddon`,D7e=`DeleteClusterRequest`,O7e=`DeleteClusterResponse`,k7e=`DescribeClusterRequest`,A7e=`DescribeClusterResponse`,j7e=`DeleteCluster`,M7e=`DescribeCluster`,N7e=`DeleteNodegroup`,P7e=`DeleteNodegroupRequest`,F7e=`DeleteNodegroupResponse`,I7e=`DescribeNodegroupRequest`,L7e=`DescribeNodegroupResponse`,R7e=`DescribeNodegroup`,z7e=`EncryptionConfig`,B7e=`EncryptionConfigList`,V7e=`ErrorDetail`,H7e=`ErrorDetails`,U7e=`ElasticLoadBalancing`,W7e=`EtcdPlacementRequest`,G7e=`EtcdPlacementResponse`,K7e=`HorizontalPodAutoscalerControllerConfigRequest`,q7e=`HorizontalPodAutoscalerControllerConfigResponse`,J7e=`Identity`,Y7e=`IssueList`,X7e=`InvalidParameterException`,Z7e=`InvalidRequestException`,Q7e=`InvalidStateException`,$7e=`Issue`,e9e=`KubeApiServerConfigRequest`,t9e=`KubeApiServerConfigResponse`,n9e=`KubeControllerManagerConfigRequest`,r9e=`KubeControllerManagerConfigResponse`,i9e=`KubernetesNetworkConfigRequest`,a9e=`KubernetesNetworkConfigResponse`,o9e=`KubeSchedulerConfigRequest`,s9e=`KubeSchedulerConfigResponse`,c9e=`ListAddons`,l9e=`ListAssociatedAccessPolicies`,u9e=`ListAssociatedAccessPoliciesRequest`,d9e=`ListAssociatedAccessPoliciesResponse`,f9e=`ListAccessEntries`,p9e=`ListAccessEntriesRequest`,m9e=`ListAccessEntriesResponse`,h9e=`ListAccessPolicies`,g9e=`ListAccessPoliciesRequest`,_9e=`ListAccessPoliciesResponse`,v9e=`ListAddonsRequest`,y9e=`ListAddonsResponse`,b9e=`ListClustersRequest`,x9e=`ListClustersResponse`,S9e=`ListClusters`,C9e=`ListNodegroups`,w9e=`ListNodegroupsRequest`,T9e=`ListNodegroupsResponse`,E9e=`LogSetup`,D9e=`LogSetups`,O9e=`LaunchTemplateSpecification`,k9e=`Logging`,A9e=`MarketplaceInformation`,j9e=`Nodegroup`,M9e=`NotFoundException`,N9e=`NodegroupHealth`,P9e=`NodegroupResources`,F9e=`NodeRepairConfig`,I9e=`NodeRepairConfigOverrides`,L9e=`NodeRepairConfigOverridesList`,R9e=`NodeResourcesFitConfig`,z9e=`NodegroupScalingConfig`,B9e=`NodegroupUpdateConfig`,V9e=`OutpostConfigRequest`,H9e=`OutpostConfigResponse`,U9e=`OIDC`,W9e=`Provider`,G9e=`PodGcControllerConfigRequest`,K9e=`PodGcControllerConfigResponse`,q9e=`RemoteAccessConfig`,J9e=`ResourceInUseException`,Y9e=`ResourceLimitExceededException`,X9e=`RemoteNetworkConfigRequest`,Z9e=`RemoteNetworkConfigResponse`,Q9e=`ResourceNotFoundException`,$9e=`RemoteNodeNetwork`,eet=`RemoteNodeNetworkList`,tet=`ResourcePropagationDelayException`,net=`RemotePodNetwork`,ret=`RemotePodNetworkList`,iet=`ResourceWeight`,aet=`ResourceWeightList`,oet=`StorageConfigRequest`,set=`StorageConfigResponse`,cet=`ServerException`,uet=`ServiceNodePortRange`,det=`ScoringStrategy`,fet=`ServiceUnavailableException`,pet=`Taint`,met=`ThrottlingException`,het=`Update`,get=`UpdateAddon`,_et=`UpdateAddonRequest`,vet=`UpdateAddonResponse`,yet=`UnsupportedAvailabilityZoneException`,bet=`UpdateLabelsPayload`,xet=`UpdateNodegroupConfig`,Cet=`UpdateNodegroupConfigRequest`,wet=`UpdateNodegroupConfigResponse`,Tet=`UpdateNodegroupVersion`,Eet=`UpdateNodegroupVersionRequest`,Det=`UpdateNodegroupVersionResponse`,Oet=`UpdateParam`,ket=`UpgradePolicyRequest`,Aet=`UpgradePolicyResponse`,jet=`UpdateParams`,Met=`UpdateTaintsPayload`,Net=`VpcConfigRequest`,Pet=`VpcConfigResponse`,Fet=`WarmPoolConfig`,Iet=`ZonalShiftConfigRequest`,Let=`ZonalShiftConfigResponse`,jJ=`arn`,Ret=`addonArn`,zet=`associatedAccessPolicy`,Bet=`associatedAccessPolicies`,Vet=`associatedAt`,Het=`activatedBy`,MJ=`accessConfig`,Uet=`activationCode`,Wet=`activationExpiry`,Get=`accessEntryArn`,NJ=`accessEntry`,Ket=`accessEntries`,qet=`activationId`,PJ=`authenticationMode`,FJ=`addonName`,Jet=`addOrUpdateLabels`,Yet=`addOrUpdateTaints`,Xet=`accessPolicies`,IJ=`associatedPolicyArn`,LJ=`accessScope`,Zet=`autoScalingGroups`,RJ=`amiType`,zJ=`addonVersion`,Qet=`addonVersions`,$et=`active`,BJ=`addon`,VJ=`addons`,ett=`architecture`,HJ=`bootstrapClusterCreatorAdminPermissions`,UJ=`blockStorage`,ttt=`bootstrapSelfManagedAddons`,WJ=`client`,GJ=`createdAt`,ntt=`certificateAuthority`,rtt=`connectorConfig`,KJ=`computeConfig`,itt=`clusterLogging`,qJ=`clusterName`,JJ=`controlPlaneEgressMode`,YJ=`controlPlaneInstanceType`,XJ=`controlPlanePlacement`,ZJ=`controlPlaneScalingConfig`,QJ=`clientRequestToken`,att=`clusterSecurityGroupId`,ott=`computeTypes`,$J=`capacityType`,eY=`configurationValues`,stt=`clusterVersion`,ctt=`cancellation`,tY=`cidrs`,nY=`cluster`,ltt=`clusters`,rY=`code`,utt=`compatibilities`,dtt=`data`,ftt=`defaultNamespace`,iY=`deletionProtection`,ptt=`desiredSize`,aY=`diskSize`,mtt=`defaultVersion`,oY=`error`,sY=`encryptionConfig`,htt=`errorCode`,cY=`etcdInstanceType`,lY=`elasticLoadBalancing`,gtt=`errorMessage`,uY=`etcdPlacement`,dY=`endpointPublicAccess`,fY=`endpointPrivateAccess`,_tt=`ec2SshKey`,pY=`eventTtl`,vtt=`effect`,mY=`enabled`,ytt=`endpoint`,btt=`errors`,hY=`fargateProfileName`,xtt=`force`,gY=`groupName`,_Y=`health`,vY=`httpError`,yY=`horizontalPodAutoscalerControllerConfig`,bY=`horizontalPodAutoscalerSyncPeriod`,xY=`httpQuery`,SY=`http`,CY=`id`,wY=`ipFamily`,TY=`instanceTypes`,Stt=`identity`,EY=`include`,DY=`issues`,Ctt=`issuer`,wtt=`key`,Ttt=`keyArn`,OY=`kubeApiServerConfig`,kY=`kubeControllerManagerConfig`,AY=`kubernetesGroups`,jY=`kubernetesNetworkConfig`,MY=`kubeSchedulerConfig`,NY=`kubernetesVersion`,PY=`logging`,FY=`launchTemplate`,IY=`labels`,LY=`message`,RY=`modifiedAt`,Ett=`maxGroupPreparedCapacity`,zY=`marketplaceInformation`,Dtt=`minPort`,Ott=`maxParallelNodesRepairedCount`,ktt=`maxParallelNodesRepairedPercentage`,Att=`maxPort`,BY=`maxResults`,jtt=`minRepairWaitTimeMins`,VY=`minSize`,Mtt=`maxSize`,Ntt=`maxUnavailable`,Ptt=`maxUnhealthyNodeThresholdCount`,Ftt=`maxUnhealthyNodeThresholdPercentage`,Itt=`maxUnavailablePercentage`,HY=`name`,Ltt=`nodegroupArn`,UY=`namespaceConfig`,Rtt=`nodeMonitoringCondition`,WY=`nodegroupName`,GY=`nodePools`,KY=`nodeRole`,qY=`nodeRoleArn`,JY=`nodeRepairConfig`,ztt=`nodeRepairConfigOverrides`,YY=`nodeResourcesFit`,XY=`nextToken`,Btt=`nodeUnhealthyReason`,Vtt=`namespaces`,ZY=`namespace`,QY=`nodegroup`,Htt=`nodegroups`,$Y=`owner`,eX=`outpostArns`,tX=`outpostConfig`,Utt=`oidc`,nX=`owners`,rX=`publisher`,iX=`principalArn`,aX=`publicAccessCidrs`,oX=`policyArn`,sX=`podGcControllerConfig`,Wtt=`productId`,cX=`podIdentityAssociations`,Gtt=`poolState`,Ktt=`productUrl`,qtt=`platformVersion`,Jtt=`platformVersions`,Ytt=`params`,lX=`provider`,uX=`preserve`,dX=`publishers`,fX=`roleArn`,Xtt=`remoteAccessSecurityGroup`,pX=`remoteAccess`,Ztt=`repairAction`,Qtt=`requiresConfiguration`,mX=`resolveConflicts`,hX=`resourceIds`,$tt=`requiresIamPermissions`,ent=`removeLabels`,gX=`remoteNetworkConfig`,_X=`remoteNodeNetworks`,tnt=`reuseOnScaleIn`,vX=`remotePodNetworks`,nnt=`removeTaints`,yX=`releaseVersion`,bX=`resourcesVpcConfig`,rnt=`reason`,xX=`resources`,SX=`smithy.ts.sdk.synthetic.com.amazonaws.eks`,int=`serviceAccount`,CX=`serviceAccountRoleArn`,wX=`storageConfig`,TX=`scalingConfig`,EX=`securityGroupIds`,DX=`subscriptionId`,OX=`serviceIpv4Cidr`,ant=`serviceIpv6Cidr`,kX=`subnetIds`,AX=`spreadLevel`,jX=`serviceNodePortRange`,ont=`sourceSecurityGroups`,snt=`scoringStrategy`,MX=`supportType`,NX=`server`,PX=`status`,FX=`subnets`,IX=`tags`,cnt=`taintsList`,LX=`terminatedPodGcThreshold`,RX=`taints`,lnt=`tier`,zX=`type`,BX=`types`,VX=`username`,HX=`updateConfig`,UX=`upgradePolicy`,unt=`updateStrategy`,WX=`update`,GX=`version`,dnt=`vpcId`,fnt=`validZones`,KX=`value`,pnt=`weight`,qX=`warmPoolConfig`,JX=`zonalShiftConfig`,k=`com.amazonaws.eks`,YX=pt.for(SX),mnt=[-3,SX,`EKSServiceException`,0,[],[]];YX.registerError(mnt,AJ);var XX=pt.for(k),hnt=[-3,k,h5e,{[oY]:WJ,[vY]:403},[LY],[0]];XX.registerError(hnt,K8e);var gnt=[-3,k,N5e,{[oY]:WJ,[vY]:400},[LY],[0]];XX.registerError(gnt,i5e);var _nt=[-3,k,Y5e,{[oY]:WJ,[vY]:400},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(_nt,Q8e);var vnt=[-3,k,X7e,{[oY]:WJ,[vY]:400},[qJ,WY,hY,FJ,DX,LY],[0,0,0,0,0,0]];XX.registerError(vnt,q8e);var ynt=[-3,k,Z7e,{[oY]:WJ,[vY]:400},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(ynt,Z8e);var bnt=[-3,k,Q7e,{[oY]:WJ,[vY]:400},[qJ,LY],[0,0]];XX.registerError(bnt,t5e);var xnt=[-3,k,M9e,{[oY]:WJ,[vY]:404},[LY],[0]];XX.registerError(xnt,a5e);var Snt=[-3,k,J9e,{[oY]:WJ,[vY]:409},[qJ,WY,FJ,LY],[0,0,0,0]];XX.registerError(Snt,$8e);var Cnt=[-3,k,Y9e,{[oY]:WJ,[vY]:400},[qJ,WY,DX,LY],[0,0,0,0]];XX.registerError(Cnt,n5e);var wnt=[-3,k,Q9e,{[oY]:WJ,[vY]:404},[qJ,WY,hY,FJ,DX,LY],[0,0,0,0,0,0]];XX.registerError(wnt,J8e);var Tnt=[-3,k,tet,{[oY]:WJ,[vY]:428},[LY],[0]];XX.registerError(Tnt,o5e);var Ent=[-3,k,cet,{[oY]:NX,[vY]:500},[qJ,WY,FJ,DX,LY],[0,0,0,0,0]];XX.registerError(Ent,Y8e);var Dnt=[-3,k,fet,{[oY]:NX,[vY]:503},[LY],[0]];XX.registerError(Dnt,X8e);var Ont=[-3,k,met,{[oY]:WJ,[vY]:429},[qJ,LY],[0,0]];XX.registerError(Ont,e5e);var knt=[-3,k,yet,{[oY]:WJ,[vY]:400},[LY,qJ,WY,fnt],[0,0,0,64]];XX.registerError(knt,r5e);var Ant=[YX,XX],jnt=[3,k,m5e,0,[HJ,PJ],[2,0]],ZX=[3,k,g5e,0,[qJ,iX,AY,Get,GJ,RY,IX,VX,zX],[0,0,64,0,4,4,128,0,0]],Mnt=[3,k,C5e,0,[HY,jJ],[0,0]],QX=[3,k,D5e,0,[zX,Vtt],[0,64]],Nnt=[3,k,p5e,0,[CY,Het],[0,0]],$X=[3,k,s5e,0,[FJ,qJ,PX,zJ,_Y,Ret,GJ,RY,CX,IX,rX,$Y,zY,eY,cX,UY],[0,0,0,0,()=>Pnt,0,4,4,0,128,0,0,()=>sZ,0,64,()=>Rnt]],Pnt=[3,k,_5e,0,[DY],[()=>Rit]],Fnt=[3,k,v5e,0,[FJ,zX,Qet,rX,$Y,zY,ftt],[0,0,()=>Bit,0,0,()=>sZ,0]],Int=[3,k,b5e,0,[rY,LY,hX],[0,0,64]],Lnt=[3,k,x5e,0,[ZY],[0]],Rnt=[3,k,S5e,0,[ZY],[0]],znt=[3,k,w5e,0,[int,fX],[0,0],2],Bnt=[3,k,A5e,0,[zJ,ett,ott,utt,Qtt,$tt],[0,64,64,()=>Wit,2,2]],Vnt=[3,k,u5e,0,[qJ,iX,oX,LJ],[[0,1],[0,1],0,()=>QX],4],Hnt=[3,k,d5e,0,[qJ,iX,zet],[0,0,()=>eZ]],eZ=[3,k,c5e,0,[oX,LJ,Vet,RY],[0,()=>QX,4,4]],Unt=[3,k,O5e,0,[HY],[0]],tZ=[3,k,P5e,0,[mY],[2]],Wnt=[3,k,F5e,0,[PX,rnt],[0,0]],Gnt=[3,k,a7e,0,[dtt,$et],[0,()=>Nnt]],nZ=[3,k,o7e,0,[HY,jJ,GJ,GX,ytt,fX,bX,jY,PY,Stt,PX,ntt,QJ,qtt,IX,sY,rtt,CY,_Y,tX,MJ,UX,JX,gX,KJ,wX,iY,ZJ,OY,MY,kY],[0,0,4,0,0,0,()=>Pit,()=>Hrt,()=>oZ,()=>Frt,0,()=>Gnt,0,0,128,()=>vZ,()=>Znt,0,()=>Knt,()=>lit,()=>jnt,()=>Mit,()=>Iit,()=>mit,()=>Xnt,()=>bit,2,()=>rZ,()=>Rrt,()=>Wrt,()=>Brt]],Knt=[3,k,X5e,0,[DY],[()=>Uit]],qnt=[3,k,Q5e,0,[rY,LY,hX],[0,0,64]],Jnt=[3,k,s7e,0,[stt,Jtt,mtt],[0,64,2]],Ynt=[3,k,U5e,0,[mY,GY,qY],[2,64,0]],Xnt=[3,k,W5e,0,[mY,GY,qY],[2,64,0]],Znt=[3,k,G5e,0,[qet,Uet,Wet,lX,fX],[0,0,4,0,0]],Qnt=[3,k,n7e,0,[gY,AX],[0,0]],$nt=[3,k,r7e,0,[gY,AX],[0,0]],rZ=[3,k,i7e,0,[lnt],[0]],ert=[3,k,I5e,0,[HJ,PJ],[2,0]],trt=[3,k,R5e,0,[qJ,iX,AY,IX,QJ,VX,zX],[[0,1],0,64,128,[0,4],0,0],2],nrt=[3,k,z5e,0,[NJ],[()=>ZX]],rrt=[3,k,B5e,0,[qJ,FJ,zJ,CX,mX,QJ,IX,eY,cX,UY],[[0,1],0,0,0,0,[0,4],128,0,()=>_Z,()=>Lnt],2],irt=[3,k,V5e,0,[BJ],[()=>$X]],art=[3,k,K5e,0,[HY,fX,bX,GX,jY,PY,QJ,IX,sY,tX,MJ,ttt,UX,JX,gX,KJ,wX,iY,ZJ,OY,MY,kY],[0,0,()=>Nit,0,()=>Vrt,()=>oZ,[0,4],128,()=>vZ,()=>cit,()=>ert,2,()=>jit,()=>Fit,()=>pit,()=>Ynt,()=>yit,2,()=>rZ,()=>Lrt,()=>Urt,()=>zrt],3],ort=[3,k,q5e,0,[nY],[()=>nZ]],srt=[3,k,e7e,0,[qJ,WY,FX,KY,TX,aY,TY,RJ,pX,IY,RX,IX,QJ,FY,HX,JY,$J,GX,yX,qX],[[0,1],0,64,0,()=>lZ,1,64,0,()=>pZ,128,()=>xZ,128,[0,4],()=>aZ,()=>uZ,()=>dZ,0,0,0,()=>gZ],4],crt=[3,k,t7e,0,[QY],[()=>cZ]],lrt=[3,k,d7e,0,[qJ,iX],[[0,1],[0,1]],2],urt=[3,k,f7e,0,[],[]],drt=[3,k,y7e,0,[qJ,FJ,uX],[[0,1],[0,1],[2,{[xY]:uX}]],2],frt=[3,k,b7e,0,[BJ],[()=>$X]],prt=[3,k,D7e,0,[HY],[[0,1]],1],mrt=[3,k,O7e,0,[nY],[()=>nZ]],hrt=[3,k,P7e,0,[qJ,WY],[[0,1],[0,1]],2],grt=[3,k,F7e,0,[QY],[()=>cZ]],_rt=[3,k,p7e,0,[qJ,iX],[[0,1],[0,1]],2],vrt=[3,k,m7e,0,[NJ],[()=>ZX]],yrt=[3,k,x7e,0,[qJ,FJ],[[0,1],[0,1]],2],brt=[3,k,S7e,0,[BJ],[()=>$X]],xrt=[3,k,w7e,0,[NY,BY,XY,FJ,BX,dX,nX],[[0,{[xY]:NY}],[1,{[xY]:BY}],[0,{[xY]:XY}],[0,{[xY]:FJ}],[64,{[xY]:BX}],[64,{[xY]:dX}],[64,{[xY]:nX}]]],Srt=[3,k,T7e,0,[VJ,XY],[()=>zit,0]],Crt=[3,k,k7e,0,[HY],[[0,1]],1],wrt=[3,k,A7e,0,[nY],[()=>nZ]],Trt=[3,k,I7e,0,[qJ,WY],[[0,1],[0,1]],2],Ert=[3,k,L7e,0,[QY],[()=>cZ]],Drt=[3,k,_7e,0,[qJ,iX,oX],[[0,1],[0,1],[0,1]],3],Ort=[3,k,v7e,0,[],[]],iZ=[3,k,U7e,0,[mY],[2]],krt=[3,k,z7e,0,[xX,lX],[64,()=>fit]],Art=[3,k,V7e,0,[htt,gtt,hX],[0,0,64]],jrt=[3,k,W7e,0,[AX],[0]],Mrt=[3,k,G7e,0,[AX],[0]],Nrt=[3,k,K7e,0,[bY],[0]],Prt=[3,k,q7e,0,[bY],[0]],Frt=[3,k,J7e,0,[Utt],[()=>sit]],Irt=[3,k,$7e,0,[rY,LY,hX],[0,0,64]],Lrt=[3,k,e9e,0,[pY,jX],[0,()=>mZ]],Rrt=[3,k,t9e,0,[pY,jX],[0,()=>mZ]],zrt=[3,k,n9e,0,[sX,yY],[()=>uit,()=>Nrt]],Brt=[3,k,r9e,0,[sX,yY],[()=>dit,()=>Prt]],Vrt=[3,k,i9e,0,[OX,wY,lY],[0,0,()=>iZ]],Hrt=[3,k,a9e,0,[OX,ant,wY,lY],[0,0,0,()=>iZ]],Urt=[3,k,o9e,0,[YY],[()=>fZ]],Wrt=[3,k,s9e,0,[YY],[()=>fZ]],aZ=[3,k,O9e,0,[HY,GX,CY],[0,0,0]],Grt=[3,k,p9e,0,[qJ,IJ,BY,XY],[[0,1],[0,{[xY]:IJ}],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],Krt=[3,k,m9e,0,[Ket,XY],[64,0]],qrt=[3,k,g9e,0,[BY,XY],[[1,{[xY]:BY}],[0,{[xY]:XY}]]],Jrt=[3,k,_9e,0,[Xet,XY],[()=>Lit,0]],Yrt=[3,k,v9e,0,[qJ,BY,XY],[[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],Xrt=[3,k,y9e,0,[VJ,XY],[64,0]],Zrt=[3,k,u9e,0,[qJ,iX,BY,XY],[[0,1],[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],2],Qrt=[3,k,d9e,0,[qJ,iX,XY,Bet],[0,0,0,()=>Vit]],$rt=[3,k,b9e,0,[BY,XY,EY],[[1,{[xY]:BY}],[0,{[xY]:XY}],[64,{[xY]:EY}]]],eit=[3,k,x9e,0,[ltt,XY],[64,0]],tit=[3,k,w9e,0,[qJ,BY,XY],[[0,1],[1,{[xY]:BY}],[0,{[xY]:XY}]],1],nit=[3,k,T9e,0,[Htt,XY],[64,0]],oZ=[3,k,k9e,0,[itt],[()=>qit]],rit=[3,k,E9e,0,[BX,mY],[64,2]],sZ=[3,k,A9e,0,[Wtt,Ktt],[0,0]],cZ=[3,k,j9e,0,[WY,Ltt,qJ,GX,yX,GJ,RY,PX,$J,TX,TY,FX,pX,RJ,KY,IY,RX,xX,aY,_Y,HX,JY,FY,IX,qX],[0,0,0,0,0,4,4,0,0,()=>lZ,64,64,()=>pZ,0,0,128,()=>xZ,()=>ait,1,()=>iit,()=>uZ,()=>dZ,()=>aZ,128,()=>gZ]],iit=[3,k,N9e,0,[DY],[()=>Kit]],ait=[3,k,P9e,0,[Zet,Xtt],[()=>Hit,0]],lZ=[3,k,z9e,0,[VY,Mtt,ptt],[1,1,1]],uZ=[3,k,B9e,0,[Ntt,Itt,unt],[1,1,0]],dZ=[3,k,F9e,0,[mY,Ptt,Ftt,Ott,ktt,ztt],[2,1,1,1,1,()=>Jit]],oit=[3,k,I9e,0,[Rtt,Btt,jtt,Ztt],[0,0,1,0]],fZ=[3,k,R9e,0,[snt],[()=>vit]],sit=[3,k,U9e,0,[Ctt],[0]],cit=[3,k,V9e,0,[eX,YJ,XJ,cY,uY],[64,0,()=>Qnt,0,()=>jrt],2],lit=[3,k,H9e,0,[eX,YJ,XJ,cY,uY],[64,0,()=>$nt,0,()=>Mrt],2],uit=[3,k,G9e,0,[LX],[1]],dit=[3,k,K9e,0,[LX],[1]],fit=[3,k,W9e,0,[Ttt],[0]],pZ=[3,k,q9e,0,[_tt,ont],[0,64]],pit=[3,k,X9e,0,[_X,vX],[()=>yZ,()=>bZ]],mit=[3,k,Z9e,0,[_X,vX],[()=>yZ,()=>bZ]],hit=[3,k,$9e,0,[tY],[64]],git=[3,k,net,0,[tY],[64]],_it=[3,k,iet,0,[HY,pnt],[0,1]],vit=[3,k,det,0,[zX,xX],[0,()=>Yit]],mZ=[3,k,uet,0,[Dtt,Att],[1,1]],yit=[3,k,oet,0,[UJ],[()=>tZ]],bit=[3,k,set,0,[UJ],[()=>tZ]],xit=[3,k,pet,0,[wtt,KX,vtt],[0,0,0]],hZ=[3,k,het,0,[CY,PX,zX,Ytt,GJ,btt,ctt],[0,0,0,()=>Xit,4,()=>Git,()=>Wnt]],Sit=[3,k,_et,0,[qJ,FJ,zJ,CX,mX,QJ,eY,cX],[[0,1],[0,1],0,0,0,[0,4],0,()=>_Z],2],Cit=[3,k,vet,0,[WX],[()=>hZ]],wit=[3,k,bet,0,[Jet,ent],[128,64]],Tit=[3,k,Cet,0,[qJ,WY,IY,RX,TX,HX,JY,qX,QJ],[[0,1],[0,1],()=>wit,()=>Ait,()=>lZ,()=>uZ,()=>dZ,()=>gZ,[0,4]],2],Eit=[3,k,wet,0,[WX],[()=>hZ]],Dit=[3,k,Eet,0,[qJ,WY,GX,yX,FY,xtt,QJ],[[0,1],[0,1],0,0,()=>aZ,2,[0,4]],2],Oit=[3,k,Det,0,[WX],[()=>hZ]],kit=[3,k,Oet,0,[zX,KX],[0,0]],Ait=[3,k,Met,0,[Yet,nnt],[()=>xZ,()=>xZ]],jit=[3,k,ket,0,[MX],[0]],Mit=[3,k,Aet,0,[MX],[0]],Nit=[3,k,Net,0,[kX,EX,dY,fY,aX,JJ],[64,64,2,2,64,0]],Pit=[3,k,Pet,0,[kX,EX,att,dnt,dY,fY,aX,JJ],[64,64,0,0,2,2,64,0]],gZ=[3,k,Fet,0,[mY,VY,Ett,Gtt,tnt],[2,1,1,0,2]],Fit=[3,k,Iet,0,[mY],[2]],Iit=[3,k,Let,0,[mY],[2]],Lit=[1,k,E5e,0,()=>Mnt],Rit=[1,k,y5e,0,()=>Int],_Z=[1,k,T5e,0,()=>znt],zit=[1,k,M5e,0,()=>Fnt],Bit=[1,k,j5e,0,()=>Bnt],Vit=[1,k,l5e,0,()=>eZ],Hit=[1,k,k5e,0,()=>Unt],Uit=[1,k,Z5e,0,()=>qnt],Wit=[1,k,c7e,0,()=>Jnt],vZ=[1,k,B7e,0,()=>krt],Git=[1,k,H7e,0,()=>Art],Kit=[1,k,Y7e,0,()=>Irt],qit=[1,k,D9e,0,()=>rit],Jit=[1,k,L9e,0,()=>oit],yZ=[1,k,eet,0,()=>hit],bZ=[1,k,ret,0,()=>git],Yit=[1,k,aet,0,()=>_it],xZ=[1,k,cnt,0,()=>xit],Xit=[1,k,jet,0,()=>kit],Zit=[9,k,f5e,{[SY]:[`POST`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies`,200]},()=>Vnt,()=>Hnt],Qit=[9,k,L5e,{[SY]:[`POST`,`/clusters/{clusterName}/access-entries`,200]},()=>trt,()=>nrt],$it=[9,k,H5e,{[SY]:[`POST`,`/clusters/{clusterName}/addons`,200]},()=>rrt,()=>irt],eat=[9,k,J5e,{[SY]:[`POST`,`/clusters`,200]},()=>art,()=>ort],tat=[9,k,$5e,{[SY]:[`POST`,`/clusters/{clusterName}/node-groups`,200]},()=>srt,()=>crt],nat=[9,k,u7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/access-entries/{principalArn}`,200]},()=>lrt,()=>urt],rat=[9,k,l7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/addons/{addonName}`,200]},()=>drt,()=>frt],iat=[9,k,j7e,{[SY]:[`DELETE`,`/clusters/{name}`,200]},()=>prt,()=>mrt],aat=[9,k,N7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/node-groups/{nodegroupName}`,200]},()=>hrt,()=>grt],oat=[9,k,h7e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries/{principalArn}`,200]},()=>_rt,()=>vrt],sat=[9,k,E7e,{[SY]:[`GET`,`/clusters/{clusterName}/addons/{addonName}`,200]},()=>yrt,()=>brt],cat=[9,k,C7e,{[SY]:[`GET`,`/addons/supported-versions`,200]},()=>xrt,()=>Srt],lat=[9,k,M7e,{[SY]:[`GET`,`/clusters/{name}`,200]},()=>Crt,()=>wrt],uat=[9,k,R7e,{[SY]:[`GET`,`/clusters/{clusterName}/node-groups/{nodegroupName}`,200]},()=>Trt,()=>Ert],dat=[9,k,g7e,{[SY]:[`DELETE`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies/{policyArn}`,200]},()=>Drt,()=>Ort],fat=[9,k,f9e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries`,200]},()=>Grt,()=>Krt],pat=[9,k,h9e,{[SY]:[`GET`,`/access-policies`,200]},()=>qrt,()=>Jrt],mat=[9,k,c9e,{[SY]:[`GET`,`/clusters/{clusterName}/addons`,200]},()=>Yrt,()=>Xrt],hat=[9,k,l9e,{[SY]:[`GET`,`/clusters/{clusterName}/access-entries/{principalArn}/access-policies`,200]},()=>Zrt,()=>Qrt],gat=[9,k,S9e,{[SY]:[`GET`,`/clusters`,200]},()=>$rt,()=>eit],_at=[9,k,C9e,{[SY]:[`GET`,`/clusters/{clusterName}/node-groups`,200]},()=>tit,()=>nit],vat=[9,k,get,{[SY]:[`POST`,`/clusters/{clusterName}/addons/{addonName}/update`,200]},()=>Sit,()=>Cit],yat=[9,k,xet,{[SY]:[`POST`,`/clusters/{clusterName}/node-groups/{nodegroupName}/update-config`,200]},()=>Tit,()=>Eit],bat=[9,k,Tet,{[SY]:[`POST`,`/clusters/{clusterName}/node-groups/{nodegroupName}/update-version`,200]},()=>Dit,()=>Oit],xat=e=>({apiVersion:`2017-11-01`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??G8e,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??I8e,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??en,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.eks`,errorTypeRegistries:Ant,version:`2017-11-01`,serviceTarget:`AWSWesleyFrontend`},serviceId:e?.serviceId??`EKS`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),Sat=e=>{let t=he(e),n=()=>t().then(a),r=xat(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:B8e.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Cat=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},wat=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Tat=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),Cat(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),wat(n))},Eat=class extends le{config;constructor(...[t]){let n=Sat(t||{});super(n),this.initConfig=n;let r=R8e(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=Tat(L8e(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:P8e,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},Dat=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function Oat(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`elasticloadbalancing`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var kat=e=>{let t=[];return e.operation,t.push(Oat(e)),t},Aat=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},jat=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`elasticloadbalancing`}),Mat={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Nat={name:`@aws-sdk/client-elastic-load-balancing-v2`,version:`3.1135.0`,description:`AWS SDK for JavaScript Elastic Load Balancing V2 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-elastic-load-balancing-v2`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-elastic-load-balancing-v2`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`},engines:{node:`>=20.0.0`}},SZ=`ref`,CZ=-1,wZ=!0,TZ=`isSet`,EZ=`PartitionResult`,DZ=`booleanEquals`,OZ=`getAttr`,kZ={[SZ]:`Endpoint`},AZ={[SZ]:EZ},jZ={},MZ=[{[SZ]:`Region`}],NZ={conditions:[[TZ,[kZ]],[TZ,MZ],[`aws.partition`,MZ,EZ],[DZ,[{[SZ]:`UseFIPS`},wZ]],[DZ,[{[SZ]:`UseDualStack`},wZ]],[DZ,[{fn:OZ,argv:[AZ,`supportsDualStack`]},wZ]],[DZ,[{fn:OZ,argv:[AZ,`supportsFIPS`]},wZ]],[`stringEquals`,[{fn:OZ,argv:[AZ,`name`]},`aws-us-gov`]]],results:[[CZ],[CZ,`Invalid Configuration: FIPS and custom endpoint are not supported`],[CZ,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[kZ,jZ],[`https://elasticloadbalancing-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,jZ],[CZ,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://elasticloadbalancing.{Region}.amazonaws.com`,jZ],[`https://elasticloadbalancing-fips.{Region}.{PartitionResult#dnsSuffix}`,jZ],[CZ,`FIPS is enabled but this partition does not support FIPS`],[`https://elasticloadbalancing.{Region}.{PartitionResult#dualStackDnsSuffix}`,jZ],[CZ,`DualStack is enabled but this partition does not support DualStack`],[`https://elasticloadbalancing.{Region}.{PartitionResult#dnsSuffix}`,jZ],[CZ,`Invalid Configuration: Missing Region`]]},Pat=2,Fat=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),Iat=xe.from(Fat,Pat,NZ.conditions,NZ.results),Lat=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),Rat=(e,t={})=>Lat.get(e,()=>ut(Iat,{endpointParams:e,logger:t.logger}));Le.aws=oe;var A=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},zat=class e extends A{name=`CertificateNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`CertificateNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Bat=class e extends A{name=`ListenerNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`ListenerNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Vat=class e extends A{name=`TooManyCertificatesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyCertificatesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Hat=class e extends A{name=`DuplicateTagKeysException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTagKeysException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Uat=class e extends A{name=`LoadBalancerNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`LoadBalancerNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Wat=class e extends A{name=`RuleNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RuleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Gat=class e extends A{name=`TargetGroupNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TargetGroupNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Kat=class e extends A{name=`TooManyTagsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTagsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},qat=class e extends A{name=`TrustStoreNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Jat=class e extends A{name=`InvalidRevocationContentException`;$fault=`client`;Message;constructor(t){super({name:`InvalidRevocationContentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Yat=class e extends A{name=`RevocationContentNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RevocationContentNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Xat=class e extends A{name=`TooManyTrustStoreRevocationEntriesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTrustStoreRevocationEntriesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Zat=class e extends A{name=`AllocationIdNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`AllocationIdNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Qat=class e extends A{name=`ALPNPolicyNotSupportedException`;$fault=`client`;Message;constructor(t){super({name:`ALPNPolicyNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},$at=class e extends A{name=`AvailabilityZoneNotSupportedException`;$fault=`client`;Message;constructor(t){super({name:`AvailabilityZoneNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},eot=class e extends A{name=`CaCertificatesBundleNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`CaCertificatesBundleNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},tot=class e extends A{name=`CapacityDecreaseRequestsLimitExceededException`;$fault=`client`;Message;constructor(t){super({name:`CapacityDecreaseRequestsLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},not=class e extends A{name=`CapacityReservationPendingException`;$fault=`client`;Message;constructor(t){super({name:`CapacityReservationPendingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},rot=class e extends A{name=`CapacityUnitsLimitExceededException`;$fault=`client`;Message;constructor(t){super({name:`CapacityUnitsLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},iot=class e extends A{name=`DuplicateListenerException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateListenerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},aot=class e extends A{name=`IncompatibleProtocolsException`;$fault=`client`;Message;constructor(t){super({name:`IncompatibleProtocolsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},oot=class e extends A{name=`InvalidConfigurationRequestException`;$fault=`client`;Message;constructor(t){super({name:`InvalidConfigurationRequestException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},sot=class e extends A{name=`InvalidLoadBalancerActionException`;$fault=`client`;Message;constructor(t){super({name:`InvalidLoadBalancerActionException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},cot=class e extends A{name=`SSLPolicyNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`SSLPolicyNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},lot=class e extends A{name=`TargetGroupAssociationLimitException`;$fault=`client`;Message;constructor(t){super({name:`TargetGroupAssociationLimitException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},uot=class e extends A{name=`TooManyActionsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyActionsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},dot=class e extends A{name=`TooManyListenersException`;$fault=`client`;Message;constructor(t){super({name:`TooManyListenersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},fot=class e extends A{name=`TooManyRegistrationsForTargetIdException`;$fault=`client`;Message;constructor(t){super({name:`TooManyRegistrationsForTargetIdException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},pot=class e extends A{name=`TooManyTargetsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTargetsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},mot=class e extends A{name=`TooManyUniqueTargetGroupsPerLoadBalancerException`;$fault=`client`;Message;constructor(t){super({name:`TooManyUniqueTargetGroupsPerLoadBalancerException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},hot=class e extends A{name=`TrustStoreNotReadyException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},got=class e extends A{name=`UnsupportedProtocolException`;$fault=`client`;Message;constructor(t){super({name:`UnsupportedProtocolException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},_ot=class e extends A{name=`DuplicateLoadBalancerNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateLoadBalancerNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},vot=class e extends A{name=`InvalidSchemeException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSchemeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},yot=class e extends A{name=`InvalidSecurityGroupException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSecurityGroupException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},bot=class e extends A{name=`InvalidSubnetException`;$fault=`client`;Message;constructor(t){super({name:`InvalidSubnetException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},xot=class e extends A{name=`OperationNotPermittedException`;$fault=`client`;Message;constructor(t){super({name:`OperationNotPermittedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Sot=class e extends A{name=`ResourceInUseException`;$fault=`client`;Message;constructor(t){super({name:`ResourceInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Cot=class e extends A{name=`SubnetNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`SubnetNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},wot=class e extends A{name=`TooManyLoadBalancersException`;$fault=`client`;Message;constructor(t){super({name:`TooManyLoadBalancersException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Tot=class e extends A{name=`PriorityInUseException`;$fault=`client`;Message;constructor(t){super({name:`PriorityInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Eot=class e extends A{name=`TooManyRulesException`;$fault=`client`;Message;constructor(t){super({name:`TooManyRulesException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Dot=class e extends A{name=`TooManyTargetGroupsException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTargetGroupsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Oot=class e extends A{name=`DuplicateTargetGroupNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTargetGroupNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},kot=class e extends A{name=`DuplicateTrustStoreNameException`;$fault=`client`;Message;constructor(t){super({name:`DuplicateTrustStoreNameException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Aot=class e extends A{name=`InvalidCaCertificatesBundleException`;$fault=`client`;Message;constructor(t){super({name:`InvalidCaCertificatesBundleException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},jot=class e extends A{name=`TooManyTrustStoresException`;$fault=`client`;Message;constructor(t){super({name:`TooManyTrustStoresException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Mot=class e extends A{name=`DeleteAssociationSameAccountException`;$fault=`client`;Message;constructor(t){super({name:`DeleteAssociationSameAccountException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Not=class e extends A{name=`TrustStoreAssociationNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreAssociationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Pot=class e extends A{name=`TrustStoreInUseException`;$fault=`client`;Message;constructor(t){super({name:`TrustStoreInUseException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Fot=class e extends A{name=`InvalidTargetException`;$fault=`client`;Message;constructor(t){super({name:`InvalidTargetException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Iot=class e extends A{name=`HealthUnavailableException`;$fault=`server`;Message;constructor(t){super({name:`HealthUnavailableException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Lot=class e extends A{name=`RevocationIdNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`RevocationIdNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Rot=class e extends A{name=`ResourceNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`ResourceNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},zot=class e extends A{name=`InsufficientCapacityException`;$fault=`server`;Message;constructor(t){super({name:`InsufficientCapacityException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Bot=class e extends A{name=`PriorRequestNotCompleteException`;$fault=`client`;Message;constructor(t){super({name:`PriorRequestNotCompleteException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Vot=`Action`,Hot=`AdditionalClaims`,Uot=`AuthenticateCognitoActionConfig`,Wot=`AuthenticateCognitoConfig`,PZ=`AnomalyDetection`,Got=`AuthorizationEndpoint`,FZ=`AllocationId`,Kot=`AllocationIdNotFoundException`,qot=`ALPNPolicyNotSupportedException`,IZ=`AdministrativeOverride`,Jot=`AuthenticateOidcActionConfig`,Yot=`AuthenticateOidcConfig`,LZ=`AlpnPolicy`,RZ=`AuthenticationRequestExtraParams`,Xot=`AddTags`,Zot=`AddTagsInput`,Qot=`AddTagsOutput`,$ot=`AdvertiseTrustStoreCaNames`,zZ=`AvailabilityZone`,est=`AvailabilityZoneNotSupportedException`,BZ=`AvailabilityZones`,VZ=`Actions`,HZ=`Attributes`,UZ=`Certificates`,tst=`CertificateArn`,nst=`CaCertificatesBundleNotFoundException`,rst=`CapacityDecreaseRequestsLimitExceededException`,ist=`CanonicalHostedZoneId`,ast=`ClientId`,ost=`CertificateList`,sst=`CreateLoadBalancer`,cst=`CreateLoadBalancerInput`,lst=`CreateLoadBalancerOutput`,ust=`CreateListenerInput`,dst=`CreateListenerOutput`,fst=`CreateListener`,pst=`CertificateNotFoundException`,WZ=`CustomerOwnedIpv4Pool`,mst=`CreateRule`,hst=`CreateRuleInput`,gst=`CreateRuleOutput`,_st=`CapacityReservationPendingException`,vst=`ClientSecret`,yst=`ContentType`,bst=`CreateTargetGroup`,xst=`CreateTargetGroupInput`,Sst=`CreateTargetGroupOutput`,Cst=`CreatedTime`,wst=`CapacityUnitsLimitExceededException`,Tst=`Certificate`,Est=`Cipher`,GZ=`Ciphers`,Dst=`Code`,KZ=`Conditions`,qZ=`Description`,JZ=`DefaultActions`,Ost=`DeleteAssociationSameAccountException`,kst=`DeleteListener`,Ast=`DeleteLoadBalancer`,jst=`DescribeLoadBalancerAttributes`,Mst=`DescribeLoadBalancerAttributesInput`,Nst=`DescribeLoadBalancerAttributesOutput`,Pst=`DeleteLoadBalancerInput`,Fst=`DescribeLoadBalancersInput`,Ist=`DuplicateLoadBalancerNameException`,Lst=`DeleteLoadBalancerOutput`,Rst=`DescribeLoadBalancersOutput`,zst=`DescribeLoadBalancers`,Bst=`DuplicateListenerException`,Vst=`DeleteListenerInput`,Hst=`DescribeListenersInput`,Ust=`DeleteListenerOutput`,Wst=`DescribeListenersOutput`,Gst=`DescribeListeners`,Kst=`DNSName`,qst=`DeleteRule`,Jst=`DeleteRuleInput`,Yst=`DescribeRulesInput`,Xst=`DeleteRuleOutput`,Zst=`DescribeRulesOutput`,Qst=`DescribeRules`,$st=`DurationSeconds`,ect=`DescribeSSLPolicies`,tct=`DescribeSSLPoliciesInput`,nct=`DescribeSSLPoliciesOutput`,rct=`DeregisterTargets`,ict=`DeleteTargetGroup`,act=`DescribeTargetGroupAttributes`,oct=`DescribeTargetGroupAttributesInput`,sct=`DescribeTargetGroupAttributesOutput`,cct=`DeleteTargetGroupInput`,lct=`DescribeTargetGroupsInput`,uct=`DuplicateTargetGroupNameException`,dct=`DeleteTargetGroupOutput`,fct=`DescribeTargetGroupsOutput`,pct=`DescribeTargetGroups`,mct=`DescribeTargetHealth`,hct=`DescribeTargetHealthInput`,gct=`DescribeTargetHealthOutput`,_ct=`DeregisterTargetsInput`,vct=`DescribeTagsInput`,yct=`DuplicateTagKeysException`,bct=`DeregisterTargetsOutput`,xct=`DescribeTagsOutput`,Sct=`DuplicateTrustStoreNameException`,Cct=`DescribeTags`,wct=`Enabled`,YZ=`EnablePrefixForIpv6SourceNat`,XZ=`EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic`,Tct=`Format`,Ect=`ForwardActionConfig`,Dct=`ForwardConfig`,Oct=`FixedResponseActionConfig`,kct=`FixedResponseConfig`,Act=`Field`,jct=`GrpcCode`,Mct=`Host`,Nct=`HttpCode`,ZZ=`HealthCheckEnabled`,QZ=`HealthCheckIntervalSeconds`,$Z=`HealthCheckProtocol`,eQ=`HealthCheckPort`,tQ=`HealthCheckPath`,nQ=`HealthCheckTimeoutSeconds`,Pct=`HostHeaderConfig`,Fct=`HostHeaderConditionConfig`,Ict=`HttpHeaderConditionConfig`,Lct=`HttpHeaderConfig`,Rct=`HttpHeaderName`,rQ=`HostHeaderRewriteConfig`,zct=`HttpRequestMethodConfig`,Bct=`HttpRequestMethodConditionConfig`,iQ=`HealthyThresholdCount`,Vct=`HealthUnavailableException`,aQ=`Issuer`,Hct=`IpAddress`,oQ=`IpAddressType`,Uct=`InvalidCaCertificatesBundleException`,Wct=`IgnoreClientCertificateExpiry`,Gct=`InsufficientCapacityException`,Kct=`InvalidConfigurationRequestException`,sQ=`IsDefault`,qct=`Ipv4IpamPoolId`,Jct=`InvalidLoadBalancerActionException`,cQ=`IpamPools`,lQ=`IPv6Address`,Yct=`IncompatibleProtocolsException`,Xct=`InvalidRevocationContentException`,Zct=`InvalidSchemeException`,Qct=`InvalidSubnetException`,$ct=`InvalidSecurityGroupException`,elt=`InvalidTargetException`,tlt=`Id`,nlt=`Include`,rlt=`JwksEndpoint`,ilt=`JwtValidationActionAdditionalClaim`,alt=`JwtValidationActionAdditionalClaims`,olt=`JwtValidationActionConfig`,slt=`JwtValidationConfig`,uQ=`Key`,dQ=`Listeners`,fQ=`ListenerArn`,clt=`ListenerArns`,pQ=`LoadBalancers`,mQ=`LoadBalancerAddresses`,hQ=`LoadBalancerArn`,gQ=`LoadBalancerArns`,llt=`LoadBalancerAddress`,ult=`LoadBalancerAttribute`,dlt=`LoadBalancerAttributes`,flt=`LoadBalancerName`,plt=`LoadBalancerNotFoundException`,mlt=`LoadBalancerState`,hlt=`LoadBalancerType`,glt=`LoadBalancer`,_lt=`ListenerNotFoundException`,vlt=`Listener`,j=`Message`,_Q=`MutualAuthentication`,ylt=`MutualAuthenticationAttributes`,blt=`MessageBody`,xlt=`MitigationInEffect`,Slt=`ModifyListener`,Clt=`ModifyLoadBalancerAttributes`,wlt=`ModifyLoadBalancerAttributesInput`,Tlt=`ModifyLoadBalancerAttributesOutput`,Elt=`ModifyListenerInput`,Dlt=`ModifyListenerOutput`,Olt=`ModifyRule`,klt=`ModifyRuleInput`,Alt=`ModifyRuleOutput`,jlt=`ModifyTargetGroupAttributes`,Mlt=`ModifyTargetGroupAttributesInput`,Nlt=`ModifyTargetGroupAttributesOutput`,vQ=`Matcher`,yQ=`Marker`,Plt=`Mode`,bQ=`Name`,xQ=`NextMarker`,SQ=`Names`,Flt=`Order`,Ilt=`OutpostId`,Llt=`OperationNotPermittedException`,CQ=`OnUnauthenticatedRequest`,wQ=`Priority`,TQ=`PrivateIPv4Address`,Rlt=`PriorityInUseException`,zlt=`PathPatternConfig`,Blt=`PathPatternConditionConfig`,Vlt=`PriorRequestNotCompleteException`,EQ=`PageSize`,DQ=`ProtocolVersion`,Hlt=`Path`,OQ=`Port`,kQ=`Protocol`,Ult=`Query`,Wlt=`QueryStringConfig`,Glt=`QueryStringConditionConfig`,Klt=`QuicServerId`,qlt=`QueryStringKeyValuePair`,Jlt=`QueryStringKeyValuePairList`,AQ=`Reason`,jQ=`ResourceArns`,Ylt=`RedirectActionConfig`,Xlt=`ResourceArn`,MQ=`RuleArn`,Zlt=`RuleArns`,Qlt=`RedirectConfig`,$lt=`RewriteConfigList`,eut=`RuleConditionList`,tut=`RevocationContentNotFoundException`,nut=`RewriteConfig`,rut=`RuleCondition`,iut=`RevocationIdNotFoundException`,aut=`ResourceInUseException`,out=`ResourceNotFoundException`,sut=`RuleNotFoundException`,cut=`RegisterTargetsInput`,lut=`RemoveTagsInput`,uut=`RuleTransformList`,dut=`RegisterTargetsOutput`,fut=`RemoveTagsOutput`,put=`ResetTransforms`,mut=`RegisterTargets`,hut=`RemoveTags`,gut=`RuleTransform`,NQ=`RegexValues`,_ut=`Result`,vut=`Regex`,yut=`Replace`,PQ=`Rewrites`,FQ=`Rules`,but=`Rule`,IQ=`State`,LQ=`StatusCode`,RQ=`SessionCookieName`,zQ=`SecurityGroups`,xut=`SecurityGroupIds`,BQ=`SubnetId`,Sut=`SourceIpConfig`,Cut=`SourceIpConditionConfig`,wut=`SupportedLoadBalancerTypes`,VQ=`SubnetMappings`,Tut=`SubnetMapping`,Eut=`SubnetNotFoundException`,Dut=`SourceNatIpv6Prefixes`,Out=`SourceNatIpv6Prefix`,HQ=`SslPolicy`,UQ=`SslPolicies`,kut=`SslProtocols`,Aut=`SetSubnets`,jut=`SetSecurityGroups`,Mut=`SetSecurityGroupsInput`,Nut=`SetSecurityGroupsOutput`,Put=`SetSubnetsInput`,Fut=`SSLPolicyNotFoundException`,Iut=`SetSubnetsOutput`,WQ=`SessionTimeout`,GQ=`Scope`,KQ=`Scheme`,qQ=`Subnets`,JQ=`Type`,YQ=`TargetControlPort`,XQ=`TagDescriptions`,Lut=`TagDescription`,Rut=`TargetDescription`,zut=`TargetDescriptions`,But=`TokenEndpoint`,ZQ=`TargetGroups`,QQ=`TargetGroupArn`,Vut=`TargetGroupAssociationLimitException`,Hut=`TargetGroupArns`,Uut=`TargetGroupAttribute`,Wut=`TargetGroupAttributes`,Gut=`TargetGroupList`,Kut=`TargetGroupName`,qut=`TargetGroupNotFoundException`,$Q=`TargetGroupStickinessConfig`,Jut=`TargetGroupTuple`,Yut=`TargetGroup`,e$=`TargetHealth`,t$=`TargetHealthDescriptions`,Xut=`TargetHealthDescription`,Zut=`TagKeys`,Qut=`TagList`,$ut=`TooManyActionsException`,edt=`TooManyCertificatesException`,tdt=`TooManyLoadBalancersException`,ndt=`TooManyListenersException`,rdt=`TooManyRulesException`,idt=`TooManyRegistrationsForTargetIdException`,adt=`TooManyTagsException`,odt=`TooManyTargetsException`,sdt=`TooManyTargetGroupsException`,cdt=`TooManyTrustStoresException`,ldt=`TooManyTrustStoreRevocationEntriesException`,udt=`TooManyUniqueTargetGroupsPerLoadBalancerException`,ddt=`TrustStoreArn`,fdt=`TrustStoreAssociationNotFoundException`,pdt=`TrustStoreAssociationStatus`,mdt=`TrustStoreInUseException`,hdt=`TrustStoreNotFoundException`,gdt=`TrustStoreNotReadyException`,n$=`TargetType`,r$=`Tags`,_dt=`Tag`,i$=`Targets`,vdt=`Target`,a$=`Transforms`,ydt=`UseExistingClientSecret`,bdt=`UserInfoEndpoint`,xdt=`UserPoolArn`,Sdt=`UserPoolClientId`,Cdt=`UserPoolDomain`,wdt=`UnsupportedProtocolException`,o$=`UrlRewriteConfig`,s$=`UnhealthyThresholdCount`,c$=`Values`,l$=`VpcId`,u$=`Value`,Tdt=`Weight`,Edt=`ZoneName`,M=`awsQueryError`,N=`client`,P=`error`,F=`httpError`,d$=`smithy.ts.sdk.synthetic.com.amazonaws.elasticloadbalancingv2`,f$=`server`,I=`com.amazonaws.elasticloadbalancingv2`,p$=pt.for(d$),Ddt=[-3,d$,`ElasticLoadBalancingV2ServiceException`,0,[],[]];p$.registerError(Ddt,A);var L=pt.for(I),Odt=[-3,I,Kot,{[M]:[`AllocationIdNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Odt,Zat);var kdt=[-3,I,qot,{[M]:[`ALPNPolicyNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(kdt,Qat);var Adt=[-3,I,est,{[M]:[`AvailabilityZoneNotSupported`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Adt,$at);var jdt=[-3,I,nst,{[M]:[`CaCertificatesBundleNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(jdt,eot);var Mdt=[-3,I,rst,{[M]:[`CapacityDecreaseRequestLimitExceeded`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Mdt,tot);var Ndt=[-3,I,_st,{[M]:[`CapacityReservationPending`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ndt,not);var Pdt=[-3,I,wst,{[M]:[`CapacityUnitsLimitExceeded`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Pdt,rot);var Fdt=[-3,I,pst,{[M]:[`CertificateNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Fdt,zat);var Idt=[-3,I,Ost,{[M]:[`DeleteAssociationSameAccount`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Idt,Mot);var Ldt=[-3,I,Bst,{[M]:[`DuplicateListener`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ldt,iot);var Rdt=[-3,I,Ist,{[M]:[`DuplicateLoadBalancerName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Rdt,_ot);var zdt=[-3,I,yct,{[M]:[`DuplicateTagKeys`,400],[P]:N,[F]:400},[j],[0]];L.registerError(zdt,Hat);var Bdt=[-3,I,uct,{[M]:[`DuplicateTargetGroupName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Bdt,Oot);var Vdt=[-3,I,Sct,{[M]:[`DuplicateTrustStoreName`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Vdt,kot);var Hdt=[-3,I,Vct,{[M]:[`HealthUnavailable`,500],[P]:f$,[F]:500},[j],[0]];L.registerError(Hdt,Iot);var Udt=[-3,I,Yct,{[M]:[`IncompatibleProtocols`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Udt,aot);var Wdt=[-3,I,Gct,{[M]:[`InsufficientCapacity`,500],[P]:f$,[F]:500},[j],[0]];L.registerError(Wdt,zot);var Gdt=[-3,I,Uct,{[M]:[`InvalidCaCertificatesBundle`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Gdt,Aot);var Kdt=[-3,I,Kct,{[M]:[`InvalidConfigurationRequest`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Kdt,oot);var qdt=[-3,I,Jct,{[M]:[`InvalidLoadBalancerAction`,400],[P]:N,[F]:400},[j],[0]];L.registerError(qdt,sot);var Jdt=[-3,I,Xct,{[M]:[`InvalidRevocationContent`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Jdt,Jat);var Ydt=[-3,I,Zct,{[M]:[`InvalidScheme`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Ydt,vot);var Xdt=[-3,I,$ct,{[M]:[`InvalidSecurityGroup`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Xdt,yot);var Zdt=[-3,I,Qct,{[M]:[`InvalidSubnet`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Zdt,bot);var Qdt=[-3,I,elt,{[M]:[`InvalidTarget`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Qdt,Fot);var $dt=[-3,I,_lt,{[M]:[`ListenerNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError($dt,Bat);var eft=[-3,I,plt,{[M]:[`LoadBalancerNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(eft,Uat);var tft=[-3,I,Llt,{[M]:[`OperationNotPermitted`,400],[P]:N,[F]:400},[j],[0]];L.registerError(tft,xot);var nft=[-3,I,Rlt,{[M]:[`PriorityInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(nft,Tot);var rft=[-3,I,Vlt,{[M]:[`PriorRequestNotComplete`,429],[P]:N,[F]:429},[j],[0]];L.registerError(rft,Bot);var ift=[-3,I,aut,{[M]:[`ResourceInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(ift,Sot);var aft=[-3,I,out,{[M]:[`ResourceNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(aft,Rot);var oft=[-3,I,tut,{[M]:[`RevocationContentNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(oft,Yat);var sft=[-3,I,iut,{[M]:[`RevocationIdNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(sft,Lot);var cft=[-3,I,sut,{[M]:[`RuleNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(cft,Wat);var lft=[-3,I,Fut,{[M]:[`SSLPolicyNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(lft,cot);var uft=[-3,I,Eut,{[M]:[`SubnetNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(uft,Cot);var dft=[-3,I,Vut,{[M]:[`TargetGroupAssociationLimit`,400],[P]:N,[F]:400},[j],[0]];L.registerError(dft,lot);var fft=[-3,I,qut,{[M]:[`TargetGroupNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(fft,Gat);var pft=[-3,I,$ut,{[M]:[`TooManyActions`,400],[P]:N,[F]:400},[j],[0]];L.registerError(pft,uot);var mft=[-3,I,edt,{[M]:[`TooManyCertificates`,400],[P]:N,[F]:400},[j],[0]];L.registerError(mft,Vat);var hft=[-3,I,ndt,{[M]:[`TooManyListeners`,400],[P]:N,[F]:400},[j],[0]];L.registerError(hft,dot);var gft=[-3,I,tdt,{[M]:[`TooManyLoadBalancers`,400],[P]:N,[F]:400},[j],[0]];L.registerError(gft,wot);var _ft=[-3,I,idt,{[M]:[`TooManyRegistrationsForTargetId`,400],[P]:N,[F]:400},[j],[0]];L.registerError(_ft,fot);var vft=[-3,I,rdt,{[M]:[`TooManyRules`,400],[P]:N,[F]:400},[j],[0]];L.registerError(vft,Eot);var yft=[-3,I,adt,{[M]:[`TooManyTags`,400],[P]:N,[F]:400},[j],[0]];L.registerError(yft,Kat);var bft=[-3,I,sdt,{[M]:[`TooManyTargetGroups`,400],[P]:N,[F]:400},[j],[0]];L.registerError(bft,Dot);var xft=[-3,I,odt,{[M]:[`TooManyTargets`,400],[P]:N,[F]:400},[j],[0]];L.registerError(xft,pot);var Sft=[-3,I,ldt,{[M]:[`TooManyTrustStoreRevocationEntries`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Sft,Xat);var Cft=[-3,I,cdt,{[M]:[`TooManyTrustStores`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Cft,jot);var wft=[-3,I,udt,{[M]:[`TooManyUniqueTargetGroupsPerLoadBalancer`,400],[P]:N,[F]:400},[j],[0]];L.registerError(wft,mot);var Tft=[-3,I,fdt,{[M]:[`AssociationNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Tft,Not);var Eft=[-3,I,mdt,{[M]:[`TrustStoreInUse`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Eft,Pot);var Dft=[-3,I,hdt,{[M]:[`TrustStoreNotFound`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Dft,qat);var Oft=[-3,I,gdt,{[M]:[`TrustStoreNotReady`,400],[P]:N,[F]:400},[j],[0]];L.registerError(Oft,hot);var kft=[-3,I,wdt,{[M]:[`UnsupportedProtocol`,400],[P]:N,[F]:400},[j],[0]];L.registerError(kft,got);var Aft=[p$,L],jft=[3,I,Vot,0,[JQ,QQ,Yot,Wot,Flt,Qlt,kct,Dct,slt],[0,0,()=>Lft,()=>Ift,1,()=>qpt,()=>Cpt,()=>wpt,()=>Apt],1],Mft=[3,I,Zot,0,[jQ,r$],[64,()=>k$],2],Nft=[3,I,Qot,0,[],[]],Pft=[3,I,IZ,0,[IQ,AQ,qZ],[0,0,0]],Fft=[3,I,PZ,0,[_ut,xlt],[0,0]],Ift=[3,I,Uot,0,[xdt,Sdt,Cdt,RQ,GQ,WQ,RZ,CQ],[0,0,0,0,0,1,128,0],3],Lft=[3,I,Jot,0,[aQ,Got,But,bdt,ast,vst,RQ,GQ,WQ,RZ,CQ,ydt],[0,0,0,0,0,0,0,0,1,128,0,2],5],Rft=[3,I,zZ,0,[Edt,BQ,Ilt,mQ,Dut],[0,0,0,()=>bmt,64]],zft=[3,I,Tst,0,[tst,sQ],[0,2]],Bft=[3,I,Est,0,[bQ,wQ],[0,1]],Vft=[3,I,ust,0,[hQ,JZ,kQ,OQ,HQ,UZ,LZ,r$,_Q],[0,()=>v$,0,1,0,()=>b$,64,()=>k$,()=>g$],2],Hft=[3,I,dst,0,[dQ],[()=>x$]],Uft=[3,I,cst,0,[bQ,qQ,VQ,zQ,KQ,r$,JQ,oQ,WZ,YZ,cQ],[0,64,()=>O$,64,0,()=>k$,0,0,0,0,()=>m$],1],Wft=[3,I,lst,0,[pQ],[()=>C$]],Gft=[3,I,hst,0,[fQ,KZ,wQ,VZ,r$,a$],[0,()=>T$,1,()=>v$,()=>k$,()=>D$],4],Kft=[3,I,gst,0,[FQ],[()=>E$]],qft=[3,I,xst,0,[bQ,kQ,DQ,OQ,l$,$Z,eQ,ZZ,tQ,QZ,nQ,iQ,s$,vQ,n$,r$,oQ,YQ],[0,0,0,1,0,0,0,2,0,1,1,1,1,()=>h$,0,()=>k$,0,1],1],Jft=[3,I,Sst,0,[ZQ],[()=>M$]],Yft=[3,I,Vst,0,[fQ],[0],1],Xft=[3,I,Ust,0,[],[]],Zft=[3,I,Pst,0,[hQ],[0],1],Qft=[3,I,Lst,0,[],[]],$ft=[3,I,Jst,0,[MQ],[0],1],ept=[3,I,Xst,0,[],[]],tpt=[3,I,cct,0,[QQ],[0],1],npt=[3,I,dct,0,[],[]],rpt=[3,I,_ct,0,[QQ,i$],[0,()=>A$],2],ipt=[3,I,bct,0,[],[]],apt=[3,I,Hst,0,[hQ,clt,yQ,EQ],[0,64,0,1]],opt=[3,I,Wst,0,[dQ,xQ],[()=>x$,0]],spt=[3,I,Mst,0,[hQ],[0],1],cpt=[3,I,Nst,0,[HZ],[()=>S$]],lpt=[3,I,Fst,0,[gQ,SQ,yQ,EQ],[64,64,0,1]],upt=[3,I,Rst,0,[pQ,xQ],[()=>C$,0]],dpt=[3,I,Yst,0,[fQ,Zlt,yQ,EQ],[0,64,0,1]],fpt=[3,I,Zst,0,[FQ,xQ],[()=>E$,0]],ppt=[3,I,tct,0,[SQ,yQ,EQ,hlt],[64,0,1,0]],mpt=[3,I,nct,0,[UQ,xQ],[()=>Smt,0]],hpt=[3,I,vct,0,[jQ],[64],1],gpt=[3,I,xct,0,[XQ],[()=>Cmt]],_pt=[3,I,oct,0,[QQ],[0],1],vpt=[3,I,sct,0,[HZ],[()=>j$]],ypt=[3,I,lct,0,[hQ,Hut,SQ,yQ,EQ],[0,64,64,0,1]],bpt=[3,I,fct,0,[ZQ,xQ],[()=>M$,0]],xpt=[3,I,hct,0,[QQ,i$,nlt],[0,()=>A$,64],1],Spt=[3,I,gct,0,[t$],[()=>Tmt]],Cpt=[3,I,Oct,0,[LQ,blt,yst],[0,0,0],1],wpt=[3,I,Ect,0,[ZQ,$Q],[()=>wmt,()=>pmt]],Tpt=[3,I,Fct,0,[c$,NQ],[64,64]],Ept=[3,I,rQ,0,[PQ],[()=>w$]],Dpt=[3,I,Ict,0,[Rct,c$,NQ],[0,64,64]],Opt=[3,I,Bct,0,[c$],[64]],m$=[3,I,cQ,0,[qct],[0]],kpt=[3,I,ilt,0,[Tct,bQ,c$],[0,0,64],3],Apt=[3,I,olt,0,[rlt,aQ,Hot],[0,0,()=>ymt],2],jpt=[3,I,vlt,0,[fQ,hQ,OQ,kQ,UZ,HQ,JZ,LZ,_Q],[0,0,1,0,()=>b$,0,()=>v$,64,()=>g$]],Mpt=[3,I,glt,0,[hQ,Kst,ist,Cst,flt,KQ,l$,IQ,JQ,BZ,zQ,oQ,WZ,XZ,YZ,cQ],[0,0,0,4,0,0,0,()=>Fpt,0,()=>y$,64,0,0,0,0,()=>m$]],Npt=[3,I,llt,0,[Hct,FZ,TQ,lQ],[0,0,0,0]],Ppt=[3,I,ult,0,[uQ,u$],[0,0]],Fpt=[3,I,mlt,0,[Dst,AQ],[0,0]],h$=[3,I,vQ,0,[Nct,jct],[0,0]],Ipt=[3,I,Elt,0,[fQ,OQ,kQ,HQ,UZ,JZ,LZ,_Q],[0,1,0,0,()=>b$,()=>v$,64,()=>g$],1],Lpt=[3,I,Dlt,0,[dQ],[()=>x$]],Rpt=[3,I,wlt,0,[hQ,HZ],[0,()=>S$],2],zpt=[3,I,Tlt,0,[HZ],[()=>S$]],Bpt=[3,I,klt,0,[MQ,KZ,VZ,a$,put],[0,()=>T$,()=>v$,()=>D$,2],1],Vpt=[3,I,Alt,0,[FQ],[()=>E$]],Hpt=[3,I,Mlt,0,[QQ,HZ],[0,()=>j$],2],Upt=[3,I,Nlt,0,[HZ],[()=>j$]],g$=[3,I,ylt,0,[Plt,ddt,Wct,pdt,$ot],[0,0,2,0,0]],Wpt=[3,I,Blt,0,[c$,NQ],[64,64]],Gpt=[3,I,Glt,0,[c$],[()=>xmt]],Kpt=[3,I,qlt,0,[uQ,u$],[0,0]],qpt=[3,I,Ylt,0,[LQ,kQ,OQ,Mct,Hlt,Ult],[0,0,0,0,0,0],1],Jpt=[3,I,cut,0,[QQ,i$],[0,()=>A$],2],Ypt=[3,I,dut,0,[],[]],Xpt=[3,I,lut,0,[jQ,Zut],[64,64],2],Zpt=[3,I,fut,0,[],[]],Qpt=[3,I,nut,0,[vut,yut],[0,0],2],$pt=[3,I,but,0,[MQ,wQ,KZ,VZ,sQ,a$],[0,0,()=>T$,()=>v$,2,()=>D$]],emt=[3,I,rut,0,[Act,c$,Pct,zlt,Lct,Wlt,zct,Sut,NQ],[0,64,()=>Tpt,()=>Wpt,()=>Dpt,()=>Gpt,()=>Opt,()=>omt,64]],tmt=[3,I,gut,0,[JQ,rQ,o$],[0,()=>Ept,()=>_mt],1],nmt=[3,I,Mut,0,[hQ,zQ,XZ],[0,64,0],2],rmt=[3,I,Nut,0,[xut,XZ],[64,0]],imt=[3,I,Put,0,[hQ,qQ,VQ,oQ,YZ],[0,64,()=>O$,0,0],1],amt=[3,I,Iut,0,[BZ,oQ,YZ],[()=>y$,0,0]],omt=[3,I,Cut,0,[c$,oQ],[64,0]],smt=[3,I,HQ,0,[kut,GZ,bQ,wut],[64,()=>vmt,0,64]],cmt=[3,I,Tut,0,[BQ,FZ,TQ,lQ,Out],[0,0,0,0,0]],lmt=[3,I,_dt,0,[uQ,u$],[0,0],1],umt=[3,I,Lut,0,[Xlt,r$],[0,()=>k$]],_$=[3,I,Rut,0,[tlt,OQ,zZ,Klt],[0,1,0,0],1],dmt=[3,I,Yut,0,[QQ,Kut,kQ,OQ,l$,$Z,eQ,ZZ,QZ,nQ,iQ,s$,tQ,vQ,gQ,n$,DQ,oQ,YQ],[0,0,0,1,0,0,0,2,1,1,1,1,0,()=>h$,64,0,0,0,1]],fmt=[3,I,Uut,0,[uQ,u$],[0,0]],pmt=[3,I,$Q,0,[wct,$st],[2,1]],mmt=[3,I,Jut,0,[QQ,Tdt],[0,1]],hmt=[3,I,e$,0,[IQ,AQ,qZ],[0,0,0]],gmt=[3,I,Xut,0,[vdt,eQ,e$,PZ,IZ],[()=>_$,0,()=>hmt,()=>Fft,()=>Pft]],_mt=[3,I,o$,0,[PQ],[()=>w$]],v$=[1,I,VZ,0,()=>jft],y$=[1,I,BZ,0,()=>Rft],b$=[1,I,ost,0,()=>zft],vmt=[1,I,GZ,0,()=>Bft],ymt=[1,I,alt,0,()=>kpt],x$=[1,I,dQ,0,()=>jpt],bmt=[1,I,mQ,0,()=>Npt],S$=[1,I,dlt,0,()=>Ppt],C$=[1,I,pQ,0,()=>Mpt],xmt=[1,I,Jlt,0,()=>Kpt],w$=[1,I,$lt,0,()=>Qpt],T$=[1,I,eut,0,()=>emt],E$=[1,I,FQ,0,()=>$pt],D$=[1,I,uut,0,()=>tmt],Smt=[1,I,UQ,0,()=>smt],O$=[1,I,VQ,0,()=>cmt],Cmt=[1,I,XQ,0,()=>umt],k$=[1,I,Qut,0,()=>lmt],A$=[1,I,zut,0,()=>_$],j$=[1,I,Wut,0,()=>fmt],wmt=[1,I,Gut,0,()=>mmt],M$=[1,I,ZQ,0,()=>dmt],Tmt=[1,I,t$,0,()=>gmt],Emt=[9,I,Xot,0,()=>Mft,()=>Nft],Dmt=[9,I,fst,0,()=>Vft,()=>Hft],Omt=[9,I,sst,0,()=>Uft,()=>Wft],kmt=[9,I,mst,0,()=>Gft,()=>Kft],Amt=[9,I,bst,0,()=>qft,()=>Jft],jmt=[9,I,kst,0,()=>Yft,()=>Xft],Mmt=[9,I,Ast,0,()=>Zft,()=>Qft],Nmt=[9,I,qst,0,()=>$ft,()=>ept],Pmt=[9,I,ict,0,()=>tpt,()=>npt],Fmt=[9,I,rct,0,()=>rpt,()=>ipt],Imt=[9,I,Gst,0,()=>apt,()=>opt],Lmt=[9,I,jst,0,()=>spt,()=>cpt],Rmt=[9,I,zst,0,()=>lpt,()=>upt],zmt=[9,I,Qst,0,()=>dpt,()=>fpt],Bmt=[9,I,ect,0,()=>ppt,()=>mpt],Vmt=[9,I,Cct,0,()=>hpt,()=>gpt],Hmt=[9,I,act,0,()=>_pt,()=>vpt],Umt=[9,I,pct,0,()=>ypt,()=>bpt],Wmt=[9,I,mct,0,()=>xpt,()=>Spt],Gmt=[9,I,Slt,0,()=>Ipt,()=>Lpt],Kmt=[9,I,Clt,0,()=>Rpt,()=>zpt],qmt=[9,I,Olt,0,()=>Bpt,()=>Vpt],Jmt=[9,I,jlt,0,()=>Hpt,()=>Upt],Ymt=[9,I,mut,0,()=>Jpt,()=>Ypt],Xmt=[9,I,hut,0,()=>Xpt,()=>Zpt],Zmt=[9,I,jut,0,()=>nmt,()=>rmt],Qmt=[9,I,Aut,0,()=>imt,()=>amt],$mt=e=>({apiVersion:`2015-12-01`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??Rat,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??kat,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??lt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.elasticloadbalancingv2`,errorTypeRegistries:Aft,xmlNamespace:`http://elasticloadbalancing.amazonaws.com/doc/2015-12-01/`,version:`2015-12-01`,serviceTarget:`ElasticLoadBalancing_v10`},serviceId:e?.serviceId??`Elastic Load Balancing v2`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),eht=e=>{let t=he(e),n=()=>t().then(a),r=$mt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:Nat.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},tht=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},nht=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),rht=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),tht(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),nht(n))},iht=class extends le{config;constructor(...[t]){let n=eht(t||{});super(n),this.initConfig=n;let r=jat(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=rht(Aat(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:Dat,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},aht=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function oht(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`iam`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var sht=e=>{let t=[];return e.operation,t.push(oht(e)),t},cht=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},lht=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`iam`}),uht={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},dht={name:`@aws-sdk/client-iam`,version:`3.1135.0`,description:`AWS SDK for JavaScript Iam Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-iam`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-iam`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},N$=`ref`,P$=`authSchemes`,F$=`name`,I$=`signingRegion`,L$=-1,R$=!0,z$=`isSet`,B$=`PartitionResult`,V$=`stringEquals`,H$=`booleanEquals`,U$=`getAttr`,W$={[N$]:`Endpoint`},G$={fn:U$,argv:[{[N$]:B$},`name`]},K$={[N$]:B$},q$={[P$]:[{[F$]:`sigv4`,[I$]:`us-east-1`}]},J$={[P$]:[{[F$]:`sigv4`,[I$]:`cn-north-1`}]},Y$={[P$]:[{[F$]:`sigv4`,[I$]:`us-gov-west-1`}]},X$={[P$]:[{[F$]:`sigv4`,[I$]:`us-iso-east-1`}]},Z$={[P$]:[{[F$]:`sigv4`,[I$]:`us-isob-east-1`}]},Q$={[P$]:[{[F$]:`sigv4`,[I$]:`eu-isoe-west-1`}]},$$={[P$]:[{[F$]:`sigv4`,[I$]:`us-isof-south-1`}]},e1={[P$]:[{[F$]:`sigv4`,[I$]:`eusc-de-east-1`}]},t1={[P$]:[{[F$]:`sigv4`,[I$]:`{PartitionResult#implicitGlobalRegion}`}]},n1=[{[N$]:`Region`}],r1={conditions:[[z$,[W$]],[z$,n1],[`aws.partition`,n1,B$],[V$,[G$,`aws`]],[V$,[G$,`aws-cn`]],[V$,[G$,`aws-us-gov`]],[V$,[G$,`aws-iso`]],[H$,[{[N$]:`UseFIPS`},R$]],[H$,[{[N$]:`UseDualStack`},R$]],[V$,[G$,`aws-iso-b`]],[V$,[G$,`aws-iso-e`]],[V$,[G$,`aws-iso-f`]],[V$,[G$,`aws-eusc`]],[H$,[{fn:U$,argv:[K$,`supportsDualStack`]},R$]],[H$,[{fn:U$,argv:[K$,`supportsFIPS`]},R$]]],results:[[L$],[L$,`Invalid Configuration: FIPS and custom endpoint are not supported`],[L$,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[W$,{}],[`https://iam.amazonaws.com`,q$],[`https://iam-fips.amazonaws.com`,q$],[`https://iam.global.api.aws`,q$],[`https://iam-fips.global.api.aws`,q$],[`https://iam.global.api.amazonwebservices.com.cn`,J$],[`https://iam-fips.api.amazonwebservices.com.cn`,J$],[`https://iam.cn-north-1.amazonaws.com.cn`,J$],[`https://iam-fips.amazonaws.com.cn`,J$],[`https://iam.us-gov.api.aws`,Y$],[`https://iam.us-gov.amazonaws.com`,Y$],[`https://iam.us-iso-east-1.c2s.ic.gov`,X$],[`https://iam-fips.us-iso-east-1.c2s.ic.gov`,X$],[`https://iam.api.aws.ic.gov`,X$],[`https://iam-fips.api.aws.ic.gov`,X$],[`https://iam.us-isob-east-1.sc2s.sgov.gov`,Z$],[`https://iam-fips.us-isob-east-1.sc2s.sgov.gov`,Z$],[`https://iam.api.aws.scloud`,Z$],[`https://iam-fips.api.aws.scloud`,Z$],[`https://iam.eu-isoe-west-1.cloud.adc-e.uk`,Q$],[`https://iam-fips.cloud.adc-e.uk`,Q$],[`https://iam.api.cloud-aws.adc-e.uk`,Q$],[`https://iam-fips.api.cloud-aws.adc-e.uk`,Q$],[`https://iam.us-isof-south-1.csp.hci.ic.gov`,$$],[`https://iam-fips.csp.hci.ic.gov`,$$],[`https://iam.api.aws.hci.ic.gov`,$$],[`https://iam-fips.api.aws.hci.ic.gov`,$$],[`https://iam.eusc-de-east-1.amazonaws.eu`,e1],[`https://iam-fips.amazonaws.eu`,e1],[`https://iam.global.api.amazonwebservices.eu`,e1],[`https://iam-fips.api.amazonwebservices.eu`,e1],[`https://iam-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}`,t1],[L$,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://iam-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}`,t1],[L$,`FIPS is enabled but this partition does not support FIPS`],[`https://iam.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}`,t1],[L$,`DualStack is enabled but this partition does not support DualStack`],[`https://iam.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}`,t1],[L$,`Invalid Configuration: Missing Region`]]},fht=2,pht=new Int32Array([-1,1,-1,0,42,3,1,4,100000041,2,5,100000041,3,39,6,4,36,7,5,35,8,6,32,9,7,20,10,8,15,11,9,100000018,12,10,100000022,13,11,100000026,14,12,100000030,100000040,9,100000020,16,10,100000024,17,11,100000028,18,12,100000032,19,13,100000038,100000039,8,26,21,9,100000019,22,10,100000023,23,11,100000027,24,12,100000031,25,14,100000036,100000037,9,100000021,27,10,100000025,28,11,100000029,29,12,100000033,30,13,31,100000035,14,100000034,100000035,7,34,33,8,100000016,100000014,8,100000017,100000015,8,100000012,100000013,7,38,37,8,100000008,100000010,8,100000009,100000011,7,41,40,8,100000006,100000004,8,100000007,100000005,7,100000001,43,8,100000002,100000003]),mht=xe.from(pht,fht,r1.conditions,r1.results),hht=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),ght=(e,t={})=>hht.get(e,()=>ut(mht,{endpointParams:e,logger:t.logger}));Le.aws=oe;var R=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},_ht=class e extends R{name=`ConcurrentModificationException`;$fault=`client`;constructor(t){super({name:`ConcurrentModificationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vht=class e extends R{name=`NoSuchEntityException`;$fault=`client`;constructor(t){super({name:`NoSuchEntityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yht=class e extends R{name=`ServiceFailureException`;$fault=`server`;constructor(t){super({name:`ServiceFailureException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},bht=class e extends R{name=`AccountNotManagementOrDelegatedAdministratorException`;$fault=`client`;Message;constructor(t){super({name:`AccountNotManagementOrDelegatedAdministratorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},xht=class e extends R{name=`EntityAlreadyExistsException`;$fault=`client`;constructor(t){super({name:`EntityAlreadyExistsException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Sht=class e extends R{name=`InvalidInputException`;$fault=`client`;constructor(t){super({name:`InvalidInputException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cht=class e extends R{name=`LimitExceededException`;$fault=`client`;constructor(t){super({name:`LimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wht=class e extends R{name=`MalformedPolicyDocumentException`;$fault=`client`;constructor(t){super({name:`MalformedPolicyDocumentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Tht=class e extends R{name=`NameConflictException`;$fault=`client`;constructor(t){super({name:`NameConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Eht=class e extends R{name=`RoleModifiedException`;$fault=`client`;constructor(t){super({name:`RoleModifiedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dht=class e extends R{name=`RoleTemplateDisabledException`;$fault=`client`;constructor(t){super({name:`RoleTemplateDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Oht=class e extends R{name=`UnmodifiableEntityException`;$fault=`client`;constructor(t){super({name:`UnmodifiableEntityException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kht=class e extends R{name=`PolicyNotAttachableException`;$fault=`client`;constructor(t){super({name:`PolicyNotAttachableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Aht=class e extends R{name=`EntityTemporarilyUnmodifiableException`;$fault=`client`;constructor(t){super({name:`EntityTemporarilyUnmodifiableException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jht=class e extends R{name=`InvalidUserTypeException`;$fault=`client`;constructor(t){super({name:`InvalidUserTypeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mht=class e extends R{name=`PasswordPolicyViolationException`;$fault=`client`;constructor(t){super({name:`PasswordPolicyViolationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Nht=class e extends R{name=`OpenIdIdpCommunicationErrorException`;$fault=`client`;constructor(t){super({name:`OpenIdIdpCommunicationErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Pht=class e extends R{name=`ServiceNotSupportedException`;$fault=`client`;constructor(t){super({name:`ServiceNotSupportedException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Fht=class e extends R{name=`DeleteConflictException`;$fault=`client`;constructor(t){super({name:`DeleteConflictException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Iht=class e extends R{name=`OrganizationNotFoundException`;$fault=`client`;Message;constructor(t){super({name:`OrganizationNotFoundException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Lht=class e extends R{name=`OrganizationNotInAllFeaturesModeException`;$fault=`client`;Message;constructor(t){super({name:`OrganizationNotInAllFeaturesModeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Rht=class e extends R{name=`ServiceAccessNotEnabledException`;$fault=`client`;Message;constructor(t){super({name:`ServiceAccessNotEnabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},zht=class e extends R{name=`FeatureDisabledException`;$fault=`client`;constructor(t){super({name:`FeatureDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bht=class e extends R{name=`InvalidAuthenticationCodeException`;$fault=`client`;constructor(t){super({name:`InvalidAuthenticationCodeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Vht=class e extends R{name=`CallerIsNotManagementAccountException`;$fault=`client`;Message;constructor(t){super({name:`CallerIsNotManagementAccountException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.Message=t.Message}},Hht=class e extends R{name=`FeatureEnabledException`;$fault=`client`;constructor(t){super({name:`FeatureEnabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Uht=class e extends R{name=`ReportGenerationLimitExceededException`;$fault=`client`;constructor(t){super({name:`ReportGenerationLimitExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Wht=class e extends R{name=`CredentialReportExpiredException`;$fault=`client`;constructor(t){super({name:`CredentialReportExpiredException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ght=class e extends R{name=`CredentialReportNotPresentException`;$fault=`client`;constructor(t){super({name:`CredentialReportNotPresentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Kht=class e extends R{name=`CredentialReportNotReadyException`;$fault=`client`;constructor(t){super({name:`CredentialReportNotReadyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qht=class e extends R{name=`UnrecognizedPublicKeyEncodingException`;$fault=`client`;constructor(t){super({name:`UnrecognizedPublicKeyEncodingException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Jht=class e extends R{name=`PolicyEvaluationException`;$fault=`server`;constructor(t){super({name:`PolicyEvaluationException`,$fault:`server`,...t}),Object.setPrototypeOf(this,e.prototype)}},Yht=class e extends R{name=`KeyPairMismatchException`;$fault=`client`;constructor(t){super({name:`KeyPairMismatchException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xht=class e extends R{name=`MalformedCertificateException`;$fault=`client`;constructor(t){super({name:`MalformedCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zht=class e extends R{name=`DuplicateCertificateException`;$fault=`client`;constructor(t){super({name:`DuplicateCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qht=class e extends R{name=`InvalidCertificateException`;$fault=`client`;constructor(t){super({name:`InvalidCertificateException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$ht=class e extends R{name=`DuplicateSSHPublicKeyException`;$fault=`client`;constructor(t){super({name:`DuplicateSSHPublicKeyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},egt=class e extends R{name=`InvalidPublicKeyException`;$fault=`client`;constructor(t){super({name:`InvalidPublicKeyException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},i1=`Arn`,tgt=`AttachmentCount`,ngt=`AttachGroupPolicy`,rgt=`AttachGroupPolicyRequest`,a1=`AccessKey`,o1=`AccessKeyId`,s1=`AccessKeyMetadata`,igt=`AccountNotManagementOrDelegatedAdministratorException`,agt=`AttachedPolicy`,ogt=`AttachedPermissionsBoundary`,c1=`AttachedPolicies`,sgt=`AttachRolePolicy`,l1=`AssumeRolePolicyDocument`,cgt=`AttachRolePolicyRequest`,lgt=`AddRoleToInstanceProfile`,ugt=`AddRoleToInstanceProfileRequest`,dgt=`AttachUserPolicy`,fgt=`AttachUserPolicyRequest`,pgt=`AddUserToGroup`,mgt=`AddUserToGroupRequest`,hgt=`CreateAccessKey`,ggt=`CreateAccessKeyRequest`,_gt=`CreateAccessKeyResponse`,u1=`CreateDate`,vgt=`CreateGroup`,ygt=`CreateGroupRequest`,bgt=`CreateGroupResponse`,xgt=`CallerIsNotManagementAccountException`,Sgt=`CreateInstanceProfile`,Cgt=`CreateInstanceProfileRequest`,wgt=`CreateInstanceProfileResponse`,Tgt=`ConcurrentModificationException`,Egt=`CreatePolicyRequest`,Dgt=`CreatePolicyResponse`,Ogt=`CreatePolicy`,kgt=`CreateRole`,Agt=`CredentialReportExpiredException`,jgt=`CredentialReportNotPresentException`,Mgt=`CredentialReportNotReadyException`,Ngt=`CreateRoleRequest`,Pgt=`CreateRoleResponse`,Fgt=`CreateUser`,Igt=`CreateUserRequest`,Lgt=`CreateUserResponse`,d1=`Description`,Rgt=`DeleteAccessKey`,zgt=`DeleteAccessKeyRequest`,Bgt=`DeleteConflictException`,Vgt=`DuplicateCertificateException`,Hgt=`DeleteGroup`,Ugt=`DeleteGroupPolicy`,Wgt=`DeleteGroupPolicyRequest`,Ggt=`DetachGroupPolicyRequest`,Kgt=`DetachGroupPolicy`,qgt=`DeleteGroupRequest`,Jgt=`DeleteInstanceProfile`,Ygt=`DeleteInstanceProfileRequest`,Xgt=`DeletePolicyRequest`,Zgt=`DeletePolicy`,Qgt=`DeleteRolePolicy`,$gt=`DeleteRolePolicyRequest`,e_t=`DetachRolePolicyRequest`,t_t=`DetachRolePolicy`,n_t=`DeleteRoleRequest`,r_t=`DeleteRole`,i_t=`DuplicateSSHPublicKeyException`,a_t=`DeleteUser`,o_t=`DeleteUserPolicy`,s_t=`DeleteUserPolicyRequest`,c_t=`DetachUserPolicyRequest`,l_t=`DetachUserPolicy`,u_t=`DeleteUserRequest`,d_t=`DefaultVersionId`,f_t=`Document`,p_t=`EntityAlreadyExistsException`,m_t=`EntityTemporarilyUnmodifiableException`,h_t=`FeatureDisabledException`,g_t=`FeatureEnabledException`,f1=`Group`,__t=`GetGroup`,v_t=`GetGroupPolicy`,y_t=`GetGroupPolicyRequest`,b_t=`GetGroupPolicyResponse`,x_t=`GetGroupRequest`,S_t=`GetGroupResponse`,C_t=`GroupId`,w_t=`GetInstanceProfile`,T_t=`GetInstanceProfileRequest`,E_t=`GetInstanceProfileResponse`,p1=`GroupName`,D_t=`GetPolicy`,O_t=`GetPolicyRequest`,k_t=`GetPolicyResponse`,A_t=`GetPolicyVersion`,j_t=`GetPolicyVersionRequest`,M_t=`GetPolicyVersionResponse`,N_t=`GetRole`,P_t=`GetRolePolicy`,F_t=`GetRolePolicyRequest`,I_t=`GetRolePolicyResponse`,L_t=`GetRoleRequest`,R_t=`GetRoleResponse`,z_t=`GetUser`,B_t=`GetUserPolicy`,V_t=`GetUserPolicyRequest`,H_t=`GetUserPolicyResponse`,U_t=`GetUserRequest`,W_t=`GetUserResponse`,m1=`Groups`,G_t=`IsAttachable`,K_t=`InvalidAuthenticationCodeException`,q_t=`InvalidCertificateException`,J_t=`IsDefaultVersion`,Y_t=`InvalidInputException`,h1=`InstanceProfile`,X_t=`InstanceProfileId`,Z_t=`InvalidPublicKeyException`,g1=`InstanceProfileName`,_1=`InstanceProfiles`,v1=`IsTruncated`,Q_t=`InvalidUserTypeException`,$_t=`Key`,evt=`KeyPairMismatchException`,tvt=`ListAttachedGroupPolicies`,nvt=`ListAttachedGroupPoliciesRequest`,rvt=`ListAttachedGroupPoliciesResponse`,ivt=`ListAccessKeys`,avt=`ListAccessKeysRequest`,ovt=`ListAccessKeysResponse`,svt=`ListAttachedRolePolicies`,cvt=`ListAttachedRolePoliciesRequest`,lvt=`ListAttachedRolePoliciesResponse`,uvt=`ListAttachedUserPolicies`,dvt=`ListAttachedUserPoliciesRequest`,fvt=`ListAttachedUserPoliciesResponse`,pvt=`LimitExceededException`,mvt=`ListGroups`,hvt=`ListGroupsForUser`,gvt=`ListGroupsForUserRequest`,_vt=`ListGroupsForUserResponse`,vvt=`ListGroupPolicies`,yvt=`ListGroupPoliciesRequest`,bvt=`ListGroupPoliciesResponse`,xvt=`ListGroupsRequest`,Svt=`ListGroupsResponse`,Cvt=`ListInstanceProfiles`,wvt=`ListInstanceProfilesForRole`,Tvt=`ListInstanceProfilesForRoleRequest`,Evt=`ListInstanceProfilesForRoleResponse`,Dvt=`ListInstanceProfilesRequest`,Ovt=`ListInstanceProfilesResponse`,kvt=`ListPoliciesRequest`,Avt=`ListPoliciesResponse`,jvt=`ListPolicies`,Mvt=`ListRoles`,Nvt=`ListRolePolicies`,Pvt=`ListRolePoliciesRequest`,Fvt=`ListRolePoliciesResponse`,Ivt=`ListRolesRequest`,Lvt=`ListRolesResponse`,Rvt=`ListUsers`,zvt=`LastUsedDate`,Bvt=`ListUserPolicies`,Vvt=`ListUserPoliciesRequest`,Hvt=`ListUserPoliciesResponse`,Uvt=`ListUsersRequest`,Wvt=`ListUsersResponse`,y1=`Message`,Gvt=`MalformedCertificateException`,b1=`MaxItems`,Kvt=`MalformedPolicyDocumentException`,x1=`MaxSessionDuration`,S1=`Marker`,qvt=`NameConflictException`,Jvt=`NoSuchEntityException`,Yvt=`OnlyAttached`,Xvt=`OpenIdIdpCommunicationErrorException`,Zvt=`OrganizationNotFoundException`,Qvt=`OrganizationNotInAllFeaturesModeException`,C1=`PolicyArn`,w1=`PermissionsBoundary`,$vt=`PermissionsBoundaryArn`,eyt=`PermissionsBoundaryType`,tyt=`PermissionsBoundaryUsageCount`,T1=`PolicyDocument`,nyt=`PolicyEvaluationException`,ryt=`PutGroupPolicy`,iyt=`PutGroupPolicyRequest`,ayt=`PolicyId`,oyt=`PasswordLastUsed`,E1=`PolicyName`,syt=`PolicyNotAttachableException`,D1=`PolicyNames`,cyt=`PasswordPolicyViolationException`,O1=`PathPrefix`,lyt=`PutRolePolicyRequest`,uyt=`PutRolePolicy`,dyt=`PolicyUsageFilter`,fyt=`PutUserPolicy`,pyt=`PutUserPolicyRequest`,k1=`PolicyVersion`,A1=`Path`,j1=`Policy`,myt=`Policies`,hyt=`Region`,gyt=`ReportGenerationLimitExceededException`,_yt=`RoleId`,M1=`RoleLastUsed`,vyt=`RoleModifiedException`,N1=`RoleName`,yyt=`RemoveRoleFromInstanceProfile`,byt=`RemoveRoleFromInstanceProfileRequest`,xyt=`RoleTemplateDisabledException`,Syt=`RemoveUserFromGroup`,Cyt=`RemoveUserFromGroupRequest`,P1=`Role`,F1=`Roles`,I1=`Status`,wyt=`SecretAccessKey`,Tyt=`ServiceAccessNotEnabledException`,Eyt=`ServiceFailureException`,Dyt=`ServiceNotSupportedException`,L1=`SourceRoleTemplate`,Oyt=`Scope`,R1=`Tags`,kyt=`TemplateArn`,Ayt=`TemplateMinorVersion`,jyt=`Tag`,Myt=`UpdateAccessKey`,Nyt=`UpdateAccessKeyRequest`,Pyt=`UpdateDate`,Fyt=`UnmodifiableEntityException`,Iyt=`UserId`,z1=`UserName`,Lyt=`UnrecognizedPublicKeyEncodingException`,B1=`User`,V1=`Users`,H1=`VersionId`,Ryt=`Value`,zyt=`accessKeyMetadataListType`,Byt=`accessKeySecretType`,Vyt=`attachedPoliciesListType`,U1=`awsQueryError`,W1=`client`,z=`error`,Hyt=`groupListType`,B=`httpError`,Uyt=`instanceProfileListType`,G1=`message`,Wyt=`policyListType`,Gyt=`roleListType`,K1=`smithy.ts.sdk.synthetic.com.amazonaws.iam`,q1=`server`,Kyt=`tagListType`,qyt=`userListType`,V=`com.amazonaws.iam`,J1=pt.for(K1),Jyt=[-3,K1,`IAMServiceException`,0,[],[]];J1.registerError(Jyt,R);var H=pt.for(V),Yyt=[-3,V,igt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(Yyt,bht);var Xyt=[-3,V,xgt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(Xyt,Vht);var Zyt=[-3,V,Tgt,{[U1]:[`ConcurrentModification`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Zyt,_ht);var Qyt=[-3,V,Agt,{[U1]:[`ReportExpired`,410],[z]:W1,[B]:410},[G1],[0]];H.registerError(Qyt,Wht);var $yt=[-3,V,jgt,{[U1]:[`ReportNotPresent`,410],[z]:W1,[B]:410},[G1],[0]];H.registerError($yt,Ght);var ebt=[-3,V,Mgt,{[U1]:[`ReportInProgress`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(ebt,Kht);var tbt=[-3,V,Bgt,{[U1]:[`DeleteConflict`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(tbt,Fht);var nbt=[-3,V,Vgt,{[U1]:[`DuplicateCertificate`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(nbt,Zht);var rbt=[-3,V,i_t,{[U1]:[`DuplicateSSHPublicKey`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(rbt,$ht);var ibt=[-3,V,p_t,{[U1]:[`EntityAlreadyExists`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(ibt,xht);var abt=[-3,V,m_t,{[U1]:[`EntityTemporarilyUnmodifiable`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(abt,Aht);var obt=[-3,V,h_t,{[U1]:[`FeatureDisabled`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(obt,zht);var sbt=[-3,V,g_t,{[U1]:[`FeatureEnabled`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(sbt,Hht);var cbt=[-3,V,K_t,{[U1]:[`InvalidAuthenticationCode`,403],[z]:W1,[B]:403},[G1],[0]];H.registerError(cbt,Bht);var lbt=[-3,V,q_t,{[U1]:[`InvalidCertificate`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(lbt,Qht);var ubt=[-3,V,Y_t,{[U1]:[`InvalidInput`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(ubt,Sht);var dbt=[-3,V,Z_t,{[U1]:[`InvalidPublicKey`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(dbt,egt);var fbt=[-3,V,Q_t,{[U1]:[`InvalidUserType`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(fbt,jht);var pbt=[-3,V,evt,{[U1]:[`KeyPairMismatch`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(pbt,Yht);var mbt=[-3,V,pvt,{[U1]:[`LimitExceeded`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(mbt,Cht);var hbt=[-3,V,Gvt,{[U1]:[`MalformedCertificate`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(hbt,Xht);var gbt=[-3,V,Kvt,{[U1]:[`MalformedPolicyDocument`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(gbt,wht);var _bt=[-3,V,qvt,{[U1]:[`NameConflict`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(_bt,Tht);var vbt=[-3,V,Jvt,{[U1]:[`NoSuchEntity`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(vbt,vht);var ybt=[-3,V,Xvt,{[U1]:[`OpenIdIdpCommunicationError`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(ybt,Nht);var bbt=[-3,V,Zvt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(bbt,Iht);var xbt=[-3,V,Qvt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(xbt,Lht);var Sbt=[-3,V,cyt,{[U1]:[`PasswordPolicyViolation`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Sbt,Mht);var Cbt=[-3,V,nyt,{[U1]:[`PolicyEvaluation`,500],[z]:q1,[B]:500},[G1],[0]];H.registerError(Cbt,Jht);var wbt=[-3,V,syt,{[U1]:[`PolicyNotAttachable`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(wbt,kht);var Tbt=[-3,V,gyt,{[U1]:[`ReportGenerationLimitExceeded`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Tbt,Uht);var Ebt=[-3,V,vyt,{[U1]:[`RoleModified`,409],[z]:W1,[B]:409},[G1],[0]];H.registerError(Ebt,Eht);var Dbt=[-3,V,xyt,{[U1]:[`RoleTemplateDisabled`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Dbt,Dht);var Obt=[-3,V,Tyt,{[z]:W1,[B]:400},[y1],[0]];H.registerError(Obt,Rht);var kbt=[-3,V,Eyt,{[U1]:[`ServiceFailure`,500],[z]:q1,[B]:500},[G1],[0]];H.registerError(kbt,yht);var Abt=[-3,V,Dyt,{[U1]:[`NotSupportedService`,404],[z]:W1,[B]:404},[G1],[0]];H.registerError(Abt,Pht);var jbt=[-3,V,Fyt,{[U1]:[`UnmodifiableEntity`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(jbt,Oht);var Mbt=[-3,V,Lyt,{[U1]:[`UnrecognizedPublicKeyEncoding`,400],[z]:W1,[B]:400},[G1],[0]];H.registerError(Mbt,qht);var Nbt=[J1,H],Pbt=[0,V,Byt,8,0],Fbt=[3,V,a1,0,[z1,o1,I1,wyt,u1],[0,0,0,[()=>Pbt,0],4],4],Ibt=[3,V,s1,0,[z1,o1,I1,u1],[0,0,0,4]],Lbt=[3,V,ugt,0,[g1,N1],[0,0],2],Rbt=[3,V,mgt,0,[p1,z1],[0,0],2],Y1=[3,V,ogt,0,[eyt,$vt],[0,0]],zbt=[3,V,agt,0,[E1,C1],[0,0]],Bbt=[3,V,rgt,0,[p1,C1],[0,0],2],Vbt=[3,V,cgt,0,[N1,C1],[0,0],2],Hbt=[3,V,fgt,0,[z1,C1],[0,0],2],Ubt=[3,V,ggt,0,[z1],[0]],Wbt=[3,V,_gt,0,[a1],[[()=>Fbt,0]],1],Gbt=[3,V,ygt,0,[p1,A1],[0,0],1],Kbt=[3,V,bgt,0,[f1],[()=>X1],1],qbt=[3,V,Cgt,0,[g1,A1,R1],[0,0,()=>o0],1],Jbt=[3,V,wgt,0,[h1],[()=>Z1],1],Ybt=[3,V,Egt,0,[E1,T1,A1,d1,R1],[0,0,0,0,()=>o0],2],Xbt=[3,V,Dgt,0,[j1],[()=>Q1]],Zbt=[3,V,Ngt,0,[N1,l1,A1,d1,x1,w1,R1],[0,0,0,0,1,0,()=>o0],2],Qbt=[3,V,Pgt,0,[P1],[()=>$1],1],$bt=[3,V,Igt,0,[z1,A1,w1,R1],[0,0,0,()=>o0],1],ext=[3,V,Lgt,0,[B1],[()=>e0]],txt=[3,V,zgt,0,[o1,z1],[0,0],1],nxt=[3,V,Wgt,0,[p1,E1],[0,0],2],rxt=[3,V,qgt,0,[p1],[0],1],ixt=[3,V,Ygt,0,[g1],[0],1],axt=[3,V,Xgt,0,[C1],[0],1],oxt=[3,V,$gt,0,[N1,E1],[0,0],2],sxt=[3,V,n_t,0,[N1],[0],1],cxt=[3,V,s_t,0,[z1,E1],[0,0],2],lxt=[3,V,u_t,0,[z1],[0],1],uxt=[3,V,Ggt,0,[p1,C1],[0,0],2],dxt=[3,V,e_t,0,[N1,C1],[0,0],2],fxt=[3,V,c_t,0,[z1,C1],[0,0],2],pxt=[3,V,y_t,0,[p1,E1],[0,0],2],mxt=[3,V,b_t,0,[p1,E1,T1],[0,0,0],3],hxt=[3,V,x_t,0,[p1,S1,b1],[0,0,1],1],gxt=[3,V,S_t,0,[f1,V1,v1,S1],[()=>X1,()=>s0,2,0],2],_xt=[3,V,T_t,0,[g1],[0],1],vxt=[3,V,E_t,0,[h1],[()=>Z1],1],yxt=[3,V,O_t,0,[C1],[0],1],bxt=[3,V,k_t,0,[j1],[()=>Q1]],xxt=[3,V,j_t,0,[C1,H1],[0,0],2],Sxt=[3,V,M_t,0,[k1],[()=>aSt]],Cxt=[3,V,F_t,0,[N1,E1],[0,0],2],wxt=[3,V,I_t,0,[N1,E1,T1],[0,0,0],3],Txt=[3,V,L_t,0,[N1],[0],1],Ext=[3,V,R_t,0,[P1],[()=>$1],1],Dxt=[3,V,V_t,0,[z1,E1],[0,0],2],Oxt=[3,V,H_t,0,[z1,E1,T1],[0,0,0],3],kxt=[3,V,U_t,0,[z1],[0]],Axt=[3,V,W_t,0,[B1],[()=>e0],1],X1=[3,V,f1,0,[A1,p1,C_t,i1,u1],[0,0,0,0,4],5],Z1=[3,V,h1,0,[A1,g1,X_t,i1,u1,F1,R1],[0,0,0,0,4,()=>a0,()=>o0],6],jxt=[3,V,avt,0,[z1,S1,b1],[0,0,1]],Mxt=[3,V,ovt,0,[s1,v1,S1],[()=>hSt,2,0],1],Nxt=[3,V,nvt,0,[p1,O1,S1,b1],[0,0,0,1],1],Pxt=[3,V,rvt,0,[c1,v1,S1],[()=>n0,2,0]],Fxt=[3,V,cvt,0,[N1,O1,S1,b1],[0,0,0,1],1],Ixt=[3,V,lvt,0,[c1,v1,S1],[()=>n0,2,0]],Lxt=[3,V,dvt,0,[z1,O1,S1,b1],[0,0,0,1],1],Rxt=[3,V,fvt,0,[c1,v1,S1],[()=>n0,2,0]],zxt=[3,V,yvt,0,[p1,S1,b1],[0,0,1],1],Bxt=[3,V,bvt,0,[D1,v1,S1],[64,2,0],1],Vxt=[3,V,gvt,0,[z1,S1,b1],[0,0,1],1],Hxt=[3,V,_vt,0,[m1,v1,S1],[()=>r0,2,0],1],Uxt=[3,V,xvt,0,[O1,S1,b1],[0,0,1]],Wxt=[3,V,Svt,0,[m1,v1,S1],[()=>r0,2,0],1],Gxt=[3,V,Tvt,0,[N1,S1,b1],[0,0,1],1],Kxt=[3,V,Evt,0,[_1,v1,S1],[()=>i0,2,0],1],qxt=[3,V,Dvt,0,[O1,S1,b1],[0,0,1]],Jxt=[3,V,Ovt,0,[_1,v1,S1],[()=>i0,2,0],1],Yxt=[3,V,kvt,0,[Oyt,Yvt,O1,dyt,S1,b1],[0,2,0,0,0,1]],Xxt=[3,V,Avt,0,[myt,v1,S1],[()=>gSt,2,0]],Zxt=[3,V,Pvt,0,[N1,S1,b1],[0,0,1],1],Qxt=[3,V,Fvt,0,[D1,v1,S1],[64,2,0],1],$xt=[3,V,Ivt,0,[O1,S1,b1],[0,0,1]],eSt=[3,V,Lvt,0,[F1,v1,S1],[()=>a0,2,0],1],tSt=[3,V,Vvt,0,[z1,S1,b1],[0,0,1],1],nSt=[3,V,Hvt,0,[D1,v1,S1],[64,2,0],1],rSt=[3,V,Uvt,0,[O1,S1,b1],[0,0,1]],iSt=[3,V,Wvt,0,[V1,v1,S1],[()=>s0,2,0],1],Q1=[3,V,j1,0,[E1,ayt,i1,A1,d_t,tgt,tyt,G_t,d1,u1,Pyt,R1],[0,0,0,0,0,1,1,2,0,4,4,()=>o0]],aSt=[3,V,k1,0,[f_t,H1,J_t,u1],[0,0,2,4]],oSt=[3,V,iyt,0,[p1,E1,T1],[0,0,0],3],sSt=[3,V,lyt,0,[N1,E1,T1],[0,0,0],3],cSt=[3,V,pyt,0,[z1,E1,T1],[0,0,0],3],lSt=[3,V,byt,0,[g1,N1],[0,0],2],uSt=[3,V,Cyt,0,[p1,z1],[0,0],2],$1=[3,V,P1,0,[A1,N1,_yt,i1,u1,l1,d1,x1,w1,R1,M1,L1],[0,0,0,0,4,0,0,1,()=>Y1,()=>o0,()=>dSt,()=>fSt],5],dSt=[3,V,M1,0,[zvt,hyt],[4,0]],fSt=[3,V,L1,0,[kyt,Ayt],[0,1],2],pSt=[3,V,jyt,0,[$_t,Ryt],[0,0],2],mSt=[3,V,Nyt,0,[o1,I1,z1],[0,0,0],2],e0=[3,V,B1,0,[A1,z1,Iyt,i1,u1,oyt,w1,R1],[0,0,0,0,4,4,()=>Y1,()=>o0],5],t0=`unit`,hSt=[1,V,zyt,0,()=>Ibt],n0=[1,V,Vyt,0,()=>zbt],r0=[1,V,Hyt,0,()=>X1],i0=[1,V,Uyt,0,()=>Z1],gSt=[1,V,Wyt,0,()=>Q1],a0=[1,V,Gyt,0,()=>$1],o0=[1,V,Kyt,0,()=>pSt],s0=[1,V,qyt,0,()=>e0],_St=[9,V,lgt,0,()=>Lbt,()=>t0],vSt=[9,V,pgt,0,()=>Rbt,()=>t0],ySt=[9,V,ngt,0,()=>Bbt,()=>t0],bSt=[9,V,sgt,0,()=>Vbt,()=>t0],xSt=[9,V,dgt,0,()=>Hbt,()=>t0],SSt=[9,V,hgt,0,()=>Ubt,()=>Wbt],CSt=[9,V,vgt,0,()=>Gbt,()=>Kbt],wSt=[9,V,Sgt,0,()=>qbt,()=>Jbt],TSt=[9,V,Ogt,0,()=>Ybt,()=>Xbt],ESt=[9,V,kgt,0,()=>Zbt,()=>Qbt],DSt=[9,V,Fgt,0,()=>$bt,()=>ext],OSt=[9,V,Rgt,0,()=>txt,()=>t0],kSt=[9,V,Hgt,0,()=>rxt,()=>t0],ASt=[9,V,Ugt,0,()=>nxt,()=>t0],jSt=[9,V,Jgt,0,()=>ixt,()=>t0],MSt=[9,V,Zgt,0,()=>axt,()=>t0],NSt=[9,V,r_t,0,()=>sxt,()=>t0],PSt=[9,V,Qgt,0,()=>oxt,()=>t0],FSt=[9,V,a_t,0,()=>lxt,()=>t0],ISt=[9,V,o_t,0,()=>cxt,()=>t0],LSt=[9,V,Kgt,0,()=>uxt,()=>t0],RSt=[9,V,t_t,0,()=>dxt,()=>t0],zSt=[9,V,l_t,0,()=>fxt,()=>t0],BSt=[9,V,__t,0,()=>hxt,()=>gxt],VSt=[9,V,v_t,0,()=>pxt,()=>mxt],HSt=[9,V,w_t,0,()=>_xt,()=>vxt],USt=[9,V,D_t,0,()=>yxt,()=>bxt],WSt=[9,V,A_t,0,()=>xxt,()=>Sxt],GSt=[9,V,N_t,0,()=>Txt,()=>Ext],KSt=[9,V,P_t,0,()=>Cxt,()=>wxt],qSt=[9,V,z_t,0,()=>kxt,()=>Axt],JSt=[9,V,B_t,0,()=>Dxt,()=>Oxt],YSt=[9,V,ivt,0,()=>jxt,()=>Mxt],XSt=[9,V,tvt,0,()=>Nxt,()=>Pxt],ZSt=[9,V,svt,0,()=>Fxt,()=>Ixt],QSt=[9,V,uvt,0,()=>Lxt,()=>Rxt],$St=[9,V,vvt,0,()=>zxt,()=>Bxt],eCt=[9,V,mvt,0,()=>Uxt,()=>Wxt],tCt=[9,V,hvt,0,()=>Vxt,()=>Hxt],nCt=[9,V,Cvt,0,()=>qxt,()=>Jxt],rCt=[9,V,wvt,0,()=>Gxt,()=>Kxt],iCt=[9,V,jvt,0,()=>Yxt,()=>Xxt],aCt=[9,V,Nvt,0,()=>Zxt,()=>Qxt],oCt=[9,V,Mvt,0,()=>$xt,()=>eSt],sCt=[9,V,Bvt,0,()=>tSt,()=>nSt],cCt=[9,V,Rvt,0,()=>rSt,()=>iSt],lCt=[9,V,ryt,0,()=>oSt,()=>t0],uCt=[9,V,uyt,0,()=>sSt,()=>t0],dCt=[9,V,fyt,0,()=>cSt,()=>t0],fCt=[9,V,yyt,0,()=>lSt,()=>t0],pCt=[9,V,Syt,0,()=>uSt,()=>t0],mCt=[9,V,Myt,0,()=>mSt,()=>t0],hCt=e=>({apiVersion:`2010-05-08`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??ght,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??sht,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??lt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.iam`,errorTypeRegistries:Nbt,xmlNamespace:`https://iam.amazonaws.com/doc/2010-05-08/`,version:`2010-05-08`,serviceTarget:`AWSIdentityManagementV20100508`},serviceId:e?.serviceId??`IAM`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),gCt=e=>{let t=he(e),n=()=>t().then(a),r=hCt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:dht.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},_Ct=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},vCt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),yCt=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),_Ct(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),vCt(n))},bCt=class extends le{config;constructor(...[t]){let n=gCt(t||{});super(n),this.initConfig=n;let r=lht(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=yCt(cht(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:aht,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},xCt=async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()});function SCt(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`rds`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var CCt=e=>{let t=[];return e.operation,t.push(SCt(e)),t},wCt=e=>{let t=c(e);return Object.assign(t,{authSchemePreference:Ae(e.authSchemePreference??[])})},TCt=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,defaultSigningName:`rds`}),ECt={UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},DCt={name:`@aws-sdk/client-rds`,version:`3.1135.0`,description:`AWS SDK for JavaScript Rds Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-rds`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-rds`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/middleware-sdk-rds":`^3.972.59`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},c0=`ref`,l0=-1,u0=!0,d0=`isSet`,f0=`PartitionResult`,p0=`booleanEquals`,m0=`getAttr`,h0={[c0]:`Endpoint`},g0={[c0]:f0},_0={},v0=[{[c0]:`Region`}],y0={conditions:[[d0,[h0]],[d0,v0],[`aws.partition`,v0,f0],[p0,[{[c0]:`UseFIPS`},u0]],[p0,[{[c0]:`UseDualStack`},u0]],[p0,[{fn:m0,argv:[g0,`supportsDualStack`]},u0]],[p0,[{fn:m0,argv:[g0,`supportsFIPS`]},u0]],[`stringEquals`,[{fn:m0,argv:[g0,`name`]},`aws-us-gov`]]],results:[[l0],[l0,`Invalid Configuration: FIPS and custom endpoint are not supported`],[l0,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[h0,_0],[`https://rds-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,_0],[l0,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://rds.{Region}.amazonaws.com`,_0],[`https://rds-fips.{Region}.{PartitionResult#dnsSuffix}`,_0],[l0,`FIPS is enabled but this partition does not support FIPS`],[`https://rds.{Region}.{PartitionResult#dualStackDnsSuffix}`,_0],[l0,`DualStack is enabled but this partition does not support DualStack`],[`https://rds.{Region}.{PartitionResult#dnsSuffix}`,_0],[l0,`Invalid Configuration: Missing Region`]]},OCt=2,kCt=new Int32Array([-1,1,-1,0,13,3,1,4,100000012,2,5,100000012,3,8,6,4,7,100000011,5,100000009,100000010,4,11,9,6,10,100000008,7,100000006,100000007,5,12,100000005,6,100000004,100000005,3,100000001,14,4,100000002,100000003]),ACt=xe.from(kCt,OCt,y0.conditions,y0.results),jCt=new ct({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`]}),MCt=(e,t={})=>jCt.get(e,()=>ut(ACt,{endpointParams:e,logger:t.logger}));Le.aws=oe;var U=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},NCt=class e extends U{name=`DBClusterNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PCt=class e extends U{name=`DBClusterRoleAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FCt=class e extends U{name=`DBClusterRoleQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ICt=class e extends U{name=`InvalidDBClusterStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LCt=class e extends U{name=`DBInstanceNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RCt=class e extends U{name=`DBInstanceRoleAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zCt=class e extends U{name=`DBInstanceRoleQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BCt=class e extends U{name=`InvalidDBInstanceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBInstanceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VCt=class e extends U{name=`SourceNotFoundFault`;$fault=`client`;constructor(t){super({name:`SourceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HCt=class e extends U{name=`SubscriptionNotFoundFault`;$fault=`client`;constructor(t){super({name:`SubscriptionNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},UCt=class e extends U{name=`BlueGreenDeploymentNotFoundFault`;$fault=`client`;constructor(t){super({name:`BlueGreenDeploymentNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},WCt=class e extends U{name=`DBProxyEndpointNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},GCt=class e extends U{name=`DBProxyNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},KCt=class e extends U{name=`DBProxyTargetGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qCt=class e extends U{name=`DBShardGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBShardGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},JCt=class e extends U{name=`DBSnapshotNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},YCt=class e extends U{name=`DBSnapshotTenantDatabaseNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotTenantDatabaseNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},XCt=class e extends U{name=`IntegrationNotFoundFault`;$fault=`client`;constructor(t){super({name:`IntegrationNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ZCt=class e extends U{name=`InvalidDBClusterEndpointStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterEndpointStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QCt=class e extends U{name=`TenantDatabaseNotFoundFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Ct=class e extends U{name=`ResourceNotFoundFault`;$fault=`client`;constructor(t){super({name:`ResourceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ewt=class e extends U{name=`AuthorizationAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`AuthorizationAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},twt=class e extends U{name=`AuthorizationQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`AuthorizationQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nwt=class e extends U{name=`DBSecurityGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rwt=class e extends U{name=`InvalidDBSecurityGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSecurityGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iwt=class e extends U{name=`ExportTaskNotFoundFault`;$fault=`client`;constructor(t){super({name:`ExportTaskNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},awt=class e extends U{name=`InvalidExportTaskStateFault`;$fault=`client`;constructor(t){super({name:`InvalidExportTaskStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},owt=class e extends U{name=`DBParameterGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},swt=class e extends U{name=`DBParameterGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cwt=class e extends U{name=`DBParameterGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBParameterGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lwt=class e extends U{name=`DBClusterSnapshotAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterSnapshotAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uwt=class e extends U{name=`DBClusterSnapshotNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterSnapshotNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dwt=class e extends U{name=`InvalidDBClusterSnapshotStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterSnapshotStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fwt=class e extends U{name=`KMSKeyNotAccessibleFault`;$fault=`client`;constructor(t){super({name:`KMSKeyNotAccessibleFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pwt=class e extends U{name=`SnapshotQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`SnapshotQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mwt=class e extends U{name=`CustomAvailabilityZoneNotFoundFault`;$fault=`client`;constructor(t){super({name:`CustomAvailabilityZoneNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hwt=class e extends U{name=`DBSnapshotAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSnapshotAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gwt=class e extends U{name=`InvalidDBSnapshotStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSnapshotStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_wt=class e extends U{name=`OptionGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`OptionGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vwt=class e extends U{name=`OptionGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`OptionGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ywt=class e extends U{name=`OptionGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`OptionGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bwt=class e extends U{name=`BlueGreenDeploymentAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`BlueGreenDeploymentAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xwt=class e extends U{name=`DBClusterParameterGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterParameterGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Swt=class e extends U{name=`DBClusterQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Cwt=class e extends U{name=`InstanceQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`InstanceQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wwt=class e extends U{name=`SourceClusterNotSupportedFault`;$fault=`client`;constructor(t){super({name:`SourceClusterNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Twt=class e extends U{name=`SourceDatabaseNotSupportedFault`;$fault=`client`;constructor(t){super({name:`SourceDatabaseNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ewt=class e extends U{name=`StorageQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`StorageQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Dwt=class e extends U{name=`CreateCustomDBEngineVersionFault`;$fault=`client`;constructor(t){super({name:`CreateCustomDBEngineVersionFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Owt=class e extends U{name=`CustomDBEngineVersionAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kwt=class e extends U{name=`CustomDBEngineVersionNotFoundFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Awt=class e extends U{name=`CustomDBEngineVersionQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`CustomDBEngineVersionQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jwt=class e extends U{name=`Ec2ImagePropertiesNotSupportedFault`;$fault=`client`;constructor(t){super({name:`Ec2ImagePropertiesNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Mwt=class e extends U{name=`InvalidCustomDBEngineVersionStateFault`;$fault=`client`;constructor(t){super({name:`InvalidCustomDBEngineVersionStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Nwt=class e extends U{name=`DBClusterAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Pwt=class e extends U{name=`DBSubnetGroupDoesNotCoverEnoughAZs`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupDoesNotCoverEnoughAZs`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Fwt=class e extends U{name=`DBSubnetGroupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Iwt=class e extends U{name=`DomainNotFoundFault`;$fault=`client`;constructor(t){super({name:`DomainNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Lwt=class e extends U{name=`GlobalClusterNotFoundFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Rwt=class e extends U{name=`InsufficientDBInstanceCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientDBInstanceCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zwt=class e extends U{name=`InsufficientStorageClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientStorageClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Bwt=class e extends U{name=`InvalidDBSubnetGroupFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetGroupFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Vwt=class e extends U{name=`InvalidDBSubnetGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Hwt=class e extends U{name=`InvalidGlobalClusterStateFault`;$fault=`client`;constructor(t){super({name:`InvalidGlobalClusterStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Uwt=class e extends U{name=`InvalidSubnet`;$fault=`client`;constructor(t){super({name:`InvalidSubnet`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Wwt=class e extends U{name=`InvalidVPCNetworkStateFault`;$fault=`client`;constructor(t){super({name:`InvalidVPCNetworkStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Gwt=class e extends U{name=`NetworkTypeNotSupported`;$fault=`client`;constructor(t){super({name:`NetworkTypeNotSupported`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Kwt=class e extends U{name=`StorageTypeNotSupportedFault`;$fault=`client`;constructor(t){super({name:`StorageTypeNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qwt=class e extends U{name=`VpcEncryptionControlViolationException`;$fault=`client`;constructor(t){super({name:`VpcEncryptionControlViolationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Jwt=class e extends U{name=`DBClusterEndpointAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Ywt=class e extends U{name=`DBClusterEndpointQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Xwt=class e extends U{name=`AuthorizationNotFoundFault`;$fault=`client`;constructor(t){super({name:`AuthorizationNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Zwt=class e extends U{name=`BackupPolicyNotFoundFault`;$fault=`client`;constructor(t){super({name:`BackupPolicyNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},Qwt=class e extends U{name=`CertificateNotFoundFault`;$fault=`client`;constructor(t){super({name:`CertificateNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$wt=class e extends U{name=`DBInstanceAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},eTt=class e extends U{name=`ProvisionedIopsNotAvailableInAZFault`;$fault=`client`;constructor(t){super({name:`ProvisionedIopsNotAvailableInAZFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tTt=class e extends U{name=`TenantDatabaseQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nTt=class e extends U{name=`DBSubnetGroupNotAllowedFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupNotAllowedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rTt=class e extends U{name=`DBProxyAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBProxyAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iTt=class e extends U{name=`DBProxyQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBProxyQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aTt=class e extends U{name=`DBProxyEndpointAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oTt=class e extends U{name=`DBProxyEndpointQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBProxyEndpointQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sTt=class e extends U{name=`InvalidDBProxyStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBProxyStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cTt=class e extends U{name=`DBSecurityGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lTt=class e extends U{name=`DBSecurityGroupNotSupportedFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupNotSupportedFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uTt=class e extends U{name=`DBSecurityGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSecurityGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dTt=class e extends U{name=`DBShardGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBShardGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fTt=class e extends U{name=`MaxDBShardGroupLimitReached`;$fault=`client`;constructor(t){super({name:`MaxDBShardGroupLimitReached`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pTt=class e extends U{name=`UnsupportedDBEngineVersionFault`;$fault=`client`;constructor(t){super({name:`UnsupportedDBEngineVersionFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mTt=class e extends U{name=`DBSubnetGroupAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hTt=class e extends U{name=`DBSubnetGroupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSubnetGroupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gTt=class e extends U{name=`DBSubnetQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBSubnetQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_Tt=class e extends U{name=`EventSubscriptionQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`EventSubscriptionQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},vTt=class e extends U{name=`SNSInvalidTopicFault`;$fault=`client`;constructor(t){super({name:`SNSInvalidTopicFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},yTt=class e extends U{name=`SNSNoAuthorizationFault`;$fault=`client`;constructor(t){super({name:`SNSNoAuthorizationFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},bTt=class e extends U{name=`SNSTopicArnNotFoundFault`;$fault=`client`;constructor(t){super({name:`SNSTopicArnNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},xTt=class e extends U{name=`SubscriptionAlreadyExistFault`;$fault=`client`;constructor(t){super({name:`SubscriptionAlreadyExistFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},STt=class e extends U{name=`SubscriptionCategoryNotFoundFault`;$fault=`client`;constructor(t){super({name:`SubscriptionCategoryNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CTt=class e extends U{name=`GlobalClusterAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wTt=class e extends U{name=`GlobalClusterQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`GlobalClusterQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TTt=class e extends U{name=`InvalidDBShardGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBShardGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ETt=class e extends U{name=`IntegrationAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`IntegrationAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DTt=class e extends U{name=`IntegrationConflictOperationFault`;$fault=`client`;constructor(t){super({name:`IntegrationConflictOperationFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OTt=class e extends U{name=`IntegrationQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`IntegrationQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kTt=class e extends U{name=`TenantDatabaseAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`TenantDatabaseAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ATt=class e extends U{name=`InvalidBlueGreenDeploymentStateFault`;$fault=`client`;constructor(t){super({name:`InvalidBlueGreenDeploymentStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jTt=class e extends U{name=`DBClusterAutomatedBackupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBClusterAutomatedBackupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MTt=class e extends U{name=`DBClusterAutomatedBackupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterAutomatedBackupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NTt=class e extends U{name=`InvalidDBClusterAutomatedBackupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterAutomatedBackupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PTt=class e extends U{name=`DBClusterEndpointNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterEndpointNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FTt=class e extends U{name=`InvalidDBParameterGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBParameterGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ITt=class e extends U{name=`DBInstanceAutomatedBackupQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAutomatedBackupQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LTt=class e extends U{name=`DBInstanceAutomatedBackupNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceAutomatedBackupNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RTt=class e extends U{name=`InvalidDBInstanceAutomatedBackupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBInstanceAutomatedBackupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zTt=class e extends U{name=`InvalidDBProxyEndpointStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBProxyEndpointStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BTt=class e extends U{name=`InvalidDBSubnetStateFault`;$fault=`client`;constructor(t){super({name:`InvalidDBSubnetStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VTt=class e extends U{name=`InvalidEventSubscriptionStateFault`;$fault=`client`;constructor(t){super({name:`InvalidEventSubscriptionStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HTt=class e extends U{name=`InvalidIntegrationStateFault`;$fault=`client`;constructor(t){super({name:`InvalidIntegrationStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},UTt=class e extends U{name=`InvalidOptionGroupStateFault`;$fault=`client`;constructor(t){super({name:`InvalidOptionGroupStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},WTt=class e extends U{name=`DBProxyTargetNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},GTt=class e extends U{name=`DBClusterBacktrackNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterBacktrackNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},KTt=class e extends U{name=`DBInstanceNotReadyFault`;$fault=`client`;constructor(t){super({name:`DBInstanceNotReadyFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},qTt=class e extends U{name=`ReservedDBInstanceNotFoundFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},JTt=class e extends U{name=`ReservedDBInstancesOfferingNotFoundFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstancesOfferingNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},YTt=class e extends U{name=`InvalidResourceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidResourceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},XTt=class e extends U{name=`DBLogFileNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBLogFileNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ZTt=class e extends U{name=`InvalidDBClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InvalidDBClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},QTt=class e extends U{name=`StorageTypeNotAvailableFault`;$fault=`client`;constructor(t){super({name:`StorageTypeNotAvailableFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},$Tt=class e extends U{name=`SharedSnapshotQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`SharedSnapshotQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},eEt=class e extends U{name=`DBUpgradeDependencyFailureFault`;$fault=`client`;constructor(t){super({name:`DBUpgradeDependencyFailureFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tEt=class e extends U{name=`SubnetAlreadyInUse`;$fault=`client`;constructor(t){super({name:`SubnetAlreadyInUse`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nEt=class e extends U{name=`ReservedDBInstanceAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rEt=class e extends U{name=`ReservedDBInstanceQuotaExceededFault`;$fault=`client`;constructor(t){super({name:`ReservedDBInstanceQuotaExceededFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},iEt=class e extends U{name=`DBProxyTargetAlreadyRegisteredFault`;$fault=`client`;constructor(t){super({name:`DBProxyTargetAlreadyRegisteredFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},aEt=class e extends U{name=`InsufficientAvailableIPsInSubnetFault`;$fault=`client`;constructor(t){super({name:`InsufficientAvailableIPsInSubnetFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},oEt=class e extends U{name=`DBClusterRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBClusterRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},sEt=class e extends U{name=`DBInstanceRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`DBInstanceRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},cEt=class e extends U{name=`InvalidS3BucketFault`;$fault=`client`;constructor(t){super({name:`InvalidS3BucketFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lEt=class e extends U{name=`InsufficientDBClusterCapacityFault`;$fault=`client`;constructor(t){super({name:`InsufficientDBClusterCapacityFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},uEt=class e extends U{name=`InvalidRestoreFault`;$fault=`client`;constructor(t){super({name:`InvalidRestoreFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dEt=class e extends U{name=`PointInTimeRestoreNotEnabledFault`;$fault=`client`;constructor(t){super({name:`PointInTimeRestoreNotEnabledFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},fEt=class e extends U{name=`ExportTaskAlreadyExistsFault`;$fault=`client`;constructor(t){super({name:`ExportTaskAlreadyExistsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},pEt=class e extends U{name=`IamRoleMissingPermissionsFault`;$fault=`client`;constructor(t){super({name:`IamRoleMissingPermissionsFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},mEt=class e extends U{name=`IamRoleNotFoundFault`;$fault=`client`;constructor(t){super({name:`IamRoleNotFoundFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},hEt=class e extends U{name=`InvalidExportOnlyFault`;$fault=`client`;constructor(t){super({name:`InvalidExportOnlyFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},gEt=class e extends U{name=`InvalidExportSourceStateFault`;$fault=`client`;constructor(t){super({name:`InvalidExportSourceStateFault`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},_Et=`AuthorizationAlreadyExistsFault`,b0=`AvailableAdditionalStorageVolumesOption`,vEt=`AvailableAdditionalStorageVolumesOptionList`,yEt=`AvailableAdditionalStorageVolumesOptions`,x0=`AwsBackupRecoveryPointArn`,bEt=`ApplyImmediately`,S0=`AutomationMode`,C0=`AutoMinorVersionUpgrade`,xEt=`AllowMajorVersionUpgrade`,SEt=`ApplyMethod`,CEt=`AuthorizationNotFoundFault`,w0=`AvailableProcessorFeature`,wEt=`AvailableProcessorFeatureList`,TEt=`AvailableProcessorFeatures`,EEt=`AuthorizationQuotaExceededFault`,DEt=`AssociatedRoles`,OEt=`AutomaticRestartTime`,T0=`AllocatedStorage`,kEt=`AuthSecretArn`,AEt=`ActivityStreamEngineNativeAuditFieldsIncluded`,jEt=`ActivityStreamKmsKeyId`,MEt=`ActivityStreamKinesisStreamName`,NEt=`ActivityStreamMode`,PEt=`ActivityStreamPolicyStatus`,FEt=`ActivityStreamStatus`,IEt=`AdditionalStorageVolume`,LEt=`AdditionalStorageVolumesList`,REt=`AdditionalStorageVolumeOutput`,zEt=`AdditionalStorageVolumesOutputList`,E0=`AdditionalStorageVolumes`,BEt=`ApplyType`,VEt=`AddTagsToResource`,HEt=`AddTagsToResourceMessage`,UEt=`AutoUpgrade`,D0=`AllowedValues`,O0=`AvailabilityZone`,k0=`AvailabilityZoneGroup`,WEt=`AvailabilityZoneList`,GEt=`AvailabilityZones`,KEt=`Address`,qEt=`Arn`,JEt=`BlueGreenDeploymentAlreadyExistsFault`,YEt=`BlueGreenDeploymentNotFoundFault`,XEt=`BackupPolicyNotFoundFault`,A0=`BackupRetentionPeriod`,j0=`BackupTarget`,M0=`CACertificateIdentifier`,ZEt=`CAIdentifier`,QEt=`CustomAvailabilityZoneNotFoundFault`,$Et=`CreateCustomDBEngineVersionFault`,N0=`CertificateDetails`,eDt=`CustomDBEngineVersionAlreadyExistsFault`,tDt=`CustomDBEngineVersionAMI`,nDt=`CustomDBEngineVersionManifest`,rDt=`CustomDBEngineVersionNotFoundFault`,iDt=`CustomDBEngineVersionQuotaExceededFault`,aDt=`CreateDBInstance`,oDt=`CreateDBInstanceMessage`,sDt=`CreateDBInstanceResult`,cDt=`CreateDBParameterGroupMessage`,lDt=`CreateDBParameterGroupResult`,uDt=`CreateDBParameterGroup`,dDt=`CreateDBSubnetGroupMessage`,fDt=`CreateDBSubnetGroupResult`,pDt=`CreateDBSubnetGroup`,mDt=`CreateDBSnapshotMessage`,hDt=`CreateDBSnapshotResult`,gDt=`CreateDBSnapshot`,P0=`CustomIamInstanceProfile`,F0=`CloudwatchLogsExportConfiguration`,_Dt=`CertificateNotFoundFault`,vDt=`CustomerOwnedIpEnabled`,yDt=`CertificateRotationRestart`,I0=`CharacterSet`,bDt=`CharacterSetDescription`,L0=`CharacterSetName`,xDt=`CreateTime`,R0=`CopyTagsToSnapshot`,z0=`Description`,SDt=`DeleteAutomatedBackups`,B0=`DomainAuthSecretArn`,CDt=`DBClusterAutomatedBackupNotFoundFault`,wDt=`DBClusterAutomatedBackupQuotaExceededFault`,TDt=`DBClusterAlreadyExistsFault`,EDt=`DBClusterBacktrackNotFoundFault`,DDt=`DBClusterEndpointAlreadyExistsFault`,ODt=`DBClusterEndpointNotFoundFault`,kDt=`DBClusterEndpointQuotaExceededFault`,V0=`DBClusterIdentifier`,ADt=`DBClusterNotFoundFault`,jDt=`DBClusterParameterGroupNotFoundFault`,MDt=`DBClusterQuotaExceededFault`,NDt=`DBClusterRoleAlreadyExistsFault`,PDt=`DBClusterRoleNotFoundFault`,FDt=`DBClusterRoleQuotaExceededFault`,IDt=`DBClusterSnapshotAlreadyExistsFault`,LDt=`DBClusterSnapshotIdentifier`,RDt=`DBClusterSnapshotNotFoundFault`,zDt=`DBEngineDescription`,BDt=`DBEngineMediaType`,H0=`DBEngineVersion`,VDt=`DBEngineVersionArn`,HDt=`DBEngineVersionDescription`,UDt=`DBEngineVersionList`,WDt=`DBEngineVersionMessage`,GDt=`DBEngineVersions`,U0=`DBInstance`,W0=`DBInstanceArn`,G0=`DBInstanceAutomatedBackup`,K0=`DBInstanceAutomatedBackupsArn`,KDt=`DBInstanceAutomatedBackupList`,qDt=`DBInstanceAutomatedBackupMessage`,JDt=`DBInstanceAutomatedBackupNotFoundFault`,YDt=`DBInstanceAutomatedBackupQuotaExceededFault`,q0=`DBInstanceAutomatedBackupsReplications`,XDt=`DBInstanceAutomatedBackupsReplicationList`,J0=`DBInstanceAutomatedBackupsReplication`,ZDt=`DBInstanceAutomatedBackups`,QDt=`DBInstanceAlreadyExistsFault`,Y0=`DBInstanceClass`,X0=`DBInstanceIdentifier`,$Dt=`DBInstanceList`,eOt=`DBInstanceMessage`,tOt=`DBInstanceNotFoundFault`,nOt=`DBInstanceNotReadyFault`,Z0=`DBInstanceRole`,rOt=`DBInstanceRoleAlreadyExistsFault`,iOt=`DBInstanceRoleNotFoundFault`,aOt=`DBInstanceRoleQuotaExceededFault`,oOt=`DBInstanceRoles`,sOt=`DBInstanceStatus`,Q0=`DBInstanceStatusInfo`,cOt=`DBInstanceStatusInfoList`,lOt=`DBInstances`,uOt=`DBLogFileNotFoundFault`,$0=`DBName`,dOt=`DBProxyAlreadyExistsFault`,fOt=`DBProxyEndpointAlreadyExistsFault`,pOt=`DBProxyEndpointNotFoundFault`,mOt=`DBProxyEndpointQuotaExceededFault`,e2=`DBParameterGroup`,hOt=`DBParameterGroupArn`,gOt=`DBParameterGroupAlreadyExistsFault`,_Ot=`DBParameterGroupDetails`,t2=`DBParameterGroupFamily`,vOt=`DBParameterGroupList`,yOt=`DBParameterGroupsMessage`,n2=`DBParameterGroupName`,bOt=`DBParameterGroupNotFoundFault`,xOt=`DBParameterGroupNameMessage`,SOt=`DBParameterGroupQuotaExceededFault`,COt=`DBParameterGroupStatus`,wOt=`DBParameterGroupStatusList`,r2=`DBParameterGroups`,TOt=`DBProxyNotFoundFault`,EOt=`DBPortNumber`,DOt=`DBProxyQuotaExceededFault`,OOt=`DBProxyTargetAlreadyRegisteredFault`,kOt=`DBProxyTargetGroupNotFoundFault`,AOt=`DBProxyTargetNotFoundFault`,i2=`DBSnapshot`,jOt=`DBSnapshotArn`,MOt=`DBSnapshotAlreadyExistsFault`,NOt=`DBSecurityGroup`,POt=`DBSecurityGroupAlreadyExistsFault`,FOt=`DBShardGroupAlreadyExistsFault`,IOt=`DBSubnetGroupAlreadyExistsFault`,LOt=`DBSubnetGroupArn`,ROt=`DBSubnetGroupDoesNotCoverEnoughAZs`,a2=`DBSubnetGroupDescription`,zOt=`DBSecurityGroupMembership`,BOt=`DBSecurityGroupMembershipList`,VOt=`DBSubnetGroupMessage`,o2=`DBSecurityGroupName`,HOt=`DBSubnetGroupNotAllowedFault`,UOt=`DBSecurityGroupNotFoundFault`,WOt=`DBShardGroupNotFoundFault`,GOt=`DBSubnetGroupNotFoundFault`,KOt=`DBSecurityGroupNameList`,qOt=`DBSecurityGroupNotSupportedFault`,s2=`DBSubnetGroupName`,JOt=`DBSecurityGroupQuotaExceededFault`,YOt=`DBSubnetGroupQuotaExceededFault`,c2=`DBSecurityGroups`,l2=`DBSubnetGroup`,u2=`DBSubnetGroups`,d2=`DBSystemId`,f2=`DBSnapshotIdentifier`,XOt=`DBSnapshotList`,ZOt=`DBSnapshotMessage`,QOt=`DBSnapshotNotFoundFault`,$Ot=`DBSubnetQuotaExceededFault`,ekt=`DBSnapshotTenantDatabaseNotFoundFault`,tkt=`DBSnapshots`,nkt=`DBUpgradeDependencyFailureFault`,rkt=`DefaultCharacterSet`,ikt=`DisableDomain`,akt=`DescribeDBEngineVersions`,okt=`DescribeDBEngineVersionsMessage`,skt=`DeleteDBInstance`,ckt=`DescribeDBInstanceAutomatedBackupsMessage`,lkt=`DescribeDBInstanceAutomatedBackups`,ukt=`DeleteDBInstanceMessage`,dkt=`DescribeDBInstancesMessage`,fkt=`DeleteDBInstanceResult`,pkt=`DescribeDBInstances`,mkt=`DeleteDBParameterGroup`,hkt=`DeleteDBParameterGroupMessage`,gkt=`DescribeDBParameterGroupsMessage`,_kt=`DescribeDBParameterGroups`,vkt=`DescribeDBParametersMessage`,ykt=`DescribeDBParameters`,bkt=`DeleteDBSnapshot`,xkt=`DeleteDBSubnetGroupMessage`,Skt=`DescribeDBSubnetGroupsMessage`,Ckt=`DeleteDBSubnetGroup`,wkt=`DescribeDBSubnetGroups`,Tkt=`DeleteDBSnapshotMessage`,Ekt=`DescribeDBSnapshotsMessage`,Dkt=`DeleteDBSnapshotResult`,Okt=`DescribeDBSnapshots`,p2=`DomainDnsIps`,kkt=`DescribeEvents`,Akt=`DescribeEventsMessage`,m2=`DomainFqdn`,jkt=`DnsIps`,h2=`DomainIAMRoleName`,Mkt=`DatabaseInstallationFiles`,Nkt=`DatabaseInstallationFilesS3BucketName`,Pkt=`DatabaseInstallationFilesS3Prefix`,g2=`DatabaseInsightsMode`,Fkt=`DbInstancePort`,Ikt=`DisableLogTypes`,_2=`DedicatedLogVolume`,Lkt=`DomainMemberships`,Rkt=`DomainMembershipList`,v2=`DomainMembership`,zkt=`DomainNotFoundFault`,y2=`DomainOu`,Bkt=`DescribeOrderableDBInstanceOptions`,Vkt=`DescribeOrderableDBInstanceOptionsMessage`,Hkt=`DefaultOnly`,b2=`DeletionProtection`,x2=`DbiResourceId`,Ukt=`DataType`,Wkt=`DefaultValue`,Gkt=`Date`,S2=`Domain`,Kkt=`Duration`,C2=`Engine`,w2=`EventCategories`,qkt=`EventCategoriesList`,T2=`EnableCloudwatchLogsExports`,Jkt=`EnabledCloudwatchLogsExports`,E2=`EnableCustomerOwnedIp`,Ykt=`EventCategory`,D2=`EnableIAMDatabaseAuthentication`,Xkt=`Ec2ImagePropertiesNotSupportedFault`,Zkt=`EventList`,O2=`EngineLifecycleSupport`,Qkt=`EnableLogTypes`,$kt=`ExportableLogTypes`,eAt=`EnhancedMonitoringResourceArn`,tAt=`EventsMessage`,k2=`EnablePerformanceInsights`,nAt=`EventSubscriptionQuotaExceededFault`,rAt=`ExportTaskAlreadyExistsFault`,iAt=`ExportTaskNotFoundFault`,aAt=`EarliestTime`,oAt=`EndTime`,A2=`EngineVersion`,j2=`Encrypted`,M2=`Endpoint`,N2=`Event`,sAt=`Events`,cAt=`FinalDBSnapshotIdentifier`,lAt=`ForceFailover`,uAt=`FilterList`,dAt=`FeatureName`,fAt=`FQDN`,pAt=`FailureReason`,mAt=`FullSnapshotSizeInBytes`,hAt=`FilterValueList`,P2=`Filters`,F2=`Filter`,gAt=`GlobalClusterAlreadyExistsFault`,_At=`GlobalClusterNotFoundFault`,vAt=`GlobalClusterQuotaExceededFault`,yAt=`HostedZoneId`,I2=`Iops`,bAt=`IncludeAll`,xAt=`IntegrationAlreadyExistsFault`,SAt=`InsufficientAvailableIPsInSubnetFault`,L2=`IAMDatabaseAuthenticationEnabled`,CAt=`IAMRoleName`,wAt=`InvalidBlueGreenDeploymentStateFault`,TAt=`InvalidCustomDBEngineVersionStateFault`,EAt=`IntegrationConflictOperationFault`,R2=`InstanceCreateTime`,DAt=`InvalidDBClusterAutomatedBackupStateFault`,OAt=`InsufficientDBClusterCapacityFault`,kAt=`InvalidDBClusterCapacityFault`,AAt=`InvalidDBClusterEndpointStateFault`,jAt=`InvalidDBClusterStateFault`,MAt=`InvalidDBClusterSnapshotStateFault`,NAt=`InvalidDBInstanceAutomatedBackupStateFault`,PAt=`InsufficientDBInstanceCapacityFault`,FAt=`InvalidDBInstanceStateFault`,IAt=`InvalidDBProxyEndpointStateFault`,LAt=`InvalidDBParameterGroupStateFault`,RAt=`InvalidDBProxyStateFault`,zAt=`InvalidDBSubnetGroupFault`,BAt=`InvalidDBSecurityGroupStateFault`,VAt=`InvalidDBShardGroupStateFault`,HAt=`InvalidDBSubnetGroupStateFault`,UAt=`InvalidDBSnapshotStateFault`,WAt=`InvalidDBSubnetStateFault`,GAt=`InvalidExportOnlyFault`,KAt=`InvalidEventSubscriptionStateFault`,qAt=`InvalidExportSourceStateFault`,JAt=`InvalidExportTaskStateFault`,YAt=`InvalidGlobalClusterStateFault`,XAt=`ImageId`,ZAt=`InvalidIntegrationStateFault`,QAt=`IsModifiable`,$At=`IsMajorVersionUpgrade`,ejt=`IntegrationNotFoundFault`,tjt=`InvalidOptionGroupStateFault`,z2=`IOPS`,njt=`IncludePublic`,rjt=`InstanceQuotaExceededFault`,ijt=`IntegrationQuotaExceededFault`,ajt=`InvalidRestoreFault`,ojt=`IamRoleMissingPermissionsFault`,sjt=`IamRoleNotFoundFault`,cjt=`InvalidResourceStateFault`,ljt=`InvalidSubnet`,ujt=`InvalidS3BucketFault`,djt=`InsufficientStorageClusterCapacityFault`,fjt=`IsStorageConfigUpgradeAvailable`,pjt=`IncludeShared`,mjt=`InvalidVPCNetworkStateFault`,hjt=`Image`,gjt=`Key`,B2=`KmsKeyId`,_jt=`KMSKeyId`,vjt=`KMSKeyNotAccessibleFault`,yjt=`ListenerEndpoint`,V2=`LicenseModel`,bjt=`LatestRestorableTime`,xjt=`ListSupportedCharacterSets`,Sjt=`ListSupportedTimezones`,Cjt=`LatestTime`,wjt=`ListTagsForResource`,Tjt=`ListTagsForResourceMessage`,Ejt=`LogTypesToDisable`,Djt=`LogTypesToEnable`,H2=`MaxAllocatedStorage`,Ojt=`ModifyAdditionalStorageVolume`,kjt=`ModifyAdditionalStorageVolumesList`,U2=`MultiAZ`,Ajt=`MultiAZCapable`,jjt=`MinCapacity`,Mjt=`MaxCapacity`,Njt=`ModifyDBInstance`,Pjt=`ModifyDBInstanceMessage`,Fjt=`ModifyDBInstanceResult`,Ijt=`ModifyDBParameterGroup`,Ljt=`ModifyDBParameterGroupMessage`,Rjt=`MaxDBShardGroupLimitReached`,zjt=`MajorEngineVersion`,Bjt=`MinimumEngineVersion`,Vjt=`MinIops`,Hjt=`MinIopsPerDbInstance`,Ujt=`MaxIopsPerDbInstance`,W2=`MinIopsPerGib`,G2=`MaxIopsPerGib`,Wjt=`MaxIops`,K2=`MonitoringInterval`,q2=`ManageMasterUserPassword`,J2=`MaxRecords`,Y2=`MonitoringRoleArn`,X2=`MinStorageSize`,Z2=`MaxStorageSize`,Gjt=`MinStorageThroughput`,Kjt=`MinStorageThroughputPerDbInstance`,qjt=`MaxStorageThroughputPerDbInstance`,Jjt=`MinStorageThroughputPerIops`,Yjt=`MaxStorageThroughputPerIops`,Xjt=`MaxStorageThroughput`,Q2=`MultiTenant`,$2=`MasterUsername`,e4=`MasterUserAuthenticationType`,t4=`MasterUserPassword`,n4=`MasterUserSecret`,r4=`MasterUserSecretKmsKeyId`,i4=`Marker`,a4=`Message`,o4=`Name`,s4=`NcharCharacterSetName`,Zjt=`NewDBInstanceIdentifier`,c4=`NetworkType`,Qjt=`NetworkTypeNotSupported`,$jt=`Normal`,eMt=`OutpostCapable`,l4=`OrderableDBInstanceOption`,tMt=`OrderableDBInstanceOptionsList`,nMt=`OrderableDBInstanceOptionsMessage`,rMt=`OrderableDBInstanceOptions`,iMt=`OptionGroupAlreadyExistsFault`,aMt=`OptionGroupMemberships`,oMt=`OptionGroupMembershipList`,u4=`OptionGroupMembership`,d4=`OptionGroupName`,sMt=`OptionGroupNotFoundFault`,cMt=`OptionGroupQuotaExceededFault`,lMt=`OriginalSnapshotCreateTime`,uMt=`OU`,dMt=`Outpost`,f4=`Port`,p4=`PubliclyAccessible`,fMt=`ParameterApplyStatus`,m4=`PreferredBackupWindow`,h4=`PendingCloudwatchLogsExports`,g4=`ProcessorFeatures`,pMt=`ProcessorFeatureList`,_4=`ProcessorFeature`,mMt=`PerformanceInsightsEnabled`,v4=`PerformanceInsightsKMSKeyId`,hMt=`ProvisionedIopsNotAvailableInAZFault`,y4=`PerformanceInsightsRetentionPeriod`,gMt=`PointInTimeRestoreNotEnabledFault`,_Mt=`ParametersList`,b4=`PendingModifiedValues`,x4=`PreferredMaintenanceWindow`,vMt=`ParameterName`,S4=`PercentProgress`,C4=`PromotionTier`,yMt=`ParameterValue`,w4=`Parameters`,T4=`Parameter`,bMt=`Region`,xMt=`RoleArn`,SMt=`ReservedDBInstanceAlreadyExistsFault`,CMt=`RestoreDBInstanceFromDBSnapshot`,wMt=`RestoreDBInstanceFromDBSnapshotMessage`,TMt=`RestoreDBInstanceFromDBSnapshotResult`,EMt=`RebootDBInstanceMessage`,DMt=`ReservedDBInstanceNotFoundFault`,OMt=`ReservedDBInstancesOfferingNotFoundFault`,kMt=`ReservedDBInstanceQuotaExceededFault`,AMt=`RebootDBInstanceResult`,jMt=`RebootDBInstance`,MMt=`ResumeFullAutomationModeMinutes`,E4=`ResumeFullAutomationModeTime`,D4=`ReplicaMode`,NMt=`RotateMasterUserPassword`,O4=`ResourceName`,PMt=`ResourceNotFoundFault`,FMt=`ReadReplicaCapable`,IMt=`ReadReplicaDBClusterIdentifiers`,LMt=`ReadReplicaDBClusterIdentifierList`,RMt=`ReadReplicaDBClusterIdentifier`,zMt=`ReadReplicaDBInstanceIdentifiers`,BMt=`ReadReplicaDBInstanceIdentifierList`,VMt=`ReadReplicaDBInstanceIdentifier`,HMt=`ReadReplicaSourceDBClusterIdentifier`,UMt=`ReadReplicaSourceDBInstanceIdentifier`,WMt=`RemoveTagsFromResource`,GMt=`RemoveTagsFromResourceMessage`,KMt=`ResourceType`,k4=`RestoreWindow`,A4=`Source`,qMt=`SourceArn`,JMt=`SubscriptionAlreadyExistFault`,YMt=`SubnetAlreadyInUse`,XMt=`SupportedActivityStreamModes`,ZMt=`SupportsAdditionalStorageVolumes`,QMt=`SnapshotAvailabilityZone`,$Mt=`SecondaryAvailabilityZone`,eNt=`SubnetAvailabilityZone`,tNt=`SecretArn`,j4=`SupportsBabelfish`,nNt=`SupportedCACertificateIdentifiers`,rNt=`SubscriptionCategoryNotFoundFault`,iNt=`SourceClusterNotSupportedFault`,aNt=`SupportsCertificateRotationWithoutRestart`,oNt=`SupportedCharacterSets`,sNt=`SupportedCharacterSetsList`,cNt=`SnapshotCreateTime`,lNt=`SupportsClusters`,uNt=`StartDBInstance`,dNt=`StartDBInstanceMessage`,fNt=`StopDBInstanceMessage`,pNt=`StartDBInstanceResult`,mNt=`StopDBInstanceResult`,hNt=`StopDBInstance`,gNt=`SourceDBSnapshotIdentifier`,_Nt=`SupportsDedicatedLogVolume`,vNt=`SourceDatabaseNotSupportedFault`,yNt=`SnapshotDatabaseTime`,M4=`StorageEncrypted`,N4=`SupportedEngineModes`,bNt=`SupportsEnhancedMonitoring`,P4=`StorageEncryptionType`,xNt=`SetForDelete`,SNt=`SupportedFeatureNames`,CNt=`SkipFinalSnapshot`,F4=`SupportsGlobalDatabases`,wNt=`SubnetGroupStatus`,TNt=`SupportsHttpEndpoint`,I4=`SourceIdentifier`,ENt=`SupportsIAMDatabaseAuthentication`,DNt=`SubnetIdentifierList`,ONt=`StatusInfos`,L4=`SupportsIops`,kNt=`SubnetIds`,R4=`SubnetIdentifier`,z4=`SupportsIntegrations`,ANt=`SupportsKerberosAuthentication`,jNt=`SubnetList`,B4=`SupportsLimitlessDatabase`,MNt=`SupportsLogExportsToCloudwatchLogs`,V4=`SupportsLocalWriteForwarding`,NNt=`SupportedNcharCharacterSets`,PNt=`SourceNotFoundFault`,FNt=`SubscriptionNotFoundFault`,INt=`SNSInvalidTopicFault`,LNt=`SNSNoAuthorizationFault`,RNt=`SNSTopicArnNotFoundFault`,H4=`SupportedNetworkTypes`,zNt=`SubnetOutpost`,U4=`StorageOperationPercentProgress`,W4=`StorageOperationStatus`,BNt=`SupportsPerformanceInsights`,G4=`SupportsParallelQuery`,VNt=`SnapshotQuotaExceededFault`,HNt=`StorageQuotaExceededFault`,UNt=`SourceRegion`,WNt=`SupportsReadReplica`,GNt=`SensitiveString`,K4=`SupportsStorageAutoscaling`,KNt=`SupportsStorageEncryption`,qNt=`SharedSnapshotQuotaExceededFault`,q4=`SupportsStorageThroughput`,JNt=`SecretStatus`,YNt=`SubnetStatus`,J4=`StorageThroughput`,XNt=`SupportedTimezonesList`,ZNt=`StorageTypeNotAvailableFault`,QNt=`StorageTypeNotSupportedFault`,$Nt=`SnapshotTarget`,Y4=`SnapshotType`,X4=`SourceType`,Z4=`StorageType`,ePt=`StatusType`,tPt=`StartTime`,nPt=`SupportedTimezones`,Q4=`ServerlessV2FeaturesSupport`,$4=`StorageVolumeStatus`,e3=`Status`,rPt=`Subnets`,t3=`Subnet`,n3=`Tags`,r3=`TdeCredentialArn`,i3=`TdeCredentialPassword`,iPt=`TenantDatabaseAlreadyExistsFault`,aPt=`TenantDatabaseNotFoundFault`,oPt=`TenantDatabaseQuotaExceededFault`,sPt=`TagKeys`,a3=`TagList`,cPt=`TagListMessage`,lPt=`TimezoneName`,o3=`TagSpecifications`,uPt=`TagSpecificationList`,dPt=`TagSpecification`,s3=`Tag`,c3=`Timezone`,fPt=`UnsupportedDBEngineVersionFault`,l3=`UseDefaultProcessorFeatures`,pPt=`UpgradeRolloutOrder`,u3=`UpgradeTarget`,d3=`Value`,mPt=`VpcEncryptionControlViolationException`,f3=`VpcId`,p3=`VolumeName`,hPt=`VpcSecurityGroups`,m3=`VpcSecurityGroupIds`,gPt=`VpcSecurityGroupIdList`,h3=`VpcSecurityGroupId`,_Pt=`VpcSecurityGroupMembershipList`,g3=`VpcSecurityGroupMembership`,vPt=`ValidTill`,yPt=`ValidUpgradeTarget`,bPt=`ValidUpgradeTargetList`,xPt=`Values`,_3=`Vpc`,W=`awsQueryError`,G=`client`,K=`error`,q=`httpError`,SPt=`item`,J=`message`,v3=`smithy.ts.sdk.synthetic.com.amazonaws.rds`,y3=`xmlName`,Y=`com.amazonaws.rds`,b3=pt.for(v3),CPt=[-3,v3,`RDSServiceException`,0,[],[]];b3.registerError(CPt,U);var X=pt.for(Y),wPt=[-3,Y,_Et,{[W]:[`AuthorizationAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wPt,ewt);var TPt=[-3,Y,CEt,{[W]:[`AuthorizationNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(TPt,Xwt);var EPt=[-3,Y,EEt,{[W]:[`AuthorizationQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(EPt,twt);var DPt=[-3,Y,XEt,{[W]:[`BackupPolicyNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(DPt,Zwt);var OPt=[-3,Y,JEt,{[W]:[`BlueGreenDeploymentAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(OPt,bwt);var kPt=[-3,Y,YEt,{[W]:[`BlueGreenDeploymentNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(kPt,UCt);var APt=[-3,Y,_Dt,{[W]:[`CertificateNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(APt,Qwt);var jPt=[-3,Y,$Et,{[W]:[`CreateCustomDBEngineVersionFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jPt,Dwt);var MPt=[-3,Y,QEt,{[W]:[`CustomAvailabilityZoneNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(MPt,mwt);var NPt=[-3,Y,eDt,{[W]:[`CustomDBEngineVersionAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(NPt,Owt);var PPt=[-3,Y,rDt,{[W]:[`CustomDBEngineVersionNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(PPt,kwt);var FPt=[-3,Y,iDt,{[W]:[`CustomDBEngineVersionQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(FPt,Awt);var IPt=[-3,Y,TDt,{[W]:[`DBClusterAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(IPt,Nwt);var LPt=[-3,Y,CDt,{[W]:[`DBClusterAutomatedBackupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(LPt,MTt);var RPt=[-3,Y,wDt,{[W]:[`DBClusterAutomatedBackupQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(RPt,jTt);var zPt=[-3,Y,EDt,{[W]:[`DBClusterBacktrackNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(zPt,GTt);var BPt=[-3,Y,DDt,{[W]:[`DBClusterEndpointAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(BPt,Jwt);var VPt=[-3,Y,ODt,{[W]:[`DBClusterEndpointNotFoundFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(VPt,PTt);var HPt=[-3,Y,kDt,{[W]:[`DBClusterEndpointQuotaExceededFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(HPt,Ywt);var UPt=[-3,Y,ADt,{[W]:[`DBClusterNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(UPt,NCt);var WPt=[-3,Y,jDt,{[W]:[`DBClusterParameterGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(WPt,xwt);var GPt=[-3,Y,MDt,{[W]:[`DBClusterQuotaExceededFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(GPt,Swt);var KPt=[-3,Y,NDt,{[W]:[`DBClusterRoleAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(KPt,PCt);var qPt=[-3,Y,PDt,{[W]:[`DBClusterRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(qPt,oEt);var JPt=[-3,Y,FDt,{[W]:[`DBClusterRoleQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(JPt,FCt);var YPt=[-3,Y,IDt,{[W]:[`DBClusterSnapshotAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(YPt,lwt);var XPt=[-3,Y,RDt,{[W]:[`DBClusterSnapshotNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(XPt,uwt);var ZPt=[-3,Y,QDt,{[W]:[`DBInstanceAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(ZPt,$wt);var QPt=[-3,Y,JDt,{[W]:[`DBInstanceAutomatedBackupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(QPt,LTt);var $Pt=[-3,Y,YDt,{[W]:[`DBInstanceAutomatedBackupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError($Pt,ITt);var eFt=[-3,Y,tOt,{[W]:[`DBInstanceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(eFt,LCt);var tFt=[-3,Y,nOt,{[W]:[`DBInstanceNotReady`,400],[K]:G,[q]:400},[J],[0]];X.registerError(tFt,KTt);var nFt=[-3,Y,rOt,{[W]:[`DBInstanceRoleAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(nFt,RCt);var rFt=[-3,Y,iOt,{[W]:[`DBInstanceRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(rFt,sEt);var iFt=[-3,Y,aOt,{[W]:[`DBInstanceRoleQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(iFt,zCt);var aFt=[-3,Y,uOt,{[W]:[`DBLogFileNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(aFt,XTt);var oFt=[-3,Y,gOt,{[W]:[`DBParameterGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(oFt,owt);var sFt=[-3,Y,bOt,{[W]:[`DBParameterGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(sFt,swt);var cFt=[-3,Y,SOt,{[W]:[`DBParameterGroupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(cFt,cwt);var lFt=[-3,Y,dOt,{[W]:[`DBProxyAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(lFt,rTt);var uFt=[-3,Y,fOt,{[W]:[`DBProxyEndpointAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(uFt,aTt);var dFt=[-3,Y,pOt,{[W]:[`DBProxyEndpointNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(dFt,WCt);var fFt=[-3,Y,mOt,{[W]:[`DBProxyEndpointQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(fFt,oTt);var pFt=[-3,Y,TOt,{[W]:[`DBProxyNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(pFt,GCt);var mFt=[-3,Y,DOt,{[W]:[`DBProxyQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(mFt,iTt);var hFt=[-3,Y,OOt,{[W]:[`DBProxyTargetAlreadyRegisteredFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(hFt,iEt);var gFt=[-3,Y,kOt,{[W]:[`DBProxyTargetGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(gFt,KCt);var _Ft=[-3,Y,AOt,{[W]:[`DBProxyTargetNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(_Ft,WTt);var vFt=[-3,Y,POt,{[W]:[`DBSecurityGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(vFt,cTt);var yFt=[-3,Y,UOt,{[W]:[`DBSecurityGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(yFt,nwt);var bFt=[-3,Y,qOt,{[W]:[`DBSecurityGroupNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(bFt,lTt);var xFt=[-3,Y,JOt,{[W]:[`QuotaExceeded.DBSecurityGroup`,400],[K]:G,[q]:400},[J],[0]];X.registerError(xFt,uTt);var SFt=[-3,Y,FOt,{[W]:[`DBShardGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(SFt,dTt);var CFt=[-3,Y,WOt,{[W]:[`DBShardGroupNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(CFt,qCt);var wFt=[-3,Y,MOt,{[W]:[`DBSnapshotAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wFt,hwt);var TFt=[-3,Y,QOt,{[W]:[`DBSnapshotNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(TFt,JCt);var EFt=[-3,Y,ekt,{[W]:[`DBSnapshotTenantDatabaseNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(EFt,YCt);var DFt=[-3,Y,IOt,{[W]:[`DBSubnetGroupAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(DFt,mTt);var OFt=[-3,Y,ROt,{[W]:[`DBSubnetGroupDoesNotCoverEnoughAZs`,400],[K]:G,[q]:400},[J],[0]];X.registerError(OFt,Pwt);var kFt=[-3,Y,HOt,{[W]:[`DBSubnetGroupNotAllowedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(kFt,nTt);var AFt=[-3,Y,GOt,{[W]:[`DBSubnetGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(AFt,Fwt);var jFt=[-3,Y,YOt,{[W]:[`DBSubnetGroupQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jFt,hTt);var MFt=[-3,Y,$Ot,{[W]:[`DBSubnetQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(MFt,gTt);var NFt=[-3,Y,nkt,{[W]:[`DBUpgradeDependencyFailure`,400],[K]:G,[q]:400},[J],[0]];X.registerError(NFt,eEt);var PFt=[-3,Y,zkt,{[W]:[`DomainNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(PFt,Iwt);var FFt=[-3,Y,Xkt,{[W]:[`Ec2ImagePropertiesNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(FFt,jwt);var IFt=[-3,Y,nAt,{[W]:[`EventSubscriptionQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(IFt,_Tt);var LFt=[-3,Y,rAt,{[W]:[`ExportTaskAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(LFt,fEt);var RFt=[-3,Y,iAt,{[W]:[`ExportTaskNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(RFt,iwt);var zFt=[-3,Y,gAt,{[W]:[`GlobalClusterAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(zFt,CTt);var BFt=[-3,Y,_At,{[W]:[`GlobalClusterNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(BFt,Lwt);var VFt=[-3,Y,vAt,{[W]:[`GlobalClusterQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(VFt,wTt);var HFt=[-3,Y,ojt,{[W]:[`IamRoleMissingPermissions`,400],[K]:G,[q]:400},[J],[0]];X.registerError(HFt,pEt);var UFt=[-3,Y,sjt,{[W]:[`IamRoleNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(UFt,mEt);var WFt=[-3,Y,rjt,{[W]:[`InstanceQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(WFt,Cwt);var GFt=[-3,Y,SAt,{[W]:[`InsufficientAvailableIPsInSubnetFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(GFt,aEt);var KFt=[-3,Y,OAt,{[W]:[`InsufficientDBClusterCapacityFault`,403],[K]:G,[q]:403},[J],[0]];X.registerError(KFt,lEt);var qFt=[-3,Y,PAt,{[W]:[`InsufficientDBInstanceCapacity`,400],[K]:G,[q]:400},[J],[0]];X.registerError(qFt,Rwt);var JFt=[-3,Y,djt,{[W]:[`InsufficientStorageClusterCapacity`,400],[K]:G,[q]:400},[J],[0]];X.registerError(JFt,zwt);var YFt=[-3,Y,xAt,{[W]:[`IntegrationAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(YFt,ETt);var XFt=[-3,Y,EAt,{[W]:[`IntegrationConflictOperationFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(XFt,DTt);var ZFt=[-3,Y,ejt,{[W]:[`IntegrationNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(ZFt,XCt);var QFt=[-3,Y,ijt,{[W]:[`IntegrationQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(QFt,OTt);var $Ft=[-3,Y,wAt,{[W]:[`InvalidBlueGreenDeploymentStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError($Ft,ATt);var eIt=[-3,Y,TAt,{[W]:[`InvalidCustomDBEngineVersionStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(eIt,Mwt);var tIt=[-3,Y,DAt,{[W]:[`InvalidDBClusterAutomatedBackupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(tIt,NTt);var nIt=[-3,Y,kAt,{[W]:[`InvalidDBClusterCapacityFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(nIt,ZTt);var rIt=[-3,Y,AAt,{[W]:[`InvalidDBClusterEndpointStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(rIt,ZCt);var iIt=[-3,Y,MAt,{[W]:[`InvalidDBClusterSnapshotStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(iIt,dwt);var aIt=[-3,Y,jAt,{[W]:[`InvalidDBClusterStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(aIt,ICt);var oIt=[-3,Y,NAt,{[W]:[`InvalidDBInstanceAutomatedBackupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(oIt,RTt);var sIt=[-3,Y,FAt,{[W]:[`InvalidDBInstanceState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(sIt,BCt);var cIt=[-3,Y,LAt,{[W]:[`InvalidDBParameterGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(cIt,FTt);var lIt=[-3,Y,IAt,{[W]:[`InvalidDBProxyEndpointStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(lIt,zTt);var uIt=[-3,Y,RAt,{[W]:[`InvalidDBProxyStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(uIt,sTt);var dIt=[-3,Y,BAt,{[W]:[`InvalidDBSecurityGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(dIt,rwt);var fIt=[-3,Y,VAt,{[W]:[`InvalidDBShardGroupState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(fIt,TTt);var pIt=[-3,Y,UAt,{[W]:[`InvalidDBSnapshotState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(pIt,gwt);var mIt=[-3,Y,zAt,{[W]:[`InvalidDBSubnetGroupFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(mIt,Bwt);var hIt=[-3,Y,HAt,{[W]:[`InvalidDBSubnetGroupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(hIt,Vwt);var gIt=[-3,Y,WAt,{[W]:[`InvalidDBSubnetStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(gIt,BTt);var _It=[-3,Y,KAt,{[W]:[`InvalidEventSubscriptionState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(_It,VTt);var vIt=[-3,Y,GAt,{[W]:[`InvalidExportOnly`,400],[K]:G,[q]:400},[J],[0]];X.registerError(vIt,hEt);var yIt=[-3,Y,qAt,{[W]:[`InvalidExportSourceState`,400],[K]:G,[q]:400},[J],[0]];X.registerError(yIt,gEt);var bIt=[-3,Y,JAt,{[W]:[`InvalidExportTaskStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(bIt,awt);var xIt=[-3,Y,YAt,{[W]:[`InvalidGlobalClusterStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(xIt,Hwt);var SIt=[-3,Y,ZAt,{[W]:[`InvalidIntegrationStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(SIt,HTt);var CIt=[-3,Y,tjt,{[W]:[`InvalidOptionGroupStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(CIt,UTt);var wIt=[-3,Y,cjt,{[W]:[`InvalidResourceStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(wIt,YTt);var TIt=[-3,Y,ajt,{[W]:[`InvalidRestoreFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(TIt,uEt);var EIt=[-3,Y,ujt,{[W]:[`InvalidS3BucketFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(EIt,cEt);var DIt=[-3,Y,ljt,{[W]:[`InvalidSubnet`,400],[K]:G,[q]:400},[J],[0]];X.registerError(DIt,Uwt);var OIt=[-3,Y,mjt,{[W]:[`InvalidVPCNetworkStateFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(OIt,Wwt);var kIt=[-3,Y,vjt,{[W]:[`KMSKeyNotAccessibleFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(kIt,fwt);var AIt=[-3,Y,Rjt,{[W]:[`MaxDBShardGroupLimitReached`,400],[K]:G,[q]:400},[J],[0]];X.registerError(AIt,fTt);var jIt=[-3,Y,Qjt,{[W]:[`NetworkTypeNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(jIt,Gwt);var MIt=[-3,Y,iMt,{[W]:[`OptionGroupAlreadyExistsFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(MIt,_wt);var NIt=[-3,Y,sMt,{[W]:[`OptionGroupNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(NIt,vwt);var PIt=[-3,Y,cMt,{[W]:[`OptionGroupQuotaExceededFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(PIt,ywt);var FIt=[-3,Y,gMt,{[W]:[`PointInTimeRestoreNotEnabled`,400],[K]:G,[q]:400},[J],[0]];X.registerError(FIt,dEt);var IIt=[-3,Y,hMt,{[W]:[`ProvisionedIopsNotAvailableInAZFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(IIt,eTt);var LIt=[-3,Y,SMt,{[W]:[`ReservedDBInstanceAlreadyExists`,404],[K]:G,[q]:404},[J],[0]];X.registerError(LIt,nEt);var RIt=[-3,Y,DMt,{[W]:[`ReservedDBInstanceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(RIt,qTt);var zIt=[-3,Y,kMt,{[W]:[`ReservedDBInstanceQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(zIt,rEt);var BIt=[-3,Y,OMt,{[W]:[`ReservedDBInstancesOfferingNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(BIt,JTt);var VIt=[-3,Y,PMt,{[W]:[`ResourceNotFoundFault`,404],[K]:G,[q]:404},[J],[0]];X.registerError(VIt,$Ct);var HIt=[-3,Y,qNt,{[W]:[`SharedSnapshotQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(HIt,$Tt);var UIt=[-3,Y,VNt,{[W]:[`SnapshotQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(UIt,pwt);var WIt=[-3,Y,INt,{[W]:[`SNSInvalidTopic`,400],[K]:G,[q]:400},[J],[0]];X.registerError(WIt,vTt);var GIt=[-3,Y,LNt,{[W]:[`SNSNoAuthorization`,400],[K]:G,[q]:400},[J],[0]];X.registerError(GIt,yTt);var KIt=[-3,Y,RNt,{[W]:[`SNSTopicArnNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(KIt,bTt);var qIt=[-3,Y,iNt,{[W]:[`SourceClusterNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(qIt,wwt);var JIt=[-3,Y,vNt,{[W]:[`SourceDatabaseNotSupportedFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(JIt,Twt);var YIt=[-3,Y,PNt,{[W]:[`SourceNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(YIt,VCt);var XIt=[-3,Y,HNt,{[W]:[`StorageQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(XIt,Ewt);var ZIt=[-3,Y,ZNt,{[W]:[`StorageTypeNotAvailableFault`,400],[K]:G,[q]:400},[J],[0]];X.registerError(ZIt,QTt);var QIt=[-3,Y,QNt,{[W]:[`StorageTypeNotSupported`,400],[K]:G,[q]:400},[J],[0]];X.registerError(QIt,Kwt);var $It=[-3,Y,YMt,{[W]:[`SubnetAlreadyInUse`,400],[K]:G,[q]:400},[J],[0]];X.registerError($It,tEt);var eLt=[-3,Y,JMt,{[W]:[`SubscriptionAlreadyExist`,400],[K]:G,[q]:400},[J],[0]];X.registerError(eLt,xTt);var tLt=[-3,Y,rNt,{[W]:[`SubscriptionCategoryNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(tLt,STt);var nLt=[-3,Y,FNt,{[W]:[`SubscriptionNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(nLt,HCt);var rLt=[-3,Y,iPt,{[W]:[`TenantDatabaseAlreadyExists`,400],[K]:G,[q]:400},[J],[0]];X.registerError(rLt,kTt);var iLt=[-3,Y,aPt,{[W]:[`TenantDatabaseNotFound`,404],[K]:G,[q]:404},[J],[0]];X.registerError(iLt,QCt);var aLt=[-3,Y,oPt,{[W]:[`TenantDatabaseQuotaExceeded`,400],[K]:G,[q]:400},[J],[0]];X.registerError(aLt,tTt);var oLt=[-3,Y,fPt,{[W]:[`UnsupportedDBEngineVersion`,400],[K]:G,[q]:400},[J],[0]];X.registerError(oLt,pTt);var sLt=[-3,Y,mPt,{[W]:[`VpcEncryptionControlViolationException`,400],[K]:G,[q]:400},[J],[0]];X.registerError(sLt,qwt);var cLt=[b3,X],x3=[0,Y,GNt,8,0],lLt=[3,Y,IEt,0,[p3,T0,z2,H2,J4,Z4],[0,1,1,1,1,0],1],uLt=[3,Y,REt,0,[p3,$4,W4,U4,T0,z2,H2,J4,Z4],[0,0,0,1,1,1,1,1,0]],dLt=[3,Y,HEt,0,[O4,n3],[0,[()=>R3,0]],2],S3=[3,Y,O0,0,[o4],[0]],fLt=[3,Y,b0,0,[K4,q4,L4,Z4,X2,Z2,Vjt,Wjt,W2,G2,Gjt,Xjt],[2,2,2,0,1,1,1,1,1,1,1,1]],pLt=[3,Y,w0,0,[o4,Wkt,D0],[0,0,0]],mLt=[3,Y,N0,0,[ZEt,vPt],[0,4]],C3=[3,Y,I0,0,[L0,bDt],[0,0]],hLt=[3,Y,F0,0,[Qkt,Ikt],[64,64]],gLt=[3,Y,oDt,0,[X0,Y0,C2,$0,T0,$2,t4,c2,m3,O0,s2,x4,n2,A0,m4,f4,U2,A2,C0,V2,I2,J4,d4,L0,s4,p4,n3,V0,Z4,r3,i3,M4,B2,S2,m2,y2,B0,p2,R0,K2,Y2,h2,C4,c3,D2,g2,k2,v4,y4,T2,g4,b2,H2,E2,c4,j0,P0,d2,M0,q2,r4,Q2,_2,O2,E0,o3,e4],[0,0,0,0,1,0,[()=>x3,0],[()=>M3,0],[()=>B3,0],0,0,0,0,1,0,1,2,0,2,0,1,1,0,0,0,2,[()=>R3,0],0,0,0,[()=>x3,0],2,0,0,0,0,0,64,2,1,0,0,1,0,2,0,2,0,1,64,[()=>I3,0],2,1,2,0,0,0,0,0,2,0,2,2,0,()=>A3,[()=>z3,0],0],3],_Lt=[3,Y,sDt,0,[U0],[[()=>w3,0]]],vLt=[3,Y,cDt,0,[n2,t2,z0,n3],[0,0,0,[()=>R3,0]],3],yLt=[3,Y,lDt,0,[e2],[()=>T3]],bLt=[3,Y,mDt,0,[f2,X0,n3],[0,0,[()=>R3,0]],2],xLt=[3,Y,hDt,0,[i2],[[()=>E3,0]]],SLt=[3,Y,dDt,0,[s2,a2,kNt,n3],[0,0,[()=>azt,0],[()=>R3,0]],3],CLt=[3,Y,fDt,0,[l2],[[()=>D3,0]]],wLt=[3,Y,tDt,0,[XAt,e3],[0,0]],TLt=[3,Y,H0,0,[C2,zjt,A2,Nkt,Pkt,Mkt,nDt,t2,zDt,VDt,HDt,rkt,pAt,hjt,BDt,_jt,xDt,oNt,NNt,yPt,nPt,$kt,MNt,WNt,N4,SNt,e3,G4,F4,a3,j4,B4,aNt,nNt,V4,z4,Q4],[0,0,0,0,0,64,0,0,0,0,0,()=>C3,0,()=>wLt,0,0,4,[()=>L3,0],[()=>L3,0],[()=>czt,0],[()=>szt,0],64,2,2,64,64,0,2,2,[()=>R3,0],2,2,2,64,2,2,()=>TRt]],ELt=[3,Y,WDt,0,[i4,GDt],[0,[()=>VRt,0]]],w3=[3,Y,U0,0,[X0,Y0,C2,sOt,$2,$0,M2,T0,R2,m4,A0,c2,hPt,r2,O0,l2,x4,pPt,b4,bjt,U2,A2,C0,UMt,zMt,IMt,D4,V2,I2,J4,aMt,L0,s4,$Mt,p4,ONt,Z4,P4,r3,Fkt,V0,M4,B2,x2,M0,Lkt,R0,K2,eAt,Y2,C4,W0,c3,L2,g2,mMt,v4,y4,Jkt,g4,b2,DEt,yjt,H2,a3,S0,E4,vDt,c4,FEt,jEt,MEt,NEt,AEt,x0,q0,j0,OEt,P0,PEt,N0,d2,n4,HMt,S4,Q2,_2,fjt,O2,E0,$4,W4,U4],[0,0,0,0,0,0,()=>O3,1,4,0,1,[()=>JRt,0],[()=>lzt,0],[()=>qRt,0],0,[()=>D3,0],0,0,[()=>_Rt,0],4,2,0,2,0,[()=>izt,0],[()=>rzt,0],0,0,1,1,[()=>tzt,0],0,0,0,2,[()=>GRt,0],0,0,0,1,0,2,0,0,0,[()=>ZRt,0],2,1,0,0,1,0,0,2,0,2,0,1,64,[()=>I3,0],2,[()=>WRt,0],()=>O3,1,[()=>R3,0],0,4,2,0,0,0,0,0,2,0,[()=>j3,0],0,4,0,0,()=>mLt,0,()=>oRt,0,0,2,2,2,0,()=>LRt,0,0,1]],DLt=[3,Y,G0,0,[W0,x2,bMt,X0,k4,T0,e3,f4,O0,f3,R2,$2,C2,A2,V2,I2,J4,d4,r3,j2,P4,Z4,B2,c3,L2,A0,m4,K0,q0,j0,Q2,x0,a3,_2,E0],[0,0,0,0,()=>wRt,1,0,1,0,0,4,0,0,0,0,1,1,0,0,2,0,0,0,0,2,1,0,0,[()=>j3,0],0,2,0,[()=>R3,0],2,()=>A3]],OLt=[3,Y,qDt,0,[i4,ZDt],[0,[()=>HRt,0]]],kLt=[3,Y,J0,0,[K0],[0]],ALt=[3,Y,eOt,0,[i4,lOt],[0,[()=>URt,0]]],jLt=[3,Y,Z0,0,[xMt,dAt,e3],[0,0,0]],MLt=[3,Y,Q0,0,[ePt,$jt,e3,a4],[0,2,0,0]],T3=[3,Y,e2,0,[n2,t2,z0,hOt],[0,0,0,0]],NLt=[3,Y,_Ot,0,[w4,i4],[[()=>F3,0],0]],PLt=[3,Y,xOt,0,[n2],[0]],FLt=[3,Y,yOt,0,[i4,r2],[0,[()=>KRt,0]]],ILt=[3,Y,COt,0,[n2,fMt],[0,0]],LLt=[3,Y,zOt,0,[o2,e3],[0,0]],E3=[3,Y,i2,0,[f2,X0,cNt,C2,T0,e3,f4,O0,f3,R2,$2,A2,V2,Y4,I2,J4,d4,S4,UNt,gNt,Z4,r3,j2,P4,A0,m4,B2,jOt,c3,L2,g4,x2,a3,$Nt,lMt,yNt,d2,Q2,_2,E0,QMt,mAt],[0,0,4,0,1,0,1,0,0,4,0,0,0,0,1,1,0,1,0,0,0,0,2,0,1,0,0,0,0,2,[()=>I3,0],0,[()=>R3,0],0,4,4,0,2,2,()=>A3,0,1]],RLt=[3,Y,ZOt,0,[i4,tkt],[0,[()=>YRt,0]]],D3=[3,Y,l2,0,[s2,a2,f3,wNt,rPt,LOt,H4],[0,0,0,0,[()=>ozt,0],0,64]],zLt=[3,Y,VOt,0,[i4,u2],[0,[()=>XRt,0]]],BLt=[3,Y,ukt,0,[X0,CNt,cAt,SDt],[0,2,0,2],1],VLt=[3,Y,fkt,0,[U0],[[()=>w3,0]]],HLt=[3,Y,hkt,0,[n2],[0],1],ULt=[3,Y,Tkt,0,[f2],[0],1],WLt=[3,Y,Dkt,0,[i2],[[()=>E3,0]]],GLt=[3,Y,xkt,0,[s2],[0],1],KLt=[3,Y,okt,0,[C2,A2,t2,P2,J2,i4,Hkt,xjt,Sjt,bAt],[0,0,0,[()=>P3,0],1,0,2,2,2,2]],qLt=[3,Y,ckt,0,[x2,X0,P2,J2,i4,K0],[0,0,[()=>P3,0],1,0,0]],JLt=[3,Y,dkt,0,[X0,P2,J2,i4],[0,[()=>P3,0],1,0]],YLt=[3,Y,gkt,0,[n2,P2,J2,i4],[0,[()=>P3,0],1,0]],XLt=[3,Y,vkt,0,[n2,A4,P2,J2,i4],[0,0,[()=>P3,0],1,0],1],ZLt=[3,Y,Ekt,0,[X0,f2,Y4,P2,J2,i4,pjt,njt,x2],[0,0,0,[()=>P3,0],1,0,2,2,0]],QLt=[3,Y,Skt,0,[s2,P2,J2,i4],[0,[()=>P3,0],1,0]],$Lt=[3,Y,Akt,0,[I4,X4,tPt,oAt,Kkt,w2,P2,J2,i4],[0,0,4,4,1,[()=>N3,0],[()=>P3,0],1,0]],eRt=[3,Y,Vkt,0,[C2,A2,Y0,V2,k0,_3,P2,J2,i4],[0,0,0,0,0,2,[()=>P3,0],1,0],1],tRt=[3,Y,v2,0,[S2,e3,fAt,CAt,uMt,kEt,jkt],[0,0,0,0,0,0,64]],O3=[3,Y,M2,0,[KEt,f4,yAt],[0,1,0]],nRt=[3,Y,N2,0,[I4,X4,a4,w2,Gkt,qMt],[0,0,0,[()=>N3,0],4,0]],rRt=[3,Y,tAt,0,[i4,sAt],[0,[()=>QRt,0]]],iRt=[3,Y,F2,0,[o4,xPt],[0,[()=>$Rt,0]],2],aRt=[3,Y,Tjt,0,[O4,P2],[0,[()=>P3,0]],1],oRt=[3,Y,n4,0,[tNt,JNt,B2],[0,0,0]],sRt=[3,Y,Ojt,0,[p3,T0,z2,H2,J4,Z4,xNt],[0,1,1,1,1,0,2],1],cRt=[3,Y,Pjt,0,[X0,T0,Y0,s2,c2,m3,bEt,t4,n2,A0,m4,x4,U2,A2,xEt,C0,V2,I2,J4,d4,Zjt,Z4,r3,i3,M0,S2,m2,y2,B0,p2,ikt,R0,K2,EOt,p4,Y2,h2,C4,D2,g2,k2,v4,y4,F0,g4,l3,b2,H2,yDt,D4,S0,MMt,E2,c4,x0,q2,NMt,r4,Q2,_2,C2,E0,o3,e4,O2],[0,1,0,0,[()=>M3,0],[()=>B3,0],2,[()=>x3,0],0,1,0,0,2,0,2,2,0,1,1,0,0,0,0,[()=>x3,0],0,0,0,0,0,64,2,2,1,1,2,0,0,1,2,0,2,0,1,()=>hLt,[()=>I3,0],2,2,1,2,0,0,1,2,0,0,2,2,0,2,2,0,()=>ezt,[()=>z3,0],0,0],1],lRt=[3,Y,Fjt,0,[U0],[[()=>w3,0]]],uRt=[3,Y,Ljt,0,[n2,w4],[0,[()=>F3,0]],2],dRt=[3,Y,u4,0,[d4,e3],[0,0]],fRt=[3,Y,l4,0,[C2,A2,Y0,V2,k0,GEt,Ajt,FMt,_3,KNt,Z4,L4,q4,bNt,ENt,BNt,X2,Z2,Hjt,Ujt,W2,G2,Kjt,qjt,Jjt,Yjt,TEt,N4,K4,ANt,eMt,XMt,F4,H4,lNt,_Nt,ZMt,TNt,yEt],[0,0,0,0,0,[()=>RRt,0],2,2,2,2,0,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,[()=>BRt,0],64,2,2,2,64,2,64,2,2,2,2,[()=>zRt,0]]],pRt=[3,Y,nMt,0,[rMt,i4],[[()=>nzt,0],0]],mRt=[3,Y,dMt,0,[qEt],[0]],hRt=[3,Y,T4,0,[vMt,yMt,z0,A4,BEt,Ukt,D0,QAt,Bjt,SEt,N4],[0,0,0,0,0,0,0,2,0,0,64]],gRt=[3,Y,h4,0,[Djt,Ejt],[64,64]],_Rt=[3,Y,b4,0,[Y0,T0,t4,f4,A0,U2,A2,V2,I2,J4,X0,Z4,M0,s2,h4,g4,S0,E4,Q2,L2,_2,C2,E0],[0,1,[()=>x3,0],1,1,2,0,0,1,1,0,0,0,0,()=>gRt,[()=>I3,0],0,4,2,2,2,0,()=>A3]],vRt=[3,Y,_4,0,[o4,d3],[0,0]],yRt=[3,Y,EMt,0,[X0,lAt],[0,2],1],bRt=[3,Y,AMt,0,[U0],[[()=>w3,0]]],xRt=[3,Y,GMt,0,[O4,sPt],[0,64],2],SRt=[3,Y,wMt,0,[X0,f2,Y0,f4,O0,s2,U2,p4,C0,V2,$0,C2,I2,J4,d4,n3,Z4,r3,i3,m3,S2,m2,y2,B0,p2,R0,h2,D2,T2,g4,l3,n2,b2,E2,c4,j0,P0,T0,LDt,A0,m4,_2,M0,O2,E0,o3,q2,r4],[0,0,0,1,0,0,2,2,2,0,0,0,1,1,0,[()=>R3,0],0,0,[()=>x3,0],[()=>B3,0],0,0,0,0,64,2,0,2,64,[()=>I3,0],2,0,2,2,0,0,0,1,0,1,0,2,0,0,()=>A3,[()=>z3,0],2,0],1],CRt=[3,Y,TMt,0,[U0],[[()=>w3,0]]],wRt=[3,Y,k4,0,[aAt,Cjt],[4,4]],TRt=[3,Y,Q4,0,[jjt,Mjt],[1,1]],ERt=[3,Y,dNt,0,[X0],[0],1],DRt=[3,Y,pNt,0,[U0],[[()=>w3,0]]],ORt=[3,Y,fNt,0,[X0,f2],[0,0],1],kRt=[3,Y,mNt,0,[U0],[[()=>w3,0]]],ARt=[3,Y,t3,0,[R4,eNt,zNt,YNt],[0,()=>S3,()=>mRt,0]],jRt=[3,Y,s3,0,[gjt,d3],[0,0]],MRt=[3,Y,cPt,0,[a3],[[()=>R3,0]]],NRt=[3,Y,dPt,0,[KMt,n3],[0,[()=>R3,0]]],PRt=[3,Y,c3,0,[lPt],[0]],FRt=[3,Y,u3,0,[C2,A2,z0,UEt,$At,N4,G4,F4,j4,B4,V4,z4],[0,0,0,2,2,64,2,2,2,2,2,2]],IRt=[3,Y,g3,0,[h3,e3],[0,0]],k3=`unit`,A3=[1,Y,LEt,0,()=>lLt],LRt=[1,Y,zEt,0,()=>uLt],RRt=[1,Y,WEt,0,[()=>S3,{[y3]:O0}]],zRt=[1,Y,vEt,0,[()=>fLt,{[y3]:b0}]],BRt=[1,Y,wEt,0,[()=>pLt,{[y3]:w0}]],VRt=[1,Y,UDt,0,[()=>TLt,{[y3]:H0}]],HRt=[1,Y,KDt,0,[()=>DLt,{[y3]:G0}]],j3=[1,Y,XDt,0,[()=>kLt,{[y3]:J0}]],URt=[1,Y,$Dt,0,[()=>w3,{[y3]:U0}]],WRt=[1,Y,oOt,0,[()=>jLt,{[y3]:Z0}]],GRt=[1,Y,cOt,0,[()=>MLt,{[y3]:Q0}]],KRt=[1,Y,vOt,0,[()=>T3,{[y3]:e2}]],qRt=[1,Y,wOt,0,[()=>ILt,{[y3]:e2}]],JRt=[1,Y,BOt,0,[()=>LLt,{[y3]:NOt}]],M3=[1,Y,KOt,0,[0,{[y3]:o2}]],YRt=[1,Y,XOt,0,[()=>E3,{[y3]:i2}]],XRt=[1,Y,u2,0,[()=>D3,{[y3]:l2}]],ZRt=[1,Y,Rkt,0,[()=>tRt,{[y3]:v2}]],N3=[1,Y,qkt,0,[0,{[y3]:Ykt}]],QRt=[1,Y,Zkt,0,[()=>nRt,{[y3]:N2}]],P3=[1,Y,uAt,0,[()=>iRt,{[y3]:F2}]],$Rt=[1,Y,hAt,0,[0,{[y3]:d3}]],ezt=[1,Y,kjt,0,()=>sRt],tzt=[1,Y,oMt,0,[()=>dRt,{[y3]:u4}]],nzt=[1,Y,tMt,0,[()=>fRt,{[y3]:l4}]],F3=[1,Y,_Mt,0,[()=>hRt,{[y3]:T4}]],I3=[1,Y,pMt,0,[()=>vRt,{[y3]:_4}]],rzt=[1,Y,LMt,0,[0,{[y3]:RMt}]],izt=[1,Y,BMt,0,[0,{[y3]:VMt}]],azt=[1,Y,DNt,0,[0,{[y3]:R4}]],ozt=[1,Y,jNt,0,[()=>ARt,{[y3]:t3}]],L3=[1,Y,sNt,0,[()=>C3,{[y3]:I0}]],szt=[1,Y,XNt,0,[()=>PRt,{[y3]:c3}]],R3=[1,Y,a3,0,[()=>jRt,{[y3]:s3}]],z3=[1,Y,uPt,0,[()=>NRt,{[y3]:SPt}]],czt=[1,Y,bPt,0,[()=>FRt,{[y3]:u3}]],B3=[1,Y,gPt,0,[0,{[y3]:h3}]],lzt=[1,Y,_Pt,0,[()=>IRt,{[y3]:g3}]],uzt=[9,Y,VEt,0,()=>dLt,()=>k3],dzt=[9,Y,aDt,0,()=>gLt,()=>_Lt],fzt=[9,Y,uDt,0,()=>vLt,()=>yLt],pzt=[9,Y,gDt,0,()=>bLt,()=>xLt],mzt=[9,Y,pDt,0,()=>SLt,()=>CLt],hzt=[9,Y,skt,0,()=>BLt,()=>VLt],gzt=[9,Y,mkt,0,()=>HLt,()=>k3],_zt=[9,Y,bkt,0,()=>ULt,()=>WLt],vzt=[9,Y,Ckt,0,()=>GLt,()=>k3],yzt=[9,Y,akt,0,()=>KLt,()=>ELt],bzt=[9,Y,lkt,0,()=>qLt,()=>OLt],xzt=[9,Y,pkt,0,()=>JLt,()=>ALt],Szt=[9,Y,_kt,0,()=>YLt,()=>FLt],Czt=[9,Y,ykt,0,()=>XLt,()=>NLt],wzt=[9,Y,Okt,0,()=>ZLt,()=>RLt],Tzt=[9,Y,wkt,0,()=>QLt,()=>zLt],Ezt=[9,Y,kkt,0,()=>$Lt,()=>rRt],Dzt=[9,Y,Bkt,0,()=>eRt,()=>pRt],Ozt=[9,Y,wjt,0,()=>aRt,()=>MRt],kzt=[9,Y,Njt,0,()=>cRt,()=>lRt],Azt=[9,Y,Ijt,0,()=>uRt,()=>PLt],jzt=[9,Y,jMt,0,()=>yRt,()=>bRt],Mzt=[9,Y,WMt,0,()=>xRt,()=>k3],Nzt=[9,Y,CMt,0,()=>SRt,()=>CRt],Pzt=[9,Y,uNt,0,()=>ERt,()=>DRt],Fzt=[9,Y,hNt,0,()=>ORt,()=>kRt],Izt=e=>({apiVersion:`2014-10-31`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??MCt,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??CCt,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue}],logger:e?.logger??new de,protocol:e?.protocol??lt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.rds`,errorTypeRegistries:cLt,xmlNamespace:`http://rds.amazonaws.com/doc/2014-10-31/`,version:`2014-10-31`,serviceTarget:`AmazonRDSv19`},serviceId:e?.serviceId??`RDS`,sha256:e?.sha256??it,urlParser:e?.urlParser??Me,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),Lzt=e=>{let t=he(e),n=()=>t().then(a),r=Izt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:DCt.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},Rzt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},zzt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),Bzt=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),Rzt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),zzt(n))},Vzt=class extends le{config;constructor(...[t]){let n=Lzt(t||{});super(n),this.initConfig=n;let r=TCt(n),i=dt(r),a=e(i),o=te(a),s=ke(o),c=Bzt(wCt(at(s)),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:xCt,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials})})),this.middlewareStack.use(De(this.config))}destroy(){super.destroy()}},V3={WHEN_SUPPORTED:`WHEN_SUPPORTED`,WHEN_REQUIRED:`WHEN_REQUIRED`},Hzt=V3.WHEN_SUPPORTED,H3={WHEN_SUPPORTED:`WHEN_SUPPORTED`,WHEN_REQUIRED:`WHEN_REQUIRED`},Uzt=V3.WHEN_SUPPORTED,U3;(function(e){e.MD5=`MD5`,e.CRC32=`CRC32`,e.CRC32C=`CRC32C`,e.CRC64NVME=`CRC64NVME`,e.SHA1=`SHA1`,e.SHA256=`SHA256`})(U3||={});var Wzt;(function(e){e.HEADER=`header`,e.TRAILER=`trailer`})(Wzt||={});var W3=U3.CRC32,Gzt=(e,{requestChecksumRequired:t,requestAlgorithmMember:n,requestChecksumCalculation:r})=>{if(!n)return r===V3.WHEN_SUPPORTED||t?W3:void 0;if(e[n])return e[n]},G3=e=>e===U3.MD5?`content-md5`:`x-amz-checksum-${e.toLowerCase()}`,Kzt=(e,t)=>{let n=e.toLowerCase();for(let e of Object.keys(t))if(n===e.toLowerCase())return!0;return!1},qzt=(e,t)=>{let n=e.toLowerCase();for(let e of Object.keys(t))if(e.toLowerCase().startsWith(n))return!0;return!1},K3=e=>e!==void 0&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&!cee(e),q3=new Uint32Array(256);for(let e=0;e<256;++e){let t=e;for(let e=0;e<8;++e)t=t&1?2197175160^t>>>1:t>>>1;q3[e]=t>>>0}var Jzt=class{digestLength=4;crc=4294967295;update(e){let t=this.crc;for(let n=0;n>>8^q3[(t^e[n])&255];this.crc=t}async digest(){let e=(this.crc^4294967295)>>>0,t=new Uint8Array(4);return t[0]=e>>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=e&255,t}reset(){this.crc=4294967295}},Yzt=()=>{let e=Array(8);for(let t=0;t<8;t++){let n=Array(512);for(let e=0;e<256;e++){let r=BigInt(e);for(let e=0;e<8*(t+1);e++)r&1n?r=r>>1n^11127430586519243189n:r>>=1n;n[e*2]=Number(r>>32n&4294967295n),n[e*2+1]=Number(r&4294967295n)}e[t]=new Uint32Array(n)}return e},J3,Y3,X3,Z3,Q3,$3,e6,t6,n6,Xzt=()=>{J3||(J3=Yzt(),[Y3,X3,Z3,Q3,$3,e6,t6,n6]=J3)},Zzt=class{c1=0;c2=0;constructor(){Xzt(),this.reset()}update(e){let t=e.length,n=0,r=this.c1,i=this.c2;for(;n+8<=t;){let t=((i^e[n++])&255)<<1,a=((i>>>8^e[n++])&255)<<1,o=((i>>>16^e[n++])&255)<<1,s=((i>>>24^e[n++])&255)<<1,c=((r^e[n++])&255)<<1,l=((r>>>8^e[n++])&255)<<1,ee=((r>>>16^e[n++])&255)<<1,u=((r>>>24^e[n++])&255)<<1;r=n6[t]^t6[a]^e6[o]^$3[s]^Q3[c]^Z3[l]^X3[ee]^Y3[u],i=n6[t+1]^t6[a+1]^e6[o+1]^$3[s+1]^Q3[c+1]^Z3[l+1]^X3[ee+1]^Y3[u+1]}for(;n>>8|(r&255)<<24)>>>0,r=r>>>8^Y3[t],i^=Y3[t+1],++n}this.c1=r,this.c2=i}async digest(){let e=this.c1^4294967295,t=this.c2^4294967295;return new Uint8Array([e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255])}reset(){this.c1=4294967295,this.c2=4294967295}},Qzt=[U3.CRC32,U3.CRC32C,U3.CRC64NVME,U3.SHA1,U3.SHA256],r6=[U3.SHA256,U3.SHA1,U3.CRC32,U3.CRC32C,U3.CRC64NVME],i6=(e,t)=>{let{checksumAlgorithms:n={}}=t;switch(e){case U3.MD5:return n?.MD5??t.md5;case U3.CRC32:return n?.CRC32??dee;case U3.CRC32C:return n?.CRC32C??Jzt;case U3.CRC64NVME:return n?.CRC64NVME??Zzt;case U3.SHA1:return n?.SHA1??t.sha1;case U3.SHA256:return n?.SHA256??t.sha256;default:if(n?.[e])return n[e];throw Error(`The checksum algorithm "${e}" is not supported by the client. Select one of ${Qzt}, or provide an implementation to the client constructor checksums field.`)}},a6=(e,t)=>{let n=new e;return n.update(Ce(t||``)),n.digest()},$zt={name:`flexibleChecksumsMiddleware`,step:`build`,tags:[`BODY_CHECKSUM`],override:!0},eBt=(e,t)=>(n,r)=>async i=>{if(!ve.isInstance(i.request)||qzt(`x-amz-checksum-`,i.request.headers))return n(i);let{request:a,input:o}=i,{body:s,headers:c}=a,{base64Encoder:l,streamHasher:ee}=e,{requestChecksumRequired:u,requestAlgorithmMember:te}=t,d=await e.requestChecksumCalculation(),ne=te?.name,re=te?.httpHeader;ne&&!o[ne]&&(d===V3.WHEN_SUPPORTED||u)&&(o[ne]=W3,re&&(c[re]=W3));let ie=Gzt(o,{requestChecksumRequired:u,requestAlgorithmMember:te?.name,requestChecksumCalculation:d}),ae=s,oe=c;if(ie){switch(ie){case U3.CRC32:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_CRC32`,`U`);break;case U3.CRC32C:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_CRC32C`,`V`);break;case U3.CRC64NVME:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_CRC64`,`W`);break;case U3.SHA1:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_SHA1`,`X`);break;case U3.SHA256:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_SHA256`,`Y`)}let t=G3(ie),n=i6(ie,e);if(K3(s)){let{getAwsChunkedEncodingStream:i,bodyLengthChecker:a}=e;ae=i(typeof e.requestStreamBufferSize==`number`&&e.requestStreamBufferSize>=8192?xee(s,e.requestStreamBufferSize,r.logger):s,{base64Encoder:l,bodyLengthChecker:a,checksumLocationName:t,checksumAlgorithmFn:n,streamHasher:ee}),oe={...c,"content-encoding":c[`content-encoding`]?`${c[`content-encoding`]},aws-chunked`:`aws-chunked`,"transfer-encoding":`chunked`,"x-amz-decoded-content-length":c[`content-length`],"x-amz-content-sha256":`STREAMING-UNSIGNED-PAYLOAD-TRAILER`,"x-amz-trailer":t},delete oe[`content-length`]}else if(!Kzt(t,c)){let e=await a6(n,s);oe={...c,[t]:l(e)}}}try{return await n({...i,request:{...a,headers:oe,body:ae}})}catch(e){if(e instanceof Error&&e.name===`InvalidChunkSizeError`)try{e.message.endsWith(`.`)||(e.message+=`.`),e.message+=` Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream.`}catch{}throw e}},tBt={name:`flexibleChecksumsInputMiddleware`,toMiddleware:`serializerMiddleware`,relation:`before`,tags:[`BODY_CHECKSUM`],override:!0},nBt=(e,t)=>(n,r)=>async i=>{let a=i.input,{requestValidationModeMember:o}=t,s=await e.requestChecksumCalculation(),c=await e.responseChecksumValidation();switch(s){case V3.WHEN_REQUIRED:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED`,`a`);break;case V3.WHEN_SUPPORTED:Ne(r,`FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED`,`Z`)}switch(c){case H3.WHEN_REQUIRED:Ne(r,`FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED`,`c`);break;case H3.WHEN_SUPPORTED:Ne(r,`FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED`,`b`)}return o&&!a[o]&&c===H3.WHEN_SUPPORTED&&(a[o]=`ENABLED`),n(i)},o6=(e=[])=>{let t=[],n=r6.length;for(let r of e){let e=r6.indexOf(r);e===-1?t[n++]=r:t[e]=r}return t.filter(Boolean)},rBt=e=>{let t=e.lastIndexOf(`-`);if(t!==-1){let n=e.slice(t+1);if(!n.startsWith(`0`)){let e=parseInt(n,10);if(!isNaN(e)&&e>=1&&e<=1e4)return!0}}return!1},iBt=async(e,{checksumAlgorithmFn:t,base64Encoder:n})=>n(await a6(t,e)),aBt=async(e,{config:t,responseAlgorithms:n,logger:r})=>{let i=o6(n),{body:a,headers:o}=e;for(let n of i){let i=G3(n),s=o[i];if(s){let o;try{o=i6(n,t)}catch(e){if(n===U3.CRC64NVME){r?.warn(`Skipping ${U3.CRC64NVME} checksum validation: ${e.message}`);continue}throw e}let{base64Encoder:c}=t;if(K3(a)){e.body=vee({expectedChecksum:s,checksumSourceLocation:i,checksum:new o,source:a,base64Encoder:c});return}let l=await iBt(a,{checksumAlgorithmFn:o,base64Encoder:c});if(l===s)break;throw Error(`Checksum mismatch: expected "${l}" but received "${s}" in response header "${i}".`)}}},oBt={name:`flexibleChecksumsResponseMiddleware`,toMiddleware:`deserializerMiddleware`,relation:`after`,tags:[`BODY_CHECKSUM`],override:!0},sBt=(e,t)=>(n,r)=>async i=>{if(!ve.isInstance(i.request))return n(i);let a=i.input,o=await n(i),s=o.response,{requestValidationModeMember:c,responseAlgorithms:l}=t;if(c&&a[c]===`ENABLED`){let{clientName:t,commandName:n}=r,i=Object.keys(e.checksumAlgorithms??{}).filter(e=>{let t=G3(e);return s.headers[t]!==void 0}),a=o6([...l??[],...i]);if(t===`S3Client`&&n===`GetObjectCommand`&&a.every(e=>{let t=G3(e),n=s.headers[t];return!n||rBt(n)}))return o;await aBt(s,{config:e,responseAlgorithms:a,logger:r.logger})}return o},s6=(e,t)=>({applyToStack:n=>{n.add(eBt(e,t),$zt),n.addRelativeTo(nBt(e,t),tBt),n.addRelativeTo(sBt(e,t),oBt)}}),cBt=e=>{let{requestChecksumCalculation:t,responseChecksumValidation:n,requestStreamBufferSize:r}=e;return Object.assign(e,{requestChecksumCalculation:Ae(t??Hzt),responseChecksumValidation:Ae(n??Uzt),requestStreamBufferSize:Number(r??0),checksumAlgorithms:e.checksumAlgorithms??{}})},lBt=`content-length`,uBt=`x-amz-decoded-content-length`;function dBt(){return(e,t)=>async n=>{let{request:r}=n;if(ve.isInstance(r)&&!(lBt in r.headers)&&!(uBt in r.headers)){let e=`Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage.`;typeof t?.logger?.warn==`function`&&!(t.logger instanceof de)?t.logger.warn(e):console.warn(e)}return e({...n})}}var fBt={step:`finalizeRequest`,tags:[`CHECK_CONTENT_LENGTH_HEADER`],name:`getCheckContentLengthHeaderPlugin`,override:!0},pBt=e=>({applyToStack:e=>{e.add(dBt(),fBt)}}),mBt=e=>(t,n)=>async r=>{let i=await e.region(),a=e.region,o=()=>{};n.__s3RegionRedirect&&(Object.defineProperty(e,"region",{writable:!1,value:async()=>n.__s3RegionRedirect}),o=()=>Object.defineProperty(e,"region",{writable:!0,value:a}));try{let a=await t(r);if(n.__s3RegionRedirect&&(o(),i!==await e.region()))throw Error(`Region was not restored following S3 region redirect.`);return a}catch(e){throw o(),e}},hBt={tags:[`REGION_REDIRECT`,`S3`],name:`regionRedirectEndpointMiddleware`,override:!0,relation:`before`,toMiddleware:`endpointV2Middleware`};function gBt(e){return(t,n)=>async r=>{try{return await t(r)}catch(i){if(e.followRegionRedirects){let a=i?.$metadata?.httpStatusCode,o=n.commandName===`HeadBucketCommand`,s=i?.$response?.headers?.[`x-amz-bucket-region`];if(s&&(a===301||a===400&&(i?.name===`IllegalLocationConstraintException`||o))){try{let t=s;n.logger?.debug(`Redirecting from ${await e.region()} to ${t}`),n.__s3RegionRedirect=t}catch(e){throw Error(`Region redirect failed: `+e)}return t(r)}}throw i}}}var _Bt={step:`initialize`,tags:[`REGION_REDIRECT`,`S3`],name:`regionRedirectMiddleware`,override:!0},vBt=e=>({applyToStack:t=>{t.add(gBt(e),_Bt),t.addRelativeTo(mBt(e),hBt)}}),yBt=class e{data;lastPurgeTime=Date.now();static EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS=3e4;constructor(e={}){this.data=e}get(e){let t=this.data[e];if(t)return t}set(e,t){return this.data[e]=t,t}delete(e){delete this.data[e]}async purgeExpired(){let t=Date.now();if(!(this.lastPurgeTime+e.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS>t))for(let e in this.data){let n=this.data[e];if(!n.isRefreshing){let r=await n.identity;r.expiration&&r.expiration.getTime()(t.expiration?.getTime()??0){i.set(r,new c6(Promise.resolve(e)))})),t)):i.set(r,new c6(this.getIdentity(r))).identity}async getIdentity(e){await this.cache.purgeExpired().catch(e=>{console.warn(`Error while clearing expired entries in S3ExpressIdentityCache: -`+e)});let t=await this.createSessionFn(e);if(!t.Credentials?.AccessKeyId||!t.Credentials?.SecretAccessKey)throw Error(`s3#createSession response credential missing AccessKeyId or SecretAccessKey.`);return{accessKeyId:t.Credentials.AccessKeyId,secretAccessKey:t.Credentials.SecretAccessKey,sessionToken:t.Credentials.SessionToken,expiration:t.Credentials.Expiration?new Date(t.Credentials.Expiration):void 0}}},xBt=(e,{session:t})=>{let[n,r]=t,{forcePathStyle:i,useAccelerateEndpoint:a,disableMultiregionAccessPoints:o,followRegionRedirects:s,s3ExpressIdentityProvider:c,bucketEndpoint:l,expectContinueHeader:ee}=e;return Object.assign(e,{forcePathStyle:i??!1,useAccelerateEndpoint:a??!1,disableMultiregionAccessPoints:o??!1,followRegionRedirects:s??!1,s3ExpressIdentityProvider:c??new bBt(async e=>n().send(new r({Bucket:e}))),bucketEndpoint:l??!1,expectContinueHeader:ee??2097152})},SBt=e=>(e,t)=>async n=>{let r=await e(n),{response:i}=r;if(Pe.isInstance(i)&&i.headers.expires){i.headers.expiresstring=i.headers.expires;try{me(i.headers.expires)}catch(e){t.logger?.warn(`AWS SDK Warning for ${t.clientName}::${t.commandName} response parsing (${i.headers.expires}): ${e}`),delete i.headers.expires}}return r},CBt={tags:[`S3`],name:`s3ExpiresMiddleware`,override:!0,relation:`after`,toMiddleware:`deserializerMiddleware`},wBt=e=>({applyToStack:t=>{t.addRelativeTo(SBt(e),CBt)}}),TBt=`sigv4-s3express`,EBt=`x-amz-s3session-token`,DBt=e=>(t,n)=>async r=>{if(n.endpointV2){let t=n.endpointV2,i=t.properties?.authSchemes?.[0]?.name===TBt;if((t.properties?.backend===`S3Express`||t.properties?.bucketType===`Directory`)&&(Ne(n,`S3_EXPRESS_BUCKET`,`J`),n.isS3ExpressBucket=!0),i){let t=r.input.Bucket;if(t){let i=await e.s3ExpressIdentityProvider.getS3ExpressIdentity(await e.credentials(),{Bucket:t});n.s3ExpressIdentity=i,ve.isInstance(r.request)&&i.sessionToken&&(r.request.headers[EBt]=i.sessionToken)}}}return t(r)},OBt={name:`s3ExpressMiddleware`,step:`build`,tags:[`S3`,`S3_EXPRESS`],override:!0},kBt=e=>({applyToStack:t=>{t.add(DBt(e),OBt)}}),ABt=async(e,t,n,r)=>{let i=await r.signWithCredentials(n,e,{});if(i.headers[`X-Amz-Security-Token`]||i.headers[`x-amz-security-token`])throw Error(`X-Amz-Security-Token must not be set for s3-express requests.`);return i},jBt=e=>e=>{throw e},MBt=(e,t)=>{},NBt=e=>(n,r)=>async i=>{if(!ve.isInstance(i.request))return n(i);let a=t(r).selectedHttpAuthScheme;if(!a)throw Error(`No HttpAuthScheme was selected: unable to sign request`);let{httpAuthOption:{signingProperties:o={}},identity:s,signer:c}=a,l;l=r.s3ExpressIdentity?await ABt(r.s3ExpressIdentity,o,i.request,await e.signer()):await c.sign(i.request,s,o);let ee=await n({...i,request:l}).catch((c.errorHandler||jBt)(o));return(c.successHandler||MBt)(ee.response,o),ee},PBt=e=>({applyToStack:t=>{t.addRelativeTo(NBt(e),ne)}});function FBt(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}var IBt={CopyObjectCommand:!0,UploadPartCopyCommand:!0,CompleteMultipartUploadCommand:!0},LBt=e=>(t,n)=>async r=>{let i=await t(r),{response:a}=i;if(!Pe.isInstance(a))return i;let{statusCode:o,body:s}=a;if(o<200||o>=300)return i;let c=await RBt(s,e);if(a.body=FBt(c),c.length===0&&IBt[n.commandName]){let e=Error(`S3 aborted request`);throw e.$metadata={httpStatusCode:503},e.name=`InternalError`,e}let l=e.utf8Encoder(c.subarray(c.length-16));return l&&l.endsWith(``)&&(a.statusCode=503),i},RBt=(e=new Uint8Array,t)=>e instanceof Uint8Array?Promise.resolve(e):t.streamCollector(e)||Promise.resolve(new Uint8Array),zBt={relation:`after`,toMiddleware:`deserializerMiddleware`,tags:[`THROW_200_EXCEPTIONS`,`S3`],name:`throw200ExceptionsMiddleware`,override:!0},l6=e=>({applyToStack:t=>{t.addRelativeTo(LBt(e),zBt)}});function BBt(e){return(t,n)=>async r=>{if(e.bucketEndpoint){let e=n.endpointV2;if(e){let t=r.input.Bucket;if(typeof t==`string`)try{let r=new URL(t);n.endpointV2={...e,url:r}}catch(e){let r=`@aws-sdk/middleware-sdk-s3: bucketEndpoint=true was set but Bucket=${t} could not be parsed as URL.`;throw n.logger?.constructor?.name===`NoOpLogger`?console.warn(r):n.logger?.warn?.(r),e}}}return t(r)}}var VBt={name:`bucketEndpointMiddleware`,override:!0,relation:`after`,toMiddleware:`endpointV2Middleware`};function HBt({bucketEndpoint:e}){return t=>async n=>{let{input:{Bucket:r}}=n;if(!e&&typeof r==`string`&&!Ome(r)&&r.indexOf(`/`)>=0){let e=Error(`Bucket name shouldn't contain '/', received '${r}'`);throw e.name=`InvalidBucketName`,e}return t({...n})}}var UBt={step:`initialize`,tags:[`VALIDATE_BUCKET_NAME`],name:`validateBucketNameMiddleware`,override:!0},WBt=e=>({applyToStack:t=>{t.add(HBt(e),UBt),t.addRelativeTo(BBt(e),VBt)}}),GBt=class extends Yee{async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n),i=ae.of(e.input),a=i.getSchema(),o=0,s=a[6]??0;if(t&&typeof t==`object`)for(let[e,n]of i.structIterator()){if(++o>s)break;if(e===`Bucket`){if(!t.Bucket&&n.getMergedTraits().httpLabel)throw Error(`No value provided for input HTTP label: Bucket.`);break}}return r}};function KBt(e){return t=>async n=>{let{request:r}=n;if(e.expectContinueHeader!==!1&&ve.isInstance(r)&&r.body&&e.runtime===`node`&&e.requestHandler?.constructor?.name!==`FetchHttpHandler`){let t=!0;if(typeof e.expectContinueHeader==`number`)try{t=(Number(r.headers?.[`content-length`])??e.bodyLengthChecker?.(r.body)??1/0)>=e.expectContinueHeader}catch{}else t=!!e.expectContinueHeader;t&&(r.headers.Expect=`100-continue`)}return t({...n,request:r})}}var qBt={step:`build`,tags:[`SET_EXPECT_HEADER`,`EXPECT_HEADER`],name:`addExpectContinueMiddleware`,override:!0},JBt=e=>({applyToStack:t=>{t.add(KBt(e),qBt)}});function YBt(e){return t=>async n=>{let{CreateBucketConfiguration:r}=n.input,i=await e.region();return!r?.LocationConstraint&&!r?.Location&&i!==`us-east-1`&&(n.input.CreateBucketConfiguration=n.input.CreateBucketConfiguration??{},n.input.CreateBucketConfiguration.LocationConstraint=i),t(n)}}var XBt={step:`initialize`,tags:[`LOCATION_CONSTRAINT`,`CREATE_BUCKET_CONFIGURATION`],name:`locationConstraintMiddleware`,override:!0},ZBt=e=>({applyToStack:t=>{t.add(YBt(e),XBt)}});function QBt(e){return t=>async n=>{let r={...n.input};for(let t of[{target:`SSECustomerKey`,hash:`SSECustomerKeyMD5`},{target:`CopySourceSSECustomerKey`,hash:`CopySourceSSECustomerKeyMD5`}]){let n=r[t.target];if(n){let i;typeof n==`string`?eVt(n,e)?i=e.base64Decoder(n):(i=e.utf8Decoder(n),r[t.target]=e.base64Encoder(i)):(i=ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n),r[t.target]=e.base64Encoder(i));let a=new e.md5;a.update(i),r[t.hash]=e.base64Encoder(await a.digest())}}return t({...n,input:r})}}var $Bt={name:`ssecMiddleware`,step:`initialize`,tags:[`SSE`],override:!0},u6=e=>({applyToStack:t=>{t.add(QBt(e),$Bt)}});function eVt(e,t){if(!/^(?:[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))return!1;try{return t.base64Decoder(e).length===32}catch{return!1}}var d6=`ref`,f6=`argv`,p6=`backend`,m6=`authSchemes`,h6=`disableDoubleEncoding`,g6=`signingName`,_6=`signingRegion`,v6=`signingRegionSet`,Z=-1,y6=!0,b6=!1,x6=`isSet`,S6=`booleanEquals`,C6=`stringEquals`,w6=`coalesce`,T6=`substring`,E6=``,D6=`aws.partition`,O6=`partitionResult`,k6=`accessPointSuffix`,A6=`regionPrefix`,j6=e=>`outpostId_ssa_`+e+E6,M6=`hardwareType`,N6=`ite`,P6=`isValidHostLabel`,F6=`sigv4`,I6=`aws.isVirtualHostableS3Bucket`,L6=`url`,R6=`getAttr`,z6=`bucketArn`,B6=`--`,V6=`arnType`,H6=`accesspoint`,U6=e=>`accessPointName_ssa_`+e+E6,W6=`s3-object-lambda`,G6=`s3-outposts`,K6=`bucketPartition`,q6=`us-east-1`,J6=`outpostType`,Y6=`name`,X6=`s3`,Z6=`{url#scheme}://{Bucket}.{url#authority}{url#path}`,Q6=`{url#scheme}://{url#authority}{url#path}`,$6=`{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}`,e8=`https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}`,t8=`https://{Bucket}.s3.{partitionResult#dnsSuffix}`,n8=e=>`{url#scheme}://{accessPointName_ssa_`+e+`}-{bucketArn#accountId}.{url#authority}{url#path}`,r8=e=>"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName_ssa_"+e+"}`",i8=`sigv4a`,a8=`{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}`,o8=`https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,s8=`https://s3.{partitionResult#dnsSuffix}`,c8={[d6]:`UseFIPS`},l8={[d6]:`UseDualStack`},u8={[d6]:`Bucket`},d8={fn:R6,[f6]:[{[d6]:O6},Y6]},f8={[d6]:L6},p8={[d6]:`Region`},m8={[d6]:z6},h8={[d6]:V6},g8={[d6]:`accessPointName_ssa_1`},_8={fn:R6,[f6]:[m8,`region`]},v8={[d6]:M6},y8={fn:R6,[f6]:[m8,`service`]},b8={fn:R6,[f6]:[m8,`accountId`]},x8={[p6]:`S3Express`,[m6]:[{[h6]:!0,[Y6]:`{_s3e_auth}`,[g6]:`s3express`,[_6]:`{Region}`}]},S8={[p6]:`S3Express`,[m6]:[{[h6]:!0,[Y6]:F6,[g6]:`s3express`,[_6]:`{Region}`}]},C8={[m6]:[{[h6]:!0,[Y6]:i8,[g6]:G6,[v6]:[`*`]},{[h6]:!0,[Y6]:F6,[g6]:G6,[_6]:`{Region}`}]},w8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:q6}]},T8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:`{Region}`}]},E8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:W6,[_6]:`{bucketArn#region}`}]},D8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:X6,[_6]:`{bucketArn#region}`}]},O8={[m6]:[{[h6]:!0,[Y6]:i8,[g6]:G6,[v6]:[`*`]},{[h6]:!0,[Y6]:F6,[g6]:G6,[_6]:`{bucketArn#region}`}]},k8={[m6]:[{[h6]:!0,[Y6]:F6,[g6]:W6,[_6]:`{Region}`}]},A8=[p8],j8=[{[d6]:`Endpoint`}],M8=[u8],N8=[u8,0,7,!0],P8=[m8,`resourceId[1]`],tVt=[`*`],F8={conditions:[[x6,A8],[S6,[{[d6]:`Accelerate`},y6]],[S6,[c8,y6]],[S6,[l8,y6]],[x6,j8],[x6,M8],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,0,6,y6]},E6]},`--x-s3`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:N8},E6]},`--xa-s3`]],[D6,A8,O6],[T6,N8,k6],[C6,[{[d6]:k6},`--op-s3`]],[T6,[u8,8,12,y6],A6],[T6,[u8,32,49,y6],j6(2)],[T6,[u8,49,50,y6],M6],[S6,[{[d6]:`ForcePathStyle`},y6]],[C6,[d8,`aws-cn`]],[N6,[l8,`.dualstack`,E6],`_s3e_ds`],[P6,[{[d6]:j6(2)},b6]],[N6,[c8,`-fips`,E6],`_s3e_fips`],[N6,[{fn:w6,[f6]:[{[d6]:`DisableS3ExpressSessionAuth`},b6]},F6,`sigv4-s3express`],`_s3e_auth`],[I6,[u8,b6]],[`parseURL`,j8,L6],[S6,[{fn:w6,[f6]:[{[d6]:`UseS3ExpressControlEndpoint`},b6]},y6]],[I6,[u8,y6]],[C6,[{fn:R6,[f6]:[f8,`scheme`]},`http`]],[P6,[p8,b6]],[`aws.parseArn`,M8,z6],[R6,[{fn:`split`,[f6]:[u8,B6,0]},`[-2]`],`s3expressAvailabilityZoneId`],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,0,4,b6]},E6]},`arn:`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,16,18,y6]},E6]},B6]],[S6,[{fn:R6,[f6]:[f8,`isIp`]},y6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,21,23,y6]},E6]},B6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,27,29,y6]},E6]},B6]],[C6,[{[d6]:A6},`beta`]],[`uriEncode`,M8,`uri_encoded_bucket`],[P6,[p8,y6]],[S6,[{fn:w6,[f6]:[{[d6]:`UseObjectLambdaEndpoint`},b6]},y6]],[R6,[m8,`resourceId[0]`],V6],[C6,[h8,E6]],[C6,[h8,H6]],[R6,P8,U6(1)],[C6,[g8,E6]],[C6,[_8,E6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,14,16,y6]},E6]},B6]],[C6,[v8,`e`]],[C6,[v8,`o`]],[C6,[p8,`aws-global`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,19,21,y6]},E6]},B6]],[C6,[y8,W6]],[S6,[{fn:w6,[f6]:[{[d6]:`DisableAccessPoints`},b6]},y6]],[C6,[y8,G6]],[D6,[_8],K6],[P6,[g8,y6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,26,28,y6]},E6]},B6]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,15,17,y6]},E6]},B6]],[R6,[m8,`resourceId[4]`]],[C6,[{fn:w6,[f6]:[{fn:T6,[f6]:[u8,20,22,y6]},E6]},B6]],[S6,[{[d6]:`UseGlobalEndpoint`},y6]],[C6,[p8,q6]],[R6,P8,j6(1)],[S6,[{fn:w6,[f6]:[{[d6]:`UseArnRegion`},y6]},y6]],[P6,[{[d6]:j6(1)},b6]],[R6,[m8,`resourceId[2]`],J6],[C6,[p8,_8]],[C6,[{fn:R6,[f6]:[{[d6]:K6},Y6]},d8]],[S6,[{[d6]:`DisableMultiRegionAccessPoints`},y6]],[P6,[_8,y6]],[C6,[{fn:R6,[f6]:[m8,`partition`]},d8]],[C6,[b8,E6]],[C6,[y8,X6]],[P6,[b8,b6]],[R6,[m8,`resourceId[3]`],U6(2)],[P6,[g8,b6]],[C6,[{[d6]:J6},H6]],[P6,[{[d6]:U6(2)},b6]]],results:[[Z],[Z,`Accelerate cannot be used with FIPS`],[Z,`Cannot set dual-stack in combination with a custom endpoint.`],[Z,`A custom endpoint cannot be combined with FIPS`],[Z,`A custom endpoint cannot be combined with S3 Accelerate`],[Z,`Partition does not support FIPS`],[Z,`S3Express does not support S3 Accelerate.`],[`{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}`,x8],[Z6,x8],[Z,`S3Express bucket name is not a valid virtual hostable name.`],[`https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,S8],[`https://{Bucket}.s3express{_s3e_fips}-{s3expressAvailabilityZoneId}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}`,x8],[Z,`Unrecognized S3Express bucket name format.`],[Q6,x8],[`https://s3express-control{_s3e_fips}{_s3e_ds}.{Region}.{partitionResult#dnsSuffix}`,S8],[Z,`Expected a endpoint to be specified but no endpoint was found`],[`https://{Bucket}.ec2.{url#authority}`,C8],[`https://{Bucket}.ec2.s3-outposts.{Region}.{partitionResult#dnsSuffix}`,C8],[`https://{Bucket}.op-{outpostId_ssa_2}.{url#authority}`,C8],[`https://{Bucket}.op-{outpostId_ssa_2}.s3-outposts.{Region}.{partitionResult#dnsSuffix}`,C8],[Z,`Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"`],[Z,`Invalid Outposts Bucket alias - it must be a valid bucket name.`],[Z,"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`."],[Z,"Custom endpoint `{Endpoint}` was not a valid URI"],[Z,`S3 Accelerate cannot be used in this region`],[`https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}`,T8],[`https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[$6,w8],[Z6,w8],[$6,T8],[Z6,T8],[e8,w8],[e8,T8],[t8,w8],[t8,T8],[`https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}`,T8],[Z,`Invalid region: region was not a valid DNS name.`],[Z,`S3 Object Lambda does not support Dual-stack`],[Z,`S3 Object Lambda does not support S3 Accelerate`],[Z,`Access points are not supported for this operation`],[Z,"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`"],[Z,`Invalid ARN: Missing account id`],[n8(1),E8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}`,E8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}`,E8],[Z,r8(1)],[Z,"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`"],[Z,"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)"],[Z,"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`"],[Z,"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`."],[Z,`Invalid ARN: bucket ARN is missing a region`],[Z,"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided"],[Z,"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`"],[Z,`Access Points do not support S3 Accelerate`],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[n8(1),D8],[`https://{accessPointName_ssa_1}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}`,D8],[Z,`Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}`],[Z,`S3 MRAP does not support dual-stack`],[Z,`S3 MRAP does not support FIPS`],[Z,`S3 MRAP does not support S3 Accelerate`],[Z,`Invalid configuration: Multi-Region Access Point ARNs are disabled.`],[`https://{accessPointName_ssa_1}.accesspoint.s3-global.{partitionResult#dnsSuffix}`,{[m6]:[{[h6]:y6,name:i8,[g6]:X6,[v6]:tVt}]}],[Z,"Client was configured for partition `{partitionResult#name}` but bucket referred to partition `{bucketArn#partition}`"],[Z,`Invalid Access Point Name`],[Z,`S3 Outposts does not support Dual-stack`],[Z,`S3 Outposts does not support FIPS`],[Z,`S3 Outposts does not support S3 Accelerate`],[Z,`Invalid Arn: Outpost Access Point ARN contains sub resources`],[`https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.{url#authority}`,O8],[`https://{accessPointName_ssa_2}-{bucketArn#accountId}.{outpostId_ssa_1}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}`,O8],[Z,r8(2)],[Z,"Expected an outpost type `accesspoint`, found {outpostType}"],[Z,`Invalid ARN: expected an access point name`],[Z,`Invalid ARN: Expected a 4-component resource`],[Z,"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId_ssa_1}`"],[Z,`Invalid ARN: The Outpost Id was not set`],[Z,`Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})`],[Z,`Invalid ARN: No ARN type specified`],[Z,"Invalid ARN: `{Bucket}` was not a valid ARN"],[Z,`Path-style addressing cannot be used with ARN buckets`],[`https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[`https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[`https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,w8],[`https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[a8,w8],[a8,T8],[o8,w8],[o8,T8],[`https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}`,T8],[Z,`Path-style addressing cannot be used with S3 Accelerate`],[Q6,k8],[`https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}`,k8],[`https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}`,k8],[`https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://s3-fips.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3-fips.{Region}.{partitionResult#dnsSuffix}`,T8],[`https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}`,w8],[`https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}`,T8],[Q6,w8],[Q6,T8],[s8,w8],[s8,T8],[`https://s3.{Region}.{partitionResult#dnsSuffix}`,T8],[Z,`A region must be set when sending requests to S3.`]]},nVt=2,rVt=new Int32Array([-1,1,-1,0,3,100000115,1,424,4,2,272,5,3,233,6,4,85,7,5,15,8,8,9,100000115,16,10,13,18,11,13,19,12,13,22,100000014,13,35,14,100000042,36,100000103,435,6,271,16,7,270,17,8,19,18,14,501,106,9,20,24,10,21,24,11,22,24,12,23,24,13,547,24,14,77,25,20,73,26,26,27,78,37,28,100000086,38,100000086,29,39,47,30,48,100000058,31,50,32,100000085,51,33,136,55,100000076,34,59,35,100000084,60,39,36,61,37,100000083,62,38,146,63,41,100000046,61,40,100000083,62,41,150,64,42,100000054,66,43,100000053,70,44,100000052,71,45,100000081,73,46,100000080,74,100000078,100000079,40,48,100000057,41,100000057,49,42,185,50,48,62,51,49,100000045,52,51,53,526,60,56,54,62,100000055,55,63,57,100000046,62,100000055,57,64,58,100000054,66,59,100000053,69,60,100000065,70,61,100000052,72,100000064,100000051,49,100000045,63,51,64,526,60,67,65,62,100000055,66,63,68,100000046,62,100000055,68,64,69,100000054,66,70,100000053,68,100000047,71,70,72,100000052,72,100000050,100000051,25,74,100000042,46,100000039,75,57,76,100000041,58,100000040,100000041,26,100000088,78,28,100000087,79,34,82,80,35,81,545,36,100000103,100000115,46,100000097,83,57,84,100000099,58,100000098,100000099,5,101,86,8,87,100000115,16,88,89,18,91,89,19,90,92,21,97,95,19,93,92,21,98,95,21,97,94,22,100000014,95,35,96,100000042,36,100000103,100000042,22,100000013,98,35,99,100000042,36,100000101,100,46,100000110,100000111,6,214,102,7,208,103,8,119,104,14,118,105,21,106,100000023,26,107,502,37,108,100000086,38,100000086,109,39,112,110,48,100000058,111,50,136,100000085,40,113,100000057,41,100000057,114,42,115,500,48,100000056,116,52,117,100000072,65,100000069,100000072,21,501,100000023,9,120,124,10,121,124,11,122,124,12,123,124,13,202,124,14,195,125,20,190,126,21,127,100000023,23,128,129,24,189,129,26,130,197,37,131,100000086,38,100000086,132,39,159,133,48,100000058,134,50,135,100000085,51,141,136,55,100000076,137,59,138,100000084,60,100000083,139,61,140,100000083,63,100000083,100000046,55,100000076,142,59,143,100000084,60,148,144,61,145,100000083,62,147,146,63,150,100000046,63,153,100000046,61,149,100000083,62,153,150,64,151,100000054,66,152,100000053,70,100000082,100000052,64,154,100000054,66,155,100000053,70,156,100000052,71,157,100000081,73,158,100000080,74,100000077,100000079,40,160,100000057,41,100000057,161,42,185,162,48,174,163,49,100000045,164,51,165,526,60,168,166,62,100000055,167,63,169,100000046,62,100000055,169,64,170,100000054,66,171,100000053,69,172,100000065,70,173,100000052,72,100000063,100000051,49,100000045,175,51,176,526,60,179,177,62,100000055,178,63,180,100000046,62,100000055,180,64,181,100000054,66,182,100000053,68,100000047,183,70,184,100000052,72,100000048,100000051,48,100000056,186,52,187,100000072,65,100000069,188,67,100000070,100000071,25,100000036,100000042,21,191,100000023,25,192,100000042,30,194,193,46,100000034,100000036,46,100000033,100000035,21,196,100000023,26,100000088,197,28,100000087,198,34,201,199,35,200,545,36,100000101,100000115,46,100000095,100000096,17,203,100000022,20,204,100000021,21,205,550,33,206,550,44,100000016,207,45,100000018,100000020,8,209,215,16,210,220,18,211,220,19,212,224,20,213,227,21,231,401,8,218,215,19,216,100000009,20,217,227,21,231,100000009,16,219,220,18,223,220,19,221,224,20,222,227,21,231,100000012,19,226,224,20,225,100000009,21,100000009,100000012,20,230,227,21,228,100000009,30,229,100000009,34,100000007,100000009,21,231,415,30,232,100000008,34,100000007,100000008,4,100000002,234,5,235,480,6,271,236,7,270,237,8,238,491,9,239,243,10,240,243,11,241,243,12,242,243,13,547,243,14,266,244,20,264,245,26,246,267,37,247,100000086,38,100000086,248,39,249,518,40,250,100000057,41,100000057,251,42,538,252,48,100000043,253,49,100000045,254,51,255,526,60,258,256,62,100000055,257,63,259,100000046,62,100000055,259,64,260,100000054,66,261,100000053,69,262,100000065,70,263,100000052,72,100000062,100000051,25,265,100000042,46,100000031,100000032,26,100000088,267,28,100000087,268,34,269,544,46,100000093,100000094,8,397,100000009,8,407,100000009,3,346,273,4,100000003,274,5,284,275,8,276,100000115,15,100000005,277,16,278,281,18,279,281,19,280,281,22,100000014,281,35,282,100000042,36,100000102,283,46,100000106,100000107,6,405,285,7,395,286,8,295,287,14,501,288,26,289,502,37,290,100000086,38,100000086,291,39,292,307,40,293,100000057,41,100000057,294,42,335,500,9,296,300,10,297,300,11,298,300,12,299,300,13,394,300,14,339,301,15,100000005,302,20,337,303,26,304,341,37,305,100000086,38,100000086,306,39,309,307,48,100000058,308,50,100000074,100000085,40,310,100000057,41,100000057,311,42,335,312,48,324,313,49,100000045,314,51,315,526,60,318,316,62,100000055,317,63,319,100000046,62,100000055,319,64,320,100000054,66,321,100000053,69,322,100000065,70,323,100000052,72,100000061,100000051,49,100000045,325,51,326,526,60,329,327,62,100000055,328,63,330,100000046,62,100000055,330,64,331,100000054,66,332,100000053,68,100000047,333,70,334,100000052,72,100000049,100000051,48,100000056,336,52,100000067,100000072,25,338,100000042,46,100000027,100000028,15,100000005,340,26,100000088,341,28,100000087,342,34,345,343,35,344,545,36,100000102,100000115,46,100000091,100000092,4,100000002,347,5,357,348,8,349,100000115,15,100000005,350,16,351,354,18,352,354,19,353,354,22,100000014,354,35,355,100000042,36,100000043,356,46,100000104,100000105,6,405,358,7,395,359,8,360,491,9,361,365,10,362,365,11,363,365,12,364,365,13,394,365,14,389,366,15,100000005,367,20,387,368,26,369,391,37,370,100000086,38,100000086,371,39,372,518,40,373,100000057,41,100000057,374,42,538,375,48,100000043,376,49,100000045,377,51,378,526,60,381,379,62,100000055,380,63,382,100000046,62,100000055,382,64,383,100000054,66,384,100000053,69,385,100000065,70,386,100000052,72,100000060,100000051,25,388,100000042,46,100000025,100000026,15,100000005,390,26,100000088,391,28,100000087,392,34,393,544,46,100000089,100000090,15,100000005,547,8,396,100000009,15,100000005,397,16,398,410,18,399,410,19,400,410,20,401,100000009,27,402,100000012,29,100000011,403,31,100000011,404,32,100000011,422,8,406,100000009,15,100000005,407,16,408,410,18,409,410,19,411,410,20,100000012,100000009,20,414,412,22,413,100000009,34,100000010,100000009,22,416,415,27,419,100000012,27,418,417,34,100000010,100000012,34,100000010,419,43,100000011,420,47,100000011,421,53,100000011,422,54,100000011,423,56,100000011,100000012,2,100000001,425,3,478,426,4,100000004,427,5,438,428,8,429,100000115,16,430,433,18,431,433,19,432,433,22,100000014,433,35,434,100000042,36,100000044,435,46,100000112,436,57,437,100000114,58,100000113,100000114,6,100000006,439,7,100000006,440,8,450,441,14,501,442,26,443,502,37,444,100000086,38,100000086,445,39,446,465,40,447,100000057,41,100000057,448,42,471,449,48,100000044,500,9,451,455,10,452,455,11,453,455,12,454,455,13,547,455,14,473,456,15,460,457,20,458,461,25,459,100000042,46,100000037,100000038,20,540,461,26,462,474,37,463,100000086,38,100000086,464,39,467,465,48,100000058,466,50,100000075,100000085,40,468,100000057,41,100000057,469,42,471,470,48,100000044,524,48,100000044,472,52,100000068,100000072,26,100000088,474,28,100000087,475,34,100000100,476,35,477,545,36,100000044,100000115,4,100000002,479,5,488,480,8,481,100000115,16,482,485,18,483,485,19,484,485,22,100000014,485,35,486,100000042,36,100000043,487,46,100000108,100000109,6,100000006,489,7,100000006,490,8,503,491,14,501,492,26,493,502,37,494,100000086,38,100000086,495,39,496,518,40,497,100000057,41,100000057,498,42,538,499,48,100000043,500,49,100000045,526,26,100000088,502,28,100000087,100000115,9,504,508,10,505,508,11,506,508,12,507,508,13,547,508,14,541,509,15,513,510,20,511,514,25,512,100000042,46,100000029,100000030,20,540,514,26,515,542,37,516,100000086,38,100000086,517,39,520,518,48,100000058,519,50,100000073,100000085,40,521,100000057,41,100000057,522,42,538,523,48,100000043,524,49,100000045,525,51,529,526,60,100000055,527,62,100000055,528,63,100000055,100000046,60,532,530,62,100000055,531,63,533,100000046,62,100000055,533,64,534,100000054,66,535,100000053,69,536,100000065,70,537,100000052,72,100000059,100000051,48,100000043,539,52,100000066,100000072,25,100000024,100000042,26,100000088,542,28,100000087,543,34,100000100,544,35,546,545,36,100000042,100000115,36,100000043,100000115,17,548,100000022,20,549,100000021,33,552,550,44,100000017,551,45,100000019,100000020,44,100000015,553,45,100000015,100000020]),iVt=xe.from(rVt,nVt,F8.conditions,F8.results),aVt=new ct({size:50,params:[`Accelerate`,`Bucket`,`DisableAccessPoints`,`DisableMultiRegionAccessPoints`,`DisableS3ExpressSessionAuth`,`Endpoint`,`ForcePathStyle`,`Region`,`UseArnRegion`,`UseDualStack`,`UseFIPS`,`UseGlobalEndpoint`,`UseObjectLambdaEndpoint`,`UseS3ExpressControlEndpoint`]}),I8=(e,t={})=>aVt.get(e,()=>ut(iVt,{endpointParams:e,logger:t.logger}));Le.aws=oe;var oVt=(e=>async(n,r,i)=>{if(!i)throw Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");let a=await e(n,r,i),o=t(r)?.commandInstance?.constructor?.getEndpointParameterInstructions;if(!o)throw Error(`getEndpointParameterInstructions() is not defined on '${r.commandName}'`);let c=await s(i,{getEndpointParameterInstructions:o},n);return Object.assign(a,c)})(async(e,n,r)=>({operation:t(n).operation,region:await Ae(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));function L8(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`s3`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function R8(e){return{schemeId:`aws.auth#sigv4a`,signingProperties:{name:`s3`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}var sVt=((e,t,n)=>r=>{let i=e(r).properties?.authSchemes;if(!i)return t(r);let a=[];for(let e of i){let{name:t,properties:o={},...s}=e,c=t.toLowerCase();t!==c&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${t}' to '${c}'`);let l;if(c===`sigv4a`){l=`aws.auth#sigv4a`;let e=i.find(e=>{let t=e.name.toLowerCase();return t!==`sigv4a`&&t.startsWith(`sigv4`)});if(ee.sigv4aDependency()===`none`&&e)continue}else if(c.startsWith(`sigv4`))l=`aws.auth#sigv4`;else throw Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${c}'`);let u=n[l];if(!u)throw Error(`Could not find HttpAuthOption create function for '${l}'`);let te=u(r);te.schemeId=l,te.signingProperties={...te.signingProperties||{},...s,...o},a.push(te)}return a})(I8,e=>{let t=[];return e.operation,t.push(L8(e)),t.push(R8(e)),t},{"aws.auth#sigv4":L8,"aws.auth#sigv4a":R8}),cVt=e=>{let t=c(e),n=see(t);return Object.assign(n,{authSchemePreference:Ae(e.authSchemePreference??[])})},lVt=e=>Object.assign(e,{useFipsEndpoint:e.useFipsEndpoint??!1,useDualstackEndpoint:e.useDualstackEndpoint??!1,forcePathStyle:e.forcePathStyle??!1,useAccelerateEndpoint:e.useAccelerateEndpoint??!1,useGlobalEndpoint:e.useGlobalEndpoint??!1,disableMultiregionAccessPoints:e.disableMultiregionAccessPoints??!1,defaultSigningName:`s3`,clientContextParams:e.clientContextParams??{}}),z8=eee({ForcePathStyle:{type:`clientContextParams`,name:`forcePathStyle`},UseArnRegion:{type:`clientContextParams`,name:`useArnRegion`},DisableMultiRegionAccessPoints:{type:`clientContextParams`,name:`disableMultiregionAccessPoints`},Accelerate:{type:`clientContextParams`,name:`useAccelerateEndpoint`},DisableS3ExpressSessionAuth:{type:`clientContextParams`,name:`disableS3ExpressSessionAuth`},UseGlobalEndpoint:{type:`builtInParams`,name:`useGlobalEndpoint`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},`AmazonS3`,`S3Client`,Fe),uVt={Bucket:{type:`contextParams`,name:`Bucket`},Key:{type:`contextParams`,name:`Key`}},dVt={UseS3ExpressControlEndpoint:{type:`staticContextParams`,value:!0},DisableAccessPoints:{type:`staticContextParams`,value:!0},Bucket:{type:`contextParams`,name:`Bucket`}},fVt={DisableS3ExpressSessionAuth:{type:`staticContextParams`,value:!0},Bucket:{type:`contextParams`,name:`Bucket`}},pVt={Bucket:{type:`contextParams`,name:`Bucket`}},mVt={},hVt={Bucket:{type:`contextParams`,name:`Bucket`},Prefix:{type:`contextParams`,name:`Prefix`}},B8=(e,t,n,r)=>[l6(n)],gVt=(e,t,n,r)=>[l6(n),u6(n)],_Vt=(e,t,n,r)=>[l6(n),ZBt(n)],vVt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!0}),l6(n)],yVt=(e,t,n,r)=>[s6(n,{requestChecksumRequired:!1,requestValidationModeMember:`ChecksumMode`,responseAlgorithms:[`CRC64NVME`,`CRC32`,`CRC32C`,`SHA256`,`SHA1`,`SHA512`,`MD5`,`XXHASH64`,`XXHASH3`,`XXHASH128`]}),u6(n),wBt(n)],bVt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!1}),pBt(n),l6(n),u6(n)],xVt=(e,t,n,r)=>[s6(n,{requestAlgorithmMember:{httpHeader:`x-amz-sdk-checksum-algorithm`,name:`ChecksumAlgorithm`},requestChecksumRequired:!1}),l6(n),u6(n)],V8=class e extends Ee{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},SVt=class e extends V8{name=`NoSuchUpload`;$fault=`client`;constructor(t){super({name:`NoSuchUpload`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},CVt=class e extends V8{name=`AccessDenied`;$fault=`client`;constructor(t){super({name:`AccessDenied`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},wVt=class e extends V8{name=`ObjectNotInActiveTierError`;$fault=`client`;constructor(t){super({name:`ObjectNotInActiveTierError`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},TVt=class e extends V8{name=`BucketAlreadyExists`;$fault=`client`;constructor(t){super({name:`BucketAlreadyExists`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},EVt=class e extends V8{name=`BucketAlreadyOwnedByYou`;$fault=`client`;constructor(t){super({name:`BucketAlreadyOwnedByYou`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},DVt=class e extends V8{name=`NoSuchBucket`;$fault=`client`;constructor(t){super({name:`NoSuchBucket`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},OVt=class e extends V8{name=`NoSuchKey`;$fault=`client`;constructor(t){super({name:`NoSuchKey`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},kVt=class e extends V8{name=`InvalidObjectState`;$fault=`client`;StorageClass;AccessTier;constructor(t){super({name:`InvalidObjectState`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype),this.StorageClass=t.StorageClass,this.AccessTier=t.AccessTier}},AVt=class e extends V8{name=`NoSuchAnnotation`;$fault=`client`;constructor(t){super({name:`NoSuchAnnotation`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},jVt=class e extends V8{name=`NotFound`;$fault=`client`;constructor(t){super({name:`NotFound`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},MVt=class e extends V8{name=`InvalidPrefix`;$fault=`client`;constructor(t){super({name:`InvalidPrefix`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},NVt=class e extends V8{name=`EncryptionTypeMismatch`;$fault=`client`;constructor(t){super({name:`EncryptionTypeMismatch`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},PVt=class e extends V8{name=`InvalidRequest`;$fault=`client`;constructor(t){super({name:`InvalidRequest`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},FVt=class e extends V8{name=`InvalidWriteOffset`;$fault=`client`;constructor(t){super({name:`InvalidWriteOffset`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},IVt=class e extends V8{name=`TooManyParts`;$fault=`client`;constructor(t){super({name:`TooManyParts`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},LVt=class e extends V8{name=`AnnotationLimitExceeded`;$fault=`client`;constructor(t){super({name:`AnnotationLimitExceeded`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},RVt=class e extends V8{name=`AnnotationNameTooLong`;$fault=`client`;constructor(t){super({name:`AnnotationNameTooLong`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},zVt=class e extends V8{name=`InvalidAnnotationName`;$fault=`client`;constructor(t){super({name:`InvalidAnnotationName`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},BVt=class e extends V8{name=`UnsupportedMediaType`;$fault=`client`;constructor(t){super({name:`UnsupportedMediaType`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},VVt=class e extends V8{name=`IdempotencyParameterMismatch`;$fault=`client`;constructor(t){super({name:`IdempotencyParameterMismatch`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},HVt=class e extends V8{name=`ObjectAlreadyInActiveTierError`;$fault=`client`;constructor(t){super({name:`ObjectAlreadyInActiveTierError`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},H8=`ACL`,UVt=`AccessDenied`,WVt=`AbortDate`,U8=`AccessKeyId`,GVt=`AnnotationLimitExceeded`,KVt=`AbortMultipartUpload`,qVt=`AbortMultipartUploadOutput`,JVt=`AbortMultipartUploadRequest`,YVt=`AnnotationNameTooLong`,XVt=`AcceptRanges`,ZVt=`AbortRuleId`,QVt=`AccessTier`,W8=`Bucket`,G8=`BucketArn`,$Vt=`BucketAlreadyExists`,eHt=`BucketAlreadyOwnedByYou`,tHt=`BypassGovernanceRetention`,nHt=`BucketInfo`,K8=`BucketKeyEnabled`,rHt=`BucketNamespace`,q8=`BucketRegion`,J8=`Body`,Y8=`Buckets`,X8=`ChecksumAlgorithm`,iHt=`CreateBucket`,Z8=`CreateBucketConfiguration`,aHt=`CreateBucketOutput`,oHt=`CreateBucketRequest`,Q8=`CacheControl`,$8=`ChecksumCRC32`,e5=`ChecksumCRC32C`,t5=`ChecksumCRC64NVME`,n5=`Cache-Control`,sHt=`CreationDate`,r5=`Content-Disposition`,i5=`ContentDisposition`,a5=`Content-Encoding`,o5=`ContentEncoding`,s5=`ContentLanguage`,c5=`Content-Language`,l5=`Content-Length`,u5=`ContentLength`,d5=`Content-MD5`,f5=`ChecksumMD5`,p5=`ContentMD5`,cHt=`CompletedMultipartUpload`,lHt=`CompleteMultipartUploadOutput`,uHt=`CreateMultipartUploadOutput`,dHt=`CompleteMultipartUploadResult`,fHt=`CompleteMultipartUploadRequest`,pHt=`CreateMultipartUploadRequest`,m5=`CompleteMultipartUpload`,mHt=`CreateMultipartUpload`,hHt=`ChecksumMode`,gHt=`CommonPrefix`,_Ht=`CommonPrefixList`,vHt=`CompletedPartList`,yHt=`CompletedPart`,bHt=`CommonPrefixes`,xHt=`ContentRange`,SHt=`Content-Range`,h5=`ChecksumSHA1`,g5=`ChecksumSHA256`,_5=`ChecksumSHA512`,CHt=`CreateSessionOutput`,wHt=`CreateSessionResult`,THt=`CreateSessionRequest`,EHt=`CreateSession`,v5=`ChecksumType`,y5=`Content-Type`,b5=`ContentType`,x5=`ContinuationToken`,S5=`ChecksumXXHASH64`,C5=`ChecksumXXHASH3`,w5=`ChecksumXXHASH128`,DHt=`Contents`,T5=`Credentials`,E5=`DeleteMarker`,OHt=`DisplayName`,kHt=`DeleteObjectOutput`,AHt=`DeleteObjectRequest`,jHt=`DeleteObject`,MHt=`DataRedundancy`,D5=`Delimiter`,O5=`ExpectedBucketOwner`,k5=`ExpiresString`,A5=`ETag`,NHt=`EncryptionTypeMismatch`,j5=`EncodingType`,M5=`Expiration`,N5=`Expires`,PHt=`FetchOwner`,P5=`GrantFullControl`,FHt=`GetObject`,IHt=`GetObjectOutput`,LHt=`GetObjectRequest`,F5=`GrantRead`,I5=`GrantReadACP`,RHt=`GrantWrite`,L5=`GrantWriteACP`,zHt=`InvalidAnnotationName`,BHt=`ID`,R5=`IfMatch`,VHt=`IfMatchInitiatedTime`,HHt=`IfMatchLastModifiedTime`,UHt=`IfMatchSize`,WHt=`If-Modified-Since`,GHt=`IfModifiedSince`,KHt=`InitiateMultipartUploadResult`,z5=`If-Match`,B5=`IfNoneMatch`,V5=`If-None-Match`,qHt=`InvalidObjectState`,JHt=`InvalidPrefix`,YHt=`IdempotencyParameterMismatch`,XHt=`InvalidRequest`,ZHt=`IsRestoreInProgress`,QHt=`IsTruncated`,$Ht=`IfUnmodifiedSince`,eUt=`If-Unmodified-Since`,tUt=`InvalidWriteOffset`,H5=`Key`,nUt=`KeyCount`,U5=`Location`,rUt=`ListAllMyBucketsResult`,iUt=`ListBuckets`,aUt=`ListBucketsOutput`,oUt=`ListBucketsRequest`,sUt=`ListBucketResult`,cUt=`LocationConstraint`,lUt=`LocationInfo`,W5=`LastModified`,uUt=`Last-Modified`,dUt=`ListObjectsV2`,fUt=`ListObjectsV2Output`,pUt=`ListObjectsV2Request`,G5=`Metadata`,mUt=`MaxBuckets`,hUt=`MFA`,K5=`MaxKeys`,gUt=`MissingMeta`,_Ut=`MpuObjectSize`,vUt=`MultipartUpload`,q5=`Name`,yUt=`NextContinuationToken`,bUt=`NotFound`,xUt=`NoSuchAnnotation`,SUt=`NoSuchBucket`,CUt=`NoSuchKey`,wUt=`NoSuchUpload`,J5=`Owner`,TUt=`ObjectAlreadyInActiveTierError`,EUt=`ObjectLockEnabledForBucket`,Y5=`ObjectLockEventHold`,X5=`ObjectLockEventHoldDurationDays`,Z5=`ObjectLockEventHoldDurationYears`,Q5=`ObjectLockLegalHoldStatus`,$5=`ObjectLockMode`,e7=`ObjectLockRetainUntilDate`,DUt=`ObjectList`,OUt=`ObjectNotInActiveTierError`,kUt=`ObjectOwnership`,AUt=`OptionalObjectAttributes`,jUt=`Object`,t7=`Prefix`,MUt=`PartsCount`,n7=`PartNumber`,NUt=`PutObject`,PUt=`PutObjectOutput`,FUt=`PutObjectRequest`,IUt=`PutObjectTagging`,LUt=`PutObjectTaggingOutput`,RUt=`PutObjectTaggingRequest`,zUt=`Parts`,BUt=`Part`,r7=`RequestCharged`,VUt=`ResponseCacheControl`,HUt=`ResponseContentDisposition`,UUt=`ResponseContentEncoding`,WUt=`ResponseContentLanguage`,GUt=`ResponseContentType`,KUt=`ResponseExpires`,qUt=`RestoreExpiryDate`,i7=`RequestPayer`,JUt=`ReplicationStatus`,a7=`RestoreStatus`,o7=`Range`,YUt=`Restore`,s7=`StartAfter`,c7=`SecretAccessKey`,XUt=`StreamingBlob`,l7=`StorageClass`,ZUt=`SessionCredentialValue`,QUt=`SessionCredentials`,$Ut=`SessionMode`,u7=`ServerSideEncryption`,d7=`SSECustomerAlgorithm`,f7=`SSECustomerKey`,p7=`SSECustomerKeyMD5`,m7=`SSEKMSEncryptionContext`,h7=`SSEKMSKeyId`,g7=`SessionToken`,_7=`Size`,eWt=`Tags`,tWt=`TagCount`,nWt=`TooManyParts`,v7=`TagSet`,y7=`Tag`,b7=`Tagging`,x7=`Type`,S7=`UploadId`,rWt=`UnsupportedMediaType`,iWt=`UploadPart`,aWt=`UploadPartOutput`,oWt=`UploadPartRequest`,sWt=`Value`,C7=`VersionId`,cWt=`WriteOffsetBytes`,w7=`WebsiteRedirectLocation`,lWt=`accept-ranges`,uWt=`bucket-region`,T7=`client`,E7=`continuation-token`,dWt=`delimiter`,D7=`error`,fWt=`encoding-type`,pWt=`fetch-owner`,O7=`http`,k7=`httpChecksum`,A7=`httpError`,Q=`httpHeader`,j7=`httpPayload`,M7=`httpPrefixHeaders`,N7=`httpQuery`,mWt=`max-buckets`,hWt=`max-keys`,P7=`prefix`,F7=`partNumber`,gWt=`response-cache-control`,_Wt=`response-content-disposition`,vWt=`response-content-encoding`,yWt=`response-content-language`,bWt=`response-content-type`,xWt=`response-expires`,I7=`smithy.ts.sdk.synthetic.com.amazonaws.s3`,SWt=`start-after`,CWt=`streaming`,L7=`uploadId`,R7=`versionId`,z7=`xmlFlattened`,B7=`xmlName`,V7=`x-amz-acl`,wWt=`x-amz-abort-date`,TWt=`x-amz-abort-rule-id`,EWt=`x-amz-bucket-arn`,DWt=`x-amz-bypass-governance-retention`,OWt=`x-amz-bucket-namespace`,kWt=`x-amz-bucket-object-lock-enabled`,H7=`x-amz-checksum-algorithm`,U7=`x-amz-checksum-crc32`,W7=`x-amz-checksum-crc32c`,G7=`x-amz-checksum-crc64nvme`,K7=`x-amz-checksum-md5`,AWt=`x-amz-checksum-mode`,q7=`x-amz-checksum-sha1`,J7=`x-amz-checksum-sha256`,Y7=`x-amz-checksum-sha512`,jWt=`x-amz-create-session-mode`,X7=`x-amz-checksum-type`,Z7=`x-amz-checksum-xxhash64`,Q7=`x-amz-checksum-xxhash3`,$7=`x-amz-checksum-xxhash128`,e9=`x-amz-delete-marker`,t9=`x-amz-expiration`,n9=`x-amz-expected-bucket-owner`,r9=`x-amz-grant-full-control`,i9=`x-amz-grant-read`,a9=`x-amz-grant-read-acp`,MWt=`x-amz-grant-write`,o9=`x-amz-grant-write-acp`,NWt=`x-amz-if-match-initiated-time`,PWt=`x-amz-if-match-last-modified-time`,FWt=`x-amz-if-match-size`,s9=`x-amz-meta-`,IWt=`x-amz-mfa`,LWt=`x-amz-missing-meta`,RWt=`x-amz-mp-object-size`,zWt=`x-amz-mp-parts-count`,c9=`x-amz-object-lock-event-hold`,l9=`x-amz-object-lock-event-hold-duration-days`,u9=`x-amz-object-lock-event-hold-duration-years`,d9=`x-amz-object-lock-legal-hold`,f9=`x-amz-object-lock-mode`,p9=`x-amz-object-lock-retain-until-date`,BWt=`x-amz-object-ownership`,VWt=`x-amz-optional-object-attributes`,HWt=`x-amz-object-size`,UWt=`x-amz-restore`,m9=`x-amz-request-charged`,h9=`x-amz-request-payer`,WWt=`x-amz-replication-status`,g9=`x-amz-storage-class`,_9=`x-amz-sdk-checksum-algorithm`,v9=`x-amz-server-side-encryption`,y9=`x-amz-server-side-encryption-aws-kms-key-id`,b9=`x-amz-server-side-encryption-bucket-key-enabled`,x9=`x-amz-server-side-encryption-context`,S9=`x-amz-server-side-encryption-customer-algorithm`,C9=`x-amz-server-side-encryption-customer-key`,w9=`x-amz-server-side-encryption-customer-key-MD5`,T9=`x-amz-tagging`,GWt=`x-amz-tagging-count`,E9=`x-amz-version-id`,KWt=`x-amz-write-offset-bytes`,D9=`x-amz-website-redirect-location`,$=`com.amazonaws.s3`,O9=pt.for(I7),qWt=[-3,I7,`S3ServiceException`,0,[],[]];O9.registerError(qWt,V8);var k9=pt.for($),JWt=[-3,$,UVt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(JWt,CVt);var YWt=[-3,$,GVt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(YWt,LVt);var XWt=[-3,$,YVt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(XWt,RVt);var ZWt=[-3,$,$Vt,{[D7]:T7,[A7]:409},[],[]];k9.registerError(ZWt,TVt);var QWt=[-3,$,eHt,{[D7]:T7,[A7]:409},[],[]];k9.registerError(QWt,EVt);var $Wt=[-3,$,NHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError($Wt,NVt);var eGt=[-3,$,YHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(eGt,VVt);var tGt=[-3,$,zHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(tGt,zVt);var nGt=[-3,$,qHt,{[D7]:T7,[A7]:403},[l7,QVt],[0,0]];k9.registerError(nGt,kVt);var rGt=[-3,$,JHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(rGt,MVt);var iGt=[-3,$,XHt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(iGt,PVt);var aGt=[-3,$,tUt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(aGt,FVt);var oGt=[-3,$,xUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(oGt,AVt);var sGt=[-3,$,SUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(sGt,DVt);var cGt=[-3,$,CUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(cGt,OVt);var lGt=[-3,$,wUt,{[D7]:T7,[A7]:404},[],[]];k9.registerError(lGt,SVt);var uGt=[-3,$,bUt,{[D7]:T7},[],[]];k9.registerError(uGt,jVt);var dGt=[-3,$,TUt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(dGt,HVt);var fGt=[-3,$,OUt,{[D7]:T7,[A7]:403},[],[]];k9.registerError(fGt,wVt);var pGt=[-3,$,nWt,{[D7]:T7,[A7]:400},[],[]];k9.registerError(pGt,IVt);var mGt=[-3,$,rWt,{[D7]:T7,[A7]:415},[],[]];k9.registerError(mGt,BVt);var hGt=[O9,k9],A9=[0,$,ZUt,8,0],j9=[0,$,f7,8,0],M9=[0,$,m7,8,0],N9=[0,$,h7,8,0],P9=[0,$,XUt,{[CWt]:1},42],gGt=[3,$,qVt,0,[r7],[[0,{[Q]:m9}]]],_Gt=[3,$,JVt,0,[W8,H5,S7,i7,O5,VHt],[[0,1],[0,1],[0,{[N7]:L7}],[0,{[Q]:h9}],[0,{[Q]:n9}],[6,{[Q]:NWt}]],3],vGt=[3,$,W8,0,[q5,sHt,q8,G8],[0,4,0,0]],yGt=[3,$,nHt,0,[MHt,x7],[0,0]],bGt=[3,$,gHt,0,[t7],[0]],xGt=[3,$,cHt,0,[zUt],[[()=>eKt,{[z7]:1,[B7]:BUt}]]],SGt=[3,$,yHt,0,[A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,n7],[0,0,0,0,0,0,0,0,0,0,0,1]],CGt=[3,$,lHt,{[B7]:dHt},[U5,W8,H5,M5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,u7,C7,h7,K8,r7],[0,0,0,[0,{[Q]:t9}],0,0,0,0,0,0,0,0,0,0,0,0,[0,{[Q]:v9}],[0,{[Q]:E9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:m9}]]],wGt=[3,$,fHt,0,[W8,H5,S7,vUt,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,_Ut,i7,O5,R5,B5,d7,f7,p7],[[0,1],[0,1],[0,{[N7]:L7}],[()=>xGt,{[j7]:1,[B7]:m5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[1,{[Q]:RWt}],[0,{[Q]:h9}],[0,{[Q]:n9}],[0,{[Q]:z5}],[0,{[Q]:V5}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}]],3],TGt=[3,$,Z8,0,[cUt,U5,W8,eWt],[0,()=>BGt,()=>yGt,[()=>I9,0]]],EGt=[3,$,aHt,0,[U5,G8],[[0,{[Q]:U5}],[0,{[Q]:EWt}]]],DGt=[3,$,oHt,0,[W8,H8,Z8,P5,F5,I5,RHt,L5,EUt,kUt,rHt],[[0,1],[0,{[Q]:V7}],[()=>TGt,{[j7]:1,[B7]:Z8}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:MWt}],[0,{[Q]:o9}],[2,{[Q]:kWt}],[0,{[Q]:BWt}],[0,{[Q]:OWt}]],1],OGt=[3,$,uHt,{[B7]:KHt},[WVt,ZVt,W8,H5,S7,u7,d7,p7,h7,m7,K8,r7,X8,v5],[[4,{[Q]:wWt}],[0,{[Q]:TWt}],[0,{[B7]:W8}],0,0,[0,{[Q]:v9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:m9}],[0,{[Q]:H7}],[0,{[Q]:X7}]]],kGt=[3,$,pHt,0,[W8,H5,H8,Q8,i5,o5,s5,b5,N5,P5,F5,I5,L5,G5,u7,l7,w7,d7,f7,p7,h7,m7,K8,i7,b7,$5,e7,Q5,Y5,X5,Z5,O5,X8,v5],[[0,1],[0,1],[0,{[Q]:V7}],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[0,{[Q]:y5}],[4,{[Q]:N5}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:o9}],[128,{[M7]:s9}],[0,{[Q]:v9}],[0,{[Q]:g9}],[0,{[Q]:D9}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:h9}],[0,{[Q]:T9}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}],[0,{[Q]:n9}],[0,{[Q]:H7}],[0,{[Q]:X7}]],2],AGt=[3,$,CHt,{[B7]:wHt},[T5,u7,h7,m7,K8],[[()=>qGt,{[B7]:T5}],[0,{[Q]:v9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}]],1],jGt=[3,$,THt,0,[W8,$Ut,u7,h7,m7,K8],[[0,1],[0,{[Q]:jWt}],[0,{[Q]:v9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}]],1],MGt=[3,$,kHt,0,[E5,C7,r7],[[2,{[Q]:e9}],[0,{[Q]:E9}],[0,{[Q]:m9}]]],NGt=[3,$,AHt,0,[W8,H5,hUt,C7,i7,tHt,O5,R5,HHt,UHt],[[0,1],[0,1],[0,{[Q]:IWt}],[0,{[N7]:R7}],[0,{[Q]:h9}],[2,{[Q]:DWt}],[0,{[Q]:n9}],[0,{[Q]:z5}],[6,{[Q]:PWt}],[1,{[Q]:FWt}]],2],PGt=[3,$,IHt,0,[J8,E5,XVt,M5,YUt,W5,u5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,gUt,C7,Q8,i5,o5,s5,xHt,b5,N5,k5,w7,u7,G5,d7,p7,h7,K8,l7,r7,JUt,MUt,tWt,$5,e7,Q5,Y5,X5,Z5],[[()=>P9,16],[2,{[Q]:e9}],[0,{[Q]:lWt}],[0,{[Q]:t9}],[0,{[Q]:UWt}],[4,{[Q]:uUt}],[1,{[Q]:l5}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[1,{[Q]:LWt}],[0,{[Q]:E9}],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[0,{[Q]:SHt}],[0,{[Q]:y5}],[4,{[Q]:N5}],[0,{[Q]:k5}],[0,{[Q]:D9}],[0,{[Q]:v9}],[128,{[M7]:s9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:g9}],[0,{[Q]:m9}],[0,{[Q]:WWt}],[1,{[Q]:zWt}],[1,{[Q]:GWt}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}]]],FGt=[3,$,LHt,0,[W8,H5,R5,GHt,B5,$Ht,o7,VUt,HUt,UUt,WUt,GUt,KUt,C7,d7,f7,p7,i7,n7,O5,hHt],[[0,1],[0,1],[0,{[Q]:z5}],[4,{[Q]:WHt}],[0,{[Q]:V5}],[4,{[Q]:eUt}],[0,{[Q]:o7}],[0,{[N7]:gWt}],[0,{[N7]:_Wt}],[0,{[N7]:vWt}],[0,{[N7]:yWt}],[0,{[N7]:bWt}],[6,{[N7]:xWt}],[0,{[N7]:R7}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[0,{[Q]:h9}],[1,{[N7]:F7}],[0,{[Q]:n9}],[0,{[Q]:AWt}]],2],IGt=[3,$,aUt,{[B7]:rUt},[Y8,J5,x5,t7],[[()=>QGt,0],()=>F9,0,0]],LGt=[3,$,oUt,0,[mUt,x5,t7,q8],[[1,{[N7]:mWt}],[0,{[N7]:E7}],[0,{[N7]:P7}],[0,{[N7]:uWt}]]],RGt=[3,$,fUt,{[B7]:sUt},[QHt,DHt,q5,t7,D5,K5,bHt,j5,nUt,x5,yUt,s7,r7],[2,[()=>tKt,{[z7]:1}],0,0,0,1,[()=>$Gt,{[z7]:1}],0,1,0,0,0,[0,{[Q]:m9}]]],zGt=[3,$,pUt,0,[W8,D5,j5,K5,t7,x5,PHt,s7,i7,O5,AUt],[[0,1],[0,{[N7]:dWt}],[0,{[N7]:fWt}],[1,{[N7]:hWt}],[0,{[N7]:P7}],[0,{[N7]:E7}],[2,{[N7]:pWt}],[0,{[N7]:SWt}],[0,{[Q]:h9}],[0,{[Q]:n9}],[64,{[Q]:VWt}]],1],BGt=[3,$,lUt,0,[x7,q5],[0,0]],VGt=[3,$,jUt,0,[H5,W5,A5,X8,v5,_7,l7,J5,a7],[0,4,0,[64,{[z7]:1}],0,1,0,()=>F9,()=>KGt]],F9=[3,$,J5,0,[OHt,BHt],[0,0]],HGt=[3,$,PUt,0,[M5,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,v5,u7,C7,d7,p7,h7,m7,K8,_7,r7],[[0,{[Q]:t9}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:X7}],[0,{[Q]:v9}],[0,{[Q]:E9}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[1,{[Q]:HWt}],[0,{[Q]:m9}]]],UGt=[3,$,FUt,0,[W8,H5,H8,J8,Q8,i5,o5,s5,u5,p5,b5,X8,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,N5,R5,B5,P5,F5,I5,L5,cWt,G5,u7,l7,w7,d7,f7,p7,h7,m7,K8,i7,b7,$5,e7,Q5,Y5,X5,Z5,O5],[[0,1],[0,1],[0,{[Q]:V7}],[()=>P9,16],[0,{[Q]:n5}],[0,{[Q]:r5}],[0,{[Q]:a5}],[0,{[Q]:c5}],[1,{[Q]:l5}],[0,{[Q]:d5}],[0,{[Q]:y5}],[0,{[Q]:_9}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[4,{[Q]:N5}],[0,{[Q]:z5}],[0,{[Q]:V5}],[0,{[Q]:r9}],[0,{[Q]:i9}],[0,{[Q]:a9}],[0,{[Q]:o9}],[1,{[Q]:KWt}],[128,{[M7]:s9}],[0,{[Q]:v9}],[0,{[Q]:g9}],[0,{[Q]:D9}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[()=>M9,{[Q]:x9}],[2,{[Q]:b9}],[0,{[Q]:h9}],[0,{[Q]:T9}],[0,{[Q]:f9}],[5,{[Q]:p9}],[0,{[Q]:d9}],[0,{[Q]:c9}],[1,{[Q]:l9}],[1,{[Q]:u9}],[0,{[Q]:n9}]],2],WGt=[3,$,LUt,0,[C7],[[0,{[Q]:E9}]]],GGt=[3,$,RUt,0,[W8,H5,b7,C7,p5,X8,O5,i7],[[0,1],[0,1],[()=>YGt,{[j7]:1,[B7]:b7}],[0,{[N7]:R7}],[0,{[Q]:d5}],[0,{[Q]:_9}],[0,{[Q]:n9}],[0,{[Q]:h9}]],3],KGt=[3,$,a7,0,[ZHt,qUt],[2,4]],qGt=[3,$,QUt,0,[U8,c7,g7,M5],[[0,{[B7]:U8}],[()=>A9,{[B7]:c7}],[()=>A9,{[B7]:g7}],[4,{[B7]:M5}]],4],JGt=[3,$,y7,0,[H5,sWt],[0,0],2],YGt=[3,$,b7,0,[v7],[[()=>I9,0]],1],XGt=[3,$,aWt,0,[u7,A5,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,d7,p7,h7,K8,r7],[[0,{[Q]:v9}],[0,{[Q]:A5}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:S9}],[0,{[Q]:w9}],[()=>N9,{[Q]:y9}],[2,{[Q]:b9}],[0,{[Q]:m9}]]],ZGt=[3,$,oWt,0,[W8,H5,n7,S7,J8,u5,p5,X8,$8,e5,t5,h5,g5,_5,f5,S5,C5,w5,d7,f7,p7,i7,O5],[[0,1],[0,1],[1,{[N7]:F7}],[0,{[N7]:L7}],[()=>P9,16],[1,{[Q]:l5}],[0,{[Q]:d5}],[0,{[Q]:_9}],[0,{[Q]:U7}],[0,{[Q]:W7}],[0,{[Q]:G7}],[0,{[Q]:q7}],[0,{[Q]:J7}],[0,{[Q]:Y7}],[0,{[Q]:K7}],[0,{[Q]:Z7}],[0,{[Q]:Q7}],[0,{[Q]:$7}],[0,{[Q]:S9}],[()=>j9,{[Q]:C9}],[0,{[Q]:w9}],[0,{[Q]:h9}],[0,{[Q]:n9}]],4],QGt=[1,$,Y8,0,[()=>vGt,{[B7]:W8}]],$Gt=[1,$,_Ht,0,()=>bGt],eKt=[1,$,vHt,0,()=>SGt],tKt=[1,$,DUt,0,[()=>VGt,0]],I9=[1,$,v7,0,[()=>JGt,{[B7]:y7}]],nKt=[9,$,KVt,{[O7]:[`DELETE`,`/{Key+}?x-id=AbortMultipartUpload`,204]},()=>_Gt,()=>gGt],rKt=[9,$,m5,{[O7]:[`POST`,`/{Key+}`,200]},()=>wGt,()=>CGt],iKt=[9,$,iHt,{[O7]:[`PUT`,`/`,200]},()=>DGt,()=>EGt],aKt=[9,$,mHt,{[O7]:[`POST`,`/{Key+}?uploads`,200]},()=>kGt,()=>OGt],oKt=[9,$,EHt,{[O7]:[`GET`,`/?session`,200]},()=>jGt,()=>AGt],sKt=[9,$,jHt,{[O7]:[`DELETE`,`/{Key+}?x-id=DeleteObject`,204]},()=>NGt,()=>MGt],cKt=[9,$,FHt,{[k7]:`-`,[O7]:[`GET`,`/{Key+}?x-id=GetObject`,200]},()=>FGt,()=>PGt],lKt=[9,$,iUt,{[O7]:[`GET`,`/?x-id=ListBuckets`,200]},()=>LGt,()=>IGt],uKt=[9,$,dUt,{[O7]:[`GET`,`/?list-type=2`,200]},()=>zGt,()=>RGt],dKt=[9,$,NUt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?x-id=PutObject`,200]},()=>UGt,()=>HGt],fKt=[9,$,IUt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?tagging`,200]},()=>GGt,()=>WGt],pKt=[9,$,iWt,{[k7]:`-`,[O7]:[`PUT`,`/{Key+}?x-id=UploadPart`,200]},()=>ZGt,()=>XGt],mKt=class extends z8(fVt,B8,`CreateSession`,oKt){},hKt={name:`@aws-sdk/client-s3`,version:`3.1135.0`,description:`AWS SDK for JavaScript S3 Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-s3`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:browser":`yarn g:vitest run -c vitest.config.browser.mts`,"test:browser:watch":`yarn g:vitest watch -c vitest.config.browser.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/checksums":`^3.1001.0`,"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/middleware-sdk-s3":`^3.972.76`,"@aws-sdk/signature-v4-multi-region":`^3.996.46`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@aws-sdk/signature-v4-crt":`3.1135.0`,"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},L9=64,R9=20,z9=new Int32Array([1732584193,4023233417,2562383102,271733878,3285377520]),gKt=new Int32Array([1518500249,1859775393,2400959708,3395469782]),_Kt=class e{digestLength=R9;state=Int32Array.from(z9);w;buffer=new Uint8Array(L9);bufferLength=0;bytesHashed=0;finished=!1;inner;outer;constructor(t){if(t){let n=e.normalizeKey(t);this.inner=new e,this.outer=new e;let r=new Uint8Array(128);for(let e=0;e0){for(;n>0&&this.bufferLength=L9;)this.hashBuffer(e,t),t+=L9,n-=L9;for(;n>0;)this.buffer[this.bufferLength++]=e[t++],--n}async digest(){if(this.inner&&this.outer){if(this.finished)throw Error(`Attempted to digest an already finished HMAC.`);this.finished=!0;let e=this.inner.digestSync();return this.outer.update(e),this.outer.digestSync()}return this.digestSync()}reset(){this.state=Int32Array.from(z9),this.buffer=new Uint8Array(L9),this.bufferLength=0,this.bytesHashed=0}digestSync(){let e=this.state.slice(),t=this.buffer.slice(),n=this.bufferLength,r=this.bytesHashed/536870912|0,i=this.bytesHashed<<3;if(t[n++]=128,n>56){for(let e=n;e>>24&255,o[1]=e[0]>>>16&255,o[2]=e[0]>>>8&255,o[3]=e[0]&255,o[4]=e[1]>>>24&255,o[5]=e[1]>>>16&255,o[6]=e[1]>>>8&255,o[7]=e[1]&255,o[8]=e[2]>>>24&255,o[9]=e[2]>>>16&255,o[10]=e[2]>>>8&255,o[11]=e[2]&255,o[12]=e[3]>>>24&255,o[13]=e[3]>>>16&255,o[14]=e[3]>>>8&255,o[15]=e[3]&255,o[16]=e[4]>>>24&255,o[17]=e[4]>>>16&255,o[18]=e[4]>>>8&255,o[19]=e[4]&255,o}static normalizeKey(t){let n=Ce(t);if(n.byteLength>L9){let t=new e;t.update(n);let r=t.digestSync(),i=new Uint8Array(L9);return i.set(r),i}let r=new Uint8Array(L9);return r.set(n),r}hashBuffer(e,t){this.hashBufferWith(this.state,e,t)}hashBufferWith(e,t,n){let r=this.w??=new Int32Array(80),i=e[0],a=e[1],o=e[2],s=e[3],c=e[4];for(let e=0;e<16;++e)r[e]=(t[n+e*4]&255)<<24|(t[n+e*4+1]&255)<<16|(t[n+e*4+2]&255)<<8|t[n+e*4+3]&255;for(let e=16;e<80;++e){let t=r[e-3]^r[e-8]^r[e-14]^r[e-16];r[e]=t<<1|t>>>31}for(let e=0;e<80;++e){let t=e<20?0:e<40?1:e<60?2:3,n=((i<<5|i>>>27)+(t===0?a&o^~a&s:t===2?a&o^a&s^o&s:a^o^s)|0)+(c+(gKt[t]+r[e]|0)|0)|0;c=s,s=o,o=a<<30|a>>>2,a=i,i=n}e[0]=e[0]+i|0,e[1]=e[1]+a|0,e[2]=e[2]+o|0,e[3]=e[3]+s|0,e[4]=e[4]+c|0}},vKt=e=>({apiVersion:`2006-03-01`,base64Decoder:e?.base64Decoder??d,base64Encoder:e?.base64Encoder??ge,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??I8,extensions:e?.extensions??[],getAwsChunkedEncodingStream:e?.getAwsChunkedEncodingStream??wee,httpAuthSchemeProvider:e?.httpAuthSchemeProvider??sVt,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Ue},{schemeId:`aws.auth#sigv4a`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4a`),signer:new n}],logger:e?.logger??new de,md5:e?.md5??Qee,protocol:e?.protocol??GBt,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.s3`,errorTypeRegistries:hGt,xmlNamespace:`http://s3.amazonaws.com/doc/2006-03-01/`,version:`2006-03-01`,serviceTarget:`AmazonS3`},sdkStreamMixin:e?.sdkStreamMixin??St,serviceId:e?.serviceId??`S3`,sha1:e?.sha1??_Kt,sha256:e?.sha256??it,signerConstructor:e?.signerConstructor??ee,signingEscapePath:e?.signingEscapePath??!1,urlParser:e?.urlParser??Me,useArnRegion:e?.useArnRegion??void 0,utf8Decoder:e?.utf8Decoder??mt,utf8Encoder:e?.utf8Encoder??_t}),yKt=e=>{let t=he(e),n=()=>t().then(a),r=vKt(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??u,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:hKt.version}),eventStreamSerdeProvider:e?.eventStreamSerdeProvider??vt,maxAttempts:e?.maxAttempts??3,region:e?.region??Qe(`Region is missing`),requestHandler:Se.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||ze),streamCollector:e?.streamCollector??Ke,streamHasher:e?.streamHasher??Zee,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},bKt=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},xKt=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),SKt=(e,t)=>{let n=Object.assign(fe(e),be(e),$e(e),bKt(e));return t.forEach(e=>e.configure(n)),Object.assign(e,pe(n),ft(n),He(n),xKt(n))},CKt=class extends le{config;constructor(...[t]){let n=yKt(t||{});super(n),this.initConfig=n;let r=lVt(n),i=cBt(dt(r)),a=e(i),o=te(a),s=ke(o),c=SKt(xBt(cVt(jf(at(s))),{session:[()=>this,mKt]}),t?.extensions||[]);this.config=c,this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(qe(this.config)),this.middlewareStack.use(je(this.config)),this.middlewareStack.use(se(this.config)),this.middlewareStack.use(Ze(this.config)),this.middlewareStack.use(ce(this.config,{httpAuthSchemeParametersProvider:oVt,identityProviderConfigProvider:async e=>new we({"aws.auth#sigv4":e.credentials,"aws.auth#sigv4a":e.credentials})})),this.middlewareStack.use(De(this.config)),this.middlewareStack.use(WBt(this.config)),this.middlewareStack.use(JBt(this.config)),this.middlewareStack.use(vBt(this.config)),this.middlewareStack.use(kBt(this.config)),this.middlewareStack.use(PBt(this.config))}destroy(){super.destroy()}},B9=`${window.location.protocol}//localhost:9999`,wKt=`${window.location.protocol}//localhost:8443`,V9=null,H9=null,U9=null,W9=null,G9=null,K9=null,q9=null,J9=null,Y9=null,X9=null,Z9=null,Q9=null,$9=null;function TKt(){if(!V9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);V9=new RBe({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),V9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return V9}function EKt(){if(!H9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);H9=new Eat({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),H9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return H9}function DKt(){if(!U9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);U9=new iht({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),U9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return U9}function OKt(){if(!W9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);W9=new Mne({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),W9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return W9}function kKt(){if(!G9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);G9=new bCt({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),G9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return G9}function AKt(){if(!q9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);q9=new RKe({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),q9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return q9}function jKt(){if(!J9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);J9=new N8e({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),J9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return J9}function MKt(){if(!Y9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);Y9=new Vzt({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Y9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Y9}function NKt(){if(!K9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);K9=new CKt({endpoint:wKt,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken},forcePathStyle:!0}),K9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&t.request.path.endsWith(`/`)&&t.request.path!==`/`&&(t.request.path=t.request.path.slice(0,-1)),await e(t)),{step:`build`,name:`removeTrailingSlash`}),K9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/s3${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return K9}function PKt(){if(!X9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);X9=new zue({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),X9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return X9}function FKt(){if(!Z9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);Z9=new Eme({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Z9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Z9}function IKt(){if(!Q9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);Q9=new Ss({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),Q9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return Q9}function LKt(){if(!$9){let e=Je();if(!e)throw Error(`AWS credentials not configured`);$9=new sCe({endpoint:B9,region:tt(),credentials:{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken}}),$9.middlewareStack.add(e=>async t=>(ve.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}return $9}function RKt(){V9=null,H9=null,U9=null,W9=null,G9=null,K9=null,q9=null,J9=null,Y9=null,X9=null,Z9=null,Q9=null,$9=null}export{wzt as $,vBe as $i,dat as $n,vze as $r,iCt as $t,hVt as A,Os as Aa,Yze as Ai,Gmt as An,bKe as Ar,FSt as At,dzt as B,Ene as Ba,aBe as Bi,Qit as Bn,AKe as Br,GSt as Bt,dKt as C,Due as Ca,Hze as Ci,Rmt as Cn,S8e as Cr,OSt as Ct,dVt as D,jue as Da,Kze as Di,Hmt as Dn,E8e as Dr,MSt as Dt,uVt as E,Aue as Ea,Gze as Ei,Vmt as En,T8e as Er,jSt as Et,_Vt as F,ms as Fa,eBe as Fi,Xmt as Fn,TKe as Fr,BSt as Ft,gzt as G,uBe as Gi,rat as Gn,WBe as Gr,XSt as Gt,pzt as H,sBe as Hi,eat as Hn,MKe as Hr,qSt as Ht,vVt as I,hs as Ia,tBe as Ii,Zmt as In,EKe as Ir,VSt as It,yzt as J,pBe as Ji,oat as Jn,pze as Jr,$St as Jt,_zt as K,dBe as Ki,iat as Kn,dze as Kr,ZSt as Kt,yVt as L,gs as La,rBe as Li,Qmt as Ln,DKe as Lr,HSt as Lt,gVt as M,ds as Ma,Zze as Mi,qmt as Mn,SKe as Mr,LSt as Mt,bVt as N,fs as Na,$ze as Ni,Jmt as Nn,CKe as Nr,RSt as Nt,pVt as O,Mue as Oa,qze as Oi,Umt as On,D8e as Or,NSt as Ot,xVt as P,ps as Pa,Qze as Pi,Ymt as Pn,wKe as Pr,zSt as Pt,Czt as Q,_Be as Qi,uat as Qn,_ze as Qr,rCt as Qt,z8 as R,zne as Ra,nBe as Ri,Mat as Rn,OKe as Rr,USt as Rt,uKt as S,Eue as Sa,Vze as Si,Lmt as Sn,x8e as Sr,DSt as St,pKt as T,kue as Ta,Wze as Ti,Bmt as Tn,w8e as Tr,ASt as Tt,mzt as U,cBe as Ui,tat as Un,tW as Ur,JSt as Ut,fzt as V,cn as Va,oBe as Vi,$it as Vn,jKe as Vr,KSt as Vt,hzt as W,lBe as Wi,nat as Wn,nW as Wr,YSt as Wt,xzt as X,hBe as Xi,cat as Xn,hze as Xr,tCt as Xt,bzt as Y,mBe as Yi,sat as Yn,mze as Yr,eCt as Yt,Szt as Z,gBe as Zi,lat as Zn,gze as Zr,nCt as Zt,iKt as _,Kme as _a,Ize as _i,Mmt as _n,g8e as _r,SSt as _t,IKt as a,wBe as aa,wze as ai,uCt as an,_at as ar,Azt as at,cKt as b,Gue as ba,zze as bi,Fmt as bn,y8e as br,TSt as bt,AKt as c,DBe as ca,Dze as ci,pCt as cn,bat as cr,Nzt as ct,DKt as d,ABe as da,Aze as di,Emt as dn,u8e as dr,ECt as dt,yBe as ea,yze as ei,aCt as en,fat as er,Tzt as et,kKt as f,jBe as fa,jze as fi,Dmt as fn,d8e as fr,_St as ft,rKt as g,tCe as ga,Fze as gi,jmt as gn,h8e as gr,xSt as gt,nKt as h,eCe as ha,Pze as hi,Amt as hn,m8e as hr,bSt as ht,FKt as i,CBe as ia,Cze as ii,lCt as in,gat as ir,kzt as it,B8 as j,us as ja,Xze as ji,Kmt as jn,xKe as jr,ISt as jt,mVt as k,Nue as ka,Jze as ki,Wmt as kn,WKe as kr,PSt as kt,jKt as l,OBe as la,Oze as li,mCt as ln,z8e as lr,Pzt as lt,NKt as m,pCe as ma,Nze as mi,kmt as mn,p8e as mr,ySt as mt,OKt as n,xBe as na,xze as ni,sCt as nn,mat as nr,Dzt as nt,LKt as o,TBe as oa,Tze as oi,dCt as on,vat as or,jzt as ot,MKt as p,MBe as pa,Mze as pi,Omt as pn,f8e as pr,vSt as pt,vzt as q,fBe as qi,aat as qn,fze as qr,QSt as qt,PKt as r,SBe as ra,Sze as ri,cCt as rn,hat as rr,Ozt as rt,TKt as s,EBe as sa,Eze as si,fCt as sn,yat as sr,Mzt as st,RKt as t,bBe as ta,bze as ti,oCt as tn,pat as tr,Ezt as tt,EKt as u,kBe as ua,kze as ui,uht as un,l8e as ur,Fzt as ut,aKt as v,xp as va,Lze as vi,Nmt as vn,_8e as vr,CSt as vt,fKt as w,Oue as wa,Uze as wi,zmt as wn,C8e as wr,kSt as wt,lKt as x,jf as xa,Bze as xi,Imt as xn,b8e as xr,ESt as xt,sKt as y,bme as ya,Rze as yi,Pmt as yn,v8e as yr,wSt as yt,uzt as z,Tne as za,iBe as zi,Zit as zn,kKe as zr,WSt as zt}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-CjKy1JE5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-wsXUoJ12.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-CjKy1JE5.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-wsXUoJ12.js index e7676c7b1..0ff038397 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-CjKy1JE5.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/back-link-wsXUoJ12.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-Dhy4xOXd.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";var i={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};i.node;var a=r(i),o=t(),s=e();function c(e){let t=(0,o.c)(7),r,i;t[0]===e?(r=t[1],i=t[2]):({children:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,s.jsx)(a,{className:`size-4`}),t[3]=c):c=t[3];let l;return t[4]!==r||t[5]!==i?(l=(0,s.jsxs)(n,{className:`mb-6 inline-flex items-center gap-2 text-sm`,...i,children:[c,r]}),t[4]=r,t[5]=i,t[6]=l):l=t[6],l}export{c as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-BokOReHc.js";import{t as r}from"./createLucideIcon-BQgzNCBR.js";var i={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};i.node;var a=r(i),o=t(),s=e();function c(e){let t=(0,o.c)(7),r,i;t[0]===e?(r=t[1],i=t[2]):({children:r,...i}=e,t[0]=e,t[1]=r,t[2]=i);let c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,s.jsx)(a,{className:`size-4`}),t[3]=c):c=t[3];let l;return t[4]!==r||t[5]!==i?(l=(0,s.jsxs)(n,{className:`mb-6 inline-flex items-center gap-2 text-sm`,...i,children:[c,r]}),t[4]=r,t[5]=i,t[6]=l):l=t[6],l}export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-B_ExXcw2.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-6vbuGFqk.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-B_ExXcw2.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-6vbuGFqk.js index ed93d67e2..60f82c383 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-B_ExXcw2.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/badge-6vbuGFqk.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{f as t,t as n}from"./dist-BKgR2qk6.js";import{t as r}from"./useRender-2pqPQOAE.js";import{tn as i}from"./cluster-config-xw_Q7X1e.js";var a=e(),o=n(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium whitespace-nowrap transition-all transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-2.5!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border bg-input/20 text-foreground dark:bg-input/30 [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function s(e){let n=(0,a.c)(13),s,c,l,u,d;if(n[0]!==e){let{className:a,variant:f,render:p,...m}=e;s=p,d=f===void 0?`default`:f,u=r,c=`span`,l=t({className:i(o({className:a,variant:d}))},m),n[0]=e,n[1]=s,n[2]=c,n[3]=l,n[4]=u,n[5]=d}else s=n[1],c=n[2],l=n[3],u=n[4],d=n[5];let f;n[6]===d?f=n[7]:(f={slot:`badge`,variant:d},n[6]=d,n[7]=f);let p;return n[8]!==s||n[9]!==c||n[10]!==l||n[11]!==f?(p={defaultTagName:c,props:l,render:s,state:f},n[8]=s,n[9]=c,n[10]=l,n[11]=f,n[12]=p):p=n[12],u(p)}export{s as t}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{f as t,t as n}from"./dist-DeC3TnAR.js";import{t as r}from"./useRender-C4GZPWLS.js";import{nn as i}from"./cluster-config-DkOiY8HH.js";var a=e(),o=n(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium whitespace-nowrap transition-all transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-2.5!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border bg-input/20 text-foreground dark:bg-input/30 [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function s(e){let n=(0,a.c)(13),s,c,l,u,d;if(n[0]!==e){let{className:a,variant:f,render:p,...m}=e;s=p,d=f===void 0?`default`:f,u=r,c=`span`,l=t({className:i(o({className:a,variant:d}))},m),n[0]=e,n[1]=s,n[2]=c,n[3]=l,n[4]=u,n[5]=d}else s=n[1],c=n[2],l=n[3],u=n[4],d=n[5];let f;n[6]===d?f=n[7]:(f={slot:`badge`,variant:d},n[6]=d,n[7]=f);let p;return n[8]!==s||n[9]!==c||n[10]!==l||n[11]!==f?(p={defaultTagName:c,props:l,render:s,state:f},n[8]=s,n[9]=c,n[10]=l,n[11]=f,n[12]=p):p=n[12],u(p)}export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-Ct-f5HCJ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-BF8FfWcf.js similarity index 63% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-Ct-f5HCJ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-BF8FfWcf.js index ce68e0989..d6e46f6dd 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-Ct-f5HCJ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-BF8FfWcf.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Fa as t,Ia as n,Pa as r,a as i}from"./awsClient-b0hcP1Iz.js";import{n as a,r as o,t as s}from"./commandBuilder-CyJu3wq4.js";var c=class extends o(s,a,`GetGuardrail`,r){},l=class extends o(s,a,`ListFoundationModels`,t){},u=class extends o(s,a,`ListGuardrails`,n){},d=3e4,f=3e4,p=e({queryKey:[`bedrock`,`guardrails`],queryFn:async()=>{let e=new u({});return await i().send(e)},staleTime:d}),m=t=>e({queryKey:[`bedrock`,`guardrails`,t],queryFn:async()=>{let e=new c({guardrailIdentifier:t});return await i().send(e)},staleTime:d}),h=t=>e({queryKey:[`bedrock`,`guardrails`,t,`versions`],queryFn:async()=>{let e=new u({guardrailIdentifier:t});return await i().send(e)},staleTime:d}),g=e({queryKey:[`bedrock`,`foundationModels`],queryFn:async()=>{let e=new l({});return await i().send(e)},staleTime:f});export{p as i,m as n,h as r,g as t}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Fa as t,Na as n,Pa as r,a as i}from"./awsClient-Cqp6x3OY.js";import{n as a,r as o,t as s}from"./commandBuilder-D0AzsM22.js";var c=class extends o(s,a,`GetGuardrail`,n){},l=class extends o(s,a,`ListFoundationModels`,r){},u=class extends o(s,a,`ListGuardrails`,t){},d=3e4,f=3e4,p=e({queryKey:[`bedrock`,`guardrails`],queryFn:async()=>{let e=new u({});return await i().send(e)},staleTime:d}),m=t=>e({queryKey:[`bedrock`,`guardrails`,t],queryFn:async()=>{let e=new c({guardrailIdentifier:t});return await i().send(e)},staleTime:d}),h=t=>e({queryKey:[`bedrock`,`guardrails`,t,`versions`],queryFn:async()=>{let e=new u({guardrailIdentifier:t});return await i().send(e)},staleTime:d}),g=e({queryKey:[`bedrock`,`foundationModels`],queryFn:async()=>{let e=new l({});return await i().send(e)},staleTime:f});export{p as i,m as n,h as r,g as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-7XDhMm-7.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-ktyVzA00.js similarity index 79% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-7XDhMm-7.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-ktyVzA00.js index 8421235c4..2234a526b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-7XDhMm-7.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrock-ktyVzA00.js @@ -1,3 +1,3 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{c as r,g as i,l as a,m as o,p as s,u as c}from"./cluster-config-xw_Q7X1e.js";import{La as l,Ma as u,Na as d,a as f,ja as p}from"./awsClient-b0hcP1Iz.js";import{n as m,r as h,t as g}from"./commandBuilder-CyJu3wq4.js";var _=class extends h(g,m,`CreateGuardrail`,p){},v=class extends h(g,m,`CreateGuardrailVersion`,u){},y=class extends h(g,m,`DeleteGuardrail`,d){},b=class extends h(g,m,`UpdateGuardrail`,l){},x=e(),S=[`SEXUAL`,`VIOLENCE`,`HATE`,`INSULTS`,`MISCONDUCT`,`PROMPT_ATTACK`],C=[`NONE`,`LOW`,`MEDIUM`,`HIGH`],w=[`GROUNDING`,`RELEVANCE`],T=[`BLOCK`,`ANONYMIZE`,`NONE`],E=`ADDRESS.AGE.AWS_ACCESS_KEY.AWS_SECRET_KEY.CA_HEALTH_NUMBER.CA_SOCIAL_INSURANCE_NUMBER.CREDIT_DEBIT_CARD_CVV.CREDIT_DEBIT_CARD_EXPIRY.CREDIT_DEBIT_CARD_NUMBER.DRIVER_ID.EMAIL.INTERNATIONAL_BANK_ACCOUNT_NUMBER.IP_ADDRESS.LICENSE_PLATE.MAC_ADDRESS.NAME.PASSWORD.PHONE.PIN.SWIFT_CODE.UK_NATIONAL_HEALTH_SERVICE_NUMBER.UK_NATIONAL_INSURANCE_NUMBER.UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER.URL.USERNAME.US_BANK_ACCOUNT_NUMBER.US_BANK_ROUTING_NUMBER.US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER.US_PASSPORT_NUMBER.US_SOCIAL_SECURITY_NUMBER.VEHICLE_IDENTIFICATION_NUMBER`.split(`.`),D=`PROFANITY`,O=50,k=i().min(1,`Name is required`).max(O,`Name must be at most ${O} characters`).regex(/^[0-9a-zA-Z-_]+$/,`Name may contain only letters, digits, hyphens and underscores`),A=o({name:i().min(1,`Topic name is required`),definition:i().min(1,`Definition is required`),examplesText:i()}),j=o({type:r(S),inputStrength:r(C),outputStrength:r(C)}),M=o({text:i().min(1,`Word text is required`)}),N=o({type:r(E),action:r(T)}),P=o({name:i().min(1,`Name is required`),pattern:i().min(1,`Pattern is required`),action:r(T),description:i()}),F=o({type:r(w),threshold:s().min(0,`Threshold must be between 0 and 1`).max(1,`Threshold must be between 0 and 1`)}),I=o({key:i().min(1,`Tag key is required`).max(128),value:i().max(256)}),L=o({name:k,description:i(),blockedInputMessaging:i().min(1,`Blocked input message is required`),blockedOutputsMessaging:i().min(1,`Blocked output message is required`),kmsKeyId:i(),profanityFilter:c(),topics:a(A),contentFilters:a(j),words:a(M),piiEntities:a(N),regexes:a(P),contextualGroundingFilters:a(F),tags:a(I)}),R={name:``,description:``,blockedInputMessaging:``,blockedOutputsMessaging:``,kmsKeyId:``,profanityFilter:!1,topics:[],contentFilters:[],words:[],piiEntities:[],regexes:[],contextualGroundingFilters:[],tags:[]};function z(e){return e.length>0?e:void 0}function B(e){return e.split(` +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{_ as r,d as i,h as a,l as o,m as s,u as c}from"./cluster-config-DkOiY8HH.js";import{Aa as l,Ia as u,Ma as d,a as f,ja as p}from"./awsClient-Cqp6x3OY.js";import{n as m,r as h,t as g}from"./commandBuilder-D0AzsM22.js";var _=class extends h(g,m,`CreateGuardrail`,l){},v=class extends h(g,m,`CreateGuardrailVersion`,p){},y=class extends h(g,m,`DeleteGuardrail`,d){},b=class extends h(g,m,`UpdateGuardrail`,u){},x=e(),S=[`SEXUAL`,`VIOLENCE`,`HATE`,`INSULTS`,`MISCONDUCT`,`PROMPT_ATTACK`],C=[`NONE`,`LOW`,`MEDIUM`,`HIGH`],w=[`GROUNDING`,`RELEVANCE`],T=[`BLOCK`,`ANONYMIZE`,`NONE`],E=`ADDRESS.AGE.AWS_ACCESS_KEY.AWS_SECRET_KEY.CA_HEALTH_NUMBER.CA_SOCIAL_INSURANCE_NUMBER.CREDIT_DEBIT_CARD_CVV.CREDIT_DEBIT_CARD_EXPIRY.CREDIT_DEBIT_CARD_NUMBER.DRIVER_ID.EMAIL.INTERNATIONAL_BANK_ACCOUNT_NUMBER.IP_ADDRESS.LICENSE_PLATE.MAC_ADDRESS.NAME.PASSWORD.PHONE.PIN.SWIFT_CODE.UK_NATIONAL_HEALTH_SERVICE_NUMBER.UK_NATIONAL_INSURANCE_NUMBER.UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER.URL.USERNAME.US_BANK_ACCOUNT_NUMBER.US_BANK_ROUTING_NUMBER.US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER.US_PASSPORT_NUMBER.US_SOCIAL_SECURITY_NUMBER.VEHICLE_IDENTIFICATION_NUMBER`.split(`.`),D=`PROFANITY`,O=50,k=r().min(1,`Name is required`).max(O,`Name must be at most ${O} characters`).regex(/^[0-9a-zA-Z-_]+$/,`Name may contain only letters, digits, hyphens and underscores`),A=a({name:r().min(1,`Topic name is required`),definition:r().min(1,`Definition is required`),examplesText:r()}),j=a({type:o(S),inputStrength:o(C),outputStrength:o(C)}),M=a({text:r().min(1,`Word text is required`)}),N=a({type:o(E),action:o(T)}),P=a({name:r().min(1,`Name is required`),pattern:r().min(1,`Pattern is required`),action:o(T),description:r()}),F=a({type:o(w),threshold:s().min(0,`Threshold must be between 0 and 1`).max(1,`Threshold must be between 0 and 1`)}),I=a({key:r().min(1,`Tag key is required`).max(128),value:r().max(256)}),L=a({name:k,description:r(),blockedInputMessaging:r().min(1,`Blocked input message is required`),blockedOutputsMessaging:r().min(1,`Blocked output message is required`),kmsKeyId:r(),profanityFilter:i(),topics:c(A),contentFilters:c(j),words:c(M),piiEntities:c(N),regexes:c(P),contextualGroundingFilters:c(F),tags:c(I)}),R={name:``,description:``,blockedInputMessaging:``,blockedOutputsMessaging:``,kmsKeyId:``,profanityFilter:!1,topics:[],contentFilters:[],words:[],piiEntities:[],regexes:[],contextualGroundingFilters:[],tags:[]};function z(e){return e.length>0?e:void 0}function B(e){return e.split(` `).map(e=>e.trim()).filter(e=>e.length>0)}function V(e){if(e.length!==0)return{topicsConfig:e.map(e=>({name:e.name,definition:e.definition,type:`DENY`,examples:B(e.examplesText)}))}}function H(e){if(e.length!==0)return{filtersConfig:e}}function U(e,t){if(e.length!==0||t)return{wordsConfig:e.length>0?e:void 0,managedWordListsConfig:t?[{type:D}]:void 0}}function W(e,t){if(e.length!==0||t.length!==0)return{piiEntitiesConfig:e.length>0?e:void 0,regexesConfig:t.length>0?t.map(e=>({name:e.name,pattern:e.pattern,action:e.action,description:z(e.description)})):void 0}}function G(e){if(e.length!==0)return{filtersConfig:e}}function K(e){let t=e.filter(e=>e.key.length>0).map(e=>({key:e.key,value:e.value}));return t.length>0?t:void 0}function q(e){return{name:e.name,description:z(e.description),blockedInputMessaging:e.blockedInputMessaging,blockedOutputsMessaging:e.blockedOutputsMessaging,kmsKeyId:z(e.kmsKeyId),topicPolicyConfig:V(e.topics),contentPolicyConfig:H(e.contentFilters),wordPolicyConfig:U(e.words,e.profanityFilter),sensitiveInformationPolicyConfig:W(e.piiEntities,e.regexes),contextualGroundingPolicyConfig:G(e.contextualGroundingFilters),tags:K(e.tags)}}function J(e,t){return{guardrailIdentifier:e,name:t.name,description:z(t.description),blockedInputMessaging:t.blockedInputMessaging,blockedOutputsMessaging:t.blockedOutputsMessaging,kmsKeyId:z(t.kmsKeyId),topicPolicyConfig:V(t.topics),contentPolicyConfig:H(t.contentFilters),wordPolicyConfig:U(t.words,t.profanityFilter),sensitiveInformationPolicyConfig:W(t.piiEntities,t.regexes),contextualGroundingPolicyConfig:G(t.contextualGroundingFilters)}}function Y(e){let t=e.topicPolicy?.topics??[],n=e.contentPolicy?.filters??[],r=e.wordPolicy?.words??[],i=e.wordPolicy?.managedWordLists??[],a=e.sensitiveInformationPolicy?.piiEntities??[],o=e.sensitiveInformationPolicy?.regexes??[],s=e.contextualGroundingPolicy?.filters??[];return{name:e.name??``,description:e.description??``,blockedInputMessaging:e.blockedInputMessaging??``,blockedOutputsMessaging:e.blockedOutputsMessaging??``,kmsKeyId:e.kmsKeyArn??``,profanityFilter:i.some(e=>e.type===D),topics:t.map(e=>({name:e.name??``,definition:e.definition??``,examplesText:(e.examples??[]).join(` `)})),contentFilters:n.map(e=>({type:e.type??`SEXUAL`,inputStrength:e.inputStrength??`NONE`,outputStrength:e.outputStrength??`NONE`})),words:r.map(e=>({text:e.text??``})),piiEntities:a.map(e=>({type:e.type??`EMAIL`,action:e.action??`BLOCK`})),regexes:o.map(e=>({name:e.name??``,pattern:e.pattern??``,action:e.action??`BLOCK`,description:e.description??``})),contextualGroundingFilters:s.map(e=>({type:e.type??`GROUNDING`,threshold:e.threshold??0})),tags:[]}}var X=[`bedrock`,`guardrails`];function Z(e){return[...X,e]}function Q(e){return[...Z(e),`versions`]}function $(){let e=(0,x.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ee,onSuccess:()=>{r.invalidateQueries({queryKey:X})}},e[0]=r,e[1]=i),n(i)}async function ee(e){let t=new _(q(e));return await f().send(t)}function te(){let e=(0,x.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ne,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:X}),r.invalidateQueries({queryKey:Z(t.guardrailIdentifier)})}},e[0]=r,e[1]=i),n(i)}async function ne(e){let{guardrailIdentifier:t,data:n}=e,r=new b(J(t,n));return await f().send(r)}function re(){let e=(0,x.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ie,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:X}),r.invalidateQueries({queryKey:Z(t)})}},e[0]=r,e[1]=i),n(i)}async function ie(e){let t=new y({guardrailIdentifier:e});return await f().send(t)}function ae(){let e=(0,x.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:oe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:Q(t.guardrailIdentifier)})}},e[0]=r,e[1]=i),n(i)}async function oe(e){let{guardrailIdentifier:t,description:n}=e,r=new v({guardrailIdentifier:t,description:n});return await f().send(r)}export{S as a,C as c,L as d,Y as f,te as i,E as l,ae as n,w as o,re as r,R as s,$ as t,T as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BL6fVxPp.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BE9dOa-O.js similarity index 71% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BL6fVxPp.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BE9dOa-O.js index a1749653c..738185868 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BL6fVxPp.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-BE9dOa-O.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{g as r,m as i,p as a,u as o}from"./cluster-config-xw_Q7X1e.js";import{Ca as s,Sa as c,Ta as l,r as u,wa as d}from"./awsClient-b0hcP1Iz.js";import{n as f,r as p,t as m}from"./commandBuilder-BH-JcvCM.js";var h=class extends p(m,f,`CreateDataSource`,c){},g=class extends p(m,f,`CreateKnowledgeBase`,s){},_=class extends p(m,f,`DeleteDataSource`,d){},v=class extends p(m,f,`DeleteKnowledgeBase`,l){},y=e(),b=`arn:aws:iam::local:role/ochre-knowledge-base`,x={type:`S3_VECTORS`,s3VectorsConfiguration:{}},S={"nomic-embed-text-v1.5":768,"bge-base-en-v1.5":768};function C(e){let[,t]=e.split(`foundation-model/`);if(t&&t in S)return S[t]}var w=i({name:r().min(1,`Name is required`),description:r(),embeddingModelArn:r().min(1,`Embedding model is required`),dimensions:a().int(`Dimensions must be a whole number`).min(1,`Dimensions must be greater than 0`),roleArn:r()}),T={name:``,description:``,embeddingModelArn:``,dimensions:0,roleArn:``};function E(e){return e.length>0?e:void 0}function D(e){return{name:e.name,description:E(e.description),roleArn:e.roleArn.length>0?e.roleArn:b,knowledgeBaseConfiguration:{type:`VECTOR`,vectorKnowledgeBaseConfiguration:{embeddingModelArn:e.embeddingModelArn,embeddingModelConfiguration:{bedrockEmbeddingModelConfiguration:{dimensions:e.dimensions}}}},storageConfiguration:x}}var O=/^arn:aws:s3:::\S+$/,k=1,A=0,j=99,M=300,N=20,P=i({name:r().min(1,`Name is required`),bucketArn:r().min(1,`Bucket ARN is required`).regex(O,`Must be an S3 bucket ARN`),inclusionPrefix:r(),chunkingEnabled:o(),maxTokens:a().int(`Max tokens must be a whole number`).min(k,`Max tokens must be greater than 0`),overlapPercentage:a().int(`Overlap must be a whole number`).min(A,`Overlap must be between 0 and 99`).max(j,`Overlap must be between 0 and 99`)}),F={name:``,bucketArn:``,inclusionPrefix:``,chunkingEnabled:!1,maxTokens:M,overlapPercentage:N};function I(e,t){return{knowledgeBaseId:e,name:t.name,dataSourceConfiguration:{type:`S3`,s3Configuration:{bucketArn:t.bucketArn,inclusionPrefixes:E(t.inclusionPrefix)?[t.inclusionPrefix]:void 0}},vectorIngestionConfiguration:t.chunkingEnabled?{chunkingConfiguration:{chunkingStrategy:`FIXED_SIZE`,fixedSizeChunkingConfiguration:{maxTokens:t.maxTokens,overlapPercentage:t.overlapPercentage}}}:void 0}}var L=[`bedrock-agent`,`knowledge-bases`];function R(e){return[...L,e]}function z(e){return[...R(e),`data-sources`]}function B(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:()=>{r.invalidateQueries({queryKey:L})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new g(D(e));return await u().send(t)}function H(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:U,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:L}),r.invalidateQueries({queryKey:R(t)})}},e[0]=r,e[1]=i),n(i)}async function U(e){let t=new v({knowledgeBaseId:e});return await u().send(t)}function W(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z(t.knowledgeBaseId)})}},e[0]=r,e[1]=i),n(i)}async function G(e){let{knowledgeBaseId:t,data:n}=e,r=new h(I(t,n));return await u().send(r)}function K(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:q,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z(t.knowledgeBaseId)})}},e[0]=r,e[1]=i),n(i)}async function q(e){let{knowledgeBaseId:t,dataSourceId:n}=e,r=new _({knowledgeBaseId:t,dataSourceId:n});return await u().send(r)}export{F as a,C as c,H as i,w as l,B as n,T as o,K as r,P as s,W as t}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{_ as r,d as i,h as a,m as o}from"./cluster-config-DkOiY8HH.js";import{Ca as s,Sa as c,r as l,wa as u,xa as d}from"./awsClient-Cqp6x3OY.js";import{n as f,r as p,t as m}from"./commandBuilder-BieYN8IF.js";var h=class extends p(m,f,`CreateDataSource`,d){},g=class extends p(m,f,`CreateKnowledgeBase`,c){},_=class extends p(m,f,`DeleteDataSource`,s){},v=class extends p(m,f,`DeleteKnowledgeBase`,u){},y=e(),b=`arn:aws:iam::local:role/ochre-knowledge-base`,x={type:`S3_VECTORS`,s3VectorsConfiguration:{}},S={"nomic-embed-text-v1.5":768,"bge-base-en-v1.5":768};function C(e){let[,t]=e.split(`foundation-model/`);if(t&&t in S)return S[t]}var w=a({name:r().min(1,`Name is required`),description:r(),embeddingModelArn:r().min(1,`Embedding model is required`),dimensions:o().int(`Dimensions must be a whole number`).min(1,`Dimensions must be greater than 0`),roleArn:r()}),T={name:``,description:``,embeddingModelArn:``,dimensions:0,roleArn:``};function E(e){return e.length>0?e:void 0}function D(e){return{name:e.name,description:E(e.description),roleArn:e.roleArn.length>0?e.roleArn:b,knowledgeBaseConfiguration:{type:`VECTOR`,vectorKnowledgeBaseConfiguration:{embeddingModelArn:e.embeddingModelArn,embeddingModelConfiguration:{bedrockEmbeddingModelConfiguration:{dimensions:e.dimensions}}}},storageConfiguration:x}}var O=/^arn:aws:s3:::\S+$/,k=1,A=0,j=99,M=300,N=20,P=a({name:r().min(1,`Name is required`),bucketArn:r().min(1,`Bucket ARN is required`).regex(O,`Must be an S3 bucket ARN`),inclusionPrefix:r(),chunkingEnabled:i(),maxTokens:o().int(`Max tokens must be a whole number`).min(k,`Max tokens must be greater than 0`),overlapPercentage:o().int(`Overlap must be a whole number`).min(A,`Overlap must be between 0 and 99`).max(j,`Overlap must be between 0 and 99`)}),F={name:``,bucketArn:``,inclusionPrefix:``,chunkingEnabled:!1,maxTokens:M,overlapPercentage:N};function I(e,t){return{knowledgeBaseId:e,name:t.name,dataSourceConfiguration:{type:`S3`,s3Configuration:{bucketArn:t.bucketArn,inclusionPrefixes:E(t.inclusionPrefix)?[t.inclusionPrefix]:void 0}},vectorIngestionConfiguration:t.chunkingEnabled?{chunkingConfiguration:{chunkingStrategy:`FIXED_SIZE`,fixedSizeChunkingConfiguration:{maxTokens:t.maxTokens,overlapPercentage:t.overlapPercentage}}}:void 0}}var L=[`bedrock-agent`,`knowledge-bases`];function R(e){return[...L,e]}function z(e){return[...R(e),`data-sources`]}function B(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:()=>{r.invalidateQueries({queryKey:L})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new g(D(e));return await l().send(t)}function H(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:U,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:L}),r.invalidateQueries({queryKey:R(t)})}},e[0]=r,e[1]=i),n(i)}async function U(e){let t=new v({knowledgeBaseId:e});return await l().send(t)}function W(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z(t.knowledgeBaseId)})}},e[0]=r,e[1]=i),n(i)}async function G(e){let{knowledgeBaseId:t,data:n}=e,r=new h(I(t,n));return await l().send(r)}function K(){let e=(0,y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:q,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z(t.knowledgeBaseId)})}},e[0]=r,e[1]=i),n(i)}async function q(e){let{knowledgeBaseId:t,dataSourceId:n}=e,r=new _({knowledgeBaseId:t,dataSourceId:n});return await l().send(r)}export{F as a,C as c,H as i,w as l,B as n,T as o,K as r,P as s,W as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-D9Za8qAi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-CtELySTw.js similarity index 71% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-D9Za8qAi.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-CtELySTw.js index 74bb52346..5d5364465 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-D9Za8qAi.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/bedrockAgent-CtELySTw.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Da as t,Ea as n,Oa as r,ka as i,r as a}from"./awsClient-b0hcP1Iz.js";import{n as o,r as s,t as c}from"./commandBuilder-BH-JcvCM.js";var l=class extends s(c,o,`GetKnowledgeBase`,n){},u=class extends s(c,o,`ListDataSources`,t){},d=class extends s(c,o,`ListIngestionJobs`,r){},f=class extends s(c,o,`ListKnowledgeBases`,i){},p=3e4,m=1e4,h=e({queryKey:[`bedrock-agent`,`knowledge-bases`],queryFn:async()=>{let e=new f({});return await a().send(e)},staleTime:p}),g=t=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t],queryFn:async()=>{let e=new l({knowledgeBaseId:t});return await a().send(e)},staleTime:p}),_=t=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t,`data-sources`],queryFn:async()=>{let e=new u({knowledgeBaseId:t});return await a().send(e)},staleTime:p}),v=(t,n)=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t,`data-sources`,n,`ingestion-jobs`],queryFn:async()=>{let e=new d({knowledgeBaseId:t,dataSourceId:n,sortBy:{attribute:`STARTED_AT`,order:`DESCENDING`}});return await a().send(e)},staleTime:m});export{h as i,v as n,g as r,_ as t}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Da as t,Ea as n,Oa as r,Ta as i,r as a}from"./awsClient-Cqp6x3OY.js";import{n as o,r as s,t as c}from"./commandBuilder-BieYN8IF.js";var l=class extends s(c,o,`GetKnowledgeBase`,i){},u=class extends s(c,o,`ListDataSources`,n){},d=class extends s(c,o,`ListIngestionJobs`,t){},f=class extends s(c,o,`ListKnowledgeBases`,r){},p=3e4,m=1e4,h=e({queryKey:[`bedrock-agent`,`knowledge-bases`],queryFn:async()=>{let e=new f({});return await a().send(e)},staleTime:p}),g=t=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t],queryFn:async()=>{let e=new l({knowledgeBaseId:t});return await a().send(e)},staleTime:p}),_=t=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t,`data-sources`],queryFn:async()=>{let e=new u({knowledgeBaseId:t});return await a().send(e)},staleTime:p}),v=(t,n)=>e({queryKey:[`bedrock-agent`,`knowledge-bases`,t,`data-sources`,n,`ingestion-jobs`],queryFn:async()=>{let e=new d({knowledgeBaseId:t,dataSourceId:n,sortBy:{attribute:`STARTED_AT`,order:`DESCENDING`}});return await a().send(e)},staleTime:m});export{h as i,v as n,g as r,_ as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-BarTr35m.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-qf9lLJ2x.js similarity index 99% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-BarTr35m.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-qf9lLJ2x.js index 8e68b6bf0..48920d3d9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-BarTr35m.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/button-qf9lLJ2x.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{d as i,f as a,l as o,n as s,t as c,u as l}from"./dist-BKgR2qk6.js";import{tn as u}from"./cluster-config-xw_Q7X1e.js";var d=t(n(),1);function f(){return typeof window<`u`}function p(e){return g(e)?(e.nodeName||``).toLowerCase():`#document`}function m(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function h(e){return((g(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function g(e){return f()?e instanceof Node||e instanceof m(e).Node:!1}function _(e){return f()?e instanceof Element||e instanceof m(e).Element:!1}function v(e){return f()?e instanceof HTMLElement||e instanceof m(e).HTMLElement:!1}function y(e){return!f()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof m(e).ShadowRoot}function b(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=j(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function x(e){return/^(table|td|th)$/.test(p(e))}function S(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var C=/transform|translate|scale|rotate|perspective|filter/,w=/paint|layout|strict|content/,T=e=>!!e&&e!==`none`,E;function D(e){let t=_(e)?j(e):e;return T(t.transform)||T(t.translate)||T(t.scale)||T(t.rotate)||T(t.perspective)||!k()&&(T(t.backdropFilter)||T(t.filter))||C.test(t.willChange||``)||w.test(t.contain||``)}function O(e){let t=N(e);for(;v(t)&&!A(t);){if(D(t))return t;if(S(t))return null;t=N(t)}return null}function k(){return E??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),E}function A(e){return/^(html|body|#document)$/.test(p(e))}function j(e){return m(e).getComputedStyle(e)}function M(e){return _(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function N(e){if(p(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||y(e)&&e.host||h(e);return y(t)?t.host:t}function P(e){let t=N(e);return A(t)?(e.ownerDocument||e).body:v(t)&&b(t)?t:P(t)}function F(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=P(e),i=r===e.ownerDocument?.body,a=m(r);if(i){let e=I(a);return t.concat(a,a.visualViewport||[],b(r)?r:[],e&&n?F(e):[])}return t.concat(r,F(r,[],n))}function I(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var L={...d},R=L.useInsertionEffect,z=R&&R!==L.useLayoutEffect?R:e=>e();function B(e){let t=o(V).current;return t.next=e,z(t.effect),t.trampoline}function V(){let e={next:void 0,callback:H,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function H(){}var U=typeof document<`u`?d.useLayoutEffect:()=>{},W=d.createContext(void 0);function G(e=!1){let t=d.useContext(W);if(t===void 0&&!e)throw Error(l(16));return t}function K(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:i=0,isNativeButton:a}=e,o=r&&t!==!1,s=r&&t===!1;return{props:d.useMemo(()=>{let e={onKeyDown(e){n&&t&&e.key!==`Tab`&&e.preventDefault()}};return r||(e.tabIndex=i,!a&&n&&(e.tabIndex=t?i:-1)),(a&&(t||o)||!a&&n)&&(e[`aria-disabled`]=n),a&&(!t||s)&&(e.disabled=n),e},[r,n,t,o,s,a,i])}}function q(e,t,{detail:n=0}={}){e.dispatchEvent(new(m(e)).PointerEvent(`click`,{bubbles:!0,cancelable:!0,composed:!0,detail:n,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function J(e={}){let{disabled:t=!1,focusableWhenDisabled:n,tabIndex:r=0,native:o=!0,composite:s}=e,c=d.useRef(null),l=G(!0),u=s??l!==void 0,{props:f}=K({focusableWhenDisabled:n,disabled:t,composite:u,tabIndex:r,isNativeButton:o}),p=d.useCallback(()=>{let e=c.current;Y(e)&&u&&t&&f.disabled===void 0&&e.disabled&&(e.disabled=!1)},[t,f.disabled,u]);return U(p,[p]),{getButtonProps:d.useCallback((e={})=>{let{onClick:n,onMouseDown:r,onKeyUp:s,onKeyDown:c,onPointerDown:l,...d}=e;return a({onClick(e){if(t){e.preventDefault();return}n?.(e)},onMouseDown(e){t||r?.(e)},onKeyDown(e){if(t||(i(e),c?.(e),e.baseUIHandlerPrevented))return;let n=e.target===e.currentTarget,r=e.currentTarget,a=Y(r),s=!o&&X(r),l=n&&(o?a:!s),d=e.key===`Enter`,f=e.key===` `,p=r.getAttribute(`role`),m=p?.startsWith(`menuitem`)||p===`option`||p===`gridcell`;if(n&&u&&f){if(e.defaultPrevented&&m)return;e.preventDefault(),(!o||a)&&(e.preventBaseUIHandler(),q(r,e));return}if(!l||o||!f&&!d){n&&s&&f&&e.preventDefault();return}e.defaultPrevented||(e.preventDefault(),d&&(e.preventBaseUIHandler(),q(r,e)))},onKeyUp(e){if(!t){if(i(e),s?.(e),e.target===e.currentTarget&&o&&u&&Y(e.currentTarget)&&e.key===` `){e.preventDefault();return}e.baseUIHandlerPrevented||e.target===e.currentTarget&&!o&&!u&&!e.defaultPrevented&&e.key===` `&&(e.preventBaseUIHandler(),q(e.currentTarget,e))}},onPointerDown(e){if(t){e.preventDefault();return}l?.(e)}},o?{type:`button`}:{role:`button`},f,d)},[t,f,u,o]),buttonRef:B(e=>{c.current=e,p()})}}function Y(e){return v(e)&&e.tagName===`BUTTON`}function X(e){return v(e)&&e.tagName===`A`&&!!e.href}var Z=d.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,focusableWhenDisabled:a=!1,nativeButton:o=!0,style:c,...l}=e,{getButtonProps:u,buttonRef:d}=J({disabled:i,focusableWhenDisabled:a,native:o});return s(`button`,e,{state:{disabled:i},ref:[t,d],props:[l,u]})}),Q=r(),ee=e(),$=c(`group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[2px] focus-visible:ring-ring/30 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[2px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/80`,outline:`border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground`,ghost:`hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50`,destructive:`bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,xs:`h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5`,sm:`h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3`,lg:`h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4`,icon:`size-7 [&_svg:not([class*='size-'])]:size-3.5`,"icon-xs":`size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5`,"icon-sm":`size-6 [&_svg:not([class*='size-'])]:size-3`,"icon-lg":`size-8 [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{variant:`default`,size:`default`}});function te(e){let t=(0,Q.c)(12),n,r,i,a;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4]):({className:n,variant:i,size:a,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a);let o=i===void 0?`default`:i,s=a===void 0?`default`:a,c;t[5]!==n||t[6]!==s||t[7]!==o?(c=u($({variant:o,size:s,className:n})),t[5]=n,t[6]=s,t[7]=o,t[8]=c):c=t[8];let l;return t[9]!==r||t[10]!==c?(l=(0,ee.jsx)(Z,{className:c,"data-slot":`button`,...r}),t[9]=r,t[10]=c,t[11]=l):l=t[11],l}export{b as C,k as D,S as E,g as S,x as T,m as _,G as a,v as b,L as c,h as d,I as f,N as g,F as h,W as i,j as l,M as m,$ as n,U as o,p,J as r,B as s,te as t,O as u,D as v,y as w,A as x,_ as y}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{d as i,f as a,l as o,n as s,t as c,u as l}from"./dist-DeC3TnAR.js";import{nn as u}from"./cluster-config-DkOiY8HH.js";var d=t(n(),1);function f(){return typeof window<`u`}function p(e){return g(e)?(e.nodeName||``).toLowerCase():`#document`}function m(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function h(e){return((g(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function g(e){return f()?e instanceof Node||e instanceof m(e).Node:!1}function _(e){return f()?e instanceof Element||e instanceof m(e).Element:!1}function v(e){return f()?e instanceof HTMLElement||e instanceof m(e).HTMLElement:!1}function y(e){return!f()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof m(e).ShadowRoot}function b(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=j(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function x(e){return/^(table|td|th)$/.test(p(e))}function S(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var C=/transform|translate|scale|rotate|perspective|filter/,w=/paint|layout|strict|content/,T=e=>!!e&&e!==`none`,E;function D(e){let t=_(e)?j(e):e;return T(t.transform)||T(t.translate)||T(t.scale)||T(t.rotate)||T(t.perspective)||!k()&&(T(t.backdropFilter)||T(t.filter))||C.test(t.willChange||``)||w.test(t.contain||``)}function O(e){let t=N(e);for(;v(t)&&!A(t);){if(D(t))return t;if(S(t))return null;t=N(t)}return null}function k(){return E??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),E}function A(e){return/^(html|body|#document)$/.test(p(e))}function j(e){return m(e).getComputedStyle(e)}function M(e){return _(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function N(e){if(p(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||y(e)&&e.host||h(e);return y(t)?t.host:t}function P(e){let t=N(e);return A(t)?(e.ownerDocument||e).body:v(t)&&b(t)?t:P(t)}function F(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=P(e),i=r===e.ownerDocument?.body,a=m(r);if(i){let e=I(a);return t.concat(a,a.visualViewport||[],b(r)?r:[],e&&n?F(e):[])}return t.concat(r,F(r,[],n))}function I(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var L={...d},R=L.useInsertionEffect,z=R&&R!==L.useLayoutEffect?R:e=>e();function B(e){let t=o(V).current;return t.next=e,z(t.effect),t.trampoline}function V(){let e={next:void 0,callback:H,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function H(){}var U=typeof document<`u`?d.useLayoutEffect:()=>{},W=d.createContext(void 0);function G(e=!1){let t=d.useContext(W);if(t===void 0&&!e)throw Error(l(16));return t}function K(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:i=0,isNativeButton:a}=e,o=r&&t!==!1,s=r&&t===!1;return{props:d.useMemo(()=>{let e={onKeyDown(e){n&&t&&e.key!==`Tab`&&e.preventDefault()}};return r||(e.tabIndex=i,!a&&n&&(e.tabIndex=t?i:-1)),(a&&(t||o)||!a&&n)&&(e[`aria-disabled`]=n),a&&(!t||s)&&(e.disabled=n),e},[r,n,t,o,s,a,i])}}function q(e,t,{detail:n=0}={}){e.dispatchEvent(new(m(e)).PointerEvent(`click`,{bubbles:!0,cancelable:!0,composed:!0,detail:n,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function J(e={}){let{disabled:t=!1,focusableWhenDisabled:n,tabIndex:r=0,native:o=!0,composite:s}=e,c=d.useRef(null),l=G(!0),u=s??l!==void 0,{props:f}=K({focusableWhenDisabled:n,disabled:t,composite:u,tabIndex:r,isNativeButton:o}),p=d.useCallback(()=>{let e=c.current;Y(e)&&u&&t&&f.disabled===void 0&&e.disabled&&(e.disabled=!1)},[t,f.disabled,u]);return U(p,[p]),{getButtonProps:d.useCallback((e={})=>{let{onClick:n,onMouseDown:r,onKeyUp:s,onKeyDown:c,onPointerDown:l,...d}=e;return a({onClick(e){if(t){e.preventDefault();return}n?.(e)},onMouseDown(e){t||r?.(e)},onKeyDown(e){if(t||(i(e),c?.(e),e.baseUIHandlerPrevented))return;let n=e.target===e.currentTarget,r=e.currentTarget,a=Y(r),s=!o&&X(r),l=n&&(o?a:!s),d=e.key===`Enter`,f=e.key===` `,p=r.getAttribute(`role`),m=p?.startsWith(`menuitem`)||p===`option`||p===`gridcell`;if(n&&u&&f){if(e.defaultPrevented&&m)return;e.preventDefault(),(!o||a)&&(e.preventBaseUIHandler(),q(r,e));return}if(!l||o||!f&&!d){n&&s&&f&&e.preventDefault();return}e.defaultPrevented||(e.preventDefault(),d&&(e.preventBaseUIHandler(),q(r,e)))},onKeyUp(e){if(!t){if(i(e),s?.(e),e.target===e.currentTarget&&o&&u&&Y(e.currentTarget)&&e.key===` `){e.preventDefault();return}e.baseUIHandlerPrevented||e.target===e.currentTarget&&!o&&!u&&!e.defaultPrevented&&e.key===` `&&(e.preventBaseUIHandler(),q(e.currentTarget,e))}},onPointerDown(e){if(t){e.preventDefault();return}l?.(e)}},o?{type:`button`}:{role:`button`},f,d)},[t,f,u,o]),buttonRef:B(e=>{c.current=e,p()})}}function Y(e){return v(e)&&e.tagName===`BUTTON`}function X(e){return v(e)&&e.tagName===`A`&&!!e.href}var Z=d.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,focusableWhenDisabled:a=!1,nativeButton:o=!0,style:c,...l}=e,{getButtonProps:u,buttonRef:d}=J({disabled:i,focusableWhenDisabled:a,native:o});return s(`button`,e,{state:{disabled:i},ref:[t,d],props:[l,u]})}),Q=r(),ee=e(),$=c(`group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[2px] focus-visible:ring-ring/30 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[2px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/80`,outline:`border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground`,ghost:`hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50`,destructive:`bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,xs:`h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5`,sm:`h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3`,lg:`h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4`,icon:`size-7 [&_svg:not([class*='size-'])]:size-3.5`,"icon-xs":`size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5`,"icon-sm":`size-6 [&_svg:not([class*='size-'])]:size-3`,"icon-lg":`size-8 [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{variant:`default`,size:`default`}});function te(e){let t=(0,Q.c)(12),n,r,i,a;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4]):({className:n,variant:i,size:a,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a);let o=i===void 0?`default`:i,s=a===void 0?`default`:a,c;t[5]!==n||t[6]!==s||t[7]!==o?(c=u($({variant:o,size:s,className:n})),t[5]=n,t[6]=s,t[7]=o,t[8]=c):c=t[8];let l;return t[9]!==r||t[10]!==c?(l=(0,ee.jsx)(Z,{className:c,"data-slot":`button`,...r}),t[9]=r,t[10]=c,t[11]=l):l=t[11],l}export{b as C,k as D,S as E,g as S,x as T,m as _,G as a,v as b,L as c,h as d,I as f,N as g,F as h,W as i,j as l,M as m,$ as n,U as o,p,J as r,B as s,te as t,O as u,D as v,y as w,A as x,_ as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-BXl0Qff8.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-xPs7xSYh.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-BXl0Qff8.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-xPs7xSYh.js index f46d72994..9744b772d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-BXl0Qff8.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/card-xPs7xSYh.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";var r=t(),i=e();function a(e){let t=(0,r.c)(10),a,o,s;t[0]===e?(a=t[1],o=t[2],s=t[3]):({className:a,size:s,...o}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s);let c=s===void 0?`default`:s,l;t[4]===a?l=t[5]:(l=n(`group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg`,a),t[4]=a,t[5]=l);let u;return t[6]!==o||t[7]!==c||t[8]!==l?(u=(0,i.jsx)(`div`,{className:l,"data-size":c,"data-slot":`card`,...o}),t[6]=o,t[7]=c,t[8]=l,t[9]=u):u=t[9],u}function o(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-header`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function s(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`text-sm font-medium`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-title`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function c(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`text-xs/relaxed text-muted-foreground`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-description`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function l(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`col-start-2 row-span-2 row-start-1 self-start justify-self-end`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-action`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function u(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`px-4 group-data-[size=sm]/card:px-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-content`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function d(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`flex items-center rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-footer`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}export{d as a,c as i,l as n,o,u as r,s,a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";var r=t(),i=e();function a(e){let t=(0,r.c)(10),a,o,s;t[0]===e?(a=t[1],o=t[2],s=t[3]):({className:a,size:s,...o}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s);let c=s===void 0?`default`:s,l;t[4]===a?l=t[5]:(l=n(`group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg`,a),t[4]=a,t[5]=l);let u;return t[6]!==o||t[7]!==c||t[8]!==l?(u=(0,i.jsx)(`div`,{className:l,"data-size":c,"data-slot":`card`,...o}),t[6]=o,t[7]=c,t[8]=l,t[9]=u):u=t[9],u}function o(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-header`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function s(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`text-sm font-medium`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-title`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function c(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`text-xs/relaxed text-muted-foreground`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-description`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function l(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`col-start-2 row-span-2 row-start-1 self-start justify-self-end`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-action`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function u(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`px-4 group-data-[size=sm]/card:px-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-content`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function d(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`flex items-center rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`div`,{className:s,"data-slot":`card-footer`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}export{d as a,c as i,l as n,o,u as r,s,a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-UyecRuny.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-B6IZXuGX.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-UyecRuny.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-B6IZXuGX.js index 94c2b00bb..8bf4e1022 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-UyecRuny.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/certificate-import-dialog-B6IZXuGX.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{n as o,za as s}from"./awsClient-b0hcP1Iz.js";import{i as c,n as l,r as u}from"./acm-BYWQapOv.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{s as f,t as p}from"./field-c7GHI5st.js";import{t as m}from"./textarea-n04EavUm.js";import{a as ee,i as te,l as h,n as g,o as _,r as v,s as y,t as b}from"./alert-dialog-kCQ1W4Rz.js";var x=class extends c(l,u,`ImportCertificate`,s){},S=t(n(),1),C=r(),w=new TextEncoder;function T(){let e=(0,C.c)(2),t=i(),n;return e[0]===t?n=e[1]:(n={mutationFn:E,onSuccess:()=>{t.invalidateQueries({queryKey:[`acm`,`certificates`]})}},e[0]=t,e[1]=n),a(n)}async function E(e){let t=new x({Certificate:w.encode(e.certificate),PrivateKey:w.encode(e.privateKey),CertificateChain:e.certificateChain&&e.certificateChain.length>0?w.encode(e.certificateChain):void 0});return await o().send(t)}var D=e();function O(e){let t=(0,C.c)(54),{open:n,onOpenChange:r,onImported:i}=e,[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(``),[l,u]=(0,S.useState)(``),x=T(),w;t[0]===x?w=t[1]:(w=()=>{o(``),c(``),u(``),x.reset()},t[0]=x,t[1]=w);let E=w,O;t[2]!==r||t[3]!==E?(O=e=>{e||E(),r(e)},t[2]=r,t[3]=E,t[4]=O):O=t[4];let k=O,A;t[5]!==a||t[6]!==s?(A=a.trim().length>0&&s.trim().length>0,t[5]=a,t[6]=s,t[7]=A):A=t[7];let j=A,M;t[8]!==j||t[9]!==a||t[10]!==l||t[11]!==x||t[12]!==i||t[13]!==r||t[14]!==s||t[15]!==E?(M=async()=>{if(j)try{let e=await x.mutateAsync({certificate:a,privateKey:s,certificateChain:l});e.CertificateArn&&i(e.CertificateArn),E(),r(!1)}catch{}},t[8]=j,t[9]=a,t[10]=l,t[11]=x,t[12]=i,t[13]=r,t[14]=s,t[15]=E,t[16]=M):M=t[16];let N=M,P;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(P={maxWidth:`36rem`,width:`calc(100vw - 2rem)`},t[17]=P):P=t[17];let F;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,D.jsxs)(y,{children:[(0,D.jsx)(h,{children:`Import certificate`}),(0,D.jsx)(ee,{children:`Paste a PEM-encoded certificate and its private key. The optional chain is appended for intermediate CAs.`})]}),t[18]=F):F=t[18];let I;t[19]===x.error?I=t[20]:(I=x.error&&(0,D.jsx)(d,{error:x.error,msg:`Failed to import certificate`}),t[19]=x.error,t[20]=I);let L;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-body`,children:`Certificate body`})}),t[21]=L):L=t[21];let R;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(R=e=>{o(e.target.value)},t[22]=R):R=t[22];let z;t[23]===a?z=t[24]:(z=(0,D.jsxs)(p,{children:[L,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-body`,onChange:R,placeholder:`-----BEGIN CERTIFICATE-----`,rows:5,value:a})]}),t[23]=a,t[24]=z);let B;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-key`,children:`Private key`})}),t[25]=B):B=t[25];let V;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(V=e=>{c(e.target.value)},t[26]=V):V=t[26];let H;t[27]===s?H=t[28]:(H=(0,D.jsxs)(p,{children:[B,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-key`,onChange:V,placeholder:`-----BEGIN PRIVATE KEY-----`,rows:5,value:s})]}),t[27]=s,t[28]=H);let U;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-chain`,children:`Certificate chain (optional)`})}),t[29]=U):U=t[29];let W;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(W=e=>{u(e.target.value)},t[30]=W):W=t[30];let G;t[31]===l?G=t[32]:(G=(0,D.jsxs)(p,{children:[U,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-chain`,onChange:W,placeholder:`-----BEGIN CERTIFICATE-----`,rows:4,value:l})]}),t[31]=l,t[32]=G);let K;t[33]!==z||t[34]!==H||t[35]!==G?(K=(0,D.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[z,H,G]}),t[33]=z,t[34]=H,t[35]=G,t[36]=K):K=t[36];let q;t[37]===x.isPending?q=t[38]:(q=(0,D.jsx)(v,{disabled:x.isPending,children:`Cancel`}),t[37]=x.isPending,t[38]=q);let J=!j||x.isPending,Y=x.isPending?`Importing…`:`Import`,X;t[39]!==N||t[40]!==J||t[41]!==Y?(X=(0,D.jsx)(g,{disabled:J,onClick:N,children:Y}),t[39]=N,t[40]=J,t[41]=Y,t[42]=X):X=t[42];let Z;t[43]!==q||t[44]!==X?(Z=(0,D.jsxs)(_,{children:[q,X]}),t[43]=q,t[44]=X,t[45]=Z):Z=t[45];let Q;t[46]!==K||t[47]!==Z||t[48]!==I?(Q=(0,D.jsxs)(te,{className:`grid-cols-[minmax(0,1fr)]`,style:P,children:[F,I,K,Z]}),t[46]=K,t[47]=Z,t[48]=I,t[49]=Q):Q=t[49];let $;return t[50]!==k||t[51]!==n||t[52]!==Q?($=(0,D.jsx)(b,{onOpenChange:k,open:n,children:Q}),t[50]=k,t[51]=n,t[52]=Q,t[53]=$):$=t[53],$}export{O as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{Ra as o,n as s}from"./awsClient-Cqp6x3OY.js";import{i as c,n as l,r as u}from"./acm-DlvuctCR.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{s as f,t as p}from"./field-CS-ql6du.js";import{t as m}from"./textarea-DV1UO8hv.js";import{a as ee,i as te,l as h,n as g,o as _,r as v,s as y,t as b}from"./alert-dialog-jxylPXwR.js";var x=class extends c(l,u,`ImportCertificate`,o){},S=t(n(),1),C=r(),w=new TextEncoder;function T(){let e=(0,C.c)(2),t=i(),n;return e[0]===t?n=e[1]:(n={mutationFn:E,onSuccess:()=>{t.invalidateQueries({queryKey:[`acm`,`certificates`]})}},e[0]=t,e[1]=n),a(n)}async function E(e){let t=new x({Certificate:w.encode(e.certificate),PrivateKey:w.encode(e.privateKey),CertificateChain:e.certificateChain&&e.certificateChain.length>0?w.encode(e.certificateChain):void 0});return await s().send(t)}var D=e();function O(e){let t=(0,C.c)(54),{open:n,onOpenChange:r,onImported:i}=e,[a,o]=(0,S.useState)(``),[s,c]=(0,S.useState)(``),[l,u]=(0,S.useState)(``),x=T(),w;t[0]===x?w=t[1]:(w=()=>{o(``),c(``),u(``),x.reset()},t[0]=x,t[1]=w);let E=w,O;t[2]!==r||t[3]!==E?(O=e=>{e||E(),r(e)},t[2]=r,t[3]=E,t[4]=O):O=t[4];let k=O,A;t[5]!==a||t[6]!==s?(A=a.trim().length>0&&s.trim().length>0,t[5]=a,t[6]=s,t[7]=A):A=t[7];let j=A,M;t[8]!==j||t[9]!==a||t[10]!==l||t[11]!==x||t[12]!==i||t[13]!==r||t[14]!==s||t[15]!==E?(M=async()=>{if(j)try{let e=await x.mutateAsync({certificate:a,privateKey:s,certificateChain:l});e.CertificateArn&&i(e.CertificateArn),E(),r(!1)}catch{}},t[8]=j,t[9]=a,t[10]=l,t[11]=x,t[12]=i,t[13]=r,t[14]=s,t[15]=E,t[16]=M):M=t[16];let N=M,P;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(P={maxWidth:`36rem`,width:`calc(100vw - 2rem)`},t[17]=P):P=t[17];let F;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,D.jsxs)(y,{children:[(0,D.jsx)(h,{children:`Import certificate`}),(0,D.jsx)(ee,{children:`Paste a PEM-encoded certificate and its private key. The optional chain is appended for intermediate CAs.`})]}),t[18]=F):F=t[18];let I;t[19]===x.error?I=t[20]:(I=x.error&&(0,D.jsx)(d,{error:x.error,msg:`Failed to import certificate`}),t[19]=x.error,t[20]=I);let L;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-body`,children:`Certificate body`})}),t[21]=L):L=t[21];let R;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(R=e=>{o(e.target.value)},t[22]=R):R=t[22];let z;t[23]===a?z=t[24]:(z=(0,D.jsxs)(p,{children:[L,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-body`,onChange:R,placeholder:`-----BEGIN CERTIFICATE-----`,rows:5,value:a})]}),t[23]=a,t[24]=z);let B;t[25]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-key`,children:`Private key`})}),t[25]=B):B=t[25];let V;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(V=e=>{c(e.target.value)},t[26]=V):V=t[26];let H;t[27]===s?H=t[28]:(H=(0,D.jsxs)(p,{children:[B,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-key`,onChange:V,placeholder:`-----BEGIN PRIVATE KEY-----`,rows:5,value:s})]}),t[27]=s,t[28]=H);let U;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,D.jsx)(f,{children:(0,D.jsx)(`label`,{htmlFor:`cert-chain`,children:`Certificate chain (optional)`})}),t[29]=U):U=t[29];let W;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(W=e=>{u(e.target.value)},t[30]=W):W=t[30];let G;t[31]===l?G=t[32]:(G=(0,D.jsxs)(p,{children:[U,(0,D.jsx)(m,{className:`font-mono text-xs`,id:`cert-chain`,onChange:W,placeholder:`-----BEGIN CERTIFICATE-----`,rows:4,value:l})]}),t[31]=l,t[32]=G);let K;t[33]!==z||t[34]!==H||t[35]!==G?(K=(0,D.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[z,H,G]}),t[33]=z,t[34]=H,t[35]=G,t[36]=K):K=t[36];let q;t[37]===x.isPending?q=t[38]:(q=(0,D.jsx)(v,{disabled:x.isPending,children:`Cancel`}),t[37]=x.isPending,t[38]=q);let J=!j||x.isPending,Y=x.isPending?`Importing…`:`Import`,X;t[39]!==N||t[40]!==J||t[41]!==Y?(X=(0,D.jsx)(g,{disabled:J,onClick:N,children:Y}),t[39]=N,t[40]=J,t[41]=Y,t[42]=X):X=t[42];let Z;t[43]!==q||t[44]!==X?(Z=(0,D.jsxs)(_,{children:[q,X]}),t[43]=q,t[44]=X,t[45]=Z):Z=t[45];let Q;t[46]!==K||t[47]!==Z||t[48]!==I?(Q=(0,D.jsxs)(te,{className:`grid-cols-[minmax(0,1fr)]`,style:P,children:[F,I,K,Z]}),t[46]=K,t[47]=Z,t[48]=I,t[49]=Q):Q=t[49];let $;return t[50]!==k||t[51]!==n||t[52]!==Q?($=(0,D.jsx)(b,{onOpenChange:k,open:n,children:Q}),t[50]=k,t[51]=n,t[52]=Q,t[53]=$):$=t[53],$}export{O as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-CLiFy1rG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-DavMY-tN.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-CLiFy1rG.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-DavMY-tN.js index 16f1487c6..ea21e46ab 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-CLiFy1rG.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cli-command-panel-DavMY-tN.js @@ -1,3 +1,3 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{tn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./createLucideIcon-BQgzNCBR.js";import{t as o}from"./check-BO7W8OSs.js";import{t as s}from"./chevron-down-Dt4q6d24.js";import{t as c}from"./copy-CamWo-pg.js";import{t as l}from"./button-BarTr35m.js";import{t as u}from"./use-copy-to-clipboard-DjiD3qo6.js";var d={name:`square-terminal`,size:24,node:[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]],aliases:[`terminal-square`]};d.node;var f=a(d),p=r(),m=t(n(),1),h=e(),g={bin:`text-tactical-cyan font-semibold`,flag:`text-tactical-amber`,value:`text-foreground`,comment:`text-muted-foreground italic`,variable:`text-tactical-green font-semibold`};function _(e,t){return e.length>0?e:`<${t}>`}function v(e,t){return[{type:`flag`,value:` ${e}`},{type:`value`,value:` ${t}`}]}function y(e,t){return t===void 0||t===``||t===!1?[]:t===!0?[{type:`flag`,value:` ${e}`}]:v(e,t)}function b(e){return e.map(e=>e.parts.map(e=>e.value).join(``)).join(` +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{nn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./createLucideIcon-BQgzNCBR.js";import{t as o}from"./check-BO7W8OSs.js";import{t as s}from"./chevron-down-Dt4q6d24.js";import{t as c}from"./copy-CamWo-pg.js";import{t as l}from"./button-qf9lLJ2x.js";import{t as u}from"./use-copy-to-clipboard-DjiD3qo6.js";var d={name:`square-terminal`,size:24,node:[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]],aliases:[`terminal-square`]};d.node;var f=a(d),p=r(),m=t(n(),1),h=e(),g={bin:`text-tactical-cyan font-semibold`,flag:`text-tactical-amber`,value:`text-foreground`,comment:`text-muted-foreground italic`,variable:`text-tactical-green font-semibold`};function _(e,t){return e.length>0?e:`<${t}>`}function v(e,t){return[{type:`flag`,value:` ${e}`},{type:`value`,value:` ${t}`}]}function y(e,t){return t===void 0||t===``||t===!1?[]:t===!0?[{type:`flag`,value:` ${e}`}]:v(e,t)}function b(e){return e.map(e=>e.parts.map(e=>e.value).join(``)).join(` `)}function x(e){let t=(0,p.c)(18),{commands:n}=e,[r,a]=(0,m.useState)(!1),{copied:d,copy:g}=u();if(n.length===0)return null;let _;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(_=()=>{a(C)},t[0]=_):_=t[0];let v,y;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,h.jsx)(f,{className:`size-3.5`}),y=(0,h.jsx)(`span`,{children:`AWS CLI`}),t[1]=v,t[2]=y):(v=t[1],y=t[2]);let x=r&&`rotate-180`,w;t[3]===x?w=t[4]:(w=i(`ml-auto size-3.5 transition-transform`,x),t[3]=x,t[4]=w);let T;t[5]===w?T=t[6]:(T=(0,h.jsx)(s,{className:w}),t[5]=w,t[6]=T);let E;t[7]!==r||t[8]!==T?(E=(0,h.jsxs)(`button`,{type:`button`,onClick:_,className:`flex w-full items-center gap-2 px-3 py-2 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground`,"aria-expanded":r,children:[v,y,T]}),t[7]=r,t[8]=T,t[9]=E):E=t[9];let D;t[10]!==n||t[11]!==d||t[12]!==g||t[13]!==r?(D=r&&(0,h.jsxs)(`div`,{className:`border-t border-border`,children:[(0,h.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border px-3 py-1.5`,children:[(0,h.jsx)(`span`,{className:`text-[0.625rem] text-muted-foreground`,children:n.length>1?`${n.length} commands`:`command`}),(0,h.jsxs)(l,{type:`button`,variant:`ghost`,size:`xs`,onClick:async()=>{await g(b(n))},children:[d?(0,h.jsx)(o,{className:`size-2.5`}):(0,h.jsx)(c,{className:`size-2.5`}),d?`Copied`:`Copy`]})]}),(0,h.jsx)(`div`,{className:`overflow-x-auto p-3`,children:n.map((e,t)=>(0,h.jsxs)(`div`,{children:[n.length>1&&(0,h.jsx)(`div`,{className:`mb-1 text-[0.625rem] font-medium text-muted-foreground`,children:e.label}),(0,h.jsx)(`pre`,{className:`font-mono text-xs/relaxed`,children:(0,h.jsx)(`code`,{children:e.parts.map(S)})}),ti.map(i=>d[i]); +import"./compiler-runtime-D_vZfn79.js";import{a as e,i as t,n,o as r,r as i,t as a}from"./hex-encoding-CVnQo5PF.js";function o(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),u=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),d=`-`,f=[],p=`arbitrary..`,m=e=>{let t=ee(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return g(e);let n=e.split(d);return h(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?c(i,t):t:i||f}return n[e]||f}}},h=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=h(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(d):e.slice(t).join(d),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?p+r:void 0})(),ee=e=>{let{theme:t,classGroups:n}=e;return te(n,t)},te=(e,t)=>{let n=u();for(let r in e){let i=e[r];ne(i,n,r,t)}return n},ne=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){ie(e,t,n);return}if(typeof e==`function`){ae(e,t,n,r);return}oe(e,t,n,r)},ie=(e,t,n)=>{let r=e===``?t:_(t,e);r.classGroupId=n},ae=(e,t,n,r)=>{if(v(e)){ne(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(l(n,e))},oe=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(d),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,se=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},ce=`!`,le=`:`,ue=[],de=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),fe=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return de(t,l,c,u)};if(t){let e=t+le,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):de(ue,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},y=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},pe=e=>({cache:se(e.cacheSize),parseClassName:fe(e),sortModifiers:y(e),postfixLookupClassGroupIds:me(e),...m(e)}),me=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(he),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let ee=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),te=f?ee+ce:ee,ne=te+g;if(s.indexOf(ne)>-1)continue;s.push(ne);let re=i(g,h);for(let e=0;e0?` `+l:l)}return l},ge=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=pe(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=b(e,n);return i(e,a),a};return a=o,(...e)=>a(ge(...e))},ye=[],x=e=>{let t=t=>t[e]||ye;return t.isThemeGetter=!0,t.themeKey=e,t},S=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,C=/^\((?:(\w[\w-]*):)?(.+)\)$/i,be=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,xe=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,w=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Se=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,Ce=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,we=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Te=e=>be.test(e),T=e=>!!e&&!Number.isNaN(Number(e)),E=e=>!!e&&Number.isInteger(Number(e)),Ee=e=>e.endsWith(`%`)&&T(e.slice(0,-1)),D=e=>xe.test(e),De=()=>!0,Oe=e=>w.test(e)&&!Se.test(e),ke=()=>!1,Ae=e=>Ce.test(e),je=e=>we.test(e),Me=e=>!O(e)&&!k(e),Ne=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),Pe=e=>Ye(e,$e,ke),O=e=>S.test(e),Fe=e=>Ye(e,et,Oe),Ie=e=>Ye(e,tt,T),Le=e=>Ye(e,rt,De),Re=e=>Ye(e,nt,ke),ze=e=>Ye(e,Ze,ke),Be=e=>Ye(e,Qe,je),Ve=e=>Ye(e,it,Ae),k=e=>C.test(e),He=e=>Xe(e,et),Ue=e=>Xe(e,nt),We=e=>Xe(e,Ze),Ge=e=>Xe(e,$e),Ke=e=>Xe(e,Qe),qe=e=>Xe(e,it,!0),Je=e=>Xe(e,rt,!0),Ye=(e,t,n)=>{let r=S.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Xe=(e,t,n=!1)=>{let r=C.exec(e);return r?r[1]?t(r[1]):n:!1},Ze=e=>e===`position`||e===`percentage`,Qe=e=>e===`image`||e===`url`,$e=e=>e===`length`||e===`size`||e===`bg-size`,et=e=>e===`length`,tt=e=>e===`number`,nt=e=>e===`family-name`,rt=e=>e===`number`||e===`weight`,it=e=>e===`shadow`,at=ve(()=>{let e=x(`color`),t=x(`font`),n=x(`text`),r=x(`font-weight`),i=x(`tracking`),a=x(`leading`),o=x(`breakpoint`),s=x(`container`),c=x(`spacing`),l=x(`radius`),u=x(`shadow`),d=x(`inset-shadow`),f=x(`text-shadow`),p=x(`drop-shadow`),m=x(`blur`),h=x(`perspective`),g=x(`aspect`),ee=x(`ease`),te=x(`animate`),ne=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],re=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],ie=()=>[...re(),k,O],ae=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],oe=()=>[`auto`,`contain`,`none`],_=()=>[k,O,c],v=()=>[Te,`full`,`auto`,..._()],se=()=>[E,`none`,`subgrid`,k,O],ce=()=>[`auto`,{span:[`full`,E,k,O]},E,k,O],le=()=>[E,`auto`,k,O],ue=()=>[`auto`,`min`,`max`,`fr`,k,O],de=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],fe=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],y=()=>[`auto`,..._()],pe=()=>[Te,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,..._()],me=()=>[s,Te,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,..._()],he=()=>[Te,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,..._()],b=()=>[e,k,O],ge=()=>[...re(),We,ze,{position:[k,O]}],_e=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ve=()=>[`auto`,`cover`,`contain`,Ge,Pe,{size:[k,O]}],ye=()=>[Ee,He,Fe],S=()=>[``,`none`,`full`,l,k,O],C=()=>[``,T,He,Fe],be=()=>[`solid`,`dashed`,`dotted`,`double`],xe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],w=()=>[T,Ee,We,ze],Se=()=>[``,`none`,m,k,O],Ce=()=>[`none`,T,k,O],we=()=>[`none`,T,k,O],Oe=()=>[T,k,O],ke=()=>[Te,`full`,..._()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[D],breakpoint:[D],color:[De],container:[D],"drop-shadow":[D],ease:[`in`,`out`,`in-out`],font:[Me],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[D],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[D],shadow:[D],spacing:[`px`,T],text:[D],"text-shadow":[D],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,Te,O,k,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,k,O]}],"container-named":[Ne],columns:[{columns:[T,`auto`,O,k,s]}],"break-after":[{"break-after":ne()}],"break-before":[{"break-before":ne()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:ie()}],overflow:[{overflow:ae()}],"overflow-x":[{"overflow-x":ae()}],"overflow-y":[{"overflow-y":ae()}],overscroll:[{overscroll:oe()}],"overscroll-x":[{"overscroll-x":oe()}],"overscroll-y":[{"overscroll-y":oe()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:v()}],"inset-x":[{"inset-x":v()}],"inset-y":[{"inset-y":v()}],start:[{"inset-s":v(),start:v()}],end:[{"inset-e":v(),end:v()}],"inset-bs":[{"inset-bs":v()}],"inset-be":[{"inset-be":v()}],top:[{top:v()}],right:[{right:v()}],bottom:[{bottom:v()}],left:[{left:v()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[E,`auto`,k,O]}],basis:[{basis:[Te,`full`,`auto`,s,..._()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[T,Te,`auto`,`initial`,`none`,O]}],grow:[{grow:[``,T,k,O]}],shrink:[{shrink:[``,T,k,O]}],order:[{order:[E,`first`,`last`,`none`,k,O]}],"grid-cols":[{"grid-cols":se()}],"col-start-end":[{col:ce()}],"col-start":[{"col-start":le()}],"col-end":[{"col-end":le()}],"grid-rows":[{"grid-rows":se()}],"row-start-end":[{row:ce()}],"row-start":[{"row-start":le()}],"row-end":[{"row-end":le()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ue()}],"auto-rows":[{"auto-rows":ue()}],gap:[{gap:_()}],"gap-x":[{"gap-x":_()}],"gap-y":[{"gap-y":_()}],"justify-content":[{justify:[...de(),`normal`]}],"justify-items":[{"justify-items":[...fe(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...fe()]}],"align-content":[{content:[`normal`,...de()]}],"align-items":[{items:[...fe(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...fe(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":de()}],"place-items":[{"place-items":[...fe(),`baseline`]}],"place-self":[{"place-self":[`auto`,...fe()]}],p:[{p:_()}],px:[{px:_()}],py:[{py:_()}],ps:[{ps:_()}],pe:[{pe:_()}],pbs:[{pbs:_()}],pbe:[{pbe:_()}],pt:[{pt:_()}],pr:[{pr:_()}],pb:[{pb:_()}],pl:[{pl:_()}],m:[{m:y()}],mx:[{mx:y()}],my:[{my:y()}],ms:[{ms:y()}],me:[{me:y()}],mbs:[{mbs:y()}],mbe:[{mbe:y()}],mt:[{mt:y()}],mr:[{mr:y()}],mb:[{mb:y()}],ml:[{ml:y()}],"space-x":[{"space-x":_()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":_()}],"space-y-reverse":[`space-y-reverse`],size:[{size:pe()}],"inline-size":[{inline:[`auto`,...me()]}],"min-inline-size":[{"min-inline":[`auto`,...me()]}],"max-inline-size":[{"max-inline":[`none`,...me()]}],"block-size":[{block:[`auto`,...he()]}],"min-block-size":[{"min-block":[`auto`,...he()]}],"max-block-size":[{"max-block":[`none`,...he()]}],w:[{w:[s,`screen`,...pe()]}],"min-w":[{"min-w":[s,`screen`,`none`,...pe()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...pe()]}],h:[{h:[`screen`,`lh`,...pe()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...pe()]}],"max-h":[{"max-h":[`screen`,`lh`,`none`,...pe()]}],"font-size":[{text:[`base`,n,He,Fe]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Je,Le]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Ee,O]}],"font-family":[{font:[Ue,Re,t]}],"font-features":[{"font-features":[O]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,k,O]}],"line-clamp":[{"line-clamp":[T,`none`,k,Ie]}],leading:[{leading:[`none`,a,..._()]}],"list-image":[{"list-image":[`none`,k,O]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,k,O]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:b()}],"text-color":[{text:b()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...be(),`wavy`]}],"text-decoration-thickness":[{decoration:[T,`from-font`,`auto`,k,Fe]}],"text-decoration-color":[{decoration:b()}],"underline-offset":[{"underline-offset":[T,`auto`,k,O]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:_()}],"tab-size":[{tab:[E,k,O]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,k,O]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,k,O]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:ge()}],"bg-repeat":[{bg:_e()}],"bg-size":[{bg:ve()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},E,k,O],radial:[``,k,O],conic:[``,E,k,O]},Ke,Be]}],"bg-color":[{bg:b()}],"gradient-from-pos":[{from:ye()}],"gradient-via-pos":[{via:ye()}],"gradient-to-pos":[{to:ye()}],"gradient-from":[{from:b()}],"gradient-via":[{via:b()}],"gradient-to":[{to:b()}],rounded:[{rounded:S()}],"rounded-s":[{"rounded-s":S()}],"rounded-e":[{"rounded-e":S()}],"rounded-t":[{"rounded-t":S()}],"rounded-r":[{"rounded-r":S()}],"rounded-b":[{"rounded-b":S()}],"rounded-l":[{"rounded-l":S()}],"rounded-ss":[{"rounded-ss":S()}],"rounded-se":[{"rounded-se":S()}],"rounded-ee":[{"rounded-ee":S()}],"rounded-es":[{"rounded-es":S()}],"rounded-tl":[{"rounded-tl":S()}],"rounded-tr":[{"rounded-tr":S()}],"rounded-br":[{"rounded-br":S()}],"rounded-bl":[{"rounded-bl":S()}],"border-w":[{border:C()}],"border-w-x":[{"border-x":C()}],"border-w-y":[{"border-y":C()}],"border-w-s":[{"border-s":C()}],"border-w-e":[{"border-e":C()}],"border-w-bs":[{"border-bs":C()}],"border-w-be":[{"border-be":C()}],"border-w-t":[{"border-t":C()}],"border-w-r":[{"border-r":C()}],"border-w-b":[{"border-b":C()}],"border-w-l":[{"border-l":C()}],"divide-x":[{"divide-x":C()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":C()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...be(),`hidden`,`none`]}],"divide-style":[{divide:[...be(),`hidden`,`none`]}],"border-color":[{border:b()}],"border-color-x":[{"border-x":b()}],"border-color-y":[{"border-y":b()}],"border-color-s":[{"border-s":b()}],"border-color-e":[{"border-e":b()}],"border-color-bs":[{"border-bs":b()}],"border-color-be":[{"border-be":b()}],"border-color-t":[{"border-t":b()}],"border-color-r":[{"border-r":b()}],"border-color-b":[{"border-b":b()}],"border-color-l":[{"border-l":b()}],"divide-color":[{divide:b()}],"outline-style":[{outline:[...be(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[T,k,O]}],"outline-w":[{outline:[``,T,He,Fe]}],"outline-color":[{outline:b()}],shadow:[{shadow:[``,`inner`,`none`,u,qe,Ve]}],"shadow-color":[{shadow:b()}],"inset-shadow":[{"inset-shadow":[`none`,d,qe,Ve]}],"inset-shadow-color":[{"inset-shadow":b()}],"ring-w":[{ring:C()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:b()}],"ring-offset-w":[{"ring-offset":[T,Fe]}],"ring-offset-color":[{"ring-offset":b()}],"inset-ring-w":[{"inset-ring":C()}],"inset-ring-color":[{"inset-ring":b()}],"text-shadow":[{"text-shadow":[`none`,f,qe,Ve]}],"text-shadow-color":[{"text-shadow":b()}],opacity:[{opacity:[T,k,O]}],"mix-blend":[{"mix-blend":[...xe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":xe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[T]}],"mask-image-linear-from-pos":[{"mask-linear-from":w()}],"mask-image-linear-to-pos":[{"mask-linear-to":w()}],"mask-image-linear-from-color":[{"mask-linear-from":b()}],"mask-image-linear-to-color":[{"mask-linear-to":b()}],"mask-image-t-from-pos":[{"mask-t-from":w()}],"mask-image-t-to-pos":[{"mask-t-to":w()}],"mask-image-t-from-color":[{"mask-t-from":b()}],"mask-image-t-to-color":[{"mask-t-to":b()}],"mask-image-r-from-pos":[{"mask-r-from":w()}],"mask-image-r-to-pos":[{"mask-r-to":w()}],"mask-image-r-from-color":[{"mask-r-from":b()}],"mask-image-r-to-color":[{"mask-r-to":b()}],"mask-image-b-from-pos":[{"mask-b-from":w()}],"mask-image-b-to-pos":[{"mask-b-to":w()}],"mask-image-b-from-color":[{"mask-b-from":b()}],"mask-image-b-to-color":[{"mask-b-to":b()}],"mask-image-l-from-pos":[{"mask-l-from":w()}],"mask-image-l-to-pos":[{"mask-l-to":w()}],"mask-image-l-from-color":[{"mask-l-from":b()}],"mask-image-l-to-color":[{"mask-l-to":b()}],"mask-image-x-from-pos":[{"mask-x-from":w()}],"mask-image-x-to-pos":[{"mask-x-to":w()}],"mask-image-x-from-color":[{"mask-x-from":b()}],"mask-image-x-to-color":[{"mask-x-to":b()}],"mask-image-y-from-pos":[{"mask-y-from":w()}],"mask-image-y-to-pos":[{"mask-y-to":w()}],"mask-image-y-from-color":[{"mask-y-from":b()}],"mask-image-y-to-color":[{"mask-y-to":b()}],"mask-image-radial":[{"mask-radial":[k,O]}],"mask-image-radial-from-pos":[{"mask-radial-from":w()}],"mask-image-radial-to-pos":[{"mask-radial-to":w()}],"mask-image-radial-from-color":[{"mask-radial-from":b()}],"mask-image-radial-to-color":[{"mask-radial-to":b()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":re()}],"mask-image-conic-pos":[{"mask-conic":[T]}],"mask-image-conic-from-pos":[{"mask-conic-from":w()}],"mask-image-conic-to-pos":[{"mask-conic-to":w()}],"mask-image-conic-from-color":[{"mask-conic-from":b()}],"mask-image-conic-to-color":[{"mask-conic-to":b()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:ge()}],"mask-repeat":[{mask:_e()}],"mask-size":[{mask:ve()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,k,O]}],filter:[{filter:[``,`none`,k,O]}],blur:[{blur:Se()}],brightness:[{brightness:[T,k,O]}],contrast:[{contrast:[T,k,O]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,qe,Ve]}],"drop-shadow-color":[{"drop-shadow":b()}],grayscale:[{grayscale:[``,T,k,O]}],"hue-rotate":[{"hue-rotate":[T,k,O]}],invert:[{invert:[``,T,k,O]}],saturate:[{saturate:[T,k,O]}],sepia:[{sepia:[``,T,k,O]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,k,O]}],"backdrop-blur":[{"backdrop-blur":Se()}],"backdrop-brightness":[{"backdrop-brightness":[T,k,O]}],"backdrop-contrast":[{"backdrop-contrast":[T,k,O]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,T,k,O]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[T,k,O]}],"backdrop-invert":[{"backdrop-invert":[``,T,k,O]}],"backdrop-opacity":[{"backdrop-opacity":[T,k,O]}],"backdrop-saturate":[{"backdrop-saturate":[T,k,O]}],"backdrop-sepia":[{"backdrop-sepia":[``,T,k,O]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":_()}],"border-spacing-x":[{"border-spacing-x":_()}],"border-spacing-y":[{"border-spacing-y":_()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,k,O]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[T,`initial`,k,O]}],ease:[{ease:[`linear`,`initial`,ee,k,O]}],delay:[{delay:[T,k,O]}],animate:[{animate:[`none`,te,k,O]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,k,O]}],"perspective-origin":[{"perspective-origin":ie()}],rotate:[{rotate:Ce()}],"rotate-x":[{"rotate-x":Ce()}],"rotate-y":[{"rotate-y":Ce()}],"rotate-z":[{"rotate-z":Ce()}],scale:[{scale:we()}],"scale-x":[{"scale-x":we()}],"scale-y":[{"scale-y":we()}],"scale-z":[{"scale-z":we()}],"scale-3d":[`scale-3d`],skew:[{skew:Oe()}],"skew-x":[{"skew-x":Oe()}],"skew-y":[{"skew-y":Oe()}],transform:[{transform:[k,O,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:ie()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:ke()}],"translate-x":[{"translate-x":ke()}],"translate-y":[{"translate-y":ke()}],"translate-z":[{"translate-z":ke()}],"translate-none":[`translate-none`],zoom:[{zoom:[E,k,O]}],accent:[{accent:b()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:b()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,k,O]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":b()}],"scrollbar-track-color":[{"scrollbar-track":b()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":_()}],"scroll-mx":[{"scroll-mx":_()}],"scroll-my":[{"scroll-my":_()}],"scroll-ms":[{"scroll-ms":_()}],"scroll-me":[{"scroll-me":_()}],"scroll-mbs":[{"scroll-mbs":_()}],"scroll-mbe":[{"scroll-mbe":_()}],"scroll-mt":[{"scroll-mt":_()}],"scroll-mr":[{"scroll-mr":_()}],"scroll-mb":[{"scroll-mb":_()}],"scroll-ml":[{"scroll-ml":_()}],"scroll-p":[{"scroll-p":_()}],"scroll-px":[{"scroll-px":_()}],"scroll-py":[{"scroll-py":_()}],"scroll-ps":[{"scroll-ps":_()}],"scroll-pe":[{"scroll-pe":_()}],"scroll-pbs":[{"scroll-pbs":_()}],"scroll-pbe":[{"scroll-pbe":_()}],"scroll-pt":[{"scroll-pt":_()}],"scroll-pr":[{"scroll-pr":_()}],"scroll-pb":[{"scroll-pb":_()}],"scroll-pl":[{"scroll-pl":_()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,k,O]}],fill:[{fill:[`none`,...b()]}],"stroke-w":[{stroke:[T,He,Fe,Ie]}],stroke:[{stroke:[`none`,...b()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`start`,`end`,`right`,`left`],"inset-y":[`inset-bs`,`inset-be`,`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`ps`,`pe`,`pr`,`pl`],py:[`pbs`,`pbe`,`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`ms`,`me`,`mr`,`ml`],my:[`mbs`,`mbe`,`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-s`,`border-w-e`,`border-w-r`,`border-w-l`],"border-w-y":[`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-s`,`border-color-e`,`border-color-r`,`border-color-l`],"border-color-y":[`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-ms`,`scroll-me`,`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-ps`,`scroll-pe`,`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function ot(...e){return at(s(e))}var st=new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`long`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`});function ct(e){return e?st.format(new Date(e)):`Unknown`}function lt(e){return`${Math.round(e/1024)} GiB`}var ut=[`B`,`KB`,`MB`,`GB`,`TB`];function dt(e){if(e===0)return`0 B`;let t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**t).toFixed(2)} ${ut[t]}`}function ft(e){return e?.find(e=>e.Key===`Name`)?.Value}function pt(e){let t=e.GroupId??``;return e.GroupName?`${t} (${e.GroupName})`:t}function mt(e){try{return decodeURIComponent(e)}catch{return e}}var ht=/\/$/;function gt(e){return e.replace(ht,``)}function _t(e){return e&&(e.endsWith(`/`)?e:`${e}/`)}function vt(e,t){return e.startsWith(t)?e:`${t}${e}`}function yt(e,t){return e.startsWith(t)?e.slice(t.length):e}function bt(e,t,n){return e.$source||={},e.$source[t]=n,e}var xt=e=>e?.body instanceof ReadableStream,St=(e,t)=>{let n=[];if(e&&n.push(e),t)for(let e of t)n.push(e);return n},Ct=(e,t)=>`${e||`anonymous`}${t&&t.length>0?` (a.k.a. ${t.join(`,`)})`:``}`,wt=()=>{let e=[],t=[],n=!1,r=new Set,i=e=>e.sort((e,t)=>Tt[t.step]-Tt[e.step]||Et[t.priority||`normal`]-Et[e.priority||`normal`]),a=n=>{let i=!1,a=e=>{let t=St(e.name,e.aliases);if(t.includes(n)){i=!0;for(let e of t)r.delete(e);return!1}return!0};return e=e.filter(a),t=t.filter(a),i},o=n=>{let i=!1,a=e=>{if(e.middleware===n){i=!0;for(let t of St(e.name,e.aliases))r.delete(t);return!1}return!0};return e=e.filter(a),t=t.filter(a),i},s=n=>(e.forEach(e=>{n.add(e.middleware,{...e})}),t.forEach(e=>{n.addRelativeTo(e.middleware,{...e})}),n.identifyOnResolve?.(u.identifyOnResolve()),n),c=e=>{let t=[];return e.before.forEach(e=>{e.before.length===0&&e.after.length===0?t.push(e):t.push(...c(e))}),t.push(e),e.after.reverse().forEach(e=>{e.before.length===0&&e.after.length===0?t.push(e):t.push(...c(e))}),t},l=(n=!1)=>{let r=[],a=[],o={};return e.forEach(e=>{let t={...e,before:[],after:[]};for(let e of St(t.name,t.aliases))o[e]=t;r.push(t)}),t.forEach(e=>{let t={...e,before:[],after:[]};for(let e of St(t.name,t.aliases))o[e]=t;a.push(t)}),a.forEach(e=>{if(e.toMiddleware){let t=o[e.toMiddleware];if(t===void 0){if(n)return;throw Error(`${e.toMiddleware} is not found when adding ${Ct(e.name,e.aliases)} middleware ${e.relation} ${e.toMiddleware}`)}e.relation===`after`&&t.after.push(e),e.relation===`before`&&t.before.push(e)}}),i(r).map(c).reduce((e,t)=>(e.push(...t),e),[])},u={add:(t,n={})=>{let{name:i,override:a,aliases:o}=n,s={step:`initialize`,priority:`normal`,middleware:t,...n},c=St(i,o);if(c.length>0){if(c.some(e=>r.has(e))){if(!a)throw Error(`Duplicate middleware name '${Ct(i,o)}'`);for(let t of c){let n=e.findIndex(e=>e.name===t||e.aliases?.some(e=>e===t));if(n===-1)continue;let r=e[n];if(r.step!==s.step||s.priority!==r.priority)throw Error(`"${Ct(r.name,r.aliases)}" middleware with ${r.priority} priority in ${r.step} step cannot be overridden by "${Ct(i,o)}" middleware with ${s.priority} priority in ${s.step} step.`);e.splice(n,1)}}for(let e of c)r.add(e)}e.push(s)},addRelativeTo:(e,n)=>{let{name:i,override:a,aliases:o}=n,s={middleware:e,...n},c=St(i,o);if(c.length>0){if(c.some(e=>r.has(e))){if(!a)throw Error(`Duplicate middleware name '${Ct(i,o)}'`);for(let e of c){let n=t.findIndex(t=>t.name===e||t.aliases?.some(t=>t===e));if(n===-1)continue;let r=t[n];if(r.toMiddleware!==s.toMiddleware||r.relation!==s.relation)throw Error(`"${Ct(r.name,r.aliases)}" middleware ${r.relation} "${r.toMiddleware}" middleware cannot be overridden by "${Ct(i,o)}" middleware ${s.relation} "${s.toMiddleware}" middleware.`);t.splice(n,1)}}for(let e of c)r.add(e)}t.push(s)},clone:()=>s(wt()),use:e=>{e.applyToStack(u)},remove:e=>typeof e==`string`?a(e):o(e),removeByTag:n=>{let i=!1,a=e=>{let{tags:t,name:a,aliases:o}=e;if(t&&t.includes(n)){let e=St(a,o);for(let t of e)r.delete(t);return i=!0,!1}return!0};return e=e.filter(a),t=t.filter(a),i},concat:e=>{let t=s(wt());return t.use(e),t.identifyOnResolve(n||t.identifyOnResolve()||(e.identifyOnResolve?.()??!1)),t},applyToStack:s,identify:()=>l(!0).map(e=>{let t=e.step??e.relation+` `+e.toMiddleware;return Ct(e.name,e.aliases)+` - `+t}),identifyOnResolve(e){return typeof e==`boolean`&&(n=e),n},resolve:(e,t)=>{for(let n of l().map(e=>e.middleware).reverse())e=n(e,t);return n&&console.log(u.identify()),e}};return u},Tt={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1},Et={high:3,normal:2,low:1},Dt;(function(e){e.HTTP=`http`,e.HTTPS=`https`})(Dt||={});var Ot;(function(e){e.MD5=`md5`,e.CRC32=`crc32`,e.CRC32C=`crc32c`,e.SHA1=`sha1`,e.SHA256=`sha256`})(Ot||={});var kt=`__smithy_context`,At=e=>e.__smithy_context||={},A=class e{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(e){this.method=e.method||`GET`,this.hostname=e.hostname||`localhost`,this.port=e.port,this.query=e.query||{},this.headers=e.headers||{},this.body=e.body,this.protocol=e.protocol?e.protocol.slice(-1)===`:`?e.protocol:`${e.protocol}:`:`https:`,this.path=e.path?e.path.charAt(0)===`/`?e.path:`/${e.path}`:`/`,this.username=e.username,this.password=e.password,this.fragment=e.fragment}static clone(t){let n=new e({...t,headers:{...t.headers}});return n.query&&=jt(n.query),n}static isInstance(e){if(!e)return!1;let t=e;return`method`in t&&`protocol`in t&&`hostname`in t&&`path`in t&&typeof t.query==`object`&&typeof t.headers==`object`}clone(){return e.clone(this)}};function jt(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return{...t,[n]:Array.isArray(r)?[...r]:r}},{})}var Mt=class{statusCode;reason;headers;body;constructor(e){this.statusCode=e.statusCode,this.reason=e.reason,this.headers=e.headers||{},this.body=e.body}static isInstance(e){if(!e)return!1;let t=e;return typeof t.statusCode==`number`&&typeof t.headers==`object`}},Nt=RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`),Pt=(e,t=!1)=>{if(!t)return Nt.test(e);let n=e.split(`.`);for(let e of n)if(!Pt(e))return!1;return!0};function Ft(e){return/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/.test(e)}var It=e=>{if(typeof e==`function`)return e;let t=Promise.resolve(e);return()=>t};function Lt(e){let t={};if(e=e.replace(/^\?/,``),e)for(let n of e.split(`&`)){let[e,r=null]=n.split(`=`);e=decodeURIComponent(e),r&&=decodeURIComponent(r),e in t?Array.isArray(t[e])?t[e].push(r):t[e]=[t[e],r]:t[e]=r}return t}var Rt=e=>{if(typeof e==`string`)return Rt(new URL(e));let{hostname:t,pathname:n,port:r,protocol:i,search:a}=e,o;return a&&(o=Lt(a)),{hostname:t,port:r?parseInt(r):void 0,protocol:i,path:n,query:o}},zt=e=>{if(typeof e==`object`){if(`url`in e){let t=Rt(e.url);if(e.headers){t.headers={};for(let n in e.headers)r(e.headers,n)&&(t.headers[n.toLowerCase()]=e.headers[n].join(`, `))}return t}return e}return Rt(e)},Bt=e=>()=>Promise.reject(e),Vt=class{config;middlewareStack=wt();initConfig;handlers;constructor(e){this.config=e;let{protocol:t,protocolSettings:n}=e;n&&typeof t==`function`&&(e.protocol=new t(n))}send(e,t,n){let r=typeof t==`function`?void 0:t,i=typeof t==`function`?t:n,a=r===void 0&&this.config.cacheMiddleware===!0,o;if(a){this.handlers||=new WeakMap;let t=this.handlers;t.has(e.constructor)?o=t.get(e.constructor):(o=e.resolveMiddleware(this.middlewareStack,this.config,r),t.set(e.constructor,o))}else delete this.handlers,o=e.resolveMiddleware(this.middlewareStack,this.config,r);if(i)o(e).then(e=>i(null,e.output),e=>i(e)).catch(()=>{});else return o(e).then(e=>e.output)}destroy(){this.config?.requestHandler?.destroy?.(),delete this.handlers}},Ht=e=>typeof e==`function`?e():e,Ut=(e,t,n,r,i)=>({name:t,namespace:e,traits:n,input:r,output:i}),Wt=e=>(t,n)=>async r=>{let{response:i}=await t(r),{operationSchema:a}=At(n),[,o,s,c,l,u]=a??[];try{return{response:i,output:await e.protocol.deserializeResponse(Ut(o,s,c,l,u),{...e,...n},i)}}catch(e){if(Object.defineProperty(e,"$response",{value:i,enumerable:!1,writable:!1,configurable:!1}),!(`$metadata`in e)){let t=`Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;try{e.message+=` + `+t}catch{!n.logger||n.logger?.constructor?.name===`NoOpLogger`?console.warn(t):n.logger?.warn?.(t)}e.$responseBodyText!==void 0&&e.$response&&(e.$response.body=e.$responseBodyText);try{if(Mt.isInstance(i)){let{headers:t={},statusCode:n}=i,r=Object.entries(t);e.$metadata={httpStatusCode:n,requestId:Gt(/^x-[\w-]+-request-?id$/,r),extendedRequestId:Gt(/^x-[\w-]+-id-2$/,r),cfId:Gt(/^x-[\w-]+-cf-id$/,r)}}}catch{}}throw e}},Gt=(e,t)=>(t.find(([t])=>t.match(e))||[void 0,void 0])[1],Kt=e=>(t,n)=>async r=>{let{operationSchema:i}=At(n),[,a,o,s,c,l]=i??[],u=n.endpointV2?async()=>zt(n.endpointV2):e.endpoint,d=await e.protocol.serializeRequest(Ut(a,o,s,c,l),r.input,{...e,...n,endpoint:u});return t({...r,request:d})},qt={name:`deserializerMiddleware`,step:`deserialize`,tags:[`DESERIALIZER`],override:!0},Jt={name:`serializerMiddleware`,step:`serialize`,tags:[`SERIALIZER`],override:!0};function Yt(e){return{applyToStack:t=>{t.add(Kt(e),Jt),t.add(Wt(e),qt),e.protocol.setSerdeContext(e)}}}var Xt=[];function Zt(e){if(typeof e==`object`)return e;if(e|=0,Xt[e])return Xt[e];let t={},n=0;for(let r of[`httpLabel`,`idempotent`,`idempotencyToken`,`sensitive`,`httpPayload`,`httpResponseCode`,`httpQueryParams`])(e>>n++&1)==1&&(t[r]=1);return Xt[e]=t}var Qt={it:Symbol.for(`@smithy/nor-struct-it`),ns:Symbol.for(`@smithy/ns`)},$t=[],en={},j=class e{ref;memberName;static symbol=Symbol.for(`@smithy/nor`);symbol=e.symbol;name;schema;_isMemberSchema;traits;memberTraits;normalizedTraits;constructor(t,n){this.ref=t,this.memberName=n;let r=[],i=t,a=t;for(this._isMemberSchema=!1;nn(i);)r.push(i[1]),i=i[0],a=Ht(i),this._isMemberSchema=!0;if(r.length>0){this.memberTraits={};for(let e=r.length-1;e>=0;--e){let t=r[e];Object.assign(this.memberTraits,Zt(t))}}else this.memberTraits=0;if(a instanceof e){let e=this.memberTraits;Object.assign(this,a),this.memberTraits=Object.assign({},e,a.getMemberTraits(),this.getMemberTraits()),this.normalizedTraits=void 0,this.memberName=n??a.memberName;return}if(this.schema=Ht(a),rn(this.schema)?(this.name=`${this.schema[1]}#${this.schema[2]}`,this.traits=this.schema[3]):(this.name=this.memberName??String(a),this.traits=0),this._isMemberSchema&&!n)throw Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(!0)} missing member name.`)}static[Symbol.hasInstance](e){let t=this.prototype.isPrototypeOf(e);return!t&&typeof e==`object`&&e?e.symbol===this.symbol:t}static of(t){let n=typeof t==`function`||typeof t==`object`&&!!t;if(typeof t==`number`){if($t[t])return $t[t]}else if(typeof t==`string`){if(en[t])return en[t]}else if(n&&t[Qt.ns])return t[Qt.ns];let r=Ht(t);if(r instanceof e)return r;if(nn(r)){let[n,i]=r;if(n instanceof e)return Object.assign(n.getMergedTraits(),Zt(i)),n;throw Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(t,null,2)}.`)}let i=new e(r);return n?t[Qt.ns]=i:typeof r==`string`?en[r]=i:typeof r==`number`?$t[r]=i:i}getSchema(){let e=this.schema;return Array.isArray(e)&&e[0]===0?e[4]:e}getName(e=!1){let{name:t}=this;return!e&&t&&t.includes(`#`)?t.split(`#`)[1]:t||void 0}getMemberName(){return this.memberName}isMemberSchema(){return this._isMemberSchema}isListSchema(){let e=this.getSchema();return typeof e==`number`?e>=64&&e<128:e[0]===1}isMapSchema(){let e=this.getSchema();return typeof e==`number`?e>=128&&e<=255:e[0]===2}isStructSchema(){let e=this.getSchema();if(typeof e!=`object`)return!1;let t=e[0];return t===3||t===-3||t===4}isUnionSchema(){let e=this.getSchema();return typeof e==`object`&&e[0]===4}isBlobSchema(){let e=this.getSchema();return e===21||e===42}isTimestampSchema(){let e=this.getSchema();return typeof e==`number`&&e>=4&&e<=7}isUnitSchema(){return this.getSchema()===`unit`}isDocumentSchema(){return this.getSchema()===15}isStringSchema(){return this.getSchema()===0}isBooleanSchema(){return this.getSchema()===2}isNumericSchema(){return this.getSchema()===1}isBigIntegerSchema(){return this.getSchema()===17}isBigDecimalSchema(){return this.getSchema()===19}isStreaming(){let{streaming:e}=this.getMergedTraits();return!!e||this.getSchema()===42}isIdempotencyToken(){return!!this.getMergedTraits().idempotencyToken}getMergedTraits(){return this.normalizedTraits??={...this.getOwnTraits(),...this.getMemberTraits()}}getMemberTraits(){return Zt(this.memberTraits)}getOwnTraits(){return Zt(this.traits)}getKeySchema(){let[e,t]=[this.isDocumentSchema(),this.isMapSchema()];if(!e&&!t)throw Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(!0)}`);let n=this.getSchema();return tn([e?15:n[4]??0,0],`key`)}getValueSchema(){let e=this.getSchema(),[t,n,r]=[this.isDocumentSchema(),this.isMapSchema(),this.isListSchema()],i=typeof e==`number`?63&e:e&&typeof e==`object`&&(n||r)?e[3+e[0]]:t?15:void 0;if(i!=null)return tn([i,0],n?`value`:`member`);throw Error(`@smithy/core/schema - ${this.getName(!0)} has no value member.`)}getMemberSchema(e){let t=this.getSchema();if(this.isStructSchema()&&t[4].includes(e)){let n=t[4].indexOf(e),r=t[5][n];return tn(nn(r)?r:[r,0],e)}if(this.isDocumentSchema())return tn([15,0],e);throw Error(`@smithy/core/schema - ${this.getName(!0)} has no member=${e}.`)}getMemberSchemas(){let e={};try{for(let[t,n]of this.structIterator())e[t]=n}catch{}return e}getEventStreamMember(){if(this.isStructSchema()){for(let[e,t]of this.structIterator())if(t.isStreaming()&&t.isStructSchema())return e}return``}*structIterator(){if(this.isUnitSchema())return;if(!this.isStructSchema())throw Error(`@smithy/core/schema - cannot iterate non-struct schema.`);let e=this.getSchema(),t=e[4].length,n=e[Qt.it];if(n&&t===n.length){yield*n;return}n=Array(t);for(let r=0;rArray.isArray(e)&&e.length===2,rn=e=>Array.isArray(e)&&e.length>=5,an=`***SensitiveInformation***`;function on(e,t){if(t==null)return t;let n=j.of(e);if(n.getMergedTraits().sensitive)return an;if(n.isListSchema()){if(n.getValueSchema().getMergedTraits().sensitive)return an}else if(n.isMapSchema()){if(n.getKeySchema().getMergedTraits().sensitive||n.getValueSchema().getMergedTraits().sensitive)return an}else if(n.isStructSchema()&&typeof t==`object`){let e=t,r={};for(let[t,i]of n.structIterator())e[t]!=null&&(r[t]=on(i,e[t]));return r}return t}var sn=class{middlewareStack=wt();schema;static classBuilder(){return new cn}resolveMiddlewareWithContext(e,t,n,{middlewareFn:r,clientName:i,commandName:a,inputFilterSensitiveLog:o,outputFilterSensitiveLog:s,smithyContext:c,additionalContext:l,CommandCtor:u}){for(let i of r.bind(this)(u,e,t,n))this.middlewareStack.use(i);let d=e.concat(this.middlewareStack),{logger:f}=t,p=l[kt],m={logger:f,clientName:i,commandName:a,inputFilterSensitiveLog:o,outputFilterSensitiveLog:s,...l,[kt]:{...p,commandInstance:this,...c,...n?.metricsRecorder===void 0?{}:{metricsRecorder:n.metricsRecorder}}},{requestHandler:h}=t,g=n??{};return g.metricsRecorder&&(g={...g},delete g.metricsRecorder),c.eventStream&&(g={isEventStream:!0,...g}),d.resolve(e=>h.handle(e.request,g),m)}},cn=class{_init=()=>{};_ep={};_middlewareFn=()=>[];_commandName=``;_clientName=``;_additionalContext={};_smithyContext={};_inputFilterSensitiveLog=void 0;_outputFilterSensitiveLog=void 0;_serializer=null;_deserializer=null;_operationSchema;init(e){this._init=e}ep(e){return this._ep=e,this}m(e){return this._middlewareFn=e,this}s(e,t,n={}){return this._smithyContext={service:e,operation:t,...n},this}c(e={}){return this._additionalContext=e,this}n(e,t){return this._clientName=e,this._commandName=t,this}f(e=e=>e,t=e=>e){return this._inputFilterSensitiveLog=e,this._outputFilterSensitiveLog=t,this}ser(e){return this._serializer=e,this}de(e){return this._deserializer=e,this}sc(e){return this._operationSchema=e,this._smithyContext.operationSchema=e,this}build(){let e=this,t;return t=class extends sn{input;static getEndpointParameterInstructions(){return e._ep}constructor(...[t]){super(),this.input=t??{},e._init(this),this.schema=e._operationSchema}resolveMiddleware(n,r,i){let a=e._operationSchema,o=a?.[4]??a?.input,s=a?.[5]??a?.output;return this.resolveMiddlewareWithContext(n,r,i,{CommandCtor:t,middlewareFn:e._middlewareFn,clientName:e._clientName,commandName:e._commandName,inputFilterSensitiveLog:e._inputFilterSensitiveLog??(a?on.bind(null,o):e=>e),outputFilterSensitiveLog:e._outputFilterSensitiveLog??(a?on.bind(null,s):e=>e),smithyContext:e._smithyContext,additionalContext:e._additionalContext})}serialize=e._serializer;deserialize=e._deserializer}}},ln=class e extends Error{$fault;$response;$retryable;$metadata;constructor(e){super(e.message),Object.setPrototypeOf(this,Object.getPrototypeOf(this).constructor.prototype),this.name=e.name,this.$fault=e.$fault,this.$metadata=e.$metadata}static isInstance(t){if(!t)return!1;let n=t;return e.prototype.isPrototypeOf(n)||!!n.$fault&&!!n.$metadata&&(n.$fault===`client`||n.$fault===`server`)}static[Symbol.hasInstance](t){if(!t)return!1;let n=t;if(this===e)return e.isInstance(t);if(e.isInstance(t)){if(this.prototype.isPrototypeOf(t))return!0;let e=this.name;if(!e||!n.name)return!1;if(n.name===e)return!0;let r=Object.getPrototypeOf(n);for(;r&&r!==Object.prototype;){let t=r.constructor?.name;if(t&&t!==`Error`&&t===e)return!0;r=Object.getPrototypeOf(r)}return!1}return!1}},un=(e,t={})=>(Object.entries(t).filter(([,e])=>e!==void 0).forEach(([t,n])=>{(e[t]==null||e[t]===``)&&(e[t]=n)}),e.message=e.message||e.Message||`UnknownError`,delete e.Message,e),dn=e=>{switch(e){case`standard`:return{retryMode:`standard`,connectionTimeout:3100};case`in-region`:return{retryMode:`standard`,connectionTimeout:1100};case`cross-region`:return{retryMode:`standard`,connectionTimeout:3100};case`mobile`:return{retryMode:`standard`,connectionTimeout:3e4};default:return{}}},fn=Object.values(Ot),pn=e=>{let t=[];for(let n in Ot){if(!r(Ot,n))continue;let i=Ot[n];e[i]!==void 0&&t.push({algorithmId:()=>i,checksumConstructor:()=>e[i]})}for(let[n,r]of Object.entries(e.checksumAlgorithms??{}))t.push({algorithmId:()=>n,checksumConstructor:()=>r});return{addChecksumAlgorithm(n){e.checksumAlgorithms=e.checksumAlgorithms??{};let r=n.algorithmId(),i=n.checksumConstructor();fn.includes(r)?e.checksumAlgorithms[r.toUpperCase()]=i:e.checksumAlgorithms[r]=i,t.push(n)},checksumAlgorithms(){return t}}},mn=e=>{let t={};return e.checksumAlgorithms().forEach(e=>{let n=e.algorithmId();fn.includes(n)&&(t[n]=e.checksumConstructor())}),t},hn=e=>({setRetryStrategy(t){e.retryStrategy=t},retryStrategy(){return e.retryStrategy}}),gn=e=>{let t={};return t.retryStrategy=e.retryStrategy(),t},_n=e=>Object.assign(pn(e),hn(e)),vn=e=>Object.assign(mn(e),gn(e)),yn=e=>{let t=`#text`;for(let n in e)r(e,n)&&(e[n][t]===void 0?typeof e[n]==`object`&&e[n]!==null&&(e[n]=yn(e[n])):e[n]=e[n][t]);return e},bn=class{trace(){}debug(){}info(){}warn(){}error(){}};function xn(e,t,n,r){return function(i,a,o,s,c={}){let l=Object.assign({},e,i);return sn.classBuilder().ep(l).m(function(e,t,n,i){let o=a.call(this,e,t,n,i);return o.unshift(r(n,e.getEndpointParameterInstructions())),o}).s(t,o,c).n(n,o.charAt(0).toUpperCase()+o.slice(1)+`Command`).sc(s).build()}}var Sn=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,Cn=Object.entries(Sn).reduce((e,[t,n])=>(e[n]=Number(t),e),{}),wn=Sn.split(``),Tn=e=>{let t=e.length/4*3;e.slice(-2)===`==`?t-=2:e.slice(-1)===`=`&&t--;let n=new ArrayBuffer(t),r=new DataView(n);for(let t=0;t>=6;let a=t/4*3;n>>=i%8;let o=Math.floor(i/8);for(let e=0;e>t)}}return new Uint8Array(n)};function En(e){let n;n=typeof e==`string`?t(e):e;let r=typeof n==`object`&&typeof n.length==`number`,i=typeof n==`object`&&typeof n.byteOffset==`number`&&typeof n.byteLength==`number`;if(!r&&!i)throw Error(`@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.`);let a=``;for(let e=0;e>n]}a+=`==`.slice(0,4-i)}return a}function Dn(e,t,n,r){return class i extends Uint8Array{static fromString(e,n=`utf-8`){if(typeof e==`string`)return n===`base64`?i.mutate(r(e)):i.mutate(t(e));throw Error(`Unsupported conversion from ${typeof e} to Uint8ArrayBlobAdapter.`)}static mutate(e){return Object.setPrototypeOf(e,i.prototype),e}transformToString(t=`utf-8`){return t===`base64`?n(this):e(this)}}}var M=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function On(e){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?()=>crypto.randomUUID():()=>{let t=new Uint8Array(16);return e(t),t[6]=t[6]&15|64,t[8]=t[8]&63|128,M[t[0]]+M[t[1]]+M[t[2]]+M[t[3]]+`-`+M[t[4]]+M[t[5]]+`-`+M[t[6]]+M[t[7]]+`-`+M[t[8]]+M[t[9]]+`-`+M[t[10]]+M[t[11]]+M[t[12]]+M[t[13]]+M[t[14]]+M[t[15]]}}var kn=e=>{if(e!=null){if(typeof e==`string`){let t=parseFloat(e);if(!Number.isNaN(t))return String(t)!==String(e)&&Wn.warn(Un(`Expected number but observed string: ${e}`)),t}if(typeof e==`number`)return e;throw TypeError(`Expected number, got ${typeof e}: ${e}`)}},An=Math.ceil(2**127*(2-2**-23)),jn=e=>{let t=kn(e);if(t!==void 0&&!Number.isNaN(t)&&t!==1/0&&t!==-1/0&&Math.abs(t)>An)throw TypeError(`Expected 32-bit float, got ${e}`);return t},Mn=e=>{if(e!=null){if(Number.isInteger(e)&&!Number.isNaN(e))return e;throw TypeError(`Expected integer, got ${typeof e}: ${e}`)}},Nn=e=>Fn(e,16),Pn=e=>Fn(e,8),Fn=(e,t)=>{let n=Mn(e);if(n!==void 0&&In(n,t)!==n)throw TypeError(`Expected ${t}-bit integer, got ${e}`);return n},In=(e,t)=>{switch(t){case 32:return Int32Array.of(e)[0];case 16:return Int16Array.of(e)[0];case 8:return Int8Array.of(e)[0]}},Ln=e=>kn(typeof e==`string`?Bn(e):e),Rn=e=>jn(typeof e==`string`?Bn(e):e),zn=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,Bn=e=>{let t=e.match(zn);if(t===null||t[0].length!==e.length)throw TypeError(`Expected real number, got implicit NaN`);return parseFloat(e)},Vn=e=>Nn(typeof e==`string`?Bn(e):e),Hn=e=>Pn(typeof e==`string`?Bn(e):e),Un=e=>String(TypeError(e).stack||e).split(` +`).slice(0,5).filter(e=>!e.includes(`stackTraceWarning`)).join(` +`),Wn={warn:console.warn},Gn=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Kn=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function qn(e){let t=e.getUTCFullYear(),n=e.getUTCMonth(),r=e.getUTCDay(),i=e.getUTCDate(),a=e.getUTCHours(),o=e.getUTCMinutes(),s=e.getUTCSeconds(),c=i<10?`0${i}`:`${i}`,l=a<10?`0${a}`:`${a}`,u=o<10?`0${o}`:`${o}`,d=s<10?`0${s}`:`${s}`;return`${Gn[r]}, ${c} ${Kn[n]} ${t} ${l}:${u}:${d} GMT`}var Jn=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}:\d{2})|[zZ])$/),Yn=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC-3339 date-times must be expressed as strings`);let t=Jn.exec(e);if(!t)throw TypeError(`Invalid RFC-3339 date-time value`);let[n,r,i,a,o,s,c,l,u]=t,d=tr(Vn(fr(r)),lr(i,`month`,1,12),lr(a,`day`,1,31),{hours:o,minutes:s,seconds:c,fractionalMilliseconds:l});return u.toUpperCase()!=`Z`&&d.setTime(d.getTime()-dr(u)),d},Xn=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),Zn=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),Qn=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/),$n=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC-7231 date-times must be expressed as strings`);let t=Xn.exec(e);if(t){let[e,n,r,i,a,o,s,c]=t;return tr(Vn(fr(i)),ar(r),lr(n,`day`,1,31),{hours:a,minutes:o,seconds:s,fractionalMilliseconds:c})}if(t=Zn.exec(e),t){let[e,n,r,i,a,o,s,c]=t;return ir(tr(nr(i),ar(r),lr(n,`day`,1,31),{hours:a,minutes:o,seconds:s,fractionalMilliseconds:c}))}if(t=Qn.exec(e),t){let[e,n,r,i,a,o,s,c]=t;return tr(Vn(fr(c)),ar(n),lr(r.trimLeft(),`day`,1,31),{hours:i,minutes:a,seconds:o,fractionalMilliseconds:s})}throw TypeError(`Invalid RFC-7231 date-time value`)},er=e=>{if(e==null)return;let t;if(typeof e==`number`)t=e;else if(typeof e==`string`)t=Ln(e);else if(typeof e==`object`&&e.tag===1)t=e.value;else throw TypeError(`Epoch timestamps must be expressed as floating point numbers or their string representation`);if(Number.isNaN(t)||t===1/0||t===-1/0)throw TypeError(`Epoch timestamps must be valid, non-Infinite, non-NaN numerics`);return new Date(Math.round(t*1e3))},tr=(e,t,n,r)=>{let i=t-1;return sr(e,i,n),new Date(Date.UTC(e,i,n,lr(r.hours,`hour`,0,23),lr(r.minutes,`minute`,0,59),lr(r.seconds,`seconds`,0,60),ur(r.fractionalMilliseconds)))},nr=e=>{let t=new Date().getUTCFullYear(),n=Math.floor(t/100)*100+Vn(fr(e));return ne.getTime()-new Date().getTime()>rr?new Date(Date.UTC(e.getUTCFullYear()-100,e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds())):e,ar=e=>{let t=Kn.indexOf(e);if(t<0)throw TypeError(`Invalid month: ${e}`);return t+1},or=[31,28,31,30,31,30,31,31,30,31,30,31],sr=(e,t,n)=>{let r=or[t];if(t===1&&cr(e)&&(r=29),n>r)throw TypeError(`Invalid day for ${Kn[t]} in ${e}: ${n}`)},cr=e=>e%4==0&&(e%100!=0||e%400==0),lr=(e,t,n,r)=>{let i=Hn(fr(e));if(ir)throw TypeError(`${t} must be between ${n} and ${r}, inclusive`);return i},ur=e=>e==null?0:Rn(`0.`+e)*1e3,dr=e=>{let t=e[0],n=1;if(t==`+`)n=1;else if(t==`-`)n=-1;else throw TypeError(`Offset direction, ${t}, must be "+" or "-"`);let r=Number(e.substring(1,3)),i=Number(e.substring(4,6));return n*(r*60+i)*60*1e3},fr=e=>{let t=0;for(;te&&typeof e==`object`&&(e instanceof pr||`deserializeJSON`in e)?e:typeof e==`string`||Object.getPrototypeOf(e)===String.prototype?pr(String(e)):pr(JSON.stringify(e)),pr.fromObject=pr.from;var mr=`(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?`,hr=`(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)`,gr=`(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?`,_r=`(\\d?\\d)`,vr=`(\\d{4})`,yr=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/),br=RegExp(`^${mr}, ${_r} ${hr} ${vr} ${gr} GMT$`),xr=RegExp(`^${mr}, ${_r}-${hr}-(\\d\\d) ${gr} GMT$`),Sr=RegExp(`^${mr} ${hr} ( [1-9]|\\d\\d) ${gr} ${vr}$`),Cr=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],wr=e=>{if(e==null)return;let t=NaN;if(typeof e==`number`)t=e;else if(typeof e==`string`){if(!/^-?\d*\.?\d+$/.test(e))throw TypeError(`parseEpochTimestamp - numeric string invalid.`);t=Number.parseFloat(e)}else typeof e==`object`&&e.tag===1&&(t=e.value);if(isNaN(t)||Math.abs(t)===1/0)throw TypeError(`Epoch timestamps must be valid finite numbers.`);return new Date(Math.round(t*1e3))},Tr=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC3339 timestamps must be strings`);let t=yr.exec(e);if(!t)throw TypeError(`Invalid RFC3339 timestamp format ${e}`);let[,n,r,i,a,o,s,,c,l]=t;N(r,1,12),N(i,1,31),N(a,0,23),N(o,0,59),N(s,0,60);let u=new Date(Date.UTC(Number(n),Number(r)-1,Number(i),Number(a),Number(o),Number(s),Number(c)?Math.round(parseFloat(`0.${c}`)*1e3):0));if(u.setUTCFullYear(Number(n)),l.toUpperCase()!=`Z`){let[,e,t,n]=/([+-])(\d\d):(\d\d)/.exec(l)||[void 0,`+`,0,0],r=e===`-`?1:-1;u.setTime(u.getTime()+r*(Number(t)*60*60*1e3+Number(n)*60*1e3))}return u},Er=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC7231 timestamps must be strings.`);let t,n,r,i,a,o,s,c;if((c=br.exec(e))?[,t,n,r,i,a,o,s]=c:(c=xr.exec(e))?([,t,n,r,i,a,o,s]=c,r=(Number(r)+1900).toString()):(c=Sr.exec(e))&&([,n,t,i,a,o,s,r]=c),r&&o){let e=Date.UTC(Number(r),Cr.indexOf(n),Number(t),Number(i),Number(a),Number(o),s?Math.round(parseFloat(`0.${s}`)*1e3):0);N(t,1,31),N(i,0,23),N(a,0,59),N(o,0,60);let c=new Date(e);return c.setUTCFullYear(Number(r)),c}throw TypeError(`Invalid RFC7231 date-time value ${e}.`)};function N(e,t,n){let r=Number(e);if(rn)throw Error(`Value ${r} out of range [${t}, ${n}]`)}var Dr=e=>{let t=e.length,n=[],r=!1,i,a=0;for(let o=0;o{e=e.trim();let t=e.length;return t<2?e:(e[0]===`"`&&e[t-1]===`"`&&(e=e.slice(1,t-1)),e.replace(/\\"/g,`"`))})},Or=/^-?((0|[1-9]\d*)(\.\d+)?|\.\d+)([eE][+-]?\d+)?$/,kr=class e{string;type;constructor(e,t){if(this.string=e,this.type=t,!Or.test(e))throw Error(`@smithy/core/serde - NumericValue string must conform to the Smithy bigDecimal format. Received: "${e}"`)}toString(){return this.string}static[Symbol.hasInstance](t){if(!t||typeof t!=`object`)return!1;let n=t;return e.prototype.isPrototypeOf(t)||n.type===`bigDecimal`&&Or.test(n.string)}},Ar=typeof TextEncoder==`function`?new TextEncoder:null,jr=e=>{if(typeof e==`string`){if(Ar)return Ar.encode(e).byteLength;let t=e.length;for(let n=t-1;n>=0;n--){let r=e.charCodeAt(n);r>127&&r<=2047?t++:r>2047&&r<=65535&&(t+=2),r>=56320&&r<=57343&&n--}return t}if(typeof e.byteLength==`number`)return e.byteLength;if(typeof e.size==`number`)return e.size;throw Error(`Body Length computation failed for ${e}`)},Mr=e=>e instanceof Uint8Array?e:typeof e==`string`?t(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(e);function Nr(e,t){if(t===void 0){t=0;for(let n of e)t+=n.byteLength}let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}var Pr=e=>typeof ArrayBuffer==`function`&&e instanceof ArrayBuffer||Object.prototype.toString.call(e)===`[object ArrayBuffer]`,Fr=async e=>void 0,Ir=async e=>{let t=e?.Bucket||``;if(typeof e.Bucket==`string`&&(e.Bucket=t.replace(/#/g,`%23`).replace(/\?/g,`%3F`)),Vr(t)){if(e.ForcePathStyle===!0)throw Error(`Path-style addressing cannot be used with ARN buckets`)}else(!Br(t)||t.indexOf(`.`)!==-1&&!String(e.Endpoint).startsWith(`http:`)||t.toLowerCase()!==t||t.length<3)&&(e.ForcePathStyle=!0);return e.DisableMultiRegionAccessPoints&&(e.disableMultiRegionAccessPoints=!0,e.DisableMRAP=!0),e},Lr=/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/,Rr=/(\d+\.){3}\d+/,zr=/\.\./,Br=e=>Lr.test(e)&&!Rr.test(e)&&!zr.test(e),Vr=e=>{let[t,n,r,,,i]=e.split(`:`),a=t===`arn`&&e.split(`:`).length>=6,o=!!(a&&n&&r&&i);if(a&&!o)throw Error(`Invalid ARN: ${e} was an invalid ARN.`);return o},Hr=(e,t,n,r=!1)=>{let i=async()=>{let i;return i=r?n.clientContextParams?.[e]??n[e]??n[t]:n[e]??n[t],typeof i==`function`?i():i};return e===`credentialScope`||t===`CredentialScope`?async()=>{let e=typeof n.credentials==`function`?await n.credentials():n.credentials;return e?.credentialScope??e?.CredentialScope}:e===`accountId`||t===`AccountId`?async()=>{let e=typeof n.credentials==`function`?await n.credentials():n.credentials;return e?.accountId??e?.AccountId}:e===`endpoint`||t===`endpoint`?async()=>{if(n.isCustomEndpoint===!1)return;let e=await i();if(e&&typeof e==`object`){if(`url`in e)return e.url.href;if(`hostname`in e){let{protocol:t,hostname:n,port:r,path:i}=e;return`${t}//${n}${r?`:`+r:``}${i}`}}return e}:i};function Ur(e){return async(t,n,r,i)=>{if(!r.isCustomEndpoint&&!r.ignoreConfiguredEndpointUrls){let t;t=r.serviceConfiguredEndpoint?await r.serviceConfiguredEndpoint():await e(r.serviceId),t&&(r.endpoint=()=>Promise.resolve(zt(t)),r.isCustomEndpoint=!0,i?.logger?.debug?.(`@smithy/core/endpoints - resolved endpoint from config: ${t}`))}let a=await Wr(t,n,r);if(typeof r.endpointProvider!=`function`)throw Error(`config.endpointProvider is not set.`);let o=r.endpointProvider(a,i);if(r.isCustomEndpoint&&r.endpoint){let e=await r.endpoint();if(e?.headers){o.headers??={};for(let[t,n]of Object.entries(e.headers))o.headers[t]=Array.isArray(n)?n:[n]}}return o}}var Wr=async(e,t,n)=>{let r={},i=t?.getEndpointParameterInstructions?.()||{};for(let[t,a]of Object.entries(i))switch(a.type){case`staticContextParams`:r[t]=a.value;break;case`contextParams`:r[t]=e[a.name];break;case`clientContextParams`:case`builtInParams`:r[t]=await Hr(a.name,t,n,a.type!==`builtInParams`)();break;case`operationContextParams`:r[t]=a.get(e);break;default:throw Error(`Unrecognized endpoint parameter instruction: `+JSON.stringify(a))}return Object.keys(i).length===0&&Object.assign(r,n),String(n.serviceId).toLowerCase()===`s3`&&await Ir(r),r};function Gr(e,t,n){e.__smithy_context?e.__smithy_context.features||(e.__smithy_context.features={}):e.__smithy_context={features:{}},e.__smithy_context.features[t]=n}function Kr(e){let t=Ur(e);return({config:e,instructions:n})=>(r,i)=>async a=>{e.isCustomEndpoint&&Gr(i,`ENDPOINT_OVERRIDE`,`N`);let o=await t(a.input,{getEndpointParameterInstructions(){return n}},{...e},i);i.endpointV2=o,i.authSchemes=o.properties?.authSchemes;let s=i.authSchemes?.[0];if(s){i.signing_region=s.signingRegion,i.signing_service=s.signingName;let e=At(i)?.selectedHttpAuthScheme?.httpAuthOption;e&&(e.signingProperties=Object.assign(e.signingProperties||{},{signing_region:s.signingRegion,signingRegion:s.signingRegion,signing_service:s.signingName,signingName:s.signingName,signingRegionSet:s.signingRegionSet},s.properties))}return r({...a})}}var qr={step:`serialize`,tags:[`ENDPOINT_PARAMETERS`,`ENDPOINT_V2`,`ENDPOINT`],name:`endpointV2Middleware`,override:!0,relation:`before`,toMiddleware:{name:`serializerMiddleware`,step:`serialize`,tags:[`SERIALIZER`],override:!0}.name};function Jr(e){let t=Kr(e);return(e,n)=>({applyToStack:r=>{r.addRelativeTo(t({config:e,instructions:n}),qr)}})}function Yr(e){return t=>{let n=t.tls??!0,{endpoint:r,useDualstackEndpoint:i,useFipsEndpoint:a}=t,o=Object.assign(t,{endpoint:r==null?void 0:async()=>zt(await It(r)()),tls:n,isCustomEndpoint:!!r,useDualstackEndpoint:It(i??!1),useFipsEndpoint:It(a??!1),ignoreConfiguredEndpointUrls:!!t.ignoreConfiguredEndpointUrls}),s;return o.serviceConfiguredEndpoint=async()=>(t.serviceId&&!s&&(s=e(t.serviceId)),s),o}}var Xr=class e{nodes;root;conditions;results;constructor(e,t,n,r){this.nodes=e,this.root=t,this.conditions=n,this.results=r}static from(t,n,r,i){return new e(t,n,r,i)}},Zr=class{capacity;data=new Map;parameters=[];constructor({size:e,params:t}){this.capacity=e??50,t&&(this.parameters=t)}get(e,t){let n=this.hash(e);if(n===!1)return t();if(!this.data.has(n)){if(this.data.size>this.capacity+10){let e=this.data.keys(),t=0;for(;;){let{value:n,done:r}=e.next();if(this.data.delete(n),r||++t>10)break}}this.data.set(n,t())}return this.data.get(n)}size(){return this.data.size}hash(e){let t=``,{parameters:n}=this;if(n.length===0)return!1;for(let r of n){let n=String(e[r]??``);if(n.includes(`|;`))return!1;t+=n+`|;`}return t}},P=class extends Error{constructor(e){super(e),this.name=`EndpointError`}},Qr=`endpoints`;function $r(e){return typeof e!=`object`||!e?e:`ref`in e?`$${$r(e.ref)}`:`fn`in e?`${e.fn}(${(e.argv||[]).map($r).join(`, `)})`:JSON.stringify(e,null,2)}var ei={},ti=(e,t)=>e===t;function ni(...e){for(let t of e)if(t!=null)return t}var ri=e=>{let t=e.split(`.`),n=[];for(let r of t){let t=r.indexOf(`[`);if(t!==-1){if(r.indexOf(`]`)!==r.length-1)throw new P(`Path: '${e}' does not end with ']'`);let i=r.slice(t+1,-1);if(Number.isNaN(parseInt(i)))throw new P(`Invalid array index: '${i}' in path: '${e}'`);t!==0&&n.push(r.slice(0,t)),n.push(i)}else n.push(r)}return n},ii=(e,t)=>ri(t).reduce((n,r)=>{if(typeof n!=`object`)throw new P(`Index '${r}' in '${t}' not found in '${JSON.stringify(e)}'`);if(Array.isArray(n)){let e=parseInt(r);return n[e<0?n.length+e:e]}return n[r]},e),ai=e=>e!=null;function oi(e,t,n){return e?t:n}var si=e=>!e,ci=RegExp(`^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$`),li=e=>ci.test(e)||e.startsWith(`[`)&&e.endsWith(`]`),ui={[Dt.HTTP]:80,[Dt.HTTPS]:443},di=e=>{let t=(()=>{try{if(e instanceof URL)return e;if(typeof e==`object`&&`hostname`in e){let{hostname:t,port:n,protocol:r=``,path:i=``,query:a={}}=e,o=new URL(`${r}//${t}${n?`:${n}`:``}${i}`);return o.search=Object.entries(a).map(([e,t])=>`${e}=${t}`).join(`&`),o}return new URL(e)}catch{return null}})();if(!t)return console.error(`Unable to parse ${JSON.stringify(e)} as a whatwg URL.`),null;let n=t.href,{host:r,hostname:i,pathname:a,protocol:o,search:s}=t;if(s)return null;let c=o.slice(0,-1);if(!Object.values(Dt).includes(c))return null;let l=li(i);return{scheme:c,authority:`${r}${n.includes(`${r}:${ui[c]}`)||typeof e==`string`&&e.includes(`${r}:${ui[c]}`)?`:${ui[c]}`:``}`,path:a,normalizedPath:a.endsWith(`/`)?a:`${a}/`,isIp:l}};function fi(e,t,n){if(n===1)return[e];if(e===``)return[``];let r=e.split(t);return n===0?r:r.slice(0,n-1).concat(r.slice(1).join(t))}var pi={booleanEquals:ti,coalesce:ni,getAttr:ii,isSet:ai,isValidHostLabel:Pt,ite:oi,not:si,parseURL:di,split:fi,stringEquals:(e,t)=>e===t,substring:(e,t,n,r)=>e==null||t>=n||e.lengthencodeURIComponent(e).replace(/[!*'()]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},mi=(e,t)=>{let n=[],{referenceRecord:r,endpointParams:i}=t,a=0;for(;at.referenceRecord[e]??t.endpointParams[e],gi=(e,t,n)=>{if(typeof e==`string`)return mi(e,n);if(e.fn)return vi.callFunction(e,n);if(e.ref)return hi(e,n);throw new P(`'${t}': ${String(e)} is not a string, function or reference.`)},_i=({fn:e,argv:t},n)=>{let r=Array(t.length);for(let e=0;e{let{assign:n}=e;if(n&&n in t.referenceRecord)throw new P(`'${n}' is already defined in Reference Record.`);let r=_i(e,t);t.logger?.debug?.(`${Qr} evaluateCondition: ${$r(e)} = ${$r(r)}`);let i=r===``||!!r;return n==null?{result:i}:{result:i,toAssign:{name:n,value:r}}},bi=(e,t)=>Object.entries(e??{}).reduce((e,[n,r])=>(e[n]=r.map(e=>{let r=gi(e,`Header value entry`,t);if(typeof r!=`string`)throw new P(`Header '${n}' value '${r}' is not a string`);return r}),e),{}),xi=(e,t)=>Object.entries(e).reduce((e,[n,r])=>(e[n]=Ci.getEndpointProperty(r,t),e),{}),Si=(e,t)=>{if(Array.isArray(e))return e.map(e=>Si(e,t));switch(typeof e){case`string`:return mi(e,t);case`object`:if(e===null)throw new P(`Unexpected endpoint property: ${e}`);return Ci.getEndpointProperties(e,t);case`boolean`:return e;default:throw new P(`Unexpected endpoint property type: ${typeof e}`)}},Ci={getEndpointProperty:Si,getEndpointProperties:xi},wi=(e,t)=>{let n=gi(e,`Endpoint URL`,t);if(typeof n==`string`)try{return new URL(n)}catch(e){throw console.error(`Failed to construct URL with ${n}`,e),e}throw new P(`Endpoint URL must be a string, got ${typeof n}`)},Ti=1e8,Ei=(e,t)=>{let{nodes:n,root:r,results:i,conditions:a}=e,o=r,s={},c={referenceRecord:s,endpointParams:t.endpointParams,logger:t.logger};for(;o!==1&&o!==-1&&o=0===f.result?r:i}if(o>=Ti){let e=i[o-Ti];if(e[0]===-1){let[,t]=e;throw new P(gi(t,`Error`,c))}let[t,n,r]=e;return{url:wi(t,c),properties:xi(n,c),headers:bi(r??{},c)}}throw new P(`No matching endpoint.`)},Di=Ur(Fr),Oi=Yr(Fr);Kr(Fr);var ki=Jr(Fr),Ai=e=>typeof ReadableStream==`function`&&(e?.constructor?.name===ReadableStream.name||e instanceof ReadableStream),ji=e=>typeof Blob==`function`&&(e?.constructor?.name===Blob.name||e instanceof Blob),Mi=async e=>ji(e)?Ni(e):Pi(e);async function Ni(e){return e.arrayBuffer().then(e=>new Uint8Array(e))}async function Pi(e){let t=[],n=e.getReader(),r=0;for(;;){let{done:e,value:i}=await n.read();if(i&&(t.push(i),r+=i.length),e)break}return Nr(t,r)}var Fi=class extends Dn(i,t,En,Tn){},Ii=On(e=>crypto.getRandomValues(e)),Li=Ii,Ri=async(e=new Uint8Array,t)=>{if(e instanceof Uint8Array)return Fi.mutate(e);if(!e)return Fi.mutate(new Uint8Array);let n=t.streamCollector(e);return Fi.mutate(await n)};function zi(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return`%`+e.charCodeAt(0).toString(16).toUpperCase()})}var Bi=class{serdeContext;setSerdeContext(e){this.serdeContext=e}},Vi=`modulepreload`,Hi=function(e){return`/`+e},Ui={},Wi=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Hi(t,n),t=s(t),t in Ui)return;Ui[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Vi,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Gi=class extends Bi{options;compositeErrorRegistry;constructor(t){super(),this.options=t,this.compositeErrorRegistry=new e(t.defaultNamespace);for(let e of t.errorTypeRegistries??[])this.compositeErrorRegistry.copyFrom(e)}getRequestType(){return A}getResponseType(){return Mt}setSerdeContext(e){this.serdeContext=e,this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e),this.getPayloadCodec()&&this.getPayloadCodec().setSerdeContext(e)}updateServiceEndpoint(e,t){if(`url`in t){e.protocol=t.url.protocol,e.hostname=t.url.hostname,e.port=t.url.port?Number(t.url.port):void 0,e.path=t.url.pathname,e.fragment=t.url.hash||void 0,e.username=t.url.username||void 0,e.password=t.url.password||void 0,e.query||={};for(let[n,r]of t.url.searchParams.entries())e.query[n]=r;if(t.headers)for(let n in t.headers)r(t.headers,n)&&(e.headers[n]=t.headers[n].join(`, `));return e}if(e.protocol=t.protocol,e.hostname=t.hostname,e.port=t.port?Number(t.port):void 0,e.path=t.path,e.query={...t.query},t.headers)for(let n in t.headers)r(t.headers,n)&&(e.headers[n]=t.headers[n]);return e}setHostPrefix(e,t,n){if(this.serdeContext?.disableHostPrefix)return;let r=j.of(t.input),i=Zt(t.traits??{});if(i.endpoint){let t=i.endpoint?.[0];if(typeof t==`string`){for(let[e,i]of r.structIterator()){if(!i.getMergedTraits().hostLabel)continue;let r=n[e];if(typeof r!=`string`)throw Error(`@smithy/core/schema - ${e} in input must be a string as hostLabel.`);t=t.replace(`{${e}}`,r)}if(e.hostname=t+e.hostname,!Ft(e.hostname))throw Error(`[${e.hostname}] is not a valid hostname.`)}}}deserializeMetadata(e){return{httpStatusCode:e.statusCode,requestId:e.headers[`x-amzn-requestid`]??e.headers[`x-amzn-request-id`]??e.headers[`x-amz-request-id`],extendedRequestId:e.headers[`x-amz-id-2`],cfId:e.headers[`x-amz-cf-id`]}}resolveError(e,t,n){let r=[-3,``,`Error`,0,[],[],0],i;for(let r of n)for(let n of t)try{i=n===`*`?r.getSchema(e):r.getSchema(n+`#`+e);let t=r.getErrorCtor(i);if(t)return[i,t,`modeled`];{let e=r.getBaseException();if(e){let t=r.getErrorCtor(e);if(t)return[i,t,`synthetic`]}}}catch{}for(let e of n){let t=e.getBaseException();if(t){let n=e.getErrorCtor(t);if(n)return[t,n,`synthetic`]}}return[r,Error,`native`]}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n}){return(await this.loadEventStreamCapability()).serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n})}async deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n}){return(await this.loadEventStreamCapability()).deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n})}async loadEventStreamCapability(){let{EventStreamSerde:e,eventStreamSerdeProvider:t}=await Wi(async()=>{let{EventStreamSerde:e,eventStreamSerdeProvider:t}=await import(`./index.browser-DulSzCmu.js`);return{EventStreamSerde:e,eventStreamSerdeProvider:t}},__vite__mapDeps([0,1,2,3]));return new e({marshaller:this.resolveEventStreamMarshaller(t),serializer:this.serializer,deserializer:this.deserializer,serdeContext:this.serdeContext,defaultContentType:this.getDefaultContentType(),compositeErrorRegistry:this.compositeErrorRegistry})}getDefaultContentType(){throw Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`)}async deserializeHttpMessage(e,t,n,r,i){return[]}getEventStreamMarshaller(){let e=this.serdeContext;if(!e.eventStreamMarshaller)throw Error(`@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.`);return e.eventStreamMarshaller}resolveEventStreamMarshaller(e){let t=this.serdeContext;return t.eventStreamMarshaller?t.eventStreamMarshaller:e(this.serdeContext)}},Ki=class extends Gi{async serializeRequest(e,t,n){let r=this.serializer,i={},a={},o=await n.endpoint(),s=j.of(e?.input),c=s.getSchema(),l,u=t&&typeof t==`object`?t:{},d=new A({protocol:``,hostname:``,port:void 0,path:`/`,fragment:void 0,query:i,headers:a,body:void 0});if(o&&(this.updateServiceEndpoint(d,o),this.setHostPrefix(d,e,u)),u){let e=s.getEventStreamMember();if(e){if(u[e]){let t={};for(let[n]of s.structIterator())n!==e&&u[n]!=null&&(t[n]=u[n]);l=await this.serializeEventStream({eventStream:u[e],requestSchema:s,initialRequest:t})}}else r.write(c,u),l=r.flush()}return d.headers=Object.assign(d.headers,a),d.query=i,d.body=l,d.method=`POST`,d}async deserializeResponse(e,t,n){let i=this.deserializer,a=j.of(e.output),o={};if(n.statusCode>=300){let r=await Ri(n.body,t);throw r.byteLength>0&&Object.assign(o,await i.read(15,r)),await this.handleError(e,t,n,o,this.deserializeMetadata(n)),Error(`@smithy/core/protocols - RPC Protocol error handler failed to throw.`)}for(let e in n.headers){if(!r(n.headers,e))continue;let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let s=a.getEventStreamMember();if(s)o[s]=await this.deserializeEventStream({response:n,responseSchema:a,initialResponseContainer:o});else{let e=await Ri(n.body,t);e.byteLength>0&&Object.assign(o,await i.read(a,e))}return o.$metadata=this.deserializeMetadata(n),o}};function qi(e,t){if(t.timestampFormat.useTrait&&e.isTimestampSchema()&&(e.getSchema()===5||e.getSchema()===6||e.getSchema()===7))return e.getSchema();let{httpLabel:n,httpPrefixHeaders:r,httpHeader:i,httpQuery:a}=e.getMergedTraits();return(t.httpBindings?typeof r==`string`||i?6:a||n?5:void 0:void 0)??t.timestampFormat.default}var Ji=class extends Bi{settings;constructor(e){super(),this.settings=e}read(e,t){let n=j.of(e);if(n.isListSchema())return Dr(t).map(e=>this.read(n.getValueSchema(),e));if(n.isBlobSchema())return(this.serdeContext?.base64Decoder??Tn)(t);if(n.isTimestampSchema())switch(qi(n,this.settings)){case 5:return Tr(t);case 6:return Er(t);case 7:return wr(t);default:return console.warn(`Missing timestamp format, parsing value with Date constructor:`,t),new Date(t)}if(n.isStringSchema()){let e=n.getMergedTraits().mediaType,r=t;if(e)return n.getMergedTraits().httpHeader&&(r=this.base64ToUtf8(r)),(e===`application/json`||e.endsWith(`+json`))&&(r=pr.from(r)),r}return n.isNumericSchema()?Number(t):n.isBigIntegerSchema()?BigInt(t):n.isBigDecimalSchema()?new kr(t,`bigDecimal`):n.isBooleanSchema()?String(t).toLowerCase()===`true`:t}base64ToUtf8(e){return(this.serdeContext?.utf8Encoder??i)((this.serdeContext?.base64Decoder??Tn)(e))}},Yi=e=>(e.logger&&e.logger.constructor?.name!==`NoOpLogger`&&e.requestHandler?.updateHttpClientConfig?.(Symbol.for(`logger`),e.logger),{setHttpHandler(t){e.requestHandler=t},httpHandler(){return e.requestHandler},updateHttpClientConfig(t,n){e.requestHandler?.updateHttpClientConfig(t,n)},httpHandlerConfigs(){return e.requestHandler.httpHandlerConfigs()}}),Xi=e=>({requestHandler:e.httpHandler()}),Zi=`content-length`;function Qi(e){return t=>async n=>{let r=n.request;if(A.isInstance(r)){let{body:t,headers:n}=r;if(t&&Object.keys(n).map(e=>e.toLowerCase()).indexOf(Zi)===-1)try{let n=e(t);n!=null&&(r.headers={...r.headers,[Zi]:String(n)})}catch{}}return t({...n,request:r})}}var $i={step:`build`,tags:[`SET_CONTENT_LENGTH`,`CONTENT_LENGTH`],name:`contentLengthMiddleware`,override:!0},ea=e=>({applyToStack:t=>{t.add(Qi(e.bodyLengthChecker),$i)}}),ta=e=>encodeURIComponent(e).replace(/[!'()*]/g,na),na=e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`;function ra(e){let t=[];for(let n of Object.keys(e).sort()){let r=e[n];if(n=ta(n),Array.isArray(r))for(let e=0,i=r.length;ee?.$retryable!==void 0,ua=e=>e.$metadata?.clockSkewCorrected,da=e=>{let t=new Set([`Failed to fetch`,`NetworkError when attempting to fetch resource`,`The Internet connection appears to be offline`,`Load failed`,`Network request failed`]);return e&&e instanceof TypeError?t.has(e.message):!1},fa=e=>e.$metadata?.httpStatusCode===429||ia.includes(e.name)||e.$retryable?.throttling==1,pa=(e,t=0)=>e?.name!==`AbortError`&&(la(e)||ua(e)||e.name===`InvalidSignatureException`&&e.message?.includes(`Signature expired`)||aa.includes(e.name)||sa.includes(e?.code||``)||ca.includes(e?.code||``)||oa.includes(e.$metadata?.httpStatusCode||0)||da(e)||ha(e)||e.cause!==void 0&&t<=10&&pa(e.cause,t+1)),ma=e=>{if(e.$metadata?.httpStatusCode!==void 0){let t=e.$metadata.httpStatusCode;return 500<=t&&t<=599&&!pa(e)}return!1};function ha(e){return e.code===`ERR_HTTP2_STREAM_ERROR`&&e.message.includes(`NGHTTP2_REFUSED_STREAM`)}var ga=2e4,_a=`amz-sdk-invocation-id`,va=`amz-sdk-request`;function ya(e,t){if(Mt.isInstance(e))for(let n in e.headers){if(!r(e.headers,n))continue;let i=n.toLowerCase();if(i===`retry-after`){let r=e.headers[n],i=NaN;if(r.endsWith(`GMT`))try{i=($n(r).getTime()-Date.now())/1e3}catch(e){t?.trace?.(`Failed to parse retry-after header`),t?.trace?.(e)}else r.match(/ GMT, ((\d+)|(\d+\.\d+))$/)?i=Number(r.match(/ GMT, ([\d.]+)$/)?.[1]):r.match(/^((\d+)|(\d+\.\d+))$/)?i=Number(r):Date.parse(r)>=Date.now()&&(i=(Date.parse(r)-Date.now())/1e3);return isNaN(i)?void 0:new Date(Date.now()+i*1e3)}if(i===`x-amz-retry-after`){let r=e.headers[n],i=Number(r);if(isNaN(i)){t?.trace?.(`Failed to parse x-amz-retry-after=${r}`);return}return new Date(Date.now()+i)}}}var ba=e=>e instanceof Error?e:e instanceof Object?Object.assign(Error(),e):Error(typeof e==`string`?e:`AWS SDK error wrapper for ${e}`);function xa(e){return t=>(n,r)=>async i=>{let a=await t.retryStrategy(),o=await t.maxAttempts();if(Ca(a)){a=a;let s=await a.acquireInitialRetryToken((r.partition_id??``)+(r.__retryLongPoll?`:longpoll`:``)),c=Error(),l=0,u=0,{request:d}=i,f=A.isInstance(d);for(f&&(d.headers[_a]=Ii());;)try{f&&(d.headers[va]=`attempt=${l+1}; max=${o}`);let{response:e,output:t}=await n(i);return a.recordSuccess(s),t.$metadata.attempts=l+1,t.$metadata.totalRetryDelay=u,{response:e,output:t}}catch(n){let i=wa(n,t.logger);if(c=ba(n),f&&e(d))throw(r.logger instanceof bn?console:r.logger)?.warn(`An error was encountered in a non-retryable streaming request.`),c;try{s=await a.refreshRetryTokenForRetry(s,i)}catch{throw c.$metadata||(c.$metadata={}),c.$metadata.attempts=l+1,c.$metadata.totalRetryDelay=u,c}l=s.getRetryCount();let o=s.getRetryDelay();u+=(s?.$retryLog?.acquisitionDelay??0)+o,o>0&&await Sa(o)}}else return a=a,a?.mode&&(r.userAgent=[...r.userAgent||[],[`cfg/retry-mode`,a.mode]]),a.retry(n,i)}}var Sa=e=>new Promise(t=>setTimeout(t,e)),Ca=e=>e.acquireInitialRetryToken!==void 0&&e.refreshRetryTokenForRetry!==void 0&&e.recordSuccess!==void 0,wa=(e,t)=>{let n={error:e,errorType:Ta(e)},r=ya(e.$response,t);return r&&(n.retryAfterHint=r),n},Ta=e=>fa(e)?`THROTTLING`:pa(e)?`TRANSIENT`:ma(e)?`SERVER_ERROR`:`CLIENT_ERROR`,Ea={name:`retryMiddleware`,tags:[`RETRY`],step:`finalizeRequest`,priority:`high`,override:!0};function Da(e){let t=xa(e);return e=>({applyToStack:n=>{n.add(t(e),Ea)}})}var Oa=class e{static setTimeoutFn=(e,t)=>setTimeout(e,t);beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(e){this.beta=e?.beta??.7,this.minCapacity=e?.minCapacity??1,this.minFillRate=e?.minFillRate??.5,this.scaleConstant=e?.scaleConstant??.4,this.smooth=e?.smooth??.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(e){let t;this.updateMeasuredRate();let n=e;if(n?.errorType===`THROTTLING`||fa(n?.error??e)){let e=this.enabled?Math.min(this.measuredTxRate,this.fillRate):this.measuredTxRate;this.lastMaxRate=e,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),t=this.cubicThrottle(e),this.enableTokenBucket()}else this.calculateTimeWindow(),t=this.cubicSuccess(this.getCurrentTimeInSeconds());let r=Math.min(t,2*this.measuredTxRate);this.updateTokenBucketRate(r)}getCurrentTimeInSeconds(){return Date.now()/1e3}async acquireTokenBucket(t){if(this.enabled){for(this.refillTokenBucket();t>this.availableTokens;){let n=(t-this.availableTokens)/this.fillRate*1e3;await new Promise(t=>e.setTimeoutFn(t,n)),this.refillTokenBucket()}this.availableTokens-=t}}refillTokenBucket(){let e=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=e;return}let t=(e-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+t),this.lastTimestamp=e}calculateTimeWindow(){this.timeWindow=this.getPrecise((this.lastMaxRate*(1-this.beta)/this.scaleConstant)**(1/3))}cubicThrottle(e){return this.getPrecise(e*this.beta)}cubicSuccess(e){return this.getPrecise(this.scaleConstant*(e-this.lastThrottleTime-this.timeWindow)**3+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(e){this.refillTokenBucket(),this.fillRate=Math.max(e,this.minFillRate),this.maxCapacity=Math.max(e,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let e=this.getCurrentTimeInSeconds(),t=Math.floor(e*2)/2;if(this.requestCount++,t>this.lastTxRateBucket){let e=this.requestCount/(t-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(e*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=t}}getPrecise(e){return parseFloat(e.toFixed(8))}},F=class e{static v2026=typeof process<`u`&&{}.SMITHY_NEW_RETRIES_2026===`true`;static delay(){return e.v2026?50:100}static throttlingDelay(){return e.v2026?1e3:500}static cost(){return e.v2026?14:5}static throttlingCost(){return e.v2026?5:10}static modifiedCostType(){return e.v2026?`THROTTLING`:`TRANSIENT`}},ka=class{x=F.delay();computeNextBackoffDelay(e){let t=Math.random()*Math.min(this.x*2**e,ga);return Math.floor(t)}setDelayBase(e){this.x=e}},Aa=class{delay;count;cost;longPoll;$retryLog={acquisitionDelay:0};constructor(e,t,n,r){this.delay=e,this.count=t,this.cost=n,this.longPoll=r}getRetryCount(){return this.count}getRetryDelay(){return Math.min(ga,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}},ja;(function(e){e.STANDARD=`standard`,e.ADAPTIVE=`adaptive`})(ja||={});var Ma=ja.STANDARD,Na={incompatible:1,attempts:2,capacity:3},Pa=class{mode=ja.STANDARD;retryBackoffStrategy;capacity=500;maxAttemptsProvider;baseDelay;constructor(e){typeof e==`number`?this.maxAttemptsProvider=async()=>e:typeof e==`function`?this.maxAttemptsProvider=e:e&&typeof e==`object`&&(this.maxAttemptsProvider=async()=>e.maxAttempts,this.baseDelay=e.baseDelay,this.retryBackoffStrategy=e.backoff),this.maxAttemptsProvider??=async()=>3,this.baseDelay??=F.delay(),this.retryBackoffStrategy??=new ka}async acquireInitialRetryToken(e){return new Aa(F.delay(),0,void 0,F.v2026&&e.includes(`:longpoll`))}async refreshRetryTokenForRetry(e,t){let n=await this.getMaxAttempts(),r=this.retryCode(e,t,n),i=r===0,a=e.isLongPoll?.();if(i||a){let n=t.errorType;this.retryBackoffStrategy.setDelayBase(n===`THROTTLING`?F.throttlingDelay():this.baseDelay);let o=this.retryBackoffStrategy.computeNextBackoffDelay(e.getRetryCount()),s=o;if(t.retryAfterHint instanceof Date&&(s=Math.max(o,Math.min(t.retryAfterHint.getTime()-Date.now(),o+5e3))),i){let t=this.getCapacityCost(n);this.capacity-=t;let r=new Aa(0,e.getRetryCount()+1,t,e.isLongPoll?.()??!1);return await new Promise(e=>setTimeout(e,s)),r.$retryLog.acquisitionDelay=s,r}{let e=F.v2026&&r===Na.capacity&&a?s:0;e>0&&await new Promise(t=>setTimeout(t,e))}}throw Error(`No retry token available`)}recordSuccess(e){this.capacity=Math.min(500,this.capacity+(e.getRetryCost()??1))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch{return console.warn(`Max attempts provider could not resolve. Using default of 3`),3}}retryCode(e,t,n){let r=e.getRetryCount()+1,i=this.isRetryableError(t.errorType)?0:Na.incompatible,a=r=this.getCapacityCost(t.errorType)?0:Na.capacity;return i||a||o}getCapacityCost(e){return e===F.modifiedCostType()?F.throttlingCost():F.cost()}isRetryableError(e){return e===`THROTTLING`||e===`TRANSIENT`}},Fa=class{mode=ja.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(e,t){let{rateLimiter:n}=t??{};this.rateLimiter=n??new Oa,this.standardRetryStrategy=t?new Pa({maxAttempts:typeof e==`number`?e:3,...t}):new Pa(e)}async acquireInitialRetryToken(e){let t=await this.standardRetryStrategy.acquireInitialRetryToken(e);return await this.rateLimiter.getSendToken(),t}async refreshRetryTokenForRetry(e,t){this.rateLimiter.updateClientSendingRate(t);let n=await this.standardRetryStrategy.refreshRetryTokenForRetry(e,t);return await this.rateLimiter.getSendToken(),n}recordSuccess(e){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(e)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}},Ia=(e,t)=>{let{retryStrategy:n,retryMode:r}=e,{defaultMaxAttempts:i=3,defaultBaseDelay:a=F.delay()}=t??{},o=It(e.maxAttempts??i),s=n?Promise.resolve(n):void 0,c=async()=>{let e=await o();return await It(r)()===ja.ADAPTIVE?new Fa(o,{maxAttempts:e,baseDelay:a}):new Pa({maxAttempts:e,baseDelay:a})};return Object.assign(e,{maxAttempts:o,retryStrategy:()=>s??=c()})},La=Da(xt);F.v2026||=typeof process==`object`&&{}.AWS_NEW_RETRIES_2026===`true`;function I(e,t,n){e.__aws_sdk_context?e.__aws_sdk_context.features||(e.__aws_sdk_context.features={}):e.__aws_sdk_context={features:{}},e.__aws_sdk_context.features[t]=n}function Ra(e){return e}var za=e=>t=>async n=>{if(!A.isInstance(n.request))return t(n);let{request:r}=n,{handlerProtocol:i=``}=e.requestHandler.metadata||{};if(i.indexOf(`h2`)>=0&&!r.headers[`:authority`])delete r.headers.host,r.headers[`:authority`]=r.hostname+(r.port?`:`+r.port:``);else if(!r.headers.host){let e=r.hostname;r.port!=null&&(e+=`:${r.port}`),r.headers.host=e}return t(n)},Ba={name:`hostHeaderMiddleware`,step:`build`,priority:`low`,tags:[`HOST`],override:!0},Va=e=>({applyToStack:t=>{t.add(za(e),Ba)}}),Ha=()=>(e,t)=>async n=>{try{let r=await e(n),{clientName:i,commandName:a,logger:o,dynamoDbDocumentClientOptions:s={}}=t,{overrideInputFilterSensitiveLog:c,overrideOutputFilterSensitiveLog:l}=s,u=c??t.inputFilterSensitiveLog,d=l??t.outputFilterSensitiveLog,{$metadata:f,...p}=r.output;return o?.info?.({clientName:i,commandName:a,input:u(n.input),output:d(p),metadata:f}),r}catch(e){let{clientName:r,commandName:i,logger:a,dynamoDbDocumentClientOptions:o={}}=t,{overrideInputFilterSensitiveLog:s}=o,c=s??t.inputFilterSensitiveLog;throw a?.error?.({clientName:r,commandName:i,input:c(n.input),error:e,metadata:e.$metadata}),e}},Ua={name:`loggerMiddleware`,tags:[`LOGGER`],step:`initialize`,override:!0},Wa=e=>({applyToStack:e=>{e.add(Ha(),Ua)}}),Ga=e=>({applyToStack:e=>{}}),Ka=(e,t)=>{if(!t||t.length===0)return e;let n=[];for(let r of t)for(let t of e)t.schemeId.split(`#`)[1]===r&&n.push(t);for(let t of e)n.find(({schemeId:e})=>e===t.schemeId)||n.push(t);return n};function qa(e){let t=new Map;for(let n of e)t.set(n.schemeId,n);return t}var Ja=(e,t)=>(n,r)=>async i=>{let a=Ka(e.httpAuthSchemeProvider(await t.httpAuthSchemeParametersProvider(e,r,i.input)),e.authSchemePreference?await e.authSchemePreference():[]),o=qa(e.httpAuthSchemes),s=At(r),c=[];for(let n of a){let i=o.get(n.schemeId);if(!i){c.push(`HttpAuthScheme \`${n.schemeId}\` was not enabled for this service.`);continue}let a=i.identityProvider(await t.identityProviderConfigProvider(e));if(!a){c.push(`HttpAuthScheme \`${n.schemeId}\` did not have an IdentityProvider configured.`);continue}let{identityProperties:l={},signingProperties:u={}}=n.propertiesExtractor?.(e,r)||{};n.identityProperties=Object.assign(n.identityProperties||{},l),n.signingProperties=Object.assign(n.signingProperties||{},u),s.selectedHttpAuthScheme={httpAuthOption:n,identity:await a(n.identityProperties),signer:i.signer};break}if(!s.selectedHttpAuthScheme)throw Error(c.join(` +`));return n(i)},Ya={step:`serialize`,tags:[`HTTP_AUTH_SCHEME`],name:`httpAuthSchemeMiddleware`,override:!0,relation:`before`,toMiddleware:`endpointV2Middleware`},Xa=(e,{httpAuthSchemeParametersProvider:t,identityProviderConfigProvider:n})=>({applyToStack:r=>{r.addRelativeTo(Ja(e,{httpAuthSchemeParametersProvider:t,identityProviderConfigProvider:n}),Ya)}}),Za=e=>e=>{throw e},Qa=(e,t)=>{},$a=e=>(e,t)=>async n=>{if(!A.isInstance(n.request))return e(n);let r=At(t).selectedHttpAuthScheme;if(!r)throw Error(`No HttpAuthScheme was selected: unable to sign request`);let{httpAuthOption:{signingProperties:i={}},identity:a,signer:o}=r,s=await e({...n,request:await o.sign(n.request,a,i)}).catch((o.errorHandler||Za)(i));return(o.successHandler||Qa)(s.response,i),s},eo={step:`finalizeRequest`,tags:[`HTTP_SIGNING`],name:`httpSigningMiddleware`,aliases:[`apiKeyMiddleware`,`tokenMiddleware`,`awsAuthMiddleware`],override:!0,relation:`after`,toMiddleware:`retryMiddleware`},to=e=>({applyToStack:t=>{t.addRelativeTo($a(e),eo)}}),no=e=>{if(typeof e==`function`)return e;let t=Promise.resolve(e);return()=>t},ro=class{authSchemes=new Map;constructor(e){for(let t in e){if(!r(e,t))continue;let n=e[t];n!==void 0&&this.authSchemes.set(t,n)}}getIdentityProvider(e){return this.authSchemes.get(e)}},io=(e=>function(t){return ao(t)&&t.expiration.getTime()-Date.now()e.expiration!==void 0,oo=(e,t,n)=>{if(e===void 0)return;let r=typeof e==`function`?e:async()=>Promise.resolve(e),i,a,o,s=!1,c=async e=>{a||=r(e);try{i=await a,o=!0,s=!1}finally{a=void 0}return i};return t===void 0?async e=>((!o||e?.forceRefresh)&&(i=await c(e)),i):async e=>((!o||e?.forceRefresh)&&(i=await c(e)),s?i:n(i)?(t(i)&&await c(e),i):(s=!0,i))};function so(e){return e===void 0||typeof e==`string`&&e.length<=50}function co(e){let t=no(e.userAgentAppId??void 0),{customUserAgent:n}=e;return Object.assign(e,{customUserAgent:typeof n==`string`?[[n]]:n,userAgentAppId:async()=>{let n=await t();if(!so(n)){let t=e.logger?.constructor?.name===`NoOpLogger`||!e.logger?console:e.logger;typeof n==`string`?n.length>50&&t?.warn(`The provided userAgentAppId exceeds the maximum length of 50 characters.`):t?.warn(`userAgentAppId must be a string or undefined.`)}return n}})}var lo={partitions:[{id:`aws`,outputs:{dnsSuffix:`amazonaws.com`,dualStackDnsSuffix:`api.aws`,implicitGlobalRegion:`us-east-1`,name:`aws`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$`,regions:{"af-south-1":{description:`Africa (Cape Town)`},"ap-east-1":{description:`Asia Pacific (Hong Kong)`},"ap-east-2":{description:`Asia Pacific (Taipei)`},"ap-northeast-1":{description:`Asia Pacific (Tokyo)`},"ap-northeast-2":{description:`Asia Pacific (Seoul)`},"ap-northeast-3":{description:`Asia Pacific (Osaka)`},"ap-south-1":{description:`Asia Pacific (Mumbai)`},"ap-south-2":{description:`Asia Pacific (Hyderabad)`},"ap-southeast-1":{description:`Asia Pacific (Singapore)`},"ap-southeast-2":{description:`Asia Pacific (Sydney)`},"ap-southeast-3":{description:`Asia Pacific (Jakarta)`},"ap-southeast-4":{description:`Asia Pacific (Melbourne)`},"ap-southeast-5":{description:`Asia Pacific (Malaysia)`},"ap-southeast-6":{description:`Asia Pacific (New Zealand)`},"ap-southeast-7":{description:`Asia Pacific (Thailand)`},"aws-global":{description:`aws global region`},"ca-central-1":{description:`Canada (Central)`},"ca-west-1":{description:`Canada West (Calgary)`},"eu-central-1":{description:`Europe (Frankfurt)`},"eu-central-2":{description:`Europe (Zurich)`},"eu-north-1":{description:`Europe (Stockholm)`},"eu-south-1":{description:`Europe (Milan)`},"eu-south-2":{description:`Europe (Spain)`},"eu-west-1":{description:`Europe (Ireland)`},"eu-west-2":{description:`Europe (London)`},"eu-west-3":{description:`Europe (Paris)`},"il-central-1":{description:`Israel (Tel Aviv)`},"me-central-1":{description:`Middle East (UAE)`},"me-south-1":{description:`Middle East (Bahrain)`},"mx-central-1":{description:`Mexico (Central)`},"sa-east-1":{description:`South America (Sao Paulo)`},"us-east-1":{description:`US East (N. Virginia)`},"us-east-2":{description:`US East (Ohio)`},"us-west-1":{description:`US West (N. California)`},"us-west-2":{description:`US West (Oregon)`}}},{id:`aws-cn`,outputs:{dnsSuffix:`amazonaws.com.cn`,dualStackDnsSuffix:`api.amazonwebservices.com.cn`,implicitGlobalRegion:`cn-northwest-1`,name:`aws-cn`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^cn\\-\\w+\\-\\d+$`,regions:{"aws-cn-global":{description:`aws-cn global region`},"cn-north-1":{description:`China (Beijing)`},"cn-northwest-1":{description:`China (Ningxia)`}}},{id:`aws-eusc`,outputs:{dnsSuffix:`amazonaws.eu`,dualStackDnsSuffix:`api.amazonwebservices.eu`,implicitGlobalRegion:`eusc-de-east-1`,name:`aws-eusc`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^eusc\\-(de)\\-\\w+\\-\\d+$`,regions:{"eusc-de-east-1":{description:`AWS European Sovereign Cloud (Germany)`}}},{id:`aws-iso`,outputs:{dnsSuffix:`c2s.ic.gov`,dualStackDnsSuffix:`api.aws.ic.gov`,implicitGlobalRegion:`us-iso-east-1`,name:`aws-iso`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-iso\\-\\w+\\-\\d+$`,regions:{"aws-iso-global":{description:`aws-iso global region`},"us-iso-east-1":{description:`US ISO East`},"us-iso-west-1":{description:`US ISO WEST`}}},{id:`aws-iso-b`,outputs:{dnsSuffix:`sc2s.sgov.gov`,dualStackDnsSuffix:`api.aws.scloud`,implicitGlobalRegion:`us-isob-east-1`,name:`aws-iso-b`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-isob\\-\\w+\\-\\d+$`,regions:{"aws-iso-b-global":{description:`aws-iso-b global region`},"us-isob-east-1":{description:`US ISOB East (Ohio)`},"us-isob-west-1":{description:`US ISOB West`}}},{id:`aws-iso-e`,outputs:{dnsSuffix:`cloud.adc-e.uk`,dualStackDnsSuffix:`api.cloud-aws.adc-e.uk`,implicitGlobalRegion:`eu-isoe-west-1`,name:`aws-iso-e`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^eu\\-isoe\\-\\w+\\-\\d+$`,regions:{"aws-iso-e-global":{description:`aws-iso-e global region`},"eu-isoe-west-1":{description:`EU ISOE West`}}},{id:`aws-iso-f`,outputs:{dnsSuffix:`csp.hci.ic.gov`,dualStackDnsSuffix:`api.aws.hci.ic.gov`,implicitGlobalRegion:`us-isof-south-1`,name:`aws-iso-f`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-isof\\-\\w+\\-\\d+$`,regions:{"aws-iso-f-global":{description:`aws-iso-f global region`},"us-isof-east-1":{description:`US ISOF EAST`},"us-isof-south-1":{description:`US ISOF SOUTH`}}},{id:`aws-us-gov`,outputs:{dnsSuffix:`amazonaws.com`,dualStackDnsSuffix:`api.aws`,implicitGlobalRegion:`us-gov-west-1`,name:`aws-us-gov`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-gov\\-\\w+\\-\\d+$`,regions:{"aws-us-gov-global":{description:`aws-us-gov global region`},"us-gov-east-1":{description:`AWS GovCloud (US-East)`},"us-gov-west-1":{description:`AWS GovCloud (US-West)`}}}],version:`1.1`},uo=``,fo=e=>{let{partitions:t}=lo;for(let n of t){let{regions:t,outputs:r}=n;for(let[n,i]of Object.entries(t))if(n===e)return{...r,...i}}for(let n of t){let{regionRegex:t,outputs:r}=n;if(new RegExp(t).test(e))return{...r}}let n=t.find(e=>e.id===`aws`);if(!n)throw Error(`Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.`);return{...n.outputs}},po=()=>uo,mo=/\d{12}\.ddb/;async function ho(e,t,n){if(n.request?.headers?.[`smithy-protocol`]===`rpc-v2-cbor`&&I(e,`PROTOCOL_RPC_V2_CBOR`,`M`),typeof t.retryStrategy==`function`){let n=await t.retryStrategy();if(typeof n.mode==`string`)switch(n.mode){case ja.ADAPTIVE:I(e,`RETRY_MODE_ADAPTIVE`,`F`);break;case ja.STANDARD:I(e,`RETRY_MODE_STANDARD`,`E`)}}if(typeof t.accountIdEndpointMode==`function`){let n=e.endpointV2;switch(String(n?.url?.hostname).match(mo)&&I(e,`ACCOUNT_ID_ENDPOINT`,`O`),await t.accountIdEndpointMode?.()){case`disabled`:I(e,`ACCOUNT_ID_MODE_DISABLED`,`Q`);break;case`preferred`:I(e,`ACCOUNT_ID_MODE_PREFERRED`,`P`);break;case`required`:I(e,`ACCOUNT_ID_MODE_REQUIRED`,`R`)}}let r=e.__smithy_context?.selectedHttpAuthScheme?.identity;if(r?.$source){let t=r;t.accountId&&I(e,`RESOLVED_ACCOUNT_ID`,`T`);for(let[n,r]of Object.entries(t.$source??{}))I(e,n,r)}}var go=`user-agent`,_o=`x-amz-user-agent`,vo=/[^!$%&'*+\-.^_`|~\w]/g,yo=/[^!$%&'*+\-.^_`|~\w#]/g,bo=1024;function xo(e){let t=``;for(let n in e){let r=e[n];if(t.length+r.length+1<=bo){t.length?t+=`,`+r:t+=r;continue}break}return t}var So=e=>(t,n)=>async r=>{let{request:i}=r;if(!A.isInstance(i))return t(r);let{headers:a}=i,o=n?.userAgent?.map(Co)||[],s=(await e.defaultUserAgentProvider()).map(Co);await ho(n,e,r);let c=n;s.push(`m/${xo(Object.assign({},n.__smithy_context?.features,c.__aws_sdk_context?.features))}`);let l=e?.customUserAgent?.map(Co)||[],u=await e.userAgentAppId();u&&s.push(Co([`app`,`${u}`]));let d=po(),f=(d?[d]:[]).concat([...s,...o,...l]).join(` `),p=[...s.filter(e=>e.startsWith(`aws-sdk-`)),...l].join(` `);return e.runtime===`browser`?a[_o]=f:(p&&(a[_o]=a[`x-amz-user-agent`]?`${a[go]} ${p}`:p),a[go]=f),t({...r,request:i})},Co=e=>{let t=e[0].split(`/`).map(e=>e.replace(vo,`-`)).join(`/`),n=e[1]?.replace(yo,`-`),r=t.indexOf(`/`),i=t.substring(0,r),a=t.substring(r+1);return i===`api`&&(a=a.toLowerCase()),[i,a,n].filter(e=>e&&e.length>0).reduce((e,t,n)=>{switch(n){case 0:return t;case 1:return`${e}/${t}`;default:return`${e}#${t}`}},``)},wo={name:`getUserAgentMiddleware`,step:`build`,priority:`low`,tags:[`SET_USER_AGENT`,`USER_AGENT`],override:!0},To=e=>({applyToStack:t=>{t.add(So(e),wo)}}),Eo=({serviceId:e,clientVersion:t})=>async n=>{let r=typeof window<`u`?window.navigator:void 0,i=r?.userAgent??``,a=r?.userAgentData?.platform??Do.os(i)??`other`,o=r?.userAgentData?.brands??[],s=o[o.length-1],c=s?.brand??Do.browser(i)??`unknown`,l=s?.version??`unknown`,u=[[`aws-sdk-js`,t],[`ua`,`2.1`],[`os/${a}`,void 0],[`lang/js`],[`md/browser`,`${c}_${l}`]];e&&u.push([`api/${e}`,t]);let d=await n?.userAgentAppId?.();return d&&u.push([`app/${d}`]),u},Do={os(e){if(/iPhone|iPad|iPod/.test(e))return`iOS`;if(/Macintosh|Mac OS X/.test(e))return`macOS`;if(/Windows NT/.test(e))return`Windows`;if(/Android/.test(e))return`Android`;if(/Linux/.test(e))return`Linux`},browser(e){if(/EdgiOS|EdgA|Edg\//.test(e))return`Microsoft Edge`;if(/Firefox\//.test(e))return`Firefox`;if(/Chrome\//.test(e))return`Chrome`;if(/Safari\//.test(e))return`Safari`}},Oo=(e,t=!1)=>{if(t){for(let t of e.split(`.`))if(!Oo(t))return!1;return!0}return!(!Pt(e)||e.length<3||e.length>63||e!==e.toLowerCase()||li(e))},ko=`:`,Ao=`/`,jo={isVirtualHostableS3Bucket:Oo,parseArn:e=>{let t=e.split(ko);if(t.length<6)return null;let[n,r,i,a,o,...s]=t;return n!==`arn`||r===``||i===``||s.join(ko)===``?null:{partition:r,service:i,region:a,accountId:o,resourceId:s.map(e=>e.split(Ao)).flat()}},partition:fo};ei.aws=jo;var Mo=(e,t,n)=>{let r,i,a,o=!1,s=async()=>{i||=e();try{r=await i,a=!0,o=!1}finally{i=void 0}return r};return t===void 0?async e=>((!a||e?.forceRefresh)&&(r=await s()),r):async e=>((!a||e?.forceRefresh)&&(r=await s()),o?r:n&&!n(r)?(o=!0,r):(t(r)&&await s(),r))},No=new Set,Po=(e,t=Pt)=>{if(!No.has(e)&&!t(e)){if(e===`*`)console.warn(`@smithy/config-resolver WARN - Please use the caller region instead of "*". See "sigv4a" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.`);else throw Error(`Region not accepted: region="${e}" is not a valid hostname component.`)}else No.add(e)},Fo=e=>typeof e==`string`&&(e.startsWith(`fips-`)||e.endsWith(`-fips`)),Io=e=>Fo(e)?[`fips-aws-global`,`aws-fips`].includes(e)?`us-east-1`:e.replace(/fips-(dkr-|prod-)?|-fips/,``):e,Lo=e=>{let{region:t,useFipsEndpoint:n}=e;if(!t)throw Error(`Region is missing`);return Object.assign(e,{region:async()=>{let e=Io(typeof t==`function`?await t():t);return Po(e),e},useFipsEndpoint:async()=>Fo(typeof t==`string`?t:await t())?!0:typeof n==`function`?n():Promise.resolve(!!n)})},Ro=[`in-region`,`cross-region`,`mobile`,`standard`,`legacy`],zo=({defaultsMode:e}={})=>Mo(async()=>{let t=typeof e==`function`?await e():e;switch(t?.toLowerCase()){case`auto`:return Promise.resolve(Bo()?`mobile`:`standard`);case`mobile`:case`in-region`:case`cross-region`:case`standard`:case`legacy`:return Promise.resolve(t?.toLocaleLowerCase());case void 0:return Promise.resolve(`legacy`);default:throw Error(`Invalid parameter for "defaultsMode", expect ${Ro.join(`, `)}, got ${t}`)}}),Bo=()=>{let e=window?.navigator;if(e?.connection){let{effectiveType:t,rtt:n,downlink:r}=e.connection;if(typeof t==`string`&&t!==`4g`||Number(n)>100||Number(r)<10)return!0}return e?.userAgentData?.mobile||typeof e?.maxTouchPoints==`number`&&e?.maxTouchPoints>1},Vo=e=>({setRegion(t){e.region=t},region(){return e.region}}),Ho=e=>({region:e.region()}),Uo=e=>Mt.isInstance(e)?e.headers?.date??e.headers?.Date:void 0,Wo=e=>Mt.isInstance(e)?e.headers?.age??e.headers?.Age:void 0,Go=e=>new Date(Date.now()+e),Ko=(e,t,n,r)=>{if(r!==void 0)return t;let i=Date.parse(e),a=Date.now();return n!==void 0&&a-n>9e5?t:n===void 0?i-a:i-(n+a)/2},qo=(e,t)=>{if(!t)throw Error(`Property \`${e}\` is not resolved for AWS SDK SigV4Auth`);return t},Jo=async e=>{let t=qo(`context`,e.context),n=qo(`config`,e.config),r=t.endpointV2?.properties?.authSchemes?.[0];return{config:n,signer:await qo(`signer`,n.signer)(r),signingRegion:e?.signingRegion,signingRegionSet:e?.signingRegionSet,signingName:e?.signingName}},Yo=class{async sign(e,t,n){if(!A.isInstance(e))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let r=await Jo(n),{config:i,signer:a}=r,{signingRegion:o,signingName:s}=r,c=n.context;if(c?.authSchemes?.length??!1){let[e,t]=c.authSchemes;e?.name===`sigv4a`&&t?.name===`sigv4`&&(o=t?.signingRegion??o,s=t?.signingName??s)}let l=await i.disableClockSkewCorrection?.()===!0;return n._disableClockSkewCorrection=l,l||(n._preRequestSystemClockOffset=i.systemClockOffset,n._requestSentAt=Date.now()),await a.sign(e,{signingDate:l?new Date:Go(i.systemClockOffset),signingRegion:o,signingService:s})}errorHandler(e){return t=>{let n=t;if(!e._disableClockSkewCorrection){let t=n.ServerTime??Uo(n.$response);if(t){let r=qo(`config`,e.config),i=e._preRequestSystemClockOffset,a=e._requestSentAt,o=Wo(n.$response),s=Ko(t,r.systemClockOffset,a,o);r.systemClockOffset=s,Math.abs(s)>=24e4&&(s!==i||i!==void 0&&i!==s)&&n.$metadata&&(n.$metadata.clockSkewCorrected=!0)}}throw t}}successHandler(e,t){if(t._disableClockSkewCorrection)return;let n=Uo(e);if(n){let r=qo(`config`,t.config),i=t._requestSentAt,a=Wo(e);r.systemClockOffset=Ko(n,r.systemClockOffset,i,a)}}},Xo=class extends Yo{async sign(e,t,n){if(!A.isInstance(e))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let{config:r,signer:i,signingRegion:a,signingRegionSet:o,signingName:s}=await Jo(n),c=(await r.sigv4aSigningRegionSet?.()??o??[a]).join(`,`),l=await r.disableClockSkewCorrection?.()===!0;return n._disableClockSkewCorrection=l,l||(n._preRequestSystemClockOffset=r.systemClockOffset,n._requestSentAt=Date.now()),await i.sign(e,{signingDate:l?new Date:Go(r.systemClockOffset),signingRegion:c,signingService:s})}},Zo=e=>(e.sigv4aSigningRegionSet=no(e.sigv4aSigningRegionSet),e),Qo=class{format(e){let n=[];for(let i in e){if(!r(e,i))continue;let a=t(i);n.push(Uint8Array.from([a.byteLength]),a,this.formatHeaderValue(e[i]))}let i=new Uint8Array(n.reduce((e,t)=>e+t.byteLength,0)),a=0;for(let e of n)i.set(e,a),a+=e.byteLength;return i}formatHeaderValue(e){switch(e.type){case`boolean`:return Uint8Array.from([+!e.value]);case`byte`:return Uint8Array.from([2,e.value]);case`short`:let n=new DataView(new ArrayBuffer(3));return n.setUint8(0,3),n.setInt16(1,e.value,!1),new Uint8Array(n.buffer);case`integer`:let r=new DataView(new ArrayBuffer(5));return r.setUint8(0,4),r.setInt32(1,e.value,!1),new Uint8Array(r.buffer);case`long`:let i=new Uint8Array(9);return i[0]=5,i.set(e.value.bytes,1),i;case`binary`:let o=new DataView(new ArrayBuffer(3+e.value.byteLength));o.setUint8(0,6),o.setUint16(1,e.value.byteLength,!1);let s=new Uint8Array(o.buffer);return s.set(e.value,3),s;case`string`:let c=t(e.value),l=new DataView(new ArrayBuffer(3+c.byteLength));l.setUint8(0,7),l.setUint16(1,c.byteLength,!1);let u=new Uint8Array(l.buffer);return u.set(c,3),u;case`timestamp`:let d=new Uint8Array(9);return d[0]=8,d.set(ts.fromNumber(e.value.valueOf()).bytes,1),d;case`uuid`:if(!es.test(e.value))throw Error(`Invalid UUID received: ${e.value}`);let f=new Uint8Array(17);return f[0]=9,f.set(a(e.value.replace(/-/g,``)),1),f}}},$o;(function(e){e[e.boolTrue=0]=`boolTrue`,e[e.boolFalse=1]=`boolFalse`,e[e.byte=2]=`byte`,e[e.short=3]=`short`,e[e.integer=4]=`integer`,e[e.long=5]=`long`,e[e.byteArray=6]=`byteArray`,e[e.string=7]=`string`,e[e.timestamp=8]=`timestamp`,e[e.uuid=9]=`uuid`})($o||={});var es=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,ts=class e{bytes;constructor(e){if(this.bytes=e,e.byteLength!==8)throw Error(`Int64 buffers must be exactly 8 bytes`)}static fromNumber(t){if(t>0x8000000000000000||t<-0x8000000000000000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let n=new Uint8Array(8);for(let e=7,r=Math.abs(Math.round(t));e>-1&&r>0;e--,r/=256)n[e]=r;return t<0&&ns(n),new e(n)}valueOf(){let e=this.bytes.slice(0),t=e[0]&128;return t&&ns(e),parseInt(n(e),16)*(t?-1:1)}toString(){return String(this.valueOf())}};function ns(e){for(let t=0;t<8;t++)e[t]^=255;for(let t=7;t>-1&&(e[t]++,e[t]===0);t--);}var rs=`X-Amz-Algorithm`,is=`X-Amz-Credential`,as=`X-Amz-Date`,os=`X-Amz-SignedHeaders`,ss=`X-Amz-Expires`,cs=`X-Amz-Signature`,ls=`X-Amz-Security-Token`,us=`authorization`,ds=as.toLowerCase(),fs=[us,ds,`date`];cs.toLowerCase();var ps=`x-amz-content-sha256`,ms=ls.toLowerCase(),hs={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},gs=/^proxy-/,_s=/^sec-/,vs=`AWS4-HMAC-SHA256`,ys=`AWS4-HMAC-SHA256-PAYLOAD`,bs=`UNSIGNED-PAYLOAD`,xs=`aws4_request`,Ss=({query:e={}})=>{let t=[],n={};for(let i in e){if(!r(e,i)||i.toLowerCase()===`x-amz-signature`)continue;let a=ta(i);t.push(a);let o=e[i];typeof o==`string`?n[a]=`${a}=${ta(o)}`:Array.isArray(o)&&(n[a]=o.slice(0).reduce((e,t)=>e.concat([`${a}=${ta(t)}`]),[]).sort().join(`&`))}return t.sort().map(e=>n[e]).filter(e=>e).join(`&`)},Cs=e=>ws(e).toISOString().replace(/\.\d{3}Z$/,`Z`),ws=e=>typeof e==`number`?new Date(e*1e3):typeof e==`string`?Number(e)?new Date(Number(e)*1e3):new Date(e):e,Ts=class{service;regionProvider;credentialProvider;sha256;uriEscapePath;applyChecksum;constructor({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a=!0}){this.service=r,this.sha256=i,this.uriEscapePath=a,this.applyChecksum=typeof e!=`boolean`||e,this.regionProvider=It(n),this.credentialProvider=It(t)}createCanonicalRequest(e,t,n){let r=Object.keys(t).sort();return`${e.method} +${this.getCanonicalPath(e)} +${Ss(e)} +${r.map(e=>`${e}:${t[e]}`).join(` +`)} + +${r.join(`;`)} +${n}`}async createStringToSign(e,t,r,i){let a=new this.sha256;a.update(Mr(r));let o=await a.digest();return`${i} +${e} +${t} +${n(o)}`}getCanonicalPath({path:e}){if(this.uriEscapePath){let t=[];for(let n of e.split(`/`))n?.length!==0&&n!==`.`&&(n===`..`?t.pop():t.push(n));return ta(`${e?.startsWith(`/`)?`/`:``}${t.join(`/`)}${t.length>0&&e?.endsWith(`/`)?`/`:``}`).replace(/%2F/g,`/`)}return e}validateResolvedCredentials(e){if(typeof e!=`object`||typeof e.accessKeyId!=`string`||typeof e.secretAccessKey!=`string`)throw Error(`Resolved credential object is not valid`)}formatDate(e){let t=Cs(e).replace(/[-:]/g,``);return{longDate:t,shortDate:t.slice(0,8)}}getCanonicalHeaderList(e){return Object.keys(e).sort().join(`;`)}},Es={},Ds=[],Os=(e,t,n)=>`${e}/${t}/${n}/${xs}`,ks=async(e,t,r,i,a)=>{let o=await As(e,t.secretAccessKey,t.accessKeyId),s=`${r}:${i}:${a}:${n(o)}:${t.sessionToken}`;if(s in Es)return Es[s];for(Ds.push(s);Ds.length>50;)delete Es[Ds.shift()];let c=`AWS4${t.secretAccessKey}`;for(let t of[r,i,a,xs])c=await As(e,c,t);return Es[s]=c},As=(e,t,n)=>{let r=new e(t);return r.update(Mr(n)),r.digest()},js=({headers:e},t,n)=>{let r={};for(let i of Object.keys(e).sort()){if(e[i]==null)continue;let a=i.toLowerCase();(a in hs||t?.has(a)||gs.test(a)||_s.test(a))&&(!n||n&&!n.has(a))||(r[a]=e[i].replace(/[\r\n]/g,` `).replace(/[ \t]+/g,` `).replace(/^ | $/g,``))}return r},Ms=async({headers:e,body:t},i)=>{for(let t in e)if(r(e,t)&&t.toLowerCase()===`x-amz-content-sha256`)return e[t];if(t==null)return`e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`;if(typeof t==`string`||ArrayBuffer.isView(t)||Pr(t)){let e=new i;return e.update(Mr(t)),n(await e.digest())}return bs},Ns=(e,t)=>{e=e.toLowerCase();for(let n in t)if(r(t,n)&&e===n.toLowerCase())return!0;return!1},Ps=(e,t={})=>{let{headers:n,query:i={}}=A.clone(e);for(let e in n){if(!r(n,e))continue;let a=e.toLowerCase();(a.slice(0,6)===`x-amz-`&&!t.unhoistableHeaders?.has(a)||t.hoistableHeaders?.has(a))&&(i[e]=n[e],delete n[e])}return{...e,headers:n,query:i}},Fs=e=>{e=A.clone(e);for(let t in e.headers)r(e.headers,t)&&fs.indexOf(t.toLowerCase())>-1&&delete e.headers[t];return e},Is=class extends Ts{headerFormatter=new Qo;constructor({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a=!0}){super({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a})}async presign(e,t={}){let{signingDate:n=new Date,expiresIn:r=3600,unsignableHeaders:i,unhoistableHeaders:a,signableHeaders:o,hoistableHeaders:s,signingRegion:c,signingService:l}=t,u=await this.credentialProvider();this.validateResolvedCredentials(u);let d=c??await this.regionProvider(),{longDate:f,shortDate:p}=this.formatDate(n);if(r>604800)return Promise.reject(`Signature version 4 presigned URLs must have an expiration date less than one week in the future`);let m=Os(p,d,l??this.service),h=Ps(Fs(e),{unhoistableHeaders:a,hoistableHeaders:s});u.sessionToken&&(h.query[ls]=u.sessionToken),h.query[rs]=vs,h.query[is]=`${u.accessKeyId}/${m}`,h.query[as]=f,h.query[ss]=r.toString(10);let g=js(h,i,o);return h.query[os]=this.getCanonicalHeaderList(g),h.query[cs]=await this.getSignature(f,m,this.getSigningKey(u,d,p,l),this.createCanonicalRequest(h,g,await Ms(e,this.sha256))),h}async sign(e,t){return typeof e==`string`?this.signString(e,t):e.headers&&e.payload?this.signEvent(e,t):e.message?this.signMessage(e,t):this.signRequest(e,t)}async signEvent({headers:e,payload:t},{signingDate:r=new Date,priorSignature:i,signingRegion:a,signingService:o,eventStreamCredentials:s}){let c=a??await this.regionProvider(),{shortDate:l,longDate:u}=this.formatDate(r),d=Os(l,c,o??this.service),f=await Ms({headers:{},body:t},this.sha256),p=new this.sha256;p.update(e);let m=[ys,u,d,i,n(await p.digest()),f].join(` +`);return this.signString(m,{signingDate:r,signingRegion:c,signingService:o,eventStreamCredentials:s})}async signMessage(e,{signingDate:t=new Date,signingRegion:n,signingService:r,eventStreamCredentials:i}){return this.signEvent({headers:this.headerFormatter.format(e.message.headers),payload:e.message.body},{signingDate:t,signingRegion:n,signingService:r,priorSignature:e.priorSignature,eventStreamCredentials:i}).then(t=>({message:e.message,signature:t}))}async signString(e,{signingDate:t=new Date,signingRegion:r,signingService:i,eventStreamCredentials:a}={}){let o=a??await this.credentialProvider();this.validateResolvedCredentials(o);let s=r??await this.regionProvider(),{shortDate:c}=this.formatDate(t),l=new this.sha256(await this.getSigningKey(o,s,c,i));return l.update(Mr(e)),n(await l.digest())}async signRequest(e,{signingDate:t=new Date,signableHeaders:n,unsignableHeaders:r,signingRegion:i,signingService:a}={}){let o=await this.credentialProvider();this.validateResolvedCredentials(o);let s=i??await this.regionProvider(),c=Fs(e),{longDate:l,shortDate:u}=this.formatDate(t),d=Os(u,s,a??this.service);c.headers[ds]=l,o.sessionToken&&(c.headers[ms]=o.sessionToken);let f=await Ms(c,this.sha256);!Ns(`x-amz-content-sha256`,c.headers)&&this.applyChecksum&&(c.headers[ps]=f);let p=js(c,r,n),m=await this.getSignature(l,d,this.getSigningKey(o,s,u,a),this.createCanonicalRequest(c,p,f));return c.headers[us]=`${vs} Credential=${o.accessKeyId}/${d}, SignedHeaders=${this.getCanonicalHeaderList(p)}, Signature=${m}`,c}async getSignature(e,t,r,i){let a=await this.createStringToSign(e,t,i,vs),o=new this.sha256(await r);return o.update(Mr(a)),n(await o.digest())}getSigningKey(e,t,n,r){return ks(this.sha256,e,n,t,r||this.service)}},Ls={SignatureV4a:null},Rs=e=>t=>{let n=t.credentials,r=!!t.credentials,i;Object.defineProperty(t,"credentials",{set(e){e&&e!==n&&e!==i&&(r=!0),n=e;let a=Bs(t,zs(t,{credentials:n,credentialDefaultProvider:t.credentialDefaultProvider}));if(r&&!a.attributed){let e=typeof n==`object`&&!!n;i=async t=>{let n=await a(t);return e&&(!n.$source||Object.keys(n.$source).length===0)?bt(n,`CREDENTIALS_CODE`,`e`):n},i.memoized=a.memoized,i.configBound=a.configBound,i.attributed=!0}else i=a},get(){return i},enumerable:!0,configurable:!0}),t.credentials=n;let{signingEscapePath:a=!0,systemClockOffset:o=t.systemClockOffset||0,sha256:s}=t,c;return c=t.signer?no(t.signer):t.regionInfoProvider?()=>no(t.region)().then(async e=>[await t.regionInfoProvider(e,{useFipsEndpoint:await t.useFipsEndpoint(),useDualstackEndpoint:await t.useDualstackEndpoint()})||{},e]).then(([e,n])=>{let{signingRegion:r,signingService:i}=e;t.signingRegion=t.signingRegion||r||n,t.signingName=t.signingName||i||t.serviceId;let o={...t,credentials:t.credentials,region:t.signingRegion,service:t.signingName,sha256:s,uriEscapePath:a};return new(t.signerConstructor||Is)(o)}):async e=>{e=Object.assign({},{name:`sigv4`,signingName:t.signingName||t.defaultSigningName,signingRegion:await no(t.region)(),properties:{}},e);let n=e.signingRegion,r=e.signingName;t.signingRegion=t.signingRegion||n,t.signingName=t.signingName||r||t.serviceId;let i={...t,credentials:t.credentials,region:t.signingRegion,service:t.signingName,sha256:s,uriEscapePath:a};return new(t.signerConstructor||Is)(i)},Object.assign(t,{systemClockOffset:o,signingEscapePath:a,signer:c,disableClockSkewCorrection:no(t.disableClockSkewCorrection??e)})};function zs(e,{credentials:t,credentialDefaultProvider:n}){let r;return r=t?t?.memoized?t:oo(t,io,ao):n?no(n(Object.assign({},e,{parentClientConfig:e}))):async()=>{throw Error("@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.")},r.memoized=!0,r}function Bs(e,t){if(t.configBound)return t;let n=async n=>t({...n,callerClientConfig:e});return n.memoized=t.memoized,n.configBound=!0,n}var Vs=Rs(!1),Hs={CrtSignerV4:null},Us=`X-Amz-S3session-Token`,Ws=Us.toLowerCase(),Gs=class extends Is{async signWithCredentials(e,t,n){let r=Ks(t);e.headers[Ws]=t.sessionToken;let i=this;return qs(i,r),i.signRequest(e,n??{})}async presignWithCredentials(e,t,n){let r=Ks(t);return delete e.headers[Ws],e.headers[Us]=t.sessionToken,e.query=e.query??{},e.query[Us]=t.sessionToken,qs(this,r),this.presign(e,n)}};function Ks(e){return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,expiration:e.expiration}}function qs(e,t){let n=e.credentialProvider;e.credentialProvider=()=>(e.credentialProvider=n,Promise.resolve(t))}var Js=class{sigv4aSigner;sigv4Signer;signerOptions;static sigv4aDependency(){return typeof Hs.CrtSignerV4==`function`?`crt`:typeof Ls.SignatureV4a==`function`?`js`:`none`}constructor(e){this.sigv4Signer=new Gs(e),this.signerOptions=e}async sign(e,t={}){return t.signingRegion===`*`?this.getSigv4aSigner().sign(e,t):this.sigv4Signer.sign(e,t)}async signWithCredentials(e,t,n={}){if(n.signingRegion===`*`){let r=this.getSigv4aSigner(),i=Hs.CrtSignerV4;if(i&&r instanceof i)return r.signWithCredentials(e,t,n);throw Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.signWithCredentials(e,t,n)}async presign(e,t={}){if(t.signingRegion===`*`){let n=this.getSigv4aSigner(),r=Hs.CrtSignerV4;if(r&&n instanceof r)return n.presign(e,t);throw Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.presign(e,t)}async presignWithCredentials(e,t,n={}){if(n.signingRegion===`*`)throw Error(`Method presignWithCredentials is not supported for [signingRegion=*].`);return this.sigv4Signer.presignWithCredentials(e,t,n)}getSigv4aSigner(){if(!this.sigv4aSigner){let e=Hs.CrtSignerV4,t=Ls.SignatureV4a;if(this.signerOptions.runtime===`node`){if(!e&&!t)throw Error(`Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);if(e&&typeof e==`function`)this.sigv4aSigner=new e({...this.signerOptions,signingAlgorithm:1});else if(t&&typeof t==`function`)this.sigv4aSigner=new t({...this.signerOptions});else throw Error(`Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}else{if(!t||typeof t!=`function`)throw Error(`JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a`);this.sigv4aSigner=new t({...this.signerOptions})}}return this.sigv4aSigner}};function Ys(e,t){return new Request(e,t)}function Xs(e=0){return new Promise((t,n)=>{e&&setTimeout(()=>{let t=Error(`Request did not complete within ${e} ms`);t.name=`TimeoutError`,n(t)},e)})}var Zs={supported:void 0},Qs=class e{config;configProvider;static create(t){return typeof t?.handle==`function`?t:new e(t)}constructor(e){typeof e==`function`?this.configProvider=e().then(e=>e||{}):(this.config=e??{},this.configProvider=Promise.resolve(this.config)),Zs.supported===void 0&&(Zs.supported=typeof Request<`u`&&`keepalive`in Ys(`https://[::1]`))}destroy(){}async handle(e,{abortSignal:t,requestTimeout:n}={}){this.config||=await this.configProvider;let r=n??this.config.requestTimeout,i=this.config.keepAlive===!0,a=this.config.credentials,o=this.config.customFetch??fetch;if(t?.aborted){let e=$s(t);return Promise.reject(e)}let s=e.path,c=ra(e.query||{});c&&(s+=`?${c}`),e.fragment&&(s+=`#${e.fragment}`);let l=``;(e.username!=null||e.password!=null)&&(l=`${e.username??``}:${e.password??``}@`);let{port:u,method:d}=e,f=`${e.protocol}//${l}${e.hostname}${u?`:${u}`:``}${s}`,p=d===`GET`||d===`HEAD`?void 0:e.body,m={body:p,headers:new Headers(e.headers),method:d,credentials:a};this.config?.cache&&(m.cache=this.config.cache),p&&(m.duplex=`half`),typeof AbortController<`u`&&(m.signal=t),Zs.supported&&(m.keepalive=i),typeof this.config.requestInit==`function`&&Object.assign(m,this.config.requestInit(e));let h=()=>{},g=[o(Ys(f,m)).then(e=>{let t=e.headers,n={};for(let e of t.entries())n[e[0]]=e[1];return e.body==null?e.blob().then(t=>({response:new Mt({headers:n,reason:e.statusText,statusCode:e.status,body:t})})):{response:new Mt({headers:n,reason:e.statusText,statusCode:e.status,body:e.body})}}),Xs(r)];return t&&g.push(new Promise((e,n)=>{let r=()=>{n($s(t))};if(typeof t.addEventListener==`function`){let e=t;e.addEventListener(`abort`,r,{once:!0}),h=()=>e.removeEventListener(`abort`,r)}else t.onabort=r})),Promise.race(g).finally(h)}updateHttpClientConfig(e,t){this.config=void 0,this.configProvider=this.configProvider.then(n=>(n[e]=t,n))}httpHandlerConfigs(){return this.config??{}}};function $s(e){let t=e&&typeof e==`object`&&`reason`in e?e.reason:void 0;if(t){if(t instanceof Error){let e=Error(`Request aborted`);return e.name=`AbortError`,e.cause=t,e}let e=Error(String(t));return e.name=`AbortError`,e}let n=Error(`Request aborted`);return n.name=`AbortError`,n}var ec=class{queryCompat;errorRegistry;constructor(e=!1){this.queryCompat=e}resolveRestContentType(e,t){let n=t.getMemberSchemas(),r=Object.values(n).find(e=>!!e.getMergedTraits().httpPayload);if(r)return r.getMergedTraits().mediaType||(r.isStringSchema()?`text/plain`:r.isBlobSchema()?`application/octet-stream`:e);if(!t.isUnitSchema()&&Object.values(n).find(e=>{let{httpQuery:t,httpQueryParams:n,httpHeader:r,httpLabel:i,httpPrefixHeaders:a}=e.getMergedTraits();return!t&&!n&&!r&&!i&&a===void 0}))return e}async getErrorSchemaOrThrowBaseException(e,t,n,r,i,a){let o=e;e.includes(`#`)&&([,o]=e.split(`#`));let s={$metadata:i,$fault:n.statusCode<500?`client`:`server`};if(!this.errorRegistry)throw Error(`@aws-sdk/core/protocols - error handler not initialized.`);try{return{errorSchema:a?.(this.errorRegistry,o)??this.errorRegistry.getSchema(e),errorMetadata:s}}catch{r.message=r.message??r.Message??`UnknownError`;let e=this.errorRegistry,t=e.getBaseException();if(t){let n=e.getErrorCtor(t)??Error;throw this.decorateServiceException(Object.assign(new n({name:o}),s),r)}let n=r,i=n?.message??n?.Message??n?.Error?.Message??n?.Error?.message;throw this.decorateServiceException(Object.assign(Error(i),{name:o},s),r)}}compose(t,n,r){let i=r;n.includes(`#`)&&([i]=n.split(`#`));let a=e.for(i),o=e.for(`smithy.ts.sdk.synthetic.`+r);t.copyFrom(a),t.copyFrom(o),this.errorRegistry=t}decorateServiceException(e,t={}){if(this.queryCompat){let n=e.Message??t.Message,r=un(e,t);n&&(r.message=n);let i=r.Error??{};i.Type=r.Error?.Type,i.Code=r.Error?.Code,i.Message=r.Error?.message??r.Error?.Message??n,r.Error=i;let a=r.$metadata.requestId;return a&&(r.RequestId=a),r}return un(e,t)}setQueryCompatError(e,t){let n=t.headers?.[`x-amzn-query-error`];if(e!==void 0&&n!=null){let[t,r]=n.split(`;`),i=Object.keys(e),a={Code:t,Type:r};e.Code=t,e.Type=r;for(let t=0;tj.of(e).getMergedTraits().awsQueryError?.[0]===t)}}},tc=class{serdeContext;setSerdeContext(e){this.serdeContext=e}},nc=class{from;to;keys;constructor(e,t){this.from=e,this.to=t;let n=Object.keys(this.from),r=new Set(n);r.delete(`__type`),this.keys=r}mark(e){this.keys.delete(e)}hasUnknown(){return this.keys.size===1&&Object.keys(this.to).length===0}writeUnknown(){if(this.hasUnknown()){let e=this.keys.values().next().value,t=this.from[e];this.to.$unknown=[e,t]}}};function rc(e){Object.defineProperty(e,"__proto__",{value:void 0,writable:!0,enumerable:!0,configurable:!0})}var ic;function ac(e){ic||=new DOMParser;let t=ic.parseFromString(e,`application/xml`);if(t.getElementsByTagName(`parsererror`).length>0)throw Error(`DOMParser XML parsing error.`);let n=e=>{if(e.nodeType===Node.TEXT_NODE&&e.textContent?.trim())return e.textContent;if(e.nodeType===Node.ELEMENT_NODE){let t=e;if(t.attributes.length===0&&t.childNodes.length===0)return``;let r={},i=Array.from(t.attributes);for(let e of i)r[`${e.name}`]=e.value;let a=Array.from(t.childNodes);for(let e of a){let o=n(e);if(o!=null){let t=e.nodeName;if(a.length===1&&i.length===0&&t===`#text`)return o;t in r?Array.isArray(r[t])?r[t].push(o):r[t]=[r[t],o]:r[t]=o}else if(a.length===1&&i.length===0)return t.textContent}return r}return null};return{[t.documentElement.nodeName]:n(t.documentElement)}}var oc=class extends tc{settings;stringDeserializer;constructor(e){super(),this.settings=e,this.stringDeserializer=new Ji(e)}setSerdeContext(e){this.serdeContext=e,this.stringDeserializer.setSerdeContext(e)}read(e,t,n){let r=j.of(e),a=r.getMemberSchemas();if(r.isStructSchema()&&r.isMemberSchema()&&Object.values(a).find(e=>!!e.getMemberTraits().eventPayload)){let e={},n=Object.keys(a)[0];return e[n]=a[n].isBlobSchema()?t:this.read(a[n],t),e}let o=(this.serdeContext?.utf8Encoder??i)(t),s=this.parseXml(o);return this.readSchema(e,n?s[n]:s)}readSchema(e,t){let n=j.of(e);if(n.isUnitSchema())return;let r=n.getMergedTraits();if(n.isListSchema()&&!Array.isArray(t))return this.readSchema(n,[t]);if(t==null)return t;if(typeof t==`object`){let e=!!r.xmlFlattened;if(n.isListSchema()){let r=n.getValueSchema(),i=[],a=r.getMergedTraits().xmlName??`member`,o=e?t:(t[0]??t)[a];if(o==null)return i;let s=Array.isArray(o)?o:[o];for(let e of s)i.push(this.readSchema(r,e));return i}let i={};if(n.isMapSchema()){let r=n.getKeySchema(),a=n.getValueSchema(),o;o=e?Array.isArray(t)?t:[t]:Array.isArray(t.entry)?t.entry:[t.entry];let s=r.getMergedTraits().xmlName??`key`,c=a.getMergedTraits().xmlName??`value`;for(let e of o){let t=e[s],n=e[c];t===`__proto__`&&rc(i),i[t]=this.readSchema(a,n)}return i}if(n.isStructSchema()){let e=n.isUnionSchema(),r;e&&(r=new nc(t,i));for(let[a,o]of n.structIterator()){let n=o.getMergedTraits(),s=n.httpPayload?n.xmlName??o.getName():o.getMemberTraits().xmlName??a;e&&r.mark(s),t[s]!=null&&(i[a]=this.readSchema(o,t[s]))}return e&&r.writeUnknown(),i}if(n.isDocumentSchema())return t;throw Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${n.getName(!0)}`)}return n.isListSchema()?[]:n.isMapSchema()||n.isStructSchema()?{}:this.stringDeserializer.read(n,t)}parseXml(e){if(e.length){let t;try{t=ac(e)}catch(t){throw t&&typeof t==`object`&&Object.defineProperty(t,"$responseBodyText",{value:e}),t}let n=`#text`,r=Object.keys(t)[0],i=t[r];return i[n]&&(i[r]=i[n],delete i[n]),yn(i)}return{}}},sc=class extends tc{settings;buffer;constructor(e){super(),this.settings=e}write(e,t,n=``){this.buffer===void 0&&(this.buffer=``);let r=j.of(e);if(n&&!n.endsWith(`.`)&&(n+=`.`),r.isBlobSchema())(typeof t==`string`||t instanceof Uint8Array)&&(this.writeKey(n),this.writeValue((this.serdeContext?.base64Encoder??En)(t)));else if(r.isBooleanSchema()||r.isNumericSchema()||r.isStringSchema())t==null?r.isIdempotencyToken()&&(this.writeKey(n),this.writeValue(Li())):(this.writeKey(n),this.writeValue(String(t)));else if(r.isBigIntegerSchema())t!=null&&(this.writeKey(n),this.writeValue(String(t)));else if(r.isBigDecimalSchema())t!=null&&(this.writeKey(n),this.writeValue(t instanceof kr?t.string:String(t)));else if(r.isTimestampSchema()){if(t instanceof Date)switch(this.writeKey(n),qi(r,this.settings)){case 5:this.writeValue(t.toISOString().replace(`.000Z`,`Z`));break;case 6:this.writeValue(qn(t));break;case 7:this.writeValue(String(t.getTime()/1e3))}}else if(r.isDocumentSchema())Array.isArray(t)?this.write(79,t,n):t instanceof Date?this.write(4,t,n):t instanceof Uint8Array?this.write(21,t,n):t&&typeof t==`object`?this.write(143,t,n):(this.writeKey(n),this.writeValue(String(t)));else if(r.isListSchema()){if(Array.isArray(t)){if(t.length===0)this.settings.serializeEmptyLists&&(this.writeKey(n),this.writeValue(``));else{let e=r.getValueSchema(),i=this.settings.flattenLists||r.getMergedTraits().xmlFlattened,a=1;for(let r of t){if(r==null)continue;let t=e.getMergedTraits(),o=this.getKey(`member`,t.xmlName,t.ec2QueryName),s=i?`${n}${a}`:`${n}${o}.${a}`;this.write(e,r,s),++a}}}}else if(r.isMapSchema()){if(t&&typeof t==`object`){let e=r.getKeySchema(),i=r.getValueSchema(),a=r.getMergedTraits().xmlFlattened,o=1;for(let r in t){let s=t[r];if(s==null)continue;let c=e.getMergedTraits(),l=this.getKey(`key`,c.xmlName,c.ec2QueryName),u=a?`${n}${o}.${l}`:`${n}entry.${o}.${l}`,d=i.getMergedTraits(),f=this.getKey(`value`,d.xmlName,d.ec2QueryName),p=a?`${n}${o}.${f}`:`${n}entry.${o}.${f}`;this.write(e,r,u),this.write(i,s,p),++o}}}else if(r.isStructSchema()){if(t&&typeof t==`object`){let e=!1;for(let[i,a]of r.structIterator()){if(t[i]==null&&!a.isIdempotencyToken())continue;let r=a.getMergedTraits(),o=this.getKey(i,r.xmlName,r.ec2QueryName,`struct`),s=`${n}${o}`;this.write(a,t[i],s),e=!0}if(!e&&r.isUnionSchema()){let{$unknown:e}=t;if(Array.isArray(e)){let[t,r]=e,i=`${n}${t}`;this.write(15,r,i)}}}}else if(!r.isUnitSchema())throw Error(`@aws-sdk/core/protocols - QuerySerializer unrecognized schema type ${r.getName(!0)}`)}flush(){if(this.buffer===void 0)throw Error(`@aws-sdk/core/protocols - QuerySerializer cannot flush with nothing written to buffer.`);let e=this.buffer;return delete this.buffer,e}getKey(e,t,n,r){let{ec2:i,capitalizeKeys:a}=this.settings;if(i&&n)return n;let o=t??e;return a&&r===`struct`?o[0].toUpperCase()+o.slice(1):o}writeKey(e){e.endsWith(`.`)&&(e=e.slice(0,e.length-1)),this.buffer+=`&${zi(e)}=`}writeValue(e){this.buffer+=zi(e)}},cc=class extends Ki{options;serializer;deserializer;mixin=new ec;constructor(e){super({defaultNamespace:e.defaultNamespace,errorTypeRegistries:e.errorTypeRegistries}),this.options=e;let t={timestampFormat:{useTrait:!0,default:5},httpBindings:!1,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace,serializeEmptyLists:!0};this.serializer=new sc(t),this.deserializer=new oc(t)}getShapeId(){return`aws.protocols#awsQuery`}setSerdeContext(e){this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e)}getPayloadCodec(){throw Error(`AWSQuery protocol has no payload codec.`)}async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n);return r.path.endsWith(`/`)||(r.path+=`/`),r.headers[`content-type`]=`application/x-www-form-urlencoded`,(Ht(e.input)===`unit`||!r.body)&&(r.body=``),r.body=`Action=${e.name.split(`#`)[1]??e.name}&Version=${this.options.version}`+r.body,r.body.endsWith(`&`)&&(r.body=r.body.slice(-1)),r}async deserializeResponse(e,t,n){let r=this.deserializer,i=j.of(e.output),a={};if(n.statusCode>=300){let i=await Ri(n.body,t);i.byteLength>0&&Object.assign(a,await r.read(15,i)),await this.handleError(e,t,n,a,this.deserializeMetadata(n))}for(let e in n.headers){let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let o=e.name.split(`#`)[1]??e.name,s=i.isStructSchema()&&this.useNestedResult()?o+`Result`:void 0,c=await Ri(n.body,t);return c.byteLength>0&&Object.assign(a,await r.read(i,c,s)),a.$metadata=this.deserializeMetadata(n),a}useNestedResult(){return!0}async handleError(e,t,n,r,i){let a=this.loadQueryErrorCode(n,r)??`Unknown`;this.mixin.compose(this.compositeErrorRegistry,a,this.options.defaultNamespace);let o=this.loadQueryError(r)??{},s=this.loadQueryErrorMessage(r);o.message=s,o.Error={Type:o.Type,Code:o.Code,Message:s};let{errorSchema:c,errorMetadata:l}=await this.mixin.getErrorSchemaOrThrowBaseException(a,this.options.defaultNamespace,n,o,i,this.mixin.findQueryCompatibleError),u=j.of(c),d=new((this.compositeErrorRegistry.getErrorCtor(c))??Error)({}),f={Type:o.Error.Type,Code:o.Error.Code,Error:o.Error};for(let[e,t]of u.structIterator()){let n=t.getMergedTraits().xmlName??e,i=o[n]??r[n];f[e]=this.deserializer.readSchema(t,i)}throw this.mixin.decorateServiceException(Object.assign(d,l,{$fault:u.getMergedTraits().error,message:s},f),r)}loadQueryErrorCode(e,t){let n=(t.Errors?.[0]?.Error??t.Errors?.Error??t.Error)?.Code;if(n!==void 0)return n;if(e.statusCode==404)return`NotFound`}loadQueryError(e){return e.Errors?.[0]?.Error??e.Errors?.Error??e.Error}loadQueryErrorMessage(e){let t=this.loadQueryError(e);return t?.message??t?.Message??e.message??e.Message??`Unknown`}getDefaultContentType(){return`application/x-www-form-urlencoded`}},L=64,lc=32,uc=2**53-1,dc=class e{digestLength=lc;state=Int32Array.from(fc);w;buffer=new Uint8Array(64);bufferLength=0;bytesHashed=0;finished=!1;inner;outer;constructor(t){if(t){let n=e.normalizeKey(t);this.inner=new e,this.outer=new e;let{inner:r,outer:i}=this,a=new Uint8Array(128);for(let e=0;euc)throw Error(`Cannot hash more than 2^53 - 1 bits`);for(;r>0;)this.buffer[this.bufferLength++]=t[n++],r--,this.bufferLength===L&&(this.hashBuffer(),this.bufferLength=0)}async digest(){let{inner:e,outer:t}=this;if(e&&t){if(this.finished)throw Error(`Attempted to digest an already finished HMAC.`);this.finished=!0;let n=e.digestSync();return t.update(n),t.digestSync()}return this.digestSync()}reset(){this.state=Int32Array.from(fc),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0}digestSync(){let e=this.state.slice(),t=this.buffer.slice(),n=this.bufferLength,r=this.bytesHashed*8,i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(i.setUint8(n++,128),(n-1)%L>=56){for(let e=n;e>>24&255,a[t*4+1]=e[t]>>>16&255,a[t*4+2]=e[t]>>>8&255,a[t*4+3]=e[t]>>>0&255;return a}static normalizeKey(t){let n=Mr(t);if(n.byteLength>L){let t=new e;t.update(n);let r=t.digestSync(),i=new Uint8Array(L);return i.set(r),i}if(n.byteLength>>17|t<<15)^(t>>>19|t<<13)^t>>>10;t=n[e-15];let i=(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3;n[e]=(r+n[e-7]|0)+(i+n[e-16]|0)}let d=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&c^~s&l)|0)+(u+(pc[e]+n[e]|0)|0)|0,f=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&i^r&a^i&a)|0;u=l,l=c,c=s,s=o+d|0,o=a,a=i,i=r,r=d+f|0}e[0]+=r,e[1]+=i,e[2]+=a,e[3]+=o,e[4]+=s,e[5]+=c,e[6]+=l,e[7]+=u}},fc=new Int32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),pc=new Int32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),{digest:mc,sign:hc,importKey:gc}=globalThis?.crypto?.subtle??{},_c=typeof mc==`function`&&typeof hc==`function`&&typeof gc==`function`?globalThis.crypto.subtle:void 0,vc=8388608,yc=class{digestLength=32;secret;pending=[];pendingBytes=0;fallback;finished=!1;constructor(e){e&&(this.secret=Mr(e))}update(e){if(this.finished)throw Error(`Attempted to update an already finished HMAC.`);if(this.fallback){this.fallback.update(e);return}this.pending.push(e.slice()),this.pendingBytes+=e.byteLength,this.pendingBytes>=vc&&this.switchToFallback()}async digest(){if(this.fallback)return this.fallback.digest();if(this.secret&&this.finished)throw Error(`Attempted to digest an already finished HMAC.`);let e=Nr(this.pending);if(_c){if(this.secret){this.finished=!0;let t=await _c.importKey(`raw`,this.secret,{name:`HMAC`,hash:`SHA-256`},!1,[`sign`]),n=await _c.sign(`HMAC`,t,e);return new Uint8Array(n)}let t=await _c.digest(`SHA-256`,e);return new Uint8Array(t)}let t=new dc(this.secret);return t.update(e),t.digest()}reset(){this.pending=[],this.pendingBytes=0,this.fallback=void 0,this.finished=!1}switchToFallback(){let e=new dc(this.secret);for(let t of this.pending)e.update(t);this.fallback=e,this.pending=[],this.pendingBytes=0}};function bc(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function xc(e,t=`|`){return e.map(e=>Gc(e)).join(t)}function Sc(e,t){return typeof t==`bigint`?t.toString():t}var Cc=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function wc(e){return new Cc(e)}function Tc(e){return e==null}function Ec(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Dc(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){let e=t._zod.def.shape[a];return r?r(e,a):e}):Mc(e,a,r?r(n.value,a):n.value))}}function Pc(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?jc(e,n,()=>t[n]):Mc(e,n,r.value))}}function R(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function Fc(e){return JSON.stringify(e)}function Ic(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var Lc=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Rc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var zc=wc(()=>{if(U.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function Bc(e){if(Rc(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return Rc(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function Vc(e){return Bc(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var Hc=new Set([`string`,`number`,`symbol`]);function Uc(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Wc(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function z(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Gc(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function Kc(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var qc={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},Jc={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function Yc(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return Nc(i,e,Xc(e,t)),Wc(e,R(n,{shape:i,checks:[]}))}function Xc(e,t){let n=Ac(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function Zc(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(Xc(e,t)),a={};return Nc(a,e,Reflect.ownKeys(Ac(e)).filter(e=>!i.has(e))),Wc(e,R(n,{shape:a,checks:[]}))}function Qc(e,t){if(!Bc(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=Ac(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Wc(e,R(e._zod.def,{shape:$c(e,t)}))}function $c(e,t){let n={};return Nc(n,e,Reflect.ownKeys(Ac(e))),Pc(n,t),n}function el(e,t){if(!Bc(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Wc(e,R(e._zod.def,{shape:$c(e,t)}))}function tl(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return Nc(n,e,Reflect.ownKeys(Ac(e))),Nc(n,t,Reflect.ownKeys(Ac(t))),Wc(e,R(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function nl(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(Xc(t,n)):void 0,o={};return Nc(o,t,Reflect.ownKeys(Ac(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),Wc(t,R(t._zod.def,{shape:o,checks:[]}))}function rl(e,t,n){let r=n?new Set(Xc(t,n)):void 0,i={};return Nc(i,t,Reflect.ownKeys(Ac(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),Wc(t,R(t._zod.def,{shape:i}))}function B(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function ol(e){return typeof e==`string`?e:e?.message}function sl(e,t,n){var r;for(let i=t;ie;return t[wl]=!0,t}var El,Dl={value:void 0,enumerable:!1},Ol=`captureStackTrace`in Error?Error:null;function kl(e){let t=Ol;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return Ol=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function H(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){Dl.value=new a(r);try{Object.defineProperty(n,"_zod",Dl)}finally{Dl.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),ml(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?kl(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var Al=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},jl=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(El=globalThis).__zod_globalConfig??(El.__zod_globalConfig={});var U=globalThis.__zod_globalConfig;function W(e){return e&&Object.assign(U,e),U}function Ml(){let e=this._zod;return e.message??=JSON.stringify(e.def,Sc,2),e.message}function Nl(e){this._zod.message=e}var Pl={get:Ml,set:Nl,enumerable:!0,configurable:!0},Fl={value:void 0,enumerable:!1},Il=new WeakSet([Object.prototype,Error.prototype]),Ll=(e,t)=>{e.name=`$ZodError`,Fl.value=t,Object.defineProperty(e,"issues",Fl),Fl.value=void 0,Object.defineProperty(e,"message",Pl);let n=Object.getPrototypeOf(e);Il.has(n)||(Il.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},Rl=H(`$ZodError`,Ll);H(`$ZodError`,Ll,void 0,{Parent:Error});function zl(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function Bl(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?zl(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Vl(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new Al;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>cl(e,o,W())));throw Lc(n,a?.callee??t),n}return s.value};return t},Wl=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>cl(e,o,W())));throw Lc(n,a?.callee??t),n}return s.value};return t},Gl=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new Al;return a.issues.length?Kl(e,a.issues,i):{success:!0,data:a.value}};function Kl(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>cl(e,n,W()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var ql=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?Kl(e,a.issues,i):{success:!0,data:a.value}},Jl=Symbol.for(`zod.compile.invalid`),Yl=Symbol.for(`zod.compile.fallback`),Xl=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==Jl)return!0;if(r.definite===!0&&n===void 0)return!1}return Zl(e,t,n)});function Zl(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[Yl]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new Al;return a.issues.length===0}var Ql=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},$l=e=>{let t=Ul(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,Hl(n,a))};return n},eu=e=>{let t=Ul(e),n=(e,r,i,a)=>t(e,r,i,Hl(n,a));return n},tu=e=>{let t=Wl(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,Hl(n,a))};return n},nu=e=>{let t=Wl(e),n=async(e,r,i,a)=>await t(e,r,i,Hl(n,a));return n},ru=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Gl(e)(t,n,i)},iu=e=>(t,n,r)=>Gl(e)(t,n,r),au=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return ql(e)(t,n,i)},ou=e=>async(t,n,r)=>ql(e)(t,n,r),su=/^[cC][0-9a-z]{6,}$/,cu=/^[0-9a-z]+$/,lu=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,uu=/^[0-9a-vA-V]{20}$/,du=/^[A-Za-z0-9]{27}$/,fu=/^[a-zA-Z0-9_-]{21}$/;function pu(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var mu=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,hu=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,gu=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,_u=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,vu=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function yu(){return new RegExp(vu,`u`)}var bu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,xu=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Su=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Cu=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,wu=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Tu=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Eu=/^https?$/,Du=/^\+[1-9]\d{6,14}$/,Ou=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function ku(e){return RegExp(`^${e}$`)}var Au=ku(Ou);function ju(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Mu(e){return RegExp(`^${ju(e)}$`)}function Nu(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${ju({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${ju({precision:e.precision})}`:n;return RegExp(`^${Ou}T(?:${r})$`)}var Pu=/^[\s\S]{0,}$/,Fu=/^-?\d+$/,Iu=/^-?\d+(?:\.\d+)?$/,Lu=/^(?:true|false)$/i,Ru=/^[^A-Z]*$/,zu=/^[^a-z]*$/,G=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Bu=e=>{let t=e.value;return!Tc(t)&&t.length!==void 0},Vu={number:`number`,bigint:`bigint`,object:`date`},Hu=H(`$ZodCheckLessThan`,(e,t)=>{G.init(e,t);let n=Vu[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value{G.init(e,t);let n=Vu[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:Vu[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Wu=H(`$ZodCheckMultipleOf`,(e,t)=>{G.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):Dc(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Gu=H(`$ZodCheckNumberFormat`,(e,t)=>{G.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=qc[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Ku=H(`$ZodCheckMaxLength`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?ul(r):i)<=t.maximum)return;let a=dl(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),qu=H(`$ZodCheckMinLength`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i=t.minimum)return;let a=dl(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Ju=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?ul(r):i;if(a===t.length)return;let o=dl(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Yu=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;G.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),Xu=H(`$ZodCheckRegex`,(e,t)=>{Yu.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Zu=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Ru,Yu.init(e,t)}),Qu=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=zu,Yu.init(e,t)}),$u=H(`$ZodCheckIncludes`,(e,t)=>{G.init(e,t);let n=Uc(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),ed=H(`$ZodCheckStartsWith`,(e,t)=>{G.init(e,t);let n=RegExp(`^${Uc(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),td=H(`$ZodCheckEndsWith`,(e,t)=>{G.init(e,t);let n=RegExp(`.*${Uc(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),nd=H(`$ZodCheckOverwrite`,(e,t)=>{G.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),rd=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` +`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(` +`)}\n};`)(...Object.values(this.closed))}},id={major:4,minor:6,patch:5},K=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=id;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=B(t),a;for(let o of n){if(o._zod.def.when){if(il(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new Al;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(sl(t.issues,n,e),i||=B(t,n))});else{if(t.issues.length===n)continue;sl(t.issues,n,e),i||=B(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(B(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new Al;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new Al;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return gl(this,`~standard`,sd(this))},set"~standard"(e){hl(this,`~standard`,e)}}),ad=(e,t)=>e.issues.length?{issues:e.issues.map(e=>cl(e,t,W()))}:{value:e.value};async function od(e,t){let n={async:!0};return ad(await e._zod.run({value:t,issues:[]},n),n)}function sd(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return ad(r,n)}catch{}return od(e,t)},vendor:`zod`,version:1}}var cd=H(`$ZodString`,(e,t)=>{K.init(e,t),e._zod.pattern=t.pattern??Pu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),q=H(`$ZodStringFormat`,(e,t)=>{Yu.init(e,t),cd.init(e,t)}),ld=H(`$ZodGUID`,(e,t)=>{t.pattern??=hu,q.init(e,t)}),ud=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=gu(e)}else t.pattern??=gu();q.init(e,t)}),dd=H(`$ZodEmail`,(e,t)=>{t.pattern??=_u,q.init(e,t)});function fd(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function pd(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?fd(e)||2:md(e,t)}function md(e,t){if(!t.normalize&&t.protocol?.source===Eu.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var hd=/[\t\n\r]/g;function gd(e){return e.replace(hd,``)}function _d(e,t){return t.lastIndex=0,t.test(e.hostname)}function vd(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var yd=H(`$ZodURL`,(e,t)=>{q.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=pd(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=gd(r);return}t.hostname&&!_d(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!vd(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:gd(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),bd=H(`$ZodEmoji`,(e,t)=>{t.pattern??=yu(),q.init(e,t)}),xd=H(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?fu:pu(t.length),q.init(e,t)}),Sd=H(`$ZodCUID`,(e,t)=>{t.pattern??=su,q.init(e,t)}),Cd=H(`$ZodCUID2`,(e,t)=>{t.pattern??=cu,q.init(e,t)}),wd=H(`$ZodULID`,(e,t)=>{t.pattern??=lu,q.init(e,t)}),Td=H(`$ZodXID`,(e,t)=>{t.pattern??=uu,q.init(e,t)}),Ed=H(`$ZodKSUID`,(e,t)=>{t.pattern??=du,q.init(e,t)}),Dd=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=Nu(t),q.init(e,t)}),Od=H(`$ZodISODate`,(e,t)=>{t.pattern??=Au,q.init(e,t)}),kd=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Mu(t),q.init(e,t)}),Ad=H(`$ZodISODuration`,(e,t)=>{t.pattern??=mu,q.init(e,t)}),jd=H(`$ZodIPv4`,(e,t)=>{t.pattern??=bu,q.init(e,t)}),Md=/^[0-9a-fA-F:.]+$/;function Nd(e){return Md.test(e)?fd(`http://[${e}]`):!1}var Pd=H(`$ZodIPv6`,(e,t)=>{t.pattern??=xu,q.init(e,t),e._zod.check=n=>{Nd(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),Fd=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=Su,q.init(e,t)});function Id(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:Nd(n)}var Ld=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=Cu,q.init(e,t),e._zod.check=n=>{Id(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function Rd(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var zd=/^[0-9a-zA-Z+/]*={0,2}$/,Bd=H(`$ZodBase64`,(e,t)=>{t.pattern??=zd,q.init(e,t),e._zod.check=n=>{Rd(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),Vd=/^[A-Za-z0-9_-]*$/;function Hd(e){if(!Vd.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return Rd(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ud=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=Vd,q.init(e,t),e._zod.check=n=>{Hd(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Wd=H(`$ZodE164`,(e,t)=>{t.pattern??=Du,q.init(e,t)});function Gd(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var Kd=H(`$ZodJWT`,(e,t)=>{q.init(e,t),e._zod.check=n=>{Gd(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),qd=H(`$ZodNumber`,(e,t)=>{K.init(e,t),e._zod.pattern=Iu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Jd=H(`$ZodNumberFormat`,(e,t)=>{Gu.init(e,t),qd.init(e,t)}),Yd=H(`$ZodBoolean`,(e,t)=>{K.init(e,t),e._zod.pattern=Lu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Xd=H(`$ZodUnknown`,(e,t)=>{K.init(e,t),e._zod.parse=e=>e}),Zd=H(`$ZodNever`,(e,t)=>{K.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Qd(e,t,n){e.issues.length&&t.issues.push(...al(n,e.issues)),t.value[n]=e.value}var $d=H(`$ZodArray`,(e,t)=>{K.init(e,t);let n=U.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;eQd(t,r,e)));else if(Qd(c,r,e),s&&c.issues.length!==0&&B(c))break}return o.length?Promise.all(o).then(()=>r):r}});function ef(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...al(n,e.issues))}if(!o&&i===void 0){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var tf=[];function nf(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:tf,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=Kc(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function rf(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(B(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>ef(e,n,i,t,d,f))):ef(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var af=H(`$ZodObject`,(e,t)=>{K.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let i=wc(()=>nf(t));V(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||Oc(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let a=Rc,o=t.catchall,s,c=U.memoizer;c?.attach(e),e._zod.parse=(t,n)=>{s??=i.value;let r=t.value;if(!a(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=c?c.alloc(e,t,{},n):{};let l=[],u=s.shape,d=n?.abortEarly,f=t.issues.length;for(let e of s.allKeys){if(d&&t.issues.length!==f){if(B(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let i=u[e],a=i._zod.optin,o=i._zod.optout,s=i._zod.run({value:r[e],issues:[]},n);s instanceof Promise?l.push(s.then(n=>ef(n,t,e,r,a,o))):ef(s,t,e,r,a,o)}return o?rf(l,r,t,n,i.value,e,d===!0):l.length?Promise.all(l).then(()=>t):t}}),of=H(`$ZodObjectJIT`,(e,t)=>{af.init(e,t);let n=e._zod.parse,r=wc(()=>nf(t)),i=U.memoizer,a=t=>{let n=r.value,a=n.symbolKeys,o=new rd([`payload`,`ctx`],{shape:t,inst:e,memo:i,syms:a}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>` + let ${e}_ab = false; + for (let i = 0; i < ${e}.issues.length; i++) { + const iss = ${e}.issues[i]; + iss.path = iss.path ? [${t}, ...iss.path] : [${t}]; + payload.issues.push(iss); + if (iss.continue !== true) ${e}_ab = true; + } + if (${e}_ab && ctx && ctx.abortEarly) { + payload.value = newResult; + return payload; + }`;o.write(`const input = payload.value;`);let l=Object.create(null),u=0;for(let e of n.allKeys)l[e]=`key_${u++}`;o.write(i?`const newResult = memo.alloc(inst, payload, {}, ctx);`:`const newResult = {};`);for(let e of n.allKeys){if(e===`__proto__`)continue;let n=l[e],r=typeof e==`symbol`?`syms[${a.indexOf(e)}]`:Fc(e),i=`${r} in input`,u=t[e],d=u?._zod?.optin,f=d!==void 0,p=u?._zod?.optout===`optional`;if(o.write(`const ${n} = ${s(r)};`),f&&p){let e=d===`optional`?`${n}_present`:`${n}.value !== undefined || ${n}_present`;o.write(` + const ${n}_present = ${i}; + if (!${n}.issues.length || ${n}_present) { + if (${n}.issues.length) {${c(n,r)} + } + + if (${e}) { + newResult[${r}] = ${n}.value; + } + } + + `)}else f?(o.write(` + if (${n}.issues.length) {${c(n,r)} + } + `),d===`defaulted`?o.write(`newResult[${r}] = ${n}.value;`):o.write(` + if (${n}.value !== undefined || ${i}) { + newResult[${r}] = ${n}.value; + } + `)):o.write(` + const ${n}_present = ${i}; + if (${n}.issues.length) {${c(n,r)} + } + if (!${n}_present && !${n}.issues.length) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: undefined, + path: [${r}] + }); + if (ctx && ctx.abortEarly) { + payload.value = newResult; + return payload; + } + } + + if (${n}_present) { + newResult[${r}] = ${n}.value; + } + + `)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},o,s=Rc,c=!U.jitless,l=c&&zc.value,u=t.catchall,d;e._zod.parse=(i,f)=>{d??=r.value;let p=i.value;return s(p)?c&&l&&f?.async===!1&&f.jitless!==!0?(o||=a(t.shape),i=o(i,f),u?rf([],p,i,f,d,e,f?.abortEarly===!0):i):n(i,f):(i.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),i)}});function sf(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!B(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>cl(e,r,W())))}),t)}var cf=H(`$ZodUnion`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),V(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),V(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),V(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>Ec(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>sf(t,r,e,i)):sf(o,r,e,i)}}),lf=H(`$ZodIntersection`,(e,t)=>{K.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>df(e,t,n)):df(e,i,a)}});function uf(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(Bc(e)&&Bc(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=uf(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=uf(t.value,n.value);if(!c.valid){if(B(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var ff=H(`$ZodRecord`,(e,t)=>{K.init(e,t);let n=U.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Bc(a))return r.issues.push({expected:`record`,code:`invalid_type`,input:a,inst:e}),r;let o=[],s=t.keyType._zod.values;if(s&&!t.partial){r.value=n?n.alloc(e,r,{},i):{};let c=new Set;for(let n of s)if(typeof n==`string`||typeof n==`number`||typeof n==`symbol`){if(c.add(typeof n==`number`?n.toString():n),n===`__proto__`)continue;let s=t.keyType._zod.run({value:n,issues:[]},i);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(s.issues.length){r.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>cl(e,i,W())),input:n,path:[n],inst:e});continue}let l=s.value;if(l===`__proto__`)continue;let u=t.valueType._zod.run({value:a[n],issues:[]},i);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&r.issues.push(...al(n,e.issues)),r.value[l]=e.value})):(u.issues.length&&r.issues.push(...al(n,u.issues)),r.value[l]=u.value)}let l;for(let e in a)if(!c.has(e)){if(t.mode===`loose`){if(e===`__proto__`)continue;r.value[e]=a[e]}else l??=[],l.push(e)}l&&l.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:l,continue:!0})}else{r.value=n?n.alloc(e,r,{},i):{};let c;for(let n of Reflect.ownKeys(a)){if(n===`__proto__`||!Object.prototype.propertyIsEnumerable.call(a,n))continue;let l=t.keyType._zod.run({value:n,issues:[]},i);if(l instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof n==`string`&&Iu.test(n)&&l.issues.length){let e=t.keyType._zod.run({value:Number(n),issues:[]},i);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(l=e)}if(l.issues.length){t.mode===`loose`?r.value[n]=a[n]:s?(c??=[],c.push(n)):r.issues.push({code:`invalid_key`,origin:`record`,issues:l.issues.map(e=>cl(e,i,W())),input:n,path:[n],inst:e});continue}let u=l.value;if(u===`__proto__`)continue;let d=t.valueType._zod.run({value:a[n],issues:[]},i);d instanceof Promise?o.push(d.then(e=>{e.issues.length&&r.issues.push(...al(n,e.issues)),r.value[u]=e.value})):(d.issues.length&&r.issues.push(...al(n,d.issues)),r.value[u]=d.value)}c&&c.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:c,continue:!0})}return o.length?Promise.all(o).then(()=>r):r}}),pf=H(`$ZodEnum`,(e,t)=>{K.init(e,t);let n=bc(t.entries),r=new Set(n);e._zod.values=r,V(e,`pattern`,e=>{let t=bc(e.def.entries).filter(e=>Hc.has(typeof e));return RegExp(t.length?`^(${t.map(e=>Uc(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),mf=H(`$ZodLiteral`,(e,t)=>{K.init(e,t);let n=new Set(t.values);e._zod.values=n,V(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?Uc(e):e?Uc(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),hf=H(`$ZodTransform`,(e,t)=>{K.init(e,t),e._zod.optin=`optional`,U.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new jl(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new Al;return n.value=i,n}});function gf(e,t){return e.value=t.issues.length?void 0:t.value,e}var _f=H(`$ZodOptional`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,V(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t,void 0]):void 0}),V(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Ec(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>gf(e,t)):gf(e,r)}return t.innerType._zod.run(e,n)}}),vf=H(`$ZodExactOptional`,(e,t)=>{_f.init(e,t),V(e,`values`,e=>e.def.innerType._zod.values),V(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),yf=H(`$ZodNullable`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin),V(e,`optout`,e=>e.def.innerType._zod.optout),V(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Ec(t.source)}|null)$`):void 0}),V(e,`values`,e=>e.def.innerType._zod.values?new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),bf=H(`$ZodDefault`,(e,t)=>{K.init(e,t),e._zod.optin=`defaulted`,V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>xf(e,t)):xf(r,t)}});function xf(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Sf=H(`$ZodPrefault`,(e,t)=>{K.init(e,t),e._zod.optin=`defaulted`,V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Cf=H(`$ZodNonOptional`,(e,t)=>{K.init(e,t),V(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>wf(t,e)):wf(i,e)}});function wf(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Tf(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>cl(e,r,W()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Ef=H(`$ZodCatch`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),V(e,`optout`,e=>e.def.innerType._zod.optout),V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Tf(e,r,t,n)):Tf(e,r,t,n)}}),Df=H(`$ZodPipe`,(e,t)=>{K.init(e,t),V(e,`values`,e=>e.def.in._zod.values),V(e,`optin`,e=>e.def.in._zod.optin),V(e,`optout`,e=>e.def.out._zod.optout),V(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Of(e,t.in,n)):Of(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Of(e,t.out,n)):Of(r,t.out,n)}});function Of(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var kf=H(`$ZodReadonly`,(e,t)=>{K.init(e,t),V(e,`propValues`,e=>e.def.innerType._zod.propValues),V(e,`values`,e=>e.def.innerType._zod.values),V(e,`optin`,e=>e.def.innerType?._zod?.optin),V(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Af):Af(r)}});function Af(e){return e.memo||(e.value=Object.freeze(e.value)),e}var jf=H(`$ZodCustom`,(e,t)=>{G.init(e,t),K.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Mf(t,n,r,e));Mf(i,n,r,e)}});function Mf(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(pl(e))}}var Nf=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Pf=`~memo`,Ff=[];function If(e){return typeof e==`object`&&!!e}function Lf(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var Rf=new WeakMap,zf=0,Bf=1,Vf=2;function Hf(e,t,n){let r=Rf.get(e);if(r!==void 0)return r?Vf:zf;if(t.has(e))return Vf;t.add(e);let i=zf,a=e=>{if(i!==Vf&&e?._zod){let r=Hf(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=zf;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?Bf:o.value?._zod?Hf(o.value,t,n):zf;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=kc(c);s(e?o(e,!0):Bf),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?Hf(r,t,!1):Bf);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),Uf(e,i)}function Uf(e,t){return t!==Bf&&Rf.set(e,t===Vf),t}function Wf(e,t){let n=e.buckets.get(t);return n||(n=new WeakMap,e.buckets.set(t,n)),n}var Gf,Kf=[],qf={alloc(e,t,n){let r=Gf;if(!r)return n;Gf=void 0;let i={value:n,issues:null};return r.set(t.value,i),Kf.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&Yf(n,e.value))throw new Nf;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=Hf(e,new Set,!1);if(i===zf)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===Vf||r?n=!0:r=!0}let l=s.value;if(!If(l))return t(s,c);let u=c[Pf];u||(u={buckets:new WeakMap,backEdges:void 0},c[Pf]=u);let d;i===c?d=a:(d=Wf(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...Lf(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=new WeakSet),u.backEdges.add(f.value)),s;Gf=d;let p=Kf.length,m=t(s,c);Gf=void 0;let h=Kf.length>p?Kf.pop():void 0;return m instanceof Promise?m.then(e=>(h&&(h.issues=e.issues.length?Lf(e.issues):Ff),e)):(h&&(h.issues=m.issues.length?Lf(m.issues):Ff),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function Jf(){return qf}function Yf(e,t){let n=e[Pf]?.backEdges;return n!==void 0&&If(t)&&n.has(t)}var Xf=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,currency_code:`currency code`,credit_card:`credit card number`,iban:`IBAN`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};function i(e,t){return e===`number`&&typeof t==`number`&&!Number.isFinite(t)?String(t):r[e]??e}return e=>{switch(e.code){case`invalid_type`:return`Invalid input: expected ${i(e.expected)}, received ${i(fl(e.input),e.input)}`;case`invalid_value`:return e.values.length===1?`Invalid input: expected ${Gc(e.values[0])}`:`Invalid option: expected one of ${xc(e.values,`|`)}`;case`too_big`:{let n=e.exact?`exactly `:e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${n}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.exact?`exactly `:e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${xc(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return e.options&&Array.isArray(e.options)&&e.options.length>0?`Invalid discriminator value. Expected ${e.options.map(e=>`'${e}'`).join(` | `)}`:e.inclusive===!1?`Invalid input: more than one option matched`:`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function Zf(){return{localeError:Xf()}}var Qf,$f=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function ep(){return new $f}(Qf=globalThis).__zod_globalRegistry??(Qf.__zod_globalRegistry=ep());var tp=globalThis.__zod_globalRegistry;function np(e){return e.checks&&=[...e.checks],e}function rp(e,t){return new e(np({type:`string`,...z(t)}))}function ip(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...z(t)})}function ap(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...z(t)})}function op(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...z(t)})}function sp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...z(t)})}function cp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...z(t)})}function lp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...z(t)})}function up(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...z(t)})}function dp(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...z(t)})}function fp(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...z(t)})}function pp(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...z(t)})}function mp(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...z(t)})}function hp(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...z(t)})}function gp(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...z(t)})}function _p(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...z(t)})}function vp(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...z(t)})}function yp(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...z(t)})}function bp(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...z(t)})}function xp(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...z(t)})}function Sp(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...z(t)})}function Cp(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...z(t)})}function wp(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...z(t)})}function Tp(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...z(t)})}function Ep(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...z(t)})}function Dp(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...z(t)})}function Op(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...z(t)})}function kp(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...z(t)})}function Ap(e,t){return new e(np({type:`number`,checks:[],...z(t)}))}function jp(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...z(t)})}function Mp(e,t){return new e({type:`boolean`,...z(t)})}function Np(e){return new e({type:`unknown`})}function Pp(e,t){return new e({type:`never`,...z(t)})}function Fp(e,t){return new Hu({check:`less_than`,...z(t),value:e,inclusive:!1})}function Ip(e,t){return new Hu({check:`less_than`,...z(t),value:e,inclusive:!0})}function Lp(e,t){return new Uu({check:`greater_than`,...z(t),value:e,inclusive:!1})}function Rp(e,t){return new Uu({check:`greater_than`,...z(t),value:e,inclusive:!0})}function zp(e,t){return new Wu({check:`multiple_of`,...z(t),value:e})}function Bp(e,t){return new Ku({check:`max_length`,...z(t),maximum:e})}function Vp(e,t){return new qu({check:`min_length`,...z(t),minimum:e})}function Hp(e,t){return new Ju({check:`length_equals`,...z(t),length:e})}function Up(e,t){return new Xu({check:`string_format`,format:`regex`,...z(t),pattern:e})}function Wp(e){return new Zu({check:`string_format`,format:`lowercase`,...z(e)})}function Gp(e){return new Qu({check:`string_format`,format:`uppercase`,...z(e)})}function Kp(e,t){return new $u({check:`string_format`,format:`includes`,...z(t),includes:e})}function qp(e,t){return new ed({check:`string_format`,format:`starts_with`,...z(t),prefix:e})}function Jp(e,t){return new td({check:`string_format`,format:`ends_with`,...z(t),suffix:e})}function Yp(e){return new nd({check:`overwrite`,tx:e})}function Xp(e){return Yp(t=>t.normalize(e))}function Zp(){return Yp(e=>e.trim())}function Qp(){return Yp(e=>e.toLowerCase())}function $p(){return Yp(e=>e.toUpperCase())}function em(){return Yp(e=>Ic(e))}function tm(e,t,n){return new e({type:`array`,element:t,...z(n)})}function nm(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...z(n)})}function rm(e,t){let n=im(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(pl(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(pl(r))}},e(t.value,t)),t);return n}function im(e,t){let n=new G({check:`custom`,...z(t)});return n._zod.check=e,n}function am(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&Oc(e,t,n[t]);return e}function om(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??tp,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function sm(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function J(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,J(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&am(o.schema,c),t.io===`input`&&Y(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function cm(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function lm(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${cm(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+cm(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function um(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;um(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var dm=new Set([`type`,`properties`,`required`,`additionalProperties`]),fm=[`oneOf`,`anyOf`];function pm(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function mm(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!dm.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??pm(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Oc(n,r,e.length===1?e[0]:mm(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=pm(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function hm(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of dm)if(t in e)return;let n=t.filter(e=>fm.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=mm(t);else{let e=n[0],i=fm.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>mm([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,am(e,r))}function gm(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):am(i,s),am(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())um(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])hm(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}am(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Oc(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:vm(t,`input`,e.processors),output:vm(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Y(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Y(r.element,n);if(r.type===`set`)return Y(r.valueType,n);if(r.type===`lazy`)return Y(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return Y(r.innerType,n);if(r.type===`intersection`)return Y(r.left,n)||Y(r.right,n);if(r.type===`record`||r.type===`map`)return Y(r.keyType,n)||Y(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Y(r.in,n)||Y(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Y(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Y(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Y(e,n))return!0;return!!(r.rest&&Y(r.rest,n))}return!1}var _m=(e,t={})=>n=>{let r=om({...n,processors:t});return J(e,r),lm(r,e),gm(r,e)},vm=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=om({...i??{},target:a,io:t,processors:n});return J(e,o),lm(o,e),gm(o,e)},ym=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},bm=(e,t,n)=>{(e[t]===void 0||n{ym(e,`minimum`,t),bm(e,`maximum`,t)},Sm=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Cm=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},wm=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Tm=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Em=(e,t)=>ym(e,`minimum`,t.minimum),Dm=(e,t)=>bm(e,`maximum`,t.maximum),Om=e=>(t,n)=>{Tm(t,n.format);let[r,i]=e[n.format];ym(t,`minimum`,r),bm(t,`maximum`,i)},km={greater_than:(e,t)=>ym(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>bm(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Sm(e,t.value),number_format:Om(qc),bigint_format:Om(Jc),min_length:Em,max_length:Dm,length_equals:(e,t)=>xm(e,t.length),min_size:Em,max_size:Dm,size_equals:(e,t)=>xm(e,t.size),string_format:(e,t)=>{Tm(e,t.format),t.pattern&&Cm(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>wm(e,t.mime)};function X(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)km[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&ym(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&ym(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&bm(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&bm(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Sm(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&wm(t,i.mime);for(let e of i.patterns??[])Cm(t,e);return t}var Am={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},jm=new Map([[zd,wu],[Vd,Tu]]),Mm=e=>jm.get(e)??e,Nm=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=X(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Am[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(Mm);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Pm=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=X(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):sm(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},Fm=(e,t,n,r)=>{n.type=`boolean`},Im=(e,t,n,r)=>{n.not={}},Lm=(e,t,n,r)=>{let i=e._zod.def,a=bc(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Rm=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(sm(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(sm(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},zm=(e,t,n,r)=>{sm(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},Bm=(e,t,n,r)=>{sm(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},Vm=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=X(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=J(a.element,t,{...r,path:[...r.path,`items`]})};function Hm(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?Hm(t.out):t.type===`catch`?Hm(t.innerType):e._zod.optin}var Um=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&sm(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Oc(i.properties,e,J(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?Hm(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=J(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Wm=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>J(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Gm=(e,t,n,r)=>{let i=e._zod.def,a=J(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=J(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)};function Km(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=Km(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>Km(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?Iu:Fu).source),p):p}var qm=new WeakMap;function Jm(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of qm.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=Km(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var Ym=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=X(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=J(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Oc(i.patternProperties,Mm(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=J(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=qm.get(t);n||(n=[],qm.set(t,n),t.deferred.push(()=>Jm(t))),n.push(e)}i.additionalProperties=J(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&Hm(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},Xm=(e,t,n,r)=>{let i=e._zod.def,a=J(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Zm=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Qm=Symbol();function $m(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(sm(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),Qm):JSON.parse(o)}var eh=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=$m(i.defaultValue,e,t,n,r);o!==Qm&&(n.default=o)},th=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=$m(i.defaultValue,e,t,n,r);o!==Qm&&(n._prefault=o)},nh=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{sm(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},rh=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;J(o,t,r);let s=t.seen.get(e);s.ref=o},ih=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ah=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},oh=new WeakSet([Object.prototype,Error.prototype]);function sh(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var Z=H(`ZodError`,(e,t)=>{Rl.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);oh.has(n)||(oh.add(n),sh(n,`format`,e=>t=>Vl(e,t)),sh(n,`flatten`,e=>t=>Bl(e,t)),sh(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,Sc,2)}),sh(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,Sc,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),ch=Ul(Z),lh=Wl(Z),uh=Gl(Z),dh=ql(Z),fh=$l(Z),ph=eu(Z),mh=tu(Z),hh=nu(Z),gh=ru(Z),_h=iu(Z),vh=au(Z),yh=ou(Z);function bh(){U.localeError||W(Zf())}function xh(){U.memoizer||W({memoizer:Jf()})}var Q=H(`ZodType`,(e,t)=>(bh(),K.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(R(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Wc(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(zg(e,t))},superRefine(e,t){return this.check(Bg(e,t))},overwrite(e){return this.check(Yp(e))},optional(){return xg(this)},exactOptional(){return Cg(this)},nullable(){return Tg(this)},nullish(){return xg(Tg(this))},nonoptional(e){return jg(this,e)},array(){return ag(this)},or(e){return lg([this,e])},and(e){return dg(this,e)},transform(e){return Fg(this,yg(e))},default(e){return Dg(this,e)},prefault(e){return kg(this,e)},catch(e){return Ng(this,e)},pipe(e){return Fg(this,e)},readonly(){return Lg(this)},describe(e){let t=this.clone();return tp.add(t,{description:e}),t},meta(...e){if(e.length===0)return tp.get(this);let t=this.clone();return tp.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return gl(this,`~standard`,{...sd(this),jsonSchema:{input:vm(this,`input`),output:vm(this,`output`)}})},set"~standard"(e){hl(this,`~standard`,e)},parse:function e(t,n){return ch(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await lh(this,t,n,{callee:e})},safeParse(e,t){return uh(this,e,t)},async safeParseAsync(e,t){return dh(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){hl(this,`spa`,e)},validate(e,t){return Xl(this,e,t)},validateAsync(e,t){return Ql(this,e,t)},encode:function e(t,n){return fh(this,t,n,{callee:e})},decode:function e(t,n){return ph(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await mh(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await hh(this,t,n,{callee:e})},safeEncode(e,t){return gh(this,e,t)},safeDecode(e,t){return _h(this,e,t)},async safeEncodeAsync(e,t){return vh(this,e,t)},async safeDecodeAsync(e,t){return yh(this,e,t)},toJSONSchema(e){return _m(this,{})(e)},get description(){return tp.get(this)?.description},get _def(){return this._zod.def}}),Sh=H(`_ZodString`,(e,t)=>{cd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Nm(e,t,n,r)},_l({format:e=>X(e).format??null,minLength:e=>X(e).minimum??null,maxLength:e=>X(e).maximum??null},{regex(...e){return this.check(Up(...e))},includes(...e){return this.check(Kp(...e))},startsWith(...e){return this.check(qp(...e))},endsWith(...e){return this.check(Jp(...e))},min(...e){return this.check(Vp(...e))},max(...e){return this.check(Bp(...e))},length(...e){return this.check(Hp(...e))},nonempty(...e){return this.check(Vp(1,...e))},lowercase(e){return this.check(Wp(e))},uppercase(e){return this.check(Gp(e))},trim(){return this.check(Zp())},normalize(...e){return this.check(Xp(...e))},toLowerCase(){return this.check(Qp())},toUpperCase(){return this.check($p())},slugify(){return this.check(em())}})),Ch=H(`ZodString`,(e,t)=>{cd.init(e,t),Sh.init(e,t)},{email(e){return this.check(ip(kh,e))},url(e){return this.check(up(Mh,e))},jwt(e){return this.check(Tp(qh,e))},emoji(e){return this.check(dp(Nh,e))},guid(e){return this.check(ap(Ah,e))},uuid(e){return this.check(op(jh,e))},uuidv4(e){return this.check(sp(jh,e))},uuidv6(e){return this.check(cp(jh,e))},uuidv7(e){return this.check(lp(jh,e))},nanoid(e){return this.check(fp(Ph,e))},cuid(e){return this.check(pp(Fh,e))},cuid2(e){return this.check(mp(Ih,e))},ulid(e){return this.check(hp(Lh,e))},base64(e){return this.check(Sp(Wh,e))},base64url(e){return this.check(Cp(Gh,e))},xid(e){return this.check(gp(Rh,e))},ksuid(e){return this.check(_p(zh,e))},ipv4(e){return this.check(vp(Bh,e))},ipv6(e){return this.check(yp(Vh,e))},cidrv4(e){return this.check(bp(Hh,e))},cidrv6(e){return this.check(xp(Uh,e))},e164(e){return this.check(wp(Kh,e))},datetime(e){return this.check(Ep(Th,e))},date(e){return this.check(Dp(Eh,e))},time(e){return this.check(Op(Dh,e))},duration(e){return this.check(kp(Oh,e))}});function wh(e){return rp(Ch,e)}var $=H(`ZodStringFormat`,(e,t)=>{q.init(e,t),Sh.init(e,t)}),Th=H(`ZodISODateTime`,(e,t)=>{Dd.init(e,t),$.init(e,t)}),Eh=H(`ZodISODate`,(e,t)=>{Od.init(e,t),$.init(e,t)}),Dh=H(`ZodISOTime`,(e,t)=>{kd.init(e,t),$.init(e,t)}),Oh=H(`ZodISODuration`,(e,t)=>{Ad.init(e,t),$.init(e,t)}),kh=H(`ZodEmail`,(e,t)=>{dd.init(e,t),$.init(e,t)}),Ah=H(`ZodGUID`,(e,t)=>{ld.init(e,t),$.init(e,t)}),jh=H(`ZodUUID`,(e,t)=>{ud.init(e,t),$.init(e,t)}),Mh=H(`ZodURL`,(e,t)=>{yd.init(e,t),$.init(e,t)}),Nh=H(`ZodEmoji`,(e,t)=>{bd.init(e,t),$.init(e,t)}),Ph=H(`ZodNanoID`,(e,t)=>{xd.init(e,t),$.init(e,t)}),Fh=H(`ZodCUID`,(e,t)=>{Sd.init(e,t),$.init(e,t)}),Ih=H(`ZodCUID2`,(e,t)=>{Cd.init(e,t),$.init(e,t)}),Lh=H(`ZodULID`,(e,t)=>{wd.init(e,t),$.init(e,t)}),Rh=H(`ZodXID`,(e,t)=>{Td.init(e,t),$.init(e,t)}),zh=H(`ZodKSUID`,(e,t)=>{Ed.init(e,t),$.init(e,t)}),Bh=H(`ZodIPv4`,(e,t)=>{jd.init(e,t),$.init(e,t)}),Vh=H(`ZodIPv6`,(e,t)=>{Pd.init(e,t),$.init(e,t)}),Hh=H(`ZodCIDRv4`,(e,t)=>{Fd.init(e,t),$.init(e,t)}),Uh=H(`ZodCIDRv6`,(e,t)=>{Ld.init(e,t),$.init(e,t)}),Wh=H(`ZodBase64`,(e,t)=>{Bd.init(e,t),$.init(e,t)}),Gh=H(`ZodBase64URL`,(e,t)=>{Ud.init(e,t),$.init(e,t)}),Kh=H(`ZodE164`,(e,t)=>{Wd.init(e,t),$.init(e,t)}),qh=H(`ZodJWT`,(e,t)=>{Kd.init(e,t),$.init(e,t)}),Jh=H(`ZodNumber`,(e,t)=>{qd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pm(e,t,n,r),e.isFinite=!0},_l({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=X(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=X(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=X(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>X(e).format??null},{gt(e,t){return this.check(Lp(e,t))},gte(e,t){return this.check(Rp(e,t))},min(e,t){return this.check(Rp(e,t))},lt(e,t){return this.check(Fp(e,t))},lte(e,t){return this.check(Ip(e,t))},max(e,t){return this.check(Ip(e,t))},int(e){return this.check(Zh(e))},safe(e){return this.check(Zh(e))},positive(e){return this.check(Lp(0,e))},nonnegative(e){return this.check(Rp(0,e))},negative(e){return this.check(Fp(0,e))},nonpositive(e){return this.check(Ip(0,e))},multipleOf(e,t){return this.check(zp(e,t))},step(e,t){return this.check(zp(e,t))},finite(){return this}}));function Yh(e){return Ap(Jh,e)}var Xh=H(`ZodNumberFormat`,(e,t)=>{Jd.init(e,t),Jh.init(e,t)});function Zh(e){return jp(Xh,e)}var Qh=H(`ZodBoolean`,(e,t)=>{Yd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fm(e,t,n,r)});function $h(e){return Mp(Qh,e)}var eg=H(`ZodUnknown`,(e,t)=>{Xd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function tg(){return Np(eg)}var ng=H(`ZodNever`,(e,t)=>{Zd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Im(e,t,n,r)});function rg(e){return Pp(ng,e)}var ig=H(`ZodArray`,(e,t)=>{xh(),$d.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vm(e,t,n,r),e.element=t.element},{min(e,t){return this.check(Vp(e,t))},nonempty(e){return this.check(Vp(1,e))},max(e,t){return this.check(Bp(e,t))},length(e,t){return this.check(Hp(e,t))},unwrap(){return this.element}});function ag(e,t){return tm(ig,e,t)}var og=H(`ZodObject`,(e,t)=>{xh(),of.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Um(e,t,n,r),Cl(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return hg(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(R(this._zod.def,{catchall:e}))},passthrough(){return this.clone(R(this._zod.def,{catchall:tg()}))},loose(){return this.clone(R(this._zod.def,{catchall:tg()}))},strict(){return this.clone(R(this._zod.def,{catchall:rg()}))},strip(){return this.clone(R(this._zod.def,{catchall:void 0}))},extend(e){return Qc(this,e)},safeExtend(e){return el(this,e)},merge(e){return tl(this,e)},pick(e){return Yc(this,e)},omit(e){return Zc(this,e)},partial(...e){return nl(bg,this,e[0])},exactPartial(...e){return nl(Sg,this,e[0],`exactPartial`)},required(...e){return rl(Ag,this,e[0])}});function sg(e,t){return new og({type:`object`,shape:e??{},...z(t)})}var cg=H(`ZodUnion`,(e,t)=>{cf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wm(e,t,n,r),e.options=t.options});function lg(e,t){return new cg({type:`union`,options:e,...z(t)})}var ug=H(`ZodIntersection`,(e,t)=>{lf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gm(e,t,n,r)});function dg(e,t){return new ug({type:`intersection`,left:e,right:t})}var fg=H(`ZodRecord`,(e,t)=>{xh(),ff.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ym(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function pg(e,t,n){return!t||!t._zod?new fg({type:`record`,keyType:wh(),valueType:e,...z(t)}):new fg({type:`record`,keyType:e,valueType:t,...z(n)})}var mg=H(`ZodEnum`,(e,t)=>{pf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Lm(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new mg({...t,checks:[],...z(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new mg({...t,checks:[],...z(r),entries:i})}});function hg(e,t){return new mg({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...z(t)})}var gg=H(`ZodLiteral`,(e,t)=>{mf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rm(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function _g(e,t){return new gg({type:`literal`,values:Array.isArray(e)?e:[e],...z(t)})}var vg=H(`ZodTransform`,(e,t)=>{xh(),hf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bm(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new jl(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(pl(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(pl(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function yg(e){return new vg({type:`transform`,transform:e})}var bg=H(`ZodOptional`,(e,t)=>{_f.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ah(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function xg(e){return new bg({type:`optional`,innerType:e})}var Sg=H(`ZodExactOptional`,(e,t)=>{vf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ah(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Cg(e){return new Sg({type:`optional`,innerType:e})}var wg=H(`ZodNullable`,(e,t)=>{yf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xm(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Tg(e){return new wg({type:`nullable`,innerType:e})}var Eg=H(`ZodDefault`,(e,t)=>{bf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Dg(e,t){return new Eg({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Vc(t)}})}var Og=H(`ZodPrefault`,(e,t)=>{Sf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>th(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kg(e,t){return new Og({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Vc(t)}})}var Ag=H(`ZodNonOptional`,(e,t)=>{Cf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zm(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function jg(e,t){return new Ag({type:`nonoptional`,innerType:e,...z(t)})}var Mg=H(`ZodCatch`,(e,t)=>{Ef.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ng(e,t){return new Mg({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:Tl(t)})}var Pg=H(`ZodPipe`,(e,t)=>{Df.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rh(e,t,n,r),e.in=t.in,e.out=t.out});function Fg(e,t){return new Pg({type:`pipe`,in:e,out:t})}var Ig=H(`ZodReadonly`,(e,t)=>{kf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ih(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Lg(e){return new Ig({type:`readonly`,innerType:e})}var Rg=H(`ZodCustom`,(e,t)=>{jf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zm(e,t,n,r)});function zg(e,t={}){return nm(Rg,e,t)}function Bg(e,t){return rm(e,t)}var Vg=`spinifex:v2:aws-session`,Hg=sg({accessKeyId:wh().min(16,`Access Key ID must be at least 16 characters`),secretAccessKey:wh().min(1,`Secret Access Key is required`)}),Ug=sg({accessKeyId:wh().min(1),secretAccessKey:wh().min(1),sessionToken:wh().min(1),expiration:wh().min(1)}),Wg;function Gg(e){let t=Date.parse(e);return Number.isNaN(t)||t<=Date.now()}function Kg(){try{let e=localStorage.getItem(Vg);if(!e)return null;let t=JSON.parse(e),n=Ug.safeParse(t);return n.success?n.data:null}catch{return null}}function qg(){return Wg===void 0&&(Wg=Kg()),Wg&&Gg(Wg.expiration)?(Yg(),null):Wg}function Jg(e){try{localStorage.setItem(Vg,JSON.stringify(e)),Wg=e}catch{Wg=e}}function Yg(){try{localStorage.removeItem(Vg)}catch{}Wg=null}var Xg=class e{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(e){this.method=e.method||`GET`,this.hostname=e.hostname||`localhost`,this.port=e.port,this.query=e.query||{},this.headers=e.headers||{},this.body=e.body,this.protocol=e.protocol?e.protocol.slice(-1)===`:`?e.protocol:`${e.protocol}:`:`https:`,this.path=e.path?e.path.charAt(0)===`/`?e.path:`/${e.path}`:`/`,this.username=e.username,this.password=e.password,this.fragment=e.fragment}static clone(t){let n=new e({...t,headers:{...t.headers}});return n.query&&=Zg(n.query),n}static isInstance(e){if(!e)return!1;let t=e;return`method`in t&&`protocol`in t&&`hostname`in t&&`path`in t&&typeof t.query==`object`&&typeof t.headers==`object`}clone(){return e.clone(this)}};function Zg(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return{...t,[n]:Array.isArray(r)?[...r]:r}},{})}var Qg=sg({region:wh().min(1),ochreEnabled:$h().default(!1)}),$g=null;async function e_(){let e=await fetch(`/api/config`,{cache:`no-store`});if(!e.ok)throw Error(`could not load cluster config: HTTP ${e.status}`);let t=Qg.safeParse(await e.json());if(!t.success){let e=t.error.issues.some(e=>e.path.length===0);throw TypeError(e?`cluster config was not an object`:`cluster config did not include a region`)}$g=t.data}function t_(){if(!$g)throw Error(`cluster config has not been loaded`);return $g.region}function n_(){if(!$g)throw Error(`cluster config has not been loaded`);return $g.ochreEnabled}export{La as $,A as $t,Zo as A,pr as At,co as B,vn as Bt,nc as C,Xr as Ct,Js as D,jr as Dt,Qs as E,Mr as Et,zo as F,En as Ft,to as G,Yt as Gt,io as H,ln as Ht,Lo as I,Tn as It,Ga as J,Bt as Jt,eo as K,Ht as Kt,jo as L,xn as Lt,Yo as M,er as Mt,Vo as N,Yn as Nt,Vs as O,kr as Ot,Ho as P,$n as Pt,I as Q,Mt as Qt,Eo as R,bn as Rt,rc as S,Zr as St,ec as T,Pr as Tt,oo as U,j as Ut,ao as V,dn as Vt,ro as W,Zt as Wt,Va as X,Rt as Xt,Wa as Y,zt as Yt,Ra as Z,It as Zt,wh as _,Di as _t,Hg as a,ct as an,Xi as at,cc as b,Ei as bt,Jg as c,ft as cn,Ki as ct,$h as d,pt as dn,Bi as dt,At as en,Ia as et,Zh as f,s as fn,zi as ft,pg as g,Ai as gt,sg as h,Mi as ht,Xg as i,yt as in,Yi as it,Xo as j,qn as jt,Is as k,Dr as kt,hg as l,gt as ln,Gi as lt,Yh as m,Li as mt,n_ as n,ot as nn,ra as nt,Yg as o,dt as on,Ji as ot,_g as p,Ri as pt,Xa as q,Vt as qt,e_ as r,_t as rn,ea as rt,qg as s,lt as sn,qi as st,t_ as t,vt as tn,Ma as tt,ag as u,mt as un,Wi as ut,lg as v,ki as vt,tc as w,Wr as wt,oc as x,ei as xt,yc as y,Oi as yt,To as z,_n as zt}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cluster-config-xw_Q7X1e.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cluster-config-xw_Q7X1e.js deleted file mode 100644 index 679e03f6f..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/cluster-config-xw_Q7X1e.js +++ /dev/null @@ -1,71 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.browser-DrrD6hYC.js","assets/awsClient-b0hcP1Iz.js","assets/hex-encoding-B19xAT_7.js","assets/index.browser-C3WbWNjZ.js"])))=>i.map(i=>d[i]); -import"./compiler-runtime-D_vZfn79.js";import{a as e,i as t,n,o as r,r as i,t as a}from"./hex-encoding-B19xAT_7.js";function o(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),u=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),d=`-`,f=[],p=`arbitrary..`,m=e=>{let t=ee(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return g(e);let n=e.split(d);return h(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?c(i,t):t:i||f}return n[e]||f}}},h=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=h(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(d):e.slice(t).join(d),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?p+r:void 0})(),ee=e=>{let{theme:t,classGroups:n}=e;return te(n,t)},te=(e,t)=>{let n=u();for(let r in e){let i=e[r];ne(i,n,r,t)}return n},ne=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){ie(e,t,n);return}if(typeof e==`function`){ae(e,t,n,r);return}oe(e,t,n,r)},ie=(e,t,n)=>{let r=e===``?t:_(t,e);r.classGroupId=n},ae=(e,t,n,r)=>{if(v(e)){ne(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(l(n,e))},oe=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(d),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,se=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},ce=`!`,le=`:`,ue=[],de=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),fe=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return de(t,l,c,u)};if(t){let e=t+le,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):de(ue,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},y=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},pe=e=>({cache:se(e.cacheSize),parseClassName:fe(e),sortModifiers:y(e),postfixLookupClassGroupIds:me(e),...m(e)}),me=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(he),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let ee=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),te=f?ee+ce:ee,ne=te+g;if(s.indexOf(ne)>-1)continue;s.push(ne);let re=i(g,h);for(let e=0;e0?` `+l:l)}return l},ge=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=pe(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=b(e,n);return i(e,a),a};return a=o,(...e)=>a(ge(...e))},ye=[],x=e=>{let t=t=>t[e]||ye;return t.isThemeGetter=!0,t.themeKey=e,t},S=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,C=/^\((?:(\w[\w-]*):)?(.+)\)$/i,be=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,xe=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,w=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Se=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,Ce=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,we=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Te=e=>be.test(e),T=e=>!!e&&!Number.isNaN(Number(e)),E=e=>!!e&&Number.isInteger(Number(e)),Ee=e=>e.endsWith(`%`)&&T(e.slice(0,-1)),D=e=>xe.test(e),De=()=>!0,Oe=e=>w.test(e)&&!Se.test(e),ke=()=>!1,Ae=e=>Ce.test(e),je=e=>we.test(e),Me=e=>!O(e)&&!k(e),Ne=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),Pe=e=>Ye(e,$e,ke),O=e=>S.test(e),Fe=e=>Ye(e,et,Oe),Ie=e=>Ye(e,tt,T),Le=e=>Ye(e,rt,De),Re=e=>Ye(e,nt,ke),ze=e=>Ye(e,Ze,ke),Be=e=>Ye(e,Qe,je),Ve=e=>Ye(e,it,Ae),k=e=>C.test(e),He=e=>Xe(e,et),Ue=e=>Xe(e,nt),We=e=>Xe(e,Ze),Ge=e=>Xe(e,$e),Ke=e=>Xe(e,Qe),qe=e=>Xe(e,it,!0),Je=e=>Xe(e,rt,!0),Ye=(e,t,n)=>{let r=S.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Xe=(e,t,n=!1)=>{let r=C.exec(e);return r?r[1]?t(r[1]):n:!1},Ze=e=>e===`position`||e===`percentage`,Qe=e=>e===`image`||e===`url`,$e=e=>e===`length`||e===`size`||e===`bg-size`,et=e=>e===`length`,tt=e=>e===`number`,nt=e=>e===`family-name`,rt=e=>e===`number`||e===`weight`,it=e=>e===`shadow`,at=ve(()=>{let e=x(`color`),t=x(`font`),n=x(`text`),r=x(`font-weight`),i=x(`tracking`),a=x(`leading`),o=x(`breakpoint`),s=x(`container`),c=x(`spacing`),l=x(`radius`),u=x(`shadow`),d=x(`inset-shadow`),f=x(`text-shadow`),p=x(`drop-shadow`),m=x(`blur`),h=x(`perspective`),g=x(`aspect`),ee=x(`ease`),te=x(`animate`),ne=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],re=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],ie=()=>[...re(),k,O],ae=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],oe=()=>[`auto`,`contain`,`none`],_=()=>[k,O,c],v=()=>[Te,`full`,`auto`,..._()],se=()=>[E,`none`,`subgrid`,k,O],ce=()=>[`auto`,{span:[`full`,E,k,O]},E,k,O],le=()=>[E,`auto`,k,O],ue=()=>[`auto`,`min`,`max`,`fr`,k,O],de=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],fe=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],y=()=>[`auto`,..._()],pe=()=>[Te,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,..._()],me=()=>[s,Te,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,..._()],he=()=>[Te,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,..._()],b=()=>[e,k,O],ge=()=>[...re(),We,ze,{position:[k,O]}],_e=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ve=()=>[`auto`,`cover`,`contain`,Ge,Pe,{size:[k,O]}],ye=()=>[Ee,He,Fe],S=()=>[``,`none`,`full`,l,k,O],C=()=>[``,T,He,Fe],be=()=>[`solid`,`dashed`,`dotted`,`double`],xe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],w=()=>[T,Ee,We,ze],Se=()=>[``,`none`,m,k,O],Ce=()=>[`none`,T,k,O],we=()=>[`none`,T,k,O],Oe=()=>[T,k,O],ke=()=>[Te,`full`,..._()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[D],breakpoint:[D],color:[De],container:[D],"drop-shadow":[D],ease:[`in`,`out`,`in-out`],font:[Me],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[D],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[D],shadow:[D],spacing:[`px`,T],text:[D],"text-shadow":[D],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,Te,O,k,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,k,O]}],"container-named":[Ne],columns:[{columns:[T,`auto`,O,k,s]}],"break-after":[{"break-after":ne()}],"break-before":[{"break-before":ne()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:ie()}],overflow:[{overflow:ae()}],"overflow-x":[{"overflow-x":ae()}],"overflow-y":[{"overflow-y":ae()}],overscroll:[{overscroll:oe()}],"overscroll-x":[{"overscroll-x":oe()}],"overscroll-y":[{"overscroll-y":oe()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:v()}],"inset-x":[{"inset-x":v()}],"inset-y":[{"inset-y":v()}],start:[{"inset-s":v(),start:v()}],end:[{"inset-e":v(),end:v()}],"inset-bs":[{"inset-bs":v()}],"inset-be":[{"inset-be":v()}],top:[{top:v()}],right:[{right:v()}],bottom:[{bottom:v()}],left:[{left:v()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[E,`auto`,k,O]}],basis:[{basis:[Te,`full`,`auto`,s,..._()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[T,Te,`auto`,`initial`,`none`,O]}],grow:[{grow:[``,T,k,O]}],shrink:[{shrink:[``,T,k,O]}],order:[{order:[E,`first`,`last`,`none`,k,O]}],"grid-cols":[{"grid-cols":se()}],"col-start-end":[{col:ce()}],"col-start":[{"col-start":le()}],"col-end":[{"col-end":le()}],"grid-rows":[{"grid-rows":se()}],"row-start-end":[{row:ce()}],"row-start":[{"row-start":le()}],"row-end":[{"row-end":le()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ue()}],"auto-rows":[{"auto-rows":ue()}],gap:[{gap:_()}],"gap-x":[{"gap-x":_()}],"gap-y":[{"gap-y":_()}],"justify-content":[{justify:[...de(),`normal`]}],"justify-items":[{"justify-items":[...fe(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...fe()]}],"align-content":[{content:[`normal`,...de()]}],"align-items":[{items:[...fe(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...fe(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":de()}],"place-items":[{"place-items":[...fe(),`baseline`]}],"place-self":[{"place-self":[`auto`,...fe()]}],p:[{p:_()}],px:[{px:_()}],py:[{py:_()}],ps:[{ps:_()}],pe:[{pe:_()}],pbs:[{pbs:_()}],pbe:[{pbe:_()}],pt:[{pt:_()}],pr:[{pr:_()}],pb:[{pb:_()}],pl:[{pl:_()}],m:[{m:y()}],mx:[{mx:y()}],my:[{my:y()}],ms:[{ms:y()}],me:[{me:y()}],mbs:[{mbs:y()}],mbe:[{mbe:y()}],mt:[{mt:y()}],mr:[{mr:y()}],mb:[{mb:y()}],ml:[{ml:y()}],"space-x":[{"space-x":_()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":_()}],"space-y-reverse":[`space-y-reverse`],size:[{size:pe()}],"inline-size":[{inline:[`auto`,...me()]}],"min-inline-size":[{"min-inline":[`auto`,...me()]}],"max-inline-size":[{"max-inline":[`none`,...me()]}],"block-size":[{block:[`auto`,...he()]}],"min-block-size":[{"min-block":[`auto`,...he()]}],"max-block-size":[{"max-block":[`none`,...he()]}],w:[{w:[s,`screen`,...pe()]}],"min-w":[{"min-w":[s,`screen`,`none`,...pe()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...pe()]}],h:[{h:[`screen`,`lh`,...pe()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...pe()]}],"max-h":[{"max-h":[`screen`,`lh`,`none`,...pe()]}],"font-size":[{text:[`base`,n,He,Fe]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Je,Le]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Ee,O]}],"font-family":[{font:[Ue,Re,t]}],"font-features":[{"font-features":[O]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,k,O]}],"line-clamp":[{"line-clamp":[T,`none`,k,Ie]}],leading:[{leading:[`none`,a,..._()]}],"list-image":[{"list-image":[`none`,k,O]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,k,O]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:b()}],"text-color":[{text:b()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...be(),`wavy`]}],"text-decoration-thickness":[{decoration:[T,`from-font`,`auto`,k,Fe]}],"text-decoration-color":[{decoration:b()}],"underline-offset":[{"underline-offset":[T,`auto`,k,O]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:_()}],"tab-size":[{tab:[E,k,O]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,k,O]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,k,O]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:ge()}],"bg-repeat":[{bg:_e()}],"bg-size":[{bg:ve()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},E,k,O],radial:[``,k,O],conic:[``,E,k,O]},Ke,Be]}],"bg-color":[{bg:b()}],"gradient-from-pos":[{from:ye()}],"gradient-via-pos":[{via:ye()}],"gradient-to-pos":[{to:ye()}],"gradient-from":[{from:b()}],"gradient-via":[{via:b()}],"gradient-to":[{to:b()}],rounded:[{rounded:S()}],"rounded-s":[{"rounded-s":S()}],"rounded-e":[{"rounded-e":S()}],"rounded-t":[{"rounded-t":S()}],"rounded-r":[{"rounded-r":S()}],"rounded-b":[{"rounded-b":S()}],"rounded-l":[{"rounded-l":S()}],"rounded-ss":[{"rounded-ss":S()}],"rounded-se":[{"rounded-se":S()}],"rounded-ee":[{"rounded-ee":S()}],"rounded-es":[{"rounded-es":S()}],"rounded-tl":[{"rounded-tl":S()}],"rounded-tr":[{"rounded-tr":S()}],"rounded-br":[{"rounded-br":S()}],"rounded-bl":[{"rounded-bl":S()}],"border-w":[{border:C()}],"border-w-x":[{"border-x":C()}],"border-w-y":[{"border-y":C()}],"border-w-s":[{"border-s":C()}],"border-w-e":[{"border-e":C()}],"border-w-bs":[{"border-bs":C()}],"border-w-be":[{"border-be":C()}],"border-w-t":[{"border-t":C()}],"border-w-r":[{"border-r":C()}],"border-w-b":[{"border-b":C()}],"border-w-l":[{"border-l":C()}],"divide-x":[{"divide-x":C()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":C()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...be(),`hidden`,`none`]}],"divide-style":[{divide:[...be(),`hidden`,`none`]}],"border-color":[{border:b()}],"border-color-x":[{"border-x":b()}],"border-color-y":[{"border-y":b()}],"border-color-s":[{"border-s":b()}],"border-color-e":[{"border-e":b()}],"border-color-bs":[{"border-bs":b()}],"border-color-be":[{"border-be":b()}],"border-color-t":[{"border-t":b()}],"border-color-r":[{"border-r":b()}],"border-color-b":[{"border-b":b()}],"border-color-l":[{"border-l":b()}],"divide-color":[{divide:b()}],"outline-style":[{outline:[...be(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[T,k,O]}],"outline-w":[{outline:[``,T,He,Fe]}],"outline-color":[{outline:b()}],shadow:[{shadow:[``,`inner`,`none`,u,qe,Ve]}],"shadow-color":[{shadow:b()}],"inset-shadow":[{"inset-shadow":[`none`,d,qe,Ve]}],"inset-shadow-color":[{"inset-shadow":b()}],"ring-w":[{ring:C()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:b()}],"ring-offset-w":[{"ring-offset":[T,Fe]}],"ring-offset-color":[{"ring-offset":b()}],"inset-ring-w":[{"inset-ring":C()}],"inset-ring-color":[{"inset-ring":b()}],"text-shadow":[{"text-shadow":[`none`,f,qe,Ve]}],"text-shadow-color":[{"text-shadow":b()}],opacity:[{opacity:[T,k,O]}],"mix-blend":[{"mix-blend":[...xe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":xe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[T]}],"mask-image-linear-from-pos":[{"mask-linear-from":w()}],"mask-image-linear-to-pos":[{"mask-linear-to":w()}],"mask-image-linear-from-color":[{"mask-linear-from":b()}],"mask-image-linear-to-color":[{"mask-linear-to":b()}],"mask-image-t-from-pos":[{"mask-t-from":w()}],"mask-image-t-to-pos":[{"mask-t-to":w()}],"mask-image-t-from-color":[{"mask-t-from":b()}],"mask-image-t-to-color":[{"mask-t-to":b()}],"mask-image-r-from-pos":[{"mask-r-from":w()}],"mask-image-r-to-pos":[{"mask-r-to":w()}],"mask-image-r-from-color":[{"mask-r-from":b()}],"mask-image-r-to-color":[{"mask-r-to":b()}],"mask-image-b-from-pos":[{"mask-b-from":w()}],"mask-image-b-to-pos":[{"mask-b-to":w()}],"mask-image-b-from-color":[{"mask-b-from":b()}],"mask-image-b-to-color":[{"mask-b-to":b()}],"mask-image-l-from-pos":[{"mask-l-from":w()}],"mask-image-l-to-pos":[{"mask-l-to":w()}],"mask-image-l-from-color":[{"mask-l-from":b()}],"mask-image-l-to-color":[{"mask-l-to":b()}],"mask-image-x-from-pos":[{"mask-x-from":w()}],"mask-image-x-to-pos":[{"mask-x-to":w()}],"mask-image-x-from-color":[{"mask-x-from":b()}],"mask-image-x-to-color":[{"mask-x-to":b()}],"mask-image-y-from-pos":[{"mask-y-from":w()}],"mask-image-y-to-pos":[{"mask-y-to":w()}],"mask-image-y-from-color":[{"mask-y-from":b()}],"mask-image-y-to-color":[{"mask-y-to":b()}],"mask-image-radial":[{"mask-radial":[k,O]}],"mask-image-radial-from-pos":[{"mask-radial-from":w()}],"mask-image-radial-to-pos":[{"mask-radial-to":w()}],"mask-image-radial-from-color":[{"mask-radial-from":b()}],"mask-image-radial-to-color":[{"mask-radial-to":b()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":re()}],"mask-image-conic-pos":[{"mask-conic":[T]}],"mask-image-conic-from-pos":[{"mask-conic-from":w()}],"mask-image-conic-to-pos":[{"mask-conic-to":w()}],"mask-image-conic-from-color":[{"mask-conic-from":b()}],"mask-image-conic-to-color":[{"mask-conic-to":b()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:ge()}],"mask-repeat":[{mask:_e()}],"mask-size":[{mask:ve()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,k,O]}],filter:[{filter:[``,`none`,k,O]}],blur:[{blur:Se()}],brightness:[{brightness:[T,k,O]}],contrast:[{contrast:[T,k,O]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,qe,Ve]}],"drop-shadow-color":[{"drop-shadow":b()}],grayscale:[{grayscale:[``,T,k,O]}],"hue-rotate":[{"hue-rotate":[T,k,O]}],invert:[{invert:[``,T,k,O]}],saturate:[{saturate:[T,k,O]}],sepia:[{sepia:[``,T,k,O]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,k,O]}],"backdrop-blur":[{"backdrop-blur":Se()}],"backdrop-brightness":[{"backdrop-brightness":[T,k,O]}],"backdrop-contrast":[{"backdrop-contrast":[T,k,O]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,T,k,O]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[T,k,O]}],"backdrop-invert":[{"backdrop-invert":[``,T,k,O]}],"backdrop-opacity":[{"backdrop-opacity":[T,k,O]}],"backdrop-saturate":[{"backdrop-saturate":[T,k,O]}],"backdrop-sepia":[{"backdrop-sepia":[``,T,k,O]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":_()}],"border-spacing-x":[{"border-spacing-x":_()}],"border-spacing-y":[{"border-spacing-y":_()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,k,O]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[T,`initial`,k,O]}],ease:[{ease:[`linear`,`initial`,ee,k,O]}],delay:[{delay:[T,k,O]}],animate:[{animate:[`none`,te,k,O]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,k,O]}],"perspective-origin":[{"perspective-origin":ie()}],rotate:[{rotate:Ce()}],"rotate-x":[{"rotate-x":Ce()}],"rotate-y":[{"rotate-y":Ce()}],"rotate-z":[{"rotate-z":Ce()}],scale:[{scale:we()}],"scale-x":[{"scale-x":we()}],"scale-y":[{"scale-y":we()}],"scale-z":[{"scale-z":we()}],"scale-3d":[`scale-3d`],skew:[{skew:Oe()}],"skew-x":[{"skew-x":Oe()}],"skew-y":[{"skew-y":Oe()}],transform:[{transform:[k,O,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:ie()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:ke()}],"translate-x":[{"translate-x":ke()}],"translate-y":[{"translate-y":ke()}],"translate-z":[{"translate-z":ke()}],"translate-none":[`translate-none`],zoom:[{zoom:[E,k,O]}],accent:[{accent:b()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:b()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,k,O]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":b()}],"scrollbar-track-color":[{"scrollbar-track":b()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":_()}],"scroll-mx":[{"scroll-mx":_()}],"scroll-my":[{"scroll-my":_()}],"scroll-ms":[{"scroll-ms":_()}],"scroll-me":[{"scroll-me":_()}],"scroll-mbs":[{"scroll-mbs":_()}],"scroll-mbe":[{"scroll-mbe":_()}],"scroll-mt":[{"scroll-mt":_()}],"scroll-mr":[{"scroll-mr":_()}],"scroll-mb":[{"scroll-mb":_()}],"scroll-ml":[{"scroll-ml":_()}],"scroll-p":[{"scroll-p":_()}],"scroll-px":[{"scroll-px":_()}],"scroll-py":[{"scroll-py":_()}],"scroll-ps":[{"scroll-ps":_()}],"scroll-pe":[{"scroll-pe":_()}],"scroll-pbs":[{"scroll-pbs":_()}],"scroll-pbe":[{"scroll-pbe":_()}],"scroll-pt":[{"scroll-pt":_()}],"scroll-pr":[{"scroll-pr":_()}],"scroll-pb":[{"scroll-pb":_()}],"scroll-pl":[{"scroll-pl":_()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,k,O]}],fill:[{fill:[`none`,...b()]}],"stroke-w":[{stroke:[T,He,Fe,Ie]}],stroke:[{stroke:[`none`,...b()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`start`,`end`,`right`,`left`],"inset-y":[`inset-bs`,`inset-be`,`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`ps`,`pe`,`pr`,`pl`],py:[`pbs`,`pbe`,`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`ms`,`me`,`mr`,`ml`],my:[`mbs`,`mbe`,`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-s`,`border-w-e`,`border-w-r`,`border-w-l`],"border-w-y":[`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-s`,`border-color-e`,`border-color-r`,`border-color-l`],"border-color-y":[`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-ms`,`scroll-me`,`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-ps`,`scroll-pe`,`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function ot(...e){return at(s(e))}var st=new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`long`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`});function ct(e){return e?st.format(new Date(e)):`Unknown`}function lt(e){return`${Math.round(e/1024)} GiB`}var ut=[`B`,`KB`,`MB`,`GB`,`TB`];function dt(e){if(e===0)return`0 B`;let t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**t).toFixed(2)} ${ut[t]}`}function ft(e){return e?.find(e=>e.Key===`Name`)?.Value}function pt(e){let t=e.GroupId??``;return e.GroupName?`${t} (${e.GroupName})`:t}function mt(e){try{return decodeURIComponent(e)}catch{return e}}var ht=/\/$/;function gt(e){return e.replace(ht,``)}function _t(e){return e&&(e.endsWith(`/`)?e:`${e}/`)}function vt(e,t){return e.startsWith(t)?e:`${t}${e}`}function yt(e,t){return e.startsWith(t)?e.slice(t.length):e}function bt(e,t,n){return e.$source||={},e.$source[t]=n,e}var xt=e=>e?.body instanceof ReadableStream,St=(e,t)=>{let n=[];if(e&&n.push(e),t)for(let e of t)n.push(e);return n},Ct=(e,t)=>`${e||`anonymous`}${t&&t.length>0?` (a.k.a. ${t.join(`,`)})`:``}`,wt=()=>{let e=[],t=[],n=!1,r=new Set,i=e=>e.sort((e,t)=>Tt[t.step]-Tt[e.step]||Et[t.priority||`normal`]-Et[e.priority||`normal`]),a=n=>{let i=!1,a=e=>{let t=St(e.name,e.aliases);if(t.includes(n)){i=!0;for(let e of t)r.delete(e);return!1}return!0};return e=e.filter(a),t=t.filter(a),i},o=n=>{let i=!1,a=e=>{if(e.middleware===n){i=!0;for(let t of St(e.name,e.aliases))r.delete(t);return!1}return!0};return e=e.filter(a),t=t.filter(a),i},s=n=>(e.forEach(e=>{n.add(e.middleware,{...e})}),t.forEach(e=>{n.addRelativeTo(e.middleware,{...e})}),n.identifyOnResolve?.(u.identifyOnResolve()),n),c=e=>{let t=[];return e.before.forEach(e=>{e.before.length===0&&e.after.length===0?t.push(e):t.push(...c(e))}),t.push(e),e.after.reverse().forEach(e=>{e.before.length===0&&e.after.length===0?t.push(e):t.push(...c(e))}),t},l=(n=!1)=>{let r=[],a=[],o={};return e.forEach(e=>{let t={...e,before:[],after:[]};for(let e of St(t.name,t.aliases))o[e]=t;r.push(t)}),t.forEach(e=>{let t={...e,before:[],after:[]};for(let e of St(t.name,t.aliases))o[e]=t;a.push(t)}),a.forEach(e=>{if(e.toMiddleware){let t=o[e.toMiddleware];if(t===void 0){if(n)return;throw Error(`${e.toMiddleware} is not found when adding ${Ct(e.name,e.aliases)} middleware ${e.relation} ${e.toMiddleware}`)}e.relation===`after`&&t.after.push(e),e.relation===`before`&&t.before.push(e)}}),i(r).map(c).reduce((e,t)=>(e.push(...t),e),[])},u={add:(t,n={})=>{let{name:i,override:a,aliases:o}=n,s={step:`initialize`,priority:`normal`,middleware:t,...n},c=St(i,o);if(c.length>0){if(c.some(e=>r.has(e))){if(!a)throw Error(`Duplicate middleware name '${Ct(i,o)}'`);for(let t of c){let n=e.findIndex(e=>e.name===t||e.aliases?.some(e=>e===t));if(n===-1)continue;let r=e[n];if(r.step!==s.step||s.priority!==r.priority)throw Error(`"${Ct(r.name,r.aliases)}" middleware with ${r.priority} priority in ${r.step} step cannot be overridden by "${Ct(i,o)}" middleware with ${s.priority} priority in ${s.step} step.`);e.splice(n,1)}}for(let e of c)r.add(e)}e.push(s)},addRelativeTo:(e,n)=>{let{name:i,override:a,aliases:o}=n,s={middleware:e,...n},c=St(i,o);if(c.length>0){if(c.some(e=>r.has(e))){if(!a)throw Error(`Duplicate middleware name '${Ct(i,o)}'`);for(let e of c){let n=t.findIndex(t=>t.name===e||t.aliases?.some(t=>t===e));if(n===-1)continue;let r=t[n];if(r.toMiddleware!==s.toMiddleware||r.relation!==s.relation)throw Error(`"${Ct(r.name,r.aliases)}" middleware ${r.relation} "${r.toMiddleware}" middleware cannot be overridden by "${Ct(i,o)}" middleware ${s.relation} "${s.toMiddleware}" middleware.`);t.splice(n,1)}}for(let e of c)r.add(e)}t.push(s)},clone:()=>s(wt()),use:e=>{e.applyToStack(u)},remove:e=>typeof e==`string`?a(e):o(e),removeByTag:n=>{let i=!1,a=e=>{let{tags:t,name:a,aliases:o}=e;if(t&&t.includes(n)){let e=St(a,o);for(let t of e)r.delete(t);return i=!0,!1}return!0};return e=e.filter(a),t=t.filter(a),i},concat:e=>{let t=s(wt());return t.use(e),t.identifyOnResolve(n||t.identifyOnResolve()||(e.identifyOnResolve?.()??!1)),t},applyToStack:s,identify:()=>l(!0).map(e=>{let t=e.step??e.relation+` `+e.toMiddleware;return Ct(e.name,e.aliases)+` - `+t}),identifyOnResolve(e){return typeof e==`boolean`&&(n=e),n},resolve:(e,t)=>{for(let n of l().map(e=>e.middleware).reverse())e=n(e,t);return n&&console.log(u.identify()),e}};return u},Tt={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1},Et={high:3,normal:2,low:1},Dt;(function(e){e.HTTP=`http`,e.HTTPS=`https`})(Dt||={});var Ot;(function(e){e.MD5=`md5`,e.CRC32=`crc32`,e.CRC32C=`crc32c`,e.SHA1=`sha1`,e.SHA256=`sha256`})(Ot||={});var kt=`__smithy_context`,At=e=>e.__smithy_context||={},A=class e{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(e){this.method=e.method||`GET`,this.hostname=e.hostname||`localhost`,this.port=e.port,this.query=e.query||{},this.headers=e.headers||{},this.body=e.body,this.protocol=e.protocol?e.protocol.slice(-1)===`:`?e.protocol:`${e.protocol}:`:`https:`,this.path=e.path?e.path.charAt(0)===`/`?e.path:`/${e.path}`:`/`,this.username=e.username,this.password=e.password,this.fragment=e.fragment}static clone(t){let n=new e({...t,headers:{...t.headers}});return n.query&&=jt(n.query),n}static isInstance(e){if(!e)return!1;let t=e;return`method`in t&&`protocol`in t&&`hostname`in t&&`path`in t&&typeof t.query==`object`&&typeof t.headers==`object`}clone(){return e.clone(this)}};function jt(e){return Object.keys(e).reduce((t,n)=>{let r=e[n];return{...t,[n]:Array.isArray(r)?[...r]:r}},{})}var Mt=class{statusCode;reason;headers;body;constructor(e){this.statusCode=e.statusCode,this.reason=e.reason,this.headers=e.headers||{},this.body=e.body}static isInstance(e){if(!e)return!1;let t=e;return typeof t.statusCode==`number`&&typeof t.headers==`object`}},Nt=RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`),Pt=(e,t=!1)=>{if(!t)return Nt.test(e);let n=e.split(`.`);for(let e of n)if(!Pt(e))return!1;return!0};function Ft(e){return/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/.test(e)}var It=e=>{if(typeof e==`function`)return e;let t=Promise.resolve(e);return()=>t};function Lt(e){let t={};if(e=e.replace(/^\?/,``),e)for(let n of e.split(`&`)){let[e,r=null]=n.split(`=`);e=decodeURIComponent(e),r&&=decodeURIComponent(r),e in t?Array.isArray(t[e])?t[e].push(r):t[e]=[t[e],r]:t[e]=r}return t}var Rt=e=>{if(typeof e==`string`)return Rt(new URL(e));let{hostname:t,pathname:n,port:r,protocol:i,search:a}=e,o;return a&&(o=Lt(a)),{hostname:t,port:r?parseInt(r):void 0,protocol:i,path:n,query:o}},zt=e=>{if(typeof e==`object`){if(`url`in e){let t=Rt(e.url);if(e.headers){t.headers={};for(let n in e.headers)r(e.headers,n)&&(t.headers[n.toLowerCase()]=e.headers[n].join(`, `))}return t}return e}return Rt(e)},Bt=e=>()=>Promise.reject(e),Vt=class{config;middlewareStack=wt();initConfig;handlers;constructor(e){this.config=e;let{protocol:t,protocolSettings:n}=e;n&&typeof t==`function`&&(e.protocol=new t(n))}send(e,t,n){let r=typeof t==`function`?void 0:t,i=typeof t==`function`?t:n,a=r===void 0&&this.config.cacheMiddleware===!0,o;if(a){this.handlers||=new WeakMap;let t=this.handlers;t.has(e.constructor)?o=t.get(e.constructor):(o=e.resolveMiddleware(this.middlewareStack,this.config,r),t.set(e.constructor,o))}else delete this.handlers,o=e.resolveMiddleware(this.middlewareStack,this.config,r);if(i)o(e).then(e=>i(null,e.output),e=>i(e)).catch(()=>{});else return o(e).then(e=>e.output)}destroy(){this.config?.requestHandler?.destroy?.(),delete this.handlers}},Ht=e=>typeof e==`function`?e():e,Ut=(e,t,n,r,i)=>({name:t,namespace:e,traits:n,input:r,output:i}),Wt=e=>(t,n)=>async r=>{let{response:i}=await t(r),{operationSchema:a}=At(n),[,o,s,c,l,u]=a??[];try{return{response:i,output:await e.protocol.deserializeResponse(Ut(o,s,c,l,u),{...e,...n},i)}}catch(e){if(Object.defineProperty(e,"$response",{value:i,enumerable:!1,writable:!1,configurable:!1}),!(`$metadata`in e)){let t=`Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;try{e.message+=` - `+t}catch{!n.logger||n.logger?.constructor?.name===`NoOpLogger`?console.warn(t):n.logger?.warn?.(t)}e.$responseBodyText!==void 0&&e.$response&&(e.$response.body=e.$responseBodyText);try{if(Mt.isInstance(i)){let{headers:t={},statusCode:n}=i,r=Object.entries(t);e.$metadata={httpStatusCode:n,requestId:Gt(/^x-[\w-]+-request-?id$/,r),extendedRequestId:Gt(/^x-[\w-]+-id-2$/,r),cfId:Gt(/^x-[\w-]+-cf-id$/,r)}}}catch{}}throw e}},Gt=(e,t)=>(t.find(([t])=>t.match(e))||[void 0,void 0])[1],Kt=e=>(t,n)=>async r=>{let{operationSchema:i}=At(n),[,a,o,s,c,l]=i??[],u=n.endpointV2?async()=>zt(n.endpointV2):e.endpoint,d=await e.protocol.serializeRequest(Ut(a,o,s,c,l),r.input,{...e,...n,endpoint:u});return t({...r,request:d})},qt={name:`deserializerMiddleware`,step:`deserialize`,tags:[`DESERIALIZER`],override:!0},Jt={name:`serializerMiddleware`,step:`serialize`,tags:[`SERIALIZER`],override:!0};function Yt(e){return{applyToStack:t=>{t.add(Kt(e),Jt),t.add(Wt(e),qt),e.protocol.setSerdeContext(e)}}}var Xt=[];function Zt(e){if(typeof e==`object`)return e;if(e|=0,Xt[e])return Xt[e];let t={},n=0;for(let r of[`httpLabel`,`idempotent`,`idempotencyToken`,`sensitive`,`httpPayload`,`httpResponseCode`,`httpQueryParams`])(e>>n++&1)==1&&(t[r]=1);return Xt[e]=t}var Qt={it:Symbol.for(`@smithy/nor-struct-it`),ns:Symbol.for(`@smithy/ns`)},$t=[],en={},j=class e{ref;memberName;static symbol=Symbol.for(`@smithy/nor`);symbol=e.symbol;name;schema;_isMemberSchema;traits;memberTraits;normalizedTraits;constructor(t,n){this.ref=t,this.memberName=n;let r=[],i=t,a=t;for(this._isMemberSchema=!1;nn(i);)r.push(i[1]),i=i[0],a=Ht(i),this._isMemberSchema=!0;if(r.length>0){this.memberTraits={};for(let e=r.length-1;e>=0;--e){let t=r[e];Object.assign(this.memberTraits,Zt(t))}}else this.memberTraits=0;if(a instanceof e){let e=this.memberTraits;Object.assign(this,a),this.memberTraits=Object.assign({},e,a.getMemberTraits(),this.getMemberTraits()),this.normalizedTraits=void 0,this.memberName=n??a.memberName;return}if(this.schema=Ht(a),rn(this.schema)?(this.name=`${this.schema[1]}#${this.schema[2]}`,this.traits=this.schema[3]):(this.name=this.memberName??String(a),this.traits=0),this._isMemberSchema&&!n)throw Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(!0)} missing member name.`)}static[Symbol.hasInstance](e){let t=this.prototype.isPrototypeOf(e);return!t&&typeof e==`object`&&e?e.symbol===this.symbol:t}static of(t){let n=typeof t==`function`||typeof t==`object`&&!!t;if(typeof t==`number`){if($t[t])return $t[t]}else if(typeof t==`string`){if(en[t])return en[t]}else if(n&&t[Qt.ns])return t[Qt.ns];let r=Ht(t);if(r instanceof e)return r;if(nn(r)){let[n,i]=r;if(n instanceof e)return Object.assign(n.getMergedTraits(),Zt(i)),n;throw Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(t,null,2)}.`)}let i=new e(r);return n?t[Qt.ns]=i:typeof r==`string`?en[r]=i:typeof r==`number`?$t[r]=i:i}getSchema(){let e=this.schema;return Array.isArray(e)&&e[0]===0?e[4]:e}getName(e=!1){let{name:t}=this;return!e&&t&&t.includes(`#`)?t.split(`#`)[1]:t||void 0}getMemberName(){return this.memberName}isMemberSchema(){return this._isMemberSchema}isListSchema(){let e=this.getSchema();return typeof e==`number`?e>=64&&e<128:e[0]===1}isMapSchema(){let e=this.getSchema();return typeof e==`number`?e>=128&&e<=255:e[0]===2}isStructSchema(){let e=this.getSchema();if(typeof e!=`object`)return!1;let t=e[0];return t===3||t===-3||t===4}isUnionSchema(){let e=this.getSchema();return typeof e==`object`&&e[0]===4}isBlobSchema(){let e=this.getSchema();return e===21||e===42}isTimestampSchema(){let e=this.getSchema();return typeof e==`number`&&e>=4&&e<=7}isUnitSchema(){return this.getSchema()===`unit`}isDocumentSchema(){return this.getSchema()===15}isStringSchema(){return this.getSchema()===0}isBooleanSchema(){return this.getSchema()===2}isNumericSchema(){return this.getSchema()===1}isBigIntegerSchema(){return this.getSchema()===17}isBigDecimalSchema(){return this.getSchema()===19}isStreaming(){let{streaming:e}=this.getMergedTraits();return!!e||this.getSchema()===42}isIdempotencyToken(){return!!this.getMergedTraits().idempotencyToken}getMergedTraits(){return this.normalizedTraits??={...this.getOwnTraits(),...this.getMemberTraits()}}getMemberTraits(){return Zt(this.memberTraits)}getOwnTraits(){return Zt(this.traits)}getKeySchema(){let[e,t]=[this.isDocumentSchema(),this.isMapSchema()];if(!e&&!t)throw Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(!0)}`);let n=this.getSchema();return tn([e?15:n[4]??0,0],`key`)}getValueSchema(){let e=this.getSchema(),[t,n,r]=[this.isDocumentSchema(),this.isMapSchema(),this.isListSchema()],i=typeof e==`number`?63&e:e&&typeof e==`object`&&(n||r)?e[3+e[0]]:t?15:void 0;if(i!=null)return tn([i,0],n?`value`:`member`);throw Error(`@smithy/core/schema - ${this.getName(!0)} has no value member.`)}getMemberSchema(e){let t=this.getSchema();if(this.isStructSchema()&&t[4].includes(e)){let n=t[4].indexOf(e),r=t[5][n];return tn(nn(r)?r:[r,0],e)}if(this.isDocumentSchema())return tn([15,0],e);throw Error(`@smithy/core/schema - ${this.getName(!0)} has no member=${e}.`)}getMemberSchemas(){let e={};try{for(let[t,n]of this.structIterator())e[t]=n}catch{}return e}getEventStreamMember(){if(this.isStructSchema()){for(let[e,t]of this.structIterator())if(t.isStreaming()&&t.isStructSchema())return e}return``}*structIterator(){if(this.isUnitSchema())return;if(!this.isStructSchema())throw Error(`@smithy/core/schema - cannot iterate non-struct schema.`);let e=this.getSchema(),t=e[4].length,n=e[Qt.it];if(n&&t===n.length){yield*n;return}n=Array(t);for(let r=0;rArray.isArray(e)&&e.length===2,rn=e=>Array.isArray(e)&&e.length>=5,an=`***SensitiveInformation***`;function on(e,t){if(t==null)return t;let n=j.of(e);if(n.getMergedTraits().sensitive)return an;if(n.isListSchema()){if(n.getValueSchema().getMergedTraits().sensitive)return an}else if(n.isMapSchema()){if(n.getKeySchema().getMergedTraits().sensitive||n.getValueSchema().getMergedTraits().sensitive)return an}else if(n.isStructSchema()&&typeof t==`object`){let e=t,r={};for(let[t,i]of n.structIterator())e[t]!=null&&(r[t]=on(i,e[t]));return r}return t}var sn=class{middlewareStack=wt();schema;static classBuilder(){return new cn}resolveMiddlewareWithContext(e,t,n,{middlewareFn:r,clientName:i,commandName:a,inputFilterSensitiveLog:o,outputFilterSensitiveLog:s,smithyContext:c,additionalContext:l,CommandCtor:u}){for(let i of r.bind(this)(u,e,t,n))this.middlewareStack.use(i);let d=e.concat(this.middlewareStack),{logger:f}=t,p={logger:f,clientName:i,commandName:a,inputFilterSensitiveLog:o,outputFilterSensitiveLog:s,[kt]:{commandInstance:this,...c},...l},{requestHandler:m}=t,h=n??{};return c.eventStream&&(h={isEventStream:!0,...h}),d.resolve(e=>m.handle(e.request,h),p)}},cn=class{_init=()=>{};_ep={};_middlewareFn=()=>[];_commandName=``;_clientName=``;_additionalContext={};_smithyContext={};_inputFilterSensitiveLog=void 0;_outputFilterSensitiveLog=void 0;_serializer=null;_deserializer=null;_operationSchema;init(e){this._init=e}ep(e){return this._ep=e,this}m(e){return this._middlewareFn=e,this}s(e,t,n={}){return this._smithyContext={service:e,operation:t,...n},this}c(e={}){return this._additionalContext=e,this}n(e,t){return this._clientName=e,this._commandName=t,this}f(e=e=>e,t=e=>e){return this._inputFilterSensitiveLog=e,this._outputFilterSensitiveLog=t,this}ser(e){return this._serializer=e,this}de(e){return this._deserializer=e,this}sc(e){return this._operationSchema=e,this._smithyContext.operationSchema=e,this}build(){let e=this,t;return t=class extends sn{input;static getEndpointParameterInstructions(){return e._ep}constructor(...[t]){super(),this.input=t??{},e._init(this),this.schema=e._operationSchema}resolveMiddleware(n,r,i){let a=e._operationSchema,o=a?.[4]??a?.input,s=a?.[5]??a?.output;return this.resolveMiddlewareWithContext(n,r,i,{CommandCtor:t,middlewareFn:e._middlewareFn,clientName:e._clientName,commandName:e._commandName,inputFilterSensitiveLog:e._inputFilterSensitiveLog??(a?on.bind(null,o):e=>e),outputFilterSensitiveLog:e._outputFilterSensitiveLog??(a?on.bind(null,s):e=>e),smithyContext:e._smithyContext,additionalContext:e._additionalContext})}serialize=e._serializer;deserialize=e._deserializer}}},ln=class e extends Error{$fault;$response;$retryable;$metadata;constructor(e){super(e.message),Object.setPrototypeOf(this,Object.getPrototypeOf(this).constructor.prototype),this.name=e.name,this.$fault=e.$fault,this.$metadata=e.$metadata}static isInstance(t){if(!t)return!1;let n=t;return e.prototype.isPrototypeOf(n)||!!n.$fault&&!!n.$metadata&&(n.$fault===`client`||n.$fault===`server`)}static[Symbol.hasInstance](t){if(!t)return!1;let n=t;return this===e?e.isInstance(t):e.isInstance(t)?n.name&&this.name?this.prototype.isPrototypeOf(t)||n.name===this.name:this.prototype.isPrototypeOf(t):!1}},un=(e,t={})=>(Object.entries(t).filter(([,e])=>e!==void 0).forEach(([t,n])=>{(e[t]==null||e[t]===``)&&(e[t]=n)}),e.message=e.message||e.Message||`UnknownError`,delete e.Message,e),dn=e=>{switch(e){case`standard`:return{retryMode:`standard`,connectionTimeout:3100};case`in-region`:return{retryMode:`standard`,connectionTimeout:1100};case`cross-region`:return{retryMode:`standard`,connectionTimeout:3100};case`mobile`:return{retryMode:`standard`,connectionTimeout:3e4};default:return{}}},fn=Object.values(Ot),pn=e=>{let t=[];for(let n in Ot){if(!r(Ot,n))continue;let i=Ot[n];e[i]!==void 0&&t.push({algorithmId:()=>i,checksumConstructor:()=>e[i]})}for(let[n,r]of Object.entries(e.checksumAlgorithms??{}))t.push({algorithmId:()=>n,checksumConstructor:()=>r});return{addChecksumAlgorithm(n){e.checksumAlgorithms=e.checksumAlgorithms??{};let r=n.algorithmId(),i=n.checksumConstructor();fn.includes(r)?e.checksumAlgorithms[r.toUpperCase()]=i:e.checksumAlgorithms[r]=i,t.push(n)},checksumAlgorithms(){return t}}},mn=e=>{let t={};return e.checksumAlgorithms().forEach(e=>{let n=e.algorithmId();fn.includes(n)&&(t[n]=e.checksumConstructor())}),t},hn=e=>({setRetryStrategy(t){e.retryStrategy=t},retryStrategy(){return e.retryStrategy}}),gn=e=>{let t={};return t.retryStrategy=e.retryStrategy(),t},_n=e=>Object.assign(pn(e),hn(e)),vn=e=>Object.assign(mn(e),gn(e)),yn=e=>{let t=`#text`;for(let n in e)r(e,n)&&(e[n][t]===void 0?typeof e[n]==`object`&&e[n]!==null&&(e[n]=yn(e[n])):e[n]=e[n][t]);return e},bn=class{trace(){}debug(){}info(){}warn(){}error(){}};function xn(e,t,n,r){return function(i,a,o,s,c={}){let l=Object.assign({},e,i);return sn.classBuilder().ep(l).m(function(e,t,n,i){let o=a.call(this,e,t,n,i);return o.unshift(r(n,e.getEndpointParameterInstructions())),o}).s(t,o,c).n(n,o.charAt(0).toUpperCase()+o.slice(1)+`Command`).sc(s).build()}}var Sn=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,Cn=Object.entries(Sn).reduce((e,[t,n])=>(e[n]=Number(t),e),{}),wn=Sn.split(``),Tn=e=>{let t=e.length/4*3;e.slice(-2)===`==`?t-=2:e.slice(-1)===`=`&&t--;let n=new ArrayBuffer(t),r=new DataView(n);for(let t=0;t>=6;let a=t/4*3;n>>=i%8;let o=Math.floor(i/8);for(let e=0;e>t)}}return new Uint8Array(n)};function En(e){let n;n=typeof e==`string`?t(e):e;let r=typeof n==`object`&&typeof n.length==`number`,i=typeof n==`object`&&typeof n.byteOffset==`number`&&typeof n.byteLength==`number`;if(!r&&!i)throw Error(`@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.`);let a=``;for(let e=0;e>n]}a+=`==`.slice(0,4-i)}return a}function Dn(e,t,n,r){return class i extends Uint8Array{static fromString(e,n=`utf-8`){if(typeof e==`string`)return n===`base64`?i.mutate(r(e)):i.mutate(t(e));throw Error(`Unsupported conversion from ${typeof e} to Uint8ArrayBlobAdapter.`)}static mutate(e){return Object.setPrototypeOf(e,i.prototype),e}transformToString(t=`utf-8`){return t===`base64`?n(this):e(this)}}}var M=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function On(e){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?()=>crypto.randomUUID():()=>{let t=new Uint8Array(16);return e(t),t[6]=t[6]&15|64,t[8]=t[8]&63|128,M[t[0]]+M[t[1]]+M[t[2]]+M[t[3]]+`-`+M[t[4]]+M[t[5]]+`-`+M[t[6]]+M[t[7]]+`-`+M[t[8]]+M[t[9]]+`-`+M[t[10]]+M[t[11]]+M[t[12]]+M[t[13]]+M[t[14]]+M[t[15]]}}var kn=e=>{if(e!=null){if(typeof e==`string`){let t=parseFloat(e);if(!Number.isNaN(t))return String(t)!==String(e)&&Wn.warn(Un(`Expected number but observed string: ${e}`)),t}if(typeof e==`number`)return e;throw TypeError(`Expected number, got ${typeof e}: ${e}`)}},An=Math.ceil(2**127*(2-2**-23)),jn=e=>{let t=kn(e);if(t!==void 0&&!Number.isNaN(t)&&t!==1/0&&t!==-1/0&&Math.abs(t)>An)throw TypeError(`Expected 32-bit float, got ${e}`);return t},Mn=e=>{if(e!=null){if(Number.isInteger(e)&&!Number.isNaN(e))return e;throw TypeError(`Expected integer, got ${typeof e}: ${e}`)}},Nn=e=>Fn(e,16),Pn=e=>Fn(e,8),Fn=(e,t)=>{let n=Mn(e);if(n!==void 0&&In(n,t)!==n)throw TypeError(`Expected ${t}-bit integer, got ${e}`);return n},In=(e,t)=>{switch(t){case 32:return Int32Array.of(e)[0];case 16:return Int16Array.of(e)[0];case 8:return Int8Array.of(e)[0]}},Ln=e=>kn(typeof e==`string`?Bn(e):e),Rn=e=>jn(typeof e==`string`?Bn(e):e),zn=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g,Bn=e=>{let t=e.match(zn);if(t===null||t[0].length!==e.length)throw TypeError(`Expected real number, got implicit NaN`);return parseFloat(e)},Vn=e=>Nn(typeof e==`string`?Bn(e):e),Hn=e=>Pn(typeof e==`string`?Bn(e):e),Un=e=>String(TypeError(e).stack||e).split(` -`).slice(0,5).filter(e=>!e.includes(`stackTraceWarning`)).join(` -`),Wn={warn:console.warn},Gn=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Kn=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function qn(e){let t=e.getUTCFullYear(),n=e.getUTCMonth(),r=e.getUTCDay(),i=e.getUTCDate(),a=e.getUTCHours(),o=e.getUTCMinutes(),s=e.getUTCSeconds(),c=i<10?`0${i}`:`${i}`,l=a<10?`0${a}`:`${a}`,u=o<10?`0${o}`:`${o}`,d=s<10?`0${s}`:`${s}`;return`${Gn[r]}, ${c} ${Kn[n]} ${t} ${l}:${u}:${d} GMT`}var Jn=new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}:\d{2})|[zZ])$/),Yn=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC-3339 date-times must be expressed as strings`);let t=Jn.exec(e);if(!t)throw TypeError(`Invalid RFC-3339 date-time value`);let[n,r,i,a,o,s,c,l,u]=t,d=tr(Vn(fr(r)),lr(i,`month`,1,12),lr(a,`day`,1,31),{hours:o,minutes:s,seconds:c,fractionalMilliseconds:l});return u.toUpperCase()!=`Z`&&d.setTime(d.getTime()-dr(u)),d},Xn=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),Zn=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/),Qn=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/),$n=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC-7231 date-times must be expressed as strings`);let t=Xn.exec(e);if(t){let[e,n,r,i,a,o,s,c]=t;return tr(Vn(fr(i)),ar(r),lr(n,`day`,1,31),{hours:a,minutes:o,seconds:s,fractionalMilliseconds:c})}if(t=Zn.exec(e),t){let[e,n,r,i,a,o,s,c]=t;return ir(tr(nr(i),ar(r),lr(n,`day`,1,31),{hours:a,minutes:o,seconds:s,fractionalMilliseconds:c}))}if(t=Qn.exec(e),t){let[e,n,r,i,a,o,s,c]=t;return tr(Vn(fr(c)),ar(n),lr(r.trimLeft(),`day`,1,31),{hours:i,minutes:a,seconds:o,fractionalMilliseconds:s})}throw TypeError(`Invalid RFC-7231 date-time value`)},er=e=>{if(e==null)return;let t;if(typeof e==`number`)t=e;else if(typeof e==`string`)t=Ln(e);else if(typeof e==`object`&&e.tag===1)t=e.value;else throw TypeError(`Epoch timestamps must be expressed as floating point numbers or their string representation`);if(Number.isNaN(t)||t===1/0||t===-1/0)throw TypeError(`Epoch timestamps must be valid, non-Infinite, non-NaN numerics`);return new Date(Math.round(t*1e3))},tr=(e,t,n,r)=>{let i=t-1;return sr(e,i,n),new Date(Date.UTC(e,i,n,lr(r.hours,`hour`,0,23),lr(r.minutes,`minute`,0,59),lr(r.seconds,`seconds`,0,60),ur(r.fractionalMilliseconds)))},nr=e=>{let t=new Date().getUTCFullYear(),n=Math.floor(t/100)*100+Vn(fr(e));return ne.getTime()-new Date().getTime()>rr?new Date(Date.UTC(e.getUTCFullYear()-100,e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds())):e,ar=e=>{let t=Kn.indexOf(e);if(t<0)throw TypeError(`Invalid month: ${e}`);return t+1},or=[31,28,31,30,31,30,31,31,30,31,30,31],sr=(e,t,n)=>{let r=or[t];if(t===1&&cr(e)&&(r=29),n>r)throw TypeError(`Invalid day for ${Kn[t]} in ${e}: ${n}`)},cr=e=>e%4==0&&(e%100!=0||e%400==0),lr=(e,t,n,r)=>{let i=Hn(fr(e));if(ir)throw TypeError(`${t} must be between ${n} and ${r}, inclusive`);return i},ur=e=>e==null?0:Rn(`0.`+e)*1e3,dr=e=>{let t=e[0],n=1;if(t==`+`)n=1;else if(t==`-`)n=-1;else throw TypeError(`Offset direction, ${t}, must be "+" or "-"`);let r=Number(e.substring(1,3)),i=Number(e.substring(4,6));return n*(r*60+i)*60*1e3},fr=e=>{let t=0;for(;te&&typeof e==`object`&&(e instanceof pr||`deserializeJSON`in e)?e:typeof e==`string`||Object.getPrototypeOf(e)===String.prototype?pr(String(e)):pr(JSON.stringify(e)),pr.fromObject=pr.from;var mr=`(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?`,hr=`(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)`,gr=`(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?`,_r=`(\\d?\\d)`,vr=`(\\d{4})`,yr=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/),br=RegExp(`^${mr}, ${_r} ${hr} ${vr} ${gr} GMT$`),xr=RegExp(`^${mr}, ${_r}-${hr}-(\\d\\d) ${gr} GMT$`),Sr=RegExp(`^${mr} ${hr} ( [1-9]|\\d\\d) ${gr} ${vr}$`),Cr=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],wr=e=>{if(e==null)return;let t=NaN;if(typeof e==`number`)t=e;else if(typeof e==`string`){if(!/^-?\d*\.?\d+$/.test(e))throw TypeError(`parseEpochTimestamp - numeric string invalid.`);t=Number.parseFloat(e)}else typeof e==`object`&&e.tag===1&&(t=e.value);if(isNaN(t)||Math.abs(t)===1/0)throw TypeError(`Epoch timestamps must be valid finite numbers.`);return new Date(Math.round(t*1e3))},Tr=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC3339 timestamps must be strings`);let t=yr.exec(e);if(!t)throw TypeError(`Invalid RFC3339 timestamp format ${e}`);let[,n,r,i,a,o,s,,c,l]=t;N(r,1,12),N(i,1,31),N(a,0,23),N(o,0,59),N(s,0,60);let u=new Date(Date.UTC(Number(n),Number(r)-1,Number(i),Number(a),Number(o),Number(s),Number(c)?Math.round(parseFloat(`0.${c}`)*1e3):0));if(u.setUTCFullYear(Number(n)),l.toUpperCase()!=`Z`){let[,e,t,n]=/([+-])(\d\d):(\d\d)/.exec(l)||[void 0,`+`,0,0],r=e===`-`?1:-1;u.setTime(u.getTime()+r*(Number(t)*60*60*1e3+Number(n)*60*1e3))}return u},Er=e=>{if(e==null)return;if(typeof e!=`string`)throw TypeError(`RFC7231 timestamps must be strings.`);let t,n,r,i,a,o,s,c;if((c=br.exec(e))?[,t,n,r,i,a,o,s]=c:(c=xr.exec(e))?([,t,n,r,i,a,o,s]=c,r=(Number(r)+1900).toString()):(c=Sr.exec(e))&&([,n,t,i,a,o,s,r]=c),r&&o){let e=Date.UTC(Number(r),Cr.indexOf(n),Number(t),Number(i),Number(a),Number(o),s?Math.round(parseFloat(`0.${s}`)*1e3):0);N(t,1,31),N(i,0,23),N(a,0,59),N(o,0,60);let c=new Date(e);return c.setUTCFullYear(Number(r)),c}throw TypeError(`Invalid RFC7231 date-time value ${e}.`)};function N(e,t,n){let r=Number(e);if(rn)throw Error(`Value ${r} out of range [${t}, ${n}]`)}var Dr=e=>{let t=e.length,n=[],r=!1,i,a=0;for(let o=0;o{e=e.trim();let t=e.length;return t<2?e:(e[0]===`"`&&e[t-1]===`"`&&(e=e.slice(1,t-1)),e.replace(/\\"/g,`"`))})},Or=/^-?((0|[1-9]\d*)(\.\d+)?|\.\d+)([eE][+-]?\d+)?$/,kr=class e{string;type;constructor(e,t){if(this.string=e,this.type=t,!Or.test(e))throw Error(`@smithy/core/serde - NumericValue string must conform to the Smithy bigDecimal format. Received: "${e}"`)}toString(){return this.string}static[Symbol.hasInstance](t){if(!t||typeof t!=`object`)return!1;let n=t;return e.prototype.isPrototypeOf(t)||n.type===`bigDecimal`&&Or.test(n.string)}},Ar=typeof TextEncoder==`function`?new TextEncoder:null,jr=e=>{if(typeof e==`string`){if(Ar)return Ar.encode(e).byteLength;let t=e.length;for(let n=t-1;n>=0;n--){let r=e.charCodeAt(n);r>127&&r<=2047?t++:r>2047&&r<=65535&&(t+=2),r>=56320&&r<=57343&&n--}return t}if(typeof e.byteLength==`number`)return e.byteLength;if(typeof e.size==`number`)return e.size;throw Error(`Body Length computation failed for ${e}`)},P=e=>e instanceof Uint8Array?e:typeof e==`string`?t(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(e);function Mr(e,t){if(t===void 0){t=0;for(let n of e)t+=n.byteLength}let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}var Nr=e=>typeof ArrayBuffer==`function`&&e instanceof ArrayBuffer||Object.prototype.toString.call(e)===`[object ArrayBuffer]`,Pr=async e=>void 0,Fr=async e=>{let t=e?.Bucket||``;if(typeof e.Bucket==`string`&&(e.Bucket=t.replace(/#/g,`%23`).replace(/\?/g,`%3F`)),Br(t)){if(e.ForcePathStyle===!0)throw Error(`Path-style addressing cannot be used with ARN buckets`)}else(!zr(t)||t.indexOf(`.`)!==-1&&!String(e.Endpoint).startsWith(`http:`)||t.toLowerCase()!==t||t.length<3)&&(e.ForcePathStyle=!0);return e.DisableMultiRegionAccessPoints&&(e.disableMultiRegionAccessPoints=!0,e.DisableMRAP=!0),e},Ir=/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/,Lr=/(\d+\.){3}\d+/,Rr=/\.\./,zr=e=>Ir.test(e)&&!Lr.test(e)&&!Rr.test(e),Br=e=>{let[t,n,r,,,i]=e.split(`:`),a=t===`arn`&&e.split(`:`).length>=6,o=!!(a&&n&&r&&i);if(a&&!o)throw Error(`Invalid ARN: ${e} was an invalid ARN.`);return o},Vr=(e,t,n,r=!1)=>{let i=async()=>{let i;return i=r?n.clientContextParams?.[e]??n[e]??n[t]:n[e]??n[t],typeof i==`function`?i():i};return e===`credentialScope`||t===`CredentialScope`?async()=>{let e=typeof n.credentials==`function`?await n.credentials():n.credentials;return e?.credentialScope??e?.CredentialScope}:e===`accountId`||t===`AccountId`?async()=>{let e=typeof n.credentials==`function`?await n.credentials():n.credentials;return e?.accountId??e?.AccountId}:e===`endpoint`||t===`endpoint`?async()=>{if(n.isCustomEndpoint===!1)return;let e=await i();if(e&&typeof e==`object`){if(`url`in e)return e.url.href;if(`hostname`in e){let{protocol:t,hostname:n,port:r,path:i}=e;return`${t}//${n}${r?`:`+r:``}${i}`}}return e}:i};function Hr(e){return async(t,n,r,i)=>{if(!r.isCustomEndpoint&&!r.ignoreConfiguredEndpointUrls){let t;t=r.serviceConfiguredEndpoint?await r.serviceConfiguredEndpoint():await e(r.serviceId),t&&(r.endpoint=()=>Promise.resolve(zt(t)),r.isCustomEndpoint=!0,i?.logger?.debug?.(`@smithy/core/endpoints - resolved endpoint from config: ${t}`))}let a=await Ur(t,n,r);if(typeof r.endpointProvider!=`function`)throw Error(`config.endpointProvider is not set.`);let o=r.endpointProvider(a,i);if(r.isCustomEndpoint&&r.endpoint){let e=await r.endpoint();if(e?.headers){o.headers??={};for(let[t,n]of Object.entries(e.headers))o.headers[t]=Array.isArray(n)?n:[n]}}return o}}var Ur=async(e,t,n)=>{let r={},i=t?.getEndpointParameterInstructions?.()||{};for(let[t,a]of Object.entries(i))switch(a.type){case`staticContextParams`:r[t]=a.value;break;case`contextParams`:r[t]=e[a.name];break;case`clientContextParams`:case`builtInParams`:r[t]=await Vr(a.name,t,n,a.type!==`builtInParams`)();break;case`operationContextParams`:r[t]=a.get(e);break;default:throw Error(`Unrecognized endpoint parameter instruction: `+JSON.stringify(a))}return Object.keys(i).length===0&&Object.assign(r,n),String(n.serviceId).toLowerCase()===`s3`&&await Fr(r),r};function Wr(e,t,n){e.__smithy_context?e.__smithy_context.features||(e.__smithy_context.features={}):e.__smithy_context={features:{}},e.__smithy_context.features[t]=n}function Gr(e){let t=Hr(e);return({config:e,instructions:n})=>(r,i)=>async a=>{e.isCustomEndpoint&&Wr(i,`ENDPOINT_OVERRIDE`,`N`);let o=await t(a.input,{getEndpointParameterInstructions(){return n}},{...e},i);i.endpointV2=o,i.authSchemes=o.properties?.authSchemes;let s=i.authSchemes?.[0];if(s){i.signing_region=s.signingRegion,i.signing_service=s.signingName;let e=At(i)?.selectedHttpAuthScheme?.httpAuthOption;e&&(e.signingProperties=Object.assign(e.signingProperties||{},{signing_region:s.signingRegion,signingRegion:s.signingRegion,signing_service:s.signingName,signingName:s.signingName,signingRegionSet:s.signingRegionSet},s.properties))}return r({...a})}}var Kr={step:`serialize`,tags:[`ENDPOINT_PARAMETERS`,`ENDPOINT_V2`,`ENDPOINT`],name:`endpointV2Middleware`,override:!0,relation:`before`,toMiddleware:{name:`serializerMiddleware`,step:`serialize`,tags:[`SERIALIZER`],override:!0}.name};function qr(e){let t=Gr(e);return(e,n)=>({applyToStack:r=>{r.addRelativeTo(t({config:e,instructions:n}),Kr)}})}function Jr(e){return t=>{let n=t.tls??!0,{endpoint:r,useDualstackEndpoint:i,useFipsEndpoint:a}=t,o=Object.assign(t,{endpoint:r==null?void 0:async()=>zt(await It(r)()),tls:n,isCustomEndpoint:!!r,useDualstackEndpoint:It(i??!1),useFipsEndpoint:It(a??!1),ignoreConfiguredEndpointUrls:!!t.ignoreConfiguredEndpointUrls}),s;return o.serviceConfiguredEndpoint=async()=>(t.serviceId&&!s&&(s=e(t.serviceId)),s),o}}var Yr=class e{nodes;root;conditions;results;constructor(e,t,n,r){this.nodes=e,this.root=t,this.conditions=n,this.results=r}static from(t,n,r,i){return new e(t,n,r,i)}},Xr=class{capacity;data=new Map;parameters=[];constructor({size:e,params:t}){this.capacity=e??50,t&&(this.parameters=t)}get(e,t){let n=this.hash(e);if(n===!1)return t();if(!this.data.has(n)){if(this.data.size>this.capacity+10){let e=this.data.keys(),t=0;for(;;){let{value:n,done:r}=e.next();if(this.data.delete(n),r||++t>10)break}}this.data.set(n,t())}return this.data.get(n)}size(){return this.data.size}hash(e){let t=``,{parameters:n}=this;if(n.length===0)return!1;for(let r of n){let n=String(e[r]??``);if(n.includes(`|;`))return!1;t+=n+`|;`}return t}},F=class extends Error{constructor(e){super(e),this.name=`EndpointError`}},Zr=`endpoints`;function Qr(e){return typeof e!=`object`||!e?e:`ref`in e?`$${Qr(e.ref)}`:`fn`in e?`${e.fn}(${(e.argv||[]).map(Qr).join(`, `)})`:JSON.stringify(e,null,2)}var $r={},ei=(e,t)=>e===t;function ti(...e){for(let t of e)if(t!=null)return t}var ni=e=>{let t=e.split(`.`),n=[];for(let r of t){let t=r.indexOf(`[`);if(t!==-1){if(r.indexOf(`]`)!==r.length-1)throw new F(`Path: '${e}' does not end with ']'`);let i=r.slice(t+1,-1);if(Number.isNaN(parseInt(i)))throw new F(`Invalid array index: '${i}' in path: '${e}'`);t!==0&&n.push(r.slice(0,t)),n.push(i)}else n.push(r)}return n},ri=(e,t)=>ni(t).reduce((n,r)=>{if(typeof n!=`object`)throw new F(`Index '${r}' in '${t}' not found in '${JSON.stringify(e)}'`);if(Array.isArray(n)){let e=parseInt(r);return n[e<0?n.length+e:e]}return n[r]},e),ii=e=>e!=null;function ai(e,t,n){return e?t:n}var oi=e=>!e,si=RegExp(`^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$`),ci=e=>si.test(e)||e.startsWith(`[`)&&e.endsWith(`]`),li={[Dt.HTTP]:80,[Dt.HTTPS]:443},ui=e=>{let t=(()=>{try{if(e instanceof URL)return e;if(typeof e==`object`&&`hostname`in e){let{hostname:t,port:n,protocol:r=``,path:i=``,query:a={}}=e,o=new URL(`${r}//${t}${n?`:${n}`:``}${i}`);return o.search=Object.entries(a).map(([e,t])=>`${e}=${t}`).join(`&`),o}return new URL(e)}catch{return null}})();if(!t)return console.error(`Unable to parse ${JSON.stringify(e)} as a whatwg URL.`),null;let n=t.href,{host:r,hostname:i,pathname:a,protocol:o,search:s}=t;if(s)return null;let c=o.slice(0,-1);if(!Object.values(Dt).includes(c))return null;let l=ci(i);return{scheme:c,authority:`${r}${n.includes(`${r}:${li[c]}`)||typeof e==`string`&&e.includes(`${r}:${li[c]}`)?`:${li[c]}`:``}`,path:a,normalizedPath:a.endsWith(`/`)?a:`${a}/`,isIp:l}};function di(e,t,n){if(n===1)return[e];if(e===``)return[``];let r=e.split(t);return n===0?r:r.slice(0,n-1).concat(r.slice(1).join(t))}var fi={booleanEquals:ei,coalesce:ti,getAttr:ri,isSet:ii,isValidHostLabel:Pt,ite:ai,not:oi,parseURL:ui,split:di,stringEquals:(e,t)=>e===t,substring:(e,t,n,r)=>e==null||t>=n||e.lengthencodeURIComponent(e).replace(/[!*'()]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},pi=(e,t)=>{let n=[],{referenceRecord:r,endpointParams:i}=t,a=0;for(;at.referenceRecord[e]??t.endpointParams[e],hi=(e,t,n)=>{if(typeof e==`string`)return pi(e,n);if(e.fn)return _i.callFunction(e,n);if(e.ref)return mi(e,n);throw new F(`'${t}': ${String(e)} is not a string, function or reference.`)},gi=({fn:e,argv:t},n)=>{let r=Array(t.length);for(let e=0;e{let{assign:n}=e;if(n&&n in t.referenceRecord)throw new F(`'${n}' is already defined in Reference Record.`);let r=gi(e,t);t.logger?.debug?.(`${Zr} evaluateCondition: ${Qr(e)} = ${Qr(r)}`);let i=r===``||!!r;return n==null?{result:i}:{result:i,toAssign:{name:n,value:r}}},yi=(e,t)=>Object.entries(e??{}).reduce((e,[n,r])=>(e[n]=r.map(e=>{let r=hi(e,`Header value entry`,t);if(typeof r!=`string`)throw new F(`Header '${n}' value '${r}' is not a string`);return r}),e),{}),bi=(e,t)=>Object.entries(e).reduce((e,[n,r])=>(e[n]=Si.getEndpointProperty(r,t),e),{}),xi=(e,t)=>{if(Array.isArray(e))return e.map(e=>xi(e,t));switch(typeof e){case`string`:return pi(e,t);case`object`:if(e===null)throw new F(`Unexpected endpoint property: ${e}`);return Si.getEndpointProperties(e,t);case`boolean`:return e;default:throw new F(`Unexpected endpoint property type: ${typeof e}`)}},Si={getEndpointProperty:xi,getEndpointProperties:bi},Ci=(e,t)=>{let n=hi(e,`Endpoint URL`,t);if(typeof n==`string`)try{return new URL(n)}catch(e){throw console.error(`Failed to construct URL with ${n}`,e),e}throw new F(`Endpoint URL must be a string, got ${typeof n}`)},wi=1e8,Ti=(e,t)=>{let{nodes:n,root:r,results:i,conditions:a}=e,o=r,s={},c={referenceRecord:s,endpointParams:t.endpointParams,logger:t.logger};for(;o!==1&&o!==-1&&o=0===f.result?r:i}if(o>=wi){let e=i[o-wi];if(e[0]===-1){let[,t]=e;throw new F(hi(t,`Error`,c))}let[t,n,r]=e;return{url:Ci(t,c),properties:bi(n,c),headers:yi(r??{},c)}}throw new F(`No matching endpoint.`)},Ei=Hr(Pr),Di=Jr(Pr);Gr(Pr);var Oi=qr(Pr),ki=e=>typeof ReadableStream==`function`&&(e?.constructor?.name===ReadableStream.name||e instanceof ReadableStream),Ai=e=>typeof Blob==`function`&&(e?.constructor?.name===Blob.name||e instanceof Blob),ji=async e=>Ai(e)?Mi(e):Ni(e);async function Mi(e){return e.arrayBuffer().then(e=>new Uint8Array(e))}async function Ni(e){let t=[],n=e.getReader(),r=0;for(;;){let{done:e,value:i}=await n.read();if(i&&(t.push(i),r+=i.length),e)break}return Mr(t,r)}var Pi=class extends Dn(i,t,En,Tn){},Fi=On(e=>crypto.getRandomValues(e)),Ii=Fi,Li=async(e=new Uint8Array,t)=>{if(e instanceof Uint8Array)return Pi.mutate(e);if(!e)return Pi.mutate(new Uint8Array);let n=t.streamCollector(e);return Pi.mutate(await n)};function Ri(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return`%`+e.charCodeAt(0).toString(16).toUpperCase()})}var zi=class{serdeContext;setSerdeContext(e){this.serdeContext=e}},Bi=`modulepreload`,Vi=function(e){return`/`+e},Hi={},Ui=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Vi(t,n),t=s(t),t in Hi)return;Hi[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Bi,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Wi=class extends zi{options;compositeErrorRegistry;constructor(t){super(),this.options=t,this.compositeErrorRegistry=e.for(t.defaultNamespace);for(let e of t.errorTypeRegistries??[])this.compositeErrorRegistry.copyFrom(e)}getRequestType(){return A}getResponseType(){return Mt}setSerdeContext(e){this.serdeContext=e,this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e),this.getPayloadCodec()&&this.getPayloadCodec().setSerdeContext(e)}updateServiceEndpoint(e,t){if(`url`in t){e.protocol=t.url.protocol,e.hostname=t.url.hostname,e.port=t.url.port?Number(t.url.port):void 0,e.path=t.url.pathname,e.fragment=t.url.hash||void 0,e.username=t.url.username||void 0,e.password=t.url.password||void 0,e.query||={};for(let[n,r]of t.url.searchParams.entries())e.query[n]=r;if(t.headers)for(let n in t.headers)r(t.headers,n)&&(e.headers[n]=t.headers[n].join(`, `));return e}if(e.protocol=t.protocol,e.hostname=t.hostname,e.port=t.port?Number(t.port):void 0,e.path=t.path,e.query={...t.query},t.headers)for(let n in t.headers)r(t.headers,n)&&(e.headers[n]=t.headers[n]);return e}setHostPrefix(e,t,n){if(this.serdeContext?.disableHostPrefix)return;let r=j.of(t.input),i=Zt(t.traits??{});if(i.endpoint){let t=i.endpoint?.[0];if(typeof t==`string`){for(let[e,i]of r.structIterator()){if(!i.getMergedTraits().hostLabel)continue;let r=n[e];if(typeof r!=`string`)throw Error(`@smithy/core/schema - ${e} in input must be a string as hostLabel.`);t=t.replace(`{${e}}`,r)}if(e.hostname=t+e.hostname,!Ft(e.hostname))throw Error(`[${e.hostname}] is not a valid hostname.`)}}}deserializeMetadata(e){return{httpStatusCode:e.statusCode,requestId:e.headers[`x-amzn-requestid`]??e.headers[`x-amzn-request-id`]??e.headers[`x-amz-request-id`],extendedRequestId:e.headers[`x-amz-id-2`],cfId:e.headers[`x-amz-cf-id`]}}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n}){return(await this.loadEventStreamCapability()).serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n})}async deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n}){return(await this.loadEventStreamCapability()).deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n})}async loadEventStreamCapability(){let{EventStreamSerde:e,eventStreamSerdeProvider:t}=await Ui(async()=>{let{EventStreamSerde:e,eventStreamSerdeProvider:t}=await import(`./index.browser-DrrD6hYC.js`);return{EventStreamSerde:e,eventStreamSerdeProvider:t}},__vite__mapDeps([0,1,2,3]));return new e({marshaller:this.resolveEventStreamMarshaller(t),serializer:this.serializer,deserializer:this.deserializer,serdeContext:this.serdeContext,defaultContentType:this.getDefaultContentType(),compositeErrorRegistry:this.compositeErrorRegistry})}resolveEventStreamMarshaller(e){let t=this.serdeContext;return t.eventStreamMarshaller?t.eventStreamMarshaller:e(this.serdeContext)}getDefaultContentType(){throw Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`)}async deserializeHttpMessage(e,t,n,r,i){return[]}getEventStreamMarshaller(){let e=this.serdeContext;if(!e.eventStreamMarshaller)throw Error(`@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.`);return e.eventStreamMarshaller}},Gi=class extends Wi{async serializeRequest(e,t,n){let r=this.serializer,i={},a={},o=await n.endpoint(),s=j.of(e?.input),c=s.getSchema(),l,u=t&&typeof t==`object`?t:{},d=new A({protocol:``,hostname:``,port:void 0,path:`/`,fragment:void 0,query:i,headers:a,body:void 0});if(o&&(this.updateServiceEndpoint(d,o),this.setHostPrefix(d,e,u)),u){let e=s.getEventStreamMember();if(e){if(u[e]){let t={};for(let[n]of s.structIterator())n!==e&&u[n]!=null&&(t[n]=u[n]);l=await this.serializeEventStream({eventStream:u[e],requestSchema:s,initialRequest:t})}}else r.write(c,u),l=r.flush()}return d.headers=Object.assign(d.headers,a),d.query=i,d.body=l,d.method=`POST`,d}async deserializeResponse(e,t,n){let i=this.deserializer,a=j.of(e.output),o={};if(n.statusCode>=300){let r=await Li(n.body,t);throw r.byteLength>0&&Object.assign(o,await i.read(15,r)),await this.handleError(e,t,n,o,this.deserializeMetadata(n)),Error(`@smithy/core/protocols - RPC Protocol error handler failed to throw.`)}for(let e in n.headers){if(!r(n.headers,e))continue;let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let s=a.getEventStreamMember();if(s)o[s]=await this.deserializeEventStream({response:n,responseSchema:a,initialResponseContainer:o});else{let e=await Li(n.body,t);e.byteLength>0&&Object.assign(o,await i.read(a,e))}return o.$metadata=this.deserializeMetadata(n),o}};function Ki(e,t){if(t.timestampFormat.useTrait&&e.isTimestampSchema()&&(e.getSchema()===5||e.getSchema()===6||e.getSchema()===7))return e.getSchema();let{httpLabel:n,httpPrefixHeaders:r,httpHeader:i,httpQuery:a}=e.getMergedTraits();return(t.httpBindings?typeof r==`string`||i?6:a||n?5:void 0:void 0)??t.timestampFormat.default}var qi=class extends zi{settings;constructor(e){super(),this.settings=e}read(e,t){let n=j.of(e);if(n.isListSchema())return Dr(t).map(e=>this.read(n.getValueSchema(),e));if(n.isBlobSchema())return(this.serdeContext?.base64Decoder??Tn)(t);if(n.isTimestampSchema())switch(Ki(n,this.settings)){case 5:return Tr(t);case 6:return Er(t);case 7:return wr(t);default:return console.warn(`Missing timestamp format, parsing value with Date constructor:`,t),new Date(t)}if(n.isStringSchema()){let e=n.getMergedTraits().mediaType,r=t;if(e)return n.getMergedTraits().httpHeader&&(r=this.base64ToUtf8(r)),(e===`application/json`||e.endsWith(`+json`))&&(r=pr.from(r)),r}return n.isNumericSchema()?Number(t):n.isBigIntegerSchema()?BigInt(t):n.isBigDecimalSchema()?new kr(t,`bigDecimal`):n.isBooleanSchema()?String(t).toLowerCase()===`true`:t}base64ToUtf8(e){return(this.serdeContext?.utf8Encoder??i)((this.serdeContext?.base64Decoder??Tn)(e))}},Ji=e=>(e.logger&&e.logger.constructor?.name!==`NoOpLogger`&&e.requestHandler?.updateHttpClientConfig?.(Symbol.for(`logger`),e.logger),{setHttpHandler(t){e.requestHandler=t},httpHandler(){return e.requestHandler},updateHttpClientConfig(t,n){e.requestHandler?.updateHttpClientConfig(t,n)},httpHandlerConfigs(){return e.requestHandler.httpHandlerConfigs()}}),Yi=e=>({requestHandler:e.httpHandler()}),Xi=`content-length`;function Zi(e){return t=>async n=>{let r=n.request;if(A.isInstance(r)){let{body:t,headers:n}=r;if(t&&Object.keys(n).map(e=>e.toLowerCase()).indexOf(Xi)===-1)try{let n=e(t);n!=null&&(r.headers={...r.headers,[Xi]:String(n)})}catch{}}return t({...n,request:r})}}var Qi={step:`build`,tags:[`SET_CONTENT_LENGTH`,`CONTENT_LENGTH`],name:`contentLengthMiddleware`,override:!0},$i=e=>({applyToStack:t=>{t.add(Zi(e.bodyLengthChecker),Qi)}}),ea=e=>encodeURIComponent(e).replace(/[!'()*]/g,ta),ta=e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`;function na(e){let t=[];for(let n of Object.keys(e).sort()){let r=e[n];if(n=ea(n),Array.isArray(r))for(let e=0,i=r.length;ee?.$retryable!==void 0,la=e=>e.$metadata?.clockSkewCorrected,ua=e=>{let t=new Set([`Failed to fetch`,`NetworkError when attempting to fetch resource`,`The Internet connection appears to be offline`,`Load failed`,`Network request failed`]);return e&&e instanceof TypeError?t.has(e.message):!1},da=e=>e.$metadata?.httpStatusCode===429||ra.includes(e.name)||e.$retryable?.throttling==1,fa=(e,t=0)=>ca(e)||la(e)||e.name===`InvalidSignatureException`&&e.message?.includes(`Signature expired`)||ia.includes(e.name)||oa.includes(e?.code||``)||sa.includes(e?.code||``)||aa.includes(e.$metadata?.httpStatusCode||0)||ua(e)||ma(e)||e.cause!==void 0&&t<=10&&fa(e.cause,t+1),pa=e=>{if(e.$metadata?.httpStatusCode!==void 0){let t=e.$metadata.httpStatusCode;return 500<=t&&t<=599&&!fa(e)}return!1};function ma(e){return e.code===`ERR_HTTP2_STREAM_ERROR`&&e.message.includes(`NGHTTP2_REFUSED_STREAM`)}var ha=2e4,ga=`amz-sdk-invocation-id`,_a=`amz-sdk-request`;function va(e,t){if(Mt.isInstance(e))for(let n in e.headers){if(!r(e.headers,n))continue;let i=n.toLowerCase();if(i===`retry-after`){let r=e.headers[n],i=NaN;if(r.endsWith(`GMT`))try{i=($n(r).getTime()-Date.now())/1e3}catch(e){t?.trace?.(`Failed to parse retry-after header`),t?.trace?.(e)}else r.match(/ GMT, ((\d+)|(\d+\.\d+))$/)?i=Number(r.match(/ GMT, ([\d.]+)$/)?.[1]):r.match(/^((\d+)|(\d+\.\d+))$/)?i=Number(r):Date.parse(r)>=Date.now()&&(i=(Date.parse(r)-Date.now())/1e3);return isNaN(i)?void 0:new Date(Date.now()+i*1e3)}if(i===`x-amz-retry-after`){let r=e.headers[n],i=Number(r);if(isNaN(i)){t?.trace?.(`Failed to parse x-amz-retry-after=${r}`);return}return new Date(Date.now()+i)}}}var ya=e=>e instanceof Error?e:e instanceof Object?Object.assign(Error(),e):Error(typeof e==`string`?e:`AWS SDK error wrapper for ${e}`);function ba(e){return t=>(n,r)=>async i=>{let a=await t.retryStrategy(),o=await t.maxAttempts();if(Sa(a)){a=a;let s=await a.acquireInitialRetryToken((r.partition_id??``)+(r.__retryLongPoll?`:longpoll`:``)),c=Error(),l=0,u=0,{request:d}=i,f=A.isInstance(d);for(f&&(d.headers[ga]=Fi());;)try{f&&(d.headers[_a]=`attempt=${l+1}; max=${o}`);let{response:e,output:t}=await n(i);return a.recordSuccess(s),t.$metadata.attempts=l+1,t.$metadata.totalRetryDelay=u,{response:e,output:t}}catch(n){let i=Ca(n,t.logger);if(c=ya(n),f&&e(d))throw(r.logger instanceof bn?console:r.logger)?.warn(`An error was encountered in a non-retryable streaming request.`),c;try{s=await a.refreshRetryTokenForRetry(s,i)}catch{throw c.$metadata||(c.$metadata={}),c.$metadata.attempts=l+1,c.$metadata.totalRetryDelay=u,c}l=s.getRetryCount();let o=s.getRetryDelay();u+=(s?.$retryLog?.acquisitionDelay??0)+o,o>0&&await xa(o)}}else return a=a,a?.mode&&(r.userAgent=[...r.userAgent||[],[`cfg/retry-mode`,a.mode]]),a.retry(n,i)}}var xa=e=>new Promise(t=>setTimeout(t,e)),Sa=e=>e.acquireInitialRetryToken!==void 0&&e.refreshRetryTokenForRetry!==void 0&&e.recordSuccess!==void 0,Ca=(e,t)=>{let n={error:e,errorType:wa(e)},r=va(e.$response,t);return r&&(n.retryAfterHint=r),n},wa=e=>da(e)?`THROTTLING`:fa(e)?`TRANSIENT`:pa(e)?`SERVER_ERROR`:`CLIENT_ERROR`,Ta={name:`retryMiddleware`,tags:[`RETRY`],step:`finalizeRequest`,priority:`high`,override:!0};function Ea(e){let t=ba(e);return e=>({applyToStack:n=>{n.add(t(e),Ta)}})}var Da=class e{static setTimeoutFn=(e,t)=>setTimeout(e,t);beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(e){this.beta=e?.beta??.7,this.minCapacity=e?.minCapacity??1,this.minFillRate=e?.minFillRate??.5,this.scaleConstant=e?.scaleConstant??.4,this.smooth=e?.smooth??.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(e){let t;this.updateMeasuredRate();let n=e;if(n?.errorType===`THROTTLING`||da(n?.error??e)){let e=this.enabled?Math.min(this.measuredTxRate,this.fillRate):this.measuredTxRate;this.lastMaxRate=e,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),t=this.cubicThrottle(e),this.enableTokenBucket()}else this.calculateTimeWindow(),t=this.cubicSuccess(this.getCurrentTimeInSeconds());let r=Math.min(t,2*this.measuredTxRate);this.updateTokenBucketRate(r)}getCurrentTimeInSeconds(){return Date.now()/1e3}async acquireTokenBucket(t){if(this.enabled){for(this.refillTokenBucket();t>this.availableTokens;){let n=(t-this.availableTokens)/this.fillRate*1e3;await new Promise(t=>e.setTimeoutFn(t,n)),this.refillTokenBucket()}this.availableTokens-=t}}refillTokenBucket(){let e=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=e;return}let t=(e-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+t),this.lastTimestamp=e}calculateTimeWindow(){this.timeWindow=this.getPrecise((this.lastMaxRate*(1-this.beta)/this.scaleConstant)**(1/3))}cubicThrottle(e){return this.getPrecise(e*this.beta)}cubicSuccess(e){return this.getPrecise(this.scaleConstant*(e-this.lastThrottleTime-this.timeWindow)**3+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(e){this.refillTokenBucket(),this.fillRate=Math.max(e,this.minFillRate),this.maxCapacity=Math.max(e,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let e=this.getCurrentTimeInSeconds(),t=Math.floor(e*2)/2;if(this.requestCount++,t>this.lastTxRateBucket){let e=this.requestCount/(t-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(e*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=t}}getPrecise(e){return parseFloat(e.toFixed(8))}},I=class e{static v2026=typeof process<`u`&&{}.SMITHY_NEW_RETRIES_2026===`true`;static delay(){return e.v2026?50:100}static throttlingDelay(){return e.v2026?1e3:500}static cost(){return e.v2026?14:5}static throttlingCost(){return e.v2026?5:10}static modifiedCostType(){return e.v2026?`THROTTLING`:`TRANSIENT`}},Oa=class{x=I.delay();computeNextBackoffDelay(e){let t=Math.random()*Math.min(this.x*2**e,ha);return Math.floor(t)}setDelayBase(e){this.x=e}},ka=class{delay;count;cost;longPoll;$retryLog={acquisitionDelay:0};constructor(e,t,n,r){this.delay=e,this.count=t,this.cost=n,this.longPoll=r}getRetryCount(){return this.count}getRetryDelay(){return Math.min(ha,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}},Aa;(function(e){e.STANDARD=`standard`,e.ADAPTIVE=`adaptive`})(Aa||={});var ja=Aa.STANDARD,Ma={incompatible:1,attempts:2,capacity:3},Na=class{mode=Aa.STANDARD;retryBackoffStrategy;capacity=500;maxAttemptsProvider;baseDelay;constructor(e){typeof e==`number`?this.maxAttemptsProvider=async()=>e:typeof e==`function`?this.maxAttemptsProvider=e:e&&typeof e==`object`&&(this.maxAttemptsProvider=async()=>e.maxAttempts,this.baseDelay=e.baseDelay,this.retryBackoffStrategy=e.backoff),this.maxAttemptsProvider??=async()=>3,this.baseDelay??=I.delay(),this.retryBackoffStrategy??=new Oa}async acquireInitialRetryToken(e){return new ka(I.delay(),0,void 0,I.v2026&&e.includes(`:longpoll`))}async refreshRetryTokenForRetry(e,t){let n=await this.getMaxAttempts(),r=this.retryCode(e,t,n),i=r===0,a=e.isLongPoll?.();if(i||a){let n=t.errorType;this.retryBackoffStrategy.setDelayBase(n===`THROTTLING`?I.throttlingDelay():this.baseDelay);let o=this.retryBackoffStrategy.computeNextBackoffDelay(e.getRetryCount()),s=o;if(t.retryAfterHint instanceof Date&&(s=Math.max(o,Math.min(t.retryAfterHint.getTime()-Date.now(),o+5e3))),i){let t=this.getCapacityCost(n);this.capacity-=t;let r=new ka(0,e.getRetryCount()+1,t,e.isLongPoll?.()??!1);return await new Promise(e=>setTimeout(e,s)),r.$retryLog.acquisitionDelay=s,r}{let e=I.v2026&&r===Ma.capacity&&a?s:0;e>0&&await new Promise(t=>setTimeout(t,e))}}throw Error(`No retry token available`)}recordSuccess(e){this.capacity=Math.min(500,this.capacity+(e.getRetryCost()??1))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch{return console.warn(`Max attempts provider could not resolve. Using default of 3`),3}}retryCode(e,t,n){let r=e.getRetryCount()+1,i=this.isRetryableError(t.errorType)?0:Ma.incompatible,a=r=this.getCapacityCost(t.errorType)?0:Ma.capacity;return i||a||o}getCapacityCost(e){return e===I.modifiedCostType()?I.throttlingCost():I.cost()}isRetryableError(e){return e===`THROTTLING`||e===`TRANSIENT`}},Pa=class{mode=Aa.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(e,t){let{rateLimiter:n}=t??{};this.rateLimiter=n??new Da,this.standardRetryStrategy=t?new Na({maxAttempts:typeof e==`number`?e:3,...t}):new Na(e)}async acquireInitialRetryToken(e){let t=await this.standardRetryStrategy.acquireInitialRetryToken(e);return await this.rateLimiter.getSendToken(),t}async refreshRetryTokenForRetry(e,t){this.rateLimiter.updateClientSendingRate(t);let n=await this.standardRetryStrategy.refreshRetryTokenForRetry(e,t);return await this.rateLimiter.getSendToken(),n}recordSuccess(e){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(e)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}},Fa=(e,t)=>{let{retryStrategy:n,retryMode:r}=e,{defaultMaxAttempts:i=3,defaultBaseDelay:a=I.delay()}=t??{},o=It(e.maxAttempts??i),s=n?Promise.resolve(n):void 0,c=async()=>{let e=await o();return await It(r)()===Aa.ADAPTIVE?new Pa(o,{maxAttempts:e,baseDelay:a}):new Na({maxAttempts:e,baseDelay:a})};return Object.assign(e,{maxAttempts:o,retryStrategy:()=>s??=c()})},Ia=Ea(xt);I.v2026||=typeof process==`object`&&{}.AWS_NEW_RETRIES_2026===`true`;function L(e,t,n){e.__aws_sdk_context?e.__aws_sdk_context.features||(e.__aws_sdk_context.features={}):e.__aws_sdk_context={features:{}},e.__aws_sdk_context.features[t]=n}function La(e){return e}var Ra=e=>t=>async n=>{if(!A.isInstance(n.request))return t(n);let{request:r}=n,{handlerProtocol:i=``}=e.requestHandler.metadata||{};if(i.indexOf(`h2`)>=0&&!r.headers[`:authority`])delete r.headers.host,r.headers[`:authority`]=r.hostname+(r.port?`:`+r.port:``);else if(!r.headers.host){let e=r.hostname;r.port!=null&&(e+=`:${r.port}`),r.headers.host=e}return t(n)},za={name:`hostHeaderMiddleware`,step:`build`,priority:`low`,tags:[`HOST`],override:!0},Ba=e=>({applyToStack:t=>{t.add(Ra(e),za)}}),Va=()=>(e,t)=>async n=>{try{let r=await e(n),{clientName:i,commandName:a,logger:o,dynamoDbDocumentClientOptions:s={}}=t,{overrideInputFilterSensitiveLog:c,overrideOutputFilterSensitiveLog:l}=s,u=c??t.inputFilterSensitiveLog,d=l??t.outputFilterSensitiveLog,{$metadata:f,...p}=r.output;return o?.info?.({clientName:i,commandName:a,input:u(n.input),output:d(p),metadata:f}),r}catch(e){let{clientName:r,commandName:i,logger:a,dynamoDbDocumentClientOptions:o={}}=t,{overrideInputFilterSensitiveLog:s}=o,c=s??t.inputFilterSensitiveLog;throw a?.error?.({clientName:r,commandName:i,input:c(n.input),error:e,metadata:e.$metadata}),e}},Ha={name:`loggerMiddleware`,tags:[`LOGGER`],step:`initialize`,override:!0},Ua=e=>({applyToStack:e=>{e.add(Va(),Ha)}}),Wa=e=>({applyToStack:e=>{}}),Ga=(e,t)=>{if(!t||t.length===0)return e;let n=[];for(let r of t)for(let t of e)t.schemeId.split(`#`)[1]===r&&n.push(t);for(let t of e)n.find(({schemeId:e})=>e===t.schemeId)||n.push(t);return n};function Ka(e){let t=new Map;for(let n of e)t.set(n.schemeId,n);return t}var qa=(e,t)=>(n,r)=>async i=>{let a=Ga(e.httpAuthSchemeProvider(await t.httpAuthSchemeParametersProvider(e,r,i.input)),e.authSchemePreference?await e.authSchemePreference():[]),o=Ka(e.httpAuthSchemes),s=At(r),c=[];for(let n of a){let i=o.get(n.schemeId);if(!i){c.push(`HttpAuthScheme \`${n.schemeId}\` was not enabled for this service.`);continue}let a=i.identityProvider(await t.identityProviderConfigProvider(e));if(!a){c.push(`HttpAuthScheme \`${n.schemeId}\` did not have an IdentityProvider configured.`);continue}let{identityProperties:l={},signingProperties:u={}}=n.propertiesExtractor?.(e,r)||{};n.identityProperties=Object.assign(n.identityProperties||{},l),n.signingProperties=Object.assign(n.signingProperties||{},u),s.selectedHttpAuthScheme={httpAuthOption:n,identity:await a(n.identityProperties),signer:i.signer};break}if(!s.selectedHttpAuthScheme)throw Error(c.join(` -`));return n(i)},Ja={step:`serialize`,tags:[`HTTP_AUTH_SCHEME`],name:`httpAuthSchemeMiddleware`,override:!0,relation:`before`,toMiddleware:`endpointV2Middleware`},Ya=(e,{httpAuthSchemeParametersProvider:t,identityProviderConfigProvider:n})=>({applyToStack:r=>{r.addRelativeTo(qa(e,{httpAuthSchemeParametersProvider:t,identityProviderConfigProvider:n}),Ja)}}),Xa=e=>e=>{throw e},Za=(e,t)=>{},Qa=e=>(e,t)=>async n=>{if(!A.isInstance(n.request))return e(n);let r=At(t).selectedHttpAuthScheme;if(!r)throw Error(`No HttpAuthScheme was selected: unable to sign request`);let{httpAuthOption:{signingProperties:i={}},identity:a,signer:o}=r,s=await e({...n,request:await o.sign(n.request,a,i)}).catch((o.errorHandler||Xa)(i));return(o.successHandler||Za)(s.response,i),s},$a={step:`finalizeRequest`,tags:[`HTTP_SIGNING`],name:`httpSigningMiddleware`,aliases:[`apiKeyMiddleware`,`tokenMiddleware`,`awsAuthMiddleware`],override:!0,relation:`after`,toMiddleware:`retryMiddleware`},eo=e=>({applyToStack:t=>{t.addRelativeTo(Qa(e),$a)}}),to=e=>{if(typeof e==`function`)return e;let t=Promise.resolve(e);return()=>t},no=class{authSchemes=new Map;constructor(e){for(let t in e){if(!r(e,t))continue;let n=e[t];n!==void 0&&this.authSchemes.set(t,n)}}getIdentityProvider(e){return this.authSchemes.get(e)}},ro=(e=>function(t){return io(t)&&t.expiration.getTime()-Date.now()e.expiration!==void 0,ao=(e,t,n)=>{if(e===void 0)return;let r=typeof e==`function`?e:async()=>Promise.resolve(e),i,a,o,s=!1,c=async e=>{a||=r(e);try{i=await a,o=!0,s=!1}finally{a=void 0}return i};return t===void 0?async e=>((!o||e?.forceRefresh)&&(i=await c(e)),i):async e=>((!o||e?.forceRefresh)&&(i=await c(e)),s?i:n(i)?(t(i)&&await c(e),i):(s=!0,i))};function oo(e){return e===void 0||typeof e==`string`&&e.length<=50}function so(e){let t=to(e.userAgentAppId??void 0),{customUserAgent:n}=e;return Object.assign(e,{customUserAgent:typeof n==`string`?[[n]]:n,userAgentAppId:async()=>{let n=await t();if(!oo(n)){let t=e.logger?.constructor?.name===`NoOpLogger`||!e.logger?console:e.logger;typeof n==`string`?n.length>50&&t?.warn(`The provided userAgentAppId exceeds the maximum length of 50 characters.`):t?.warn(`userAgentAppId must be a string or undefined.`)}return n}})}var co={partitions:[{id:`aws`,outputs:{dnsSuffix:`amazonaws.com`,dualStackDnsSuffix:`api.aws`,implicitGlobalRegion:`us-east-1`,name:`aws`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$`,regions:{"af-south-1":{description:`Africa (Cape Town)`},"ap-east-1":{description:`Asia Pacific (Hong Kong)`},"ap-east-2":{description:`Asia Pacific (Taipei)`},"ap-northeast-1":{description:`Asia Pacific (Tokyo)`},"ap-northeast-2":{description:`Asia Pacific (Seoul)`},"ap-northeast-3":{description:`Asia Pacific (Osaka)`},"ap-south-1":{description:`Asia Pacific (Mumbai)`},"ap-south-2":{description:`Asia Pacific (Hyderabad)`},"ap-southeast-1":{description:`Asia Pacific (Singapore)`},"ap-southeast-2":{description:`Asia Pacific (Sydney)`},"ap-southeast-3":{description:`Asia Pacific (Jakarta)`},"ap-southeast-4":{description:`Asia Pacific (Melbourne)`},"ap-southeast-5":{description:`Asia Pacific (Malaysia)`},"ap-southeast-6":{description:`Asia Pacific (New Zealand)`},"ap-southeast-7":{description:`Asia Pacific (Thailand)`},"aws-global":{description:`aws global region`},"ca-central-1":{description:`Canada (Central)`},"ca-west-1":{description:`Canada West (Calgary)`},"eu-central-1":{description:`Europe (Frankfurt)`},"eu-central-2":{description:`Europe (Zurich)`},"eu-north-1":{description:`Europe (Stockholm)`},"eu-south-1":{description:`Europe (Milan)`},"eu-south-2":{description:`Europe (Spain)`},"eu-west-1":{description:`Europe (Ireland)`},"eu-west-2":{description:`Europe (London)`},"eu-west-3":{description:`Europe (Paris)`},"il-central-1":{description:`Israel (Tel Aviv)`},"me-central-1":{description:`Middle East (UAE)`},"me-south-1":{description:`Middle East (Bahrain)`},"mx-central-1":{description:`Mexico (Central)`},"sa-east-1":{description:`South America (Sao Paulo)`},"us-east-1":{description:`US East (N. Virginia)`},"us-east-2":{description:`US East (Ohio)`},"us-west-1":{description:`US West (N. California)`},"us-west-2":{description:`US West (Oregon)`}}},{id:`aws-cn`,outputs:{dnsSuffix:`amazonaws.com.cn`,dualStackDnsSuffix:`api.amazonwebservices.com.cn`,implicitGlobalRegion:`cn-northwest-1`,name:`aws-cn`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^cn\\-\\w+\\-\\d+$`,regions:{"aws-cn-global":{description:`aws-cn global region`},"cn-north-1":{description:`China (Beijing)`},"cn-northwest-1":{description:`China (Ningxia)`}}},{id:`aws-eusc`,outputs:{dnsSuffix:`amazonaws.eu`,dualStackDnsSuffix:`api.amazonwebservices.eu`,implicitGlobalRegion:`eusc-de-east-1`,name:`aws-eusc`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^eusc\\-(de)\\-\\w+\\-\\d+$`,regions:{"eusc-de-east-1":{description:`AWS European Sovereign Cloud (Germany)`}}},{id:`aws-iso`,outputs:{dnsSuffix:`c2s.ic.gov`,dualStackDnsSuffix:`api.aws.ic.gov`,implicitGlobalRegion:`us-iso-east-1`,name:`aws-iso`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-iso\\-\\w+\\-\\d+$`,regions:{"aws-iso-global":{description:`aws-iso global region`},"us-iso-east-1":{description:`US ISO East`},"us-iso-west-1":{description:`US ISO WEST`}}},{id:`aws-iso-b`,outputs:{dnsSuffix:`sc2s.sgov.gov`,dualStackDnsSuffix:`api.aws.scloud`,implicitGlobalRegion:`us-isob-east-1`,name:`aws-iso-b`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-isob\\-\\w+\\-\\d+$`,regions:{"aws-iso-b-global":{description:`aws-iso-b global region`},"us-isob-east-1":{description:`US ISOB East (Ohio)`},"us-isob-west-1":{description:`US ISOB West`}}},{id:`aws-iso-e`,outputs:{dnsSuffix:`cloud.adc-e.uk`,dualStackDnsSuffix:`api.cloud-aws.adc-e.uk`,implicitGlobalRegion:`eu-isoe-west-1`,name:`aws-iso-e`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^eu\\-isoe\\-\\w+\\-\\d+$`,regions:{"aws-iso-e-global":{description:`aws-iso-e global region`},"eu-isoe-west-1":{description:`EU ISOE West`}}},{id:`aws-iso-f`,outputs:{dnsSuffix:`csp.hci.ic.gov`,dualStackDnsSuffix:`api.aws.hci.ic.gov`,implicitGlobalRegion:`us-isof-south-1`,name:`aws-iso-f`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-isof\\-\\w+\\-\\d+$`,regions:{"aws-iso-f-global":{description:`aws-iso-f global region`},"us-isof-east-1":{description:`US ISOF EAST`},"us-isof-south-1":{description:`US ISOF SOUTH`}}},{id:`aws-us-gov`,outputs:{dnsSuffix:`amazonaws.com`,dualStackDnsSuffix:`api.aws`,implicitGlobalRegion:`us-gov-west-1`,name:`aws-us-gov`,supportsDualStack:!0,supportsFIPS:!0},regionRegex:`^us\\-gov\\-\\w+\\-\\d+$`,regions:{"aws-us-gov-global":{description:`aws-us-gov global region`},"us-gov-east-1":{description:`AWS GovCloud (US-East)`},"us-gov-west-1":{description:`AWS GovCloud (US-West)`}}}],version:`1.1`},lo=``,uo=e=>{let{partitions:t}=co;for(let n of t){let{regions:t,outputs:r}=n;for(let[n,i]of Object.entries(t))if(n===e)return{...r,...i}}for(let n of t){let{regionRegex:t,outputs:r}=n;if(new RegExp(t).test(e))return{...r}}let n=t.find(e=>e.id===`aws`);if(!n)throw Error(`Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.`);return{...n.outputs}},fo=()=>lo,po=/\d{12}\.ddb/;async function mo(e,t,n){if(n.request?.headers?.[`smithy-protocol`]===`rpc-v2-cbor`&&L(e,`PROTOCOL_RPC_V2_CBOR`,`M`),typeof t.retryStrategy==`function`){let n=await t.retryStrategy();if(typeof n.mode==`string`)switch(n.mode){case Aa.ADAPTIVE:L(e,`RETRY_MODE_ADAPTIVE`,`F`);break;case Aa.STANDARD:L(e,`RETRY_MODE_STANDARD`,`E`)}}if(typeof t.accountIdEndpointMode==`function`){let n=e.endpointV2;switch(String(n?.url?.hostname).match(po)&&L(e,`ACCOUNT_ID_ENDPOINT`,`O`),await t.accountIdEndpointMode?.()){case`disabled`:L(e,`ACCOUNT_ID_MODE_DISABLED`,`Q`);break;case`preferred`:L(e,`ACCOUNT_ID_MODE_PREFERRED`,`P`);break;case`required`:L(e,`ACCOUNT_ID_MODE_REQUIRED`,`R`)}}let r=e.__smithy_context?.selectedHttpAuthScheme?.identity;if(r?.$source){let t=r;t.accountId&&L(e,`RESOLVED_ACCOUNT_ID`,`T`);for(let[n,r]of Object.entries(t.$source??{}))L(e,n,r)}}var ho=`user-agent`,go=`x-amz-user-agent`,_o=/[^!$%&'*+\-.^_`|~\w]/g,vo=/[^!$%&'*+\-.^_`|~\w#]/g,yo=1024;function bo(e){let t=``;for(let n in e){let r=e[n];if(t.length+r.length+1<=yo){t.length?t+=`,`+r:t+=r;continue}break}return t}var xo=e=>(t,n)=>async r=>{let{request:i}=r;if(!A.isInstance(i))return t(r);let{headers:a}=i,o=n?.userAgent?.map(So)||[],s=(await e.defaultUserAgentProvider()).map(So);await mo(n,e,r);let c=n;s.push(`m/${bo(Object.assign({},n.__smithy_context?.features,c.__aws_sdk_context?.features))}`);let l=e?.customUserAgent?.map(So)||[],u=await e.userAgentAppId();u&&s.push(So([`app`,`${u}`]));let d=fo(),f=(d?[d]:[]).concat([...s,...o,...l]).join(` `),p=[...s.filter(e=>e.startsWith(`aws-sdk-`)),...l].join(` `);return e.runtime===`browser`?a[go]=f:(p&&(a[go]=a[`x-amz-user-agent`]?`${a[ho]} ${p}`:p),a[ho]=f),t({...r,request:i})},So=e=>{let t=e[0].split(`/`).map(e=>e.replace(_o,`-`)).join(`/`),n=e[1]?.replace(vo,`-`),r=t.indexOf(`/`),i=t.substring(0,r),a=t.substring(r+1);return i===`api`&&(a=a.toLowerCase()),[i,a,n].filter(e=>e&&e.length>0).reduce((e,t,n)=>{switch(n){case 0:return t;case 1:return`${e}/${t}`;default:return`${e}#${t}`}},``)},Co={name:`getUserAgentMiddleware`,step:`build`,priority:`low`,tags:[`SET_USER_AGENT`,`USER_AGENT`],override:!0},wo=e=>({applyToStack:t=>{t.add(xo(e),Co)}}),To=({serviceId:e,clientVersion:t})=>async n=>{let r=typeof window<`u`?window.navigator:void 0,i=r?.userAgent??``,a=r?.userAgentData?.platform??Eo.os(i)??`other`,o=r?.userAgentData?.brands??[],s=o[o.length-1],c=s?.brand??Eo.browser(i)??`unknown`,l=s?.version??`unknown`,u=[[`aws-sdk-js`,t],[`ua`,`2.1`],[`os/${a}`,void 0],[`lang/js`],[`md/browser`,`${c}_${l}`]];e&&u.push([`api/${e}`,t]);let d=await n?.userAgentAppId?.();return d&&u.push([`app/${d}`]),u},Eo={os(e){if(/iPhone|iPad|iPod/.test(e))return`iOS`;if(/Macintosh|Mac OS X/.test(e))return`macOS`;if(/Windows NT/.test(e))return`Windows`;if(/Android/.test(e))return`Android`;if(/Linux/.test(e))return`Linux`},browser(e){if(/EdgiOS|EdgA|Edg\//.test(e))return`Microsoft Edge`;if(/Firefox\//.test(e))return`Firefox`;if(/Chrome\//.test(e))return`Chrome`;if(/Safari\//.test(e))return`Safari`}},Do=(e,t=!1)=>{if(t){for(let t of e.split(`.`))if(!Do(t))return!1;return!0}return!(!Pt(e)||e.length<3||e.length>63||e!==e.toLowerCase()||ci(e))},Oo=`:`,ko=`/`,Ao={isVirtualHostableS3Bucket:Do,parseArn:e=>{let t=e.split(Oo);if(t.length<6)return null;let[n,r,i,a,o,...s]=t;return n!==`arn`||r===``||i===``||s.join(Oo)===``?null:{partition:r,service:i,region:a,accountId:o,resourceId:s.map(e=>e.split(ko)).flat()}},partition:uo};$r.aws=Ao;var jo=(e,t,n)=>{let r,i,a,o=!1,s=async()=>{i||=e();try{r=await i,a=!0,o=!1}finally{i=void 0}return r};return t===void 0?async e=>((!a||e?.forceRefresh)&&(r=await s()),r):async e=>((!a||e?.forceRefresh)&&(r=await s()),o?r:n&&!n(r)?(o=!0,r):(t(r)&&await s(),r))},Mo=new Set,No=(e,t=Pt)=>{if(!Mo.has(e)&&!t(e)){if(e===`*`)console.warn(`@smithy/config-resolver WARN - Please use the caller region instead of "*". See "sigv4a" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.`);else throw Error(`Region not accepted: region="${e}" is not a valid hostname component.`)}else Mo.add(e)},Po=e=>typeof e==`string`&&(e.startsWith(`fips-`)||e.endsWith(`-fips`)),Fo=e=>Po(e)?[`fips-aws-global`,`aws-fips`].includes(e)?`us-east-1`:e.replace(/fips-(dkr-|prod-)?|-fips/,``):e,Io=e=>{let{region:t,useFipsEndpoint:n}=e;if(!t)throw Error(`Region is missing`);return Object.assign(e,{region:async()=>{let e=Fo(typeof t==`function`?await t():t);return No(e),e},useFipsEndpoint:async()=>Po(typeof t==`string`?t:await t())?!0:typeof n==`function`?n():Promise.resolve(!!n)})},Lo=[`in-region`,`cross-region`,`mobile`,`standard`,`legacy`],Ro=({defaultsMode:e}={})=>jo(async()=>{let t=typeof e==`function`?await e():e;switch(t?.toLowerCase()){case`auto`:return Promise.resolve(zo()?`mobile`:`standard`);case`mobile`:case`in-region`:case`cross-region`:case`standard`:case`legacy`:return Promise.resolve(t?.toLocaleLowerCase());case void 0:return Promise.resolve(`legacy`);default:throw Error(`Invalid parameter for "defaultsMode", expect ${Lo.join(`, `)}, got ${t}`)}}),zo=()=>{let e=window?.navigator;if(e?.connection){let{effectiveType:t,rtt:n,downlink:r}=e.connection;if(typeof t==`string`&&t!==`4g`||Number(n)>100||Number(r)<10)return!0}return e?.userAgentData?.mobile||typeof e?.maxTouchPoints==`number`&&e?.maxTouchPoints>1},Bo=e=>({setRegion(t){e.region=t},region(){return e.region}}),Vo=e=>({region:e.region()}),Ho=e=>Mt.isInstance(e)?e.headers?.date??e.headers?.Date:void 0,Uo=e=>Mt.isInstance(e)?e.headers?.age??e.headers?.Age:void 0,Wo=e=>new Date(Date.now()+e),Go=(e,t,n,r)=>{if(r!==void 0)return t;let i=Date.parse(e),a=Date.now();return n!==void 0&&a-n>9e5?t:n===void 0?i-a:i-(n+a)/2},Ko=(e,t)=>{if(!t)throw Error(`Property \`${e}\` is not resolved for AWS SDK SigV4Auth`);return t},qo=async e=>{let t=Ko(`context`,e.context),n=Ko(`config`,e.config),r=t.endpointV2?.properties?.authSchemes?.[0];return{config:n,signer:await Ko(`signer`,n.signer)(r),signingRegion:e?.signingRegion,signingRegionSet:e?.signingRegionSet,signingName:e?.signingName}},Jo=class{async sign(e,t,n){if(!A.isInstance(e))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let r=await qo(n),{config:i,signer:a}=r,{signingRegion:o,signingName:s}=r,c=n.context;if(c?.authSchemes?.length??!1){let[e,t]=c.authSchemes;e?.name===`sigv4a`&&t?.name===`sigv4`&&(o=t?.signingRegion??o,s=t?.signingName??s)}let l=await i.disableClockSkewCorrection?.()===!0;return n._disableClockSkewCorrection=l,l||(n._preRequestSystemClockOffset=i.systemClockOffset,n._requestSentAt=Date.now()),await a.sign(e,{signingDate:l?new Date:Wo(i.systemClockOffset),signingRegion:o,signingService:s})}errorHandler(e){return t=>{let n=t;if(!e._disableClockSkewCorrection){let t=n.ServerTime??Ho(n.$response);if(t){let r=Ko(`config`,e.config),i=e._preRequestSystemClockOffset,a=e._requestSentAt,o=Uo(n.$response),s=Go(t,r.systemClockOffset,a,o);r.systemClockOffset=s,Math.abs(s)>=24e4&&(s!==i||i!==void 0&&i!==s)&&n.$metadata&&(n.$metadata.clockSkewCorrected=!0)}}throw t}}successHandler(e,t){if(t._disableClockSkewCorrection)return;let n=Ho(e);if(n){let r=Ko(`config`,t.config),i=t._requestSentAt,a=Uo(e);r.systemClockOffset=Go(n,r.systemClockOffset,i,a)}}},Yo=class extends Jo{async sign(e,t,n){if(!A.isInstance(e))throw Error("The request is not an instance of `HttpRequest` and cannot be signed");let{config:r,signer:i,signingRegion:a,signingRegionSet:o,signingName:s}=await qo(n),c=(await r.sigv4aSigningRegionSet?.()??o??[a]).join(`,`),l=await r.disableClockSkewCorrection?.()===!0;return n._disableClockSkewCorrection=l,l||(n._preRequestSystemClockOffset=r.systemClockOffset,n._requestSentAt=Date.now()),await i.sign(e,{signingDate:l?new Date:Wo(r.systemClockOffset),signingRegion:c,signingService:s})}},Xo=e=>(e.sigv4aSigningRegionSet=to(e.sigv4aSigningRegionSet),e),Zo=class{format(e){let n=[];for(let i in e){if(!r(e,i))continue;let a=t(i);n.push(Uint8Array.from([a.byteLength]),a,this.formatHeaderValue(e[i]))}let i=new Uint8Array(n.reduce((e,t)=>e+t.byteLength,0)),a=0;for(let e of n)i.set(e,a),a+=e.byteLength;return i}formatHeaderValue(e){switch(e.type){case`boolean`:return Uint8Array.from([+!e.value]);case`byte`:return Uint8Array.from([2,e.value]);case`short`:let n=new DataView(new ArrayBuffer(3));return n.setUint8(0,3),n.setInt16(1,e.value,!1),new Uint8Array(n.buffer);case`integer`:let r=new DataView(new ArrayBuffer(5));return r.setUint8(0,4),r.setInt32(1,e.value,!1),new Uint8Array(r.buffer);case`long`:let i=new Uint8Array(9);return i[0]=5,i.set(e.value.bytes,1),i;case`binary`:let o=new DataView(new ArrayBuffer(3+e.value.byteLength));o.setUint8(0,6),o.setUint16(1,e.value.byteLength,!1);let s=new Uint8Array(o.buffer);return s.set(e.value,3),s;case`string`:let c=t(e.value),l=new DataView(new ArrayBuffer(3+c.byteLength));l.setUint8(0,7),l.setUint16(1,c.byteLength,!1);let u=new Uint8Array(l.buffer);return u.set(c,3),u;case`timestamp`:let d=new Uint8Array(9);return d[0]=8,d.set(es.fromNumber(e.value.valueOf()).bytes,1),d;case`uuid`:if(!$o.test(e.value))throw Error(`Invalid UUID received: ${e.value}`);let f=new Uint8Array(17);return f[0]=9,f.set(a(e.value.replace(/-/g,``)),1),f}}},Qo;(function(e){e[e.boolTrue=0]=`boolTrue`,e[e.boolFalse=1]=`boolFalse`,e[e.byte=2]=`byte`,e[e.short=3]=`short`,e[e.integer=4]=`integer`,e[e.long=5]=`long`,e[e.byteArray=6]=`byteArray`,e[e.string=7]=`string`,e[e.timestamp=8]=`timestamp`,e[e.uuid=9]=`uuid`})(Qo||={});var $o=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,es=class e{bytes;constructor(e){if(this.bytes=e,e.byteLength!==8)throw Error(`Int64 buffers must be exactly 8 bytes`)}static fromNumber(t){if(t>0x8000000000000000||t<-0x8000000000000000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let n=new Uint8Array(8);for(let e=7,r=Math.abs(Math.round(t));e>-1&&r>0;e--,r/=256)n[e]=r;return t<0&&ts(n),new e(n)}valueOf(){let e=this.bytes.slice(0),t=e[0]&128;return t&&ts(e),parseInt(n(e),16)*(t?-1:1)}toString(){return String(this.valueOf())}};function ts(e){for(let t=0;t<8;t++)e[t]^=255;for(let t=7;t>-1&&(e[t]++,e[t]===0);t--);}var ns=`X-Amz-Algorithm`,rs=`X-Amz-Credential`,is=`X-Amz-Date`,as=`X-Amz-SignedHeaders`,os=`X-Amz-Expires`,ss=`X-Amz-Signature`,cs=`X-Amz-Security-Token`,ls=`authorization`,us=is.toLowerCase(),ds=[ls,us,`date`];ss.toLowerCase();var fs=`x-amz-content-sha256`,ps=cs.toLowerCase(),ms={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},hs=/^proxy-/,gs=/^sec-/,_s=`AWS4-HMAC-SHA256`,vs=`AWS4-HMAC-SHA256-PAYLOAD`,ys=`UNSIGNED-PAYLOAD`,bs=`aws4_request`,xs=({query:e={}})=>{let t=[],n={};for(let i in e){if(!r(e,i)||i.toLowerCase()===`x-amz-signature`)continue;let a=ea(i);t.push(a);let o=e[i];typeof o==`string`?n[a]=`${a}=${ea(o)}`:Array.isArray(o)&&(n[a]=o.slice(0).reduce((e,t)=>e.concat([`${a}=${ea(t)}`]),[]).sort().join(`&`))}return t.sort().map(e=>n[e]).filter(e=>e).join(`&`)},Ss=e=>Cs(e).toISOString().replace(/\.\d{3}Z$/,`Z`),Cs=e=>typeof e==`number`?new Date(e*1e3):typeof e==`string`?Number(e)?new Date(Number(e)*1e3):new Date(e):e,ws=class{service;regionProvider;credentialProvider;sha256;uriEscapePath;applyChecksum;constructor({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a=!0}){this.service=r,this.sha256=i,this.uriEscapePath=a,this.applyChecksum=typeof e!=`boolean`||e,this.regionProvider=It(n),this.credentialProvider=It(t)}createCanonicalRequest(e,t,n){let r=Object.keys(t).sort();return`${e.method} -${this.getCanonicalPath(e)} -${xs(e)} -${r.map(e=>`${e}:${t[e]}`).join(` -`)} - -${r.join(`;`)} -${n}`}async createStringToSign(e,t,r,i){let a=new this.sha256;a.update(P(r));let o=await a.digest();return`${i} -${e} -${t} -${n(o)}`}getCanonicalPath({path:e}){if(this.uriEscapePath){let t=[];for(let n of e.split(`/`))n?.length!==0&&n!==`.`&&(n===`..`?t.pop():t.push(n));return ea(`${e?.startsWith(`/`)?`/`:``}${t.join(`/`)}${t.length>0&&e?.endsWith(`/`)?`/`:``}`).replace(/%2F/g,`/`)}return e}validateResolvedCredentials(e){if(typeof e!=`object`||typeof e.accessKeyId!=`string`||typeof e.secretAccessKey!=`string`)throw Error(`Resolved credential object is not valid`)}formatDate(e){let t=Ss(e).replace(/[-:]/g,``);return{longDate:t,shortDate:t.slice(0,8)}}getCanonicalHeaderList(e){return Object.keys(e).sort().join(`;`)}},Ts={},Es=[],Ds=(e,t,n)=>`${e}/${t}/${n}/${bs}`,Os=async(e,t,r,i,a)=>{let o=await ks(e,t.secretAccessKey,t.accessKeyId),s=`${r}:${i}:${a}:${n(o)}:${t.sessionToken}`;if(s in Ts)return Ts[s];for(Es.push(s);Es.length>50;)delete Ts[Es.shift()];let c=`AWS4${t.secretAccessKey}`;for(let t of[r,i,a,bs])c=await ks(e,c,t);return Ts[s]=c},ks=(e,t,n)=>{let r=new e(t);return r.update(P(n)),r.digest()},As=({headers:e},t,n)=>{let r={};for(let i of Object.keys(e).sort()){if(e[i]==null)continue;let a=i.toLowerCase();(a in ms||t?.has(a)||hs.test(a)||gs.test(a))&&(!n||n&&!n.has(a))||(r[a]=e[i].trim().replace(/\s+/g,` `))}return r},js=async({headers:e,body:t},i)=>{for(let t in e)if(r(e,t)&&t.toLowerCase()===`x-amz-content-sha256`)return e[t];if(t==null)return`e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`;if(typeof t==`string`||ArrayBuffer.isView(t)||Nr(t)){let e=new i;return e.update(P(t)),n(await e.digest())}return ys},Ms=(e,t)=>{e=e.toLowerCase();for(let n in t)if(r(t,n)&&e===n.toLowerCase())return!0;return!1},Ns=(e,t={})=>{let{headers:n,query:i={}}=A.clone(e);for(let e in n){if(!r(n,e))continue;let a=e.toLowerCase();(a.slice(0,6)===`x-amz-`&&!t.unhoistableHeaders?.has(a)||t.hoistableHeaders?.has(a))&&(i[e]=n[e],delete n[e])}return{...e,headers:n,query:i}},Ps=e=>{e=A.clone(e);for(let t in e.headers)r(e.headers,t)&&ds.indexOf(t.toLowerCase())>-1&&delete e.headers[t];return e},Fs=class extends ws{headerFormatter=new Zo;constructor({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a=!0}){super({applyChecksum:e,credentials:t,region:n,service:r,sha256:i,uriEscapePath:a})}async presign(e,t={}){let{signingDate:n=new Date,expiresIn:r=3600,unsignableHeaders:i,unhoistableHeaders:a,signableHeaders:o,hoistableHeaders:s,signingRegion:c,signingService:l}=t,u=await this.credentialProvider();this.validateResolvedCredentials(u);let d=c??await this.regionProvider(),{longDate:f,shortDate:p}=this.formatDate(n);if(r>604800)return Promise.reject(`Signature version 4 presigned URLs must have an expiration date less than one week in the future`);let m=Ds(p,d,l??this.service),h=Ns(Ps(e),{unhoistableHeaders:a,hoistableHeaders:s});u.sessionToken&&(h.query[cs]=u.sessionToken),h.query[ns]=_s,h.query[rs]=`${u.accessKeyId}/${m}`,h.query[is]=f,h.query[os]=r.toString(10);let g=As(h,i,o);return h.query[as]=this.getCanonicalHeaderList(g),h.query[ss]=await this.getSignature(f,m,this.getSigningKey(u,d,p,l),this.createCanonicalRequest(h,g,await js(e,this.sha256))),h}async sign(e,t){return typeof e==`string`?this.signString(e,t):e.headers&&e.payload?this.signEvent(e,t):e.message?this.signMessage(e,t):this.signRequest(e,t)}async signEvent({headers:e,payload:t},{signingDate:r=new Date,priorSignature:i,signingRegion:a,signingService:o,eventStreamCredentials:s}){let c=a??await this.regionProvider(),{shortDate:l,longDate:u}=this.formatDate(r),d=Ds(l,c,o??this.service),f=await js({headers:{},body:t},this.sha256),p=new this.sha256;p.update(e);let m=[vs,u,d,i,n(await p.digest()),f].join(` -`);return this.signString(m,{signingDate:r,signingRegion:c,signingService:o,eventStreamCredentials:s})}async signMessage(e,{signingDate:t=new Date,signingRegion:n,signingService:r,eventStreamCredentials:i}){return this.signEvent({headers:this.headerFormatter.format(e.message.headers),payload:e.message.body},{signingDate:t,signingRegion:n,signingService:r,priorSignature:e.priorSignature,eventStreamCredentials:i}).then(t=>({message:e.message,signature:t}))}async signString(e,{signingDate:t=new Date,signingRegion:r,signingService:i,eventStreamCredentials:a}={}){let o=a??await this.credentialProvider();this.validateResolvedCredentials(o);let s=r??await this.regionProvider(),{shortDate:c}=this.formatDate(t),l=new this.sha256(await this.getSigningKey(o,s,c,i));return l.update(P(e)),n(await l.digest())}async signRequest(e,{signingDate:t=new Date,signableHeaders:n,unsignableHeaders:r,signingRegion:i,signingService:a}={}){let o=await this.credentialProvider();this.validateResolvedCredentials(o);let s=i??await this.regionProvider(),c=Ps(e),{longDate:l,shortDate:u}=this.formatDate(t),d=Ds(u,s,a??this.service);c.headers[us]=l,o.sessionToken&&(c.headers[ps]=o.sessionToken);let f=await js(c,this.sha256);!Ms(`x-amz-content-sha256`,c.headers)&&this.applyChecksum&&(c.headers[fs]=f);let p=As(c,r,n),m=await this.getSignature(l,d,this.getSigningKey(o,s,u,a),this.createCanonicalRequest(c,p,f));return c.headers[ls]=`${_s} Credential=${o.accessKeyId}/${d}, SignedHeaders=${this.getCanonicalHeaderList(p)}, Signature=${m}`,c}async getSignature(e,t,r,i){let a=await this.createStringToSign(e,t,i,_s),o=new this.sha256(await r);return o.update(P(a)),n(await o.digest())}getSigningKey(e,t,n,r){return Os(this.sha256,e,n,t,r||this.service)}},Is={SignatureV4a:null},Ls=e=>t=>{let n=t.credentials,r=!!t.credentials,i;Object.defineProperty(t,"credentials",{set(e){e&&e!==n&&e!==i&&(r=!0),n=e;let a=zs(t,Rs(t,{credentials:n,credentialDefaultProvider:t.credentialDefaultProvider}));if(r&&!a.attributed){let e=typeof n==`object`&&!!n;i=async t=>{let n=await a(t);return e&&(!n.$source||Object.keys(n.$source).length===0)?bt(n,`CREDENTIALS_CODE`,`e`):n},i.memoized=a.memoized,i.configBound=a.configBound,i.attributed=!0}else i=a},get(){return i},enumerable:!0,configurable:!0}),t.credentials=n;let{signingEscapePath:a=!0,systemClockOffset:o=t.systemClockOffset||0,sha256:s}=t,c;return c=t.signer?to(t.signer):t.regionInfoProvider?()=>to(t.region)().then(async e=>[await t.regionInfoProvider(e,{useFipsEndpoint:await t.useFipsEndpoint(),useDualstackEndpoint:await t.useDualstackEndpoint()})||{},e]).then(([e,n])=>{let{signingRegion:r,signingService:i}=e;t.signingRegion=t.signingRegion||r||n,t.signingName=t.signingName||i||t.serviceId;let o={...t,credentials:t.credentials,region:t.signingRegion,service:t.signingName,sha256:s,uriEscapePath:a};return new(t.signerConstructor||Fs)(o)}):async e=>{e=Object.assign({},{name:`sigv4`,signingName:t.signingName||t.defaultSigningName,signingRegion:await to(t.region)(),properties:{}},e);let n=e.signingRegion,r=e.signingName;t.signingRegion=t.signingRegion||n,t.signingName=t.signingName||r||t.serviceId;let i={...t,credentials:t.credentials,region:t.signingRegion,service:t.signingName,sha256:s,uriEscapePath:a};return new(t.signerConstructor||Fs)(i)},Object.assign(t,{systemClockOffset:o,signingEscapePath:a,signer:c,disableClockSkewCorrection:to(t.disableClockSkewCorrection??e)})};function Rs(e,{credentials:t,credentialDefaultProvider:n}){let r;return r=t?t?.memoized?t:ao(t,ro,io):n?to(n(Object.assign({},e,{parentClientConfig:e}))):async()=>{throw Error("@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.")},r.memoized=!0,r}function zs(e,t){if(t.configBound)return t;let n=async n=>t({...n,callerClientConfig:e});return n.memoized=t.memoized,n.configBound=!0,n}var Bs=Ls(!1),Vs={CrtSignerV4:null},Hs=`X-Amz-S3session-Token`,Us=Hs.toLowerCase(),Ws=class extends Fs{async signWithCredentials(e,t,n){let r=Gs(t);e.headers[Us]=t.sessionToken;let i=this;return Ks(i,r),i.signRequest(e,n??{})}async presignWithCredentials(e,t,n){let r=Gs(t);return delete e.headers[Us],e.headers[Hs]=t.sessionToken,e.query=e.query??{},e.query[Hs]=t.sessionToken,Ks(this,r),this.presign(e,n)}};function Gs(e){return{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,expiration:e.expiration}}function Ks(e,t){let n=e.credentialProvider;e.credentialProvider=()=>(e.credentialProvider=n,Promise.resolve(t))}var qs=class{sigv4aSigner;sigv4Signer;signerOptions;static sigv4aDependency(){return typeof Vs.CrtSignerV4==`function`?`crt`:typeof Is.SignatureV4a==`function`?`js`:`none`}constructor(e){this.sigv4Signer=new Ws(e),this.signerOptions=e}async sign(e,t={}){return t.signingRegion===`*`?this.getSigv4aSigner().sign(e,t):this.sigv4Signer.sign(e,t)}async signWithCredentials(e,t,n={}){if(n.signingRegion===`*`){let r=this.getSigv4aSigner(),i=Vs.CrtSignerV4;if(i&&r instanceof i)return r.signWithCredentials(e,t,n);throw Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.signWithCredentials(e,t,n)}async presign(e,t={}){if(t.signingRegion===`*`){let n=this.getSigv4aSigner(),r=Vs.CrtSignerV4;if(r&&n instanceof r)return n.presign(e,t);throw Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.presign(e,t)}async presignWithCredentials(e,t,n={}){if(n.signingRegion===`*`)throw Error(`Method presignWithCredentials is not supported for [signingRegion=*].`);return this.sigv4Signer.presignWithCredentials(e,t,n)}getSigv4aSigner(){if(!this.sigv4aSigner){let e=Vs.CrtSignerV4,t=Is.SignatureV4a;if(this.signerOptions.runtime===`node`){if(!e&&!t)throw Error(`Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);if(e&&typeof e==`function`)this.sigv4aSigner=new e({...this.signerOptions,signingAlgorithm:1});else if(t&&typeof t==`function`)this.sigv4aSigner=new t({...this.signerOptions});else throw Error(`Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}else{if(!t||typeof t!=`function`)throw Error(`JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a`);this.sigv4aSigner=new t({...this.signerOptions})}}return this.sigv4aSigner}};function Js(e,t){return new Request(e,t)}function Ys(e=0){return new Promise((t,n)=>{e&&setTimeout(()=>{let t=Error(`Request did not complete within ${e} ms`);t.name=`TimeoutError`,n(t)},e)})}var Xs={supported:void 0},Zs=class e{config;configProvider;static create(t){return typeof t?.handle==`function`?t:new e(t)}constructor(e){typeof e==`function`?this.configProvider=e().then(e=>e||{}):(this.config=e??{},this.configProvider=Promise.resolve(this.config)),Xs.supported===void 0&&(Xs.supported=typeof Request<`u`&&`keepalive`in Js(`https://[::1]`))}destroy(){}async handle(e,{abortSignal:t,requestTimeout:n}={}){this.config||=await this.configProvider;let r=n??this.config.requestTimeout,i=this.config.keepAlive===!0,a=this.config.credentials,o=this.config.customFetch??fetch;if(t?.aborted){let e=Qs(t);return Promise.reject(e)}let s=e.path,c=na(e.query||{});c&&(s+=`?${c}`),e.fragment&&(s+=`#${e.fragment}`);let l=``;(e.username!=null||e.password!=null)&&(l=`${e.username??``}:${e.password??``}@`);let{port:u,method:d}=e,f=`${e.protocol}//${l}${e.hostname}${u?`:${u}`:``}${s}`,p=d===`GET`||d===`HEAD`?void 0:e.body,m={body:p,headers:new Headers(e.headers),method:d,credentials:a};this.config?.cache&&(m.cache=this.config.cache),p&&(m.duplex=`half`),typeof AbortController<`u`&&(m.signal=t),Xs.supported&&(m.keepalive=i),typeof this.config.requestInit==`function`&&Object.assign(m,this.config.requestInit(e));let h=()=>{},g=[o(Js(f,m)).then(e=>{let t=e.headers,n={};for(let e of t.entries())n[e[0]]=e[1];return e.body==null?e.blob().then(t=>({response:new Mt({headers:n,reason:e.statusText,statusCode:e.status,body:t})})):{response:new Mt({headers:n,reason:e.statusText,statusCode:e.status,body:e.body})}}),Ys(r)];return t&&g.push(new Promise((e,n)=>{let r=()=>{n(Qs(t))};if(typeof t.addEventListener==`function`){let e=t;e.addEventListener(`abort`,r,{once:!0}),h=()=>e.removeEventListener(`abort`,r)}else t.onabort=r})),Promise.race(g).finally(h)}updateHttpClientConfig(e,t){this.config=void 0,this.configProvider=this.configProvider.then(n=>(n[e]=t,n))}httpHandlerConfigs(){return this.config??{}}};function Qs(e){let t=e&&typeof e==`object`&&`reason`in e?e.reason:void 0;if(t){if(t instanceof Error){let e=Error(`Request aborted`);return e.name=`AbortError`,e.cause=t,e}let e=Error(String(t));return e.name=`AbortError`,e}let n=Error(`Request aborted`);return n.name=`AbortError`,n}var $s=class{queryCompat;errorRegistry;constructor(e=!1){this.queryCompat=e}resolveRestContentType(e,t){let n=t.getMemberSchemas(),r=Object.values(n).find(e=>!!e.getMergedTraits().httpPayload);if(r)return r.getMergedTraits().mediaType||(r.isStringSchema()?`text/plain`:r.isBlobSchema()?`application/octet-stream`:e);if(!t.isUnitSchema()&&Object.values(n).find(e=>{let{httpQuery:t,httpQueryParams:n,httpHeader:r,httpLabel:i,httpPrefixHeaders:a}=e.getMergedTraits();return!t&&!n&&!r&&!i&&a===void 0}))return e}async getErrorSchemaOrThrowBaseException(e,t,n,r,i,a){let o=e;e.includes(`#`)&&([,o]=e.split(`#`));let s={$metadata:i,$fault:n.statusCode<500?`client`:`server`};if(!this.errorRegistry)throw Error(`@aws-sdk/core/protocols - error handler not initialized.`);try{return{errorSchema:a?.(this.errorRegistry,o)??this.errorRegistry.getSchema(e),errorMetadata:s}}catch{r.message=r.message??r.Message??`UnknownError`;let e=this.errorRegistry,t=e.getBaseException();if(t){let n=e.getErrorCtor(t)??Error;throw this.decorateServiceException(Object.assign(new n({name:o}),s),r)}let n=r,i=n?.message??n?.Message??n?.Error?.Message??n?.Error?.message;throw this.decorateServiceException(Object.assign(Error(i),{name:o},s),r)}}compose(t,n,r){let i=r;n.includes(`#`)&&([i]=n.split(`#`));let a=e.for(i),o=e.for(`smithy.ts.sdk.synthetic.`+r);t.copyFrom(a),t.copyFrom(o),this.errorRegistry=t}decorateServiceException(e,t={}){if(this.queryCompat){let n=e.Message??t.Message,r=un(e,t);n&&(r.message=n);let i=r.Error??{};i.Type=r.Error?.Type,i.Code=r.Error?.Code,i.Message=r.Error?.message??r.Error?.Message??n,r.Error=i;let a=r.$metadata.requestId;return a&&(r.RequestId=a),r}return un(e,t)}setQueryCompatError(e,t){let n=t.headers?.[`x-amzn-query-error`];if(e!==void 0&&n!=null){let[t,r]=n.split(`;`),i=Object.keys(e),a={Code:t,Type:r};e.Code=t,e.Type=r;for(let t=0;tj.of(e).getMergedTraits().awsQueryError?.[0]===t)}}},ec=class{serdeContext;setSerdeContext(e){this.serdeContext=e}},tc=class{from;to;keys;constructor(e,t){this.from=e,this.to=t;let n=Object.keys(this.from),r=new Set(n);r.delete(`__type`),this.keys=r}mark(e){this.keys.delete(e)}hasUnknown(){return this.keys.size===1&&Object.keys(this.to).length===0}writeUnknown(){if(this.hasUnknown()){let e=this.keys.values().next().value,t=this.from[e];this.to.$unknown=[e,t]}}};function nc(e){Object.defineProperty(e,"__proto__",{value:void 0,writable:!0,enumerable:!0,configurable:!0})}var rc;function ic(e){rc||=new DOMParser;let t=rc.parseFromString(e,`application/xml`);if(t.getElementsByTagName(`parsererror`).length>0)throw Error(`DOMParser XML parsing error.`);let n=e=>{if(e.nodeType===Node.TEXT_NODE&&e.textContent?.trim())return e.textContent;if(e.nodeType===Node.ELEMENT_NODE){let t=e;if(t.attributes.length===0&&t.childNodes.length===0)return``;let r={},i=Array.from(t.attributes);for(let e of i)r[`${e.name}`]=e.value;let a=Array.from(t.childNodes);for(let e of a){let o=n(e);if(o!=null){let t=e.nodeName;if(a.length===1&&i.length===0&&t===`#text`)return o;t in r?Array.isArray(r[t])?r[t].push(o):r[t]=[r[t],o]:r[t]=o}else if(a.length===1&&i.length===0)return t.textContent}return r}return null};return{[t.documentElement.nodeName]:n(t.documentElement)}}var ac=class extends ec{settings;stringDeserializer;constructor(e){super(),this.settings=e,this.stringDeserializer=new qi(e)}setSerdeContext(e){this.serdeContext=e,this.stringDeserializer.setSerdeContext(e)}read(e,t,n){let r=j.of(e),a=r.getMemberSchemas();if(r.isStructSchema()&&r.isMemberSchema()&&Object.values(a).find(e=>!!e.getMemberTraits().eventPayload)){let e={},n=Object.keys(a)[0];return e[n]=a[n].isBlobSchema()?t:this.read(a[n],t),e}let o=(this.serdeContext?.utf8Encoder??i)(t),s=this.parseXml(o);return this.readSchema(e,n?s[n]:s)}readSchema(e,t){let n=j.of(e);if(n.isUnitSchema())return;let r=n.getMergedTraits();if(n.isListSchema()&&!Array.isArray(t))return this.readSchema(n,[t]);if(t==null)return t;if(typeof t==`object`){let e=!!r.xmlFlattened;if(n.isListSchema()){let r=n.getValueSchema(),i=[],a=r.getMergedTraits().xmlName??`member`,o=e?t:(t[0]??t)[a];if(o==null)return i;let s=Array.isArray(o)?o:[o];for(let e of s)i.push(this.readSchema(r,e));return i}let i={};if(n.isMapSchema()){let r=n.getKeySchema(),a=n.getValueSchema(),o;o=e?Array.isArray(t)?t:[t]:Array.isArray(t.entry)?t.entry:[t.entry];let s=r.getMergedTraits().xmlName??`key`,c=a.getMergedTraits().xmlName??`value`;for(let e of o){let t=e[s],n=e[c];t===`__proto__`&&nc(i),i[t]=this.readSchema(a,n)}return i}if(n.isStructSchema()){let e=n.isUnionSchema(),r;e&&(r=new tc(t,i));for(let[a,o]of n.structIterator()){let n=o.getMergedTraits(),s=n.httpPayload?n.xmlName??o.getName():o.getMemberTraits().xmlName??a;e&&r.mark(s),t[s]!=null&&(i[a]=this.readSchema(o,t[s]))}return e&&r.writeUnknown(),i}if(n.isDocumentSchema())return t;throw Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${n.getName(!0)}`)}return n.isListSchema()?[]:n.isMapSchema()||n.isStructSchema()?{}:this.stringDeserializer.read(n,t)}parseXml(e){if(e.length){let t;try{t=ic(e)}catch(t){throw t&&typeof t==`object`&&Object.defineProperty(t,"$responseBodyText",{value:e}),t}let n=`#text`,r=Object.keys(t)[0],i=t[r];return i[n]&&(i[r]=i[n],delete i[n]),yn(i)}return{}}},oc=class extends ec{settings;buffer;constructor(e){super(),this.settings=e}write(e,t,n=``){this.buffer===void 0&&(this.buffer=``);let r=j.of(e);if(n&&!n.endsWith(`.`)&&(n+=`.`),r.isBlobSchema())(typeof t==`string`||t instanceof Uint8Array)&&(this.writeKey(n),this.writeValue((this.serdeContext?.base64Encoder??En)(t)));else if(r.isBooleanSchema()||r.isNumericSchema()||r.isStringSchema())t==null?r.isIdempotencyToken()&&(this.writeKey(n),this.writeValue(Ii())):(this.writeKey(n),this.writeValue(String(t)));else if(r.isBigIntegerSchema())t!=null&&(this.writeKey(n),this.writeValue(String(t)));else if(r.isBigDecimalSchema())t!=null&&(this.writeKey(n),this.writeValue(t instanceof kr?t.string:String(t)));else if(r.isTimestampSchema()){if(t instanceof Date)switch(this.writeKey(n),Ki(r,this.settings)){case 5:this.writeValue(t.toISOString().replace(`.000Z`,`Z`));break;case 6:this.writeValue(qn(t));break;case 7:this.writeValue(String(t.getTime()/1e3))}}else if(r.isDocumentSchema())Array.isArray(t)?this.write(79,t,n):t instanceof Date?this.write(4,t,n):t instanceof Uint8Array?this.write(21,t,n):t&&typeof t==`object`?this.write(143,t,n):(this.writeKey(n),this.writeValue(String(t)));else if(r.isListSchema()){if(Array.isArray(t)){if(t.length===0)this.settings.serializeEmptyLists&&(this.writeKey(n),this.writeValue(``));else{let e=r.getValueSchema(),i=this.settings.flattenLists||r.getMergedTraits().xmlFlattened,a=1;for(let r of t){if(r==null)continue;let t=e.getMergedTraits(),o=this.getKey(`member`,t.xmlName,t.ec2QueryName),s=i?`${n}${a}`:`${n}${o}.${a}`;this.write(e,r,s),++a}}}}else if(r.isMapSchema()){if(t&&typeof t==`object`){let e=r.getKeySchema(),i=r.getValueSchema(),a=r.getMergedTraits().xmlFlattened,o=1;for(let r in t){let s=t[r];if(s==null)continue;let c=e.getMergedTraits(),l=this.getKey(`key`,c.xmlName,c.ec2QueryName),u=a?`${n}${o}.${l}`:`${n}entry.${o}.${l}`,d=i.getMergedTraits(),f=this.getKey(`value`,d.xmlName,d.ec2QueryName),p=a?`${n}${o}.${f}`:`${n}entry.${o}.${f}`;this.write(e,r,u),this.write(i,s,p),++o}}}else if(r.isStructSchema()){if(t&&typeof t==`object`){let e=!1;for(let[i,a]of r.structIterator()){if(t[i]==null&&!a.isIdempotencyToken())continue;let r=a.getMergedTraits(),o=this.getKey(i,r.xmlName,r.ec2QueryName,`struct`),s=`${n}${o}`;this.write(a,t[i],s),e=!0}if(!e&&r.isUnionSchema()){let{$unknown:e}=t;if(Array.isArray(e)){let[t,r]=e,i=`${n}${t}`;this.write(15,r,i)}}}}else if(!r.isUnitSchema())throw Error(`@aws-sdk/core/protocols - QuerySerializer unrecognized schema type ${r.getName(!0)}`)}flush(){if(this.buffer===void 0)throw Error(`@aws-sdk/core/protocols - QuerySerializer cannot flush with nothing written to buffer.`);let e=this.buffer;return delete this.buffer,e}getKey(e,t,n,r){let{ec2:i,capitalizeKeys:a}=this.settings;if(i&&n)return n;let o=t??e;return a&&r===`struct`?o[0].toUpperCase()+o.slice(1):o}writeKey(e){e.endsWith(`.`)&&(e=e.slice(0,e.length-1)),this.buffer+=`&${Ri(e)}=`}writeValue(e){this.buffer+=Ri(e)}},sc=class extends Gi{options;serializer;deserializer;mixin=new $s;constructor(e){super({defaultNamespace:e.defaultNamespace,errorTypeRegistries:e.errorTypeRegistries}),this.options=e;let t={timestampFormat:{useTrait:!0,default:5},httpBindings:!1,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace,serializeEmptyLists:!0};this.serializer=new oc(t),this.deserializer=new ac(t)}getShapeId(){return`aws.protocols#awsQuery`}setSerdeContext(e){this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e)}getPayloadCodec(){throw Error(`AWSQuery protocol has no payload codec.`)}async serializeRequest(e,t,n){let r=await super.serializeRequest(e,t,n);return r.path.endsWith(`/`)||(r.path+=`/`),r.headers[`content-type`]=`application/x-www-form-urlencoded`,(Ht(e.input)===`unit`||!r.body)&&(r.body=``),r.body=`Action=${e.name.split(`#`)[1]??e.name}&Version=${this.options.version}`+r.body,r.body.endsWith(`&`)&&(r.body=r.body.slice(-1)),r}async deserializeResponse(e,t,n){let r=this.deserializer,i=j.of(e.output),a={};if(n.statusCode>=300){let i=await Li(n.body,t);i.byteLength>0&&Object.assign(a,await r.read(15,i)),await this.handleError(e,t,n,a,this.deserializeMetadata(n))}for(let e in n.headers){let t=n.headers[e];delete n.headers[e],n.headers[e.toLowerCase()]=t}let o=e.name.split(`#`)[1]??e.name,s=i.isStructSchema()&&this.useNestedResult()?o+`Result`:void 0,c=await Li(n.body,t);return c.byteLength>0&&Object.assign(a,await r.read(i,c,s)),a.$metadata=this.deserializeMetadata(n),a}useNestedResult(){return!0}async handleError(e,t,n,r,i){let a=this.loadQueryErrorCode(n,r)??`Unknown`;this.mixin.compose(this.compositeErrorRegistry,a,this.options.defaultNamespace);let o=this.loadQueryError(r)??{},s=this.loadQueryErrorMessage(r);o.message=s,o.Error={Type:o.Type,Code:o.Code,Message:s};let{errorSchema:c,errorMetadata:l}=await this.mixin.getErrorSchemaOrThrowBaseException(a,this.options.defaultNamespace,n,o,i,this.mixin.findQueryCompatibleError),u=j.of(c),d=new((this.compositeErrorRegistry.getErrorCtor(c))??Error)({}),f={Type:o.Error.Type,Code:o.Error.Code,Error:o.Error};for(let[e,t]of u.structIterator()){let n=t.getMergedTraits().xmlName??e,i=o[n]??r[n];f[e]=this.deserializer.readSchema(t,i)}throw this.mixin.decorateServiceException(Object.assign(d,l,{$fault:u.getMergedTraits().error,message:s},f),r)}loadQueryErrorCode(e,t){let n=(t.Errors?.[0]?.Error??t.Errors?.Error??t.Error)?.Code;if(n!==void 0)return n;if(e.statusCode==404)return`NotFound`}loadQueryError(e){return e.Errors?.[0]?.Error??e.Errors?.Error??e.Error}loadQueryErrorMessage(e){let t=this.loadQueryError(e);return t?.message??t?.Message??e.message??e.Message??`Unknown`}getDefaultContentType(){return`application/x-www-form-urlencoded`}},R=64,cc=32,lc=2**53-1,uc=class e{digestLength=cc;state=Int32Array.from(dc);w;buffer=new Uint8Array(64);bufferLength=0;bytesHashed=0;finished=!1;inner;outer;constructor(t){if(t){let n=e.normalizeKey(t);this.inner=new e,this.outer=new e;let{inner:r,outer:i}=this,a=new Uint8Array(128);for(let e=0;elc)throw Error(`Cannot hash more than 2^53 - 1 bits`);for(;r>0;)this.buffer[this.bufferLength++]=t[n++],r--,this.bufferLength===R&&(this.hashBuffer(),this.bufferLength=0)}async digest(){let{inner:e,outer:t}=this;if(e&&t){if(this.finished)throw Error(`Attempted to digest an already finished HMAC.`);this.finished=!0;let n=e.digestSync();return t.update(n),t.digestSync()}return this.digestSync()}reset(){this.state=Int32Array.from(dc),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0}digestSync(){let e=this.state.slice(),t=this.buffer.slice(),n=this.bufferLength,r=this.bytesHashed*8,i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(i.setUint8(n++,128),(n-1)%R>=56){for(let e=n;e>>24&255,a[t*4+1]=e[t]>>>16&255,a[t*4+2]=e[t]>>>8&255,a[t*4+3]=e[t]>>>0&255;return a}static normalizeKey(t){let n=P(t);if(n.byteLength>R){let t=new e;t.update(n);let r=t.digestSync(),i=new Uint8Array(R);return i.set(r),i}if(n.byteLength>>17|t<<15)^(t>>>19|t<<13)^t>>>10;t=n[e-15];let i=(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3;n[e]=(r+n[e-7]|0)+(i+n[e-16]|0)}let d=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&c^~s&l)|0)+(u+(fc[e]+n[e]|0)|0)|0,f=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&i^r&a^i&a)|0;u=l,l=c,c=s,s=o+d|0,o=a,a=i,i=r,r=d+f|0}e[0]+=r,e[1]+=i,e[2]+=a,e[3]+=o,e[4]+=s,e[5]+=c,e[6]+=l,e[7]+=u}},dc=new Int32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),fc=new Int32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),{digest:pc,sign:mc,importKey:hc}=globalThis?.crypto?.subtle??{},gc=typeof pc==`function`&&typeof mc==`function`&&typeof hc==`function`?globalThis.crypto.subtle:void 0,_c=8388608,vc=class{digestLength=32;secret;pending=[];pendingBytes=0;fallback;finished=!1;constructor(e){e&&(this.secret=P(e))}update(e){if(this.finished)throw Error(`Attempted to update an already finished HMAC.`);if(this.fallback){this.fallback.update(e);return}this.pending.push(e.slice()),this.pendingBytes+=e.byteLength,this.pendingBytes>=_c&&this.switchToFallback()}async digest(){if(this.fallback)return this.fallback.digest();if(this.secret&&this.finished)throw Error(`Attempted to digest an already finished HMAC.`);let e=Mr(this.pending);if(gc){if(this.secret){this.finished=!0;let t=await gc.importKey(`raw`,this.secret,{name:`HMAC`,hash:`SHA-256`},!1,[`sign`]),n=await gc.sign(`HMAC`,t,e);return new Uint8Array(n)}let t=await gc.digest(`SHA-256`,e);return new Uint8Array(t)}let t=new uc(this.secret);return t.update(e),t.digest()}reset(){this.pending=[],this.pendingBytes=0,this.fallback=void 0,this.finished=!1}switchToFallback(){let e=new uc(this.secret);for(let t of this.pending)e.update(t);this.fallback=e,this.pending=[],this.pendingBytes=0}};function yc(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function bc(e,t=`|`){return e.map(e=>Wc(e)).join(t)}function xc(e,t){return typeof t==`bigint`?t.toString():t}var Sc=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function Cc(e){return new Sc(e)}function wc(e){return e==null}function Tc(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Ec(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){let e=t._zod.def.shape[a];return r?r(e,a):e}):jc(e,a,r?r(n.value,a):n.value))}}function Nc(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?Ac(e,n,()=>t[n]):jc(e,n,r.value))}}function z(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function Pc(e){return JSON.stringify(e)}function Fc(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var Ic=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Lc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Rc=Cc(()=>{if(U.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function zc(e){if(Lc(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return Lc(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function Bc(e){return zc(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var Vc=new Set([`string`,`number`,`symbol`]);function Hc(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Uc(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function B(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Wc(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function Gc(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var Kc={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},qc={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function Jc(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return Mc(i,e,Yc(e,t)),Uc(e,z(n,{shape:i,checks:[]}))}function Yc(e,t){let n=kc(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function Xc(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(Yc(e,t)),a={};return Mc(a,e,Reflect.ownKeys(kc(e)).filter(e=>!i.has(e))),Uc(e,z(n,{shape:a,checks:[]}))}function Zc(e,t){if(!zc(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=kc(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Uc(e,z(e._zod.def,{shape:Qc(e,t)}))}function Qc(e,t){let n={};return Mc(n,e,Reflect.ownKeys(kc(e))),Nc(n,t),n}function $c(e,t){if(!zc(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Uc(e,z(e._zod.def,{shape:Qc(e,t)}))}function el(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return Mc(n,e,Reflect.ownKeys(kc(e))),Mc(n,t,Reflect.ownKeys(kc(t))),Uc(e,z(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function tl(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(Yc(t,n)):void 0,o={};return Mc(o,t,Reflect.ownKeys(kc(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),Uc(t,z(t._zod.def,{shape:o,checks:[]}))}function nl(e,t,n){let r=n?new Set(Yc(t,n)):void 0,i={};return Mc(i,t,Reflect.ownKeys(kc(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),Uc(t,z(t._zod.def,{shape:i}))}function rl(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function ol(e){return typeof e==`string`?e:e?.message}function sl(e,t,n){var r;for(let i=t;ie;return t[wl]=!0,t}var El,Dl={value:void 0,enumerable:!1},Ol=`captureStackTrace`in Error?Error:null;function kl(e){let t=Ol;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return Ol=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function H(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){Dl.value=new a(r);try{Object.defineProperty(n,"_zod",Dl)}finally{Dl.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),ml(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?kl(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var Al=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},jl=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(El=globalThis).__zod_globalConfig??(El.__zod_globalConfig={});var U=globalThis.__zod_globalConfig;function W(e){return e&&Object.assign(U,e),U}function Ml(){let e=this._zod;return e.message??=JSON.stringify(e.def,xc,2),e.message}function Nl(e){this._zod.message=e}var Pl={get:Ml,set:Nl,enumerable:!0,configurable:!0},Fl={value:void 0,enumerable:!1},Il=new WeakSet([Object.prototype,Error.prototype]),Ll=(e,t)=>{e.name=`$ZodError`,Fl.value=t,Object.defineProperty(e,"issues",Fl),Fl.value=void 0,Object.defineProperty(e,"message",Pl);let n=Object.getPrototypeOf(e);Il.has(n)||(Il.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},Rl=H(`$ZodError`,Ll);H(`$ZodError`,Ll,void 0,{Parent:Error});function zl(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function Bl(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?zl(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Vl(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new Al;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>cl(e,o,W())));throw Ic(n,a?.callee??t),n}return s.value};return t},Wl=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>cl(e,o,W())));throw Ic(n,a?.callee??t),n}return s.value};return t},Gl=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new Al;return a.issues.length?Kl(e,a.issues,i):{success:!0,data:a.value}};function Kl(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>cl(e,n,W()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var ql=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?Kl(e,a.issues,i):{success:!0,data:a.value}},Jl=Symbol.for(`zod.compile.invalid`),Yl=Symbol.for(`zod.compile.fallback`),Xl=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==Jl)return!0;if(r.definite===!0&&n===void 0)return!1}return Zl(e,t,n)});function Zl(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[Yl]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new Al;return a.issues.length===0}var Ql=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},$l=e=>{let t=Ul(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,Hl(n,a))};return n},eu=e=>{let t=Ul(e),n=(e,r,i,a)=>t(e,r,i,Hl(n,a));return n},tu=e=>{let t=Wl(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,Hl(n,a))};return n},nu=e=>{let t=Wl(e),n=async(e,r,i,a)=>await t(e,r,i,Hl(n,a));return n},ru=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Gl(e)(t,n,i)},iu=e=>(t,n,r)=>Gl(e)(t,n,r),au=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return ql(e)(t,n,i)},ou=e=>async(t,n,r)=>ql(e)(t,n,r),su=/^[cC][0-9a-z]{6,}$/,cu=/^[0-9a-z]+$/,lu=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,uu=/^[0-9a-vA-V]{20}$/,du=/^[A-Za-z0-9]{27}$/,fu=/^[a-zA-Z0-9_-]{21}$/;function pu(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var mu=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,hu=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,gu=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,_u=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,vu=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function yu(){return new RegExp(vu,`u`)}var bu=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,xu=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Su=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Cu=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,wu=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Tu=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Eu=/^https?$/,Du=/^\+[1-9]\d{6,14}$/,Ou=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function ku(e){return RegExp(`^${e}$`)}var Au=ku(Ou);function ju(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Mu(e){return RegExp(`^${ju(e)}$`)}function Nu(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${ju({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${ju({precision:e.precision})}`:n;return RegExp(`^${Ou}T(?:${r})$`)}var Pu=/^[\s\S]{0,}$/,Fu=/^-?\d+$/,Iu=/^-?\d+(?:\.\d+)?$/,Lu=/^(?:true|false)$/i,Ru=/^[^A-Z]*$/,zu=/^[^a-z]*$/,G=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Bu=e=>{let t=e.value;return!wc(t)&&t.length!==void 0},Vu={number:`number`,bigint:`bigint`,object:`date`},Hu=H(`$ZodCheckLessThan`,(e,t)=>{G.init(e,t);let n=Vu[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value{G.init(e,t);let n=Vu[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:Vu[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Wu=H(`$ZodCheckMultipleOf`,(e,t)=>{G.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):Ec(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Gu=H(`$ZodCheckNumberFormat`,(e,t)=>{G.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=Kc[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Ku=H(`$ZodCheckMaxLength`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?ul(r):i)<=t.maximum)return;let a=dl(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),qu=H(`$ZodCheckMinLength`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i=t.minimum)return;let a=dl(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Ju=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;G.init(e,t),(n=e._zod.def).when??(n.when=Bu),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?ul(r):i;if(a===t.length)return;let o=dl(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Yu=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;G.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),Xu=H(`$ZodCheckRegex`,(e,t)=>{Yu.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Zu=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Ru,Yu.init(e,t)}),Qu=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=zu,Yu.init(e,t)}),$u=H(`$ZodCheckIncludes`,(e,t)=>{G.init(e,t);let n=Hc(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),ed=H(`$ZodCheckStartsWith`,(e,t)=>{G.init(e,t);let n=RegExp(`^${Hc(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),td=H(`$ZodCheckEndsWith`,(e,t)=>{G.init(e,t);let n=RegExp(`.*${Hc(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),nd=H(`$ZodCheckOverwrite`,(e,t)=>{G.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),rd=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` -`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(` -`)}\n};`)(...Object.values(this.closed))}},id={major:4,minor:6,patch:5},K=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=id;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=rl(t),a;for(let o of n){if(o._zod.def.when){if(il(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new Al;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(sl(t.issues,n,e),i||=rl(t,n))});else{if(t.issues.length===n)continue;sl(t.issues,n,e),i||=rl(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(rl(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new Al;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new Al;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return gl(this,`~standard`,sd(this))},set"~standard"(e){hl(this,`~standard`,e)}}),ad=(e,t)=>e.issues.length?{issues:e.issues.map(e=>cl(e,t,W()))}:{value:e.value};async function od(e,t){let n={async:!0};return ad(await e._zod.run({value:t,issues:[]},n),n)}function sd(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return ad(r,n)}catch{}return od(e,t)},vendor:`zod`,version:1}}var cd=H(`$ZodString`,(e,t)=>{K.init(e,t),e._zod.pattern=t.pattern??Pu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),q=H(`$ZodStringFormat`,(e,t)=>{Yu.init(e,t),cd.init(e,t)}),ld=H(`$ZodGUID`,(e,t)=>{t.pattern??=hu,q.init(e,t)}),ud=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=gu(e)}else t.pattern??=gu();q.init(e,t)}),dd=H(`$ZodEmail`,(e,t)=>{t.pattern??=_u,q.init(e,t)});function fd(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function pd(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?fd(e)||2:md(e,t)}function md(e,t){if(!t.normalize&&t.protocol?.source===Eu.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var hd=/[\t\n\r]/g;function gd(e){return e.replace(hd,``)}function _d(e,t){return t.lastIndex=0,t.test(e.hostname)}function vd(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var yd=H(`$ZodURL`,(e,t)=>{q.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=pd(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=gd(r);return}t.hostname&&!_d(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!vd(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:gd(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),bd=H(`$ZodEmoji`,(e,t)=>{t.pattern??=yu(),q.init(e,t)}),xd=H(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?fu:pu(t.length),q.init(e,t)}),Sd=H(`$ZodCUID`,(e,t)=>{t.pattern??=su,q.init(e,t)}),Cd=H(`$ZodCUID2`,(e,t)=>{t.pattern??=cu,q.init(e,t)}),wd=H(`$ZodULID`,(e,t)=>{t.pattern??=lu,q.init(e,t)}),Td=H(`$ZodXID`,(e,t)=>{t.pattern??=uu,q.init(e,t)}),Ed=H(`$ZodKSUID`,(e,t)=>{t.pattern??=du,q.init(e,t)}),Dd=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=Nu(t),q.init(e,t)}),Od=H(`$ZodISODate`,(e,t)=>{t.pattern??=Au,q.init(e,t)}),kd=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Mu(t),q.init(e,t)}),Ad=H(`$ZodISODuration`,(e,t)=>{t.pattern??=mu,q.init(e,t)}),jd=H(`$ZodIPv4`,(e,t)=>{t.pattern??=bu,q.init(e,t)}),Md=/^[0-9a-fA-F:.]+$/;function Nd(e){return Md.test(e)?fd(`http://[${e}]`):!1}var Pd=H(`$ZodIPv6`,(e,t)=>{t.pattern??=xu,q.init(e,t),e._zod.check=n=>{Nd(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),Fd=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=Su,q.init(e,t)});function Id(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:Nd(n)}var Ld=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=Cu,q.init(e,t),e._zod.check=n=>{Id(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function Rd(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var zd=/^[0-9a-zA-Z+/]*={0,2}$/,Bd=H(`$ZodBase64`,(e,t)=>{t.pattern??=zd,q.init(e,t),e._zod.check=n=>{Rd(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),Vd=/^[A-Za-z0-9_-]*$/;function Hd(e){if(!Vd.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return Rd(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ud=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=Vd,q.init(e,t),e._zod.check=n=>{Hd(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Wd=H(`$ZodE164`,(e,t)=>{t.pattern??=Du,q.init(e,t)});function Gd(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var Kd=H(`$ZodJWT`,(e,t)=>{q.init(e,t),e._zod.check=n=>{Gd(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),qd=H(`$ZodNumber`,(e,t)=>{K.init(e,t),e._zod.pattern=Iu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Jd=H(`$ZodNumberFormat`,(e,t)=>{Gu.init(e,t),qd.init(e,t)}),Yd=H(`$ZodBoolean`,(e,t)=>{K.init(e,t),e._zod.pattern=Lu,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Xd=H(`$ZodUnknown`,(e,t)=>{K.init(e,t),e._zod.parse=e=>e}),Zd=H(`$ZodNever`,(e,t)=>{K.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Qd(e,t,n){e.issues.length&&t.issues.push(...al(n,e.issues)),t.value[n]=e.value}var $d=H(`$ZodArray`,(e,t)=>{K.init(e,t);let n=U.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;eQd(t,r,e)));else if(Qd(c,r,e),s&&c.issues.length!==0&&rl(c))break}return o.length?Promise.all(o).then(()=>r):r}});function ef(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...al(n,e.issues))}if(!o&&i===void 0){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var tf=[];function nf(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:tf,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=Gc(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function rf(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(rl(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>ef(e,n,i,t,d,f))):ef(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var af=H(`$ZodObject`,(e,t)=>{K.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let i=Cc(()=>nf(t));V(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||Dc(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let a=Lc,o=t.catchall,s,c=U.memoizer;c?.attach(e),e._zod.parse=(t,n)=>{s??=i.value;let r=t.value;if(!a(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=c?c.alloc(e,t,{},n):{};let l=[],u=s.shape,d=n?.abortEarly,f=t.issues.length;for(let e of s.allKeys){if(d&&t.issues.length!==f){if(rl(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let i=u[e],a=i._zod.optin,o=i._zod.optout,s=i._zod.run({value:r[e],issues:[]},n);s instanceof Promise?l.push(s.then(n=>ef(n,t,e,r,a,o))):ef(s,t,e,r,a,o)}return o?rf(l,r,t,n,i.value,e,d===!0):l.length?Promise.all(l).then(()=>t):t}}),of=H(`$ZodObjectJIT`,(e,t)=>{af.init(e,t);let n=e._zod.parse,r=Cc(()=>nf(t)),i=U.memoizer,a=t=>{let n=r.value,a=n.symbolKeys,o=new rd([`payload`,`ctx`],{shape:t,inst:e,memo:i,syms:a}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>` - let ${e}_ab = false; - for (let i = 0; i < ${e}.issues.length; i++) { - const iss = ${e}.issues[i]; - iss.path = iss.path ? [${t}, ...iss.path] : [${t}]; - payload.issues.push(iss); - if (iss.continue !== true) ${e}_ab = true; - } - if (${e}_ab && ctx && ctx.abortEarly) { - payload.value = newResult; - return payload; - }`;o.write(`const input = payload.value;`);let l=Object.create(null),u=0;for(let e of n.allKeys)l[e]=`key_${u++}`;o.write(i?`const newResult = memo.alloc(inst, payload, {}, ctx);`:`const newResult = {};`);for(let e of n.allKeys){if(e===`__proto__`)continue;let n=l[e],r=typeof e==`symbol`?`syms[${a.indexOf(e)}]`:Pc(e),i=`${r} in input`,u=t[e],d=u?._zod?.optin,f=d!==void 0,p=u?._zod?.optout===`optional`;if(o.write(`const ${n} = ${s(r)};`),f&&p){let e=d===`optional`?`${n}_present`:`${n}.value !== undefined || ${n}_present`;o.write(` - const ${n}_present = ${i}; - if (!${n}.issues.length || ${n}_present) { - if (${n}.issues.length) {${c(n,r)} - } - - if (${e}) { - newResult[${r}] = ${n}.value; - } - } - - `)}else f?(o.write(` - if (${n}.issues.length) {${c(n,r)} - } - `),d===`defaulted`?o.write(`newResult[${r}] = ${n}.value;`):o.write(` - if (${n}.value !== undefined || ${i}) { - newResult[${r}] = ${n}.value; - } - `)):o.write(` - const ${n}_present = ${i}; - if (${n}.issues.length) {${c(n,r)} - } - if (!${n}_present && !${n}.issues.length) { - payload.issues.push({ - code: "invalid_type", - expected: "nonoptional", - input: undefined, - path: [${r}] - }); - if (ctx && ctx.abortEarly) { - payload.value = newResult; - return payload; - } - } - - if (${n}_present) { - newResult[${r}] = ${n}.value; - } - - `)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},o,s=Lc,c=!U.jitless,l=c&&Rc.value,u=t.catchall,d;e._zod.parse=(i,f)=>{d??=r.value;let p=i.value;return s(p)?c&&l&&f?.async===!1&&f.jitless!==!0?(o||=a(t.shape),i=o(i,f),u?rf([],p,i,f,d,e,f?.abortEarly===!0):i):n(i,f):(i.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),i)}});function sf(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!rl(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>cl(e,r,W())))}),t)}var cf=H(`$ZodUnion`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),V(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),V(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),V(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>Tc(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>sf(t,r,e,i)):sf(o,r,e,i)}}),lf=H(`$ZodIntersection`,(e,t)=>{K.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>df(e,t,n)):df(e,i,a)}});function uf(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(zc(e)&&zc(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=uf(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=uf(t.value,n.value);if(!c.valid){if(rl(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var ff=H(`$ZodRecord`,(e,t)=>{K.init(e,t);let n=U.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!zc(a))return r.issues.push({expected:`record`,code:`invalid_type`,input:a,inst:e}),r;let o=[],s=t.keyType._zod.values;if(s&&!t.partial){r.value=n?n.alloc(e,r,{},i):{};let c=new Set;for(let n of s)if(typeof n==`string`||typeof n==`number`||typeof n==`symbol`){if(c.add(typeof n==`number`?n.toString():n),n===`__proto__`)continue;let s=t.keyType._zod.run({value:n,issues:[]},i);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(s.issues.length){r.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>cl(e,i,W())),input:n,path:[n],inst:e});continue}let l=s.value;if(l===`__proto__`)continue;let u=t.valueType._zod.run({value:a[n],issues:[]},i);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&r.issues.push(...al(n,e.issues)),r.value[l]=e.value})):(u.issues.length&&r.issues.push(...al(n,u.issues)),r.value[l]=u.value)}let l;for(let e in a)if(!c.has(e)){if(t.mode===`loose`){if(e===`__proto__`)continue;r.value[e]=a[e]}else l??=[],l.push(e)}l&&l.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:l,continue:!0})}else{r.value=n?n.alloc(e,r,{},i):{};let c;for(let n of Reflect.ownKeys(a)){if(n===`__proto__`||!Object.prototype.propertyIsEnumerable.call(a,n))continue;let l=t.keyType._zod.run({value:n,issues:[]},i);if(l instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof n==`string`&&Iu.test(n)&&l.issues.length){let e=t.keyType._zod.run({value:Number(n),issues:[]},i);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(l=e)}if(l.issues.length){t.mode===`loose`?r.value[n]=a[n]:s?(c??=[],c.push(n)):r.issues.push({code:`invalid_key`,origin:`record`,issues:l.issues.map(e=>cl(e,i,W())),input:n,path:[n],inst:e});continue}let u=l.value;if(u===`__proto__`)continue;let d=t.valueType._zod.run({value:a[n],issues:[]},i);d instanceof Promise?o.push(d.then(e=>{e.issues.length&&r.issues.push(...al(n,e.issues)),r.value[u]=e.value})):(d.issues.length&&r.issues.push(...al(n,d.issues)),r.value[u]=d.value)}c&&c.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:c,continue:!0})}return o.length?Promise.all(o).then(()=>r):r}}),pf=H(`$ZodEnum`,(e,t)=>{K.init(e,t);let n=yc(t.entries),r=new Set(n);e._zod.values=r,V(e,`pattern`,e=>{let t=yc(e.def.entries).filter(e=>Vc.has(typeof e));return RegExp(t.length?`^(${t.map(e=>Hc(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),mf=H(`$ZodLiteral`,(e,t)=>{K.init(e,t);let n=new Set(t.values);e._zod.values=n,V(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?Hc(e):e?Hc(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),hf=H(`$ZodTransform`,(e,t)=>{K.init(e,t),e._zod.optin=`optional`,U.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new jl(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new Al;return n.value=i,n}});function gf(e,t){return e.value=t.issues.length?void 0:t.value,e}var _f=H(`$ZodOptional`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,V(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t,void 0]):void 0}),V(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Tc(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>gf(e,t)):gf(e,r)}return t.innerType._zod.run(e,n)}}),vf=H(`$ZodExactOptional`,(e,t)=>{_f.init(e,t),V(e,`values`,e=>e.def.innerType._zod.values),V(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),yf=H(`$ZodNullable`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin),V(e,`optout`,e=>e.def.innerType._zod.optout),V(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Tc(t.source)}|null)$`):void 0}),V(e,`values`,e=>e.def.innerType._zod.values?new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),bf=H(`$ZodDefault`,(e,t)=>{K.init(e,t),e._zod.optin=`defaulted`,V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>xf(e,t)):xf(r,t)}});function xf(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Sf=H(`$ZodPrefault`,(e,t)=>{K.init(e,t),e._zod.optin=`defaulted`,V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Cf=H(`$ZodNonOptional`,(e,t)=>{K.init(e,t),V(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>wf(t,e)):wf(i,e)}});function wf(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Tf(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>cl(e,r,W()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Ef=H(`$ZodCatch`,(e,t)=>{K.init(e,t),V(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),V(e,`optout`,e=>e.def.innerType._zod.optout),V(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Tf(e,r,t,n)):Tf(e,r,t,n)}}),Df=H(`$ZodPipe`,(e,t)=>{K.init(e,t),V(e,`values`,e=>e.def.in._zod.values),V(e,`optin`,e=>e.def.in._zod.optin),V(e,`optout`,e=>e.def.out._zod.optout),V(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Of(e,t.in,n)):Of(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Of(e,t.out,n)):Of(r,t.out,n)}});function Of(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var kf=H(`$ZodReadonly`,(e,t)=>{K.init(e,t),V(e,`propValues`,e=>e.def.innerType._zod.propValues),V(e,`values`,e=>e.def.innerType._zod.values),V(e,`optin`,e=>e.def.innerType?._zod?.optin),V(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Af):Af(r)}});function Af(e){return e.memo||(e.value=Object.freeze(e.value)),e}var jf=H(`$ZodCustom`,(e,t)=>{G.init(e,t),K.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Mf(t,n,r,e));Mf(i,n,r,e)}});function Mf(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(pl(e))}}var Nf=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Pf=`~memo`,Ff=[];function If(e){return typeof e==`object`&&!!e}function Lf(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var Rf=new WeakMap,zf=0,Bf=1,Vf=2;function Hf(e,t,n){let r=Rf.get(e);if(r!==void 0)return r?Vf:zf;if(t.has(e))return Vf;t.add(e);let i=zf,a=e=>{if(i!==Vf&&e?._zod){let r=Hf(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=zf;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?Bf:o.value?._zod?Hf(o.value,t,n):zf;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=Oc(c);s(e?o(e,!0):Bf),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?Hf(r,t,!1):Bf);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),Uf(e,i)}function Uf(e,t){return t!==Bf&&Rf.set(e,t===Vf),t}function Wf(e,t){let n=e.buckets.get(t);return n||(n=new WeakMap,e.buckets.set(t,n)),n}var Gf,Kf=[],qf={alloc(e,t,n){let r=Gf;if(!r)return n;Gf=void 0;let i={value:n,issues:null};return r.set(t.value,i),Kf.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&Yf(n,e.value))throw new Nf;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=Hf(e,new Set,!1);if(i===zf)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===Vf||r?n=!0:r=!0}let l=s.value;if(!If(l))return t(s,c);let u=c[Pf];u||(u={buckets:new WeakMap,backEdges:void 0},c[Pf]=u);let d;i===c?d=a:(d=Wf(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...Lf(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=new WeakSet),u.backEdges.add(f.value)),s;Gf=d;let p=Kf.length,m=t(s,c);Gf=void 0;let h=Kf.length>p?Kf.pop():void 0;return m instanceof Promise?m.then(e=>(h&&(h.issues=e.issues.length?Lf(e.issues):Ff),e)):(h&&(h.issues=m.issues.length?Lf(m.issues):Ff),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function Jf(){return qf}function Yf(e,t){let n=e[Pf]?.backEdges;return n!==void 0&&If(t)&&n.has(t)}var Xf=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,currency_code:`currency code`,credit_card:`credit card number`,iban:`IBAN`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};function i(e,t){return e===`number`&&typeof t==`number`&&!Number.isFinite(t)?String(t):r[e]??e}return e=>{switch(e.code){case`invalid_type`:return`Invalid input: expected ${i(e.expected)}, received ${i(fl(e.input),e.input)}`;case`invalid_value`:return e.values.length===1?`Invalid input: expected ${Wc(e.values[0])}`:`Invalid option: expected one of ${bc(e.values,`|`)}`;case`too_big`:{let n=e.exact?`exactly `:e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${n}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.exact?`exactly `:e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${bc(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return e.options&&Array.isArray(e.options)&&e.options.length>0?`Invalid discriminator value. Expected ${e.options.map(e=>`'${e}'`).join(` | `)}`:e.inclusive===!1?`Invalid input: more than one option matched`:`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function Zf(){return{localeError:Xf()}}var Qf,$f=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function ep(){return new $f}(Qf=globalThis).__zod_globalRegistry??(Qf.__zod_globalRegistry=ep());var tp=globalThis.__zod_globalRegistry;function np(e){return e.checks&&=[...e.checks],e}function rp(e,t){return new e(np({type:`string`,...B(t)}))}function ip(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...B(t)})}function ap(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...B(t)})}function op(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...B(t)})}function sp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...B(t)})}function cp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...B(t)})}function lp(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...B(t)})}function up(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...B(t)})}function dp(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...B(t)})}function fp(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...B(t)})}function pp(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...B(t)})}function mp(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...B(t)})}function hp(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...B(t)})}function gp(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...B(t)})}function _p(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...B(t)})}function vp(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...B(t)})}function yp(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...B(t)})}function bp(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...B(t)})}function xp(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...B(t)})}function Sp(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...B(t)})}function Cp(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...B(t)})}function wp(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...B(t)})}function Tp(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...B(t)})}function Ep(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...B(t)})}function Dp(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...B(t)})}function Op(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...B(t)})}function kp(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...B(t)})}function Ap(e,t){return new e(np({type:`number`,checks:[],...B(t)}))}function jp(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...B(t)})}function Mp(e,t){return new e({type:`boolean`,...B(t)})}function Np(e){return new e({type:`unknown`})}function Pp(e,t){return new e({type:`never`,...B(t)})}function Fp(e,t){return new Hu({check:`less_than`,...B(t),value:e,inclusive:!1})}function Ip(e,t){return new Hu({check:`less_than`,...B(t),value:e,inclusive:!0})}function Lp(e,t){return new Uu({check:`greater_than`,...B(t),value:e,inclusive:!1})}function Rp(e,t){return new Uu({check:`greater_than`,...B(t),value:e,inclusive:!0})}function zp(e,t){return new Wu({check:`multiple_of`,...B(t),value:e})}function Bp(e,t){return new Ku({check:`max_length`,...B(t),maximum:e})}function Vp(e,t){return new qu({check:`min_length`,...B(t),minimum:e})}function Hp(e,t){return new Ju({check:`length_equals`,...B(t),length:e})}function Up(e,t){return new Xu({check:`string_format`,format:`regex`,...B(t),pattern:e})}function Wp(e){return new Zu({check:`string_format`,format:`lowercase`,...B(e)})}function Gp(e){return new Qu({check:`string_format`,format:`uppercase`,...B(e)})}function Kp(e,t){return new $u({check:`string_format`,format:`includes`,...B(t),includes:e})}function qp(e,t){return new ed({check:`string_format`,format:`starts_with`,...B(t),prefix:e})}function Jp(e,t){return new td({check:`string_format`,format:`ends_with`,...B(t),suffix:e})}function Yp(e){return new nd({check:`overwrite`,tx:e})}function Xp(e){return Yp(t=>t.normalize(e))}function Zp(){return Yp(e=>e.trim())}function Qp(){return Yp(e=>e.toLowerCase())}function $p(){return Yp(e=>e.toUpperCase())}function em(){return Yp(e=>Fc(e))}function tm(e,t,n){return new e({type:`array`,element:t,...B(n)})}function nm(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...B(n)})}function rm(e,t){let n=im(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(pl(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(pl(r))}},e(t.value,t)),t);return n}function im(e,t){let n=new G({check:`custom`,...B(t)});return n._zod.check=e,n}function am(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&Dc(e,t,n[t]);return e}function om(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??tp,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function sm(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function J(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,J(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&am(o.schema,c),t.io===`input`&&Y(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function cm(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function lm(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${cm(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+cm(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ - -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function um(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;um(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var dm=new Set([`type`,`properties`,`required`,`additionalProperties`]),fm=[`oneOf`,`anyOf`];function pm(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function mm(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!dm.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??pm(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Dc(n,r,e.length===1?e[0]:mm(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=pm(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function hm(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of dm)if(t in e)return;let n=t.filter(e=>fm.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=mm(t);else{let e=n[0],i=fm.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>mm([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,am(e,r))}function gm(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):am(i,s),am(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())um(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])hm(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}am(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Dc(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:vm(t,`input`,e.processors),output:vm(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Y(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Y(r.element,n);if(r.type===`set`)return Y(r.valueType,n);if(r.type===`lazy`)return Y(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return Y(r.innerType,n);if(r.type===`intersection`)return Y(r.left,n)||Y(r.right,n);if(r.type===`record`||r.type===`map`)return Y(r.keyType,n)||Y(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Y(r.in,n)||Y(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Y(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Y(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Y(e,n))return!0;return!!(r.rest&&Y(r.rest,n))}return!1}var _m=(e,t={})=>n=>{let r=om({...n,processors:t});return J(e,r),lm(r,e),gm(r,e)},vm=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=om({...i??{},target:a,io:t,processors:n});return J(e,o),lm(o,e),gm(o,e)},ym=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},bm=(e,t,n)=>{(e[t]===void 0||n{ym(e,`minimum`,t),bm(e,`maximum`,t)},Sm=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Cm=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},wm=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Tm=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Em=(e,t)=>ym(e,`minimum`,t.minimum),Dm=(e,t)=>bm(e,`maximum`,t.maximum),Om=e=>(t,n)=>{Tm(t,n.format);let[r,i]=e[n.format];ym(t,`minimum`,r),bm(t,`maximum`,i)},km={greater_than:(e,t)=>ym(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>bm(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Sm(e,t.value),number_format:Om(Kc),bigint_format:Om(qc),min_length:Em,max_length:Dm,length_equals:(e,t)=>xm(e,t.length),min_size:Em,max_size:Dm,size_equals:(e,t)=>xm(e,t.size),string_format:(e,t)=>{Tm(e,t.format),t.pattern&&Cm(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>wm(e,t.mime)};function X(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)km[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&ym(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&ym(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&bm(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&bm(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Sm(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&wm(t,i.mime);for(let e of i.patterns??[])Cm(t,e);return t}var Am={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},jm=new Map([[zd,wu],[Vd,Tu]]),Mm=e=>jm.get(e)??e,Nm=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=X(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Am[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(Mm);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Pm=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=X(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):sm(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},Fm=(e,t,n,r)=>{n.type=`boolean`},Im=(e,t,n,r)=>{n.not={}},Lm=(e,t,n,r)=>{let i=e._zod.def,a=yc(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Rm=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(sm(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(sm(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},zm=(e,t,n,r)=>{sm(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},Bm=(e,t,n,r)=>{sm(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},Vm=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=X(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=J(a.element,t,{...r,path:[...r.path,`items`]})};function Hm(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?Hm(t.out):t.type===`catch`?Hm(t.innerType):e._zod.optin}var Um=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&sm(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Dc(i.properties,e,J(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?Hm(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=J(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Wm=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>J(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Gm=(e,t,n,r)=>{let i=e._zod.def,a=J(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=J(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)};function Km(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=Km(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>Km(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?Iu:Fu).source),p):p}var qm=new WeakMap;function Jm(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of qm.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=Km(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var Ym=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=X(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=J(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Dc(i.patternProperties,Mm(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=J(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=qm.get(t);n||(n=[],qm.set(t,n),t.deferred.push(()=>Jm(t))),n.push(e)}i.additionalProperties=J(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&Hm(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},Xm=(e,t,n,r)=>{let i=e._zod.def,a=J(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Zm=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Qm=Symbol();function $m(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(sm(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),Qm):JSON.parse(o)}var eh=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=$m(i.defaultValue,e,t,n,r);o!==Qm&&(n.default=o)},th=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=$m(i.defaultValue,e,t,n,r);o!==Qm&&(n._prefault=o)},nh=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{sm(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},rh=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;J(o,t,r);let s=t.seen.get(e);s.ref=o},ih=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ah=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},oh=new WeakSet([Object.prototype,Error.prototype]);function sh(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var Z=H(`ZodError`,(e,t)=>{Rl.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);oh.has(n)||(oh.add(n),sh(n,`format`,e=>t=>Vl(e,t)),sh(n,`flatten`,e=>t=>Bl(e,t)),sh(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,xc,2)}),sh(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,xc,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),ch=Ul(Z),lh=Wl(Z),uh=Gl(Z),dh=ql(Z),fh=$l(Z),ph=eu(Z),mh=tu(Z),hh=nu(Z),gh=ru(Z),_h=iu(Z),vh=au(Z),yh=ou(Z);function bh(){U.localeError||W(Zf())}function xh(){U.memoizer||W({memoizer:Jf()})}var Q=H(`ZodType`,(e,t)=>(bh(),K.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(z(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Uc(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(zg(e,t))},superRefine(e,t){return this.check(Bg(e,t))},overwrite(e){return this.check(Yp(e))},optional(){return xg(this)},exactOptional(){return Cg(this)},nullable(){return Tg(this)},nullish(){return xg(Tg(this))},nonoptional(e){return jg(this,e)},array(){return ag(this)},or(e){return lg([this,e])},and(e){return dg(this,e)},transform(e){return Fg(this,yg(e))},default(e){return Dg(this,e)},prefault(e){return kg(this,e)},catch(e){return Ng(this,e)},pipe(e){return Fg(this,e)},readonly(){return Lg(this)},describe(e){let t=this.clone();return tp.add(t,{description:e}),t},meta(...e){if(e.length===0)return tp.get(this);let t=this.clone();return tp.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return gl(this,`~standard`,{...sd(this),jsonSchema:{input:vm(this,`input`),output:vm(this,`output`)}})},set"~standard"(e){hl(this,`~standard`,e)},parse:function e(t,n){return ch(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await lh(this,t,n,{callee:e})},safeParse(e,t){return uh(this,e,t)},async safeParseAsync(e,t){return dh(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){hl(this,`spa`,e)},validate(e,t){return Xl(this,e,t)},validateAsync(e,t){return Ql(this,e,t)},encode:function e(t,n){return fh(this,t,n,{callee:e})},decode:function e(t,n){return ph(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await mh(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await hh(this,t,n,{callee:e})},safeEncode(e,t){return gh(this,e,t)},safeDecode(e,t){return _h(this,e,t)},async safeEncodeAsync(e,t){return vh(this,e,t)},async safeDecodeAsync(e,t){return yh(this,e,t)},toJSONSchema(e){return _m(this,{})(e)},get description(){return tp.get(this)?.description},get _def(){return this._zod.def}}),Sh=H(`_ZodString`,(e,t)=>{cd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Nm(e,t,n,r)},_l({format:e=>X(e).format??null,minLength:e=>X(e).minimum??null,maxLength:e=>X(e).maximum??null},{regex(...e){return this.check(Up(...e))},includes(...e){return this.check(Kp(...e))},startsWith(...e){return this.check(qp(...e))},endsWith(...e){return this.check(Jp(...e))},min(...e){return this.check(Vp(...e))},max(...e){return this.check(Bp(...e))},length(...e){return this.check(Hp(...e))},nonempty(...e){return this.check(Vp(1,...e))},lowercase(e){return this.check(Wp(e))},uppercase(e){return this.check(Gp(e))},trim(){return this.check(Zp())},normalize(...e){return this.check(Xp(...e))},toLowerCase(){return this.check(Qp())},toUpperCase(){return this.check($p())},slugify(){return this.check(em())}})),Ch=H(`ZodString`,(e,t)=>{cd.init(e,t),Sh.init(e,t)},{email(e){return this.check(ip(kh,e))},url(e){return this.check(up(Mh,e))},jwt(e){return this.check(Tp(qh,e))},emoji(e){return this.check(dp(Nh,e))},guid(e){return this.check(ap(Ah,e))},uuid(e){return this.check(op(jh,e))},uuidv4(e){return this.check(sp(jh,e))},uuidv6(e){return this.check(cp(jh,e))},uuidv7(e){return this.check(lp(jh,e))},nanoid(e){return this.check(fp(Ph,e))},cuid(e){return this.check(pp(Fh,e))},cuid2(e){return this.check(mp(Ih,e))},ulid(e){return this.check(hp(Lh,e))},base64(e){return this.check(Sp(Wh,e))},base64url(e){return this.check(Cp(Gh,e))},xid(e){return this.check(gp(Rh,e))},ksuid(e){return this.check(_p(zh,e))},ipv4(e){return this.check(vp(Bh,e))},ipv6(e){return this.check(yp(Vh,e))},cidrv4(e){return this.check(bp(Hh,e))},cidrv6(e){return this.check(xp(Uh,e))},e164(e){return this.check(wp(Kh,e))},datetime(e){return this.check(Ep(Th,e))},date(e){return this.check(Dp(Eh,e))},time(e){return this.check(Op(Dh,e))},duration(e){return this.check(kp(Oh,e))}});function wh(e){return rp(Ch,e)}var $=H(`ZodStringFormat`,(e,t)=>{q.init(e,t),Sh.init(e,t)}),Th=H(`ZodISODateTime`,(e,t)=>{Dd.init(e,t),$.init(e,t)}),Eh=H(`ZodISODate`,(e,t)=>{Od.init(e,t),$.init(e,t)}),Dh=H(`ZodISOTime`,(e,t)=>{kd.init(e,t),$.init(e,t)}),Oh=H(`ZodISODuration`,(e,t)=>{Ad.init(e,t),$.init(e,t)}),kh=H(`ZodEmail`,(e,t)=>{dd.init(e,t),$.init(e,t)}),Ah=H(`ZodGUID`,(e,t)=>{ld.init(e,t),$.init(e,t)}),jh=H(`ZodUUID`,(e,t)=>{ud.init(e,t),$.init(e,t)}),Mh=H(`ZodURL`,(e,t)=>{yd.init(e,t),$.init(e,t)}),Nh=H(`ZodEmoji`,(e,t)=>{bd.init(e,t),$.init(e,t)}),Ph=H(`ZodNanoID`,(e,t)=>{xd.init(e,t),$.init(e,t)}),Fh=H(`ZodCUID`,(e,t)=>{Sd.init(e,t),$.init(e,t)}),Ih=H(`ZodCUID2`,(e,t)=>{Cd.init(e,t),$.init(e,t)}),Lh=H(`ZodULID`,(e,t)=>{wd.init(e,t),$.init(e,t)}),Rh=H(`ZodXID`,(e,t)=>{Td.init(e,t),$.init(e,t)}),zh=H(`ZodKSUID`,(e,t)=>{Ed.init(e,t),$.init(e,t)}),Bh=H(`ZodIPv4`,(e,t)=>{jd.init(e,t),$.init(e,t)}),Vh=H(`ZodIPv6`,(e,t)=>{Pd.init(e,t),$.init(e,t)}),Hh=H(`ZodCIDRv4`,(e,t)=>{Fd.init(e,t),$.init(e,t)}),Uh=H(`ZodCIDRv6`,(e,t)=>{Ld.init(e,t),$.init(e,t)}),Wh=H(`ZodBase64`,(e,t)=>{Bd.init(e,t),$.init(e,t)}),Gh=H(`ZodBase64URL`,(e,t)=>{Ud.init(e,t),$.init(e,t)}),Kh=H(`ZodE164`,(e,t)=>{Wd.init(e,t),$.init(e,t)}),qh=H(`ZodJWT`,(e,t)=>{Kd.init(e,t),$.init(e,t)}),Jh=H(`ZodNumber`,(e,t)=>{qd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pm(e,t,n,r),e.isFinite=!0},_l({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=X(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=X(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=X(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>X(e).format??null},{gt(e,t){return this.check(Lp(e,t))},gte(e,t){return this.check(Rp(e,t))},min(e,t){return this.check(Rp(e,t))},lt(e,t){return this.check(Fp(e,t))},lte(e,t){return this.check(Ip(e,t))},max(e,t){return this.check(Ip(e,t))},int(e){return this.check(Zh(e))},safe(e){return this.check(Zh(e))},positive(e){return this.check(Lp(0,e))},nonnegative(e){return this.check(Rp(0,e))},negative(e){return this.check(Fp(0,e))},nonpositive(e){return this.check(Ip(0,e))},multipleOf(e,t){return this.check(zp(e,t))},step(e,t){return this.check(zp(e,t))},finite(){return this}}));function Yh(e){return Ap(Jh,e)}var Xh=H(`ZodNumberFormat`,(e,t)=>{Jd.init(e,t),Jh.init(e,t)});function Zh(e){return jp(Xh,e)}var Qh=H(`ZodBoolean`,(e,t)=>{Yd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fm(e,t,n,r)});function $h(e){return Mp(Qh,e)}var eg=H(`ZodUnknown`,(e,t)=>{Xd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function tg(){return Np(eg)}var ng=H(`ZodNever`,(e,t)=>{Zd.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Im(e,t,n,r)});function rg(e){return Pp(ng,e)}var ig=H(`ZodArray`,(e,t)=>{xh(),$d.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vm(e,t,n,r),e.element=t.element},{min(e,t){return this.check(Vp(e,t))},nonempty(e){return this.check(Vp(1,e))},max(e,t){return this.check(Bp(e,t))},length(e,t){return this.check(Hp(e,t))},unwrap(){return this.element}});function ag(e,t){return tm(ig,e,t)}var og=H(`ZodObject`,(e,t)=>{xh(),of.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Um(e,t,n,r),Cl(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return hg(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(z(this._zod.def,{catchall:e}))},passthrough(){return this.clone(z(this._zod.def,{catchall:tg()}))},loose(){return this.clone(z(this._zod.def,{catchall:tg()}))},strict(){return this.clone(z(this._zod.def,{catchall:rg()}))},strip(){return this.clone(z(this._zod.def,{catchall:void 0}))},extend(e){return Zc(this,e)},safeExtend(e){return $c(this,e)},merge(e){return el(this,e)},pick(e){return Jc(this,e)},omit(e){return Xc(this,e)},partial(...e){return tl(bg,this,e[0])},exactPartial(...e){return tl(Sg,this,e[0],`exactPartial`)},required(...e){return nl(Ag,this,e[0])}});function sg(e,t){return new og({type:`object`,shape:e??{},...B(t)})}var cg=H(`ZodUnion`,(e,t)=>{cf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wm(e,t,n,r),e.options=t.options});function lg(e,t){return new cg({type:`union`,options:e,...B(t)})}var ug=H(`ZodIntersection`,(e,t)=>{lf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gm(e,t,n,r)});function dg(e,t){return new ug({type:`intersection`,left:e,right:t})}var fg=H(`ZodRecord`,(e,t)=>{xh(),ff.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ym(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function pg(e,t,n){return!t||!t._zod?new fg({type:`record`,keyType:wh(),valueType:e,...B(t)}):new fg({type:`record`,keyType:e,valueType:t,...B(n)})}var mg=H(`ZodEnum`,(e,t)=>{pf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Lm(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new mg({...t,checks:[],...B(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new mg({...t,checks:[],...B(r),entries:i})}});function hg(e,t){return new mg({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...B(t)})}var gg=H(`ZodLiteral`,(e,t)=>{mf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rm(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function _g(e,t){return new gg({type:`literal`,values:Array.isArray(e)?e:[e],...B(t)})}var vg=H(`ZodTransform`,(e,t)=>{xh(),hf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bm(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new jl(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(pl(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(pl(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function yg(e){return new vg({type:`transform`,transform:e})}var bg=H(`ZodOptional`,(e,t)=>{_f.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ah(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function xg(e){return new bg({type:`optional`,innerType:e})}var Sg=H(`ZodExactOptional`,(e,t)=>{vf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ah(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Cg(e){return new Sg({type:`optional`,innerType:e})}var wg=H(`ZodNullable`,(e,t)=>{yf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xm(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Tg(e){return new wg({type:`nullable`,innerType:e})}var Eg=H(`ZodDefault`,(e,t)=>{bf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Dg(e,t){return new Eg({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Bc(t)}})}var Og=H(`ZodPrefault`,(e,t)=>{Sf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>th(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kg(e,t){return new Og({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Bc(t)}})}var Ag=H(`ZodNonOptional`,(e,t)=>{Cf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zm(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function jg(e,t){return new Ag({type:`nonoptional`,innerType:e,...B(t)})}var Mg=H(`ZodCatch`,(e,t)=>{Ef.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nh(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ng(e,t){return new Mg({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:Tl(t)})}var Pg=H(`ZodPipe`,(e,t)=>{Df.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rh(e,t,n,r),e.in=t.in,e.out=t.out});function Fg(e,t){return new Pg({type:`pipe`,in:e,out:t})}var Ig=H(`ZodReadonly`,(e,t)=>{kf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ih(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Lg(e){return new Ig({type:`readonly`,innerType:e})}var Rg=H(`ZodCustom`,(e,t)=>{jf.init(e,t),Q.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zm(e,t,n,r)});function zg(e,t={}){return nm(Rg,e,t)}function Bg(e,t){return rm(e,t)}var Vg=`spinifex:v2:aws-session`,Hg=sg({accessKeyId:wh().min(16,`Access Key ID must be at least 16 characters`),secretAccessKey:wh().min(1,`Secret Access Key is required`)}),Ug=sg({accessKeyId:wh().min(1),secretAccessKey:wh().min(1),sessionToken:wh().min(1),expiration:wh().min(1)}),Wg;function Gg(e){let t=Date.parse(e);return Number.isNaN(t)||t<=Date.now()}function Kg(){try{let e=localStorage.getItem(Vg);if(!e)return null;let t=JSON.parse(e),n=Ug.safeParse(t);return n.success?n.data:null}catch{return null}}function qg(){return Wg===void 0&&(Wg=Kg()),Wg&&Gg(Wg.expiration)?(Yg(),null):Wg}function Jg(e){try{localStorage.setItem(Vg,JSON.stringify(e)),Wg=e}catch{Wg=e}}function Yg(){try{localStorage.removeItem(Vg)}catch{}Wg=null}var Xg=sg({region:wh().min(1),ochreEnabled:$h().default(!1)}),Zg=null;async function Qg(){let e=await fetch(`/api/config`,{cache:`no-store`});if(!e.ok)throw Error(`could not load cluster config: HTTP ${e.status}`);let t=Xg.safeParse(await e.json());if(!t.success){let e=t.error.issues.some(e=>e.path.length===0);throw TypeError(e?`cluster config was not an object`:`cluster config did not include a region`)}Zg=t.data}function $g(){if(!Zg)throw Error(`cluster config has not been loaded`);return Zg.region}function e_(){if(!Zg)throw Error(`cluster config has not been loaded`);return Zg.ochreEnabled}export{Fa as $,At as $t,Yo as A,qn as At,io as B,dn as Bt,ec as C,Ur as Ct,Bs as D,kr as Dt,qs as E,jr as Et,Io as F,Tn as Ft,$a as G,Ht as Gt,ao as H,j as Ht,Ao as I,xn as It,Ua as J,zt as Jt,Ya as K,Vt as Kt,To as L,bn as Lt,Bo as M,Yn as Mt,Vo as N,$n as Nt,Fs as O,Dr as Ot,Ro as P,En as Pt,Ia as Q,A as Qt,wo as R,_n as Rt,tc as S,Yr as St,Zs as T,P as Tt,no as U,Zt as Ut,ro as V,ln as Vt,eo as W,Yt as Wt,La as X,It as Xt,Ba as Y,Rt as Yt,L as Z,Mt as Zt,lg as _,Oi as _t,Yg as a,dt as an,qi as at,ac as b,$r as bt,hg as c,gt as cn,Wi as ct,Zh as d,s as dn,Ri as dt,vt as en,ja as et,_g as f,Li as ft,wh as g,Ei as gt,pg as h,ki as ht,Hg as i,ct as in,Yi as it,Jo as j,er as jt,Xo as k,pr as kt,ag as l,mt as ln,Ui as lt,sg as m,ji as mt,e_ as n,_t as nn,$i as nt,qg as o,lt as on,Ki as ot,Yh as p,Ii as pt,Wa as q,Bt as qt,Qg as r,yt as rn,Ji as rt,Jg as s,ft as sn,Gi as st,$g as t,ot as tn,na as tt,$h as u,pt as un,zi as ut,vc as v,Di as vt,$s as w,Nr as wt,nc as x,Xr as xt,sc as y,Ti as yt,so as z,vn as zt}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-k5LqEmTn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-Sj-k2ZCd.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-k5LqEmTn.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-Sj-k2ZCd.js index 8e7c36c1d..0debd63d1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-k5LqEmTn.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/collapsible-Sj-k2ZCd.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{a as i,d as a,i as o,l as s,n as c,r as l,s as u,t as d}from"./useValueAsRef-F56m8WbP.js";import{c as f,n as p,r as m,u as h}from"./dist-BKgR2qk6.js";import{_ as g,o as _,r as v,s as y}from"./button-BarTr35m.js";import{f as b,g as x,t as S,w as C}from"./createBaseUIEventDetails-DL-8egB9.js";import{t as w}from"./useControlled-DwxdYHYK.js";var T=t(n(),1);function E(e){let{open:t,defaultOpen:n=!1,onOpenChange:r,disabled:i}=e,[a,o]=w({controlled:t,default:n,name:`Collapsible`,state:`open`}),{mounted:s,setMounted:c,transitionStatus:u}=l(a,!0,!0),d=C(),[f,p]=T.useState(),m=f===null?void 0:f??d,h=y(e=>{let t=!a,n=S(x,e.nativeEvent);r(t,n),!n.isCanceled&&o(t)});return T.useMemo(()=>({defaultPanelId:d,disabled:i,handleTrigger:h,mounted:s,open:a,panelId:m,setMounted:c,setOpen:o,setPanelIdState:p,transitionStatus:u}),[d,i,h,s,a,m,c,o,p,u])}var D=T.createContext(void 0);function O(){let e=T.useContext(D);if(e===void 0)throw Error(h(15));return e}var k=`data-open`,A=`data-closed`,j=a,M=`data-panel-open`,N={[k]:``},P={[A]:``},F={open(e){return e?{[M]:``}:null}},I={open(e){return e?N:P},...s},L=e(),R=T.forwardRef(function(e,t){let{render:n,className:r,defaultOpen:i=!1,disabled:a=!1,onOpenChange:o,open:s,style:c,...l}=e,u=y(o),d=E({open:s,defaultOpen:i,onOpenChange:u,disabled:a}),f=T.useMemo(()=>({open:d.open,disabled:d.disabled,transitionStatus:d.transitionStatus}),[d.open,d.disabled,d.transitionStatus]),m=T.useMemo(()=>({...d,onOpenChange:u,state:f}),[d,u,f]),h=p(`div`,e,{state:f,ref:t,props:l,stateAttributesMapping:I});return(0,L.jsx)(D.Provider,{value:m,children:h})}),z={...F,...s},B=T.forwardRef(function(e,t){let{panelId:n,open:r,handleTrigger:i,state:a,disabled:o}=O(),{className:s,disabled:c=o,render:l,nativeButton:u=!0,style:d,...f}=e,{getButtonProps:m,buttonRef:h}=v({disabled:c,focusableWhenDisabled:!0,native:u});return p(`button`,e,{state:a,ref:[t,h],props:[{"aria-controls":r?n:void 0,"aria-expanded":r,onClick:i},f,m],stateAttributesMapping:z})}),V={height:void 0,width:void 0};function H(e){let{externalRef:t,hiddenUntilFound:n,id:r,keepMounted:a,mounted:s,onOpenChange:l,open:p,setMounted:m,setOpen:h,transitionStatus:g}=e,v=T.useRef(null),x=T.useRef(null),[C,w]=T.useState(V),E=T.useRef(V),D=T.useRef(!1),O=T.useRef(p),k=T.useRef(!1),[A,M]=T.useState(!1),N=T.useRef(null),P=f(t,v),F=d(p),I=i(v),L=!p&&!s,R=A?`idle`:g,z=p&&(O.current||k.current),B=!p&&s&&x.current===`css-animation`&&C.height===void 0&&C.width===void 0?E.current:C,H=n&&L&&x.current!==`css-animation`,G=y((e,t=!0)=>{t&&(E.current=e),w(e)}),J=y(()=>{N.current?.(),N.current=null}),Y=y(e=>{J(),N.current=()=>{N.current=null,e()}}),X=y(()=>{p&&s&&x.current===`css-animation`&&(k.current=!0)});_(()=>{A&&g!==`starting`&&M(!1)},[A,g]),T.useEffect(()=>()=>{X(),J()},[X,J]),_(()=>{let e=v.current;if(!e)return;!p&&N.current&&J();let t=W(e,z);if(x.current=t,p&&g===`idle`&&O.current&&t===`css-animation`){E.current=U(e);return}if(p&&g===`starting`){let n=D.current;if(D.current=!1,t===`none`){G(U(e)),M(!0);return}if(t===`css-transition`){let t=q(e);if(G(U(e)),!n)return t;let r=K(e,`transition-duration`,`0s`);return Y(r),M(!0),t}G(U(e));let r=K(e,`animation-name`,`none`);if(!n){r();return}let i=K(e,`animation-duration`,`0s`);r(),Y(i),M(!0);return}if(!p&&s&&(g===`idle`||g===`starting`)){if(O.current=!1,k.current=!1,t===`none`){G(V,!1),m(!1);return}G(U(e));return}if(g!==`ending`)return;if(t===`none`){m(!1);return}let n=U(e);if(!(n.height>0||n.width>0)){m(!1);return}G(n),t===`css-animation`&&K(e,`animation-name`,`none`)()},[s,p,J,G,m,Y,z,g]),o({enabled:p&&s&&R===`idle`,open:!0,ref:v,onComplete(){p&&G(V,!1)}}),T.useEffect(()=>{if(p||!s||R!==`ending`||!v.current)return;let e=new AbortController,t=-1;function n(){F.current||(m(!1),G(V,!1))}return t=u.request(()=>{I(n,e.signal)}),()=>{u.cancel(t),e.abort()}},[F,s,p,R,I,G,m]),_(()=>{let e=v.current;e&&n&&L&&e.setAttribute(`hidden`,`until-found`)},[L,n]),T.useEffect(function(){let e=v.current;if(!e)return;function t(e){let t=S(b,e);l(!0,t),!t.isCanceled&&(D.current=!0,h(!0))}return c(e,`beforematch`,t)},[l,h]);let Z=a||n||s||p;return{height:B.height,props:{...H?{[j]:``}:void 0,hidden:L,id:r},ref:P,shouldPreventOpenAnimation:z,shouldRender:Z,transitionStatus:R,width:B.width}}function U(e){return{height:e.scrollHeight,width:e.scrollWidth}}function W(e,t){let n=g(e).getComputedStyle(e),r=(n.animationName.split(`,`).map(e=>e.trim()).some(e=>e!==``&&e!==`none`)||t)&&G(n.animationDuration),i=G(n.transitionDuration);return r&&i||i?`css-transition`:r?`css-animation`:`none`}function G(e){return e.split(`,`).map(e=>e.trim()).some(e=>e!==``&&Number.parseFloat(e)>0)}function K(e,t,n){let r=e.style.getPropertyValue(t),i=e.style.getPropertyPriority(t);return e.style.setProperty(t,n),()=>{if(r===``){e.style.removeProperty(t);return}e.style.setProperty(t,r,i)}}function q(e){let t={"justify-content":e.style.justifyContent,"align-items":e.style.alignItems,"align-content":e.style.alignContent,"justify-items":e.style.justifyItems};Object.keys(t).forEach(t=>{e.style.setProperty(t,`initial`,`important`)});function n(){Object.entries(t).forEach(([t,n])=>{if(n===``){e.style.removeProperty(t);return}e.style.setProperty(t,n)})}let r=u.request(n);return()=>{u.cancel(r),n()}}var J=`--collapsible-panel-height`,Y=`--collapsible-panel-width`,X=T.forwardRef(function(e,t){let{className:n,hiddenUntilFound:r,keepMounted:i,render:a,id:o,style:s,...c}=e,{defaultPanelId:l,mounted:u,onOpenChange:d,open:f,setMounted:h,setPanelIdState:g,setOpen:v,state:y,transitionStatus:b}=O(),x=r??!1,S=i??!1,C=o||void 0,w=C??l;_(()=>(g(e=>C??(e===null?void 0:e)),()=>{g(e=>e===C?null:e)}),[C,g]);let{height:T,props:E,ref:D,shouldPreventOpenAnimation:k,shouldRender:A,transitionStatus:j,width:M}=H({externalRef:t,hiddenUntilFound:x,id:w,keepMounted:S,mounted:u,onOpenChange:d,open:f,setMounted:h,setOpen:v,transitionStatus:b}),N={...y,transitionStatus:j},P=m(s,N),F=p(`div`,{...e,style:void 0},{state:N,ref:D,props:[E,{style:{[J]:T===void 0?`auto`:`${T}px`,[Y]:M===void 0?`auto`:`${M}px`}},c,P?{style:P}:void 0,k?{style:{animationName:`none`}}:void 0],stateAttributesMapping:I});return A?F:null}),Z=r();function Q(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(R,{"data-slot":`collapsible`,...n}),t[2]=n,t[3]=r),r}function $(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(B,{"data-slot":`collapsible-trigger`,...n}),t[2]=n,t[3]=r),r}function ee(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(X,{"data-slot":`collapsible-content`,...n}),t[2]=n,t[3]=r),r}export{ee as n,$ as r,Q as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{a as i,d as a,i as o,l as s,n as c,r as l,s as u,t as d}from"./useValueAsRef-hoe2gsyn.js";import{c as f,n as p,r as m,u as h}from"./dist-DeC3TnAR.js";import{_ as g,o as _,r as v,s as y}from"./button-qf9lLJ2x.js";import{f as b,g as x,t as S,w as C}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{t as w}from"./useControlled-DwxdYHYK.js";var T=t(n(),1);function E(e){let{open:t,defaultOpen:n=!1,onOpenChange:r,disabled:i}=e,[a,o]=w({controlled:t,default:n,name:`Collapsible`,state:`open`}),{mounted:s,setMounted:c,transitionStatus:u}=l(a,!0,!0),d=C(),[f,p]=T.useState(),m=f===null?void 0:f??d,h=y(e=>{let t=!a,n=S(x,e.nativeEvent);r(t,n),!n.isCanceled&&o(t)});return T.useMemo(()=>({defaultPanelId:d,disabled:i,handleTrigger:h,mounted:s,open:a,panelId:m,setMounted:c,setOpen:o,setPanelIdState:p,transitionStatus:u}),[d,i,h,s,a,m,c,o,p,u])}var D=T.createContext(void 0);function O(){let e=T.useContext(D);if(e===void 0)throw Error(h(15));return e}var k=`data-open`,A=`data-closed`,j=a,M=`data-panel-open`,N={[k]:``},P={[A]:``},F={open(e){return e?{[M]:``}:null}},I={open(e){return e?N:P},...s},L=e(),R=T.forwardRef(function(e,t){let{render:n,className:r,defaultOpen:i=!1,disabled:a=!1,onOpenChange:o,open:s,style:c,...l}=e,u=y(o),d=E({open:s,defaultOpen:i,onOpenChange:u,disabled:a}),f=T.useMemo(()=>({open:d.open,disabled:d.disabled,transitionStatus:d.transitionStatus}),[d.open,d.disabled,d.transitionStatus]),m=T.useMemo(()=>({...d,onOpenChange:u,state:f}),[d,u,f]),h=p(`div`,e,{state:f,ref:t,props:l,stateAttributesMapping:I});return(0,L.jsx)(D.Provider,{value:m,children:h})}),z={...F,...s},B=T.forwardRef(function(e,t){let{panelId:n,open:r,handleTrigger:i,state:a,disabled:o}=O(),{className:s,disabled:c=o,render:l,nativeButton:u=!0,style:d,...f}=e,{getButtonProps:m,buttonRef:h}=v({disabled:c,focusableWhenDisabled:!0,native:u});return p(`button`,e,{state:a,ref:[t,h],props:[{"aria-controls":r?n:void 0,"aria-expanded":r,onClick:i},f,m],stateAttributesMapping:z})}),V={height:void 0,width:void 0};function H(e){let{externalRef:t,hiddenUntilFound:n,id:r,keepMounted:a,mounted:s,onOpenChange:l,open:p,setMounted:m,setOpen:h,transitionStatus:g}=e,v=T.useRef(null),x=T.useRef(null),[C,w]=T.useState(V),E=T.useRef(V),D=T.useRef(!1),O=T.useRef(p),k=T.useRef(!1),[A,M]=T.useState(!1),N=T.useRef(null),P=f(t,v),F=d(p),I=i(v),L=!p&&!s,R=A?`idle`:g,z=p&&(O.current||k.current),B=!p&&s&&x.current===`css-animation`&&C.height===void 0&&C.width===void 0?E.current:C,H=n&&L&&x.current!==`css-animation`,G=y((e,t=!0)=>{t&&(E.current=e),w(e)}),J=y(()=>{N.current?.(),N.current=null}),Y=y(e=>{J(),N.current=()=>{N.current=null,e()}}),X=y(()=>{p&&s&&x.current===`css-animation`&&(k.current=!0)});_(()=>{A&&g!==`starting`&&M(!1)},[A,g]),T.useEffect(()=>()=>{X(),J()},[X,J]),_(()=>{let e=v.current;if(!e)return;!p&&N.current&&J();let t=W(e,z);if(x.current=t,p&&g===`idle`&&O.current&&t===`css-animation`){E.current=U(e);return}if(p&&g===`starting`){let n=D.current;if(D.current=!1,t===`none`){G(U(e)),M(!0);return}if(t===`css-transition`){let t=q(e);if(G(U(e)),!n)return t;let r=K(e,`transition-duration`,`0s`);return Y(r),M(!0),t}G(U(e));let r=K(e,`animation-name`,`none`);if(!n){r();return}let i=K(e,`animation-duration`,`0s`);r(),Y(i),M(!0);return}if(!p&&s&&(g===`idle`||g===`starting`)){if(O.current=!1,k.current=!1,t===`none`){G(V,!1),m(!1);return}G(U(e));return}if(g!==`ending`)return;if(t===`none`){m(!1);return}let n=U(e);if(!(n.height>0||n.width>0)){m(!1);return}G(n),t===`css-animation`&&K(e,`animation-name`,`none`)()},[s,p,J,G,m,Y,z,g]),o({enabled:p&&s&&R===`idle`,open:!0,ref:v,onComplete(){p&&G(V,!1)}}),T.useEffect(()=>{if(p||!s||R!==`ending`||!v.current)return;let e=new AbortController,t=-1;function n(){F.current||(m(!1),G(V,!1))}return t=u.request(()=>{I(n,e.signal)}),()=>{u.cancel(t),e.abort()}},[F,s,p,R,I,G,m]),_(()=>{let e=v.current;e&&n&&L&&e.setAttribute(`hidden`,`until-found`)},[L,n]),T.useEffect(function(){let e=v.current;if(!e)return;function t(e){let t=S(b,e);l(!0,t),!t.isCanceled&&(D.current=!0,h(!0))}return c(e,`beforematch`,t)},[l,h]);let Z=a||n||s||p;return{height:B.height,props:{...H?{[j]:``}:void 0,hidden:L,id:r},ref:P,shouldPreventOpenAnimation:z,shouldRender:Z,transitionStatus:R,width:B.width}}function U(e){return{height:e.scrollHeight,width:e.scrollWidth}}function W(e,t){let n=g(e).getComputedStyle(e),r=(n.animationName.split(`,`).map(e=>e.trim()).some(e=>e!==``&&e!==`none`)||t)&&G(n.animationDuration),i=G(n.transitionDuration);return r&&i||i?`css-transition`:r?`css-animation`:`none`}function G(e){return e.split(`,`).map(e=>e.trim()).some(e=>e!==``&&Number.parseFloat(e)>0)}function K(e,t,n){let r=e.style.getPropertyValue(t),i=e.style.getPropertyPriority(t);return e.style.setProperty(t,n),()=>{if(r===``){e.style.removeProperty(t);return}e.style.setProperty(t,r,i)}}function q(e){let t={"justify-content":e.style.justifyContent,"align-items":e.style.alignItems,"align-content":e.style.alignContent,"justify-items":e.style.justifyItems};Object.keys(t).forEach(t=>{e.style.setProperty(t,`initial`,`important`)});function n(){Object.entries(t).forEach(([t,n])=>{if(n===``){e.style.removeProperty(t);return}e.style.setProperty(t,n)})}let r=u.request(n);return()=>{u.cancel(r),n()}}var J=`--collapsible-panel-height`,Y=`--collapsible-panel-width`,X=T.forwardRef(function(e,t){let{className:n,hiddenUntilFound:r,keepMounted:i,render:a,id:o,style:s,...c}=e,{defaultPanelId:l,mounted:u,onOpenChange:d,open:f,setMounted:h,setPanelIdState:g,setOpen:v,state:y,transitionStatus:b}=O(),x=r??!1,S=i??!1,C=o||void 0,w=C??l;_(()=>(g(e=>C??(e===null?void 0:e)),()=>{g(e=>e===C?null:e)}),[C,g]);let{height:T,props:E,ref:D,shouldPreventOpenAnimation:k,shouldRender:A,transitionStatus:j,width:M}=H({externalRef:t,hiddenUntilFound:x,id:w,keepMounted:S,mounted:u,onOpenChange:d,open:f,setMounted:h,setOpen:v,transitionStatus:b}),N={...y,transitionStatus:j},P=m(s,N),F=p(`div`,{...e,style:void 0},{state:N,ref:D,props:[E,{style:{[J]:T===void 0?`auto`:`${T}px`,[Y]:M===void 0?`auto`:`${M}px`}},c,P?{style:P}:void 0,k?{style:{animationName:`none`}}:void 0],stateAttributesMapping:I});return A?F:null}),Z=r();function Q(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(R,{"data-slot":`collapsible`,...n}),t[2]=n,t[3]=r),r}function $(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(B,{"data-slot":`collapsible-trigger`,...n}),t[2]=n,t[3]=r),r}function ee(e){let t=(0,Z.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,L.jsx)(X,{"data-slot":`collapsible-content`,...n}),t[2]=n,t[3]=r),r}export{ee as n,$ as r,Q as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BH-JcvCM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BH-JcvCM.js deleted file mode 100644 index d0e03a17f..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BH-JcvCM.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{Aa as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`AmazonBedrockAgentBuildTimeLambda`,`BedrockAgentClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BIU1eEwl.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BIU1eEwl.js new file mode 100644 index 000000000..067383859 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BIU1eEwl.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{Rn as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`ElasticLoadBalancing_v10`,`ElasticLoadBalancingV2Client`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BKyTM0Ga.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BKyTM0Ga.js new file mode 100644 index 000000000..61d111acf --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BKyTM0Ga.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{un as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`AWSIdentityManagementV20100508`,`IAMClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BLgOdGhm.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BLgOdGhm.js deleted file mode 100644 index b18984833..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BLgOdGhm.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{_a as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`AmazonBedrockFrontendService`,`BedrockRuntimeClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BieYN8IF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BieYN8IF.js new file mode 100644 index 000000000..eceb06e20 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-BieYN8IF.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{ka as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`AmazonBedrockAgentBuildTimeLambda`,`BedrockAgentClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CU-BmScO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CU-BmScO.js new file mode 100644 index 000000000..cdff1fd60 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CU-BmScO.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{cr as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`AWSWesleyFrontend`,`EKSClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CoLHZwsC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CoLHZwsC.js deleted file mode 100644 index be4ed3fea..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CoLHZwsC.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{un as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`AWSIdentityManagementV20100508`,`IAMClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CyJu3wq4.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CyJu3wq4.js deleted file mode 100644 index c1fa5862a..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-CyJu3wq4.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{Ra as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`AmazonBedrockControlPlaneService`,`BedrockClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D0AzsM22.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D0AzsM22.js new file mode 100644 index 000000000..aa3b2ecde --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D0AzsM22.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{La as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`AmazonBedrockControlPlaneService`,`BedrockClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D669HwKx.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D669HwKx.js new file mode 100644 index 000000000..d26b74eb9 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-D669HwKx.js @@ -0,0 +1 @@ +import{Lt as e,vt as t}from"./cluster-config-DkOiY8HH.js";import{ga as n}from"./awsClient-Cqp6x3OY.js";var r=e(n,`AmazonBedrockFrontendService`,`BedrockRuntimeClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DOzu_YCE.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DOzu_YCE.js deleted file mode 100644 index e3527a328..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DOzu_YCE.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{lr as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`AWSWesleyFrontend`,`EKSClient`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DzFUl2wS.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DzFUl2wS.js deleted file mode 100644 index 2090c0740..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/commandBuilder-DzFUl2wS.js +++ /dev/null @@ -1 +0,0 @@ -import{It as e,_t as t}from"./cluster-config-xw_Q7X1e.js";import{Rn as n}from"./awsClient-b0hcP1Iz.js";var r=e(n,`ElasticLoadBalancing_v10`,`ElasticLoadBalancingV2Client`,t),i={},a=(e,t,n,r)=>[];export{a as n,r,i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-CoZioQAG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-DP60zgai.js similarity index 62% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-CoZioQAG.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-DP60zgai.js index 4632c7d2a..36aeedfcc 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-CoZioQAG.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-DP60zgai.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{s as n}from"./bedrock-7XDhMm-7.js";import{t as r}from"./guardrail-form-page-C6v-izo3.js";var i=t(),a=e();function o(){let e=(0,i.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,a.jsx)(r,{defaultValues:n,mode:`create`}),e[0]=t):t=e[0],t}export{o as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{s as n}from"./bedrock-ktyVzA00.js";import{t as r}from"./guardrail-form-page-BDQeV5zm.js";var i=t(),a=e();function o(){let e=(0,i.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,a.jsx)(r,{defaultValues:n,mode:`create`}),e[0]=t):t=e[0],t}export{o as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-uNWIyxX8.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-b5D-gsjR.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-uNWIyxX8.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-b5D-gsjR.js index 176e453b1..c1f59ff14 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-uNWIyxX8.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-b5D-gsjR.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{t as te}from"./back-link-CjKy1JE5.js";import{c as ne,i as r,n as re,s as ie,t as ae}from"./select-B01jpDaX.js";import{t as i}from"./input-6kdUb_DH.js";import{t as oe}from"./bedrock-Ct-f5HCJ.js";import{c as se,l as ce,n as le,o as ue}from"./bedrockAgent-BL6fVxPp.js";import{t as de}from"./page-heading-vksh_67w.js";import{i as fe,n as pe,t as me}from"./zod-DF_n2ejy.js";import{t as he}from"./error-banner-DeOeVBKS.js";import{t as ge}from"./form-actions-BUM37An0.js";import{n as a,r as o,s,t as c}from"./field-c7GHI5st.js";import{t as _e}from"./textarea-n04EavUm.js";var ve=t(),l=e();function u(){let e=(0,ve.c)(85),t=ee(),r=le(),{data:u}=n(oe),d;e[0]===u.modelSummaries?d=e[1]:(d=u.modelSummaries??[],e[0]=u.modelSummaries,e[1]=d);let f;e[2]===d?f=e[3]:(f=d.filter(be),e[2]=d,e[3]=f);let p=f,m;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(m={resolver:me(ce),defaultValues:ue},e[4]=m):m=e[4];let{control:xe,formState:Se,handleSubmit:Ce,register:h,setValue:we}=fe(m),{errors:g,isSubmitting:Te}=Se,_;e[5]!==r||e[6]!==t?(_=async e=>{let n=await r.mutateAsync(e);await t({params:{knowledgeBaseId:n.knowledgeBase?.knowledgeBaseId??``},to:`/bedrock/list-knowledge-bases/$knowledgeBaseId`})},e[5]=r,e[6]=t,e[7]=_):_=e[7];let v=_,y;e[8]===t?y=e[9]:(y=async()=>{await t({to:`/bedrock/list-knowledge-bases`})},e[8]=t,e[9]=y);let Ee=y,b,x,S;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,l.jsx)(te,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),x=(0,l.jsx)(de,{title:`Create Knowledge Base`}),S=(0,l.jsx)(a,{className:`mb-6 max-w-4xl`,children:`After the knowledge base is created, add one or more S3 data sources to it from its detail page, then run an ingestion job to load them.`}),e[10]=b,e[11]=x,e[12]=S):(b=e[10],x=e[11],S=e[12]);let C;e[13]===r.error?C=e[14]:(C=r.error&&(0,l.jsx)(he,{error:r.error,msg:`Failed to create the knowledge base`}),e[13]=r.error,e[14]=C);let w;e[15]!==Ce||e[16]!==v?(w=Ce(v),e[15]=Ce,e[16]=v,e[17]=w):w=e[17];let T;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-name`,children:`Name`})}),e[18]=T):T=e[18];let E=!!g.name,D;e[19]===h?D=e[20]:(D=h(`name`),e[19]=h,e[20]=D);let O;e[21]!==E||e[22]!==D?(O=(0,l.jsx)(i,{"aria-invalid":E,id:`kb-name`,placeholder:`product-docs`,...D}),e[21]=E,e[22]=D,e[23]=O):O=e[23];let k;e[24]===g.name?k=e[25]:(k=(0,l.jsx)(o,{errors:[g.name]}),e[24]=g.name,e[25]=k);let A;e[26]!==O||e[27]!==k?(A=(0,l.jsxs)(c,{children:[T,O,k]}),e[26]=O,e[27]=k,e[28]=A):A=e[28];let j;e[29]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-description`,children:`Description`})}),e[29]=j):j=e[29];let M;e[30]===h?M=e[31]:(M=h(`description`),e[30]=h,e[31]=M);let N;e[32]===M?N=e[33]:(N=(0,l.jsx)(_e,{id:`kb-description`,placeholder:`Optional`,rows:2,...M}),e[32]=M,e[33]=N);let P;e[34]===g.description?P=e[35]:(P=(0,l.jsx)(o,{errors:[g.description]}),e[34]=g.description,e[35]=P);let F;e[36]!==N||e[37]!==P?(F=(0,l.jsxs)(c,{children:[j,N,P]}),e[36]=N,e[37]=P,e[38]=F):F=e[38];let I;e[39]!==p||e[40]!==we?(I=e=>{let{field:t,fieldState:n}=e;return(0,l.jsxs)(c,{children:[(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-embedding-model`,children:`Embedding model`})}),(0,l.jsxs)(ae,{onValueChange:e=>{t.onChange(e??``);let n=se(e??``);n&&we(`dimensions`,n)},value:t.value,children:[(0,l.jsx)(ie,{"aria-invalid":!!n.error,className:`w-full`,id:`kb-embedding-model`,children:(0,l.jsx)(ne,{placeholder:`Select an embedding model`})}),(0,l.jsx)(re,{children:p.map(ye)})]}),(0,l.jsx)(o,{errors:[n.error]})]})},e[39]=p,e[40]=we,e[41]=I):I=e[41];let L;e[42]!==xe||e[43]!==I?(L=(0,l.jsx)(pe,{control:xe,name:`embeddingModelArn`,render:I}),e[42]=xe,e[43]=I,e[44]=L):L=e[44];let R;e[45]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-dimensions`,children:`Dimensions`})}),e[45]=R):R=e[45];let De=!!g.dimensions,z;e[46]===h?z=e[47]:(z=h(`dimensions`,{valueAsNumber:!0}),e[46]=h,e[47]=z);let B;e[48]!==De||e[49]!==z?(B=(0,l.jsx)(i,{"aria-invalid":De,id:`kb-dimensions`,min:1,type:`number`,...z}),e[48]=De,e[49]=z,e[50]=B):B=e[50];let V;e[51]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,l.jsx)(a,{children:`Vector size the chosen embedding model produces.`}),e[51]=V):V=e[51];let H;e[52]===g.dimensions?H=e[53]:(H=(0,l.jsx)(o,{errors:[g.dimensions]}),e[52]=g.dimensions,e[53]=H);let U;e[54]!==B||e[55]!==H?(U=(0,l.jsxs)(c,{children:[R,B,V,H]}),e[54]=B,e[55]=H,e[56]=U):U=e[56];let W;e[57]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-role-arn`,children:`Role ARN`})}),e[57]=W):W=e[57];let G;e[58]===h?G=e[59]:(G=h(`roleArn`),e[58]=h,e[59]=G);let K;e[60]===G?K=e[61]:(K=(0,l.jsx)(i,{id:`kb-role-arn`,placeholder:`Optional`,...G}),e[60]=G,e[61]=K);let q;e[62]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,l.jsx)(a,{children:`Stored and echoed back only; leave blank to use a default.`}),e[62]=q):q=e[62];let J;e[63]===g.roleArn?J=e[64]:(J=(0,l.jsx)(o,{errors:[g.roleArn]}),e[63]=g.roleArn,e[64]=J);let Y;e[65]!==K||e[66]!==J?(Y=(0,l.jsxs)(c,{children:[W,K,q,J]}),e[65]=K,e[66]=J,e[67]=Y):Y=e[67];let X;e[68]===Ee?X=e[69]:(X=()=>{Ee()},e[68]=Ee,e[69]=X);let Z;e[70]!==r.isPending||e[71]!==Te||e[72]!==X?(Z=(0,l.jsx)(ge,{isPending:r.isPending,isSubmitting:Te,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Knowledge Base`}),e[70]=r.isPending,e[71]=Te,e[72]=X,e[73]=Z):Z=e[73];let Q;e[74]!==w||e[75]!==A||e[76]!==F||e[77]!==L||e[78]!==U||e[79]!==Y||e[80]!==Z?(Q=(0,l.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:w,children:[A,F,L,U,Y,Z]}),e[74]=w,e[75]=A,e[76]=F,e[77]=L,e[78]=U,e[79]=Y,e[80]=Z,e[81]=Q):Q=e[81];let $;return e[82]!==Q||e[83]!==C?($=(0,l.jsxs)(l.Fragment,{children:[b,x,S,C,Q]}),e[82]=Q,e[83]=C,e[84]=$):$=e[84],$}function ye(e){return(0,l.jsx)(r,{value:e.modelArn??``,children:e.modelName??e.modelId},e.modelArn)}function be(e){return e.outputModalities?.includes(`EMBEDDING`)}var d=u;export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{t as te}from"./back-link-wsXUoJ12.js";import{c as ne,i as r,n as re,s as ie,t as ae}from"./select-Cn66OoPn.js";import{t as i}from"./input-D3aUBtS6.js";import{t as oe}from"./bedrock-BF8FfWcf.js";import{c as se,l as ce,n as le,o as ue}from"./bedrockAgent-BE9dOa-O.js";import{t as de}from"./page-heading-vksh_67w.js";import{i as fe,n as pe,t as me}from"./zod-A4qtKH_p.js";import{t as he}from"./error-banner-DeOeVBKS.js";import{t as ge}from"./form-actions-DXvy9CQI.js";import{n as a,r as o,s,t as c}from"./field-CS-ql6du.js";import{t as _e}from"./textarea-DV1UO8hv.js";var ve=t(),l=e();function u(){let e=(0,ve.c)(85),t=ee(),r=le(),{data:u}=n(oe),d;e[0]===u.modelSummaries?d=e[1]:(d=u.modelSummaries??[],e[0]=u.modelSummaries,e[1]=d);let f;e[2]===d?f=e[3]:(f=d.filter(be),e[2]=d,e[3]=f);let p=f,m;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(m={resolver:me(ce),defaultValues:ue},e[4]=m):m=e[4];let{control:xe,formState:Se,handleSubmit:Ce,register:h,setValue:we}=fe(m),{errors:g,isSubmitting:Te}=Se,_;e[5]!==r||e[6]!==t?(_=async e=>{let n=await r.mutateAsync(e);await t({params:{knowledgeBaseId:n.knowledgeBase?.knowledgeBaseId??``},to:`/bedrock/list-knowledge-bases/$knowledgeBaseId`})},e[5]=r,e[6]=t,e[7]=_):_=e[7];let v=_,y;e[8]===t?y=e[9]:(y=async()=>{await t({to:`/bedrock/list-knowledge-bases`})},e[8]=t,e[9]=y);let Ee=y,b,x,S;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,l.jsx)(te,{to:`/bedrock/list-knowledge-bases`,children:`Back to knowledge bases`}),x=(0,l.jsx)(de,{title:`Create Knowledge Base`}),S=(0,l.jsx)(a,{className:`mb-6 max-w-4xl`,children:`After the knowledge base is created, add one or more S3 data sources to it from its detail page, then run an ingestion job to load them.`}),e[10]=b,e[11]=x,e[12]=S):(b=e[10],x=e[11],S=e[12]);let C;e[13]===r.error?C=e[14]:(C=r.error&&(0,l.jsx)(he,{error:r.error,msg:`Failed to create the knowledge base`}),e[13]=r.error,e[14]=C);let w;e[15]!==Ce||e[16]!==v?(w=Ce(v),e[15]=Ce,e[16]=v,e[17]=w):w=e[17];let T;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-name`,children:`Name`})}),e[18]=T):T=e[18];let E=!!g.name,D;e[19]===h?D=e[20]:(D=h(`name`),e[19]=h,e[20]=D);let O;e[21]!==E||e[22]!==D?(O=(0,l.jsx)(i,{"aria-invalid":E,id:`kb-name`,placeholder:`product-docs`,...D}),e[21]=E,e[22]=D,e[23]=O):O=e[23];let k;e[24]===g.name?k=e[25]:(k=(0,l.jsx)(o,{errors:[g.name]}),e[24]=g.name,e[25]=k);let A;e[26]!==O||e[27]!==k?(A=(0,l.jsxs)(c,{children:[T,O,k]}),e[26]=O,e[27]=k,e[28]=A):A=e[28];let j;e[29]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-description`,children:`Description`})}),e[29]=j):j=e[29];let M;e[30]===h?M=e[31]:(M=h(`description`),e[30]=h,e[31]=M);let N;e[32]===M?N=e[33]:(N=(0,l.jsx)(_e,{id:`kb-description`,placeholder:`Optional`,rows:2,...M}),e[32]=M,e[33]=N);let P;e[34]===g.description?P=e[35]:(P=(0,l.jsx)(o,{errors:[g.description]}),e[34]=g.description,e[35]=P);let F;e[36]!==N||e[37]!==P?(F=(0,l.jsxs)(c,{children:[j,N,P]}),e[36]=N,e[37]=P,e[38]=F):F=e[38];let I;e[39]!==p||e[40]!==we?(I=e=>{let{field:t,fieldState:n}=e;return(0,l.jsxs)(c,{children:[(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-embedding-model`,children:`Embedding model`})}),(0,l.jsxs)(ae,{onValueChange:e=>{t.onChange(e??``);let n=se(e??``);n&&we(`dimensions`,n)},value:t.value,children:[(0,l.jsx)(ie,{"aria-invalid":!!n.error,className:`w-full`,id:`kb-embedding-model`,children:(0,l.jsx)(ne,{placeholder:`Select an embedding model`})}),(0,l.jsx)(re,{children:p.map(ye)})]}),(0,l.jsx)(o,{errors:[n.error]})]})},e[39]=p,e[40]=we,e[41]=I):I=e[41];let L;e[42]!==xe||e[43]!==I?(L=(0,l.jsx)(pe,{control:xe,name:`embeddingModelArn`,render:I}),e[42]=xe,e[43]=I,e[44]=L):L=e[44];let R;e[45]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-dimensions`,children:`Dimensions`})}),e[45]=R):R=e[45];let De=!!g.dimensions,z;e[46]===h?z=e[47]:(z=h(`dimensions`,{valueAsNumber:!0}),e[46]=h,e[47]=z);let B;e[48]!==De||e[49]!==z?(B=(0,l.jsx)(i,{"aria-invalid":De,id:`kb-dimensions`,min:1,type:`number`,...z}),e[48]=De,e[49]=z,e[50]=B):B=e[50];let V;e[51]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,l.jsx)(a,{children:`Vector size the chosen embedding model produces.`}),e[51]=V):V=e[51];let H;e[52]===g.dimensions?H=e[53]:(H=(0,l.jsx)(o,{errors:[g.dimensions]}),e[52]=g.dimensions,e[53]=H);let U;e[54]!==B||e[55]!==H?(U=(0,l.jsxs)(c,{children:[R,B,V,H]}),e[54]=B,e[55]=H,e[56]=U):U=e[56];let W;e[57]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,l.jsx)(s,{children:(0,l.jsx)(`label`,{htmlFor:`kb-role-arn`,children:`Role ARN`})}),e[57]=W):W=e[57];let G;e[58]===h?G=e[59]:(G=h(`roleArn`),e[58]=h,e[59]=G);let K;e[60]===G?K=e[61]:(K=(0,l.jsx)(i,{id:`kb-role-arn`,placeholder:`Optional`,...G}),e[60]=G,e[61]=K);let q;e[62]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,l.jsx)(a,{children:`Stored and echoed back only; leave blank to use a default.`}),e[62]=q):q=e[62];let J;e[63]===g.roleArn?J=e[64]:(J=(0,l.jsx)(o,{errors:[g.roleArn]}),e[63]=g.roleArn,e[64]=J);let Y;e[65]!==K||e[66]!==J?(Y=(0,l.jsxs)(c,{children:[W,K,q,J]}),e[65]=K,e[66]=J,e[67]=Y):Y=e[67];let X;e[68]===Ee?X=e[69]:(X=()=>{Ee()},e[68]=Ee,e[69]=X);let Z;e[70]!==r.isPending||e[71]!==Te||e[72]!==X?(Z=(0,l.jsx)(ge,{isPending:r.isPending,isSubmitting:Te,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Knowledge Base`}),e[70]=r.isPending,e[71]=Te,e[72]=X,e[73]=Z):Z=e[73];let Q;e[74]!==w||e[75]!==A||e[76]!==F||e[77]!==L||e[78]!==U||e[79]!==Y||e[80]!==Z?(Q=(0,l.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:w,children:[A,F,L,U,Y,Z]}),e[74]=w,e[75]=A,e[76]=F,e[77]=L,e[78]=U,e[79]=Y,e[80]=Z,e[81]=Q):Q=e[81];let $;return e[82]!==Q||e[83]!==C?($=(0,l.jsxs)(l.Fragment,{children:[b,x,S,C,Q]}),e[82]=Q,e[83]=C,e[84]=$):$=e[84],$}function ye(e){return(0,l.jsx)(r,{value:e.modelArn??``,children:e.modelName??e.modelId},e.modelArn)}function be(e){return e.outputModalities?.includes(`EMBEDDING`)}var d=u;export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-B5kEkFpz.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-DxusrabG.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-B5kEkFpz.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-DxusrabG.js index 534d24f3f..7df766807 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-B5kEkFpz.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-bucket-DxusrabG.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{g as r,m as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./back-link-CjKy1JE5.js";import{t as o}from"./cli-command-panel-CLiFy1rG.js";import{t as s}from"./input-6kdUb_DH.js";import{t as c}from"./s3-DaPUyf7s.js";import{t as l}from"./page-heading-vksh_67w.js";import{a as u,i as d,t as f}from"./zod-DF_n2ejy.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./form-actions-BUM37An0.js";import{r as h,s as g,t as _}from"./field-c7GHI5st.js";var v=t(),y=i({bucketName:r().min(3,`Bucket name must be at least 3 characters`).max(63,`Bucket name must be at most 63 characters`).regex(/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/,`Must start and end with a lowercase letter or number`).regex(/^[a-z0-9.-]+$/,`Only lowercase letters, numbers, hyphens, and periods allowed`).refine(e=>!e.includes(`..`),`Must not contain consecutive periods`).refine(e=>!(e.includes(`.-`)||e.includes(`-.`)),`Must not contain adjacent period and hyphen`)}),b=e();function x(){let e=(0,v.c)(42),t=n(),r=c(),i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={resolver:f(y)},e[0]=i):i=e[0];let{handleSubmit:x,register:C,control:w,formState:T}=d(i),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=u(O),A;e[3]!==r||e[4]!==t?(A=async e=>{await r.mutateAsync(e),t({to:`/s3/ls`})},e[3]=r,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,b.jsx)(a,{to:`/s3/ls`,children:`Back to buckets`}),N=(0,b.jsx)(l,{title:`Create Bucket`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===r.error?P=e[9]:(P=r.error&&(0,b.jsx)(p,{error:r.error,msg:`Failed to create bucket`}),e[8]=r.error,e[9]=P);let F;e[10]!==x||e[11]!==j?(F=x(j),e[10]=x,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`bucketName`,children:`Bucket Name`})}),e[13]=I):I=e[13];let L=!!E.bucketName,R;e[14]===C?R=e[15]:(R=C(`bucketName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,b.jsx)(s,{"aria-invalid":L,id:`bucketName`,placeholder:`my-bucket`,type:`text`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.bucketName?B=e[20]:(B=(0,b.jsx)(h,{errors:[E.bucketName]}),e[19]=E.bucketName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,b.jsxs)(_,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===k?H=e[25]:(H=S(k),e[24]=k,e[25]=H);let U;e[26]===H?U=e[27]:(U=(0,b.jsx)(o,{commands:H}),e[26]=H,e[27]=U);let W;e[28]===t?W=e[29]:(W=async()=>{await t({to:`/s3/ls`})},e[28]=t,e[29]=W);let G;e[30]!==r.isPending||e[31]!==D||e[32]!==W?(G=(0,b.jsx)(m,{isPending:r.isPending,isSubmitting:D,onCancel:W,pendingLabel:`Creating…`,submitLabel:`Create Bucket`}),e[30]=r.isPending,e[31]=D,e[32]=W,e[33]=G):G=e[33];let K;e[34]!==V||e[35]!==U||e[36]!==G||e[37]!==F?(K=(0,b.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,U,G]}),e[34]=V,e[35]=U,e[36]=G,e[37]=F,e[38]=K):K=e[38];let q;return e[39]!==K||e[40]!==P?(q=(0,b.jsxs)(b.Fragment,{children:[M,N,P,K]}),e[39]=K,e[40]=P,e[41]=q):q=e[41],q}function S(e){return[{label:`Create Bucket`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws s3api create-bucket`},{type:`flag`,value:` --bucket`},{type:`value`,value:` ${(e.bucketName??``)||``}`}]}]}export{x as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{_ as r,h as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./back-link-wsXUoJ12.js";import{t as o}from"./cli-command-panel-DavMY-tN.js";import{t as s}from"./input-D3aUBtS6.js";import{t as c}from"./s3-D7lLgKWv.js";import{t as l}from"./page-heading-vksh_67w.js";import{a as u,i as d,t as f}from"./zod-A4qtKH_p.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./form-actions-DXvy9CQI.js";import{r as h,s as g,t as _}from"./field-CS-ql6du.js";var v=t(),y=i({bucketName:r().min(3,`Bucket name must be at least 3 characters`).max(63,`Bucket name must be at most 63 characters`).regex(/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/,`Must start and end with a lowercase letter or number`).regex(/^[a-z0-9.-]+$/,`Only lowercase letters, numbers, hyphens, and periods allowed`).refine(e=>!e.includes(`..`),`Must not contain consecutive periods`).refine(e=>!(e.includes(`.-`)||e.includes(`-.`)),`Must not contain adjacent period and hyphen`)}),b=e();function x(){let e=(0,v.c)(42),t=n(),r=c(),i;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={resolver:f(y)},e[0]=i):i=e[0];let{handleSubmit:x,register:C,control:w,formState:T}=d(i),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=u(O),A;e[3]!==r||e[4]!==t?(A=async e=>{await r.mutateAsync(e),t({to:`/s3/ls`})},e[3]=r,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,b.jsx)(a,{to:`/s3/ls`,children:`Back to buckets`}),N=(0,b.jsx)(l,{title:`Create Bucket`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===r.error?P=e[9]:(P=r.error&&(0,b.jsx)(p,{error:r.error,msg:`Failed to create bucket`}),e[8]=r.error,e[9]=P);let F;e[10]!==x||e[11]!==j?(F=x(j),e[10]=x,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`bucketName`,children:`Bucket Name`})}),e[13]=I):I=e[13];let L=!!E.bucketName,R;e[14]===C?R=e[15]:(R=C(`bucketName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,b.jsx)(s,{"aria-invalid":L,id:`bucketName`,placeholder:`my-bucket`,type:`text`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.bucketName?B=e[20]:(B=(0,b.jsx)(h,{errors:[E.bucketName]}),e[19]=E.bucketName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,b.jsxs)(_,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===k?H=e[25]:(H=S(k),e[24]=k,e[25]=H);let U;e[26]===H?U=e[27]:(U=(0,b.jsx)(o,{commands:H}),e[26]=H,e[27]=U);let W;e[28]===t?W=e[29]:(W=async()=>{await t({to:`/s3/ls`})},e[28]=t,e[29]=W);let G;e[30]!==r.isPending||e[31]!==D||e[32]!==W?(G=(0,b.jsx)(m,{isPending:r.isPending,isSubmitting:D,onCancel:W,pendingLabel:`Creating…`,submitLabel:`Create Bucket`}),e[30]=r.isPending,e[31]=D,e[32]=W,e[33]=G):G=e[33];let K;e[34]!==V||e[35]!==U||e[36]!==G||e[37]!==F?(K=(0,b.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,U,G]}),e[34]=V,e[35]=U,e[36]=G,e[37]=F,e[38]=K):K=e[38];let q;return e[39]!==K||e[40]!==P?(q=(0,b.jsxs)(b.Fragment,{children:[M,N,P,K]}),e[39]=K,e[40]=P,e[41]=q):q=e[41],q}function S(e){return[{label:`Create Bucket`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws s3api create-bucket`},{type:`flag`,value:` --bucket`},{type:`value`,value:` ${(e.bucketName??``)||``}`}]}]}export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-eQiUzhUk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-Cy3fUa1r.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-eQiUzhUk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-Cy3fUa1r.js index 27ce9da9e..f473805ca 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-eQiUzhUk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-cluster-Cy3fUa1r.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{sn as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./back-link-CjKy1JE5.js";import{c as l,i as u,n as d,s as f,t as p}from"./select-B01jpDaX.js";import{t as m}from"./button-BarTr35m.js";import{t as h}from"./input-6kdUb_DH.js";import{M as g,O as _,o as v}from"./ec2-CWEplLq4.js";import{a as y,d as b,g as x,o as S,t as C}from"./eks-C1P60riG.js";import{i as ee,u as te}from"./iam-CKOkzDco.js";import{y as w}from"./iam-CVg27y22.js";import{t as T}from"./page-heading-vksh_67w.js";import{a as E,i as D,n as O,t as k}from"./zod-DF_n2ejy.js";import{t as A}from"./error-banner-DeOeVBKS.js";import{t as j}from"./form-actions-BUM37An0.js";import{r as M,s as N,t as P}from"./field-c7GHI5st.js";import{a as F,i as I,l as ne,n as L,o as R,r as z,s as B,t as V}from"./alert-dialog-kCQ1W4Rz.js";import{n as H}from"./system-managed-Dk7ySh_E.js";import{t as U}from"./system-image-required-PXuPdEKF.js";import{t as W}from"./policy-document-viewer-DAhLJAGU.js";var G=r(),K=t(n(),1),q=e();function J(e){return`${e.trim()||`cluster`}-eks-cluster-role`}function Y(e){let t=(0,G.c)(35),{clusterName:n,open:r,onOpenChange:i,onCreated:a}=e,o=te(),s=ee(),c;t[0]===n?c=t[1]:(c=()=>J(n),t[0]=n,t[1]=c);let[l,u]=(0,K.useState)(c),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(r);r!==p&&(m(r),r&&(u(J(n)),f(null)));let g=o.isPending||s.isPending,_;t[2]===i?_=t[3]:(_=function(e){e||f(null),i(e)},t[2]=i,t[3]=_);let v=_,b;t[4]!==s||t[5]!==o||t[6]!==a||t[7]!==i||t[8]!==l?(b=async function(){f(null);let e=l.trim();try{let t=await o.mutateAsync({roleName:e,assumeRolePolicyDocument:y});await s.mutateAsync({roleName:e,policyArn:C});let n=t.Role?.Arn;if(!n){f(`Role was created but no ARN was returned.`);return}a(n),i(!1)}catch(e){let t=e;f(t instanceof Error?t.message:`Failed to create role.`)}},t[4]=s,t[5]=o,t[6]=a,t[7]=i,t[8]=l,t[9]=b):b=t[9];let x=b,S;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,q.jsxs)(B,{children:[(0,q.jsx)(ne,{children:`Create cluster IAM role`}),(0,q.jsx)(F,{children:`Creates an IAM role trusted by the EKS control plane and attaches the AmazonEKSClusterPolicy managed policy.`})]}),t[10]=S):S=t[10];let w;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`eks-role-name`,children:`Role name`})}),t[11]=w):w=t[11];let T;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(T=e=>{u(e.target.value)},t[12]=T):T=t[12];let E;t[13]===l?E=t[14]:(E=(0,q.jsxs)(P,{children:[w,(0,q.jsx)(h,{id:`eks-role-name`,onChange:T,placeholder:`my-cluster-eks-cluster-role`,value:l})]}),t[13]=l,t[14]=E);let D;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Trust policy (JSON)`}),(0,q.jsx)(W,{document:y})]}),t[15]=D):D=t[15];let O;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Attached managed policy`}),(0,q.jsx)(`code`,{className:`block rounded-md border bg-muted p-2 font-mono text-sm break-all`,children:C}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Grants the EKS control plane the permissions it needs to manage the cluster.`})]}),t[16]=O):O=t[16];let k;t[17]===d?k=t[18]:(k=d&&(0,q.jsx)(`p`,{className:`text-sm text-destructive`,children:d}),t[17]=d,t[18]=k);let A;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,q.jsx)(z,{children:`Cancel`}),t[19]=A):A=t[19];let j;t[20]!==g||t[21]!==l?(j=g||!l.trim(),t[20]=g,t[21]=l,t[22]=j):j=t[22];let M=g?`Creating…`:`Create role`,H;t[23]!==x||t[24]!==j||t[25]!==M?(H=(0,q.jsxs)(R,{children:[A,(0,q.jsx)(L,{disabled:j,onClick:x,children:M})]}),t[23]=x,t[24]=j,t[25]=M,t[26]=H):H=t[26];let U;t[27]!==k||t[28]!==H||t[29]!==E?(U=(0,q.jsxs)(I,{className:`max-w-lg sm:max-w-lg`,children:[S,E,D,O,k,H]}),t[27]=k,t[28]=H,t[29]=E,t[30]=U):U=t[30];let Y;return t[31]!==v||t[32]!==r||t[33]!==U?(Y=(0,q.jsx)(V,{onOpenChange:v,open:r,children:U}),t[31]=v,t[32]=r,t[33]=U,t[34]=Y):Y=t[34],Y}function re(e){let t=s(e.Tags);return t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`}function X(e){let t=s(e.Tags);return`${t?`${e.SubnetId} (${t})`:e.SubnetId} · ${e.CidrBlock}`}function ie(){let e=o(),t=i(),[n,r]=(0,K.useState)(!1),[s,y]=(0,K.useState)(!1),{data:C}=a(g),{data:ee}=a(_),{data:te}=a(w),{data:F}=a(v),I=x(),ne=(F.Images??[]).some(H),L=async()=>{r(!0);try{await t.invalidateQueries({queryKey:v.queryKey})}finally{r(!1)}},R=C.Vpcs??[],z=ee.Subnets??[],B=te.Roles??[],{control:V,formState:{errors:W,isSubmitting:G},handleSubmit:J,register:ie,setValue:Z}=D({resolver:k(b),defaultValues:{name:``,version:S[0],roleArn:``,vpcId:``,subnetIds:[],bootstrapClusterCreatorAdminPermissions:!0,endpointPublicAccess:!0,endpointPrivateAccess:!1,publicAccessCidrs:[`0.0.0.0/0`]}}),ae=E({control:V,name:`vpcId`}),Q=E({control:V,name:`subnetIds`}),oe=new Set(Q),se=E({control:V,name:`endpointPublicAccess`}),$=E({control:V,name:`publicAccessCidrs`}),ce=z.filter(e=>e.VpcId===ae),le=(e=``)=>{Z(`vpcId`,e??``,{shouldValidate:!0}),Z(`subnetIds`,[])},ue=e=>{let t=Q.includes(e)?Q.filter(t=>t!==e):[...Q,e];Z(`subnetIds`,t,{shouldValidate:!0})},de=(e,t)=>{let n=[...$];n[e]=t,Z(`publicAccessCidrs`,n,{shouldValidate:!0})},fe=()=>{Z(`publicAccessCidrs`,[...$,``],{shouldValidate:!0})},pe=e=>{Z(`publicAccessCidrs`,$.filter((t,n)=>n!==e),{shouldValidate:!0})},me=E({control:V,name:`name`}),he=async e=>{await t.invalidateQueries({queryKey:w.queryKey}),Z(`roleArn`,e,{shouldValidate:!0})};return ne?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(c,{to:`/eks/list-clusters`,children:`Clusters`}),(0,q.jsx)(T,{subtitle:`EKS`,title:`Create Cluster`}),I.error&&(0,q.jsx)(A,{error:I.error,msg:`Failed to create cluster`}),(0,q.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:J(async t=>{await I.mutateAsync(t),await e({to:`/eks/list-clusters/$clusterName`,params:{clusterName:t.name}})}),children:[(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-name`,children:`Name`})}),(0,q.jsx)(h,{"aria-invalid":!!W.name,id:`cluster-name`,placeholder:`my-cluster`,...ie(`name`)}),(0,q.jsx)(M,{errors:[W.name]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-version`,children:`Kubernetes version`})}),(0,q.jsx)(O,{control:V,name:`version`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e.onChange,value:e.value,children:[(0,q.jsx)(f,{className:`w-full`,id:`cluster-version`,children:(0,q.jsx)(l,{placeholder:`Select version`})}),(0,q.jsx)(d,{children:S.map(e=>(0,q.jsx)(u,{value:e,children:e},e))})]})}),(0,q.jsx)(M,{errors:[W.version]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-role`,children:`Cluster IAM role`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(O,{control:V,name:`roleArn`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e.onChange,value:e.value,children:[(0,q.jsx)(f,{"aria-invalid":!!W.roleArn,className:`w-full`,id:`cluster-role`,children:(0,q.jsx)(l,{placeholder:`Select role`})}),(0,q.jsx)(d,{children:B.map(e=>(0,q.jsx)(u,{value:e.Arn??``,children:e.RoleName},e.Arn))})]})}),(0,q.jsx)(m,{onClick:()=>{y(!0)},type:`button`,variant:`outline`,children:`Create role`})]}),(0,q.jsx)(M,{errors:[W.roleArn]})]}),(0,q.jsx)(Y,{clusterName:me,onCreated:he,onOpenChange:y,open:s}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-vpc`,children:`VPC`})}),(0,q.jsx)(O,{control:V,name:`vpcId`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e=>{le(e)},value:e.value,children:[(0,q.jsx)(f,{"aria-invalid":!!W.vpcId,className:`w-full`,id:`cluster-vpc`,children:(0,q.jsx)(l,{placeholder:`Select VPC`})}),(0,q.jsx)(d,{children:R.map(e=>(0,q.jsx)(u,{value:e.VpcId??``,children:re(e)},e.VpcId))})]})}),(0,q.jsx)(M,{errors:[W.vpcId]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Subnets (select at least 1)`}),ce.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the selected VPC.`}):(0,q.jsx)(`div`,{className:`space-y-1`,children:ce.map(e=>(0,q.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Subnet ${X(e)}`,checked:oe.has(e.SubnetId??``),onChange:()=>{ue(e.SubnetId??``)},type:`checkbox`}),(0,q.jsx)(`span`,{className:`font-mono`,children:X(e)})]},e.SubnetId))}),(0,q.jsx)(M,{errors:[W.subnetIds]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Endpoint access`}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Public access exposes the API server on an internet-facing endpoint; private access keeps it reachable only from within the VPC. At least one must be enabled.`}),(0,q.jsx)(O,{control:V,name:`endpointPublicAccess`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`mt-2 flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Enable public access`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Public`]})}),(0,q.jsx)(O,{control:V,name:`endpointPrivateAccess`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Enable private access`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Private`]})}),(0,q.jsx)(M,{errors:[W.endpointPublicAccess]}),se&&(0,q.jsxs)(`div`,{className:`mt-2 space-y-2`,children:[(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Public access source ranges (CIDR). Defaults to`,` `,(0,q.jsx)(`span`,{className:`font-mono`,children:`0.0.0.0/0`}),`.`]}),$.map((e,t)=>(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(h,{"aria-label":`Public access CIDR ${t+1}`,className:`font-mono`,onChange:e=>{de(t,e.target.value)},placeholder:`203.0.113.0/24`,value:e}),(0,q.jsx)(m,{onClick:()=>{pe(t)},size:`sm`,type:`button`,variant:`ghost`,children:`Remove`})]},t)),(0,q.jsx)(m,{onClick:fe,size:`sm`,type:`button`,variant:`outline`,children:`Add CIDR`}),(0,q.jsx)(M,{errors:[W.publicAccessCidrs]})]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Access`}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Authentication mode is `,(0,q.jsx)(`span`,{className:`font-mono`,children:`API`}),` (IAM access entries). The legacy aws-auth ConfigMap is not supported.`]}),(0,q.jsx)(O,{control:V,name:`bootstrapClusterCreatorAdminPermissions`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`mt-2 flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Grant the cluster creator admin permissions`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Grant the cluster creator admin permissions`]})})]}),(0,q.jsx)(j,{isPending:I.isPending,isSubmitting:G,onCancel:async()=>{await e({to:`/eks/list-clusters`})},pendingLabel:`Creating…`,submitLabel:`Create Cluster`})]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(c,{to:`/eks/list-clusters`,children:`Clusters`}),(0,q.jsx)(T,{subtitle:`EKS`,title:`Create Cluster`}),(0,q.jsx)(U,{description:`EKS clusters boot a Spinifex-managed node image (K3s) that is not shipped with the platform. Import it before creating a cluster.`,importCommand:`spx admin images import --name spinifex-eks-node`,isRechecking:n,onRecheck:L,title:`EKS system image not found`})]})}var Z=ie;export{Z as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{cn as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./back-link-wsXUoJ12.js";import{c as l,i as u,n as d,s as f,t as p}from"./select-Cn66OoPn.js";import{t as m}from"./button-qf9lLJ2x.js";import{t as h}from"./input-D3aUBtS6.js";import{M as g,O as _,o as v}from"./ec2-DYgBhYCJ.js";import{a as y,d as b,g as x,o as S,t as C}from"./eks-DOTzV24J.js";import{i as ee,u as te}from"./iam-DpkrYySm.js";import{y as w}from"./iam-DmtL7LFe.js";import{t as T}from"./page-heading-vksh_67w.js";import{a as E,i as D,n as O,t as k}from"./zod-A4qtKH_p.js";import{t as A}from"./error-banner-DeOeVBKS.js";import{t as j}from"./form-actions-DXvy9CQI.js";import{r as M,s as N,t as P}from"./field-CS-ql6du.js";import{a as F,i as I,l as ne,n as L,o as R,r as z,s as B,t as V}from"./alert-dialog-jxylPXwR.js";import{n as H}from"./system-managed-Dk7ySh_E.js";import{t as U}from"./system-image-required-D20bojgG.js";import{t as W}from"./policy-document-viewer-DAhLJAGU.js";var G=r(),K=t(n(),1),q=e();function J(e){return`${e.trim()||`cluster`}-eks-cluster-role`}function Y(e){let t=(0,G.c)(35),{clusterName:n,open:r,onOpenChange:i,onCreated:a}=e,o=te(),s=ee(),c;t[0]===n?c=t[1]:(c=()=>J(n),t[0]=n,t[1]=c);let[l,u]=(0,K.useState)(c),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(r);r!==p&&(m(r),r&&(u(J(n)),f(null)));let g=o.isPending||s.isPending,_;t[2]===i?_=t[3]:(_=function(e){e||f(null),i(e)},t[2]=i,t[3]=_);let v=_,b;t[4]!==s||t[5]!==o||t[6]!==a||t[7]!==i||t[8]!==l?(b=async function(){f(null);let e=l.trim();try{let t=await o.mutateAsync({roleName:e,assumeRolePolicyDocument:y});await s.mutateAsync({roleName:e,policyArn:C});let n=t.Role?.Arn;if(!n){f(`Role was created but no ARN was returned.`);return}a(n),i(!1)}catch(e){let t=e;f(t instanceof Error?t.message:`Failed to create role.`)}},t[4]=s,t[5]=o,t[6]=a,t[7]=i,t[8]=l,t[9]=b):b=t[9];let x=b,S;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,q.jsxs)(B,{children:[(0,q.jsx)(ne,{children:`Create cluster IAM role`}),(0,q.jsx)(F,{children:`Creates an IAM role trusted by the EKS control plane and attaches the AmazonEKSClusterPolicy managed policy.`})]}),t[10]=S):S=t[10];let w;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`eks-role-name`,children:`Role name`})}),t[11]=w):w=t[11];let T;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(T=e=>{u(e.target.value)},t[12]=T):T=t[12];let E;t[13]===l?E=t[14]:(E=(0,q.jsxs)(P,{children:[w,(0,q.jsx)(h,{id:`eks-role-name`,onChange:T,placeholder:`my-cluster-eks-cluster-role`,value:l})]}),t[13]=l,t[14]=E);let D;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Trust policy (JSON)`}),(0,q.jsx)(W,{document:y})]}),t[15]=D):D=t[15];let O;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Attached managed policy`}),(0,q.jsx)(`code`,{className:`block rounded-md border bg-muted p-2 font-mono text-sm break-all`,children:C}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Grants the EKS control plane the permissions it needs to manage the cluster.`})]}),t[16]=O):O=t[16];let k;t[17]===d?k=t[18]:(k=d&&(0,q.jsx)(`p`,{className:`text-sm text-destructive`,children:d}),t[17]=d,t[18]=k);let A;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,q.jsx)(z,{children:`Cancel`}),t[19]=A):A=t[19];let j;t[20]!==g||t[21]!==l?(j=g||!l.trim(),t[20]=g,t[21]=l,t[22]=j):j=t[22];let M=g?`Creating…`:`Create role`,H;t[23]!==x||t[24]!==j||t[25]!==M?(H=(0,q.jsxs)(R,{children:[A,(0,q.jsx)(L,{disabled:j,onClick:x,children:M})]}),t[23]=x,t[24]=j,t[25]=M,t[26]=H):H=t[26];let U;t[27]!==k||t[28]!==H||t[29]!==E?(U=(0,q.jsxs)(I,{className:`max-w-lg sm:max-w-lg`,children:[S,E,D,O,k,H]}),t[27]=k,t[28]=H,t[29]=E,t[30]=U):U=t[30];let Y;return t[31]!==v||t[32]!==r||t[33]!==U?(Y=(0,q.jsx)(V,{onOpenChange:v,open:r,children:U}),t[31]=v,t[32]=r,t[33]=U,t[34]=Y):Y=t[34],Y}function re(e){let t=s(e.Tags);return t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`}function X(e){let t=s(e.Tags);return`${t?`${e.SubnetId} (${t})`:e.SubnetId} · ${e.CidrBlock}`}function ie(){let e=o(),t=i(),[n,r]=(0,K.useState)(!1),[s,y]=(0,K.useState)(!1),{data:C}=a(g),{data:ee}=a(_),{data:te}=a(w),{data:F}=a(v),I=x(),ne=(F.Images??[]).some(H),L=async()=>{r(!0);try{await t.invalidateQueries({queryKey:v.queryKey})}finally{r(!1)}},R=C.Vpcs??[],z=ee.Subnets??[],B=te.Roles??[],{control:V,formState:{errors:W,isSubmitting:G},handleSubmit:J,register:ie,setValue:Z}=D({resolver:k(b),defaultValues:{name:``,version:S[0],roleArn:``,vpcId:``,subnetIds:[],bootstrapClusterCreatorAdminPermissions:!0,endpointPublicAccess:!0,endpointPrivateAccess:!1,publicAccessCidrs:[`0.0.0.0/0`]}}),ae=E({control:V,name:`vpcId`}),Q=E({control:V,name:`subnetIds`}),oe=new Set(Q),se=E({control:V,name:`endpointPublicAccess`}),$=E({control:V,name:`publicAccessCidrs`}),ce=z.filter(e=>e.VpcId===ae),le=(e=``)=>{Z(`vpcId`,e??``,{shouldValidate:!0}),Z(`subnetIds`,[])},ue=e=>{let t=Q.includes(e)?Q.filter(t=>t!==e):[...Q,e];Z(`subnetIds`,t,{shouldValidate:!0})},de=(e,t)=>{let n=[...$];n[e]=t,Z(`publicAccessCidrs`,n,{shouldValidate:!0})},fe=()=>{Z(`publicAccessCidrs`,[...$,``],{shouldValidate:!0})},pe=e=>{Z(`publicAccessCidrs`,$.filter((t,n)=>n!==e),{shouldValidate:!0})},me=E({control:V,name:`name`}),he=async e=>{await t.invalidateQueries({queryKey:w.queryKey}),Z(`roleArn`,e,{shouldValidate:!0})};return ne?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(c,{to:`/eks/list-clusters`,children:`Clusters`}),(0,q.jsx)(T,{subtitle:`EKS`,title:`Create Cluster`}),I.error&&(0,q.jsx)(A,{error:I.error,msg:`Failed to create cluster`}),(0,q.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:J(async t=>{await I.mutateAsync(t),await e({to:`/eks/list-clusters/$clusterName`,params:{clusterName:t.name}})}),children:[(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-name`,children:`Name`})}),(0,q.jsx)(h,{"aria-invalid":!!W.name,id:`cluster-name`,placeholder:`my-cluster`,...ie(`name`)}),(0,q.jsx)(M,{errors:[W.name]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-version`,children:`Kubernetes version`})}),(0,q.jsx)(O,{control:V,name:`version`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e.onChange,value:e.value,children:[(0,q.jsx)(f,{className:`w-full`,id:`cluster-version`,children:(0,q.jsx)(l,{placeholder:`Select version`})}),(0,q.jsx)(d,{children:S.map(e=>(0,q.jsx)(u,{value:e,children:e},e))})]})}),(0,q.jsx)(M,{errors:[W.version]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-role`,children:`Cluster IAM role`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(O,{control:V,name:`roleArn`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e.onChange,value:e.value,children:[(0,q.jsx)(f,{"aria-invalid":!!W.roleArn,className:`w-full`,id:`cluster-role`,children:(0,q.jsx)(l,{placeholder:`Select role`})}),(0,q.jsx)(d,{children:B.map(e=>(0,q.jsx)(u,{value:e.Arn??``,children:e.RoleName},e.Arn))})]})}),(0,q.jsx)(m,{onClick:()=>{y(!0)},type:`button`,variant:`outline`,children:`Create role`})]}),(0,q.jsx)(M,{errors:[W.roleArn]})]}),(0,q.jsx)(Y,{clusterName:me,onCreated:he,onOpenChange:y,open:s}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:(0,q.jsx)(`label`,{htmlFor:`cluster-vpc`,children:`VPC`})}),(0,q.jsx)(O,{control:V,name:`vpcId`,render:({field:e})=>(0,q.jsxs)(p,{onValueChange:e=>{le(e)},value:e.value,children:[(0,q.jsx)(f,{"aria-invalid":!!W.vpcId,className:`w-full`,id:`cluster-vpc`,children:(0,q.jsx)(l,{placeholder:`Select VPC`})}),(0,q.jsx)(d,{children:R.map(e=>(0,q.jsx)(u,{value:e.VpcId??``,children:re(e)},e.VpcId))})]})}),(0,q.jsx)(M,{errors:[W.vpcId]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Subnets (select at least 1)`}),ce.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the selected VPC.`}):(0,q.jsx)(`div`,{className:`space-y-1`,children:ce.map(e=>(0,q.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Subnet ${X(e)}`,checked:oe.has(e.SubnetId??``),onChange:()=>{ue(e.SubnetId??``)},type:`checkbox`}),(0,q.jsx)(`span`,{className:`font-mono`,children:X(e)})]},e.SubnetId))}),(0,q.jsx)(M,{errors:[W.subnetIds]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Endpoint access`}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Public access exposes the API server on an internet-facing endpoint; private access keeps it reachable only from within the VPC. At least one must be enabled.`}),(0,q.jsx)(O,{control:V,name:`endpointPublicAccess`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`mt-2 flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Enable public access`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Public`]})}),(0,q.jsx)(O,{control:V,name:`endpointPrivateAccess`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Enable private access`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Private`]})}),(0,q.jsx)(M,{errors:[W.endpointPublicAccess]}),se&&(0,q.jsxs)(`div`,{className:`mt-2 space-y-2`,children:[(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Public access source ranges (CIDR). Defaults to`,` `,(0,q.jsx)(`span`,{className:`font-mono`,children:`0.0.0.0/0`}),`.`]}),$.map((e,t)=>(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(h,{"aria-label":`Public access CIDR ${t+1}`,className:`font-mono`,onChange:e=>{de(t,e.target.value)},placeholder:`203.0.113.0/24`,value:e}),(0,q.jsx)(m,{onClick:()=>{pe(t)},size:`sm`,type:`button`,variant:`ghost`,children:`Remove`})]},t)),(0,q.jsx)(m,{onClick:fe,size:`sm`,type:`button`,variant:`outline`,children:`Add CIDR`}),(0,q.jsx)(M,{errors:[W.publicAccessCidrs]})]})]}),(0,q.jsxs)(P,{children:[(0,q.jsx)(N,{children:`Access`}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Authentication mode is `,(0,q.jsx)(`span`,{className:`font-mono`,children:`API`}),` (IAM access entries). The legacy aws-auth ConfigMap is not supported.`]}),(0,q.jsx)(O,{control:V,name:`bootstrapClusterCreatorAdminPermissions`,render:({field:e})=>(0,q.jsxs)(`label`,{className:`mt-2 flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`input`,{"aria-label":`Grant the cluster creator admin permissions`,checked:e.value,onChange:t=>{e.onChange(t.target.checked)},type:`checkbox`}),`Grant the cluster creator admin permissions`]})})]}),(0,q.jsx)(j,{isPending:I.isPending,isSubmitting:G,onCancel:async()=>{await e({to:`/eks/list-clusters`})},pendingLabel:`Creating…`,submitLabel:`Create Cluster`})]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(c,{to:`/eks/list-clusters`,children:`Clusters`}),(0,q.jsx)(T,{subtitle:`EKS`,title:`Create Cluster`}),(0,q.jsx)(U,{description:`EKS clusters boot a Spinifex-managed node image (K3s) that is not shipped with the platform. Import it before creating a cluster.`,importCommand:`spx admin images import --name spinifex-eks-node`,isRechecking:n,onRecheck:L,title:`EKS system image not found`})]})}var Z=ie;export{Z as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-CY_ivPtb.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-Q5Pdr85P.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-CY_ivPtb.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-Q5Pdr85P.js index 76271c90b..b683a30ed 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-CY_ivPtb.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-instance-Q5Pdr85P.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{A as ee}from"./removable-Dwr9otKB.js";import{t as te}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ne}from"./useNavigate-BH3pQKLF.js";import{t as i}from"./back-link-CjKy1JE5.js";import{c as a,i as o,n as s,s as c,t as l}from"./select-B01jpDaX.js";import{i as u,n as d,r as f,t as re}from"./cli-command-panel-CLiFy1rG.js";import{t as p}from"./input-6kdUb_DH.js";import{M as ie,o as m,w as ae}from"./ec2-CWEplLq4.js";import{h as oe}from"./rds-CE3126Ga.js";import{t as se}from"./rds-BkKLEWPo.js";import{d as ce,h as le,l as ue,o as de}from"./rds-CyiqRExv.js";import{t as h}from"./page-heading-vksh_67w.js";import{a as fe,i as pe,n as g,t as me}from"./zod-DF_n2ejy.js";import{t as he}from"./error-banner-DeOeVBKS.js";import{t as ge}from"./form-actions-BUM37An0.js";import{n as _,r as v,s as y,t as b}from"./field-c7GHI5st.js";import{t as _e}from"./tags-field-array-Dk9nPDzt.js";import{a as x,r as ve}from"./system-managed-Dk7ySh_E.js";import{t as S}from"./system-image-required-PXuPdEKF.js";import{n as ye}from"./picker-notice-tK9XfUSR.js";import{a as be,i as xe,o as C,r as Se,s as Ce,t as we}from"./security-group-checkboxes-BkxIRro9.js";var Te=t(n(),1),w=e(),T=7,Ee=[{id:`multi-az`,label:`Multi-AZ deployment`,note:`Not available on Spinifex — the platform is single-AZ, so a standby would not exist.`},{id:`publicly-accessible`,label:`Public access`,note:`Not available on Spinifex — the endpoint is a private VPC address.`},{id:`storage-autoscaling`,label:`Storage autoscaling`,note:`Not available on Spinifex — allocated storage grows only when you ask it to.`}];function E(){let e=ne(),t=ee(),n=se(),[u,d]=(0,Te.useState)(!1),{data:f}=r(de),{data:E}=r(le),{data:D}=r(ce),{data:Oe}=r(ae),{data:ke}=r(ie),{data:Ae}=r(m),je=Ae.Images??[],O=f.DBEngineVersions??[],k=[...new Set(O.map(e=>e.Engine??``).filter(Boolean))],A=(e,t)=>je.some(n=>ve(n,e,t)),j=e=>O.find(t=>t.Engine===e&&A(e,t.EngineVersion??``))?.EngineVersion??``,M=e=>j(e).length>0,N=k.filter(M),P=N[0]??``,F=async()=>{d(!0);try{await t.invalidateQueries({queryKey:m.queryKey})}finally{d(!1)}},{control:I,formState:{errors:L,isSubmitting:Me},handleSubmit:Ne,register:R,setValue:z}=pe({resolver:me(oe),defaultValues:{dbInstanceIdentifier:``,engine:P,engineVersion:j(P),dbInstanceClass:``,allocatedStorage:20,masterUsername:``,masterUserPassword:``,confirmPassword:``,dbName:``,port:``,dbSubnetGroupName:``,vpcSecurityGroupIds:[],dbParameterGroupName:``,deletionProtection:!1,backupRetentionPeriod:T,preferredBackupWindow:``,preferredMaintenanceWindow:``,tags:[]}}),B=fe({control:I}),V=B.engine??``,H=B.dbSubnetGroupName??``,U=B.vpcSecurityGroupIds??[],W=te(ue(V)),Pe=O.filter(e=>e.Engine===V),G=W.data?.OrderableDBInstanceOptions??[],K=[...new Set(G.map(e=>e.DBInstanceClass??``).filter(Boolean))],[q]=G,J=E.DBSubnetGroups??[],Fe=Ce(D.DBParameterGroups??[],O,V),Ie=J.find(e=>e.DBSubnetGroupName===H)?.VpcId,Y=ke.Vpcs?.find(e=>e.IsDefault)?.VpcId,X=Ie??Y,Z=Oe.SecurityGroups??[],Q=xe(Z,X),Le=e=>{z(`engine`,e,{shouldValidate:!0}),z(`engineVersion`,j(e)),z(`dbInstanceClass`,``),z(`dbParameterGroupName`,``)},$=e=>{z(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},Re=e=>{let t=J.find(t=>t.DBSubnetGroupName===e)?.VpcId??Y;z(`dbSubnetGroupName`,e,{shouldValidate:!0}),$(Se(Z,t,U))},ze=async t=>{await n.mutateAsync(t),await e({to:`/rds/describe-db-instances`})};if(k.length>0&&N.length===0)return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,w.jsx)(h,{title:`Create Database`}),(0,w.jsx)(S,{description:`RDS boots a Spinifex-managed engine image that is not shipped with the platform. Import one before creating a database. Engines offered: ${k.join(`, `)}.`,importCommand:x(k[0]??``),isRechecking:u,onRecheck:F,title:`RDS system image not found`})]});let Be=k.filter(e=>!M(e)),Ve=V===``?{tone:`muted`,text:`Select an engine to see the instance classes this cluster can run.`}:ye(W,K.length===0,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:`No instance class this cluster's nodes can run is available for ${V}.`});return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,w.jsx)(h,{title:`Create Database`}),n.error&&(0,w.jsx)(he,{error:n.error,msg:`Failed to create the DB instance`}),(0,w.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:Ne(ze),children:[(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-identifier`,children:`DB instance identifier`})}),(0,w.jsx)(p,{"aria-invalid":!!L.dbInstanceIdentifier,id:`db-identifier`,placeholder:`orders-db`,...R(`dbInstanceIdentifier`)}),(0,w.jsx)(_,{children:`Lowercase letters, digits and hyphens. This is also the endpoint hostname, so it cannot be changed later.`}),(0,w.jsx)(v,{errors:[L.dbInstanceIdentifier]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-engine`,children:`Engine`})}),(0,w.jsx)(g,{control:I,name:`engine`,render:({field:e})=>(0,w.jsxs)(l,{onValueChange:e=>{Le(e??``)},value:e.value,children:[(0,w.jsx)(c,{"aria-invalid":!!L.engine,className:`w-full`,id:`db-engine`,children:(0,w.jsx)(a,{placeholder:`Select an engine`})}),(0,w.jsx)(s,{children:k.map(e=>(0,w.jsx)(o,{disabled:!M(e),value:e,children:M(e)?e:`${e} — image not imported`},e))})]})}),(0,w.jsx)(v,{errors:[L.engine]})]}),Be.map(e=>(0,w.jsx)(S,{description:`No ${e} image is imported on this cluster, so a ${e} database cannot launch. The other engines are unaffected.`,importCommand:x(e),isRechecking:u,onRecheck:F,title:`${e} image not found`},e)),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-engine-version`,children:`Engine version`})}),(0,w.jsx)(g,{control:I,name:`engineVersion`,render:({field:e})=>(0,w.jsxs)(l,{onValueChange:e.onChange,value:e.value,children:[(0,w.jsx)(c,{className:`w-full`,id:`db-engine-version`,children:(0,w.jsx)(a,{placeholder:`Engine default`})}),(0,w.jsx)(s,{children:Pe.map(e=>(0,w.jsx)(o,{disabled:!A(V,e.EngineVersion??``),value:e.EngineVersion??``,children:e.DBEngineVersionDescription??e.EngineVersion},e.EngineVersion))})]})}),(0,w.jsx)(_,{children:`There is no in-place version upgrade, so this cannot be changed after the database is created.`}),(0,w.jsx)(v,{errors:[L.engineVersion]})]}),(0,w.jsx)(C,{control:I,id:`db-instance-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:Ve,options:K.map(e=>({value:e,label:e})),placeholder:`Select an instance class`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-storage`,children:`Allocated storage (GiB)`})}),(0,w.jsx)(p,{"aria-invalid":!!L.allocatedStorage,id:`db-storage`,max:q?.MaxStorageSize,min:q?.MinStorageSize,type:`number`,...R(`allocatedStorage`,{valueAsNumber:!0})}),(0,w.jsxs)(_,{children:[`gp3, encrypted. Storage grows only — it can never be shrunk.`,q?.MinStorageSize!==void 0&&` This engine accepts ${q.MinStorageSize}–${q.MaxStorageSize} GiB.`]}),(0,w.jsx)(v,{errors:[L.allocatedStorage]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:`Storage encryption`}),(0,w.jsx)(`p`,{className:`text-sm`,children:`Encrypted — always on.`}),(0,w.jsx)(_,{children:`Storage is encrypted with the cluster key. Unencrypted storage is not offered and a customer-managed key is not selectable.`})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-master-username`,children:`Master username`})}),(0,w.jsx)(p,{"aria-invalid":!!L.masterUsername,id:`db-master-username`,placeholder:`dbadmin`,...R(`masterUsername`)}),(0,w.jsx)(v,{errors:[L.masterUsername]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-master-password`,children:`Master password`})}),(0,w.jsx)(p,{"aria-invalid":!!L.masterUserPassword,id:`db-master-password`,type:`password`,...R(`masterUserPassword`)}),(0,w.jsx)(_,{children:`8–128 printable ASCII characters, excluding '/', '"', '@' and spaces.`}),(0,w.jsx)(v,{errors:[L.masterUserPassword]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-confirm-password`,children:`Confirm master password`})}),(0,w.jsx)(p,{"aria-invalid":!!L.confirmPassword,id:`db-confirm-password`,type:`password`,...R(`confirmPassword`)}),(0,w.jsx)(v,{errors:[L.confirmPassword]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-name`,children:`Initial database name`})}),(0,w.jsx)(p,{"aria-invalid":!!L.dbName,id:`db-name`,placeholder:`Optional`,...R(`dbName`)}),(0,w.jsx)(_,{children:`Leave blank to create no database. Letters, digits and underscores, starting with a letter.`}),(0,w.jsx)(v,{errors:[L.dbName]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-port`,children:`Port`})}),(0,w.jsx)(p,{"aria-invalid":!!L.port,id:`db-port`,placeholder:`Engine default`,...R(`port`)}),(0,w.jsx)(_,{children:`Leave blank to use the engine's own port. The port is fixed at create and cannot be changed later.`}),(0,w.jsx)(v,{errors:[L.port]})]}),(0,w.jsx)(C,{control:I,description:`Leave unset to place the endpoint in the account's default VPC subnet. The subnet group cannot be changed after create.`,id:`db-subnet-group`,label:`DB subnet group`,name:`dbSubnetGroupName`,onValueChange:Re,options:J.map(e=>({value:e.DBSubnetGroupName??``,label:`${e.DBSubnetGroupName} (${e.VpcId})`})),placeholder:`Default VPC subnet`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:`VPC security groups`}),(0,w.jsx)(we,{emptyText:X?`No security groups available in ${X}.`:`No default VPC is available for security groups.`,groups:Q,onChange:$,selected:U}),(0,w.jsx)(v,{errors:[L.vpcSecurityGroupIds]})]}),(0,w.jsx)(C,{control:I,id:`db-parameter-group`,label:`DB parameter group`,name:`dbParameterGroupName`,options:Fe.map(e=>({value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``})),placeholder:`Engine default group`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-backup-retention`,children:`Backup retention (days)`})}),(0,w.jsx)(p,{"aria-invalid":!!L.backupRetentionPeriod,id:`db-backup-retention`,max:7,min:0,type:`number`,...R(`backupRetentionPeriod`,{valueAsNumber:!0})}),(0,w.jsx)(_,{children:`0 disables automated backups. There is no point-in-time restore; backups are daily snapshots taken in the window below.`}),(0,w.jsx)(v,{errors:[L.backupRetentionPeriod]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-backup-window`,children:`Preferred backup window`})}),(0,w.jsx)(p,{"aria-invalid":!!L.preferredBackupWindow,id:`db-backup-window`,placeholder:`hh24:mi-hh24:mi in UTC`,...R(`preferredBackupWindow`)}),(0,w.jsx)(_,{children:`Leave blank to have one assigned. Minimum 30 minutes.`}),(0,w.jsx)(v,{errors:[L.preferredBackupWindow]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-maintenance-window`,children:`Preferred maintenance window`})}),(0,w.jsx)(p,{"aria-invalid":!!L.preferredMaintenanceWindow,id:`db-maintenance-window`,placeholder:`ddd:hh24:mi-ddd:hh24:mi in UTC`,...R(`preferredMaintenanceWindow`)}),(0,w.jsx)(_,{children:`Leave blank to have one assigned clear of the backup window.`}),(0,w.jsx)(v,{errors:[L.preferredMaintenanceWindow]})]}),(0,w.jsx)(be,{control:I,name:`deletionProtection`}),(0,w.jsx)(_e,{control:I,name:`tags`}),(0,w.jsxs)(`fieldset`,{className:`space-y-3 rounded-md border border-border p-4`,children:[(0,w.jsx)(`legend`,{className:`px-1 text-sm font-medium`,children:`Not available on Spinifex`}),Ee.map(e=>(0,w.jsxs)(`label`,{className:`flex items-start gap-2 text-xs text-muted-foreground`,children:[(0,w.jsx)(`input`,{checked:!1,disabled:!0,readOnly:!0,type:`checkbox`}),(0,w.jsxs)(`span`,{children:[e.label,(0,w.jsx)(`span`,{className:`mt-0.5 block`,children:e.note})]})]},e.id))]}),(0,w.jsx)(re,{commands:De({dbInstanceIdentifier:B.dbInstanceIdentifier??``,engine:V,engineVersion:B.engineVersion??``,dbInstanceClass:B.dbInstanceClass??``,allocatedStorage:B.allocatedStorage??20,masterUsername:B.masterUsername??``,dbName:B.dbName??``,port:B.port??``,dbSubnetGroupName:H,vpcSecurityGroupIds:U,dbParameterGroupName:B.dbParameterGroupName??``,deletionProtection:B.deletionProtection??!1,backupRetentionPeriod:B.backupRetentionPeriod??T,preferredBackupWindow:B.preferredBackupWindow??``,preferredMaintenanceWindow:B.preferredMaintenanceWindow??``})}),(0,w.jsx)(ge,{isPending:n.isPending,isSubmitting:Me,onCancel:async()=>{await e({to:`/rds/describe-db-instances`})},pendingLabel:`Creating…`,submitLabel:`Create Database`})]})]})}function De(e){return[{label:`Create DB Instance`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-instance`},...f(`--db-instance-identifier`,d(e.dbInstanceIdentifier,`DBInstanceIdentifier`)),...f(`--engine`,d(e.engine,`Engine`)),...f(`--db-instance-class`,d(e.dbInstanceClass,`DBInstanceClass`)),...f(`--allocated-storage`,e.allocatedStorage),...f(`--master-username`,d(e.masterUsername,`MasterUsername`)),{type:`flag`,value:` --master-user-password`},{type:`variable`,value:` $DB_PASSWORD`},...u(`--engine-version`,e.engineVersion),...u(`--db-name`,e.dbName),...u(`--port`,e.port),...u(`--db-subnet-group-name`,e.dbSubnetGroupName),...u(`--vpc-security-group-ids`,e.vpcSecurityGroupIds.join(` `)),...u(`--db-parameter-group-name`,e.dbParameterGroupName),...u(`--deletion-protection`,e.deletionProtection),...f(`--backup-retention-period`,e.backupRetentionPeriod),...u(`--preferred-backup-window`,e.preferredBackupWindow),...u(`--preferred-maintenance-window`,e.preferredMaintenanceWindow)]}]}var D=E;export{D as component}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{A as ee}from"./removable-Dwr9otKB.js";import{t as te}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ne}from"./useNavigate-CTe_-BZA.js";import{t as i}from"./back-link-wsXUoJ12.js";import{c as a,i as o,n as s,s as c,t as l}from"./select-Cn66OoPn.js";import{i as u,n as d,r as f,t as re}from"./cli-command-panel-DavMY-tN.js";import{t as p}from"./input-D3aUBtS6.js";import{M as ie,o as m,w as ae}from"./ec2-DYgBhYCJ.js";import{h as oe}from"./rds-DIuGt87z.js";import{t as se}from"./rds-DbPUva_R.js";import{d as ce,h as le,l as ue,o as de}from"./rds-Ca8CaJkU.js";import{t as h}from"./page-heading-vksh_67w.js";import{a as fe,i as pe,n as g,t as me}from"./zod-A4qtKH_p.js";import{t as he}from"./error-banner-DeOeVBKS.js";import{t as ge}from"./form-actions-DXvy9CQI.js";import{n as _,r as v,s as y,t as b}from"./field-CS-ql6du.js";import{t as _e}from"./tags-field-array-Bjg8Nmui.js";import{a as x,r as ve}from"./system-managed-Dk7ySh_E.js";import{t as S}from"./system-image-required-D20bojgG.js";import{n as ye}from"./picker-notice-tK9XfUSR.js";import{a as be,i as xe,o as C,r as Se,s as Ce,t as we}from"./security-group-checkboxes-DFjvW5uT.js";var Te=t(n(),1),w=e(),T=7,Ee=[{id:`multi-az`,label:`Multi-AZ deployment`,note:`Not available on Spinifex — the platform is single-AZ, so a standby would not exist.`},{id:`publicly-accessible`,label:`Public access`,note:`Not available on Spinifex — the endpoint is a private VPC address.`},{id:`storage-autoscaling`,label:`Storage autoscaling`,note:`Not available on Spinifex — allocated storage grows only when you ask it to.`}];function E(){let e=ne(),t=ee(),n=se(),[u,d]=(0,Te.useState)(!1),{data:f}=r(de),{data:E}=r(le),{data:D}=r(ce),{data:Oe}=r(ae),{data:ke}=r(ie),{data:Ae}=r(m),je=Ae.Images??[],O=f.DBEngineVersions??[],k=[...new Set(O.map(e=>e.Engine??``).filter(Boolean))],A=(e,t)=>je.some(n=>ve(n,e,t)),j=e=>O.find(t=>t.Engine===e&&A(e,t.EngineVersion??``))?.EngineVersion??``,M=e=>j(e).length>0,N=k.filter(M),P=N[0]??``,F=async()=>{d(!0);try{await t.invalidateQueries({queryKey:m.queryKey})}finally{d(!1)}},{control:I,formState:{errors:L,isSubmitting:Me},handleSubmit:Ne,register:R,setValue:z}=pe({resolver:me(oe),defaultValues:{dbInstanceIdentifier:``,engine:P,engineVersion:j(P),dbInstanceClass:``,allocatedStorage:20,masterUsername:``,masterUserPassword:``,confirmPassword:``,dbName:``,port:``,dbSubnetGroupName:``,vpcSecurityGroupIds:[],dbParameterGroupName:``,deletionProtection:!1,backupRetentionPeriod:T,preferredBackupWindow:``,preferredMaintenanceWindow:``,tags:[]}}),B=fe({control:I}),V=B.engine??``,H=B.dbSubnetGroupName??``,U=B.vpcSecurityGroupIds??[],W=te(ue(V)),Pe=O.filter(e=>e.Engine===V),G=W.data?.OrderableDBInstanceOptions??[],K=[...new Set(G.map(e=>e.DBInstanceClass??``).filter(Boolean))],[q]=G,J=E.DBSubnetGroups??[],Fe=Ce(D.DBParameterGroups??[],O,V),Ie=J.find(e=>e.DBSubnetGroupName===H)?.VpcId,Y=ke.Vpcs?.find(e=>e.IsDefault)?.VpcId,X=Ie??Y,Z=Oe.SecurityGroups??[],Q=xe(Z,X),Le=e=>{z(`engine`,e,{shouldValidate:!0}),z(`engineVersion`,j(e)),z(`dbInstanceClass`,``),z(`dbParameterGroupName`,``)},$=e=>{z(`vpcSecurityGroupIds`,e,{shouldValidate:!0})},Re=e=>{let t=J.find(t=>t.DBSubnetGroupName===e)?.VpcId??Y;z(`dbSubnetGroupName`,e,{shouldValidate:!0}),$(Se(Z,t,U))},ze=async t=>{await n.mutateAsync(t),await e({to:`/rds/describe-db-instances`})};if(k.length>0&&N.length===0)return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,w.jsx)(h,{title:`Create Database`}),(0,w.jsx)(S,{description:`RDS boots a Spinifex-managed engine image that is not shipped with the platform. Import one before creating a database. Engines offered: ${k.join(`, `)}.`,importCommand:x(k[0]??``),isRechecking:u,onRecheck:F,title:`RDS system image not found`})]});let Be=k.filter(e=>!M(e)),Ve=V===``?{tone:`muted`,text:`Select an engine to see the instance classes this cluster can run.`}:ye(W,K.length===0,{loading:`Loading the instance classes…`,failed:`Could not read the instance classes`,empty:`No instance class this cluster's nodes can run is available for ${V}.`});return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(i,{to:`/rds/describe-db-instances`,children:`Back to databases`}),(0,w.jsx)(h,{title:`Create Database`}),n.error&&(0,w.jsx)(he,{error:n.error,msg:`Failed to create the DB instance`}),(0,w.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:Ne(ze),children:[(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-identifier`,children:`DB instance identifier`})}),(0,w.jsx)(p,{"aria-invalid":!!L.dbInstanceIdentifier,id:`db-identifier`,placeholder:`orders-db`,...R(`dbInstanceIdentifier`)}),(0,w.jsx)(_,{children:`Lowercase letters, digits and hyphens. This is also the endpoint hostname, so it cannot be changed later.`}),(0,w.jsx)(v,{errors:[L.dbInstanceIdentifier]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-engine`,children:`Engine`})}),(0,w.jsx)(g,{control:I,name:`engine`,render:({field:e})=>(0,w.jsxs)(l,{onValueChange:e=>{Le(e??``)},value:e.value,children:[(0,w.jsx)(c,{"aria-invalid":!!L.engine,className:`w-full`,id:`db-engine`,children:(0,w.jsx)(a,{placeholder:`Select an engine`})}),(0,w.jsx)(s,{children:k.map(e=>(0,w.jsx)(o,{disabled:!M(e),value:e,children:M(e)?e:`${e} — image not imported`},e))})]})}),(0,w.jsx)(v,{errors:[L.engine]})]}),Be.map(e=>(0,w.jsx)(S,{description:`No ${e} image is imported on this cluster, so a ${e} database cannot launch. The other engines are unaffected.`,importCommand:x(e),isRechecking:u,onRecheck:F,title:`${e} image not found`},e)),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-engine-version`,children:`Engine version`})}),(0,w.jsx)(g,{control:I,name:`engineVersion`,render:({field:e})=>(0,w.jsxs)(l,{onValueChange:e.onChange,value:e.value,children:[(0,w.jsx)(c,{className:`w-full`,id:`db-engine-version`,children:(0,w.jsx)(a,{placeholder:`Engine default`})}),(0,w.jsx)(s,{children:Pe.map(e=>(0,w.jsx)(o,{disabled:!A(V,e.EngineVersion??``),value:e.EngineVersion??``,children:e.DBEngineVersionDescription??e.EngineVersion},e.EngineVersion))})]})}),(0,w.jsx)(_,{children:`There is no in-place version upgrade, so this cannot be changed after the database is created.`}),(0,w.jsx)(v,{errors:[L.engineVersion]})]}),(0,w.jsx)(C,{control:I,id:`db-instance-class`,label:`DB instance class`,name:`dbInstanceClass`,notice:Ve,options:K.map(e=>({value:e,label:e})),placeholder:`Select an instance class`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-storage`,children:`Allocated storage (GiB)`})}),(0,w.jsx)(p,{"aria-invalid":!!L.allocatedStorage,id:`db-storage`,max:q?.MaxStorageSize,min:q?.MinStorageSize,type:`number`,...R(`allocatedStorage`,{valueAsNumber:!0})}),(0,w.jsxs)(_,{children:[`gp3, encrypted. Storage grows only — it can never be shrunk.`,q?.MinStorageSize!==void 0&&` This engine accepts ${q.MinStorageSize}–${q.MaxStorageSize} GiB.`]}),(0,w.jsx)(v,{errors:[L.allocatedStorage]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:`Storage encryption`}),(0,w.jsx)(`p`,{className:`text-sm`,children:`Encrypted — always on.`}),(0,w.jsx)(_,{children:`Storage is encrypted with the cluster key. Unencrypted storage is not offered and a customer-managed key is not selectable.`})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-master-username`,children:`Master username`})}),(0,w.jsx)(p,{"aria-invalid":!!L.masterUsername,id:`db-master-username`,placeholder:`dbadmin`,...R(`masterUsername`)}),(0,w.jsx)(v,{errors:[L.masterUsername]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-master-password`,children:`Master password`})}),(0,w.jsx)(p,{"aria-invalid":!!L.masterUserPassword,id:`db-master-password`,type:`password`,...R(`masterUserPassword`)}),(0,w.jsx)(_,{children:`8–128 printable ASCII characters, excluding '/', '"', '@' and spaces.`}),(0,w.jsx)(v,{errors:[L.masterUserPassword]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-confirm-password`,children:`Confirm master password`})}),(0,w.jsx)(p,{"aria-invalid":!!L.confirmPassword,id:`db-confirm-password`,type:`password`,...R(`confirmPassword`)}),(0,w.jsx)(v,{errors:[L.confirmPassword]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-name`,children:`Initial database name`})}),(0,w.jsx)(p,{"aria-invalid":!!L.dbName,id:`db-name`,placeholder:`Optional`,...R(`dbName`)}),(0,w.jsx)(_,{children:`Leave blank to create no database. Letters, digits and underscores, starting with a letter.`}),(0,w.jsx)(v,{errors:[L.dbName]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-port`,children:`Port`})}),(0,w.jsx)(p,{"aria-invalid":!!L.port,id:`db-port`,placeholder:`Engine default`,...R(`port`)}),(0,w.jsx)(_,{children:`Leave blank to use the engine's own port. The port is fixed at create and cannot be changed later.`}),(0,w.jsx)(v,{errors:[L.port]})]}),(0,w.jsx)(C,{control:I,description:`Leave unset to place the endpoint in the account's default VPC subnet. The subnet group cannot be changed after create.`,id:`db-subnet-group`,label:`DB subnet group`,name:`dbSubnetGroupName`,onValueChange:Re,options:J.map(e=>({value:e.DBSubnetGroupName??``,label:`${e.DBSubnetGroupName} (${e.VpcId})`})),placeholder:`Default VPC subnet`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:`VPC security groups`}),(0,w.jsx)(we,{emptyText:X?`No security groups available in ${X}.`:`No default VPC is available for security groups.`,groups:Q,onChange:$,selected:U}),(0,w.jsx)(v,{errors:[L.vpcSecurityGroupIds]})]}),(0,w.jsx)(C,{control:I,id:`db-parameter-group`,label:`DB parameter group`,name:`dbParameterGroupName`,options:Fe.map(e=>({value:e.DBParameterGroupName??``,label:e.DBParameterGroupName??``})),placeholder:`Engine default group`}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-backup-retention`,children:`Backup retention (days)`})}),(0,w.jsx)(p,{"aria-invalid":!!L.backupRetentionPeriod,id:`db-backup-retention`,max:7,min:0,type:`number`,...R(`backupRetentionPeriod`,{valueAsNumber:!0})}),(0,w.jsx)(_,{children:`0 disables automated backups. There is no point-in-time restore; backups are daily snapshots taken in the window below.`}),(0,w.jsx)(v,{errors:[L.backupRetentionPeriod]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-backup-window`,children:`Preferred backup window`})}),(0,w.jsx)(p,{"aria-invalid":!!L.preferredBackupWindow,id:`db-backup-window`,placeholder:`hh24:mi-hh24:mi in UTC`,...R(`preferredBackupWindow`)}),(0,w.jsx)(_,{children:`Leave blank to have one assigned. Minimum 30 minutes.`}),(0,w.jsx)(v,{errors:[L.preferredBackupWindow]})]}),(0,w.jsxs)(b,{children:[(0,w.jsx)(y,{children:(0,w.jsx)(`label`,{htmlFor:`db-maintenance-window`,children:`Preferred maintenance window`})}),(0,w.jsx)(p,{"aria-invalid":!!L.preferredMaintenanceWindow,id:`db-maintenance-window`,placeholder:`ddd:hh24:mi-ddd:hh24:mi in UTC`,...R(`preferredMaintenanceWindow`)}),(0,w.jsx)(_,{children:`Leave blank to have one assigned clear of the backup window.`}),(0,w.jsx)(v,{errors:[L.preferredMaintenanceWindow]})]}),(0,w.jsx)(be,{control:I,name:`deletionProtection`}),(0,w.jsx)(_e,{control:I,name:`tags`}),(0,w.jsxs)(`fieldset`,{className:`space-y-3 rounded-md border border-border p-4`,children:[(0,w.jsx)(`legend`,{className:`px-1 text-sm font-medium`,children:`Not available on Spinifex`}),Ee.map(e=>(0,w.jsxs)(`label`,{className:`flex items-start gap-2 text-xs text-muted-foreground`,children:[(0,w.jsx)(`input`,{checked:!1,disabled:!0,readOnly:!0,type:`checkbox`}),(0,w.jsxs)(`span`,{children:[e.label,(0,w.jsx)(`span`,{className:`mt-0.5 block`,children:e.note})]})]},e.id))]}),(0,w.jsx)(re,{commands:De({dbInstanceIdentifier:B.dbInstanceIdentifier??``,engine:V,engineVersion:B.engineVersion??``,dbInstanceClass:B.dbInstanceClass??``,allocatedStorage:B.allocatedStorage??20,masterUsername:B.masterUsername??``,dbName:B.dbName??``,port:B.port??``,dbSubnetGroupName:H,vpcSecurityGroupIds:U,dbParameterGroupName:B.dbParameterGroupName??``,deletionProtection:B.deletionProtection??!1,backupRetentionPeriod:B.backupRetentionPeriod??T,preferredBackupWindow:B.preferredBackupWindow??``,preferredMaintenanceWindow:B.preferredMaintenanceWindow??``})}),(0,w.jsx)(ge,{isPending:n.isPending,isSubmitting:Me,onCancel:async()=>{await e({to:`/rds/describe-db-instances`})},pendingLabel:`Creating…`,submitLabel:`Create Database`})]})]})}function De(e){return[{label:`Create DB Instance`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-instance`},...f(`--db-instance-identifier`,d(e.dbInstanceIdentifier,`DBInstanceIdentifier`)),...f(`--engine`,d(e.engine,`Engine`)),...f(`--db-instance-class`,d(e.dbInstanceClass,`DBInstanceClass`)),...f(`--allocated-storage`,e.allocatedStorage),...f(`--master-username`,d(e.masterUsername,`MasterUsername`)),{type:`flag`,value:` --master-user-password`},{type:`variable`,value:` $DB_PASSWORD`},...u(`--engine-version`,e.engineVersion),...u(`--db-name`,e.dbName),...u(`--port`,e.port),...u(`--db-subnet-group-name`,e.dbSubnetGroupName),...u(`--vpc-security-group-ids`,e.vpcSecurityGroupIds.join(` `)),...u(`--db-parameter-group-name`,e.dbParameterGroupName),...u(`--deletion-protection`,e.deletionProtection),...f(`--backup-retention-period`,e.backupRetentionPeriod),...u(`--preferred-backup-window`,e.preferredBackupWindow),...u(`--preferred-maintenance-window`,e.preferredMaintenanceWindow)]}]}var D=E;export{D as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-CkK-hDRM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-BvJjm9oV.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-CkK-hDRM.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-BvJjm9oV.js index 99b1ebd96..92a88e99f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-CkK-hDRM.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-parameter-group-BvJjm9oV.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-BH3pQKLF.js";import{t as ne}from"./back-link-CjKy1JE5.js";import{c as re,i as n,n as ie,s as ae,t as oe}from"./select-B01jpDaX.js";import{n as r,r as i,t as se}from"./cli-command-panel-CLiFy1rG.js";import{t as ce}from"./input-6kdUb_DH.js";import{g as le}from"./rds-CE3126Ga.js";import{n as ue}from"./rds-BkKLEWPo.js";import{o as de}from"./rds-CyiqRExv.js";import{t as fe}from"./page-heading-vksh_67w.js";import{a as pe,i as me,n as he,t as ge}from"./zod-DF_n2ejy.js";import{t as _e}from"./error-banner-DeOeVBKS.js";import{t as ve}from"./form-actions-BUM37An0.js";import{n as ye,r as a,s as o,t as s}from"./field-c7GHI5st.js";import{t as be}from"./tags-field-array-Dk9nPDzt.js";var xe=t(),c=e();function l(){let e=(0,xe.c)(84),t=te(),n=ue(),{data:r}=ee(de),i;e[0]===r.DBEngineVersions?i=e[1]:(i=r.DBEngineVersions??[],e[0]=r.DBEngineVersions,e[1]=i);let l;e[2]===i?l=e[3]:(l=new Map(i.filter(we).map(Ce)),e[2]=i,e[3]=l);let u;e[4]===l?u=e[5]:(u=[...l],e[4]=l,e[5]=u);let d=u,f;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(f=ge(le),e[6]=f):f=e[6];let Ee=d[0]?.[0]??``,p;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=[],e[7]=p):p=e[7];let m;e[8]===Ee?m=e[9]:(m={resolver:f,defaultValues:{dbParameterGroupName:``,dbParameterGroupFamily:Ee,description:``,tags:p}},e[8]=Ee,e[9]=m);let{control:h,formState:De,handleSubmit:Oe,register:g}=me(m),{errors:_,isSubmitting:v}=De,y;e[10]===h?y=e[11]:(y={control:h},e[10]=h,e[11]=y);let b=pe(y),x;e[12]!==n||e[13]!==t?(x=async e=>{await n.mutateAsync(e),await t({to:`/rds/describe-db-parameter-groups/$name`,params:{name:e.dbParameterGroupName}})},e[12]=n,e[13]=t,e[14]=x):x=e[14];let S=x,C,w;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,c.jsx)(ne,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),w=(0,c.jsx)(fe,{title:`Create DB Parameter Group`}),e[15]=C,e[16]=w):(C=e[15],w=e[16]);let T;e[17]===n.error?T=e[18]:(T=n.error&&(0,c.jsx)(_e,{error:n.error,msg:`Failed to create the DB parameter group`}),e[17]=n.error,e[18]=T);let E;e[19]!==Oe||e[20]!==S?(E=Oe(S),e[19]=Oe,e[20]=S,e[21]=E):E=e[21];let D;e[22]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-name`,children:`Name`})}),e[22]=D):D=e[22];let O=!!_.dbParameterGroupName,k;e[23]===g?k=e[24]:(k=g(`dbParameterGroupName`),e[23]=g,e[24]=k);let A;e[25]!==O||e[26]!==k?(A=(0,c.jsx)(ce,{"aria-invalid":O,id:`parameter-group-name`,placeholder:`orders-postgres18`,...k}),e[25]=O,e[26]=k,e[27]=A):A=e[27];let j;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,c.jsx)(ye,{children:`Letters, digits and hyphens, starting with a letter. The service reserves the name "default" and the "default." prefix.`}),e[28]=j):j=e[28];let M;e[29]===_.dbParameterGroupName?M=e[30]:(M=(0,c.jsx)(a,{errors:[_.dbParameterGroupName]}),e[29]=_.dbParameterGroupName,e[30]=M);let N;e[31]!==A||e[32]!==M?(N=(0,c.jsxs)(s,{children:[D,A,j,M]}),e[31]=A,e[32]=M,e[33]=N):N=e[33];let P;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-family`,children:`Family`})}),e[34]=P):P=e[34];let F;e[35]!==_.dbParameterGroupFamily||e[36]!==d?(F=e=>{let{field:t}=e;return(0,c.jsxs)(oe,{onValueChange:t.onChange,value:t.value,children:[(0,c.jsx)(ae,{"aria-invalid":!!_.dbParameterGroupFamily,className:`w-full`,id:`parameter-group-family`,children:(0,c.jsx)(re,{placeholder:`Select a family`})}),(0,c.jsx)(ie,{children:d.map(Se)})]})},e[35]=_.dbParameterGroupFamily,e[36]=d,e[37]=F):F=e[37];let I;e[38]!==h||e[39]!==F?(I=(0,c.jsx)(he,{control:h,name:`dbParameterGroupFamily`,render:F}),e[38]=h,e[39]=F,e[40]=I):I=e[40];let L;e[41]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,c.jsx)(ye,{children:`The family fixes which engine can attach the group, and it cannot be changed afterwards. A group of one family is refused by an instance of the other engine.`}),e[41]=L):L=e[41];let R;e[42]===_.dbParameterGroupFamily?R=e[43]:(R=(0,c.jsx)(a,{errors:[_.dbParameterGroupFamily]}),e[42]=_.dbParameterGroupFamily,e[43]=R);let z;e[44]!==I||e[45]!==R?(z=(0,c.jsxs)(s,{children:[P,I,L,R]}),e[44]=I,e[45]=R,e[46]=z):z=e[46];let B;e[47]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-description`,children:`Description`})}),e[47]=B):B=e[47];let V=!!_.description,H;e[48]===g?H=e[49]:(H=g(`description`),e[48]=g,e[49]=H);let U;e[50]!==V||e[51]!==H?(U=(0,c.jsx)(ce,{"aria-invalid":V,id:`parameter-group-description`,placeholder:`Tuned settings for the orders database`,...H}),e[50]=V,e[51]=H,e[52]=U):U=e[52];let W;e[53]===_.description?W=e[54]:(W=(0,c.jsx)(a,{errors:[_.description]}),e[53]=_.description,e[54]=W);let G;e[55]!==U||e[56]!==W?(G=(0,c.jsxs)(s,{children:[B,U,W]}),e[55]=U,e[56]=W,e[57]=G):G=e[57];let K;e[58]===h?K=e[59]:(K=(0,c.jsx)(be,{control:h,name:`tags`}),e[58]=h,e[59]=K);let q;e[60]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A new group starts empty: every value is the engine default until you override one, so a fresh group and the default group behave identically.`}),e[60]=q):q=e[60];let ke=b.dbParameterGroupName??``,Ae=b.dbParameterGroupFamily??``,je=b.description??``,J;e[61]!==ke||e[62]!==Ae||e[63]!==je?(J=Te({dbParameterGroupName:ke,dbParameterGroupFamily:Ae,description:je}),e[61]=ke,e[62]=Ae,e[63]=je,e[64]=J):J=e[64];let Y;e[65]===J?Y=e[66]:(Y=(0,c.jsx)(se,{commands:J}),e[65]=J,e[66]=Y);let X;e[67]===t?X=e[68]:(X=async()=>{await t({to:`/rds/describe-db-parameter-groups`})},e[67]=t,e[68]=X);let Z;e[69]!==n.isPending||e[70]!==v||e[71]!==X?(Z=(0,c.jsx)(ve,{isPending:n.isPending,isSubmitting:v,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Parameter Group`}),e[69]=n.isPending,e[70]=v,e[71]=X,e[72]=Z):Z=e[72];let Q;e[73]!==E||e[74]!==N||e[75]!==z||e[76]!==G||e[77]!==K||e[78]!==Y||e[79]!==Z?(Q=(0,c.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:E,children:[N,z,G,K,q,Y,Z]}),e[73]=E,e[74]=N,e[75]=z,e[76]=G,e[77]=K,e[78]=Y,e[79]=Z,e[80]=Q):Q=e[80];let $;return e[81]!==T||e[82]!==Q?($=(0,c.jsxs)(c.Fragment,{children:[C,w,T,Q]}),e[81]=T,e[82]=Q,e[83]=$):$=e[83],$}function Se(e){let[t,ee]=e;return(0,c.jsxs)(n,{value:t,children:[t,` — `,ee]},t)}function Ce(e){return[e.DBParameterGroupFamily??``,e.DBEngineVersionDescription??e.Engine??``]}function we(e){return e.DBParameterGroupFamily}function Te(e){return[{label:`Create DB Parameter Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-parameter-group`},...i(`--db-parameter-group-name`,r(e.dbParameterGroupName,`DBParameterGroupName`)),...i(`--db-parameter-group-family`,r(e.dbParameterGroupFamily,`DBParameterGroupFamily`)),...i(`--description`,`"${r(e.description,`Description`)}"`)]}]}var u=l;export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-CTe_-BZA.js";import{t as ne}from"./back-link-wsXUoJ12.js";import{c as re,i as n,n as ie,s as ae,t as oe}from"./select-Cn66OoPn.js";import{n as r,r as i,t as se}from"./cli-command-panel-DavMY-tN.js";import{t as ce}from"./input-D3aUBtS6.js";import{g as le}from"./rds-DIuGt87z.js";import{n as ue}from"./rds-DbPUva_R.js";import{o as de}from"./rds-Ca8CaJkU.js";import{t as fe}from"./page-heading-vksh_67w.js";import{a as pe,i as me,n as he,t as ge}from"./zod-A4qtKH_p.js";import{t as _e}from"./error-banner-DeOeVBKS.js";import{t as ve}from"./form-actions-DXvy9CQI.js";import{n as ye,r as a,s as o,t as s}from"./field-CS-ql6du.js";import{t as be}from"./tags-field-array-Bjg8Nmui.js";var xe=t(),c=e();function l(){let e=(0,xe.c)(84),t=te(),n=ue(),{data:r}=ee(de),i;e[0]===r.DBEngineVersions?i=e[1]:(i=r.DBEngineVersions??[],e[0]=r.DBEngineVersions,e[1]=i);let l;e[2]===i?l=e[3]:(l=new Map(i.filter(we).map(Ce)),e[2]=i,e[3]=l);let u;e[4]===l?u=e[5]:(u=[...l],e[4]=l,e[5]=u);let d=u,f;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(f=ge(le),e[6]=f):f=e[6];let Ee=d[0]?.[0]??``,p;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=[],e[7]=p):p=e[7];let m;e[8]===Ee?m=e[9]:(m={resolver:f,defaultValues:{dbParameterGroupName:``,dbParameterGroupFamily:Ee,description:``,tags:p}},e[8]=Ee,e[9]=m);let{control:h,formState:De,handleSubmit:Oe,register:g}=me(m),{errors:_,isSubmitting:v}=De,y;e[10]===h?y=e[11]:(y={control:h},e[10]=h,e[11]=y);let b=pe(y),x;e[12]!==n||e[13]!==t?(x=async e=>{await n.mutateAsync(e),await t({to:`/rds/describe-db-parameter-groups/$name`,params:{name:e.dbParameterGroupName}})},e[12]=n,e[13]=t,e[14]=x):x=e[14];let S=x,C,w;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,c.jsx)(ne,{to:`/rds/describe-db-parameter-groups`,children:`Back to parameter groups`}),w=(0,c.jsx)(fe,{title:`Create DB Parameter Group`}),e[15]=C,e[16]=w):(C=e[15],w=e[16]);let T;e[17]===n.error?T=e[18]:(T=n.error&&(0,c.jsx)(_e,{error:n.error,msg:`Failed to create the DB parameter group`}),e[17]=n.error,e[18]=T);let E;e[19]!==Oe||e[20]!==S?(E=Oe(S),e[19]=Oe,e[20]=S,e[21]=E):E=e[21];let D;e[22]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-name`,children:`Name`})}),e[22]=D):D=e[22];let O=!!_.dbParameterGroupName,k;e[23]===g?k=e[24]:(k=g(`dbParameterGroupName`),e[23]=g,e[24]=k);let A;e[25]!==O||e[26]!==k?(A=(0,c.jsx)(ce,{"aria-invalid":O,id:`parameter-group-name`,placeholder:`orders-postgres18`,...k}),e[25]=O,e[26]=k,e[27]=A):A=e[27];let j;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,c.jsx)(ye,{children:`Letters, digits and hyphens, starting with a letter. The service reserves the name "default" and the "default." prefix.`}),e[28]=j):j=e[28];let M;e[29]===_.dbParameterGroupName?M=e[30]:(M=(0,c.jsx)(a,{errors:[_.dbParameterGroupName]}),e[29]=_.dbParameterGroupName,e[30]=M);let N;e[31]!==A||e[32]!==M?(N=(0,c.jsxs)(s,{children:[D,A,j,M]}),e[31]=A,e[32]=M,e[33]=N):N=e[33];let P;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-family`,children:`Family`})}),e[34]=P):P=e[34];let F;e[35]!==_.dbParameterGroupFamily||e[36]!==d?(F=e=>{let{field:t}=e;return(0,c.jsxs)(oe,{onValueChange:t.onChange,value:t.value,children:[(0,c.jsx)(ae,{"aria-invalid":!!_.dbParameterGroupFamily,className:`w-full`,id:`parameter-group-family`,children:(0,c.jsx)(re,{placeholder:`Select a family`})}),(0,c.jsx)(ie,{children:d.map(Se)})]})},e[35]=_.dbParameterGroupFamily,e[36]=d,e[37]=F):F=e[37];let I;e[38]!==h||e[39]!==F?(I=(0,c.jsx)(he,{control:h,name:`dbParameterGroupFamily`,render:F}),e[38]=h,e[39]=F,e[40]=I):I=e[40];let L;e[41]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,c.jsx)(ye,{children:`The family fixes which engine can attach the group, and it cannot be changed afterwards. A group of one family is refused by an instance of the other engine.`}),e[41]=L):L=e[41];let R;e[42]===_.dbParameterGroupFamily?R=e[43]:(R=(0,c.jsx)(a,{errors:[_.dbParameterGroupFamily]}),e[42]=_.dbParameterGroupFamily,e[43]=R);let z;e[44]!==I||e[45]!==R?(z=(0,c.jsxs)(s,{children:[P,I,L,R]}),e[44]=I,e[45]=R,e[46]=z):z=e[46];let B;e[47]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,c.jsx)(o,{children:(0,c.jsx)(`label`,{htmlFor:`parameter-group-description`,children:`Description`})}),e[47]=B):B=e[47];let V=!!_.description,H;e[48]===g?H=e[49]:(H=g(`description`),e[48]=g,e[49]=H);let U;e[50]!==V||e[51]!==H?(U=(0,c.jsx)(ce,{"aria-invalid":V,id:`parameter-group-description`,placeholder:`Tuned settings for the orders database`,...H}),e[50]=V,e[51]=H,e[52]=U):U=e[52];let W;e[53]===_.description?W=e[54]:(W=(0,c.jsx)(a,{errors:[_.description]}),e[53]=_.description,e[54]=W);let G;e[55]!==U||e[56]!==W?(G=(0,c.jsxs)(s,{children:[B,U,W]}),e[55]=U,e[56]=W,e[57]=G):G=e[57];let K;e[58]===h?K=e[59]:(K=(0,c.jsx)(be,{control:h,name:`tags`}),e[58]=h,e[59]=K);let q;e[60]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A new group starts empty: every value is the engine default until you override one, so a fresh group and the default group behave identically.`}),e[60]=q):q=e[60];let ke=b.dbParameterGroupName??``,Ae=b.dbParameterGroupFamily??``,je=b.description??``,J;e[61]!==ke||e[62]!==Ae||e[63]!==je?(J=Te({dbParameterGroupName:ke,dbParameterGroupFamily:Ae,description:je}),e[61]=ke,e[62]=Ae,e[63]=je,e[64]=J):J=e[64];let Y;e[65]===J?Y=e[66]:(Y=(0,c.jsx)(se,{commands:J}),e[65]=J,e[66]=Y);let X;e[67]===t?X=e[68]:(X=async()=>{await t({to:`/rds/describe-db-parameter-groups`})},e[67]=t,e[68]=X);let Z;e[69]!==n.isPending||e[70]!==v||e[71]!==X?(Z=(0,c.jsx)(ve,{isPending:n.isPending,isSubmitting:v,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Parameter Group`}),e[69]=n.isPending,e[70]=v,e[71]=X,e[72]=Z):Z=e[72];let Q;e[73]!==E||e[74]!==N||e[75]!==z||e[76]!==G||e[77]!==K||e[78]!==Y||e[79]!==Z?(Q=(0,c.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:E,children:[N,z,G,K,q,Y,Z]}),e[73]=E,e[74]=N,e[75]=z,e[76]=G,e[77]=K,e[78]=Y,e[79]=Z,e[80]=Q):Q=e[80];let $;return e[81]!==T||e[82]!==Q?($=(0,c.jsxs)(c.Fragment,{children:[C,w,T,Q]}),e[81]=T,e[82]=Q,e[83]=$):$=e[83],$}function Se(e){let[t,ee]=e;return(0,c.jsxs)(n,{value:t,children:[t,` — `,ee]},t)}function Ce(e){return[e.DBParameterGroupFamily??``,e.DBEngineVersionDescription??e.Engine??``]}function we(e){return e.DBParameterGroupFamily}function Te(e){return[{label:`Create DB Parameter Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-parameter-group`},...i(`--db-parameter-group-name`,r(e.dbParameterGroupName,`DBParameterGroupName`)),...i(`--db-parameter-group-family`,r(e.dbParameterGroupFamily,`DBParameterGroupFamily`)),...i(`--description`,`"${r(e.description,`Description`)}"`)]}]}var u=l;export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-CiBeyQ69.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-5YPk6G0l.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-CiBeyQ69.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-5YPk6G0l.js index 5f5a48e4f..b53ee8426 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-CiBeyQ69.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-snapshot-dialog-5YPk6G0l.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useQuery-2EKf7AyV.js";import{c as te,i,n as ne,s as re,t as ie}from"./select-B01jpDaX.js";import{t as a}from"./button-BarTr35m.js";import{t as ae}from"./input-6kdUb_DH.js";import{_ as oe,f as o,w as s}from"./rds-CE3126Ga.js";import{r as se}from"./rds-BkKLEWPo.js";import{r as ce}from"./rds-CyiqRExv.js";import{i as le,t as ue}from"./zod-DF_n2ejy.js";import{n as de,r as fe,s as c,t as l}from"./field-c7GHI5st.js";import{t as pe}from"./tags-field-array-Dk9nPDzt.js";import{a as me,i as he,l as ge,s as _e,t as ve}from"./alert-dialog-kCQ1W4Rz.js";import{n as ye,t as be}from"./picker-notice-tK9XfUSR.js";var xe=r(),Se=t(n(),1),u=e();function d(e){let t=(0,xe.c)(65),{open:n,onOpenChange:r,dbInstanceIdentifier:i,onCreated:o}=e,d=se(),f=i===void 0,p;t[0]===f?p=t[1]:(p={...ce,enabled:f},t[0]=f,t[1]=p);let m=ee(p),[h,Te]=(0,Se.useState)(i??``),g;t[2]===m.data?.DBInstances?g=t[3]:(g=m.data?.DBInstances??[],t[2]=m.data?.DBInstances,t[3]=g);let Ee=g.filter(we),_=Ee.length===0,v;t[4]!==m||t[5]!==_?(v=ye(m,_,{loading:`Loading the DB instances…`,failed:`Could not read the DB instances`,empty:`No DB instance is available or stopped, which is what a snapshot is taken from.`}),t[4]=m,t[5]=_,t[6]=v):v=t[6];let De=v,y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=ue(oe),t[7]=y):y=t[7];let b;t[8]===i?b=t[9]:(b=i?s(i,`snapshot`):``,t[8]=i,t[9]=b);let x;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(x=[],t[10]=x):x=t[10];let S;t[11]===b?S=t[12]:(S={resolver:y,defaultValues:{dbSnapshotIdentifier:b,tags:x}},t[11]=b,t[12]=S);let{control:C,formState:Oe,handleSubmit:w,register:T,setValue:E}=le(S),{errors:D,isSubmitting:ke}=Oe,O;t[13]===E?O=t[14]:(O=function(e){Te(e??``),e&&E(`dbSnapshotIdentifier`,s(e,`snapshot`),{shouldValidate:!0})},t[13]=E,t[14]=O);let Ae=O,k;t[15]!==d||t[16]!==o||t[17]!==r||t[18]!==h?(k=async e=>{try{await d.mutateAsync({...e,dbInstanceIdentifier:h})}catch{return}r(!1),o?.()},t[15]=d,t[16]=o,t[17]=r,t[18]=h,t[19]=k):k=t[19];let A=k,j=ve,M=he,N;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,u.jsxs)(_e,{children:[(0,u.jsx)(ge,{children:`Take DB Snapshot`}),(0,u.jsx)(me,{children:`The engine is held at a checkpoint while the snapshot is taken, so the instance reads as backing-up until it finishes.`})]}),t[20]=N):N=t[20];let P;t[21]!==w||t[22]!==A?(P=w(A),t[21]=w,t[22]=A,t[23]=P):P=t[23];let F=i?(0,u.jsxs)(l,{children:[(0,u.jsx)(c,{children:`DB instance`}),(0,u.jsx)(`p`,{className:`font-mono text-sm`,children:i})]}):(0,u.jsxs)(l,{children:[(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`snapshot-instance`,children:`DB instance`})}),De?(0,u.jsx)(be,{notice:De}):(0,u.jsxs)(ie,{onValueChange:Ae,value:h,children:[(0,u.jsx)(re,{className:`w-full`,id:`snapshot-instance`,children:(0,u.jsx)(te,{placeholder:`Select a DB instance`})}),(0,u.jsx)(ne,{children:Ee.map(Ce)})]})]}),I;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`snapshot-identifier`,children:`Snapshot identifier`})}),t[24]=I):I=t[24];let L=!!D.dbSnapshotIdentifier,R;t[25]===T?R=t[26]:(R=T(`dbSnapshotIdentifier`),t[25]=T,t[26]=R);let z;t[27]!==L||t[28]!==R?(z=(0,u.jsx)(ae,{"aria-invalid":L,id:`snapshot-identifier`,...R}),t[27]=L,t[28]=R,t[29]=z):z=t[29];let B;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,u.jsx)(de,{children:`Lowercase letters, digits and hyphens. The rds: namespace belongs to automated backups and cannot be used here.`}),t[30]=B):B=t[30];let V;t[31]===D.dbSnapshotIdentifier?V=t[32]:(V=(0,u.jsx)(fe,{errors:[D.dbSnapshotIdentifier]}),t[31]=D.dbSnapshotIdentifier,t[32]=V);let H;t[33]!==z||t[34]!==V?(H=(0,u.jsxs)(l,{children:[I,z,B,V]}),t[33]=z,t[34]=V,t[35]=H):H=t[35];let U;t[36]===C?U=t[37]:(U=(0,u.jsx)(pe,{control:C,name:`tags`}),t[36]=C,t[37]=U);let W;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A snapshot the engine could not be quiesced for is still taken and reported as crash consistent on the source instance's Backups tab. The snapshot's own events never carry it.`}),t[38]=W):W=t[38];let G;t[39]===d.error?G=t[40]:(G=d.error&&(0,u.jsx)(`p`,{className:`text-sm text-destructive`,children:d.error.message}),t[39]=d.error,t[40]=G);let K;t[41]===r?K=t[42]:(K=(0,u.jsx)(a,{onClick:()=>{r(!1)},type:`button`,variant:`outline`,children:`Cancel`}),t[41]=r,t[42]=K);let q=ke||d.isPending||h===``,J=d.isPending?`Taking Snapshot…`:`Take Snapshot`,Y;t[43]!==q||t[44]!==J?(Y=(0,u.jsx)(a,{disabled:q,type:`submit`,children:J}),t[43]=q,t[44]=J,t[45]=Y):Y=t[45];let X;t[46]!==K||t[47]!==Y?(X=(0,u.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[K,Y]}),t[46]=K,t[47]=Y,t[48]=X):X=t[48];let Z;t[49]!==P||t[50]!==F||t[51]!==H||t[52]!==U||t[53]!==G||t[54]!==X?(Z=(0,u.jsxs)(`form`,{className:`space-y-4`,onSubmit:P,children:[F,H,U,W,G,X]}),t[49]=P,t[50]=F,t[51]=H,t[52]=U,t[53]=G,t[54]=X,t[55]=Z):Z=t[55];let Q;t[56]!==M||t[57]!==N||t[58]!==Z?(Q=(0,u.jsxs)(M,{className:`max-h-[85vh] overflow-y-auto`,children:[N,Z]}),t[56]=M,t[57]=N,t[58]=Z,t[59]=Q):Q=t[59];let $;return t[60]!==j||t[61]!==r||t[62]!==n||t[63]!==Q?($=(0,u.jsx)(j,{onOpenChange:r,open:n,children:Q}),t[60]=j,t[61]=r,t[62]=n,t[63]=Q,t[64]=$):$=t[64],$}function Ce(e){return(0,u.jsxs)(i,{value:e.DBInstanceIdentifier??``,children:[e.DBInstanceIdentifier,` (`,e.DBInstanceStatus,`)`]},e.DBInstanceIdentifier)}function we(e){return o(e.DBInstanceStatus)}export{d as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useQuery-2EKf7AyV.js";import{c as te,i,n as ne,s as re,t as ie}from"./select-Cn66OoPn.js";import{t as a}from"./button-qf9lLJ2x.js";import{t as ae}from"./input-D3aUBtS6.js";import{_ as oe,f as o,w as s}from"./rds-DIuGt87z.js";import{r as se}from"./rds-DbPUva_R.js";import{r as ce}from"./rds-Ca8CaJkU.js";import{i as le,t as ue}from"./zod-A4qtKH_p.js";import{n as de,r as fe,s as c,t as l}from"./field-CS-ql6du.js";import{t as pe}from"./tags-field-array-Bjg8Nmui.js";import{a as me,i as he,l as ge,s as _e,t as ve}from"./alert-dialog-jxylPXwR.js";import{n as ye,t as be}from"./picker-notice-tK9XfUSR.js";var xe=r(),Se=t(n(),1),u=e();function d(e){let t=(0,xe.c)(65),{open:n,onOpenChange:r,dbInstanceIdentifier:i,onCreated:o}=e,d=se(),f=i===void 0,p;t[0]===f?p=t[1]:(p={...ce,enabled:f},t[0]=f,t[1]=p);let m=ee(p),[h,Te]=(0,Se.useState)(i??``),g;t[2]===m.data?.DBInstances?g=t[3]:(g=m.data?.DBInstances??[],t[2]=m.data?.DBInstances,t[3]=g);let Ee=g.filter(we),_=Ee.length===0,v;t[4]!==m||t[5]!==_?(v=ye(m,_,{loading:`Loading the DB instances…`,failed:`Could not read the DB instances`,empty:`No DB instance is available or stopped, which is what a snapshot is taken from.`}),t[4]=m,t[5]=_,t[6]=v):v=t[6];let De=v,y;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(y=ue(oe),t[7]=y):y=t[7];let b;t[8]===i?b=t[9]:(b=i?s(i,`snapshot`):``,t[8]=i,t[9]=b);let x;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(x=[],t[10]=x):x=t[10];let S;t[11]===b?S=t[12]:(S={resolver:y,defaultValues:{dbSnapshotIdentifier:b,tags:x}},t[11]=b,t[12]=S);let{control:C,formState:Oe,handleSubmit:w,register:T,setValue:E}=le(S),{errors:D,isSubmitting:ke}=Oe,O;t[13]===E?O=t[14]:(O=function(e){Te(e??``),e&&E(`dbSnapshotIdentifier`,s(e,`snapshot`),{shouldValidate:!0})},t[13]=E,t[14]=O);let Ae=O,k;t[15]!==d||t[16]!==o||t[17]!==r||t[18]!==h?(k=async e=>{try{await d.mutateAsync({...e,dbInstanceIdentifier:h})}catch{return}r(!1),o?.()},t[15]=d,t[16]=o,t[17]=r,t[18]=h,t[19]=k):k=t[19];let A=k,j=ve,M=he,N;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,u.jsxs)(_e,{children:[(0,u.jsx)(ge,{children:`Take DB Snapshot`}),(0,u.jsx)(me,{children:`The engine is held at a checkpoint while the snapshot is taken, so the instance reads as backing-up until it finishes.`})]}),t[20]=N):N=t[20];let P;t[21]!==w||t[22]!==A?(P=w(A),t[21]=w,t[22]=A,t[23]=P):P=t[23];let F=i?(0,u.jsxs)(l,{children:[(0,u.jsx)(c,{children:`DB instance`}),(0,u.jsx)(`p`,{className:`font-mono text-sm`,children:i})]}):(0,u.jsxs)(l,{children:[(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`snapshot-instance`,children:`DB instance`})}),De?(0,u.jsx)(be,{notice:De}):(0,u.jsxs)(ie,{onValueChange:Ae,value:h,children:[(0,u.jsx)(re,{className:`w-full`,id:`snapshot-instance`,children:(0,u.jsx)(te,{placeholder:`Select a DB instance`})}),(0,u.jsx)(ne,{children:Ee.map(Ce)})]})]}),I;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`snapshot-identifier`,children:`Snapshot identifier`})}),t[24]=I):I=t[24];let L=!!D.dbSnapshotIdentifier,R;t[25]===T?R=t[26]:(R=T(`dbSnapshotIdentifier`),t[25]=T,t[26]=R);let z;t[27]!==L||t[28]!==R?(z=(0,u.jsx)(ae,{"aria-invalid":L,id:`snapshot-identifier`,...R}),t[27]=L,t[28]=R,t[29]=z):z=t[29];let B;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,u.jsx)(de,{children:`Lowercase letters, digits and hyphens. The rds: namespace belongs to automated backups and cannot be used here.`}),t[30]=B):B=t[30];let V;t[31]===D.dbSnapshotIdentifier?V=t[32]:(V=(0,u.jsx)(fe,{errors:[D.dbSnapshotIdentifier]}),t[31]=D.dbSnapshotIdentifier,t[32]=V);let H;t[33]!==z||t[34]!==V?(H=(0,u.jsxs)(l,{children:[I,z,B,V]}),t[33]=z,t[34]=V,t[35]=H):H=t[35];let U;t[36]===C?U=t[37]:(U=(0,u.jsx)(pe,{control:C,name:`tags`}),t[36]=C,t[37]=U);let W;t[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A snapshot the engine could not be quiesced for is still taken and reported as crash consistent on the source instance's Backups tab. The snapshot's own events never carry it.`}),t[38]=W):W=t[38];let G;t[39]===d.error?G=t[40]:(G=d.error&&(0,u.jsx)(`p`,{className:`text-sm text-destructive`,children:d.error.message}),t[39]=d.error,t[40]=G);let K;t[41]===r?K=t[42]:(K=(0,u.jsx)(a,{onClick:()=>{r(!1)},type:`button`,variant:`outline`,children:`Cancel`}),t[41]=r,t[42]=K);let q=ke||d.isPending||h===``,J=d.isPending?`Taking Snapshot…`:`Take Snapshot`,Y;t[43]!==q||t[44]!==J?(Y=(0,u.jsx)(a,{disabled:q,type:`submit`,children:J}),t[43]=q,t[44]=J,t[45]=Y):Y=t[45];let X;t[46]!==K||t[47]!==Y?(X=(0,u.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[K,Y]}),t[46]=K,t[47]=Y,t[48]=X):X=t[48];let Z;t[49]!==P||t[50]!==F||t[51]!==H||t[52]!==U||t[53]!==G||t[54]!==X?(Z=(0,u.jsxs)(`form`,{className:`space-y-4`,onSubmit:P,children:[F,H,U,W,G,X]}),t[49]=P,t[50]=F,t[51]=H,t[52]=U,t[53]=G,t[54]=X,t[55]=Z):Z=t[55];let Q;t[56]!==M||t[57]!==N||t[58]!==Z?(Q=(0,u.jsxs)(M,{className:`max-h-[85vh] overflow-y-auto`,children:[N,Z]}),t[56]=M,t[57]=N,t[58]=Z,t[59]=Q):Q=t[59];let $;return t[60]!==j||t[61]!==r||t[62]!==n||t[63]!==Q?($=(0,u.jsx)(j,{onOpenChange:r,open:n,children:Q}),t[60]=j,t[61]=r,t[62]=n,t[63]=Q,t[64]=$):$=t[64],$}function Ce(e){return(0,u.jsxs)(i,{value:e.DBInstanceIdentifier??``,children:[e.DBInstanceIdentifier,` (`,e.DBInstanceStatus,`)`]},e.DBInstanceIdentifier)}function we(e){return o(e.DBInstanceStatus)}export{d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-BV65rf5O.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-BV65rf5O.js deleted file mode 100644 index 32f941b9e..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-BV65rf5O.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{sn as te}from"./cluster-config-xw_Q7X1e.js";import{t as ne}from"./back-link-CjKy1JE5.js";import{n as r,r as i,t as re}from"./cli-command-panel-CLiFy1rG.js";import{t as ie}from"./input-6kdUb_DH.js";import{M as ae,O as oe}from"./ec2-CWEplLq4.js";import{v as se}from"./rds-CE3126Ga.js";import{i as ce}from"./rds-BkKLEWPo.js";import{t as le}from"./page-heading-vksh_67w.js";import{a as ue,i as de,t as fe}from"./zod-DF_n2ejy.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-BUM37An0.js";import{n as he,r as ge,s as _e,t as ve}from"./field-c7GHI5st.js";import{t as ye}from"./tags-field-array-Dk9nPDzt.js";var be=t(),a=e();function xe(e){let t=te(e.Tags),n=[e.CidrBlock,e.AvailabilityZone,t].filter(Boolean);return`${e.SubnetId} (${n.join(`, `)})`}function o(){let e=(0,be.c)(94),t=ee(),r=ce(),{data:i}=n(oe),{data:o}=n(ae),s;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=fe(se),e[0]=s):s=e[0];let c;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(c={resolver:s,defaultValues:{dbSubnetGroupName:``,dbSubnetGroupDescription:``,subnetIds:[],tags:[]}},e[1]=c):c=e[1];let{control:l,formState:we,handleSubmit:Te,register:u,setValue:Ee}=de(c),{errors:d,isSubmitting:De}=we,f;e[2]===l?f=e[3]:(f={control:l},e[2]=l,e[3]=f);let p=ue(f),m;e[4]===p.subnetIds?m=e[5]:(m=p.subnetIds??[],e[4]=p.subnetIds,e[5]=m);let h=m,g;e[6]===h?g=e[7]:(g=new Set(h),e[6]=h,e[7]=g);let Oe=g,_;e[8]===i.Subnets?_=e[9]:(_=i.Subnets??[],e[8]=i.Subnets,e[9]=_);let v=_,y;e[10]===o.Vpcs?y=e[11]:(y=o.Vpcs??[],e[10]=o.Vpcs,e[11]=y);let ke=y,b;e[12]!==h||e[13]!==v?(b=v.find(e=>e.SubnetId===h[0])?.VpcId,e[12]=h,e[13]=v,e[14]=b):b=e[14];let x=b,S;e[15]===v?S=e[16]:(S=new Set(v.map(Se).filter(Boolean)),e[15]=v,e[16]=S);let C;e[17]===S?C=e[18]:(C=[...S],e[17]=S,e[18]=C);let Ae=C,w;e[19]!==h||e[20]!==Ee?(w=e=>{let t=h.includes(e)?h.filter(t=>t!==e):[...h,e];Ee(`subnetIds`,t,{shouldValidate:!0})},e[19]=h,e[20]=Ee,e[21]=w):w=e[21];let je=w,T;e[22]!==r||e[23]!==t?(T=async e=>{await r.mutateAsync(e),await t({to:`/rds/describe-db-subnet-groups`})},e[22]=r,e[23]=t,e[24]=T):T=e[24];let E=T,D,O;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,a.jsx)(ne,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),O=(0,a.jsx)(le,{title:`Create DB Subnet Group`}),e[25]=D,e[26]=O):(D=e[25],O=e[26]);let k;e[27]===r.error?k=e[28]:(k=r.error&&(0,a.jsx)(pe,{error:r.error,msg:`Failed to create the DB subnet group`}),e[27]=r.error,e[28]=k);let A;e[29]!==Te||e[30]!==E?(A=Te(E),e[29]=Te,e[30]=E,e[31]=A):A=e[31];let j;e[32]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,a.jsx)(_e,{children:(0,a.jsx)(`label`,{htmlFor:`subnet-group-name`,children:`Name`})}),e[32]=j):j=e[32];let Me=!!d.dbSubnetGroupName,M;e[33]===u?M=e[34]:(M=u(`dbSubnetGroupName`),e[33]=u,e[34]=M);let N;e[35]!==Me||e[36]!==M?(N=(0,a.jsx)(ie,{"aria-invalid":Me,id:`subnet-group-name`,placeholder:`orders-db-subnets`,...M}),e[35]=Me,e[36]=M,e[37]=N):N=e[37];let P;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,a.jsx)(he,{children:`Letters, digits and hyphens, starting with a letter. The name cannot be changed later, and there is no ModifyDBSubnetGroup — editing a group means deleting and recreating it.`}),e[38]=P):P=e[38];let F;e[39]===d.dbSubnetGroupName?F=e[40]:(F=(0,a.jsx)(ge,{errors:[d.dbSubnetGroupName]}),e[39]=d.dbSubnetGroupName,e[40]=F);let I;e[41]!==N||e[42]!==F?(I=(0,a.jsxs)(ve,{children:[j,N,P,F]}),e[41]=N,e[42]=F,e[43]=I):I=e[43];let L;e[44]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,a.jsx)(_e,{children:(0,a.jsx)(`label`,{htmlFor:`subnet-group-description`,children:`Description`})}),e[44]=L):L=e[44];let Ne=!!d.dbSubnetGroupDescription,R;e[45]===u?R=e[46]:(R=u(`dbSubnetGroupDescription`),e[45]=u,e[46]=R);let z;e[47]!==Ne||e[48]!==R?(z=(0,a.jsx)(ie,{"aria-invalid":Ne,id:`subnet-group-description`,placeholder:`Private subnets for the orders database`,...R}),e[47]=Ne,e[48]=R,e[49]=z):z=e[49];let B;e[50]===d.dbSubnetGroupDescription?B=e[51]:(B=(0,a.jsx)(ge,{errors:[d.dbSubnetGroupDescription]}),e[50]=d.dbSubnetGroupDescription,e[51]=B);let V;e[52]!==z||e[53]!==B?(V=(0,a.jsxs)(ve,{children:[L,z,B]}),e[52]=z,e[53]=B,e[54]=V):V=e[54];let H;e[55]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,a.jsx)(_e,{children:`Subnets`}),e[55]=H):H=e[55];let U;e[56]!==x||e[57]!==Oe||e[58]!==v||e[59]!==je||e[60]!==Ae||e[61]!==ke?(U=v.length===0?(0,a.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in this account. Create one before creating a subnet group.`}):(0,a.jsx)(`div`,{className:`space-y-4`,children:Ae.map(e=>{let t=te(ke.find(t=>t.VpcId===e)?.Tags),n=x!==void 0&&x!==e;return(0,a.jsxs)(`div`,{children:[(0,a.jsxs)(`p`,{className:`mb-1 font-mono text-xs text-muted-foreground`,children:[e,t&&` (${t})`,n&&` — a subnet group must span one VPC, so this one is out of reach`]}),(0,a.jsx)(`div`,{className:`space-y-1 pl-3`,children:v.filter(t=>t.VpcId===e).map(e=>(0,a.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,a.jsx)(`input`,{"aria-label":`Subnet ${xe(e)}`,checked:Oe.has(e.SubnetId??``),disabled:n,onChange:()=>{je(e.SubnetId??``)},type:`checkbox`}),(0,a.jsx)(`span`,{className:`font-mono`,children:xe(e)})]},e.SubnetId))})]},e)})}),e[56]=x,e[57]=Oe,e[58]=v,e[59]=je,e[60]=Ae,e[61]=ke,e[62]=U):U=e[62];let W;e[63]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,a.jsxs)(he,{children:[`At most `,20,` subnets, all in one VPC. This platform is single-AZ, so the two-AZ rule AWS enforces does not apply here.`]}),e[63]=W):W=e[63];let G;e[64]===d.subnetIds?G=e[65]:(G=(0,a.jsx)(ge,{errors:[d.subnetIds]}),e[64]=d.subnetIds,e[65]=G);let K;e[66]!==U||e[67]!==G?(K=(0,a.jsxs)(ve,{children:[H,U,W,G]}),e[66]=U,e[67]=G,e[68]=K):K=e[68];let q;e[69]===l?q=e[70]:(q=(0,a.jsx)(ye,{control:l,name:`tags`}),e[69]=l,e[70]=q);let Pe=p.dbSubnetGroupName??``,Fe=p.dbSubnetGroupDescription??``,J;e[71]!==h||e[72]!==Pe||e[73]!==Fe?(J=Ce({dbSubnetGroupName:Pe,dbSubnetGroupDescription:Fe,subnetIds:h}),e[71]=h,e[72]=Pe,e[73]=Fe,e[74]=J):J=e[74];let Y;e[75]===J?Y=e[76]:(Y=(0,a.jsx)(re,{commands:J}),e[75]=J,e[76]=Y);let X;e[77]===t?X=e[78]:(X=async()=>{await t({to:`/rds/describe-db-subnet-groups`})},e[77]=t,e[78]=X);let Z;e[79]!==r.isPending||e[80]!==De||e[81]!==X?(Z=(0,a.jsx)(me,{isPending:r.isPending,isSubmitting:De,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Subnet Group`}),e[79]=r.isPending,e[80]=De,e[81]=X,e[82]=Z):Z=e[82];let Q;e[83]!==A||e[84]!==I||e[85]!==V||e[86]!==K||e[87]!==q||e[88]!==Y||e[89]!==Z?(Q=(0,a.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:A,children:[I,V,K,q,Y,Z]}),e[83]=A,e[84]=I,e[85]=V,e[86]=K,e[87]=q,e[88]=Y,e[89]=Z,e[90]=Q):Q=e[90];let $;return e[91]!==k||e[92]!==Q?($=(0,a.jsxs)(a.Fragment,{children:[D,O,k,Q]}),e[91]=k,e[92]=Q,e[93]=$):$=e[93],$}function Se(e){return e.VpcId??``}function Ce(e){return[{label:`Create DB Subnet Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-subnet-group`},...i(`--db-subnet-group-name`,r(e.dbSubnetGroupName,`DBSubnetGroupName`)),...i(`--db-subnet-group-description`,`"${r(e.dbSubnetGroupDescription,`DBSubnetGroupDescription`)}"`),...i(`--subnet-ids`,r(e.subnetIds.join(` `),`SubnetIds`))]}]}var s=o;export{s as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-D2PX3uoX.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-D2PX3uoX.js new file mode 100644 index 000000000..7309ef201 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-db-subnet-group-D2PX3uoX.js @@ -0,0 +1 @@ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{cn as te}from"./cluster-config-DkOiY8HH.js";import{t as ne}from"./back-link-wsXUoJ12.js";import{n as r,r as i,t as re}from"./cli-command-panel-DavMY-tN.js";import{t as ie}from"./input-D3aUBtS6.js";import{M as ae,O as oe}from"./ec2-DYgBhYCJ.js";import{v as se}from"./rds-DIuGt87z.js";import{i as ce}from"./rds-DbPUva_R.js";import{t as le}from"./page-heading-vksh_67w.js";import{a as ue,i as de,t as fe}from"./zod-A4qtKH_p.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-DXvy9CQI.js";import{n as he,r as ge,s as _e,t as ve}from"./field-CS-ql6du.js";import{t as ye}from"./tags-field-array-Bjg8Nmui.js";var be=t(),a=e();function xe(e){let t=te(e.Tags),n=[e.CidrBlock,e.AvailabilityZone,t].filter(Boolean);return`${e.SubnetId} (${n.join(`, `)})`}function o(){let e=(0,be.c)(94),t=ee(),r=ce(),{data:i}=n(oe),{data:o}=n(ae),s;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=fe(se),e[0]=s):s=e[0];let c;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(c={resolver:s,defaultValues:{dbSubnetGroupName:``,dbSubnetGroupDescription:``,subnetIds:[],tags:[]}},e[1]=c):c=e[1];let{control:l,formState:we,handleSubmit:Te,register:u,setValue:Ee}=de(c),{errors:d,isSubmitting:De}=we,f;e[2]===l?f=e[3]:(f={control:l},e[2]=l,e[3]=f);let p=ue(f),m;e[4]===p.subnetIds?m=e[5]:(m=p.subnetIds??[],e[4]=p.subnetIds,e[5]=m);let h=m,g;e[6]===h?g=e[7]:(g=new Set(h),e[6]=h,e[7]=g);let Oe=g,_;e[8]===i.Subnets?_=e[9]:(_=i.Subnets??[],e[8]=i.Subnets,e[9]=_);let v=_,y;e[10]===o.Vpcs?y=e[11]:(y=o.Vpcs??[],e[10]=o.Vpcs,e[11]=y);let ke=y,b;e[12]!==h||e[13]!==v?(b=v.find(e=>e.SubnetId===h[0])?.VpcId,e[12]=h,e[13]=v,e[14]=b):b=e[14];let x=b,S;e[15]===v?S=e[16]:(S=new Set(v.map(Se).filter(Boolean)),e[15]=v,e[16]=S);let C;e[17]===S?C=e[18]:(C=[...S],e[17]=S,e[18]=C);let Ae=C,w;e[19]!==h||e[20]!==Ee?(w=e=>{let t=h.includes(e)?h.filter(t=>t!==e):[...h,e];Ee(`subnetIds`,t,{shouldValidate:!0})},e[19]=h,e[20]=Ee,e[21]=w):w=e[21];let je=w,T;e[22]!==r||e[23]!==t?(T=async e=>{await r.mutateAsync(e),await t({to:`/rds/describe-db-subnet-groups`})},e[22]=r,e[23]=t,e[24]=T):T=e[24];let E=T,D,O;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,a.jsx)(ne,{to:`/rds/describe-db-subnet-groups`,children:`Back to subnet groups`}),O=(0,a.jsx)(le,{title:`Create DB Subnet Group`}),e[25]=D,e[26]=O):(D=e[25],O=e[26]);let k;e[27]===r.error?k=e[28]:(k=r.error&&(0,a.jsx)(pe,{error:r.error,msg:`Failed to create the DB subnet group`}),e[27]=r.error,e[28]=k);let A;e[29]!==Te||e[30]!==E?(A=Te(E),e[29]=Te,e[30]=E,e[31]=A):A=e[31];let j;e[32]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,a.jsx)(_e,{children:(0,a.jsx)(`label`,{htmlFor:`subnet-group-name`,children:`Name`})}),e[32]=j):j=e[32];let Me=!!d.dbSubnetGroupName,M;e[33]===u?M=e[34]:(M=u(`dbSubnetGroupName`),e[33]=u,e[34]=M);let N;e[35]!==Me||e[36]!==M?(N=(0,a.jsx)(ie,{"aria-invalid":Me,id:`subnet-group-name`,placeholder:`orders-db-subnets`,...M}),e[35]=Me,e[36]=M,e[37]=N):N=e[37];let P;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,a.jsx)(he,{children:`Letters, digits and hyphens, starting with a letter. The name cannot be changed later.`}),e[38]=P):P=e[38];let F;e[39]===d.dbSubnetGroupName?F=e[40]:(F=(0,a.jsx)(ge,{errors:[d.dbSubnetGroupName]}),e[39]=d.dbSubnetGroupName,e[40]=F);let I;e[41]!==N||e[42]!==F?(I=(0,a.jsxs)(ve,{children:[j,N,P,F]}),e[41]=N,e[42]=F,e[43]=I):I=e[43];let L;e[44]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,a.jsx)(_e,{children:(0,a.jsx)(`label`,{htmlFor:`subnet-group-description`,children:`Description`})}),e[44]=L):L=e[44];let Ne=!!d.dbSubnetGroupDescription,R;e[45]===u?R=e[46]:(R=u(`dbSubnetGroupDescription`),e[45]=u,e[46]=R);let z;e[47]!==Ne||e[48]!==R?(z=(0,a.jsx)(ie,{"aria-invalid":Ne,id:`subnet-group-description`,placeholder:`Private subnets for the orders database`,...R}),e[47]=Ne,e[48]=R,e[49]=z):z=e[49];let B;e[50]===d.dbSubnetGroupDescription?B=e[51]:(B=(0,a.jsx)(ge,{errors:[d.dbSubnetGroupDescription]}),e[50]=d.dbSubnetGroupDescription,e[51]=B);let V;e[52]!==z||e[53]!==B?(V=(0,a.jsxs)(ve,{children:[L,z,B]}),e[52]=z,e[53]=B,e[54]=V):V=e[54];let H;e[55]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,a.jsx)(_e,{children:`Subnets`}),e[55]=H):H=e[55];let U;e[56]!==x||e[57]!==Oe||e[58]!==v||e[59]!==je||e[60]!==Ae||e[61]!==ke?(U=v.length===0?(0,a.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in this account. Create one before creating a subnet group.`}):(0,a.jsx)(`div`,{className:`space-y-4`,children:Ae.map(e=>{let t=te(ke.find(t=>t.VpcId===e)?.Tags),n=x!==void 0&&x!==e;return(0,a.jsxs)(`div`,{children:[(0,a.jsxs)(`p`,{className:`mb-1 font-mono text-xs text-muted-foreground`,children:[e,t&&` (${t})`,n&&` — a subnet group must span one VPC, so this one is out of reach`]}),(0,a.jsx)(`div`,{className:`space-y-1 pl-3`,children:v.filter(t=>t.VpcId===e).map(e=>(0,a.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,a.jsx)(`input`,{"aria-label":`Subnet ${xe(e)}`,checked:Oe.has(e.SubnetId??``),disabled:n,onChange:()=>{je(e.SubnetId??``)},type:`checkbox`}),(0,a.jsx)(`span`,{className:`font-mono`,children:xe(e)})]},e.SubnetId))})]},e)})}),e[56]=x,e[57]=Oe,e[58]=v,e[59]=je,e[60]=Ae,e[61]=ke,e[62]=U):U=e[62];let W;e[63]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,a.jsxs)(he,{children:[`At most `,20,` subnets, all in one VPC. This platform is single-AZ, so the two-AZ rule AWS enforces does not apply here.`]}),e[63]=W):W=e[63];let G;e[64]===d.subnetIds?G=e[65]:(G=(0,a.jsx)(ge,{errors:[d.subnetIds]}),e[64]=d.subnetIds,e[65]=G);let K;e[66]!==U||e[67]!==G?(K=(0,a.jsxs)(ve,{children:[H,U,W,G]}),e[66]=U,e[67]=G,e[68]=K):K=e[68];let q;e[69]===l?q=e[70]:(q=(0,a.jsx)(ye,{control:l,name:`tags`}),e[69]=l,e[70]=q);let Pe=p.dbSubnetGroupName??``,Fe=p.dbSubnetGroupDescription??``,J;e[71]!==h||e[72]!==Pe||e[73]!==Fe?(J=Ce({dbSubnetGroupName:Pe,dbSubnetGroupDescription:Fe,subnetIds:h}),e[71]=h,e[72]=Pe,e[73]=Fe,e[74]=J):J=e[74];let Y;e[75]===J?Y=e[76]:(Y=(0,a.jsx)(re,{commands:J}),e[75]=J,e[76]=Y);let X;e[77]===t?X=e[78]:(X=async()=>{await t({to:`/rds/describe-db-subnet-groups`})},e[77]=t,e[78]=X);let Z;e[79]!==r.isPending||e[80]!==De||e[81]!==X?(Z=(0,a.jsx)(me,{isPending:r.isPending,isSubmitting:De,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Subnet Group`}),e[79]=r.isPending,e[80]=De,e[81]=X,e[82]=Z):Z=e[82];let Q;e[83]!==A||e[84]!==I||e[85]!==V||e[86]!==K||e[87]!==q||e[88]!==Y||e[89]!==Z?(Q=(0,a.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:A,children:[I,V,K,q,Y,Z]}),e[83]=A,e[84]=I,e[85]=V,e[86]=K,e[87]=q,e[88]=Y,e[89]=Z,e[90]=Q):Q=e[90];let $;return e[91]!==k||e[92]!==Q?($=(0,a.jsxs)(a.Fragment,{children:[D,O,k,Q]}),e[91]=k,e[92]=Q,e[93]=$):$=e[93],$}function Se(e){return e.VpcId??``}function Ce(e){return[{label:`Create DB Subnet Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws rds create-db-subnet-group`},...i(`--db-subnet-group-name`,r(e.dbSubnetGroupName,`DBSubnetGroupName`)),...i(`--db-subnet-group-description`,`"${r(e.dbSubnetGroupDescription,`DBSubnetGroupDescription`)}"`),...i(`--subnet-ids`,r(e.subnetIds.join(` `),`SubnetIds`))]}]}var s=o;export{s as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-6mVlm4h5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-D0NYn8W8.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-6mVlm4h5.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-D0NYn8W8.js index 48fe94f70..e27e8c848 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-6mVlm4h5.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-group-D0NYn8W8.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{s as o}from"./iam-CKOkzDco.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{r as p,s as m,t as h}from"./field-c7GHI5st.js";import{n as g}from"./iam-Cgrr-Iit.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-groups`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-groups`,children:`Back to groups`}),N=(0,v.jsx)(s,{title:`Create Group`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create group`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[13]=I):I=e[13];let L=!!E.groupName,R;e[14]===C?R=e[15]:(R=C(`groupName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`groupName`,placeholder:`my-group...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.groupName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.groupName]}),e[19]=E.groupName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-groups`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create Group`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.groupName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-group`},{type:`flag`,value:` --group-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create Group`,parts:r}]}export{y as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{s as o}from"./iam-DpkrYySm.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{r as p,s as m,t as h}from"./field-CS-ql6du.js";import{n as g}from"./iam-DpUWI3xh.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-groups`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-groups`,children:`Back to groups`}),N=(0,v.jsx)(s,{title:`Create Group`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create group`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[13]=I):I=e[13];let L=!!E.groupName,R;e[14]===C?R=e[15]:(R=C(`groupName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`groupName`,placeholder:`my-group...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.groupName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.groupName]}),e[19]=E.groupName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-groups`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create Group`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.groupName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-group`},{type:`flag`,value:` --group-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create Group`,parts:r}]}export{y as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-CgetPfkP.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-Cb5zGMcm.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-CgetPfkP.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-Cb5zGMcm.js index ad01c7920..62a46ba6a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-CgetPfkP.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-instance-profile-Cb5zGMcm.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{c as o}from"./iam-CKOkzDco.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{r as p,s as m,t as h}from"./field-c7GHI5st.js";import{r as g}from"./iam-Cgrr-Iit.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-instance-profiles`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),N=(0,v.jsx)(s,{title:`Create Instance Profile`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create instance profile`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`instanceProfileName`,children:`Instance Profile Name`})}),e[13]=I):I=e[13];let L=!!E.instanceProfileName,R;e[14]===C?R=e[15]:(R=C(`instanceProfileName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`instanceProfileName`,placeholder:`my-instance-profile...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.instanceProfileName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.instanceProfileName]}),e[19]=E.instanceProfileName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-instance-profiles`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create Instance Profile`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.instanceProfileName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-instance-profile`},{type:`flag`,value:` --instance-profile-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create Instance Profile`,parts:r}]}export{y as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{c as o}from"./iam-DpkrYySm.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{r as p,s as m,t as h}from"./field-CS-ql6du.js";import{r as g}from"./iam-DpUWI3xh.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-instance-profiles`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-instance-profiles`,children:`Back to instance profiles`}),N=(0,v.jsx)(s,{title:`Create Instance Profile`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create instance profile`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`instanceProfileName`,children:`Instance Profile Name`})}),e[13]=I):I=e[13];let L=!!E.instanceProfileName,R;e[14]===C?R=e[15]:(R=C(`instanceProfileName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`instanceProfileName`,placeholder:`my-instance-profile...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.instanceProfileName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.instanceProfileName]}),e[19]=E.instanceProfileName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-instance-profiles`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create Instance Profile`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.instanceProfileName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-instance-profile`},{type:`flag`,value:` --instance-profile-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create Instance Profile`,parts:r}]}export{y as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-CGStzV_5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-Dwj_-BW9.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-CGStzV_5.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-Dwj_-BW9.js index 5eb5d9e37..bebcf8ec7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-CGStzV_5.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-internet-gateway-Dwj_-BW9.js @@ -1,2 +1,2 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{p as o}from"./ec2-Ctto2xjU.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{s as p,t as m}from"./field-c7GHI5st.js";import{a as h}from"./ec2-DhWukC79.js";var g=t(),_=e();function v(){let e=(0,g.c)(36),t=n(),v=o(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:u(h),defaultValues:{name:``}},e[0]=b):b=e[0];let{control:x,handleSubmit:S,register:C,formState:w}=l(b),{isSubmitting:T}=w,E;e[1]===x?E=e[2]:(E={control:x},e[1]=x,e[2]=E);let D=c(E),O;e[3]!==v||e[4]!==t?(O=async e=>{let n=(await v.mutateAsync({name:e.name?.trim()??void 0})).InternetGateway?.InternetGatewayId;t(n?{to:`/ec2/describe-internet-gateways/$id`,params:{id:n}}:{to:`/ec2/describe-internet-gateways`})},e[3]=v,e[4]=t,e[5]=O):O=e[5];let k=O,A,j;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,_.jsx)(r,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),j=(0,_.jsx)(s,{title:`Create Internet Gateway`}),e[6]=A,e[7]=j):(A=e[6],j=e[7]);let M;e[8]===v.error?M=e[9]:(M=v.error&&(0,_.jsx)(d,{error:v.error,msg:`Failed to create Internet Gateway`}),e[8]=v.error,e[9]=M);let N;e[10]!==S||e[11]!==k?(N=S(k),e[10]=S,e[11]=k,e[12]=N):N=e[12];let P;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(p,{children:(0,_.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=P):P=e[13];let F;e[14]===C?F=e[15]:(F=C(`name`),e[14]=C,e[15]=F);let I;e[16]===F?I=e[17]:(I=(0,_.jsxs)(m,{children:[P,(0,_.jsx)(a,{id:`name`,placeholder:`my-internet-gateway`,...F})]}),e[16]=F,e[17]=I);let L=D.name??``,R;e[18]===L?R=e[19]:(R=y(L),e[18]=L,e[19]=R);let z;e[20]===R?z=e[21]:(z=(0,_.jsx)(i,{commands:R}),e[20]=R,e[21]=z);let B;e[22]===t?B=e[23]:(B=async()=>{await t({to:`/ec2/describe-internet-gateways`})},e[22]=t,e[23]=B);let V;e[24]!==v.isPending||e[25]!==T||e[26]!==B?(V=(0,_.jsx)(f,{isPending:v.isPending,isSubmitting:T,onCancel:B,pendingLabel:`Creating…`,submitLabel:`Create`}),e[24]=v.isPending,e[25]=T,e[26]=B,e[27]=V):V=e[27];let H;e[28]!==I||e[29]!==z||e[30]!==V||e[31]!==N?(H=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:N,children:[I,z,V]}),e[28]=I,e[29]=z,e[30]=V,e[31]=N,e[32]=H):H=e[32];let U;return e[33]!==H||e[34]!==M?(U=(0,_.jsxs)(_.Fragment,{children:[A,j,M,H]}),e[33]=H,e[34]=M,e[35]=U):U=e[35],U}function y(e){let t=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-internet-gateway`}];return e.trim()&&t.push({type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{p as o}from"./ec2-Csn1kwZ8.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{s as p,t as m}from"./field-CS-ql6du.js";import{a as h}from"./ec2-DqNqPeiA.js";var g=t(),_=e();function v(){let e=(0,g.c)(36),t=n(),v=o(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:u(h),defaultValues:{name:``}},e[0]=b):b=e[0];let{control:x,handleSubmit:S,register:C,formState:w}=l(b),{isSubmitting:T}=w,E;e[1]===x?E=e[2]:(E={control:x},e[1]=x,e[2]=E);let D=c(E),O;e[3]!==v||e[4]!==t?(O=async e=>{let n=(await v.mutateAsync({name:e.name?.trim()??void 0})).InternetGateway?.InternetGatewayId;t(n?{to:`/ec2/describe-internet-gateways/$id`,params:{id:n}}:{to:`/ec2/describe-internet-gateways`})},e[3]=v,e[4]=t,e[5]=O):O=e[5];let k=O,A,j;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,_.jsx)(r,{to:`/ec2/describe-internet-gateways`,children:`Back to Internet Gateways`}),j=(0,_.jsx)(s,{title:`Create Internet Gateway`}),e[6]=A,e[7]=j):(A=e[6],j=e[7]);let M;e[8]===v.error?M=e[9]:(M=v.error&&(0,_.jsx)(d,{error:v.error,msg:`Failed to create Internet Gateway`}),e[8]=v.error,e[9]=M);let N;e[10]!==S||e[11]!==k?(N=S(k),e[10]=S,e[11]=k,e[12]=N):N=e[12];let P;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(p,{children:(0,_.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=P):P=e[13];let F;e[14]===C?F=e[15]:(F=C(`name`),e[14]=C,e[15]=F);let I;e[16]===F?I=e[17]:(I=(0,_.jsxs)(m,{children:[P,(0,_.jsx)(a,{id:`name`,placeholder:`my-internet-gateway`,...F})]}),e[16]=F,e[17]=I);let L=D.name??``,R;e[18]===L?R=e[19]:(R=y(L),e[18]=L,e[19]=R);let z;e[20]===R?z=e[21]:(z=(0,_.jsx)(i,{commands:R}),e[20]=R,e[21]=z);let B;e[22]===t?B=e[23]:(B=async()=>{await t({to:`/ec2/describe-internet-gateways`})},e[22]=t,e[23]=B);let V;e[24]!==v.isPending||e[25]!==T||e[26]!==B?(V=(0,_.jsx)(f,{isPending:v.isPending,isSubmitting:T,onCancel:B,pendingLabel:`Creating…`,submitLabel:`Create`}),e[24]=v.isPending,e[25]=T,e[26]=B,e[27]=V):V=e[27];let H;e[28]!==I||e[29]!==z||e[30]!==V||e[31]!==N?(H=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:N,children:[I,z,V]}),e[28]=I,e[29]=z,e[30]=V,e[31]=N,e[32]=H):H=e[32];let U;return e[33]!==H||e[34]!==M?(U=(0,_.jsxs)(_.Fragment,{children:[A,j,M,H]}),e[33]=H,e[34]=M,e[35]=U):U=e[35],U}function y(e){let t=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-internet-gateway`}];return e.trim()&&t.push({type:`flag`,value:` \\ --tag-specifications`},{type:`value`,value:` 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=${e.trim()}}]'`}),[{label:`Create Internet Gateway`,parts:t}]}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-CKL_t5ui.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-C7YX-AO2.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-CKL_t5ui.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-C7YX-AO2.js index 0de89d180..3d366310f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-CKL_t5ui.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-key-pair-C7YX-AO2.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{t as i}from"./back-link-CjKy1JE5.js";import{t as te}from"./check-BO7W8OSs.js";import{c as a,i as o,n as s,s as c,t as ne}from"./select-B01jpDaX.js";import{t as l}from"./download-B-6MA128.js";import{t as u}from"./cli-command-panel-CLiFy1rG.js";import{t as d}from"./triangle-alert-DcjzeKLg.js";import{t as f}from"./button-BarTr35m.js";import{t as p}from"./input-6kdUb_DH.js";import{m}from"./ec2-Ctto2xjU.js";import{t as h}from"./page-heading-vksh_67w.js";import{a as g,i as _,n as v,t as y}from"./zod-DF_n2ejy.js";import{t as b}from"./error-banner-DeOeVBKS.js";import{t as x}from"./form-actions-BUM37An0.js";import{n as S,r as C,s as w,t as T}from"./field-c7GHI5st.js";import{a as re,c as E,i as ie,l as D,o as ae,r as O,s as oe,t as k}from"./alert-dialog-kCQ1W4Rz.js";import{t as A}from"./use-copy-to-clipboard-DjiD3qo6.js";import{o as j}from"./ec2-DhWukC79.js";var M=t(n(),1),se=r(),N=e();function P(e){let t=(0,se.c)(38),{open:n,keyName:r,keyMaterial:i}=e,a=ee(),{copied:o,copy:s}=A(),c;t[0]!==i||t[1]!==r?(c=()=>{let e=new Blob([i],{type:`text/plain`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${r}.pem`,n.click(),URL.revokeObjectURL(t)},t[0]=i,t[1]=r,t[2]=c):c=t[2];let ne=c,u;t[3]===a?u=t[4]:(u=()=>{a({to:`/ec2/describe-key-pairs`})},t[3]=a,t[4]=u);let p=u,m,h;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,N.jsx)(E,{children:(0,N.jsx)(d,{className:`text-destructive`})}),h=(0,N.jsx)(D,{children:`Save Your Private Key`}),t[5]=m,t[6]=h):(m=t[5],h=t[6]);let g;t[7]===r?g=t[8]:(g=(0,N.jsxs)(oe,{children:[m,h,(0,N.jsxs)(re,{children:[`This is your only chance to save the private key file for`,` `,(0,N.jsx)(`strong`,{children:r}),`. Please download or copy it now. You won't be able to retrieve it again.`]})]}),t[7]=r,t[8]=g);let _=`Private key material for ${r}`,v;t[9]!==i||t[10]!==_?(v=(0,N.jsx)(`textarea`,{"aria-label":_,className:`w-full resize-none overflow-y-auto rounded-md border border-input bg-input/20 px-2 py-2 font-mono text-xs`,readOnly:!0,rows:4,value:i}),t[9]=i,t[10]=_,t[11]=v):v=t[11];let y;t[12]!==s||t[13]!==i?(y=async()=>{await s(i)},t[12]=s,t[13]=i,t[14]=y):y=t[14];let b;t[15]===o?b=t[16]:(b=o?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(te,{className:`mr-2 size-4`}),`Copied!`]}):`Copy to Clipboard`,t[15]=o,t[16]=b);let x;t[17]!==y||t[18]!==b?(x=(0,N.jsx)(f,{className:`flex-1`,onClick:y,type:`button`,variant:`outline`,children:b}),t[17]=y,t[18]=b,t[19]=x):x=t[19];let S;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,N.jsx)(l,{className:`mr-2 size-4`}),t[20]=S):S=t[20];let C;t[21]===ne?C=t[22]:(C=(0,N.jsxs)(f,{className:`flex-1`,onClick:ne,type:`button`,variant:`outline`,children:[S,`Download .pem File`]}),t[21]=ne,t[22]=C);let w;t[23]!==x||t[24]!==C?(w=(0,N.jsxs)(`div`,{className:`flex gap-2`,children:[x,C]}),t[23]=x,t[24]=C,t[25]=w):w=t[25];let T;t[26]!==w||t[27]!==v?(T=(0,N.jsxs)(`div`,{className:`space-y-3`,children:[v,w]}),t[26]=w,t[27]=v,t[28]=T):T=t[28];let j;t[29]===p?j=t[30]:(j=(0,N.jsx)(ae,{children:(0,N.jsx)(O,{onClick:p,children:`Close and Continue`})}),t[29]=p,t[30]=j);let M;t[31]!==T||t[32]!==j||t[33]!==g?(M=(0,N.jsxs)(ie,{className:`max-w-2xl`,children:[g,T,j]}),t[31]=T,t[32]=j,t[33]=g,t[34]=M):M=t[34];let P;return t[35]!==n||t[36]!==M?(P=(0,N.jsx)(k,{open:n,children:M}),t[35]=n,t[36]=M,t[37]=P):P=t[37],P}function F(){let e=(0,se.c)(58),t=ee(),n=m(),[r,te]=(0,M.useState)(null),l;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=y(j),e[0]=l):l=e[0];let d;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(d={resolver:l,defaultValues:{keyType:`rsa`}},e[1]=d):d=e[1];let{handleSubmit:f,register:re,control:E,formState:ie}=_(d),{errors:D,isSubmitting:ae}=ie,O;e[2]===E?O=e[3]:(O={control:E},e[2]=E,e[3]=O);let oe=g(O),k;e[4]===n?k=e[5]:(k=async e=>{let t=await n.mutateAsync(e);t.KeyMaterial&&te({keyName:e.keyName,material:t.KeyMaterial})},e[4]=n,e[5]=k);let A=k,F,I;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,N.jsx)(i,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),I=(0,N.jsx)(h,{title:`Create Key Pair`}),e[6]=F,e[7]=I):(F=e[6],I=e[7]);let L;e[8]===n.error?L=e[9]:(L=n.error&&(0,N.jsx)(b,{error:n.error,msg:`Failed to create key pair`}),e[8]=n.error,e[9]=L);let R;e[10]!==f||e[11]!==A?(R=f(A),e[10]=f,e[11]=A,e[12]=R):R=e[12];let z;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,N.jsx)(w,{children:(0,N.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair Name`})}),e[13]=z):z=e[13];let le=!!D.keyName,B;e[14]===re?B=e[15]:(B=re(`keyName`),e[14]=re,e[15]=B);let V;e[16]!==le||e[17]!==B?(V=(0,N.jsx)(p,{"aria-invalid":le,id:`keyName`,placeholder:`my-key-pair…`,...B}),e[16]=le,e[17]=B,e[18]=V):V=e[18];let H;e[19]===D.keyName?H=e[20]:(H=(0,N.jsx)(C,{errors:[D.keyName]}),e[19]=D.keyName,e[20]=H);let U;e[21]!==V||e[22]!==H?(U=(0,N.jsxs)(T,{children:[z,V,H]}),e[21]=V,e[22]=H,e[23]=U):U=e[23];let ue;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,N.jsx)(w,{children:(0,N.jsx)(`label`,{htmlFor:`keyType`,children:`Key Type`})}),e[24]=ue):ue=e[24];let W;e[25]===D.keyType?W=e[26]:(W=e=>{let{field:t}=e;return(0,N.jsxs)(ne,{onValueChange:e=>{t.onChange(e)},value:t.value,children:[(0,N.jsx)(c,{"aria-invalid":!!D.keyType,className:`w-full`,id:`keyType`,children:(0,N.jsx)(a,{placeholder:`Select a key type`})}),(0,N.jsxs)(s,{children:[(0,N.jsx)(o,{value:`rsa`,children:`RSA (2048-bit)`}),(0,N.jsx)(o,{value:`ed25519`,children:`ED25519`})]})]})},e[25]=D.keyType,e[26]=W);let G;e[27]!==E||e[28]!==W?(G=(0,N.jsx)(v,{control:E,name:`keyType`,render:W}),e[27]=E,e[28]=W,e[29]=G):G=e[29];let de;e[30]===Symbol.for(`react.memo_cache_sentinel`)?(de=(0,N.jsx)(S,{children:`RSA is required to retrieve a Windows administrator password. ED25519 works for SSH only.`}),e[30]=de):de=e[30];let K;e[31]===D.keyType?K=e[32]:(K=(0,N.jsx)(C,{errors:[D.keyType]}),e[31]=D.keyType,e[32]=K);let q;e[33]!==G||e[34]!==K?(q=(0,N.jsxs)(T,{children:[ue,G,de,K]}),e[33]=G,e[34]=K,e[35]=q):q=e[35];let J;e[36]===oe?J=e[37]:(J=ce(oe),e[36]=oe,e[37]=J);let Y;e[38]===J?Y=e[39]:(Y=(0,N.jsx)(u,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-key-pairs`})},e[40]=t,e[41]=X);let Z;e[42]!==n.isPending||e[43]!==ae||e[44]!==X?(Z=(0,N.jsx)(x,{isPending:n.isPending,isSubmitting:ae,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Key Pair`}),e[42]=n.isPending,e[43]=ae,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==U||e[47]!==q||e[48]!==Y||e[49]!==Z||e[50]!==R?(Q=(0,N.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:R,children:[U,q,Y,Z]}),e[46]=U,e[47]=q,e[48]=Y,e[49]=Z,e[50]=R,e[51]=Q):Q=e[51];let $;e[52]===r?$=e[53]:($=r&&(0,N.jsx)(P,{keyMaterial:r.material,keyName:r.keyName,open:!!r}),e[52]=r,e[53]=$);let fe;return e[54]!==Q||e[55]!==$||e[56]!==L?(fe=(0,N.jsxs)(N.Fragment,{children:[F,I,L,Q,$]}),e[54]=Q,e[55]=$,e[56]=L,e[57]=fe):fe=e[57],fe}function ce(e){let t=e.keyName??``,n=e.keyType??`rsa`;return[{label:`Create Key Pair`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-key-pair`},{type:`flag`,value:` --key-name`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` --key-type`},{type:`value`,value:` ${n}`}]}]}var I=F;export{I as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{t as i}from"./back-link-wsXUoJ12.js";import{t as te}from"./check-BO7W8OSs.js";import{c as a,i as o,n as s,s as c,t as ne}from"./select-Cn66OoPn.js";import{t as l}from"./download-B-6MA128.js";import{t as u}from"./cli-command-panel-DavMY-tN.js";import{t as d}from"./triangle-alert-DcjzeKLg.js";import{t as f}from"./button-qf9lLJ2x.js";import{t as p}from"./input-D3aUBtS6.js";import{m}from"./ec2-Csn1kwZ8.js";import{t as h}from"./page-heading-vksh_67w.js";import{a as g,i as _,n as v,t as y}from"./zod-A4qtKH_p.js";import{t as b}from"./error-banner-DeOeVBKS.js";import{t as x}from"./form-actions-DXvy9CQI.js";import{n as S,r as C,s as w,t as T}from"./field-CS-ql6du.js";import{a as re,c as E,i as ie,l as D,o as ae,r as O,s as oe,t as k}from"./alert-dialog-jxylPXwR.js";import{t as A}from"./use-copy-to-clipboard-DjiD3qo6.js";import{o as j}from"./ec2-DqNqPeiA.js";var M=t(n(),1),se=r(),N=e();function P(e){let t=(0,se.c)(38),{open:n,keyName:r,keyMaterial:i}=e,a=ee(),{copied:o,copy:s}=A(),c;t[0]!==i||t[1]!==r?(c=()=>{let e=new Blob([i],{type:`text/plain`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${r}.pem`,n.click(),URL.revokeObjectURL(t)},t[0]=i,t[1]=r,t[2]=c):c=t[2];let ne=c,u;t[3]===a?u=t[4]:(u=()=>{a({to:`/ec2/describe-key-pairs`})},t[3]=a,t[4]=u);let p=u,m,h;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,N.jsx)(E,{children:(0,N.jsx)(d,{className:`text-destructive`})}),h=(0,N.jsx)(D,{children:`Save Your Private Key`}),t[5]=m,t[6]=h):(m=t[5],h=t[6]);let g;t[7]===r?g=t[8]:(g=(0,N.jsxs)(oe,{children:[m,h,(0,N.jsxs)(re,{children:[`This is your only chance to save the private key file for`,` `,(0,N.jsx)(`strong`,{children:r}),`. Please download or copy it now. You won't be able to retrieve it again.`]})]}),t[7]=r,t[8]=g);let _=`Private key material for ${r}`,v;t[9]!==i||t[10]!==_?(v=(0,N.jsx)(`textarea`,{"aria-label":_,className:`w-full resize-none overflow-y-auto rounded-md border border-input bg-input/20 px-2 py-2 font-mono text-xs`,readOnly:!0,rows:4,value:i}),t[9]=i,t[10]=_,t[11]=v):v=t[11];let y;t[12]!==s||t[13]!==i?(y=async()=>{await s(i)},t[12]=s,t[13]=i,t[14]=y):y=t[14];let b;t[15]===o?b=t[16]:(b=o?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(te,{className:`mr-2 size-4`}),`Copied!`]}):`Copy to Clipboard`,t[15]=o,t[16]=b);let x;t[17]!==y||t[18]!==b?(x=(0,N.jsx)(f,{className:`flex-1`,onClick:y,type:`button`,variant:`outline`,children:b}),t[17]=y,t[18]=b,t[19]=x):x=t[19];let S;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,N.jsx)(l,{className:`mr-2 size-4`}),t[20]=S):S=t[20];let C;t[21]===ne?C=t[22]:(C=(0,N.jsxs)(f,{className:`flex-1`,onClick:ne,type:`button`,variant:`outline`,children:[S,`Download .pem File`]}),t[21]=ne,t[22]=C);let w;t[23]!==x||t[24]!==C?(w=(0,N.jsxs)(`div`,{className:`flex gap-2`,children:[x,C]}),t[23]=x,t[24]=C,t[25]=w):w=t[25];let T;t[26]!==w||t[27]!==v?(T=(0,N.jsxs)(`div`,{className:`space-y-3`,children:[v,w]}),t[26]=w,t[27]=v,t[28]=T):T=t[28];let j;t[29]===p?j=t[30]:(j=(0,N.jsx)(ae,{children:(0,N.jsx)(O,{onClick:p,children:`Close and Continue`})}),t[29]=p,t[30]=j);let M;t[31]!==T||t[32]!==j||t[33]!==g?(M=(0,N.jsxs)(ie,{className:`max-w-2xl`,children:[g,T,j]}),t[31]=T,t[32]=j,t[33]=g,t[34]=M):M=t[34];let P;return t[35]!==n||t[36]!==M?(P=(0,N.jsx)(k,{open:n,children:M}),t[35]=n,t[36]=M,t[37]=P):P=t[37],P}function F(){let e=(0,se.c)(58),t=ee(),n=m(),[r,te]=(0,M.useState)(null),l;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=y(j),e[0]=l):l=e[0];let d;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(d={resolver:l,defaultValues:{keyType:`rsa`}},e[1]=d):d=e[1];let{handleSubmit:f,register:re,control:E,formState:ie}=_(d),{errors:D,isSubmitting:ae}=ie,O;e[2]===E?O=e[3]:(O={control:E},e[2]=E,e[3]=O);let oe=g(O),k;e[4]===n?k=e[5]:(k=async e=>{let t=await n.mutateAsync(e);t.KeyMaterial&&te({keyName:e.keyName,material:t.KeyMaterial})},e[4]=n,e[5]=k);let A=k,F,I;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,N.jsx)(i,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),I=(0,N.jsx)(h,{title:`Create Key Pair`}),e[6]=F,e[7]=I):(F=e[6],I=e[7]);let L;e[8]===n.error?L=e[9]:(L=n.error&&(0,N.jsx)(b,{error:n.error,msg:`Failed to create key pair`}),e[8]=n.error,e[9]=L);let R;e[10]!==f||e[11]!==A?(R=f(A),e[10]=f,e[11]=A,e[12]=R):R=e[12];let z;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,N.jsx)(w,{children:(0,N.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair Name`})}),e[13]=z):z=e[13];let le=!!D.keyName,B;e[14]===re?B=e[15]:(B=re(`keyName`),e[14]=re,e[15]=B);let V;e[16]!==le||e[17]!==B?(V=(0,N.jsx)(p,{"aria-invalid":le,id:`keyName`,placeholder:`my-key-pair…`,...B}),e[16]=le,e[17]=B,e[18]=V):V=e[18];let H;e[19]===D.keyName?H=e[20]:(H=(0,N.jsx)(C,{errors:[D.keyName]}),e[19]=D.keyName,e[20]=H);let U;e[21]!==V||e[22]!==H?(U=(0,N.jsxs)(T,{children:[z,V,H]}),e[21]=V,e[22]=H,e[23]=U):U=e[23];let ue;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(ue=(0,N.jsx)(w,{children:(0,N.jsx)(`label`,{htmlFor:`keyType`,children:`Key Type`})}),e[24]=ue):ue=e[24];let W;e[25]===D.keyType?W=e[26]:(W=e=>{let{field:t}=e;return(0,N.jsxs)(ne,{onValueChange:e=>{t.onChange(e)},value:t.value,children:[(0,N.jsx)(c,{"aria-invalid":!!D.keyType,className:`w-full`,id:`keyType`,children:(0,N.jsx)(a,{placeholder:`Select a key type`})}),(0,N.jsxs)(s,{children:[(0,N.jsx)(o,{value:`rsa`,children:`RSA (2048-bit)`}),(0,N.jsx)(o,{value:`ed25519`,children:`ED25519`})]})]})},e[25]=D.keyType,e[26]=W);let G;e[27]!==E||e[28]!==W?(G=(0,N.jsx)(v,{control:E,name:`keyType`,render:W}),e[27]=E,e[28]=W,e[29]=G):G=e[29];let de;e[30]===Symbol.for(`react.memo_cache_sentinel`)?(de=(0,N.jsx)(S,{children:`RSA is required to retrieve a Windows administrator password. ED25519 works for SSH only.`}),e[30]=de):de=e[30];let K;e[31]===D.keyType?K=e[32]:(K=(0,N.jsx)(C,{errors:[D.keyType]}),e[31]=D.keyType,e[32]=K);let q;e[33]!==G||e[34]!==K?(q=(0,N.jsxs)(T,{children:[ue,G,de,K]}),e[33]=G,e[34]=K,e[35]=q):q=e[35];let J;e[36]===oe?J=e[37]:(J=ce(oe),e[36]=oe,e[37]=J);let Y;e[38]===J?Y=e[39]:(Y=(0,N.jsx)(u,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-key-pairs`})},e[40]=t,e[41]=X);let Z;e[42]!==n.isPending||e[43]!==ae||e[44]!==X?(Z=(0,N.jsx)(x,{isPending:n.isPending,isSubmitting:ae,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Key Pair`}),e[42]=n.isPending,e[43]=ae,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==U||e[47]!==q||e[48]!==Y||e[49]!==Z||e[50]!==R?(Q=(0,N.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:R,children:[U,q,Y,Z]}),e[46]=U,e[47]=q,e[48]=Y,e[49]=Z,e[50]=R,e[51]=Q):Q=e[51];let $;e[52]===r?$=e[53]:($=r&&(0,N.jsx)(P,{keyMaterial:r.material,keyName:r.keyName,open:!!r}),e[52]=r,e[53]=$);let fe;return e[54]!==Q||e[55]!==$||e[56]!==L?(fe=(0,N.jsxs)(N.Fragment,{children:[F,I,L,Q,$]}),e[54]=Q,e[55]=$,e[56]=L,e[57]=fe):fe=e[57],fe}function ce(e){let t=e.keyName??``,n=e.keyType??`rsa`;return[{label:`Create Key Pair`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-key-pair`},{type:`flag`,value:` --key-name`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` --key-type`},{type:`value`,value:` ${n}`}]}]}var I=F;export{I as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-vwPKoZ8a.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-VIoUeN7g.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-vwPKoZ8a.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-VIoUeN7g.js index 37ff02768..e9843a9a6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-vwPKoZ8a.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-launch-template-VIoUeN7g.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{h as o,t as s}from"./ec2-Ctto2xjU.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as l,i as u,t as ee}from"./zod-DF_n2ejy.js";import{t as te}from"./error-banner-DeOeVBKS.js";import{t as ne}from"./form-actions-BUM37An0.js";import{r as d,s as f,t as p}from"./field-c7GHI5st.js";import{s as m}from"./ec2-DhWukC79.js";import{t as h}from"./launch-template-data-fields-BXmKXe0L.js";var g=t(),_=e();function v(){let e=(0,g.c)(56),t=n(),v=o(),y;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(y=ee(m),e[0]=y):y=e[0];let x;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:y,defaultValues:{launchTemplateName:``,versionDescription:``,imageId:``,instanceType:``,securityGroupIds:[],userData:``}},e[1]=x):x=e[1];let{control:S,handleSubmit:C,register:w,formState:T}=u(x),{errors:E,isSubmitting:D}=T,O;e[2]===S?O=e[3]:(O={control:S},e[2]=S,e[3]=O);let k=l(O),A;e[4]!==v||e[5]!==t?(A=async e=>{let n=(await v.mutateAsync(e)).LaunchTemplate?.LaunchTemplateId;if(!n){t({to:`/ec2/describe-launch-templates`});return}t({to:`/ec2/describe-launch-templates/$id`,params:{id:n}})},e[4]=v,e[5]=t,e[6]=A):A=e[6];let j=A,M,N;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,_.jsx)(r,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),N=(0,_.jsx)(c,{title:`Create Launch Template`}),e[7]=M,e[8]=N):(M=e[7],N=e[8]);let P;e[9]===v.error?P=e[10]:(P=v.error&&(0,_.jsx)(te,{error:v.error,msg:`Failed to create launch template`}),e[9]=v.error,e[10]=P);let F;e[11]!==C||e[12]!==j?(F=C(j),e[11]=C,e[12]=j,e[13]=F):F=e[13];let I;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateName`,children:`Name`})}),e[14]=I):I=e[14];let L=!!E.launchTemplateName,R;e[15]===w?R=e[16]:(R=w(`launchTemplateName`),e[15]=w,e[16]=R);let z;e[17]!==L||e[18]!==R?(z=(0,_.jsx)(a,{"aria-invalid":L,id:`launchTemplateName`,placeholder:`my-launch-template`,...R}),e[17]=L,e[18]=R,e[19]=z):z=e[19];let B;e[20]===E.launchTemplateName?B=e[21]:(B=(0,_.jsx)(d,{errors:[E.launchTemplateName]}),e[20]=E.launchTemplateName,e[21]=B);let V;e[22]!==z||e[23]!==B?(V=(0,_.jsxs)(p,{children:[I,z,B]}),e[22]=z,e[23]=B,e[24]=V):V=e[24];let H;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`versionDescription`,children:`Version Description`})}),e[25]=H):H=e[25];let U;e[26]===w?U=e[27]:(U=w(`versionDescription`),e[26]=w,e[27]=U);let W;e[28]===U?W=e[29]:(W=(0,_.jsxs)(p,{children:[H,(0,_.jsx)(a,{id:`versionDescription`,placeholder:`Initial version`,...U})]}),e[28]=U,e[29]=W);let G;e[30]!==S||e[31]!==E||e[32]!==w?(G=(0,_.jsx)(h,{control:S,errors:E,register:w}),e[30]=S,e[31]=E,e[32]=w,e[33]=G):G=e[33];let K=k.launchTemplateName??``,q=k.versionDescription??``,J;e[34]!==K||e[35]!==q||e[36]!==k?(J=b(K,q,s(k)),e[34]=K,e[35]=q,e[36]=k,e[37]=J):J=e[37];let Y;e[38]===J?Y=e[39]:(Y=(0,_.jsx)(i,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-launch-templates`})},e[40]=t,e[41]=X);let Z;e[42]!==v.isPending||e[43]!==D||e[44]!==X?(Z=(0,_.jsx)(ne,{isPending:v.isPending,isSubmitting:D,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Launch Template`}),e[42]=v.isPending,e[43]=D,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==V||e[47]!==W||e[48]!==G||e[49]!==Y||e[50]!==Z||e[51]!==F?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,W,G,Y,Z]}),e[46]=V,e[47]=W,e[48]=G,e[49]=Y,e[50]=Z,e[51]=F,e[52]=Q):Q=e[52];let $;return e[53]!==Q||e[54]!==P?($=(0,_.jsxs)(_.Fragment,{children:[M,N,P,Q]}),e[53]=Q,e[54]=P,e[55]=$):$=e[55],$}function y(e){return`'${e.replaceAll(`'`,`'"'"'`)}'`}function b(e,t,n){let r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-launch-template`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{h as o,t as s}from"./ec2-Csn1kwZ8.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as l,i as u,t as ee}from"./zod-A4qtKH_p.js";import{t as te}from"./error-banner-DeOeVBKS.js";import{t as ne}from"./form-actions-DXvy9CQI.js";import{r as d,s as f,t as p}from"./field-CS-ql6du.js";import{s as m}from"./ec2-DqNqPeiA.js";import{t as h}from"./launch-template-data-fields-PZ1Q44UQ.js";var g=t(),_=e();function v(){let e=(0,g.c)(56),t=n(),v=o(),y;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(y=ee(m),e[0]=y):y=e[0];let x;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:y,defaultValues:{launchTemplateName:``,versionDescription:``,imageId:``,instanceType:``,securityGroupIds:[],userData:``}},e[1]=x):x=e[1];let{control:S,handleSubmit:C,register:w,formState:T}=u(x),{errors:E,isSubmitting:D}=T,O;e[2]===S?O=e[3]:(O={control:S},e[2]=S,e[3]=O);let k=l(O),A;e[4]!==v||e[5]!==t?(A=async e=>{let n=(await v.mutateAsync(e)).LaunchTemplate?.LaunchTemplateId;if(!n){t({to:`/ec2/describe-launch-templates`});return}t({to:`/ec2/describe-launch-templates/$id`,params:{id:n}})},e[4]=v,e[5]=t,e[6]=A):A=e[6];let j=A,M,N;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,_.jsx)(r,{to:`/ec2/describe-launch-templates`,children:`Back to launch templates`}),N=(0,_.jsx)(c,{title:`Create Launch Template`}),e[7]=M,e[8]=N):(M=e[7],N=e[8]);let P;e[9]===v.error?P=e[10]:(P=v.error&&(0,_.jsx)(te,{error:v.error,msg:`Failed to create launch template`}),e[9]=v.error,e[10]=P);let F;e[11]!==C||e[12]!==j?(F=C(j),e[11]=C,e[12]=j,e[13]=F):F=e[13];let I;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateName`,children:`Name`})}),e[14]=I):I=e[14];let L=!!E.launchTemplateName,R;e[15]===w?R=e[16]:(R=w(`launchTemplateName`),e[15]=w,e[16]=R);let z;e[17]!==L||e[18]!==R?(z=(0,_.jsx)(a,{"aria-invalid":L,id:`launchTemplateName`,placeholder:`my-launch-template`,...R}),e[17]=L,e[18]=R,e[19]=z):z=e[19];let B;e[20]===E.launchTemplateName?B=e[21]:(B=(0,_.jsx)(d,{errors:[E.launchTemplateName]}),e[20]=E.launchTemplateName,e[21]=B);let V;e[22]!==z||e[23]!==B?(V=(0,_.jsxs)(p,{children:[I,z,B]}),e[22]=z,e[23]=B,e[24]=V):V=e[24];let H;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`versionDescription`,children:`Version Description`})}),e[25]=H):H=e[25];let U;e[26]===w?U=e[27]:(U=w(`versionDescription`),e[26]=w,e[27]=U);let W;e[28]===U?W=e[29]:(W=(0,_.jsxs)(p,{children:[H,(0,_.jsx)(a,{id:`versionDescription`,placeholder:`Initial version`,...U})]}),e[28]=U,e[29]=W);let G;e[30]!==S||e[31]!==E||e[32]!==w?(G=(0,_.jsx)(h,{control:S,errors:E,register:w}),e[30]=S,e[31]=E,e[32]=w,e[33]=G):G=e[33];let K=k.launchTemplateName??``,q=k.versionDescription??``,J;e[34]!==K||e[35]!==q||e[36]!==k?(J=b(K,q,s(k)),e[34]=K,e[35]=q,e[36]=k,e[37]=J):J=e[37];let Y;e[38]===J?Y=e[39]:(Y=(0,_.jsx)(i,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-launch-templates`})},e[40]=t,e[41]=X);let Z;e[42]!==v.isPending||e[43]!==D||e[44]!==X?(Z=(0,_.jsx)(ne,{isPending:v.isPending,isSubmitting:D,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Launch Template`}),e[42]=v.isPending,e[43]=D,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==V||e[47]!==W||e[48]!==G||e[49]!==Y||e[50]!==Z||e[51]!==F?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,W,G,Y,Z]}),e[46]=V,e[47]=W,e[48]=G,e[49]=Y,e[50]=Z,e[51]=F,e[52]=Q):Q=e[52];let $;return e[53]!==Q||e[54]!==P?($=(0,_.jsxs)(_.Fragment,{children:[M,N,P,Q]}),e[53]=Q,e[54]=P,e[55]=$):$=e[55],$}function y(e){return`'${e.replaceAll(`'`,`'"'"'`)}'`}function b(e,t,n){let r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-launch-template`},{type:`flag`,value:` \\ --launch-template-name`},{type:`value`,value:` ${e?y(e):``}`}];return t&&r.push({type:`flag`,value:` \\ --version-description`},{type:`value`,value:` ${y(t)}`}),r.push({type:`flag`,value:` \\ --launch-template-data`},{type:`value`,value:` ${y(JSON.stringify(n))}`}),[{label:`Create Launch Template`,parts:r}]}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BBKiIxj3.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BPY5X6lX.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BBKiIxj3.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BPY5X6lX.js index c2638597b..705a2db73 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BBKiIxj3.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-load-balancer-BPY5X6lX.js @@ -1,4 +1,4 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{sn as a}from"./cluster-config-xw_Q7X1e.js";import{t as te}from"./back-link-CjKy1JE5.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-B01jpDaX.js";import{t as d}from"./cli-command-panel-CLiFy1rG.js";import{t as f}from"./button-BarTr35m.js";import{t as ne}from"./input-6kdUb_DH.js";import{t as p}from"./acm-BYWQapOv.js";import{t as re}from"./certificate-import-dialog-UyecRuny.js";import{M as ie,O as ae,w as oe}from"./ec2-CWEplLq4.js";import{n as se}from"./elbv2-K4aD09h6.js";import{o as ce,u as le}from"./elbv2-DSjTzB2q.js";import{t as ue}from"./page-heading-vksh_67w.js";import{a as m,i as de,n as h,t as fe}from"./zod-DF_n2ejy.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-BUM37An0.js";import{r as g,s as _,t as v}from"./field-c7GHI5st.js";import{t as he}from"./tags-field-array-Dk9nPDzt.js";import{t as y}from"./target-group-form-DvZOw-26.js";import{a as b,c as x,o as ge,r as _e,s as ve,t as ye}from"./elbv2-CtsfBUSG.js";var S=r(),be=t(n(),1),C=e();function w(e){let t=a(e.Tags);return t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`}function xe(e){let t=a(e.Tags);return`${t?`${e.SubnetId} (${t})`:e.SubnetId} · ${e.CidrBlock}`}function Se(e){return e===`TLS`||e===`TCP`?`TCP`:e===`UDP`?`UDP`:e===`TCP_UDP`?`TCP_UDP`:`HTTP`}function Ce(e){let t=new Map;for(let n of e){let e=n.AvailabilityZone??`unknown`,r=t.get(e)??[];r.push(n),t.set(e,r)}return[...t.entries()].toSorted((e,t)=>e[0].localeCompare(t[0])).map(([e,t])=>({az:e,subnets:t}))}function T(){let e=(0,S.c)(243),t=ee(),{data:n}=i(ie),{data:r}=i(ae),{data:a}=i(oe),{data:s}=i(le),{data:w}=i(p),{data:T}=i(ce),k=se(),[A,Ae]=(0,be.useState)(null),[je,Me]=(0,be.useState)(!1),Ne;e[0]===n.Vpcs?Ne=e[1]:(Ne=n.Vpcs??[],e[0]=n.Vpcs,e[1]=Ne);let j=Ne,Pe;e[2]===r.Subnets?Pe=e[3]:(Pe=r.Subnets??[],e[2]=r.Subnets,e[3]=Pe);let Fe=Pe,Ie;e[4]===a.SecurityGroups?Ie=e[5]:(Ie=a.SecurityGroups??[],e[4]=a.SecurityGroups,e[5]=Ie);let Le=Ie,Re;e[6]===s.TargetGroups?Re=e[7]:(Re=s.TargetGroups??[],e[6]=s.TargetGroups,e[7]=Re);let ze=Re,Be;e[8]===w.CertificateSummaryList?Be=e[9]:(Be=w.CertificateSummaryList??[],e[8]=w.CertificateSummaryList,e[9]=Be);let Ve=Be,He;e[10]===T.SslPolicies?He=e[11]:(He=T.SslPolicies??[],e[10]=T.SslPolicies,e[11]=He);let Ue=He,We;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(We=fe(_e),e[12]=We):We=e[12];let Ge=j[0]?.VpcId??``,Ke,qe,Je,Ye;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(Je=[],Ye=[],Ke=[],qe={protocol:`HTTP`,port:80,targetGroupMode:`new`,existingTargetGroupArn:``,certificateArn:void 0,sslPolicy:void 0},e[13]=Ke,e[14]=qe,e[15]=Je,e[16]=Ye):(Ke=e[13],qe=e[14],Je=e[15],Ye=e[16]);let Xe;e[17]===Ge?Xe=e[18]:(Xe={resolver:We,defaultValues:{name:``,type:`application`,scheme:`internet-facing`,vpcId:Ge,subnetIds:Je,securityGroupIds:Ye,tags:Ke,listener:qe}},e[17]=Ge,e[18]=Xe);let Ze=de(Xe),Qe;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(Qe=fe(b),e[19]=Qe):Qe=e[19];let $e=j[0]?.VpcId??``,et,tt;e[20]===Symbol.for(`react.memo_cache_sentinel`)?(et={protocol:`HTTP`,path:`/`,port:`traffic-port`,intervalSeconds:30,timeoutSeconds:5,healthyThresholdCount:5,unhealthyThresholdCount:2,matcher:`200`},tt=[],e[20]=et,e[21]=tt):(et=e[20],tt=e[21]);let nt;e[22]===$e?nt=e[23]:(nt={resolver:Qe,defaultValues:{name:``,protocol:`HTTP`,port:80,vpcId:$e,healthCheck:et,tags:tt}},e[22]=$e,e[23]=nt);let M=de(nt),{handleSubmit:rt,register:N,watch:it,control:P,setValue:F,getValues:I,formState:at}=Ze,{errors:L,isSubmitting:ot}=at,st;e[24]===P?st=e[25]:(st={control:P,name:`vpcId`},e[24]=P,e[25]=st);let R=m(st),ct;e[26]===P?ct=e[27]:(ct={control:P,name:`subnetIds`},e[26]=P,e[27]=ct);let lt=m(ct),ut;e[28]===P?ut=e[29]:(ut={control:P,name:`securityGroupIds`},e[28]=P,e[29]=ut);let dt=m(ut),ft;e[30]===lt?ft=e[31]:(ft=new Set(lt),e[30]=lt,e[31]=ft);let pt=ft,mt;e[32]===dt?mt=e[33]:(mt=new Set(dt),e[32]=dt,e[33]=mt);let ht=mt,gt;e[34]===P?gt=e[35]:(gt={control:P,name:`type`},e[34]=P,e[35]=gt);let _t=m(gt),vt;e[36]===P?vt=e[37]:(vt={control:P,name:`listener.protocol`},e[36]=P,e[37]=vt);let z=m(vt),yt;e[38]===P?yt=e[39]:(yt={control:P,name:`listener.targetGroupMode`},e[38]=P,e[39]=yt);let B=m(yt),bt=_t===`network`,xt;e[40]===z?xt=e[41]:(xt=ve(z),e[40]=z,e[41]=xt);let St=xt,Ct;e[42]===_t?Ct=e[43]:(Ct=x(_t),e[42]=_t,e[43]=Ct);let wt=Ct,Tt;e[44]===bt?Tt=e[45]:(Tt=bt?[`TCP`,`UDP`,`TLS`,`TCP_UDP`]:[`HTTP`,`HTTPS`],e[44]=bt,e[45]=Tt);let Et=Tt,Dt,Ot,V,H,U,W,G,K,kt,q,J,Y,X,Z;if(e[46]!==Le||e[47]!==Fe||e[48]!==ze||e[49]!==P||e[50]!==L.name||e[51]!==L.subnetIds||e[52]!==L.vpcId||e[53]!==I||e[54]!==rt||e[55]!==bt||e[56]!==t||e[57]!==N||e[58]!==ht||e[59]!==pt||e[60]!==R||e[61]!==F||e[62]!==M||e[63]!==j||e[64]!==k||e[65]!==A){let n;e[80]===R?n=e[81]:(n=e=>e.VpcId===R,e[80]=R,e[81]=n);let r=Fe.filter(n),i;e[82]===R?i=e[83]:(i=e=>e.VpcId===R,e[82]=R,e[83]=i);let ee=Le.filter(i),a;if(e[84]!==ze||e[85]!==R){let t;e[87]===R?t=e[88]:(t=e=>e.VpcId===R,e[87]=R,e[88]=t),a=ze.filter(t),e[84]=ze,e[85]=R,e[86]=a}else a=e[86];Z=a;let s;e[89]===M?s=e[90]:(s=e=>{let t=Se(e);M.setValue(`protocol`,t),M.setValue(`healthCheck.protocol`,t===`HTTP`?`HTTP`:`TCP`)},e[89]=M,e[90]=s);let d=s,f;e[91]!==F||e[92]!==d?(f=e=>{F(`type`,e);let t=ge(e);F(`listener.protocol`,t),F(`listener.port`,80),F(`listener.certificateArn`,void 0),F(`listener.sslPolicy`,void 0),e===`network`&&F(`securityGroupIds`,[]),d(t)},e[91]=F,e[92]=d,e[93]=f):f=e[93];let p=f,re;e[94]!==I||e[95]!==F||e[96]!==d?(re=e=>{F(`listener.protocol`,e);let t=I(`listener.port`);ve(e)?(t===80&&F(`listener.port`,443),e===`HTTPS`&&!I(`listener.sslPolicy`)&&F(`listener.sslPolicy`,ye)):(t===443&&F(`listener.port`,80),F(`listener.certificateArn`,void 0),F(`listener.sslPolicy`,void 0)),d(e)},e[94]=I,e[95]=F,e[96]=d,e[97]=re):re=e[97],Dt=re;let ie;e[98]!==F||e[99]!==M?(ie=e=>{let t=(e===void 0?``:e)??``;F(`vpcId`,t,{shouldValidate:!0}),F(`subnetIds`,[],{shouldValidate:!0}),F(`securityGroupIds`,[]),F(`listener.existingTargetGroupArn`,``),M.setValue(`vpcId`,t)},e[98]=F,e[99]=M,e[100]=ie):ie=e[100];let ae=ie,oe;e[101]!==I||e[102]!==F?(oe=e=>{let t=I(`subnetIds`),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];F(`subnetIds`,n,{shouldValidate:!0})},e[101]=I,e[102]=F,e[103]=oe):oe=e[103];let se=oe,ce;e[104]!==I||e[105]!==F?(ce=e=>{let t=I(`securityGroupIds`),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];F(`securityGroupIds`,n)},e[104]=I,e[105]=F,e[106]=ce):ce=e[106];let le=ce,m;e[107]!==t||e[108]!==M||e[109]!==k?(m=async e=>{Ae(null);let n;if(e.listener.targetGroupMode===`new`){if(!await M.trigger())return;n=M.getValues()}let r=await k.mutateAsync({lb:{name:e.name,type:e.type,scheme:e.scheme,vpcId:e.vpcId,subnetIds:e.subnetIds,securityGroupIds:e.securityGroupIds,tags:e.tags},listener:{protocol:e.listener.protocol,port:e.listener.port,targetGroupMode:e.listener.targetGroupMode,existingTargetGroupArn:e.listener.existingTargetGroupArn,certificateArn:e.listener.certificateArn,sslPolicy:e.listener.sslPolicy,newTargetGroup:n}});Ae(r),!r.error&&r.loadBalancerArn&&t({to:`/ec2/describe-load-balancers/$id`,params:{id:encodeURIComponent(r.loadBalancerArn)}})},e[107]=t,e[108]=M,e[109]=k,e[110]=m):m=e[110];let de=m,fe=Ce(r);e[111]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,C.jsx)(te,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),J=(0,C.jsx)(ue,{title:`Create Load Balancer`}),e[111]=q,e[112]=J):(q=e[111],J=e[112]),e[113]===k.error?Y=e[114]:(Y=k.error&&(0,C.jsx)(pe,{error:k.error,msg:`Failed to create load balancer`}),e[113]=k.error,e[114]=Y),e[115]===A?X=e[116]:(X=A?.error&&(0,C.jsxs)(`div`,{className:`mb-6 max-w-4xl rounded-md border border-destructive bg-destructive/10 p-4`,children:[(0,C.jsxs)(`h2`,{className:`text-sm font-medium text-destructive`,children:[`Wizard failed: `,A.failedStep]}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-destructive`,children:A.error.message}),A.created.length>0&&(0,C.jsxs)(`div`,{className:`mt-3`,children:[(0,C.jsx)(`p`,{className:`text-xs font-medium text-destructive`,children:`Successfully created resources (clean up manually if needed):`}),(0,C.jsx)(`ul`,{className:`mt-1 list-inside list-disc text-xs text-destructive`,children:A.created.map(Oe)})]})]}),e[115]=A,e[116]=X),Ot=`max-w-4xl space-y-6`,e[117]!==rt||e[118]!==de?(V=rt(de),e[117]=rt,e[118]=de,e[119]=V):V=e[119];let me;e[120]===Symbol.for(`react.memo_cache_sentinel`)?(me=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`lb-name`,children:`Name`})}),e[120]=me):me=e[120];let he=!!L.name,y;e[121]===N?y=e[122]:(y=N(`name`),e[121]=N,e[122]=y);let b;e[123]!==he||e[124]!==y?(b=(0,C.jsx)(ne,{"aria-invalid":he,id:`lb-name`,placeholder:`my-load-balancer`,...y}),e[123]=he,e[124]=y,e[125]=b):b=e[125];let x;e[126]===L.name?x=e[127]:(x=(0,C.jsx)(g,{errors:[L.name]}),e[126]=L.name,e[127]=x),e[128]!==b||e[129]!==x?(H=(0,C.jsxs)(v,{children:[me,b,x]}),e[128]=b,e[129]=x,e[130]=H):H=e[130];let _e;e[131]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,C.jsx)(_,{children:`Type`}),e[131]=_e):_e=e[131];let S;e[132]===p?S=e[133]:(S=e=>{let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Application Load Balancer`,checked:t.value===`application`,name:`lb-type`,onChange:()=>{p(`application`)},type:`radio`}),`Application (ALB)`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Network Load Balancer`,checked:t.value===`network`,name:`lb-type`,onChange:()=>{p(`network`)},type:`radio`}),`Network (NLB)`]})]})},e[132]=p,e[133]=S),e[134]!==P||e[135]!==S?(U=(0,C.jsxs)(v,{children:[_e,(0,C.jsx)(h,{control:P,name:`type`,render:S})]}),e[134]=P,e[135]=S,e[136]=U):U=e[136];let be;e[137]===Symbol.for(`react.memo_cache_sentinel`)?(be=(0,C.jsx)(_,{children:`Scheme`}),e[137]=be):be=e[137],e[138]===P?W=e[139]:(W=(0,C.jsxs)(v,{children:[be,(0,C.jsx)(h,{control:P,name:`scheme`,render:De})]}),e[138]=P,e[139]=W);let w;e[140]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`lb-vpc`,children:`VPC`})}),e[140]=w):w=e[140];let T;e[141]!==L.vpcId||e[142]!==ae||e[143]!==j?(T=e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:e=>{ae(e)},value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.vpcId,className:`w-full`,id:`lb-vpc`,children:(0,C.jsx)(o,{placeholder:`Select VPC`})}),(0,C.jsx)(c,{children:j.map(Ee)})]})},e[141]=L.vpcId,e[142]=ae,e[143]=j,e[144]=T):T=e[144];let E;e[145]!==P||e[146]!==T?(E=(0,C.jsx)(h,{control:P,name:`vpcId`,render:T}),e[145]=P,e[146]=T,e[147]=E):E=e[147];let D;e[148]===L.vpcId?D=e[149]:(D=(0,C.jsx)(g,{errors:[L.vpcId]}),e[148]=L.vpcId,e[149]=D),e[150]!==E||e[151]!==D?(G=(0,C.jsxs)(v,{children:[w,E,D]}),e[150]=E,e[151]=D,e[152]=G):G=e[152];let we;e[153]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,C.jsx)(_,{children:`Subnets (select at least 1)`}),e[153]=we):we=e[153];let Te=fe.length===0?(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the selected VPC.`}):(0,C.jsx)(`div`,{className:`space-y-3`,children:fe.map(e=>(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`p`,{className:`mb-1 text-xs font-medium text-muted-foreground`,children:e.az}),(0,C.jsx)(`div`,{className:`space-y-1`,children:e.subnets.map(e=>(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Subnet ${xe(e)}`,checked:pt.has(e.SubnetId??``),onChange:()=>{se(e.SubnetId??``)},type:`checkbox`}),(0,C.jsx)(`span`,{className:`font-mono`,children:xe(e)})]},e.SubnetId))})]},e.az))}),O;e[154]===L.subnetIds?O=e[155]:(O=(0,C.jsx)(g,{errors:[L.subnetIds]}),e[154]=L.subnetIds,e[155]=O),e[156]!==Te||e[157]!==O?(K=(0,C.jsxs)(v,{children:[we,Te,O]}),e[156]=Te,e[157]=O,e[158]=K):K=e[158],kt=!bt&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:`Security groups`}),ee.length===0?(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups in the selected VPC.`}):(0,C.jsx)(`div`,{className:`space-y-1`,children:ee.map(e=>(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:ht.has(e.GroupId??``),onChange:()=>{le(e.GroupId??``)},type:`checkbox`}),(0,C.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),e[46]=Le,e[47]=Fe,e[48]=ze,e[49]=P,e[50]=L.name,e[51]=L.subnetIds,e[52]=L.vpcId,e[53]=I,e[54]=rt,e[55]=bt,e[56]=t,e[57]=N,e[58]=ht,e[59]=pt,e[60]=R,e[61]=F,e[62]=M,e[63]=j,e[64]=k,e[65]=A,e[66]=Dt,e[67]=Ot,e[68]=V,e[69]=H,e[70]=U,e[71]=W,e[72]=G,e[73]=K,e[74]=kt,e[75]=q,e[76]=J,e[77]=Y,e[78]=X,e[79]=Z}else Dt=e[66],Ot=e[67],V=e[68],H=e[69],U=e[70],W=e[71],G=e[72],K=e[73],kt=e[74],q=e[75],J=e[76],Y=e[77],X=e[78],Z=e[79];let At;e[159]===P?At=e[160]:(At=(0,C.jsx)(he,{control:P,name:`tags`}),e[159]=P,e[160]=At);let jt;e[161]===Symbol.for(`react.memo_cache_sentinel`)?(jt=(0,C.jsx)(`h2`,{className:`text-sm font-semibold`,children:`First listener & default target group`}),e[161]=jt):jt=e[161];let Mt;e[162]===Symbol.for(`react.memo_cache_sentinel`)?(Mt=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-protocol`,children:`Protocol`})}),e[162]=Mt):Mt=e[162];let Nt;e[163]!==Dt||e[164]!==wt?(Nt=e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:e=>{e&&Dt(e)},value:t.value,children:[(0,C.jsx)(l,{className:`w-full`,id:`listener-protocol`,children:(0,C.jsx)(o,{})}),(0,C.jsx)(c,{children:wt.map(O)})]})},e[163]=Dt,e[164]=wt,e[165]=Nt):Nt=e[165];let Pt;e[166]!==P||e[167]!==Nt?(Pt=(0,C.jsxs)(v,{children:[Mt,(0,C.jsx)(h,{control:P,name:`listener.protocol`,render:Nt})]}),e[166]=P,e[167]=Nt,e[168]=Pt):Pt=e[168];let Ft;e[169]===Symbol.for(`react.memo_cache_sentinel`)?(Ft=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-port`,children:`Port`})}),e[169]=Ft):Ft=e[169];let It=!!L.listener?.port,Lt;e[170]===N?Lt=e[171]:(Lt=N(`listener.port`,{valueAsNumber:!0}),e[170]=N,e[171]=Lt);let Rt;e[172]!==It||e[173]!==Lt?(Rt=(0,C.jsx)(ne,{"aria-invalid":It,id:`listener-port`,inputMode:`numeric`,type:`number`,...Lt}),e[172]=It,e[173]=Lt,e[174]=Rt):Rt=e[174];let zt=L.listener?.port,Bt;e[175]===zt?Bt=e[176]:(Bt=(0,C.jsx)(g,{errors:[zt]}),e[175]=zt,e[176]=Bt);let Vt;e[177]!==Rt||e[178]!==Bt?(Vt=(0,C.jsxs)(v,{children:[Ft,Rt,Bt]}),e[177]=Rt,e[178]=Bt,e[179]=Vt):Vt=e[179];let Q;e[180]!==Ve||e[181]!==P||e[182]!==L.listener?.certificateArn||e[183]!==St||e[184]!==z||e[185]!==Ue?(Q=St&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-certificate`,children:`Certificate`})}),(0,C.jsx)(h,{control:P,name:`listener.certificateArn`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.listener?.certificateArn,className:`w-full`,id:`listener-certificate`,children:(0,C.jsx)(o,{placeholder:`Select certificate`})}),(0,C.jsx)(c,{children:Ve.map(Te)})]})}}),(0,C.jsx)(g,{errors:[L.listener?.certificateArn]}),(0,C.jsxs)(`div`,{className:`mt-1 flex items-center justify-between`,children:[Ve.length===0&&(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No certificates imported yet.`}),(0,C.jsx)(f,{className:`ml-auto`,onClick:()=>{Me(!0)},size:`sm`,type:`button`,variant:`ghost`,children:`Import certificate…`})]})]}),z===`HTTPS`&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-ssl-policy`,children:`Security policy`})}),(0,C.jsx)(h,{control:P,name:`listener.sslPolicy`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??`ELBSecurityPolicy-2016-08`,children:[(0,C.jsx)(l,{className:`w-full`,id:`listener-ssl-policy`,children:(0,C.jsx)(o,{})}),(0,C.jsx)(c,{children:Ue.map(we)})]})}})]})]}),e[180]=Ve,e[181]=P,e[182]=L.listener?.certificateArn,e[183]=St,e[184]=z,e[185]=Ue,e[186]=Q):Q=e[186];let Ht;e[187]===Symbol.for(`react.memo_cache_sentinel`)?(Ht=(0,C.jsx)(_,{children:`Default target group`}),e[187]=Ht):Ht=e[187];let Ut;e[188]===P?Ut=e[189]:(Ut=(0,C.jsxs)(v,{children:[Ht,(0,C.jsx)(h,{control:P,name:`listener.targetGroupMode`,render:D})]}),e[188]=P,e[189]=Ut);let Wt;e[190]!==P||e[191]!==L.listener?.existingTargetGroupArn||e[192]!==B||e[193]!==Z?(Wt=B===`existing`&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`tg-existing`,children:`Target group`})}),(0,C.jsx)(h,{control:P,name:`listener.existingTargetGroupArn`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.listener?.existingTargetGroupArn,className:`w-full`,id:`tg-existing`,children:(0,C.jsx)(o,{placeholder:`Select target group`})}),(0,C.jsx)(c,{children:Z.map(E)})]})}}),(0,C.jsx)(g,{errors:[L.listener?.existingTargetGroupArn]}),Z.length===0&&(0,C.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`No target groups in this VPC. Choose “Create new” instead.`})]}),e[190]=P,e[191]=L.listener?.existingTargetGroupArn,e[192]=B,e[193]=Z,e[194]=Wt):Wt=e[194];let Gt;e[195]!==Et||e[196]!==M||e[197]!==B||e[198]!==j?(Gt=B===`new`&&(0,C.jsx)(`div`,{className:`space-y-4 border-l-2 border-muted pl-4`,children:(0,C.jsx)(y,{allowedProtocols:Et,form:M,vpcs:j})}),e[195]=Et,e[196]=M,e[197]=B,e[198]=j,e[199]=Gt):Gt=e[199];let Kt;e[200]!==Pt||e[201]!==Vt||e[202]!==Q||e[203]!==Ut||e[204]!==Wt||e[205]!==Gt?(Kt=(0,C.jsxs)(`div`,{className:`space-y-4 rounded-md border bg-card p-4`,children:[jt,Pt,Vt,Q,Ut,Wt,Gt]}),e[200]=Pt,e[201]=Vt,e[202]=Q,e[203]=Ut,e[204]=Wt,e[205]=Gt,e[206]=Kt):Kt=e[206];let qt;e[207]===F?qt=e[208]:(qt=e=>{F(`listener.certificateArn`,e,{shouldValidate:!0})},e[207]=F,e[208]=qt);let Jt;e[209]!==je||e[210]!==qt?(Jt=(0,C.jsx)(re,{onImported:qt,onOpenChange:Me,open:je}),e[209]=je,e[210]=qt,e[211]=Jt):Jt=e[211];let Yt;e[212]!==M.watch||e[213]!==it?(Yt=ke(it,M.watch),e[212]=M.watch,e[213]=it,e[214]=Yt):Yt=e[214];let Xt;e[215]===Yt?Xt=e[216]:(Xt=(0,C.jsx)(d,{commands:Yt}),e[215]=Yt,e[216]=Xt);let Zt;e[217]===t?Zt=e[218]:(Zt=async()=>{await t({to:`/ec2/describe-load-balancers`})},e[217]=t,e[218]=Zt);let $;e[219]!==ot||e[220]!==Zt||e[221]!==k.isPending?($=(0,C.jsx)(me,{isPending:k.isPending,isSubmitting:ot,onCancel:Zt,pendingLabel:`Creating…`,submitLabel:`Create Load Balancer`}),e[219]=ot,e[220]=Zt,e[221]=k.isPending,e[222]=$):$=e[222];let Qt;e[223]!==Ot||e[224]!==V||e[225]!==H||e[226]!==U||e[227]!==W||e[228]!==G||e[229]!==K||e[230]!==kt||e[231]!==At||e[232]!==Kt||e[233]!==Jt||e[234]!==Xt||e[235]!==$?(Qt=(0,C.jsxs)(`form`,{className:Ot,onSubmit:V,children:[H,U,W,G,K,kt,At,Kt,Jt,Xt,$]}),e[223]=Ot,e[224]=V,e[225]=H,e[226]=U,e[227]=W,e[228]=G,e[229]=K,e[230]=kt,e[231]=At,e[232]=Kt,e[233]=Jt,e[234]=Xt,e[235]=$,e[236]=Qt):Qt=e[236];let $t;return e[237]!==q||e[238]!==J||e[239]!==Y||e[240]!==X||e[241]!==Qt?($t=(0,C.jsxs)(C.Fragment,{children:[q,J,Y,X,Qt]}),e[237]=q,e[238]=J,e[239]=Y,e[240]=X,e[241]=Qt,e[242]=$t):$t=e[242],$t}function E(e){return(0,C.jsxs)(s,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function D(e){let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Create new target group`,checked:t.value===`new`,name:`tg-mode`,onChange:()=>{t.onChange(`new`)},type:`radio`}),`Create new`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Use existing target group`,checked:t.value===`existing`,name:`tg-mode`,onChange:()=>{t.onChange(`existing`)},type:`radio`}),`Use existing`]})]})}function we(e){return(0,C.jsx)(s,{value:e.Name??``,children:e.Name},e.Name)}function Te(e){return(0,C.jsx)(s,{value:e.CertificateArn??``,children:e.DomainName??e.CertificateArn?.split(`/`).pop()},e.CertificateArn)}function O(e){return(0,C.jsx)(s,{value:e,children:e},e)}function Ee(e){return(0,C.jsx)(s,{value:e.VpcId??``,children:w(e)},e.VpcId)}function De(e){let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Internet-facing`,checked:t.value===`internet-facing`,name:`scheme`,onChange:()=>{t.onChange(`internet-facing`)},type:`radio`}),`Internet-facing`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Internal`,checked:t.value===`internal`,name:`scheme`,onChange:()=>{t.onChange(`internal`)},type:`radio`}),`Internal`]})]})}function Oe(e,t){return(0,C.jsxs)(`li`,{children:[e.type,`: `,e.id??`(created)`]},t)}function ke(e,t){let n=e(`name`)||``,r=e(`type`)||`application`,i=e(`scheme`)||`internet-facing`,ee=e(`subnetIds`),a=e(`securityGroupIds`),te=e(`listener.protocol`)||`HTTP`,o=e(`listener.port`)??80,s=e(`listener.certificateArn`),c=e(`listener.sslPolicy`),l=e(`listener.targetGroupMode`),u=e(`listener.existingTargetGroupArn`),d=[],f={type:`comment`,value:r===`network`?`# Create NLB with listener and default target group +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{cn as a}from"./cluster-config-DkOiY8HH.js";import{t as te}from"./back-link-wsXUoJ12.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-Cn66OoPn.js";import{t as d}from"./cli-command-panel-DavMY-tN.js";import{t as f}from"./button-qf9lLJ2x.js";import{t as ne}from"./input-D3aUBtS6.js";import{t as p}from"./acm-DlvuctCR.js";import{t as re}from"./certificate-import-dialog-B6IZXuGX.js";import{M as ie,O as ae,w as oe}from"./ec2-DYgBhYCJ.js";import{n as se}from"./elbv2-D0Z7QbU2.js";import{o as ce,u as le}from"./elbv2-CmXUhudd.js";import{t as ue}from"./page-heading-vksh_67w.js";import{a as m,i as de,n as h,t as fe}from"./zod-A4qtKH_p.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-DXvy9CQI.js";import{r as g,s as _,t as v}from"./field-CS-ql6du.js";import{t as he}from"./tags-field-array-Bjg8Nmui.js";import{t as y}from"./target-group-form-WUXG3BOb.js";import{a as b,c as x,o as ge,r as _e,s as ve,t as ye}from"./elbv2-DqjEJ4Pi.js";var S=r(),be=t(n(),1),C=e();function w(e){let t=a(e.Tags);return t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`}function xe(e){let t=a(e.Tags);return`${t?`${e.SubnetId} (${t})`:e.SubnetId} · ${e.CidrBlock}`}function Se(e){return e===`TLS`||e===`TCP`?`TCP`:e===`UDP`?`UDP`:e===`TCP_UDP`?`TCP_UDP`:`HTTP`}function Ce(e){let t=new Map;for(let n of e){let e=n.AvailabilityZone??`unknown`,r=t.get(e)??[];r.push(n),t.set(e,r)}return[...t.entries()].toSorted((e,t)=>e[0].localeCompare(t[0])).map(([e,t])=>({az:e,subnets:t}))}function T(){let e=(0,S.c)(243),t=ee(),{data:n}=i(ie),{data:r}=i(ae),{data:a}=i(oe),{data:s}=i(le),{data:w}=i(p),{data:T}=i(ce),k=se(),[A,Ae]=(0,be.useState)(null),[je,Me]=(0,be.useState)(!1),Ne;e[0]===n.Vpcs?Ne=e[1]:(Ne=n.Vpcs??[],e[0]=n.Vpcs,e[1]=Ne);let j=Ne,Pe;e[2]===r.Subnets?Pe=e[3]:(Pe=r.Subnets??[],e[2]=r.Subnets,e[3]=Pe);let Fe=Pe,Ie;e[4]===a.SecurityGroups?Ie=e[5]:(Ie=a.SecurityGroups??[],e[4]=a.SecurityGroups,e[5]=Ie);let Le=Ie,Re;e[6]===s.TargetGroups?Re=e[7]:(Re=s.TargetGroups??[],e[6]=s.TargetGroups,e[7]=Re);let ze=Re,Be;e[8]===w.CertificateSummaryList?Be=e[9]:(Be=w.CertificateSummaryList??[],e[8]=w.CertificateSummaryList,e[9]=Be);let Ve=Be,He;e[10]===T.SslPolicies?He=e[11]:(He=T.SslPolicies??[],e[10]=T.SslPolicies,e[11]=He);let Ue=He,We;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(We=fe(_e),e[12]=We):We=e[12];let Ge=j[0]?.VpcId??``,Ke,qe,Je,Ye;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(Je=[],Ye=[],Ke=[],qe={protocol:`HTTP`,port:80,targetGroupMode:`new`,existingTargetGroupArn:``,certificateArn:void 0,sslPolicy:void 0},e[13]=Ke,e[14]=qe,e[15]=Je,e[16]=Ye):(Ke=e[13],qe=e[14],Je=e[15],Ye=e[16]);let Xe;e[17]===Ge?Xe=e[18]:(Xe={resolver:We,defaultValues:{name:``,type:`application`,scheme:`internet-facing`,vpcId:Ge,subnetIds:Je,securityGroupIds:Ye,tags:Ke,listener:qe}},e[17]=Ge,e[18]=Xe);let Ze=de(Xe),Qe;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(Qe=fe(b),e[19]=Qe):Qe=e[19];let $e=j[0]?.VpcId??``,et,tt;e[20]===Symbol.for(`react.memo_cache_sentinel`)?(et={protocol:`HTTP`,path:`/`,port:`traffic-port`,intervalSeconds:30,timeoutSeconds:5,healthyThresholdCount:5,unhealthyThresholdCount:2,matcher:`200`},tt=[],e[20]=et,e[21]=tt):(et=e[20],tt=e[21]);let nt;e[22]===$e?nt=e[23]:(nt={resolver:Qe,defaultValues:{name:``,protocol:`HTTP`,port:80,vpcId:$e,healthCheck:et,tags:tt}},e[22]=$e,e[23]=nt);let M=de(nt),{handleSubmit:rt,register:N,watch:it,control:P,setValue:F,getValues:I,formState:at}=Ze,{errors:L,isSubmitting:ot}=at,st;e[24]===P?st=e[25]:(st={control:P,name:`vpcId`},e[24]=P,e[25]=st);let R=m(st),ct;e[26]===P?ct=e[27]:(ct={control:P,name:`subnetIds`},e[26]=P,e[27]=ct);let lt=m(ct),ut;e[28]===P?ut=e[29]:(ut={control:P,name:`securityGroupIds`},e[28]=P,e[29]=ut);let dt=m(ut),ft;e[30]===lt?ft=e[31]:(ft=new Set(lt),e[30]=lt,e[31]=ft);let pt=ft,mt;e[32]===dt?mt=e[33]:(mt=new Set(dt),e[32]=dt,e[33]=mt);let ht=mt,gt;e[34]===P?gt=e[35]:(gt={control:P,name:`type`},e[34]=P,e[35]=gt);let _t=m(gt),vt;e[36]===P?vt=e[37]:(vt={control:P,name:`listener.protocol`},e[36]=P,e[37]=vt);let z=m(vt),yt;e[38]===P?yt=e[39]:(yt={control:P,name:`listener.targetGroupMode`},e[38]=P,e[39]=yt);let B=m(yt),bt=_t===`network`,xt;e[40]===z?xt=e[41]:(xt=ve(z),e[40]=z,e[41]=xt);let St=xt,Ct;e[42]===_t?Ct=e[43]:(Ct=x(_t),e[42]=_t,e[43]=Ct);let wt=Ct,Tt;e[44]===bt?Tt=e[45]:(Tt=bt?[`TCP`,`UDP`,`TLS`,`TCP_UDP`]:[`HTTP`,`HTTPS`],e[44]=bt,e[45]=Tt);let Et=Tt,Dt,Ot,V,H,U,W,G,K,kt,q,J,Y,X,Z;if(e[46]!==Le||e[47]!==Fe||e[48]!==ze||e[49]!==P||e[50]!==L.name||e[51]!==L.subnetIds||e[52]!==L.vpcId||e[53]!==I||e[54]!==rt||e[55]!==bt||e[56]!==t||e[57]!==N||e[58]!==ht||e[59]!==pt||e[60]!==R||e[61]!==F||e[62]!==M||e[63]!==j||e[64]!==k||e[65]!==A){let n;e[80]===R?n=e[81]:(n=e=>e.VpcId===R,e[80]=R,e[81]=n);let r=Fe.filter(n),i;e[82]===R?i=e[83]:(i=e=>e.VpcId===R,e[82]=R,e[83]=i);let ee=Le.filter(i),a;if(e[84]!==ze||e[85]!==R){let t;e[87]===R?t=e[88]:(t=e=>e.VpcId===R,e[87]=R,e[88]=t),a=ze.filter(t),e[84]=ze,e[85]=R,e[86]=a}else a=e[86];Z=a;let s;e[89]===M?s=e[90]:(s=e=>{let t=Se(e);M.setValue(`protocol`,t),M.setValue(`healthCheck.protocol`,t===`HTTP`?`HTTP`:`TCP`)},e[89]=M,e[90]=s);let d=s,f;e[91]!==F||e[92]!==d?(f=e=>{F(`type`,e);let t=ge(e);F(`listener.protocol`,t),F(`listener.port`,80),F(`listener.certificateArn`,void 0),F(`listener.sslPolicy`,void 0),e===`network`&&F(`securityGroupIds`,[]),d(t)},e[91]=F,e[92]=d,e[93]=f):f=e[93];let p=f,re;e[94]!==I||e[95]!==F||e[96]!==d?(re=e=>{F(`listener.protocol`,e);let t=I(`listener.port`);ve(e)?(t===80&&F(`listener.port`,443),e===`HTTPS`&&!I(`listener.sslPolicy`)&&F(`listener.sslPolicy`,ye)):(t===443&&F(`listener.port`,80),F(`listener.certificateArn`,void 0),F(`listener.sslPolicy`,void 0)),d(e)},e[94]=I,e[95]=F,e[96]=d,e[97]=re):re=e[97],Dt=re;let ie;e[98]!==F||e[99]!==M?(ie=e=>{let t=(e===void 0?``:e)??``;F(`vpcId`,t,{shouldValidate:!0}),F(`subnetIds`,[],{shouldValidate:!0}),F(`securityGroupIds`,[]),F(`listener.existingTargetGroupArn`,``),M.setValue(`vpcId`,t)},e[98]=F,e[99]=M,e[100]=ie):ie=e[100];let ae=ie,oe;e[101]!==I||e[102]!==F?(oe=e=>{let t=I(`subnetIds`),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];F(`subnetIds`,n,{shouldValidate:!0})},e[101]=I,e[102]=F,e[103]=oe):oe=e[103];let se=oe,ce;e[104]!==I||e[105]!==F?(ce=e=>{let t=I(`securityGroupIds`),n=t.includes(e)?t.filter(t=>t!==e):[...t,e];F(`securityGroupIds`,n)},e[104]=I,e[105]=F,e[106]=ce):ce=e[106];let le=ce,m;e[107]!==t||e[108]!==M||e[109]!==k?(m=async e=>{Ae(null);let n;if(e.listener.targetGroupMode===`new`){if(!await M.trigger())return;n=M.getValues()}let r=await k.mutateAsync({lb:{name:e.name,type:e.type,scheme:e.scheme,vpcId:e.vpcId,subnetIds:e.subnetIds,securityGroupIds:e.securityGroupIds,tags:e.tags},listener:{protocol:e.listener.protocol,port:e.listener.port,targetGroupMode:e.listener.targetGroupMode,existingTargetGroupArn:e.listener.existingTargetGroupArn,certificateArn:e.listener.certificateArn,sslPolicy:e.listener.sslPolicy,newTargetGroup:n}});Ae(r),!r.error&&r.loadBalancerArn&&t({to:`/ec2/describe-load-balancers/$id`,params:{id:encodeURIComponent(r.loadBalancerArn)}})},e[107]=t,e[108]=M,e[109]=k,e[110]=m):m=e[110];let de=m,fe=Ce(r);e[111]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,C.jsx)(te,{to:`/ec2/describe-load-balancers`,children:`Back to load balancers`}),J=(0,C.jsx)(ue,{title:`Create Load Balancer`}),e[111]=q,e[112]=J):(q=e[111],J=e[112]),e[113]===k.error?Y=e[114]:(Y=k.error&&(0,C.jsx)(pe,{error:k.error,msg:`Failed to create load balancer`}),e[113]=k.error,e[114]=Y),e[115]===A?X=e[116]:(X=A?.error&&(0,C.jsxs)(`div`,{className:`mb-6 max-w-4xl rounded-md border border-destructive bg-destructive/10 p-4`,children:[(0,C.jsxs)(`h2`,{className:`text-sm font-medium text-destructive`,children:[`Wizard failed: `,A.failedStep]}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-destructive`,children:A.error.message}),A.created.length>0&&(0,C.jsxs)(`div`,{className:`mt-3`,children:[(0,C.jsx)(`p`,{className:`text-xs font-medium text-destructive`,children:`Successfully created resources (clean up manually if needed):`}),(0,C.jsx)(`ul`,{className:`mt-1 list-inside list-disc text-xs text-destructive`,children:A.created.map(Oe)})]})]}),e[115]=A,e[116]=X),Ot=`max-w-4xl space-y-6`,e[117]!==rt||e[118]!==de?(V=rt(de),e[117]=rt,e[118]=de,e[119]=V):V=e[119];let me;e[120]===Symbol.for(`react.memo_cache_sentinel`)?(me=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`lb-name`,children:`Name`})}),e[120]=me):me=e[120];let he=!!L.name,y;e[121]===N?y=e[122]:(y=N(`name`),e[121]=N,e[122]=y);let b;e[123]!==he||e[124]!==y?(b=(0,C.jsx)(ne,{"aria-invalid":he,id:`lb-name`,placeholder:`my-load-balancer`,...y}),e[123]=he,e[124]=y,e[125]=b):b=e[125];let x;e[126]===L.name?x=e[127]:(x=(0,C.jsx)(g,{errors:[L.name]}),e[126]=L.name,e[127]=x),e[128]!==b||e[129]!==x?(H=(0,C.jsxs)(v,{children:[me,b,x]}),e[128]=b,e[129]=x,e[130]=H):H=e[130];let _e;e[131]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,C.jsx)(_,{children:`Type`}),e[131]=_e):_e=e[131];let S;e[132]===p?S=e[133]:(S=e=>{let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Application Load Balancer`,checked:t.value===`application`,name:`lb-type`,onChange:()=>{p(`application`)},type:`radio`}),`Application (ALB)`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Network Load Balancer`,checked:t.value===`network`,name:`lb-type`,onChange:()=>{p(`network`)},type:`radio`}),`Network (NLB)`]})]})},e[132]=p,e[133]=S),e[134]!==P||e[135]!==S?(U=(0,C.jsxs)(v,{children:[_e,(0,C.jsx)(h,{control:P,name:`type`,render:S})]}),e[134]=P,e[135]=S,e[136]=U):U=e[136];let be;e[137]===Symbol.for(`react.memo_cache_sentinel`)?(be=(0,C.jsx)(_,{children:`Scheme`}),e[137]=be):be=e[137],e[138]===P?W=e[139]:(W=(0,C.jsxs)(v,{children:[be,(0,C.jsx)(h,{control:P,name:`scheme`,render:De})]}),e[138]=P,e[139]=W);let w;e[140]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`lb-vpc`,children:`VPC`})}),e[140]=w):w=e[140];let T;e[141]!==L.vpcId||e[142]!==ae||e[143]!==j?(T=e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:e=>{ae(e)},value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.vpcId,className:`w-full`,id:`lb-vpc`,children:(0,C.jsx)(o,{placeholder:`Select VPC`})}),(0,C.jsx)(c,{children:j.map(Ee)})]})},e[141]=L.vpcId,e[142]=ae,e[143]=j,e[144]=T):T=e[144];let E;e[145]!==P||e[146]!==T?(E=(0,C.jsx)(h,{control:P,name:`vpcId`,render:T}),e[145]=P,e[146]=T,e[147]=E):E=e[147];let D;e[148]===L.vpcId?D=e[149]:(D=(0,C.jsx)(g,{errors:[L.vpcId]}),e[148]=L.vpcId,e[149]=D),e[150]!==E||e[151]!==D?(G=(0,C.jsxs)(v,{children:[w,E,D]}),e[150]=E,e[151]=D,e[152]=G):G=e[152];let we;e[153]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,C.jsx)(_,{children:`Subnets (select at least 1)`}),e[153]=we):we=e[153];let Te=fe.length===0?(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No subnets in the selected VPC.`}):(0,C.jsx)(`div`,{className:`space-y-3`,children:fe.map(e=>(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`p`,{className:`mb-1 text-xs font-medium text-muted-foreground`,children:e.az}),(0,C.jsx)(`div`,{className:`space-y-1`,children:e.subnets.map(e=>(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Subnet ${xe(e)}`,checked:pt.has(e.SubnetId??``),onChange:()=>{se(e.SubnetId??``)},type:`checkbox`}),(0,C.jsx)(`span`,{className:`font-mono`,children:xe(e)})]},e.SubnetId))})]},e.az))}),O;e[154]===L.subnetIds?O=e[155]:(O=(0,C.jsx)(g,{errors:[L.subnetIds]}),e[154]=L.subnetIds,e[155]=O),e[156]!==Te||e[157]!==O?(K=(0,C.jsxs)(v,{children:[we,Te,O]}),e[156]=Te,e[157]=O,e[158]=K):K=e[158],kt=!bt&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:`Security groups`}),ee.length===0?(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups in the selected VPC.`}):(0,C.jsx)(`div`,{className:`space-y-1`,children:ee.map(e=>(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:ht.has(e.GroupId??``),onChange:()=>{le(e.GroupId??``)},type:`checkbox`}),(0,C.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),e[46]=Le,e[47]=Fe,e[48]=ze,e[49]=P,e[50]=L.name,e[51]=L.subnetIds,e[52]=L.vpcId,e[53]=I,e[54]=rt,e[55]=bt,e[56]=t,e[57]=N,e[58]=ht,e[59]=pt,e[60]=R,e[61]=F,e[62]=M,e[63]=j,e[64]=k,e[65]=A,e[66]=Dt,e[67]=Ot,e[68]=V,e[69]=H,e[70]=U,e[71]=W,e[72]=G,e[73]=K,e[74]=kt,e[75]=q,e[76]=J,e[77]=Y,e[78]=X,e[79]=Z}else Dt=e[66],Ot=e[67],V=e[68],H=e[69],U=e[70],W=e[71],G=e[72],K=e[73],kt=e[74],q=e[75],J=e[76],Y=e[77],X=e[78],Z=e[79];let At;e[159]===P?At=e[160]:(At=(0,C.jsx)(he,{control:P,name:`tags`}),e[159]=P,e[160]=At);let jt;e[161]===Symbol.for(`react.memo_cache_sentinel`)?(jt=(0,C.jsx)(`h2`,{className:`text-sm font-semibold`,children:`First listener & default target group`}),e[161]=jt):jt=e[161];let Mt;e[162]===Symbol.for(`react.memo_cache_sentinel`)?(Mt=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-protocol`,children:`Protocol`})}),e[162]=Mt):Mt=e[162];let Nt;e[163]!==Dt||e[164]!==wt?(Nt=e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:e=>{e&&Dt(e)},value:t.value,children:[(0,C.jsx)(l,{className:`w-full`,id:`listener-protocol`,children:(0,C.jsx)(o,{})}),(0,C.jsx)(c,{children:wt.map(O)})]})},e[163]=Dt,e[164]=wt,e[165]=Nt):Nt=e[165];let Pt;e[166]!==P||e[167]!==Nt?(Pt=(0,C.jsxs)(v,{children:[Mt,(0,C.jsx)(h,{control:P,name:`listener.protocol`,render:Nt})]}),e[166]=P,e[167]=Nt,e[168]=Pt):Pt=e[168];let Ft;e[169]===Symbol.for(`react.memo_cache_sentinel`)?(Ft=(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-port`,children:`Port`})}),e[169]=Ft):Ft=e[169];let It=!!L.listener?.port,Lt;e[170]===N?Lt=e[171]:(Lt=N(`listener.port`,{valueAsNumber:!0}),e[170]=N,e[171]=Lt);let Rt;e[172]!==It||e[173]!==Lt?(Rt=(0,C.jsx)(ne,{"aria-invalid":It,id:`listener-port`,inputMode:`numeric`,type:`number`,...Lt}),e[172]=It,e[173]=Lt,e[174]=Rt):Rt=e[174];let zt=L.listener?.port,Bt;e[175]===zt?Bt=e[176]:(Bt=(0,C.jsx)(g,{errors:[zt]}),e[175]=zt,e[176]=Bt);let Vt;e[177]!==Rt||e[178]!==Bt?(Vt=(0,C.jsxs)(v,{children:[Ft,Rt,Bt]}),e[177]=Rt,e[178]=Bt,e[179]=Vt):Vt=e[179];let Q;e[180]!==Ve||e[181]!==P||e[182]!==L.listener?.certificateArn||e[183]!==St||e[184]!==z||e[185]!==Ue?(Q=St&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-certificate`,children:`Certificate`})}),(0,C.jsx)(h,{control:P,name:`listener.certificateArn`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.listener?.certificateArn,className:`w-full`,id:`listener-certificate`,children:(0,C.jsx)(o,{placeholder:`Select certificate`})}),(0,C.jsx)(c,{children:Ve.map(Te)})]})}}),(0,C.jsx)(g,{errors:[L.listener?.certificateArn]}),(0,C.jsxs)(`div`,{className:`mt-1 flex items-center justify-between`,children:[Ve.length===0&&(0,C.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No certificates imported yet.`}),(0,C.jsx)(f,{className:`ml-auto`,onClick:()=>{Me(!0)},size:`sm`,type:`button`,variant:`ghost`,children:`Import certificate…`})]})]}),z===`HTTPS`&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`listener-ssl-policy`,children:`Security policy`})}),(0,C.jsx)(h,{control:P,name:`listener.sslPolicy`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??`ELBSecurityPolicy-2016-08`,children:[(0,C.jsx)(l,{className:`w-full`,id:`listener-ssl-policy`,children:(0,C.jsx)(o,{})}),(0,C.jsx)(c,{children:Ue.map(we)})]})}})]})]}),e[180]=Ve,e[181]=P,e[182]=L.listener?.certificateArn,e[183]=St,e[184]=z,e[185]=Ue,e[186]=Q):Q=e[186];let Ht;e[187]===Symbol.for(`react.memo_cache_sentinel`)?(Ht=(0,C.jsx)(_,{children:`Default target group`}),e[187]=Ht):Ht=e[187];let Ut;e[188]===P?Ut=e[189]:(Ut=(0,C.jsxs)(v,{children:[Ht,(0,C.jsx)(h,{control:P,name:`listener.targetGroupMode`,render:D})]}),e[188]=P,e[189]=Ut);let Wt;e[190]!==P||e[191]!==L.listener?.existingTargetGroupArn||e[192]!==B||e[193]!==Z?(Wt=B===`existing`&&(0,C.jsxs)(v,{children:[(0,C.jsx)(_,{children:(0,C.jsx)(`label`,{htmlFor:`tg-existing`,children:`Target group`})}),(0,C.jsx)(h,{control:P,name:`listener.existingTargetGroupArn`,render:e=>{let{field:t}=e;return(0,C.jsxs)(u,{onValueChange:t.onChange,value:t.value??``,children:[(0,C.jsx)(l,{"aria-invalid":!!L.listener?.existingTargetGroupArn,className:`w-full`,id:`tg-existing`,children:(0,C.jsx)(o,{placeholder:`Select target group`})}),(0,C.jsx)(c,{children:Z.map(E)})]})}}),(0,C.jsx)(g,{errors:[L.listener?.existingTargetGroupArn]}),Z.length===0&&(0,C.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`No target groups in this VPC. Choose “Create new” instead.`})]}),e[190]=P,e[191]=L.listener?.existingTargetGroupArn,e[192]=B,e[193]=Z,e[194]=Wt):Wt=e[194];let Gt;e[195]!==Et||e[196]!==M||e[197]!==B||e[198]!==j?(Gt=B===`new`&&(0,C.jsx)(`div`,{className:`space-y-4 border-l-2 border-muted pl-4`,children:(0,C.jsx)(y,{allowedProtocols:Et,form:M,vpcs:j})}),e[195]=Et,e[196]=M,e[197]=B,e[198]=j,e[199]=Gt):Gt=e[199];let Kt;e[200]!==Pt||e[201]!==Vt||e[202]!==Q||e[203]!==Ut||e[204]!==Wt||e[205]!==Gt?(Kt=(0,C.jsxs)(`div`,{className:`space-y-4 rounded-md border bg-card p-4`,children:[jt,Pt,Vt,Q,Ut,Wt,Gt]}),e[200]=Pt,e[201]=Vt,e[202]=Q,e[203]=Ut,e[204]=Wt,e[205]=Gt,e[206]=Kt):Kt=e[206];let qt;e[207]===F?qt=e[208]:(qt=e=>{F(`listener.certificateArn`,e,{shouldValidate:!0})},e[207]=F,e[208]=qt);let Jt;e[209]!==je||e[210]!==qt?(Jt=(0,C.jsx)(re,{onImported:qt,onOpenChange:Me,open:je}),e[209]=je,e[210]=qt,e[211]=Jt):Jt=e[211];let Yt;e[212]!==M.watch||e[213]!==it?(Yt=ke(it,M.watch),e[212]=M.watch,e[213]=it,e[214]=Yt):Yt=e[214];let Xt;e[215]===Yt?Xt=e[216]:(Xt=(0,C.jsx)(d,{commands:Yt}),e[215]=Yt,e[216]=Xt);let Zt;e[217]===t?Zt=e[218]:(Zt=async()=>{await t({to:`/ec2/describe-load-balancers`})},e[217]=t,e[218]=Zt);let $;e[219]!==ot||e[220]!==Zt||e[221]!==k.isPending?($=(0,C.jsx)(me,{isPending:k.isPending,isSubmitting:ot,onCancel:Zt,pendingLabel:`Creating…`,submitLabel:`Create Load Balancer`}),e[219]=ot,e[220]=Zt,e[221]=k.isPending,e[222]=$):$=e[222];let Qt;e[223]!==Ot||e[224]!==V||e[225]!==H||e[226]!==U||e[227]!==W||e[228]!==G||e[229]!==K||e[230]!==kt||e[231]!==At||e[232]!==Kt||e[233]!==Jt||e[234]!==Xt||e[235]!==$?(Qt=(0,C.jsxs)(`form`,{className:Ot,onSubmit:V,children:[H,U,W,G,K,kt,At,Kt,Jt,Xt,$]}),e[223]=Ot,e[224]=V,e[225]=H,e[226]=U,e[227]=W,e[228]=G,e[229]=K,e[230]=kt,e[231]=At,e[232]=Kt,e[233]=Jt,e[234]=Xt,e[235]=$,e[236]=Qt):Qt=e[236];let $t;return e[237]!==q||e[238]!==J||e[239]!==Y||e[240]!==X||e[241]!==Qt?($t=(0,C.jsxs)(C.Fragment,{children:[q,J,Y,X,Qt]}),e[237]=q,e[238]=J,e[239]=Y,e[240]=X,e[241]=Qt,e[242]=$t):$t=e[242],$t}function E(e){return(0,C.jsxs)(s,{value:e.TargetGroupArn??``,children:[e.TargetGroupName,` · `,e.Protocol,`:`,e.Port]},e.TargetGroupArn)}function D(e){let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Create new target group`,checked:t.value===`new`,name:`tg-mode`,onChange:()=>{t.onChange(`new`)},type:`radio`}),`Create new`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Use existing target group`,checked:t.value===`existing`,name:`tg-mode`,onChange:()=>{t.onChange(`existing`)},type:`radio`}),`Use existing`]})]})}function we(e){return(0,C.jsx)(s,{value:e.Name??``,children:e.Name},e.Name)}function Te(e){return(0,C.jsx)(s,{value:e.CertificateArn??``,children:e.DomainName??e.CertificateArn?.split(`/`).pop()},e.CertificateArn)}function O(e){return(0,C.jsx)(s,{value:e,children:e},e)}function Ee(e){return(0,C.jsx)(s,{value:e.VpcId??``,children:w(e)},e.VpcId)}function De(e){let{field:t}=e;return(0,C.jsxs)(`div`,{className:`flex gap-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Internet-facing`,checked:t.value===`internet-facing`,name:`scheme`,onChange:()=>{t.onChange(`internet-facing`)},type:`radio`}),`Internet-facing`]}),(0,C.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,C.jsx)(`input`,{"aria-label":`Internal`,checked:t.value===`internal`,name:`scheme`,onChange:()=>{t.onChange(`internal`)},type:`radio`}),`Internal`]})]})}function Oe(e,t){return(0,C.jsxs)(`li`,{children:[e.type,`: `,e.id??`(created)`]},t)}function ke(e,t){let n=e(`name`)||``,r=e(`type`)||`application`,i=e(`scheme`)||`internet-facing`,ee=e(`subnetIds`),a=e(`securityGroupIds`),te=e(`listener.protocol`)||`HTTP`,o=e(`listener.port`)??80,s=e(`listener.certificateArn`),c=e(`listener.sslPolicy`),l=e(`listener.targetGroupMode`),u=e(`listener.existingTargetGroupArn`),d=[],f={type:`comment`,value:r===`network`?`# Create NLB with listener and default target group `:`# Create ALB with listener and default target group diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-C0zhuUio.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-BF-3LK_W.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-C0zhuUio.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-BF-3LK_W.js index 59ab33802..63b6c87d8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-C0zhuUio.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-nat-gateway-BF-3LK_W.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{sn as a}from"./cluster-config-xw_Q7X1e.js";import{t as ee}from"./back-link-CjKy1JE5.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-B01jpDaX.js";import{t as te}from"./cli-command-panel-CLiFy1rG.js";import{t as ne}from"./input-6kdUb_DH.js";import{O as re,n as ie}from"./ec2-CWEplLq4.js";import{_ as ae}from"./ec2-Ctto2xjU.js";import{t as oe}from"./page-heading-vksh_67w.js";import{a as se,i as ce,n as le,t as ue}from"./zod-DF_n2ejy.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-BUM37An0.js";import{r as pe,s as d,t as f}from"./field-c7GHI5st.js";import{l as me}from"./ec2-DhWukC79.js";var he=t(),p=e();function m(){let e=(0,he.c)(68),t=i(),{data:a}=n(re),{data:s}=n(ie),m=ae(),h;e[0]===a.Subnets?h=e[1]:(h=a.Subnets??[],e[0]=a.Subnets,e[1]=h);let g=h,_;e[2]===g?_=e[3]:(_=g.filter(ye),e[2]=g,e[3]=_);let xe=_,v=xe.length>0?xe:g,y;e[4]===s.Addresses?y=e[5]:(y=s.Addresses??[],e[4]=s.Addresses,e[5]=y);let b;e[6]===y?b=e[7]:(b=y.filter(ve),e[6]=y,e[7]=b);let x=b,S;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:ue(me),defaultValues:{subnetId:``,allocationId:``,name:``}},e[8]=S):S=e[8];let{control:C,handleSubmit:w,register:T,formState:Se}=ce(S),{errors:E,isSubmitting:D}=Se,O;e[9]===C?O=e[10]:(O={control:C},e[9]=C,e[10]=O);let k=se(O),A;e[11]!==m||e[12]!==t?(A=async e=>{let n=(await m.mutateAsync({subnetId:e.subnetId,allocationId:e.allocationId,name:e.name?.trim()??void 0})).NatGateway?.NatGatewayId;t(n?{to:`/ec2/describe-nat-gateways/$id`,params:{id:n}}:{to:`/ec2/describe-nat-gateways`})},e[11]=m,e[12]=t,e[13]=A):A=e[13];let j=A,M,N;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,p.jsx)(ee,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),N=(0,p.jsx)(oe,{title:`Create NAT Gateway`}),e[14]=M,e[15]=N):(M=e[14],N=e[15]);let P;e[16]===m.error?P=e[17]:(P=m.error&&(0,p.jsx)(de,{error:m.error,msg:`Failed to create NAT Gateway`}),e[16]=m.error,e[17]=P);let F;e[18]!==w||e[19]!==j?(F=w(j),e[18]=w,e[19]=j,e[20]=F):F=e[20];let I;e[21]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[21]=I):I=e[21];let L;e[22]===T?L=e[23]:(L=T(`name`),e[22]=T,e[23]=L);let R;e[24]===L?R=e[25]:(R=(0,p.jsxs)(f,{children:[I,(0,p.jsx)(ne,{id:`name`,placeholder:`my-nat-gateway`,...L})]}),e[24]=L,e[25]=R);let z;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`subnetId`,children:`Public subnet`})}),e[26]=z):z=e[26];let B;e[27]!==E.subnetId||e[28]!==v?(B=e=>{let{field:t}=e;return(0,p.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,p.jsx)(l,{"aria-invalid":!!E.subnetId,className:`w-full`,id:`subnetId`,children:(0,p.jsx)(o,{placeholder:`Select a public subnet`})}),(0,p.jsx)(c,{children:v.map(_e)})]})},e[27]=E.subnetId,e[28]=v,e[29]=B):B=e[29];let V;e[30]!==C||e[31]!==B?(V=(0,p.jsx)(le,{control:C,name:`subnetId`,render:B}),e[30]=C,e[31]=B,e[32]=V):V=e[32];let H;e[33]===E.subnetId?H=e[34]:(H=(0,p.jsx)(pe,{errors:[E.subnetId]}),e[33]=E.subnetId,e[34]=H);let U;e[35]!==V||e[36]!==H?(U=(0,p.jsxs)(f,{children:[z,V,H]}),e[35]=V,e[36]=H,e[37]=U):U=e[37];let W;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`allocationId`,children:`Elastic IP`})}),e[38]=W):W=e[38];let G;e[39]!==x||e[40]!==C||e[41]!==E.allocationId?(G=x.length>0?(0,p.jsx)(le,{control:C,name:`allocationId`,render:e=>{let{field:t}=e;return(0,p.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,p.jsx)(l,{"aria-invalid":!!E.allocationId,className:`w-full`,id:`allocationId`,children:(0,p.jsx)(o,{placeholder:`Select an Elastic IP`})}),(0,p.jsx)(c,{children:x.map(ge)})]})}}):(0,p.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No available Elastic IPs.`,` `,(0,p.jsx)(r,{className:`text-primary hover:underline`,to:`/ec2/allocate-address`,children:`Allocate one`}),` `,`first.`]}),e[39]=x,e[40]=C,e[41]=E.allocationId,e[42]=G):G=e[42];let K;e[43]===E.allocationId?K=e[44]:(K=(0,p.jsx)(pe,{errors:[E.allocationId]}),e[43]=E.allocationId,e[44]=K);let q;e[45]!==G||e[46]!==K?(q=(0,p.jsxs)(f,{children:[W,G,K]}),e[45]=G,e[46]=K,e[47]=q):q=e[47];let J;e[48]===k?J=e[49]:(J=be(k),e[48]=k,e[49]=J);let Y;e[50]===J?Y=e[51]:(Y=(0,p.jsx)(te,{commands:J}),e[50]=J,e[51]=Y);let X;e[52]===t?X=e[53]:(X=async()=>{await t({to:`/ec2/describe-nat-gateways`})},e[52]=t,e[53]=X);let Z;e[54]!==m.isPending||e[55]!==D||e[56]!==X?(Z=(0,p.jsx)(fe,{isPending:m.isPending,isSubmitting:D,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create NAT Gateway`}),e[54]=m.isPending,e[55]=D,e[56]=X,e[57]=Z):Z=e[57];let Q;e[58]!==F||e[59]!==R||e[60]!==U||e[61]!==q||e[62]!==Y||e[63]!==Z?(Q=(0,p.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[R,U,q,Y,Z]}),e[58]=F,e[59]=R,e[60]=U,e[61]=q,e[62]=Y,e[63]=Z,e[64]=Q):Q=e[64];let $;return e[65]!==P||e[66]!==Q?($=(0,p.jsxs)(p.Fragment,{children:[M,N,P,Q]}),e[65]=P,e[66]=Q,e[67]=$):$=e[67],$}function ge(e){return(0,p.jsx)(s,{value:e.AllocationId??``,children:`${e.AllocationId} (${e.PublicIp})`},e.AllocationId)}function _e(e){let t=a(e.Tags);return(0,p.jsx)(s,{value:e.SubnetId??``,children:t?`${e.SubnetId} (${t})`:`${e.SubnetId} (${e.CidrBlock})`},e.SubnetId)}function ve(e){return!e.AssociationId}function ye(e){return e.MapPublicIpOnLaunch}function be(e){let t=e.subnetId??``,n=e.allocationId??``,r=e.name??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-nat-gateway`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{cn as a}from"./cluster-config-DkOiY8HH.js";import{t as ee}from"./back-link-wsXUoJ12.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-Cn66OoPn.js";import{t as te}from"./cli-command-panel-DavMY-tN.js";import{t as ne}from"./input-D3aUBtS6.js";import{O as re,n as ie}from"./ec2-DYgBhYCJ.js";import{_ as ae}from"./ec2-Csn1kwZ8.js";import{t as oe}from"./page-heading-vksh_67w.js";import{a as se,i as ce,n as le,t as ue}from"./zod-A4qtKH_p.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-DXvy9CQI.js";import{r as pe,s as d,t as f}from"./field-CS-ql6du.js";import{l as me}from"./ec2-DqNqPeiA.js";var he=t(),p=e();function m(){let e=(0,he.c)(68),t=i(),{data:a}=n(re),{data:s}=n(ie),m=ae(),h;e[0]===a.Subnets?h=e[1]:(h=a.Subnets??[],e[0]=a.Subnets,e[1]=h);let g=h,_;e[2]===g?_=e[3]:(_=g.filter(ye),e[2]=g,e[3]=_);let xe=_,v=xe.length>0?xe:g,y;e[4]===s.Addresses?y=e[5]:(y=s.Addresses??[],e[4]=s.Addresses,e[5]=y);let b;e[6]===y?b=e[7]:(b=y.filter(ve),e[6]=y,e[7]=b);let x=b,S;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:ue(me),defaultValues:{subnetId:``,allocationId:``,name:``}},e[8]=S):S=e[8];let{control:C,handleSubmit:w,register:T,formState:Se}=ce(S),{errors:E,isSubmitting:D}=Se,O;e[9]===C?O=e[10]:(O={control:C},e[9]=C,e[10]=O);let k=se(O),A;e[11]!==m||e[12]!==t?(A=async e=>{let n=(await m.mutateAsync({subnetId:e.subnetId,allocationId:e.allocationId,name:e.name?.trim()??void 0})).NatGateway?.NatGatewayId;t(n?{to:`/ec2/describe-nat-gateways/$id`,params:{id:n}}:{to:`/ec2/describe-nat-gateways`})},e[11]=m,e[12]=t,e[13]=A):A=e[13];let j=A,M,N;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,p.jsx)(ee,{to:`/ec2/describe-nat-gateways`,children:`Back to NAT Gateways`}),N=(0,p.jsx)(oe,{title:`Create NAT Gateway`}),e[14]=M,e[15]=N):(M=e[14],N=e[15]);let P;e[16]===m.error?P=e[17]:(P=m.error&&(0,p.jsx)(de,{error:m.error,msg:`Failed to create NAT Gateway`}),e[16]=m.error,e[17]=P);let F;e[18]!==w||e[19]!==j?(F=w(j),e[18]=w,e[19]=j,e[20]=F):F=e[20];let I;e[21]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[21]=I):I=e[21];let L;e[22]===T?L=e[23]:(L=T(`name`),e[22]=T,e[23]=L);let R;e[24]===L?R=e[25]:(R=(0,p.jsxs)(f,{children:[I,(0,p.jsx)(ne,{id:`name`,placeholder:`my-nat-gateway`,...L})]}),e[24]=L,e[25]=R);let z;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`subnetId`,children:`Public subnet`})}),e[26]=z):z=e[26];let B;e[27]!==E.subnetId||e[28]!==v?(B=e=>{let{field:t}=e;return(0,p.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,p.jsx)(l,{"aria-invalid":!!E.subnetId,className:`w-full`,id:`subnetId`,children:(0,p.jsx)(o,{placeholder:`Select a public subnet`})}),(0,p.jsx)(c,{children:v.map(_e)})]})},e[27]=E.subnetId,e[28]=v,e[29]=B):B=e[29];let V;e[30]!==C||e[31]!==B?(V=(0,p.jsx)(le,{control:C,name:`subnetId`,render:B}),e[30]=C,e[31]=B,e[32]=V):V=e[32];let H;e[33]===E.subnetId?H=e[34]:(H=(0,p.jsx)(pe,{errors:[E.subnetId]}),e[33]=E.subnetId,e[34]=H);let U;e[35]!==V||e[36]!==H?(U=(0,p.jsxs)(f,{children:[z,V,H]}),e[35]=V,e[36]=H,e[37]=U):U=e[37];let W;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,p.jsx)(d,{children:(0,p.jsx)(`label`,{htmlFor:`allocationId`,children:`Elastic IP`})}),e[38]=W):W=e[38];let G;e[39]!==x||e[40]!==C||e[41]!==E.allocationId?(G=x.length>0?(0,p.jsx)(le,{control:C,name:`allocationId`,render:e=>{let{field:t}=e;return(0,p.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,p.jsx)(l,{"aria-invalid":!!E.allocationId,className:`w-full`,id:`allocationId`,children:(0,p.jsx)(o,{placeholder:`Select an Elastic IP`})}),(0,p.jsx)(c,{children:x.map(ge)})]})}}):(0,p.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No available Elastic IPs.`,` `,(0,p.jsx)(r,{className:`text-primary hover:underline`,to:`/ec2/allocate-address`,children:`Allocate one`}),` `,`first.`]}),e[39]=x,e[40]=C,e[41]=E.allocationId,e[42]=G):G=e[42];let K;e[43]===E.allocationId?K=e[44]:(K=(0,p.jsx)(pe,{errors:[E.allocationId]}),e[43]=E.allocationId,e[44]=K);let q;e[45]!==G||e[46]!==K?(q=(0,p.jsxs)(f,{children:[W,G,K]}),e[45]=G,e[46]=K,e[47]=q):q=e[47];let J;e[48]===k?J=e[49]:(J=be(k),e[48]=k,e[49]=J);let Y;e[50]===J?Y=e[51]:(Y=(0,p.jsx)(te,{commands:J}),e[50]=J,e[51]=Y);let X;e[52]===t?X=e[53]:(X=async()=>{await t({to:`/ec2/describe-nat-gateways`})},e[52]=t,e[53]=X);let Z;e[54]!==m.isPending||e[55]!==D||e[56]!==X?(Z=(0,p.jsx)(fe,{isPending:m.isPending,isSubmitting:D,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create NAT Gateway`}),e[54]=m.isPending,e[55]=D,e[56]=X,e[57]=Z):Z=e[57];let Q;e[58]!==F||e[59]!==R||e[60]!==U||e[61]!==q||e[62]!==Y||e[63]!==Z?(Q=(0,p.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[R,U,q,Y,Z]}),e[58]=F,e[59]=R,e[60]=U,e[61]=q,e[62]=Y,e[63]=Z,e[64]=Q):Q=e[64];let $;return e[65]!==P||e[66]!==Q?($=(0,p.jsxs)(p.Fragment,{children:[M,N,P,Q]}),e[65]=P,e[66]=Q,e[67]=$):$=e[67],$}function ge(e){return(0,p.jsx)(s,{value:e.AllocationId??``,children:`${e.AllocationId} (${e.PublicIp})`},e.AllocationId)}function _e(e){let t=a(e.Tags);return(0,p.jsx)(s,{value:e.SubnetId??``,children:t?`${e.SubnetId} (${t})`:`${e.SubnetId} (${e.CidrBlock})`},e.SubnetId)}function ve(e){return!e.AssociationId}function ye(e){return e.MapPublicIpOnLaunch}function be(e){let t=e.subnetId??``,n=e.allocationId??``,r=e.name??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-nat-gateway`},{type:`flag`,value:` \\ --subnet-id`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` \\ --allocation-id`},{type:`value`,value:` ${n||``}`}];return r.trim()&&i.push({type:`flag`,value:` \\ --tag-specifications`},{type:`value`,value:` 'ResourceType=natgateway,Tags=[{Key=Name,Value=${r.trim()}}]'`}),[{label:`Create NAT Gateway`,parts:i}]}export{m as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-D_3YKZZQ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-C_JJp8Dt.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-D_3YKZZQ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-C_JJp8Dt.js index 9ae692e8a..34e2c2d3c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-D_3YKZZQ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-placement-group-C_JJp8Dt.js @@ -1,3 +1,3 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as ee}from"./back-link-CjKy1JE5.js";import{c as r,i,n as te,s as a,t as ne}from"./select-B01jpDaX.js";import{t as re}from"./cli-command-panel-CLiFy1rG.js";import{t as o}from"./input-6kdUb_DH.js";import{v as s}from"./ec2-Ctto2xjU.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as l,i as u,n as d,t as f}from"./zod-DF_n2ejy.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./form-actions-BUM37An0.js";import{r as h,s as g,t as _}from"./field-c7GHI5st.js";import{u as v}from"./ec2-DhWukC79.js";var y=t(),b=e();function x(){let e=(0,y.c)(54),t=n(),x=s(),S;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:f(v),defaultValues:{groupName:``,strategy:`spread`}},e[0]=S):S=e[0];let{control:C,handleSubmit:w,register:T,formState:E}=u(S),{errors:D,isSubmitting:O}=E,k;e[1]===C?k=e[2]:(k={control:C},e[1]=C,e[2]=k);let A=l(k),j;e[3]!==x||e[4]!==t?(j=async e=>{let n=await x.mutateAsync(e);t({to:`/ec2/describe-placement-groups/$id`,params:{id:n.PlacementGroup?.GroupId??``}})},e[3]=x,e[4]=t,e[5]=j):j=e[5];let M=j,N,P;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,b.jsx)(ee,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),P=(0,b.jsx)(c,{title:`Create Placement Group`}),e[6]=N,e[7]=P):(N=e[6],P=e[7]);let F;e[8]===x.error?F=e[9]:(F=x.error&&(0,b.jsx)(p,{error:x.error,msg:`Failed to create placement group`}),e[8]=x.error,e[9]=F);let I;e[10]!==w||e[11]!==M?(I=w(M),e[10]=w,e[11]=M,e[12]=I):I=e[12];let L;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[13]=L):L=e[13];let R=!!D.groupName,z;e[14]===T?z=e[15]:(z=T(`groupName`),e[14]=T,e[15]=z);let B;e[16]!==z||e[17]!==R?(B=(0,b.jsx)(o,{"aria-invalid":R,id:`groupName`,placeholder:`my-placement-group`,...z}),e[16]=z,e[17]=R,e[18]=B):B=e[18];let V;e[19]===D.groupName?V=e[20]:(V=(0,b.jsx)(h,{errors:[D.groupName]}),e[19]=D.groupName,e[20]=V);let H;e[21]!==B||e[22]!==V?(H=(0,b.jsxs)(_,{children:[L,B,V]}),e[21]=B,e[22]=V,e[23]=H):H=e[23];let U;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`strategy`,children:`Strategy`})}),e[24]=U):U=e[24];let W;e[25]===D.strategy?W=e[26]:(W=e=>{let{field:t}=e;return(0,b.jsxs)(ne,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,b.jsx)(a,{"aria-invalid":!!D.strategy,className:`w-full`,id:`strategy`,children:(0,b.jsx)(r,{})}),(0,b.jsxs)(te,{children:[(0,b.jsx)(i,{value:`spread`,children:`spread`}),(0,b.jsx)(i,{value:`cluster`,children:`cluster`})]})]})},e[25]=D.strategy,e[26]=W);let G;e[27]!==C||e[28]!==W?(G=(0,b.jsx)(d,{control:C,name:`strategy`,render:W}),e[27]=C,e[28]=W,e[29]=G):G=e[29];let K;e[30]===D.strategy?K=e[31]:(K=(0,b.jsx)(h,{errors:[D.strategy]}),e[30]=D.strategy,e[31]=K);let q;e[32]!==G||e[33]!==K?(q=(0,b.jsxs)(_,{children:[U,G,K]}),e[32]=G,e[33]=K,e[34]=q):q=e[34];let J;e[35]===A?J=e[36]:(J=ie(A),e[35]=A,e[36]=J);let Y;e[37]===J?Y=e[38]:(Y=(0,b.jsx)(re,{commands:J}),e[37]=J,e[38]=Y);let X;e[39]===t?X=e[40]:(X=async()=>{await t({to:`/ec2/describe-placement-groups`})},e[39]=t,e[40]=X);let Z;e[41]!==x.isPending||e[42]!==O||e[43]!==X?(Z=(0,b.jsx)(m,{isPending:x.isPending,isSubmitting:O,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Placement Group`}),e[41]=x.isPending,e[42]=O,e[43]=X,e[44]=Z):Z=e[44];let Q;e[45]!==H||e[46]!==q||e[47]!==Y||e[48]!==Z||e[49]!==I?(Q=(0,b.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:I,children:[H,q,Y,Z]}),e[45]=H,e[46]=q,e[47]=Y,e[48]=Z,e[49]=I,e[50]=Q):Q=e[50];let $;return e[51]!==Q||e[52]!==F?($=(0,b.jsxs)(b.Fragment,{children:[N,P,F,Q]}),e[51]=Q,e[52]=F,e[53]=$):$=e[53],$}function S(e){return`'${e.replaceAll(`'`,`'"'"'`)}'`}function ie(e){let t=e.groupName??``,n=e.strategy??``;return[{label:`Create Placement Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-placement-group`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as ee}from"./back-link-wsXUoJ12.js";import{c as r,i,n as te,s as a,t as ne}from"./select-Cn66OoPn.js";import{t as re}from"./cli-command-panel-DavMY-tN.js";import{t as o}from"./input-D3aUBtS6.js";import{v as s}from"./ec2-Csn1kwZ8.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as l,i as u,n as d,t as f}from"./zod-A4qtKH_p.js";import{t as p}from"./error-banner-DeOeVBKS.js";import{t as m}from"./form-actions-DXvy9CQI.js";import{r as h,s as g,t as _}from"./field-CS-ql6du.js";import{u as v}from"./ec2-DqNqPeiA.js";var y=t(),b=e();function x(){let e=(0,y.c)(54),t=n(),x=s(),S;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(S={resolver:f(v),defaultValues:{groupName:``,strategy:`spread`}},e[0]=S):S=e[0];let{control:C,handleSubmit:w,register:T,formState:E}=u(S),{errors:D,isSubmitting:O}=E,k;e[1]===C?k=e[2]:(k={control:C},e[1]=C,e[2]=k);let A=l(k),j;e[3]!==x||e[4]!==t?(j=async e=>{let n=await x.mutateAsync(e);t({to:`/ec2/describe-placement-groups/$id`,params:{id:n.PlacementGroup?.GroupId??``}})},e[3]=x,e[4]=t,e[5]=j):j=e[5];let M=j,N,P;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,b.jsx)(ee,{to:`/ec2/describe-placement-groups`,children:`Back to placement groups`}),P=(0,b.jsx)(c,{title:`Create Placement Group`}),e[6]=N,e[7]=P):(N=e[6],P=e[7]);let F;e[8]===x.error?F=e[9]:(F=x.error&&(0,b.jsx)(p,{error:x.error,msg:`Failed to create placement group`}),e[8]=x.error,e[9]=F);let I;e[10]!==w||e[11]!==M?(I=w(M),e[10]=w,e[11]=M,e[12]=I):I=e[12];let L;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[13]=L):L=e[13];let R=!!D.groupName,z;e[14]===T?z=e[15]:(z=T(`groupName`),e[14]=T,e[15]=z);let B;e[16]!==z||e[17]!==R?(B=(0,b.jsx)(o,{"aria-invalid":R,id:`groupName`,placeholder:`my-placement-group`,...z}),e[16]=z,e[17]=R,e[18]=B):B=e[18];let V;e[19]===D.groupName?V=e[20]:(V=(0,b.jsx)(h,{errors:[D.groupName]}),e[19]=D.groupName,e[20]=V);let H;e[21]!==B||e[22]!==V?(H=(0,b.jsxs)(_,{children:[L,B,V]}),e[21]=B,e[22]=V,e[23]=H):H=e[23];let U;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,b.jsx)(g,{children:(0,b.jsx)(`label`,{htmlFor:`strategy`,children:`Strategy`})}),e[24]=U):U=e[24];let W;e[25]===D.strategy?W=e[26]:(W=e=>{let{field:t}=e;return(0,b.jsxs)(ne,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,b.jsx)(a,{"aria-invalid":!!D.strategy,className:`w-full`,id:`strategy`,children:(0,b.jsx)(r,{})}),(0,b.jsxs)(te,{children:[(0,b.jsx)(i,{value:`spread`,children:`spread`}),(0,b.jsx)(i,{value:`cluster`,children:`cluster`})]})]})},e[25]=D.strategy,e[26]=W);let G;e[27]!==C||e[28]!==W?(G=(0,b.jsx)(d,{control:C,name:`strategy`,render:W}),e[27]=C,e[28]=W,e[29]=G):G=e[29];let K;e[30]===D.strategy?K=e[31]:(K=(0,b.jsx)(h,{errors:[D.strategy]}),e[30]=D.strategy,e[31]=K);let q;e[32]!==G||e[33]!==K?(q=(0,b.jsxs)(_,{children:[U,G,K]}),e[32]=G,e[33]=K,e[34]=q):q=e[34];let J;e[35]===A?J=e[36]:(J=ie(A),e[35]=A,e[36]=J);let Y;e[37]===J?Y=e[38]:(Y=(0,b.jsx)(re,{commands:J}),e[37]=J,e[38]=Y);let X;e[39]===t?X=e[40]:(X=async()=>{await t({to:`/ec2/describe-placement-groups`})},e[39]=t,e[40]=X);let Z;e[41]!==x.isPending||e[42]!==O||e[43]!==X?(Z=(0,b.jsx)(m,{isPending:x.isPending,isSubmitting:O,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Placement Group`}),e[41]=x.isPending,e[42]=O,e[43]=X,e[44]=Z):Z=e[44];let Q;e[45]!==H||e[46]!==q||e[47]!==Y||e[48]!==Z||e[49]!==I?(Q=(0,b.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:I,children:[H,q,Y,Z]}),e[45]=H,e[46]=q,e[47]=Y,e[48]=Z,e[49]=I,e[50]=Q):Q=e[50];let $;return e[51]!==Q||e[52]!==F?($=(0,b.jsxs)(b.Fragment,{children:[N,P,F,Q]}),e[51]=Q,e[52]=F,e[53]=$):$=e[53],$}function S(e){return`'${e.replaceAll(`'`,`'"'"'`)}'`}function ie(e){let t=e.groupName??``,n=e.strategy??``;return[{label:`Create Placement Group`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-placement-group`},{type:`flag`,value:` \\ --group-name`},{type:`value`,value:` ${t?S(t):``}`},{type:`flag`,value:` \\ --strategy`},{type:`value`,value:` ${n||`spread`}`}]}]}export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-BJFldcK3.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-DlJ9bZT3.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-BJFldcK3.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-DlJ9bZT3.js index 4bb05a934..5a83b889e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-BJFldcK3.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-policy-DlJ9bZT3.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{l as ee}from"./iam-CKOkzDco.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,n as l,t as te}from"./zod-DF_n2ejy.js";import{t as ne}from"./error-banner-DeOeVBKS.js";import{t as re}from"./form-actions-BUM37An0.js";import{r as u,s as d,t as f}from"./field-c7GHI5st.js";import{t as ie}from"./json-editor-Bwbz8mfn.js";import{i as ae}from"./iam-Cgrr-Iit.js";var p=t(),m=e(),h=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Action:`*`,Resource:`*`}]},null,2);function g(){let e=(0,p.c)(65),t=n(),g=ee(),v;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={resolver:te(ae),defaultValues:{policyDocument:h}},e[0]=v):v=e[0];let{handleSubmit:y,register:b,control:x,formState:oe}=c(v),{errors:S,isSubmitting:C}=oe,w;e[1]===x?w=e[2]:(w={control:x},e[1]=x,e[2]=w);let T=s(w),E;e[3]!==g||e[4]!==t?(E=async e=>{await g.mutateAsync(e),t({to:`/iam/list-policies`})},e[3]=g,e[4]=t,e[5]=E):E=e[5];let D=E,O,k;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,m.jsx)(r,{to:`/iam/list-policies`,children:`Back to policies`}),k=(0,m.jsx)(o,{title:`Create Policy`}),e[6]=O,e[7]=k):(O=e[6],k=e[7]);let A;e[8]===g.error?A=e[9]:(A=g.error&&(0,m.jsx)(ne,{error:g.error,msg:`Failed to create policy`}),e[8]=g.error,e[9]=A);let j;e[10]!==y||e[11]!==D?(j=y(D),e[10]=y,e[11]=D,e[12]=j):j=e[12];let M;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`policyName`,children:`Policy Name`})}),e[13]=M):M=e[13];let N=!!S.policyName,P;e[14]===b?P=e[15]:(P=b(`policyName`),e[14]=b,e[15]=P);let F;e[16]!==P||e[17]!==N?(F=(0,m.jsx)(a,{"aria-invalid":N,id:`policyName`,placeholder:`my-policy...`,...P}),e[16]=P,e[17]=N,e[18]=F):F=e[18];let I;e[19]===S.policyName?I=e[20]:(I=(0,m.jsx)(u,{errors:[S.policyName]}),e[19]=S.policyName,e[20]=I);let L;e[21]!==F||e[22]!==I?(L=(0,m.jsxs)(f,{children:[M,F,I]}),e[21]=F,e[22]=I,e[23]=L):L=e[23];let R;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[24]=R):R=e[24];let z;e[25]===b?z=e[26]:(z=b(`description`),e[25]=b,e[26]=z);let B;e[27]===z?B=e[28]:(B=(0,m.jsx)(a,{id:`description`,placeholder:`A brief description of this policy...`,...z}),e[27]=z,e[28]=B);let V;e[29]===S.description?V=e[30]:(V=(0,m.jsx)(u,{errors:[S.description]}),e[29]=S.description,e[30]=V);let H;e[31]!==B||e[32]!==V?(H=(0,m.jsxs)(f,{children:[R,B,V]}),e[31]=B,e[32]=V,e[33]=H):H=e[33];let U;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`policyDocument`,children:`Policy Document (JSON)`})}),e[34]=U):U=e[34];let W;e[35]===S.policyDocument?W=e[36]:(W=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,m.jsx)(ie,{error:!!S.policyDocument,id:`policyDocument`,onBlur:n,onChange:r,ref:i,rows:15,value:a})},e[35]=S.policyDocument,e[36]=W);let G;e[37]!==x||e[38]!==W?(G=(0,m.jsx)(l,{control:x,name:`policyDocument`,render:W}),e[37]=x,e[38]=W,e[39]=G):G=e[39];let K;e[40]===S.policyDocument?K=e[41]:(K=(0,m.jsx)(u,{errors:[S.policyDocument]}),e[40]=S.policyDocument,e[41]=K);let q;e[42]!==G||e[43]!==K?(q=(0,m.jsxs)(f,{children:[U,G,K]}),e[42]=G,e[43]=K,e[44]=q):q=e[44];let J;e[45]===T?J=e[46]:(J=_(T),e[45]=T,e[46]=J);let Y;e[47]===J?Y=e[48]:(Y=(0,m.jsx)(i,{commands:J}),e[47]=J,e[48]=Y);let X;e[49]===t?X=e[50]:(X=async()=>{await t({to:`/iam/list-policies`})},e[49]=t,e[50]=X);let Z;e[51]!==g.isPending||e[52]!==C||e[53]!==X?(Z=(0,m.jsx)(re,{isPending:g.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating...`,submitLabel:`Create Policy`}),e[51]=g.isPending,e[52]=C,e[53]=X,e[54]=Z):Z=e[54];let Q;e[55]!==L||e[56]!==H||e[57]!==q||e[58]!==Y||e[59]!==Z||e[60]!==j?(Q=(0,m.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[L,H,q,Y,Z]}),e[55]=L,e[56]=H,e[57]=q,e[58]=Y,e[59]=Z,e[60]=j,e[61]=Q):Q=e[61];let $;return e[62]!==Q||e[63]!==A?($=(0,m.jsxs)(m.Fragment,{children:[O,k,A,Q]}),e[62]=Q,e[63]=A,e[64]=$):$=e[64],$}function _(e){let t=e.policyName??``,n=e.description??``,r=e.policyDocument??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-policy`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{l as ee}from"./iam-DpkrYySm.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,n as l,t as te}from"./zod-A4qtKH_p.js";import{t as ne}from"./error-banner-DeOeVBKS.js";import{t as re}from"./form-actions-DXvy9CQI.js";import{r as u,s as d,t as f}from"./field-CS-ql6du.js";import{t as ie}from"./json-editor-02czSrbA.js";import{i as ae}from"./iam-DpUWI3xh.js";var p=t(),m=e(),h=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Action:`*`,Resource:`*`}]},null,2);function g(){let e=(0,p.c)(65),t=n(),g=ee(),v;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={resolver:te(ae),defaultValues:{policyDocument:h}},e[0]=v):v=e[0];let{handleSubmit:y,register:b,control:x,formState:oe}=c(v),{errors:S,isSubmitting:C}=oe,w;e[1]===x?w=e[2]:(w={control:x},e[1]=x,e[2]=w);let T=s(w),E;e[3]!==g||e[4]!==t?(E=async e=>{await g.mutateAsync(e),t({to:`/iam/list-policies`})},e[3]=g,e[4]=t,e[5]=E):E=e[5];let D=E,O,k;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,m.jsx)(r,{to:`/iam/list-policies`,children:`Back to policies`}),k=(0,m.jsx)(o,{title:`Create Policy`}),e[6]=O,e[7]=k):(O=e[6],k=e[7]);let A;e[8]===g.error?A=e[9]:(A=g.error&&(0,m.jsx)(ne,{error:g.error,msg:`Failed to create policy`}),e[8]=g.error,e[9]=A);let j;e[10]!==y||e[11]!==D?(j=y(D),e[10]=y,e[11]=D,e[12]=j):j=e[12];let M;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`policyName`,children:`Policy Name`})}),e[13]=M):M=e[13];let N=!!S.policyName,P;e[14]===b?P=e[15]:(P=b(`policyName`),e[14]=b,e[15]=P);let F;e[16]!==P||e[17]!==N?(F=(0,m.jsx)(a,{"aria-invalid":N,id:`policyName`,placeholder:`my-policy...`,...P}),e[16]=P,e[17]=N,e[18]=F):F=e[18];let I;e[19]===S.policyName?I=e[20]:(I=(0,m.jsx)(u,{errors:[S.policyName]}),e[19]=S.policyName,e[20]=I);let L;e[21]!==F||e[22]!==I?(L=(0,m.jsxs)(f,{children:[M,F,I]}),e[21]=F,e[22]=I,e[23]=L):L=e[23];let R;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[24]=R):R=e[24];let z;e[25]===b?z=e[26]:(z=b(`description`),e[25]=b,e[26]=z);let B;e[27]===z?B=e[28]:(B=(0,m.jsx)(a,{id:`description`,placeholder:`A brief description of this policy...`,...z}),e[27]=z,e[28]=B);let V;e[29]===S.description?V=e[30]:(V=(0,m.jsx)(u,{errors:[S.description]}),e[29]=S.description,e[30]=V);let H;e[31]!==B||e[32]!==V?(H=(0,m.jsxs)(f,{children:[R,B,V]}),e[31]=B,e[32]=V,e[33]=H):H=e[33];let U;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,m.jsx)(d,{children:(0,m.jsx)(`label`,{htmlFor:`policyDocument`,children:`Policy Document (JSON)`})}),e[34]=U):U=e[34];let W;e[35]===S.policyDocument?W=e[36]:(W=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,m.jsx)(ie,{error:!!S.policyDocument,id:`policyDocument`,onBlur:n,onChange:r,ref:i,rows:15,value:a})},e[35]=S.policyDocument,e[36]=W);let G;e[37]!==x||e[38]!==W?(G=(0,m.jsx)(l,{control:x,name:`policyDocument`,render:W}),e[37]=x,e[38]=W,e[39]=G):G=e[39];let K;e[40]===S.policyDocument?K=e[41]:(K=(0,m.jsx)(u,{errors:[S.policyDocument]}),e[40]=S.policyDocument,e[41]=K);let q;e[42]!==G||e[43]!==K?(q=(0,m.jsxs)(f,{children:[U,G,K]}),e[42]=G,e[43]=K,e[44]=q):q=e[44];let J;e[45]===T?J=e[46]:(J=_(T),e[45]=T,e[46]=J);let Y;e[47]===J?Y=e[48]:(Y=(0,m.jsx)(i,{commands:J}),e[47]=J,e[48]=Y);let X;e[49]===t?X=e[50]:(X=async()=>{await t({to:`/iam/list-policies`})},e[49]=t,e[50]=X);let Z;e[51]!==g.isPending||e[52]!==C||e[53]!==X?(Z=(0,m.jsx)(re,{isPending:g.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating...`,submitLabel:`Create Policy`}),e[51]=g.isPending,e[52]=C,e[53]=X,e[54]=Z):Z=e[54];let Q;e[55]!==L||e[56]!==H||e[57]!==q||e[58]!==Y||e[59]!==Z||e[60]!==j?(Q=(0,m.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[L,H,q,Y,Z]}),e[55]=L,e[56]=H,e[57]=q,e[58]=Y,e[59]=Z,e[60]=j,e[61]=Q):Q=e[61];let $;return e[62]!==Q||e[63]!==A?($=(0,m.jsxs)(m.Fragment,{children:[O,k,A,Q]}),e[62]=Q,e[63]=A,e[64]=$):$=e[64],$}function _(e){let t=e.policyName??``,n=e.description??``,r=e.policyDocument??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-policy`},{type:`flag`,value:` \\ --policy-name`},{type:`value`,value:` ${t||``}`}];return n&&i.push({type:`flag`,value:` \\ --description`},{type:`value`,value:` "${n}"`}),i.push({type:`flag`,value:` \\ --policy-document`},{type:`value`,value:` '${r||``}'`}),[{label:`Create Policy`,parts:i}]}export{g as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-DvSx0q-L.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-BaGfB4lO.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-DvSx0q-L.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-BaGfB4lO.js index d99641f91..31ef2e362 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-DvSx0q-L.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-role-BaGfB4lO.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{u as ee}from"./iam-CKOkzDco.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,n as l,t as te}from"./zod-DF_n2ejy.js";import{t as ne}from"./error-banner-DeOeVBKS.js";import{t as re}from"./form-actions-BUM37An0.js";import{r as u,s as d,t as f}from"./field-c7GHI5st.js";import{t as ie}from"./json-editor-Bwbz8mfn.js";import{a as ae,t as p}from"./iam-Cgrr-Iit.js";var m=t(),h=e();function g(){let e=(0,m.c)(65),t=n(),g=ee(),v;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={resolver:te(ae),defaultValues:{assumeRolePolicyDocument:p}},e[0]=v):v=e[0];let{handleSubmit:y,register:b,control:x,formState:oe}=c(v),{errors:S,isSubmitting:C}=oe,w;e[1]===x?w=e[2]:(w={control:x},e[1]=x,e[2]=w);let T=s(w),E;e[3]!==g||e[4]!==t?(E=async e=>{await g.mutateAsync(e),t({to:`/iam/list-roles`})},e[3]=g,e[4]=t,e[5]=E):E=e[5];let D=E,O,k;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,h.jsx)(r,{to:`/iam/list-roles`,children:`Back to roles`}),k=(0,h.jsx)(o,{title:`Create Role`}),e[6]=O,e[7]=k):(O=e[6],k=e[7]);let A;e[8]===g.error?A=e[9]:(A=g.error&&(0,h.jsx)(ne,{error:g.error,msg:`Failed to create role`}),e[8]=g.error,e[9]=A);let j;e[10]!==y||e[11]!==D?(j=y(D),e[10]=y,e[11]=D,e[12]=j):j=e[12];let M;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`roleName`,children:`Role Name`})}),e[13]=M):M=e[13];let N=!!S.roleName,P;e[14]===b?P=e[15]:(P=b(`roleName`),e[14]=b,e[15]=P);let F;e[16]!==P||e[17]!==N?(F=(0,h.jsx)(a,{"aria-invalid":N,id:`roleName`,placeholder:`my-role...`,...P}),e[16]=P,e[17]=N,e[18]=F):F=e[18];let I;e[19]===S.roleName?I=e[20]:(I=(0,h.jsx)(u,{errors:[S.roleName]}),e[19]=S.roleName,e[20]=I);let L;e[21]!==F||e[22]!==I?(L=(0,h.jsxs)(f,{children:[M,F,I]}),e[21]=F,e[22]=I,e[23]=L):L=e[23];let R;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[24]=R):R=e[24];let z;e[25]===b?z=e[26]:(z=b(`description`),e[25]=b,e[26]=z);let B;e[27]===z?B=e[28]:(B=(0,h.jsx)(a,{id:`description`,placeholder:`A brief description of this role...`,...z}),e[27]=z,e[28]=B);let V;e[29]===S.description?V=e[30]:(V=(0,h.jsx)(u,{errors:[S.description]}),e[29]=S.description,e[30]=V);let H;e[31]!==B||e[32]!==V?(H=(0,h.jsxs)(f,{children:[R,B,V]}),e[31]=B,e[32]=V,e[33]=H):H=e[33];let U;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`assumeRolePolicyDocument`,children:`Trust Policy (JSON)`})}),e[34]=U):U=e[34];let W;e[35]===S.assumeRolePolicyDocument?W=e[36]:(W=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,h.jsx)(ie,{error:!!S.assumeRolePolicyDocument,id:`assumeRolePolicyDocument`,onBlur:n,onChange:r,ref:i,rows:15,value:a})},e[35]=S.assumeRolePolicyDocument,e[36]=W);let G;e[37]!==x||e[38]!==W?(G=(0,h.jsx)(l,{control:x,name:`assumeRolePolicyDocument`,render:W}),e[37]=x,e[38]=W,e[39]=G):G=e[39];let K;e[40]===S.assumeRolePolicyDocument?K=e[41]:(K=(0,h.jsx)(u,{errors:[S.assumeRolePolicyDocument]}),e[40]=S.assumeRolePolicyDocument,e[41]=K);let q;e[42]!==G||e[43]!==K?(q=(0,h.jsxs)(f,{children:[U,G,K]}),e[42]=G,e[43]=K,e[44]=q):q=e[44];let J;e[45]===T?J=e[46]:(J=_(T),e[45]=T,e[46]=J);let Y;e[47]===J?Y=e[48]:(Y=(0,h.jsx)(i,{commands:J}),e[47]=J,e[48]=Y);let X;e[49]===t?X=e[50]:(X=async()=>{await t({to:`/iam/list-roles`})},e[49]=t,e[50]=X);let Z;e[51]!==g.isPending||e[52]!==C||e[53]!==X?(Z=(0,h.jsx)(re,{isPending:g.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating...`,submitLabel:`Create Role`}),e[51]=g.isPending,e[52]=C,e[53]=X,e[54]=Z):Z=e[54];let Q;e[55]!==L||e[56]!==H||e[57]!==q||e[58]!==Y||e[59]!==Z||e[60]!==j?(Q=(0,h.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[L,H,q,Y,Z]}),e[55]=L,e[56]=H,e[57]=q,e[58]=Y,e[59]=Z,e[60]=j,e[61]=Q):Q=e[61];let $;return e[62]!==Q||e[63]!==A?($=(0,h.jsxs)(h.Fragment,{children:[O,k,A,Q]}),e[62]=Q,e[63]=A,e[64]=$):$=e[64],$}function _(e){let t=e.roleName??``,n=e.description??``,r=e.assumeRolePolicyDocument??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-role`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{u as ee}from"./iam-DpkrYySm.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,n as l,t as te}from"./zod-A4qtKH_p.js";import{t as ne}from"./error-banner-DeOeVBKS.js";import{t as re}from"./form-actions-DXvy9CQI.js";import{r as u,s as d,t as f}from"./field-CS-ql6du.js";import{t as ie}from"./json-editor-02czSrbA.js";import{a as ae,t as p}from"./iam-DpUWI3xh.js";var m=t(),h=e();function g(){let e=(0,m.c)(65),t=n(),g=ee(),v;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={resolver:te(ae),defaultValues:{assumeRolePolicyDocument:p}},e[0]=v):v=e[0];let{handleSubmit:y,register:b,control:x,formState:oe}=c(v),{errors:S,isSubmitting:C}=oe,w;e[1]===x?w=e[2]:(w={control:x},e[1]=x,e[2]=w);let T=s(w),E;e[3]!==g||e[4]!==t?(E=async e=>{await g.mutateAsync(e),t({to:`/iam/list-roles`})},e[3]=g,e[4]=t,e[5]=E):E=e[5];let D=E,O,k;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,h.jsx)(r,{to:`/iam/list-roles`,children:`Back to roles`}),k=(0,h.jsx)(o,{title:`Create Role`}),e[6]=O,e[7]=k):(O=e[6],k=e[7]);let A;e[8]===g.error?A=e[9]:(A=g.error&&(0,h.jsx)(ne,{error:g.error,msg:`Failed to create role`}),e[8]=g.error,e[9]=A);let j;e[10]!==y||e[11]!==D?(j=y(D),e[10]=y,e[11]=D,e[12]=j):j=e[12];let M;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`roleName`,children:`Role Name`})}),e[13]=M):M=e[13];let N=!!S.roleName,P;e[14]===b?P=e[15]:(P=b(`roleName`),e[14]=b,e[15]=P);let F;e[16]!==P||e[17]!==N?(F=(0,h.jsx)(a,{"aria-invalid":N,id:`roleName`,placeholder:`my-role...`,...P}),e[16]=P,e[17]=N,e[18]=F):F=e[18];let I;e[19]===S.roleName?I=e[20]:(I=(0,h.jsx)(u,{errors:[S.roleName]}),e[19]=S.roleName,e[20]=I);let L;e[21]!==F||e[22]!==I?(L=(0,h.jsxs)(f,{children:[M,F,I]}),e[21]=F,e[22]=I,e[23]=L):L=e[23];let R;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[24]=R):R=e[24];let z;e[25]===b?z=e[26]:(z=b(`description`),e[25]=b,e[26]=z);let B;e[27]===z?B=e[28]:(B=(0,h.jsx)(a,{id:`description`,placeholder:`A brief description of this role...`,...z}),e[27]=z,e[28]=B);let V;e[29]===S.description?V=e[30]:(V=(0,h.jsx)(u,{errors:[S.description]}),e[29]=S.description,e[30]=V);let H;e[31]!==B||e[32]!==V?(H=(0,h.jsxs)(f,{children:[R,B,V]}),e[31]=B,e[32]=V,e[33]=H):H=e[33];let U;e[34]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`assumeRolePolicyDocument`,children:`Trust Policy (JSON)`})}),e[34]=U):U=e[34];let W;e[35]===S.assumeRolePolicyDocument?W=e[36]:(W=e=>{let{field:t}=e,{onBlur:n,onChange:r,ref:i,value:a}=t;return(0,h.jsx)(ie,{error:!!S.assumeRolePolicyDocument,id:`assumeRolePolicyDocument`,onBlur:n,onChange:r,ref:i,rows:15,value:a})},e[35]=S.assumeRolePolicyDocument,e[36]=W);let G;e[37]!==x||e[38]!==W?(G=(0,h.jsx)(l,{control:x,name:`assumeRolePolicyDocument`,render:W}),e[37]=x,e[38]=W,e[39]=G):G=e[39];let K;e[40]===S.assumeRolePolicyDocument?K=e[41]:(K=(0,h.jsx)(u,{errors:[S.assumeRolePolicyDocument]}),e[40]=S.assumeRolePolicyDocument,e[41]=K);let q;e[42]!==G||e[43]!==K?(q=(0,h.jsxs)(f,{children:[U,G,K]}),e[42]=G,e[43]=K,e[44]=q):q=e[44];let J;e[45]===T?J=e[46]:(J=_(T),e[45]=T,e[46]=J);let Y;e[47]===J?Y=e[48]:(Y=(0,h.jsx)(i,{commands:J}),e[47]=J,e[48]=Y);let X;e[49]===t?X=e[50]:(X=async()=>{await t({to:`/iam/list-roles`})},e[49]=t,e[50]=X);let Z;e[51]!==g.isPending||e[52]!==C||e[53]!==X?(Z=(0,h.jsx)(re,{isPending:g.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating...`,submitLabel:`Create Role`}),e[51]=g.isPending,e[52]=C,e[53]=X,e[54]=Z):Z=e[54];let Q;e[55]!==L||e[56]!==H||e[57]!==q||e[58]!==Y||e[59]!==Z||e[60]!==j?(Q=(0,h.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[L,H,q,Y,Z]}),e[55]=L,e[56]=H,e[57]=q,e[58]=Y,e[59]=Z,e[60]=j,e[61]=Q):Q=e[61];let $;return e[62]!==Q||e[63]!==A?($=(0,h.jsxs)(h.Fragment,{children:[O,k,A,Q]}),e[62]=Q,e[63]=A,e[64]=$):$=e[64],$}function _(e){let t=e.roleName??``,n=e.description??``,r=e.assumeRolePolicyDocument??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-role`},{type:`flag`,value:` \\ --role-name`},{type:`value`,value:` ${t||``}`}];return n&&i.push({type:`flag`,value:` \\ --description`},{type:`value`,value:` "${n}"`}),i.push({type:`flag`,value:` \\ --assume-role-policy-document`},{type:`value`,value:` '${r||``}'`}),[{label:`Create Role`,parts:i}]}export{g as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-q3_xIq0T.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-BjZ3QG0v.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-q3_xIq0T.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-BjZ3QG0v.js index fea5e4976..673fd65a5 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-q3_xIq0T.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-route-table-BjZ3QG0v.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./back-link-CjKy1JE5.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-B01jpDaX.js";import{t as d}from"./input-6kdUb_DH.js";import{M as f}from"./ec2-CWEplLq4.js";import{b as p}from"./ec2-Ctto2xjU.js";import{t as m}from"./page-heading-vksh_67w.js";import{i as h,n as g,t as _}from"./zod-DF_n2ejy.js";import{t as v}from"./error-banner-DeOeVBKS.js";import{t as y}from"./form-actions-BUM37An0.js";import{r as b,s as x,t as S}from"./field-c7GHI5st.js";import{f as C}from"./ec2-DhWukC79.js";var w=t(),T=e();function E(){let e=(0,w.c)(44),t=r(),{data:i}=n(f),s=p(),E;e[0]===i.Vpcs?E=e[1]:(E=i.Vpcs??[],e[0]=i.Vpcs,e[1]=E);let O=E,k;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(k={resolver:_(C),defaultValues:{vpcId:``,name:``}},e[2]=k):k=e[2];let{control:A,handleSubmit:j,register:M,formState:N}=h(k),{errors:P,isSubmitting:F}=N,I;e[3]!==s||e[4]!==t?(I=async e=>{let n=(await s.mutateAsync({vpcId:e.vpcId,name:e.name?.trim()?e.name.trim():void 0})).RouteTable?.RouteTableId;t(n?{to:`/ec2/describe-route-tables/$id`,params:{id:n}}:{to:`/ec2/describe-route-tables`})},e[3]=s,e[4]=t,e[5]=I):I=e[5];let L=I,R,z;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,T.jsx)(a,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),z=(0,T.jsx)(m,{title:`Create Route Table`}),e[6]=R,e[7]=z):(R=e[6],z=e[7]);let B;e[8]===s.error?B=e[9]:(B=s.error&&(0,T.jsx)(v,{error:s.error,msg:`Failed to create Route Table`}),e[8]=s.error,e[9]=B);let V;e[10]!==j||e[11]!==L?(V=j(L),e[10]=j,e[11]=L,e[12]=V):V=e[12];let H;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,T.jsx)(x,{children:(0,T.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=H):H=e[13];let U;e[14]===M?U=e[15]:(U=M(`name`),e[14]=M,e[15]=U);let W;e[16]===U?W=e[17]:(W=(0,T.jsxs)(S,{children:[H,(0,T.jsx)(d,{id:`name`,placeholder:`my-route-table`,...U})]}),e[16]=U,e[17]=W);let G;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,T.jsx)(x,{children:(0,T.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[18]=G):G=e[18];let K;e[19]!==P.vpcId||e[20]!==O?(K=e=>{let{field:t}=e;return(0,T.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,T.jsx)(l,{"aria-invalid":!!P.vpcId,className:`w-full`,id:`vpcId`,children:(0,T.jsx)(o,{placeholder:`Select a VPC`})}),(0,T.jsx)(c,{children:O.map(D)})]})},e[19]=P.vpcId,e[20]=O,e[21]=K):K=e[21];let q;e[22]!==A||e[23]!==K?(q=(0,T.jsx)(g,{control:A,name:`vpcId`,render:K}),e[22]=A,e[23]=K,e[24]=q):q=e[24];let J;e[25]===P.vpcId?J=e[26]:(J=(0,T.jsx)(b,{errors:[P.vpcId]}),e[25]=P.vpcId,e[26]=J);let Y;e[27]!==q||e[28]!==J?(Y=(0,T.jsxs)(S,{children:[G,q,J]}),e[27]=q,e[28]=J,e[29]=Y):Y=e[29];let X;e[30]===t?X=e[31]:(X=async()=>{await t({to:`/ec2/describe-route-tables`})},e[30]=t,e[31]=X);let Z;e[32]!==s.isPending||e[33]!==F||e[34]!==X?(Z=(0,T.jsx)(y,{isPending:s.isPending,isSubmitting:F,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Route Table`}),e[32]=s.isPending,e[33]=F,e[34]=X,e[35]=Z):Z=e[35];let Q;e[36]!==W||e[37]!==Y||e[38]!==Z||e[39]!==V?(Q=(0,T.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:V,children:[W,Y,Z]}),e[36]=W,e[37]=Y,e[38]=Z,e[39]=V,e[40]=Q):Q=e[40];let $;return e[41]!==Q||e[42]!==B?($=(0,T.jsxs)(T.Fragment,{children:[R,z,B,Q]}),e[41]=Q,e[42]=B,e[43]=$):$=e[43],$}function D(e){let t=i(e.Tags);return(0,T.jsx)(s,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}export{E as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./back-link-wsXUoJ12.js";import{c as o,i as s,n as c,s as l,t as u}from"./select-Cn66OoPn.js";import{t as d}from"./input-D3aUBtS6.js";import{M as f}from"./ec2-DYgBhYCJ.js";import{b as p}from"./ec2-Csn1kwZ8.js";import{t as m}from"./page-heading-vksh_67w.js";import{i as h,n as g,t as _}from"./zod-A4qtKH_p.js";import{t as v}from"./error-banner-DeOeVBKS.js";import{t as y}from"./form-actions-DXvy9CQI.js";import{r as b,s as x,t as S}from"./field-CS-ql6du.js";import{f as C}from"./ec2-DqNqPeiA.js";var w=t(),T=e();function E(){let e=(0,w.c)(44),t=r(),{data:i}=n(f),s=p(),E;e[0]===i.Vpcs?E=e[1]:(E=i.Vpcs??[],e[0]=i.Vpcs,e[1]=E);let O=E,k;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(k={resolver:_(C),defaultValues:{vpcId:``,name:``}},e[2]=k):k=e[2];let{control:A,handleSubmit:j,register:M,formState:N}=h(k),{errors:P,isSubmitting:F}=N,I;e[3]!==s||e[4]!==t?(I=async e=>{let n=(await s.mutateAsync({vpcId:e.vpcId,name:e.name?.trim()?e.name.trim():void 0})).RouteTable?.RouteTableId;t(n?{to:`/ec2/describe-route-tables/$id`,params:{id:n}}:{to:`/ec2/describe-route-tables`})},e[3]=s,e[4]=t,e[5]=I):I=e[5];let L=I,R,z;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,T.jsx)(a,{to:`/ec2/describe-route-tables`,children:`Back to Route Tables`}),z=(0,T.jsx)(m,{title:`Create Route Table`}),e[6]=R,e[7]=z):(R=e[6],z=e[7]);let B;e[8]===s.error?B=e[9]:(B=s.error&&(0,T.jsx)(v,{error:s.error,msg:`Failed to create Route Table`}),e[8]=s.error,e[9]=B);let V;e[10]!==j||e[11]!==L?(V=j(L),e[10]=j,e[11]=L,e[12]=V):V=e[12];let H;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,T.jsx)(x,{children:(0,T.jsx)(`label`,{htmlFor:`name`,children:`Name (optional)`})}),e[13]=H):H=e[13];let U;e[14]===M?U=e[15]:(U=M(`name`),e[14]=M,e[15]=U);let W;e[16]===U?W=e[17]:(W=(0,T.jsxs)(S,{children:[H,(0,T.jsx)(d,{id:`name`,placeholder:`my-route-table`,...U})]}),e[16]=U,e[17]=W);let G;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,T.jsx)(x,{children:(0,T.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[18]=G):G=e[18];let K;e[19]!==P.vpcId||e[20]!==O?(K=e=>{let{field:t}=e;return(0,T.jsxs)(u,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,T.jsx)(l,{"aria-invalid":!!P.vpcId,className:`w-full`,id:`vpcId`,children:(0,T.jsx)(o,{placeholder:`Select a VPC`})}),(0,T.jsx)(c,{children:O.map(D)})]})},e[19]=P.vpcId,e[20]=O,e[21]=K):K=e[21];let q;e[22]!==A||e[23]!==K?(q=(0,T.jsx)(g,{control:A,name:`vpcId`,render:K}),e[22]=A,e[23]=K,e[24]=q):q=e[24];let J;e[25]===P.vpcId?J=e[26]:(J=(0,T.jsx)(b,{errors:[P.vpcId]}),e[25]=P.vpcId,e[26]=J);let Y;e[27]!==q||e[28]!==J?(Y=(0,T.jsxs)(S,{children:[G,q,J]}),e[27]=q,e[28]=J,e[29]=Y):Y=e[29];let X;e[30]===t?X=e[31]:(X=async()=>{await t({to:`/ec2/describe-route-tables`})},e[30]=t,e[31]=X);let Z;e[32]!==s.isPending||e[33]!==F||e[34]!==X?(Z=(0,T.jsx)(y,{isPending:s.isPending,isSubmitting:F,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Route Table`}),e[32]=s.isPending,e[33]=F,e[34]=X,e[35]=Z):Z=e[35];let Q;e[36]!==W||e[37]!==Y||e[38]!==Z||e[39]!==V?(Q=(0,T.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:V,children:[W,Y,Z]}),e[36]=W,e[37]=Y,e[38]=Z,e[39]=V,e[40]=Q):Q=e[40];let $;return e[41]!==Q||e[42]!==B?($=(0,T.jsxs)(T.Fragment,{children:[R,z,B,Q]}),e[41]=Q,e[42]=B,e[43]=$):$=e[43],$}function D(e){let t=i(e.Tags);return(0,T.jsx)(s,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}export{E as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-BD7bwg9p.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-B0XC1OvX.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-BD7bwg9p.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-B0XC1OvX.js index 3f18b670c..603f2ba9a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-BD7bwg9p.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-security-group-B0XC1OvX.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as ee}from"./back-link-CjKy1JE5.js";import{c as a,i as o,n as te,s as ne,t as re}from"./select-B01jpDaX.js";import{t as ie}from"./cli-command-panel-CLiFy1rG.js";import{t as s}from"./input-6kdUb_DH.js";import{M as ae}from"./ec2-CWEplLq4.js";import{x as oe}from"./ec2-Ctto2xjU.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as se,i as ce,n as le,t as ue}from"./zod-DF_n2ejy.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-BUM37An0.js";import{r as l,s as u,t as d}from"./field-c7GHI5st.js";import{p as pe}from"./ec2-DhWukC79.js";var me=t(),f=e();function p(){let e=(0,me.c)(71),t=r(),{data:i}=n(ae),o=oe(),p;e[0]===i.Vpcs?p=e[1]:(p=i.Vpcs??[],e[0]=i.Vpcs,e[1]=p);let m=p,h;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(h=ue(pe),e[2]=h):h=e[2];let g=m[0]?.VpcId??``,_;e[3]===g?_=e[4]:(_={resolver:h,defaultValues:{groupName:``,description:``,vpcId:g}},e[3]=g,e[4]=_);let{control:v,handleSubmit:y,register:b,formState:_e}=ce(_),{errors:x,isSubmitting:S}=_e,C;e[5]===v?C=e[6]:(C={control:v},e[5]=v,e[6]=C);let w=se(C),T;e[7]!==o||e[8]!==t?(T=async e=>{let n=(await o.mutateAsync(e)).GroupId;t(n?{to:`/ec2/describe-security-groups/$id`,params:{id:n}}:{to:`/ec2/describe-security-groups`})},e[7]=o,e[8]=t,e[9]=T):T=e[9];let E=T,D,O;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,f.jsx)(ee,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),O=(0,f.jsx)(c,{title:`Create Security Group`}),e[10]=D,e[11]=O):(D=e[10],O=e[11]);let k;e[12]===o.error?k=e[13]:(k=o.error&&(0,f.jsx)(de,{error:o.error,msg:`Failed to create security group`}),e[12]=o.error,e[13]=k);let A;e[14]!==y||e[15]!==E?(A=y(E),e[14]=y,e[15]=E,e[16]=A):A=e[16];let j;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[17]=j):j=e[17];let M=!!x.groupName,N;e[18]===b?N=e[19]:(N=b(`groupName`),e[18]=b,e[19]=N);let P;e[20]!==M||e[21]!==N?(P=(0,f.jsx)(s,{"aria-invalid":M,id:`groupName`,placeholder:`my-security-group`,...N}),e[20]=M,e[21]=N,e[22]=P):P=e[22];let F;e[23]===x.groupName?F=e[24]:(F=(0,f.jsx)(l,{errors:[x.groupName]}),e[23]=x.groupName,e[24]=F);let I;e[25]!==P||e[26]!==F?(I=(0,f.jsxs)(d,{children:[j,P,F]}),e[25]=P,e[26]=F,e[27]=I):I=e[27];let L;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`description`,children:`Description`})}),e[28]=L):L=e[28];let R=!!x.description,z;e[29]===b?z=e[30]:(z=b(`description`),e[29]=b,e[30]=z);let B;e[31]!==R||e[32]!==z?(B=(0,f.jsx)(s,{"aria-invalid":R,id:`description`,placeholder:`My security group description`,...z}),e[31]=R,e[32]=z,e[33]=B):B=e[33];let V;e[34]===x.description?V=e[35]:(V=(0,f.jsx)(l,{errors:[x.description]}),e[34]=x.description,e[35]=V);let H;e[36]!==B||e[37]!==V?(H=(0,f.jsxs)(d,{children:[L,B,V]}),e[36]=B,e[37]=V,e[38]=H):H=e[38];let U;e[39]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[39]=U):U=e[39];let W;e[40]!==x.vpcId||e[41]!==m?(W=e=>{let{field:t}=e;return(0,f.jsxs)(re,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,f.jsx)(ne,{"aria-invalid":!!x.vpcId,className:`w-full`,id:`vpcId`,children:(0,f.jsx)(a,{})}),(0,f.jsx)(te,{children:m.map(he)})]})},e[40]=x.vpcId,e[41]=m,e[42]=W):W=e[42];let G;e[43]!==v||e[44]!==W?(G=(0,f.jsx)(le,{control:v,name:`vpcId`,render:W}),e[43]=v,e[44]=W,e[45]=G):G=e[45];let K;e[46]===x.vpcId?K=e[47]:(K=(0,f.jsx)(l,{errors:[x.vpcId]}),e[46]=x.vpcId,e[47]=K);let q;e[48]!==G||e[49]!==K?(q=(0,f.jsxs)(d,{children:[U,G,K]}),e[48]=G,e[49]=K,e[50]=q):q=e[50];let J;e[51]===w?J=e[52]:(J=ge(w),e[51]=w,e[52]=J);let Y;e[53]===J?Y=e[54]:(Y=(0,f.jsx)(ie,{commands:J}),e[53]=J,e[54]=Y);let X;e[55]===t?X=e[56]:(X=async()=>{await t({to:`/ec2/describe-security-groups`})},e[55]=t,e[56]=X);let Z;e[57]!==o.isPending||e[58]!==S||e[59]!==X?(Z=(0,f.jsx)(fe,{isPending:o.isPending,isSubmitting:S,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Security Group`}),e[57]=o.isPending,e[58]=S,e[59]=X,e[60]=Z):Z=e[60];let Q;e[61]!==A||e[62]!==I||e[63]!==H||e[64]!==q||e[65]!==Y||e[66]!==Z?(Q=(0,f.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:A,children:[I,H,q,Y,Z]}),e[61]=A,e[62]=I,e[63]=H,e[64]=q,e[65]=Y,e[66]=Z,e[67]=Q):Q=e[67];let $;return e[68]!==Q||e[69]!==k?($=(0,f.jsxs)(f.Fragment,{children:[D,O,k,Q]}),e[68]=Q,e[69]=k,e[70]=$):$=e[70],$}function he(e){let t=i(e.Tags);return(0,f.jsx)(o,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function ge(e){let t=e.groupName??``,n=e.description??``,r=e.vpcId??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-security-group`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as ee}from"./back-link-wsXUoJ12.js";import{c as a,i as o,n as te,s as ne,t as re}from"./select-Cn66OoPn.js";import{t as ie}from"./cli-command-panel-DavMY-tN.js";import{t as s}from"./input-D3aUBtS6.js";import{M as ae}from"./ec2-DYgBhYCJ.js";import{x as oe}from"./ec2-Csn1kwZ8.js";import{t as c}from"./page-heading-vksh_67w.js";import{a as se,i as ce,n as le,t as ue}from"./zod-A4qtKH_p.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-DXvy9CQI.js";import{r as l,s as u,t as d}from"./field-CS-ql6du.js";import{p as pe}from"./ec2-DqNqPeiA.js";var me=t(),f=e();function p(){let e=(0,me.c)(71),t=r(),{data:i}=n(ae),o=oe(),p;e[0]===i.Vpcs?p=e[1]:(p=i.Vpcs??[],e[0]=i.Vpcs,e[1]=p);let m=p,h;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(h=ue(pe),e[2]=h):h=e[2];let g=m[0]?.VpcId??``,_;e[3]===g?_=e[4]:(_={resolver:h,defaultValues:{groupName:``,description:``,vpcId:g}},e[3]=g,e[4]=_);let{control:v,handleSubmit:y,register:b,formState:_e}=ce(_),{errors:x,isSubmitting:S}=_e,C;e[5]===v?C=e[6]:(C={control:v},e[5]=v,e[6]=C);let w=se(C),T;e[7]!==o||e[8]!==t?(T=async e=>{let n=(await o.mutateAsync(e)).GroupId;t(n?{to:`/ec2/describe-security-groups/$id`,params:{id:n}}:{to:`/ec2/describe-security-groups`})},e[7]=o,e[8]=t,e[9]=T):T=e[9];let E=T,D,O;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,f.jsx)(ee,{to:`/ec2/describe-security-groups`,children:`Back to Security Groups`}),O=(0,f.jsx)(c,{title:`Create Security Group`}),e[10]=D,e[11]=O):(D=e[10],O=e[11]);let k;e[12]===o.error?k=e[13]:(k=o.error&&(0,f.jsx)(de,{error:o.error,msg:`Failed to create security group`}),e[12]=o.error,e[13]=k);let A;e[14]!==y||e[15]!==E?(A=y(E),e[14]=y,e[15]=E,e[16]=A):A=e[16];let j;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`groupName`,children:`Group Name`})}),e[17]=j):j=e[17];let M=!!x.groupName,N;e[18]===b?N=e[19]:(N=b(`groupName`),e[18]=b,e[19]=N);let P;e[20]!==M||e[21]!==N?(P=(0,f.jsx)(s,{"aria-invalid":M,id:`groupName`,placeholder:`my-security-group`,...N}),e[20]=M,e[21]=N,e[22]=P):P=e[22];let F;e[23]===x.groupName?F=e[24]:(F=(0,f.jsx)(l,{errors:[x.groupName]}),e[23]=x.groupName,e[24]=F);let I;e[25]!==P||e[26]!==F?(I=(0,f.jsxs)(d,{children:[j,P,F]}),e[25]=P,e[26]=F,e[27]=I):I=e[27];let L;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`description`,children:`Description`})}),e[28]=L):L=e[28];let R=!!x.description,z;e[29]===b?z=e[30]:(z=b(`description`),e[29]=b,e[30]=z);let B;e[31]!==R||e[32]!==z?(B=(0,f.jsx)(s,{"aria-invalid":R,id:`description`,placeholder:`My security group description`,...z}),e[31]=R,e[32]=z,e[33]=B):B=e[33];let V;e[34]===x.description?V=e[35]:(V=(0,f.jsx)(l,{errors:[x.description]}),e[34]=x.description,e[35]=V);let H;e[36]!==B||e[37]!==V?(H=(0,f.jsxs)(d,{children:[L,B,V]}),e[36]=B,e[37]=V,e[38]=H):H=e[38];let U;e[39]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[39]=U):U=e[39];let W;e[40]!==x.vpcId||e[41]!==m?(W=e=>{let{field:t}=e;return(0,f.jsxs)(re,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,f.jsx)(ne,{"aria-invalid":!!x.vpcId,className:`w-full`,id:`vpcId`,children:(0,f.jsx)(a,{})}),(0,f.jsx)(te,{children:m.map(he)})]})},e[40]=x.vpcId,e[41]=m,e[42]=W):W=e[42];let G;e[43]!==v||e[44]!==W?(G=(0,f.jsx)(le,{control:v,name:`vpcId`,render:W}),e[43]=v,e[44]=W,e[45]=G):G=e[45];let K;e[46]===x.vpcId?K=e[47]:(K=(0,f.jsx)(l,{errors:[x.vpcId]}),e[46]=x.vpcId,e[47]=K);let q;e[48]!==G||e[49]!==K?(q=(0,f.jsxs)(d,{children:[U,G,K]}),e[48]=G,e[49]=K,e[50]=q):q=e[50];let J;e[51]===w?J=e[52]:(J=ge(w),e[51]=w,e[52]=J);let Y;e[53]===J?Y=e[54]:(Y=(0,f.jsx)(ie,{commands:J}),e[53]=J,e[54]=Y);let X;e[55]===t?X=e[56]:(X=async()=>{await t({to:`/ec2/describe-security-groups`})},e[55]=t,e[56]=X);let Z;e[57]!==o.isPending||e[58]!==S||e[59]!==X?(Z=(0,f.jsx)(fe,{isPending:o.isPending,isSubmitting:S,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Security Group`}),e[57]=o.isPending,e[58]=S,e[59]=X,e[60]=Z):Z=e[60];let Q;e[61]!==A||e[62]!==I||e[63]!==H||e[64]!==q||e[65]!==Y||e[66]!==Z?(Q=(0,f.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:A,children:[I,H,q,Y,Z]}),e[61]=A,e[62]=I,e[63]=H,e[64]=q,e[65]=Y,e[66]=Z,e[67]=Q):Q=e[67];let $;return e[68]!==Q||e[69]!==k?($=(0,f.jsxs)(f.Fragment,{children:[D,O,k,Q]}),e[68]=Q,e[69]=k,e[70]=$):$=e[70],$}function he(e){let t=i(e.Tags);return(0,f.jsx)(o,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function ge(e){let t=e.groupName??``,n=e.description??``,r=e.vpcId??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-security-group`},{type:`flag`,value:` \\ --group-name`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` \\ --description`},{type:`value`,value:` "${n||``}"`}];return r&&i.push({type:`flag`,value:` \\ --vpc-id`},{type:`value`,value:` ${r}`}),[{label:`Create Security Group`,parts:i}]}export{p as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-BdeYCVj9.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-BdeYCVj9.js new file mode 100644 index 000000000..9f76c575b --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-BdeYCVj9.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/create-service-DAo04S12.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ecs-BmKTMTV2.js","assets/ecs-Bz1Yh-WL.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-C_pG4AOx.js","assets/elbv2-CmXUhudd.js","assets/commandBuilder-BIU1eEwl.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ecs-BRK1HDnD.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{_ as n,h as r,ut as i}from"./cluster-config-DkOiY8HH.js";import{O as a,w as o}from"./ec2-DYgBhYCJ.js";import{o as s}from"./ecs-BmKTMTV2.js";import{u as c}from"./elbv2-CmXUhudd.js";var l=()=>i(()=>import(`./create-service-DAo04S12.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),u=r({cluster:n().catch(``)}),d=e(`/_auth/ecs/(clusters)/create-service`)({validateSearch:u,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`})])},head:()=>({meta:[{title:`Create Service | ECS | Mulga`}]}),component:t(l,`component`)});export{d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-B5WMizMG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DAo04S12.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-B5WMizMG.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DAo04S12.js index 13d0832a1..f4b933187 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-B5WMizMG.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DAo04S12.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-BH3pQKLF.js";import{t as ne}from"./back-link-CjKy1JE5.js";import{c as re,i as ie,n as ae,s as oe,t as se}from"./select-B01jpDaX.js";import{t as r}from"./input-6kdUb_DH.js";import{O as ce,w as le}from"./ec2-CWEplLq4.js";import{a as ue,o as de}from"./ecs-gqt7DXoF.js";import{n as fe}from"./ecs-8RzYyUs4.js";import{u as pe}from"./elbv2-DSjTzB2q.js";import{t as i}from"./create-service-DExIeTQv.js";import{t as me}from"./page-heading-vksh_67w.js";import{a as he,i as ge,n as _e,t as ve}from"./zod-DF_n2ejy.js";import{t as ye}from"./error-banner-DeOeVBKS.js";import{t as be}from"./form-actions-BUM37An0.js";import{r as xe,s as a,t as o}from"./field-c7GHI5st.js";import{n as Se}from"./ecs-KDGpZ8Lc.js";var Ce=t(),s=e();function we(e){return e.split(`/`).at(-1)??e}function c(e){let t=(0,Ce.c)(125),{cluster:i}=e,we=te(),c=fe(),{data:De}=ee(de),{data:Oe}=ee(ce),{data:ke}=ee(le),{data:Ae}=ee(pe),je;t[0]===Oe.Subnets?je=t[1]:(je=Oe.Subnets??[],t[0]=Oe.Subnets,t[1]=je);let Me=je,Ne;t[2]===ke.SecurityGroups?Ne=t[3]:(Ne=ke.SecurityGroups??[],t[2]=ke.SecurityGroups,t[3]=Ne);let Pe=Ne,l;t[4]===Ae.TargetGroups?l=t[5]:(l=Ae.TargetGroups??[],t[4]=Ae.TargetGroups,t[5]=l);let Fe=l,u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=ve(Se),t[6]=u):u=t[6];let d,f;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=[],f=[],t[7]=d,t[8]=f):(d=t[7],f=t[8]);let p;t[9]===i?p=t[10]:(p={resolver:u,defaultValues:{cluster:i,serviceName:``,taskDefinition:``,desiredCount:1,subnets:d,securityGroups:f,assignPublicIp:!1,targetGroupArn:``,loadBalancerContainerName:``,loadBalancerContainerPort:``}},t[9]=i,t[10]=p);let{control:m,handleSubmit:Ie,register:h,setValue:Le,getValues:Re,formState:ze}=ge(p),{errors:g,isSubmitting:Be}=ze,_;t[11]===m?_=t[12]:(_={control:m,name:`taskDefinition`},t[11]=m,t[12]=_);let Ve=he(_),v;t[13]===Ve?v=t[14]:(v=ue(Ve),t[13]=Ve,t[14]=v);let{data:He}=n(v),y=He?.networkMode===`awsvpc`,b;t[15]===m?b=t[16]:(b={control:m,name:`subnets`},t[15]=m,t[16]=b);let x=he(b),S;t[17]===m?S=t[18]:(S={control:m,name:`securityGroups`},t[17]=m,t[18]=S);let Ue=he(S),C;t[19]===x?C=t[20]:(C=new Set(x),t[19]=x,t[20]=C);let We=C,Ge;t[21]===Ue?Ge=t[22]:(Ge=new Set(Ue),t[21]=Ue,t[22]=Ge);let Ke=Ge,qe;t[23]!==Re||t[24]!==Le?(qe=(e,t)=>{let n=Re(e);Le(e,n.includes(t)?n.filter(e=>e!==t):[...n,t],{shouldValidate:!0})},t[23]=Re,t[24]=Le,t[25]=qe):qe=t[25];let Je=qe,Ye;t[26]!==i||t[27]!==we?(Ye=function(){we({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:i}})},t[26]=i,t[27]=we,t[28]=Ye):Ye=t[28];let w=Ye,Xe;t[29]!==y||t[30]!==c||t[31]!==w?(Xe=async function(e){await c.mutateAsync({...e,awsvpc:y}),w()},t[29]=y,t[30]=c,t[31]=w,t[32]=Xe):Xe=t[32];let Ze=Xe,Qe=y&&x.length===0,T;t[33]===i?T=t[34]:(T={clusterName:i},t[33]=i,t[34]=T);let E;t[35]!==i||t[36]!==T?(E=(0,s.jsx)(ne,{params:T,to:`/ecs/list-clusters/$clusterName`,children:i}),t[35]=i,t[36]=T,t[37]=E):E=t[37];let $e=`Cluster: ${i}`,D;t[38]===$e?D=t[39]:(D=(0,s.jsx)(me,{subtitle:$e,title:`Create Service`}),t[38]=$e,t[39]=D);let O;t[40]!==c.error||t[41]!==c.isError?(O=c.isError&&(0,s.jsx)(ye,{error:c.error instanceof Error?c.error:void 0,msg:`Failed to create service.`}),t[40]=c.error,t[41]=c.isError,t[42]=O):O=t[42];let k;t[43]!==Ie||t[44]!==Ze?(k=Ie(Ze),t[43]=Ie,t[44]=Ze,t[45]=k):k=t[45];let et;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(et=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`serviceName`,children:`Service name`})}),t[46]=et):et=t[46];let A;t[47]===h?A=t[48]:(A=h(`serviceName`),t[47]=h,t[48]=A);let j;t[49]===A?j=t[50]:(j=(0,s.jsx)(r,{id:`serviceName`,placeholder:`api`,...A}),t[49]=A,t[50]=j);let M;t[51]===g.serviceName?M=t[52]:(M=(0,s.jsx)(xe,{errors:[g.serviceName]}),t[51]=g.serviceName,t[52]=M);let N;t[53]!==j||t[54]!==M?(N=(0,s.jsxs)(o,{children:[et,j,M]}),t[53]=j,t[54]=M,t[55]=N):N=t[55];let tt;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(tt=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`taskDefinition`,children:`Task definition`})}),t[56]=tt):tt=t[56];let P;t[57]===De?P=t[58]:(P=e=>{let{field:t}=e;return(0,s.jsxs)(se,{onValueChange:t.onChange,value:t.value,children:[(0,s.jsx)(oe,{className:`w-full`,id:`taskDefinition`,children:(0,s.jsx)(re,{placeholder:`Select a task definition`})}),(0,s.jsx)(ae,{children:De.map(Ee)})]})},t[57]=De,t[58]=P);let F;t[59]!==m||t[60]!==P?(F=(0,s.jsx)(_e,{control:m,name:`taskDefinition`,render:P}),t[59]=m,t[60]=P,t[61]=F):F=t[61];let I;t[62]===g.taskDefinition?I=t[63]:(I=(0,s.jsx)(xe,{errors:[g.taskDefinition]}),t[62]=g.taskDefinition,t[63]=I);let L;t[64]!==F||t[65]!==I?(L=(0,s.jsxs)(o,{children:[tt,F,I]}),t[64]=F,t[65]=I,t[66]=L):L=t[66];let nt;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(nt=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`desiredCount`,children:`Desired count`})}),t[67]=nt):nt=t[67];let R;t[68]===h?R=t[69]:(R=h(`desiredCount`,{valueAsNumber:!0}),t[68]=h,t[69]=R);let z;t[70]===R?z=t[71]:(z=(0,s.jsx)(r,{id:`desiredCount`,type:`number`,...R}),t[70]=R,t[71]=z);let B;t[72]===g.desiredCount?B=t[73]:(B=(0,s.jsx)(xe,{errors:[g.desiredCount]}),t[72]=g.desiredCount,t[73]=B);let V;t[74]!==z||t[75]!==B?(V=(0,s.jsxs)(o,{children:[nt,z,B]}),t[74]=z,t[75]=B,t[76]=V):V=t[76];let H;t[77]!==y||t[78]!==h||t[79]!==Pe||t[80]!==Ke||t[81]!==We||t[82]!==Me||t[83]!==Je?(H=y&&(0,s.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[(0,s.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`This task definition uses awsvpc networking. Select at least one subnet.`}),(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`span`,{className:`text-sm font-medium`,children:`Subnets`}),(0,s.jsx)(`div`,{className:`mt-2 space-y-1`,children:Me.map(e=>(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,s.jsx)(`input`,{checked:We.has(e.SubnetId??``),onChange:()=>{Je(`subnets`,e.SubnetId??``)},type:`checkbox`}),(0,s.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` (`,e.CidrBlock,`)`]})]},e.SubnetId))})]}),(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`span`,{className:`text-sm font-medium`,children:`Security groups`}),(0,s.jsx)(`div`,{className:`mt-2 space-y-1`,children:Pe.map(e=>(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,s.jsx)(`input`,{checked:Ke.has(e.GroupId??``),onChange:()=>{Je(`securityGroups`,e.GroupId??``)},type:`checkbox`}),(0,s.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,s.jsx)(`input`,{type:`checkbox`,...h(`assignPublicIp`)}),(0,s.jsx)(`span`,{children:`Assign public IP`})]})]}),t[77]=y,t[78]=h,t[79]=Pe,t[80]=Ke,t[81]=We,t[82]=Me,t[83]=Je,t[84]=H):H=t[84];let rt;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(rt=(0,s.jsx)(`h2`,{className:`font-semibold`,children:`Load balancer (optional)`}),t[85]=rt):rt=t[85];let it;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(it=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`targetGroupArn`,children:`Target group`})}),t[86]=it):it=t[86];let U;t[87]===Fe?U=t[88]:(U=e=>{let{field:t}=e;return(0,s.jsxs)(se,{onValueChange:e=>{t.onChange(e===`none`?``:e)},value:t.value===``?`none`:t.value,children:[(0,s.jsx)(oe,{className:`w-full`,id:`targetGroupArn`,children:(0,s.jsx)(re,{})}),(0,s.jsxs)(ae,{children:[(0,s.jsx)(ie,{value:`none`,children:`none`}),Fe.map(Te)]})]})},t[87]=Fe,t[88]=U);let W;t[89]!==m||t[90]!==U?(W=(0,s.jsxs)(o,{children:[it,(0,s.jsx)(_e,{control:m,name:`targetGroupArn`,render:U})]}),t[89]=m,t[90]=U,t[91]=W):W=t[91];let at;t[92]===Symbol.for(`react.memo_cache_sentinel`)?(at=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`lbContainerName`,children:`Container name`})}),t[92]=at):at=t[92];let G;t[93]===h?G=t[94]:(G=h(`loadBalancerContainerName`),t[93]=h,t[94]=G);let K;t[95]===G?K=t[96]:(K=(0,s.jsxs)(o,{children:[at,(0,s.jsx)(r,{id:`lbContainerName`,placeholder:`app`,...G})]}),t[95]=G,t[96]=K);let ot;t[97]===Symbol.for(`react.memo_cache_sentinel`)?(ot=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`lbContainerPort`,children:`Container port`})}),t[97]=ot):ot=t[97];let q;t[98]===h?q=t[99]:(q=h(`loadBalancerContainerPort`),t[98]=h,t[99]=q);let J;t[100]===q?J=t[101]:(J=(0,s.jsxs)(o,{children:[ot,(0,s.jsx)(r,{id:`lbContainerPort`,placeholder:`80`,type:`number`,...q})]}),t[100]=q,t[101]=J);let Y;t[102]!==K||t[103]!==J?(Y=(0,s.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[K,J]}),t[102]=K,t[103]=J,t[104]=Y):Y=t[104];let X;t[105]!==W||t[106]!==Y?(X=(0,s.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[rt,W,Y]}),t[105]=W,t[106]=Y,t[107]=X):X=t[107];let st=c.isPending||Qe,Z;t[108]!==w||t[109]!==Be||t[110]!==st?(Z=(0,s.jsx)(be,{isPending:st,isSubmitting:Be,onCancel:w,pendingLabel:`Creating…`,submitLabel:`Create Service`}),t[108]=w,t[109]=Be,t[110]=st,t[111]=Z):Z=t[111];let Q;t[112]!==k||t[113]!==N||t[114]!==L||t[115]!==V||t[116]!==H||t[117]!==X||t[118]!==Z?(Q=(0,s.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:k,children:[N,L,V,H,X,Z]}),t[112]=k,t[113]=N,t[114]=L,t[115]=V,t[116]=H,t[117]=X,t[118]=Z,t[119]=Q):Q=t[119];let $;return t[120]!==E||t[121]!==D||t[122]!==O||t[123]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[E,D,O,Q]}),t[120]=E,t[121]=D,t[122]=O,t[123]=Q,t[124]=$):$=t[124],$}function Te(e){return(0,s.jsx)(ie,{value:e.TargetGroupArn??``,children:e.TargetGroupName},e.TargetGroupArn)}function Ee(e){let t=we(e);return(0,s.jsx)(ie,{value:t,children:t},e)}function De(){let e=(0,Ce.c)(2),{cluster:t}=i.useSearch(),n;return e[0]===t?n=e[1]:(n=(0,s.jsx)(c,{cluster:t}),e[0]=t,e[1]=n),n}export{De as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as ee}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-CTe_-BZA.js";import{t as ne}from"./back-link-wsXUoJ12.js";import{c as re,i as ie,n as ae,s as oe,t as se}from"./select-Cn66OoPn.js";import{t as r}from"./input-D3aUBtS6.js";import{O as ce,w as le}from"./ec2-DYgBhYCJ.js";import{a as ue,o as de}from"./ecs-BmKTMTV2.js";import{n as fe}from"./ecs-Bz1Yh-WL.js";import{u as pe}from"./elbv2-CmXUhudd.js";import{t as i}from"./create-service-BdeYCVj9.js";import{t as me}from"./page-heading-vksh_67w.js";import{a as he,i as ge,n as _e,t as ve}from"./zod-A4qtKH_p.js";import{t as ye}from"./error-banner-DeOeVBKS.js";import{t as be}from"./form-actions-DXvy9CQI.js";import{r as xe,s as a,t as o}from"./field-CS-ql6du.js";import{n as Se}from"./ecs-BRK1HDnD.js";var Ce=t(),s=e();function we(e){return e.split(`/`).at(-1)??e}function c(e){let t=(0,Ce.c)(125),{cluster:i}=e,we=te(),c=fe(),{data:De}=ee(de),{data:Oe}=ee(ce),{data:ke}=ee(le),{data:Ae}=ee(pe),je;t[0]===Oe.Subnets?je=t[1]:(je=Oe.Subnets??[],t[0]=Oe.Subnets,t[1]=je);let Me=je,Ne;t[2]===ke.SecurityGroups?Ne=t[3]:(Ne=ke.SecurityGroups??[],t[2]=ke.SecurityGroups,t[3]=Ne);let Pe=Ne,l;t[4]===Ae.TargetGroups?l=t[5]:(l=Ae.TargetGroups??[],t[4]=Ae.TargetGroups,t[5]=l);let Fe=l,u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=ve(Se),t[6]=u):u=t[6];let d,f;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=[],f=[],t[7]=d,t[8]=f):(d=t[7],f=t[8]);let p;t[9]===i?p=t[10]:(p={resolver:u,defaultValues:{cluster:i,serviceName:``,taskDefinition:``,desiredCount:1,subnets:d,securityGroups:f,assignPublicIp:!1,targetGroupArn:``,loadBalancerContainerName:``,loadBalancerContainerPort:``}},t[9]=i,t[10]=p);let{control:m,handleSubmit:Ie,register:h,setValue:Le,getValues:Re,formState:ze}=ge(p),{errors:g,isSubmitting:Be}=ze,_;t[11]===m?_=t[12]:(_={control:m,name:`taskDefinition`},t[11]=m,t[12]=_);let Ve=he(_),v;t[13]===Ve?v=t[14]:(v=ue(Ve),t[13]=Ve,t[14]=v);let{data:He}=n(v),y=He?.networkMode===`awsvpc`,b;t[15]===m?b=t[16]:(b={control:m,name:`subnets`},t[15]=m,t[16]=b);let x=he(b),S;t[17]===m?S=t[18]:(S={control:m,name:`securityGroups`},t[17]=m,t[18]=S);let Ue=he(S),C;t[19]===x?C=t[20]:(C=new Set(x),t[19]=x,t[20]=C);let We=C,Ge;t[21]===Ue?Ge=t[22]:(Ge=new Set(Ue),t[21]=Ue,t[22]=Ge);let Ke=Ge,qe;t[23]!==Re||t[24]!==Le?(qe=(e,t)=>{let n=Re(e);Le(e,n.includes(t)?n.filter(e=>e!==t):[...n,t],{shouldValidate:!0})},t[23]=Re,t[24]=Le,t[25]=qe):qe=t[25];let Je=qe,Ye;t[26]!==i||t[27]!==we?(Ye=function(){we({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:i}})},t[26]=i,t[27]=we,t[28]=Ye):Ye=t[28];let w=Ye,Xe;t[29]!==y||t[30]!==c||t[31]!==w?(Xe=async function(e){await c.mutateAsync({...e,awsvpc:y}),w()},t[29]=y,t[30]=c,t[31]=w,t[32]=Xe):Xe=t[32];let Ze=Xe,Qe=y&&x.length===0,T;t[33]===i?T=t[34]:(T={clusterName:i},t[33]=i,t[34]=T);let E;t[35]!==i||t[36]!==T?(E=(0,s.jsx)(ne,{params:T,to:`/ecs/list-clusters/$clusterName`,children:i}),t[35]=i,t[36]=T,t[37]=E):E=t[37];let $e=`Cluster: ${i}`,D;t[38]===$e?D=t[39]:(D=(0,s.jsx)(me,{subtitle:$e,title:`Create Service`}),t[38]=$e,t[39]=D);let O;t[40]!==c.error||t[41]!==c.isError?(O=c.isError&&(0,s.jsx)(ye,{error:c.error instanceof Error?c.error:void 0,msg:`Failed to create service.`}),t[40]=c.error,t[41]=c.isError,t[42]=O):O=t[42];let k;t[43]!==Ie||t[44]!==Ze?(k=Ie(Ze),t[43]=Ie,t[44]=Ze,t[45]=k):k=t[45];let et;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(et=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`serviceName`,children:`Service name`})}),t[46]=et):et=t[46];let A;t[47]===h?A=t[48]:(A=h(`serviceName`),t[47]=h,t[48]=A);let j;t[49]===A?j=t[50]:(j=(0,s.jsx)(r,{id:`serviceName`,placeholder:`api`,...A}),t[49]=A,t[50]=j);let M;t[51]===g.serviceName?M=t[52]:(M=(0,s.jsx)(xe,{errors:[g.serviceName]}),t[51]=g.serviceName,t[52]=M);let N;t[53]!==j||t[54]!==M?(N=(0,s.jsxs)(o,{children:[et,j,M]}),t[53]=j,t[54]=M,t[55]=N):N=t[55];let tt;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(tt=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`taskDefinition`,children:`Task definition`})}),t[56]=tt):tt=t[56];let P;t[57]===De?P=t[58]:(P=e=>{let{field:t}=e;return(0,s.jsxs)(se,{onValueChange:t.onChange,value:t.value,children:[(0,s.jsx)(oe,{className:`w-full`,id:`taskDefinition`,children:(0,s.jsx)(re,{placeholder:`Select a task definition`})}),(0,s.jsx)(ae,{children:De.map(Ee)})]})},t[57]=De,t[58]=P);let F;t[59]!==m||t[60]!==P?(F=(0,s.jsx)(_e,{control:m,name:`taskDefinition`,render:P}),t[59]=m,t[60]=P,t[61]=F):F=t[61];let I;t[62]===g.taskDefinition?I=t[63]:(I=(0,s.jsx)(xe,{errors:[g.taskDefinition]}),t[62]=g.taskDefinition,t[63]=I);let L;t[64]!==F||t[65]!==I?(L=(0,s.jsxs)(o,{children:[tt,F,I]}),t[64]=F,t[65]=I,t[66]=L):L=t[66];let nt;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(nt=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`desiredCount`,children:`Desired count`})}),t[67]=nt):nt=t[67];let R;t[68]===h?R=t[69]:(R=h(`desiredCount`,{valueAsNumber:!0}),t[68]=h,t[69]=R);let z;t[70]===R?z=t[71]:(z=(0,s.jsx)(r,{id:`desiredCount`,type:`number`,...R}),t[70]=R,t[71]=z);let B;t[72]===g.desiredCount?B=t[73]:(B=(0,s.jsx)(xe,{errors:[g.desiredCount]}),t[72]=g.desiredCount,t[73]=B);let V;t[74]!==z||t[75]!==B?(V=(0,s.jsxs)(o,{children:[nt,z,B]}),t[74]=z,t[75]=B,t[76]=V):V=t[76];let H;t[77]!==y||t[78]!==h||t[79]!==Pe||t[80]!==Ke||t[81]!==We||t[82]!==Me||t[83]!==Je?(H=y&&(0,s.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[(0,s.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`This task definition uses awsvpc networking. Select at least one subnet.`}),(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`span`,{className:`text-sm font-medium`,children:`Subnets`}),(0,s.jsx)(`div`,{className:`mt-2 space-y-1`,children:Me.map(e=>(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,s.jsx)(`input`,{checked:We.has(e.SubnetId??``),onChange:()=>{Je(`subnets`,e.SubnetId??``)},type:`checkbox`}),(0,s.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` (`,e.CidrBlock,`)`]})]},e.SubnetId))})]}),(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`span`,{className:`text-sm font-medium`,children:`Security groups`}),(0,s.jsx)(`div`,{className:`mt-2 space-y-1`,children:Pe.map(e=>(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,s.jsx)(`input`,{checked:Ke.has(e.GroupId??``),onChange:()=>{Je(`securityGroups`,e.GroupId??``)},type:`checkbox`}),(0,s.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),(0,s.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,s.jsx)(`input`,{type:`checkbox`,...h(`assignPublicIp`)}),(0,s.jsx)(`span`,{children:`Assign public IP`})]})]}),t[77]=y,t[78]=h,t[79]=Pe,t[80]=Ke,t[81]=We,t[82]=Me,t[83]=Je,t[84]=H):H=t[84];let rt;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(rt=(0,s.jsx)(`h2`,{className:`font-semibold`,children:`Load balancer (optional)`}),t[85]=rt):rt=t[85];let it;t[86]===Symbol.for(`react.memo_cache_sentinel`)?(it=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`targetGroupArn`,children:`Target group`})}),t[86]=it):it=t[86];let U;t[87]===Fe?U=t[88]:(U=e=>{let{field:t}=e;return(0,s.jsxs)(se,{onValueChange:e=>{t.onChange(e===`none`?``:e)},value:t.value===``?`none`:t.value,children:[(0,s.jsx)(oe,{className:`w-full`,id:`targetGroupArn`,children:(0,s.jsx)(re,{})}),(0,s.jsxs)(ae,{children:[(0,s.jsx)(ie,{value:`none`,children:`none`}),Fe.map(Te)]})]})},t[87]=Fe,t[88]=U);let W;t[89]!==m||t[90]!==U?(W=(0,s.jsxs)(o,{children:[it,(0,s.jsx)(_e,{control:m,name:`targetGroupArn`,render:U})]}),t[89]=m,t[90]=U,t[91]=W):W=t[91];let at;t[92]===Symbol.for(`react.memo_cache_sentinel`)?(at=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`lbContainerName`,children:`Container name`})}),t[92]=at):at=t[92];let G;t[93]===h?G=t[94]:(G=h(`loadBalancerContainerName`),t[93]=h,t[94]=G);let K;t[95]===G?K=t[96]:(K=(0,s.jsxs)(o,{children:[at,(0,s.jsx)(r,{id:`lbContainerName`,placeholder:`app`,...G})]}),t[95]=G,t[96]=K);let ot;t[97]===Symbol.for(`react.memo_cache_sentinel`)?(ot=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`lbContainerPort`,children:`Container port`})}),t[97]=ot):ot=t[97];let q;t[98]===h?q=t[99]:(q=h(`loadBalancerContainerPort`),t[98]=h,t[99]=q);let J;t[100]===q?J=t[101]:(J=(0,s.jsxs)(o,{children:[ot,(0,s.jsx)(r,{id:`lbContainerPort`,placeholder:`80`,type:`number`,...q})]}),t[100]=q,t[101]=J);let Y;t[102]!==K||t[103]!==J?(Y=(0,s.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[K,J]}),t[102]=K,t[103]=J,t[104]=Y):Y=t[104];let X;t[105]!==W||t[106]!==Y?(X=(0,s.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[rt,W,Y]}),t[105]=W,t[106]=Y,t[107]=X):X=t[107];let st=c.isPending||Qe,Z;t[108]!==w||t[109]!==Be||t[110]!==st?(Z=(0,s.jsx)(be,{isPending:st,isSubmitting:Be,onCancel:w,pendingLabel:`Creating…`,submitLabel:`Create Service`}),t[108]=w,t[109]=Be,t[110]=st,t[111]=Z):Z=t[111];let Q;t[112]!==k||t[113]!==N||t[114]!==L||t[115]!==V||t[116]!==H||t[117]!==X||t[118]!==Z?(Q=(0,s.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:k,children:[N,L,V,H,X,Z]}),t[112]=k,t[113]=N,t[114]=L,t[115]=V,t[116]=H,t[117]=X,t[118]=Z,t[119]=Q):Q=t[119];let $;return t[120]!==E||t[121]!==D||t[122]!==O||t[123]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[E,D,O,Q]}),t[120]=E,t[121]=D,t[122]=O,t[123]=Q,t[124]=$):$=t[124],$}function Te(e){return(0,s.jsx)(ie,{value:e.TargetGroupArn??``,children:e.TargetGroupName},e.TargetGroupArn)}function Ee(e){let t=we(e);return(0,s.jsx)(ie,{value:t,children:t},e)}function De(){let e=(0,Ce.c)(2),{cluster:t}=i.useSearch(),n;return e[0]===t?n=e[1]:(n=(0,s.jsx)(c,{cluster:t}),e[0]=t,e[1]=n),n}export{De as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DExIeTQv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DExIeTQv.js deleted file mode 100644 index ce5160331..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-service-DExIeTQv.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/create-service-B5WMizMG.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ecs-gqt7DXoF.js","assets/ecs-8RzYyUs4.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-B-FFW93q.js","assets/elbv2-DSjTzB2q.js","assets/commandBuilder-DzFUl2wS.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ecs-KDGpZ8Lc.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{g as n,lt as r,m as i}from"./cluster-config-xw_Q7X1e.js";import{O as a,w as o}from"./ec2-CWEplLq4.js";import{o as s}from"./ecs-gqt7DXoF.js";import{u as c}from"./elbv2-DSjTzB2q.js";var l=()=>r(()=>import(`./create-service-B5WMizMG.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])),u=i({cluster:n().catch(``)}),d=e(`/_auth/ecs/(clusters)/create-service`)({validateSearch:u,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`})])},head:()=>({meta:[{title:`Create Service | ECS | Mulga`}]}),component:t(l,`component`)});export{d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-DnVx_IGk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BcMkDDQT.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-DnVx_IGk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BcMkDDQT.js index c5a0fd1cb..2651ae8f1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-DnVx_IGk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BcMkDDQT.js @@ -1,3 +1,3 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{t as ee}from"./back-link-CjKy1JE5.js";import{c as i,i as a,n as o,s,t as c}from"./select-B01jpDaX.js";import{t as l}from"./cli-command-panel-CLiFy1rG.js";import{A as te}from"./ec2-CWEplLq4.js";import{S as ne}from"./ec2-Ctto2xjU.js";import{t as re}from"./create-snapshot-wXcq0RWi.js";import{t as ie}from"./page-heading-vksh_67w.js";import{a as ae,i as oe,n as se,t as ce}from"./zod-DF_n2ejy.js";import{t as le}from"./error-banner-DeOeVBKS.js";import{t as u}from"./form-actions-BUM37An0.js";import{r as d,s as f,t as p}from"./field-c7GHI5st.js";import{t as m}from"./textarea-n04EavUm.js";import{m as h}from"./ec2-DhWukC79.js";var g=t(),_=e();function v(){let e=(0,g.c)(53),t=r(),{data:a}=n(te),v=ne(),x;e[0]===a.Volumes?x=e[1]:(x=a.Volumes??[],e[0]=a.Volumes,e[1]=x);let S=x,{volumeId:ue}=re.useSearch(),C=ue??S[0]?.VolumeId??``,w;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(w=ce(h),e[2]=w):w=e[2];let T;e[3]===C?T=e[4]:(T={resolver:w,defaultValues:{volumeId:C,description:``}},e[3]=C,e[4]=T);let{control:E,handleSubmit:D,register:O,formState:k}=oe(T),{errors:A,isSubmitting:j}=k,M;e[5]===E?M=e[6]:(M={control:E},e[5]=E,e[6]=M);let N=ae(M),P;e[7]!==v||e[8]!==t?(P=async e=>{await v.mutateAsync(e),t({to:`/ec2/describe-snapshots`})},e[7]=v,e[8]=t,e[9]=P):P=e[9];let F=P,I,L;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,_.jsx)(ee,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),L=(0,_.jsx)(ie,{title:`Create Snapshot`}),e[10]=I,e[11]=L):(I=e[10],L=e[11]);let R;e[12]===v.error?R=e[13]:(R=v.error&&(0,_.jsx)(le,{error:v.error,msg:`Failed to create snapshot`}),e[12]=v.error,e[13]=R);let z;e[14]!==D||e[15]!==F?(z=D(F),e[14]=D,e[15]=F,e[16]=z):z=e[16];let B;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`volumeId`,children:`Volume`})}),e[17]=B):B=e[17];let V;e[18]!==A.volumeId||e[19]!==S?(V=e=>{let{field:t}=e;return(0,_.jsxs)(c,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(s,{"aria-invalid":!!A.volumeId,className:`w-full`,id:`volumeId`,children:(0,_.jsx)(i,{})}),(0,_.jsx)(o,{children:S.map(y)})]})},e[18]=A.volumeId,e[19]=S,e[20]=V):V=e[20];let H;e[21]!==E||e[22]!==V?(H=(0,_.jsx)(se,{control:E,name:`volumeId`,render:V}),e[21]=E,e[22]=V,e[23]=H):H=e[23];let U;e[24]===A.volumeId?U=e[25]:(U=(0,_.jsx)(d,{errors:[A.volumeId]}),e[24]=A.volumeId,e[25]=U);let W;e[26]!==H||e[27]!==U?(W=(0,_.jsxs)(p,{children:[B,H,U]}),e[26]=H,e[27]=U,e[28]=W):W=e[28];let G;e[29]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[29]=G):G=e[29];let K;e[30]===O?K=e[31]:(K=O(`description`),e[30]=O,e[31]=K);let q;e[32]===K?q=e[33]:(q=(0,_.jsxs)(p,{children:[G,(0,_.jsx)(m,{id:`description`,placeholder:`Snapshot description`,...K})]}),e[32]=K,e[33]=q);let J;e[34]===N?J=e[35]:(J=b(N),e[34]=N,e[35]=J);let Y;e[36]===J?Y=e[37]:(Y=(0,_.jsx)(l,{commands:J}),e[36]=J,e[37]=Y);let X;e[38]===t?X=e[39]:(X=async()=>{await t({to:`/ec2/describe-snapshots`})},e[38]=t,e[39]=X);let Z;e[40]!==v.isPending||e[41]!==j||e[42]!==X?(Z=(0,_.jsx)(u,{isPending:v.isPending,isSubmitting:j,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Snapshot`}),e[40]=v.isPending,e[41]=j,e[42]=X,e[43]=Z):Z=e[43];let Q;e[44]!==W||e[45]!==q||e[46]!==Y||e[47]!==Z||e[48]!==z?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:z,children:[W,q,Y,Z]}),e[44]=W,e[45]=q,e[46]=Y,e[47]=Z,e[48]=z,e[49]=Q):Q=e[49];let $;return e[50]!==Q||e[51]!==R?($=(0,_.jsxs)(_.Fragment,{children:[I,L,R,Q]}),e[50]=Q,e[51]=R,e[52]=$):$=e[52],$}function y(e){return(0,_.jsxs)(a,{value:e.VolumeId??``,children:[e.VolumeId,` (`,e.Size,` GiB)`]},e.VolumeId)}function b(e){let t=e.volumeId??``,n=e.description??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-snapshot`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{t as ee}from"./back-link-wsXUoJ12.js";import{c as i,i as a,n as o,s,t as c}from"./select-Cn66OoPn.js";import{t as l}from"./cli-command-panel-DavMY-tN.js";import{A as te}from"./ec2-DYgBhYCJ.js";import{S as ne}from"./ec2-Csn1kwZ8.js";import{t as re}from"./create-snapshot-BsiV7Bxn.js";import{t as ie}from"./page-heading-vksh_67w.js";import{a as ae,i as oe,n as se,t as ce}from"./zod-A4qtKH_p.js";import{t as le}from"./error-banner-DeOeVBKS.js";import{t as u}from"./form-actions-DXvy9CQI.js";import{r as d,s as f,t as p}from"./field-CS-ql6du.js";import{t as m}from"./textarea-DV1UO8hv.js";import{m as h}from"./ec2-DqNqPeiA.js";var g=t(),_=e();function v(){let e=(0,g.c)(53),t=r(),{data:a}=n(te),v=ne(),x;e[0]===a.Volumes?x=e[1]:(x=a.Volumes??[],e[0]=a.Volumes,e[1]=x);let S=x,{volumeId:ue}=re.useSearch(),C=ue??S[0]?.VolumeId??``,w;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(w=ce(h),e[2]=w):w=e[2];let T;e[3]===C?T=e[4]:(T={resolver:w,defaultValues:{volumeId:C,description:``}},e[3]=C,e[4]=T);let{control:E,handleSubmit:D,register:O,formState:k}=oe(T),{errors:A,isSubmitting:j}=k,M;e[5]===E?M=e[6]:(M={control:E},e[5]=E,e[6]=M);let N=ae(M),P;e[7]!==v||e[8]!==t?(P=async e=>{await v.mutateAsync(e),t({to:`/ec2/describe-snapshots`})},e[7]=v,e[8]=t,e[9]=P):P=e[9];let F=P,I,L;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,_.jsx)(ee,{to:`/ec2/describe-snapshots`,children:`Back to snapshots`}),L=(0,_.jsx)(ie,{title:`Create Snapshot`}),e[10]=I,e[11]=L):(I=e[10],L=e[11]);let R;e[12]===v.error?R=e[13]:(R=v.error&&(0,_.jsx)(le,{error:v.error,msg:`Failed to create snapshot`}),e[12]=v.error,e[13]=R);let z;e[14]!==D||e[15]!==F?(z=D(F),e[14]=D,e[15]=F,e[16]=z):z=e[16];let B;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`volumeId`,children:`Volume`})}),e[17]=B):B=e[17];let V;e[18]!==A.volumeId||e[19]!==S?(V=e=>{let{field:t}=e;return(0,_.jsxs)(c,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(s,{"aria-invalid":!!A.volumeId,className:`w-full`,id:`volumeId`,children:(0,_.jsx)(i,{})}),(0,_.jsx)(o,{children:S.map(y)})]})},e[18]=A.volumeId,e[19]=S,e[20]=V):V=e[20];let H;e[21]!==E||e[22]!==V?(H=(0,_.jsx)(se,{control:E,name:`volumeId`,render:V}),e[21]=E,e[22]=V,e[23]=H):H=e[23];let U;e[24]===A.volumeId?U=e[25]:(U=(0,_.jsx)(d,{errors:[A.volumeId]}),e[24]=A.volumeId,e[25]=U);let W;e[26]!==H||e[27]!==U?(W=(0,_.jsxs)(p,{children:[B,H,U]}),e[26]=H,e[27]=U,e[28]=W):W=e[28];let G;e[29]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`description`,children:`Description (optional)`})}),e[29]=G):G=e[29];let K;e[30]===O?K=e[31]:(K=O(`description`),e[30]=O,e[31]=K);let q;e[32]===K?q=e[33]:(q=(0,_.jsxs)(p,{children:[G,(0,_.jsx)(m,{id:`description`,placeholder:`Snapshot description`,...K})]}),e[32]=K,e[33]=q);let J;e[34]===N?J=e[35]:(J=b(N),e[34]=N,e[35]=J);let Y;e[36]===J?Y=e[37]:(Y=(0,_.jsx)(l,{commands:J}),e[36]=J,e[37]=Y);let X;e[38]===t?X=e[39]:(X=async()=>{await t({to:`/ec2/describe-snapshots`})},e[38]=t,e[39]=X);let Z;e[40]!==v.isPending||e[41]!==j||e[42]!==X?(Z=(0,_.jsx)(u,{isPending:v.isPending,isSubmitting:j,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Snapshot`}),e[40]=v.isPending,e[41]=j,e[42]=X,e[43]=Z):Z=e[43];let Q;e[44]!==W||e[45]!==q||e[46]!==Y||e[47]!==Z||e[48]!==z?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:z,children:[W,q,Y,Z]}),e[44]=W,e[45]=q,e[46]=Y,e[47]=Z,e[48]=z,e[49]=Q):Q=e[49];let $;return e[50]!==Q||e[51]!==R?($=(0,_.jsxs)(_.Fragment,{children:[I,L,R,Q]}),e[50]=Q,e[51]=R,e[52]=$):$=e[52],$}function y(e){return(0,_.jsxs)(a,{value:e.VolumeId??``,children:[e.VolumeId,` (`,e.Size,` GiB)`]},e.VolumeId)}function b(e){let t=e.volumeId??``,n=e.description??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-snapshot`},{type:`flag`,value:` \\ --volume-id`},{type:`value`,value:` ${t||``}`}];return n&&r.push({type:`flag`,value:` \\ --description`},{type:`value`,value:` "${n}"`}),[{label:`Create Snapshot`,parts:r}]}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BsiV7Bxn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BsiV7Bxn.js new file mode 100644 index 000000000..e7d196589 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-BsiV7Bxn.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/create-snapshot-BcMkDDQT.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/cli-command-panel-DavMY-tN.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/textarea-DV1UO8hv.js","assets/ec2-DqNqPeiA.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{_ as n,h as r,ut as i}from"./cluster-config-DkOiY8HH.js";import{A as a}from"./ec2-DYgBhYCJ.js";var o=()=>i(()=>import(`./create-snapshot-BcMkDDQT.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),s=r({volumeId:n().optional().catch(void 0)}),c=e(`/_auth/ec2/(snapshots)/create-snapshot`)({validateSearch:s,loader:async({context:e})=>{await e.queryClient.query({...a,staleTime:`static`})},head:()=>({meta:[{title:`Create Snapshot | EC2 | Mulga`}]}),component:t(o,`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-wXcq0RWi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-wXcq0RWi.js deleted file mode 100644 index 43b559dd7..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-snapshot-wXcq0RWi.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/create-snapshot-DnVx_IGk.js","assets/compiler-runtime-D_vZfn79.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/cli-command-panel-CLiFy1rG.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/textarea-n04EavUm.js","assets/ec2-DhWukC79.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{g as n,lt as r,m as i}from"./cluster-config-xw_Q7X1e.js";import{A as a}from"./ec2-CWEplLq4.js";var o=()=>r(()=>import(`./create-snapshot-DnVx_IGk.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45])),s=i({volumeId:n().optional().catch(void 0)}),c=e(`/_auth/ec2/(snapshots)/create-snapshot`)({validateSearch:s,loader:async({context:e})=>{await e.queryClient.query({...a,staleTime:`static`})},head:()=>({meta:[{title:`Create Snapshot | EC2 | Mulga`}]}),component:t(o,`component`)});export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BXdYKpy-.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BbA2kLfW.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BXdYKpy-.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BbA2kLfW.js index 101252611..8506d8d7c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BXdYKpy-.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-subnet-BbA2kLfW.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./back-link-CjKy1JE5.js";import{c as ee,i as o,n as te,s as ne,t as re}from"./select-B01jpDaX.js";import{t as ie}from"./cli-command-panel-CLiFy1rG.js";import{t as ae}from"./input-6kdUb_DH.js";import{M as oe,r as se}from"./ec2-CWEplLq4.js";import{C as ce}from"./ec2-Ctto2xjU.js";import{t as le}from"./page-heading-vksh_67w.js";import{a as ue,i as de,n as s,t as fe}from"./zod-DF_n2ejy.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-BUM37An0.js";import{r as he,s as c,t as l}from"./field-c7GHI5st.js";import{h as ge}from"./ec2-DhWukC79.js";var _e=t(),u=e();function d(){let e=(0,_e.c)(72),t=r(),{data:i}=n(oe),{data:d}=n(se),f=ce(),p;e[0]===i.Vpcs?p=e[1]:(p=i.Vpcs??[],e[0]=i.Vpcs,e[1]=p);let m=p,h;e[2]===d.AvailabilityZones?h=e[3]:(h=d.AvailabilityZones??[],e[2]=d.AvailabilityZones,e[3]=h);let g=h,_;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(_=fe(ge),e[4]=_):_=e[4];let v=m[0]?.VpcId??``,y;e[5]===v?y=e[6]:(y={resolver:_,defaultValues:{vpcId:v,cidrBlock:`10.0.1.0/24`,availabilityZone:void 0,mapPublicIpOnLaunch:!1}},e[5]=v,e[6]=y);let{control:b,handleSubmit:Se,register:x,formState:Ce}=de(y),{errors:S,isSubmitting:C}=Ce,w;e[7]===b?w=e[8]:(w={control:b},e[7]=b,e[8]=w);let T=ue(w),E;e[9]!==f||e[10]!==t?(E=async e=>{let n=(await f.mutateAsync(e)).Subnet?.SubnetId;t(n?{to:`/ec2/describe-subnets/$id`,params:{id:n}}:{to:`/ec2/describe-subnets`})},e[9]=f,e[10]=t,e[11]=E):E=e[11];let D=E,O,k;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,u.jsx)(a,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),k=(0,u.jsx)(le,{title:`Create Subnet`}),e[12]=O,e[13]=k):(O=e[12],k=e[13]);let A;e[14]===f.error?A=e[15]:(A=f.error&&(0,u.jsx)(pe,{error:f.error,msg:`Failed to create subnet`}),e[14]=f.error,e[15]=A);let j;e[16]!==Se||e[17]!==D?(j=Se(D),e[16]=Se,e[17]=D,e[18]=j):j=e[18];let M;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[19]=M):M=e[19];let N;e[20]!==S.vpcId||e[21]!==m?(N=e=>{let{field:t}=e;return(0,u.jsxs)(re,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,u.jsx)(ne,{"aria-invalid":!!S.vpcId,className:`w-full`,id:`vpcId`,children:(0,u.jsx)(ee,{})}),(0,u.jsx)(te,{children:m.map(be)})]})},e[20]=S.vpcId,e[21]=m,e[22]=N):N=e[22];let P;e[23]!==b||e[24]!==N?(P=(0,u.jsx)(s,{control:b,name:`vpcId`,render:N}),e[23]=b,e[24]=N,e[25]=P):P=e[25];let F;e[26]===S.vpcId?F=e[27]:(F=(0,u.jsx)(he,{errors:[S.vpcId]}),e[26]=S.vpcId,e[27]=F);let I;e[28]!==P||e[29]!==F?(I=(0,u.jsxs)(l,{children:[M,P,F]}),e[28]=P,e[29]=F,e[30]=I):I=e[30];let L;e[31]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`cidrBlock`,children:`CIDR Block`})}),e[31]=L):L=e[31];let R=!!S.cidrBlock,z;e[32]===x?z=e[33]:(z=x(`cidrBlock`),e[32]=x,e[33]=z);let B;e[34]!==R||e[35]!==z?(B=(0,u.jsx)(ae,{"aria-invalid":R,id:`cidrBlock`,placeholder:`10.0.1.0/24`,...z}),e[34]=R,e[35]=z,e[36]=B):B=e[36];let V;e[37]===S.cidrBlock?V=e[38]:(V=(0,u.jsx)(he,{errors:[S.cidrBlock]}),e[37]=S.cidrBlock,e[38]=V);let H;e[39]!==B||e[40]!==V?(H=(0,u.jsxs)(l,{children:[L,B,V]}),e[39]=B,e[40]=V,e[41]=H):H=e[41];let U;e[42]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`availabilityZone`,children:`Availability Zone (optional)`})}),e[42]=U):U=e[42];let W;e[43]===g?W=e[44]:(W=e=>{let{field:t}=e;return(0,u.jsxs)(re,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,u.jsx)(ne,{className:`w-full`,id:`availabilityZone`,children:(0,u.jsx)(ee,{})}),(0,u.jsxs)(te,{children:[(0,u.jsx)(o,{value:`none`,children:`none`}),g.map(ye)]})]})},e[43]=g,e[44]=W);let G;e[45]!==b||e[46]!==W?(G=(0,u.jsxs)(l,{children:[U,(0,u.jsx)(s,{control:b,name:`availabilityZone`,render:W})]}),e[45]=b,e[46]=W,e[47]=G):G=e[47];let K;e[48]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,u.jsx)(c,{children:`Auto-assign public IPv4`}),e[48]=K):K=e[48];let q;e[49]===b?q=e[50]:(q=(0,u.jsxs)(l,{children:[K,(0,u.jsx)(s,{control:b,name:`mapPublicIpOnLaunch`,render:ve})]}),e[49]=b,e[50]=q);let J;e[51]===T?J=e[52]:(J=xe(T),e[51]=T,e[52]=J);let Y;e[53]===J?Y=e[54]:(Y=(0,u.jsx)(ie,{commands:J}),e[53]=J,e[54]=Y);let X;e[55]===t?X=e[56]:(X=async()=>{await t({to:`/ec2/describe-subnets`})},e[55]=t,e[56]=X);let Z;e[57]!==f.isPending||e[58]!==C||e[59]!==X?(Z=(0,u.jsx)(me,{isPending:f.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Subnet`}),e[57]=f.isPending,e[58]=C,e[59]=X,e[60]=Z):Z=e[60];let Q;e[61]!==j||e[62]!==I||e[63]!==H||e[64]!==G||e[65]!==q||e[66]!==Y||e[67]!==Z?(Q=(0,u.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[I,H,G,q,Y,Z]}),e[61]=j,e[62]=I,e[63]=H,e[64]=G,e[65]=q,e[66]=Y,e[67]=Z,e[68]=Q):Q=e[68];let $;return e[69]!==A||e[70]!==Q?($=(0,u.jsxs)(u.Fragment,{children:[O,k,A,Q]}),e[69]=A,e[70]=Q,e[71]=$):$=e[71],$}function ve(e){let{field:t}=e;return(0,u.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,u.jsx)(`input`,{"aria-label":`Enable auto-assign public IPv4 address`,checked:t.value??!1,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Enable auto-assign public IPv4 address`]})}function ye(e){return(0,u.jsx)(o,{value:e.ZoneName??``,children:e.ZoneName},e.ZoneName)}function be(e){let t=i(e.Tags);return(0,u.jsx)(o,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function xe(e){let t=e.vpcId??``,n=e.cidrBlock??``,r=e.availabilityZone??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-subnet`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./back-link-wsXUoJ12.js";import{c as ee,i as o,n as te,s as ne,t as re}from"./select-Cn66OoPn.js";import{t as ie}from"./cli-command-panel-DavMY-tN.js";import{t as ae}from"./input-D3aUBtS6.js";import{M as oe,r as se}from"./ec2-DYgBhYCJ.js";import{C as ce}from"./ec2-Csn1kwZ8.js";import{t as le}from"./page-heading-vksh_67w.js";import{a as ue,i as de,n as s,t as fe}from"./zod-A4qtKH_p.js";import{t as pe}from"./error-banner-DeOeVBKS.js";import{t as me}from"./form-actions-DXvy9CQI.js";import{r as he,s as c,t as l}from"./field-CS-ql6du.js";import{h as ge}from"./ec2-DqNqPeiA.js";var _e=t(),u=e();function d(){let e=(0,_e.c)(72),t=r(),{data:i}=n(oe),{data:d}=n(se),f=ce(),p;e[0]===i.Vpcs?p=e[1]:(p=i.Vpcs??[],e[0]=i.Vpcs,e[1]=p);let m=p,h;e[2]===d.AvailabilityZones?h=e[3]:(h=d.AvailabilityZones??[],e[2]=d.AvailabilityZones,e[3]=h);let g=h,_;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(_=fe(ge),e[4]=_):_=e[4];let v=m[0]?.VpcId??``,y;e[5]===v?y=e[6]:(y={resolver:_,defaultValues:{vpcId:v,cidrBlock:`10.0.1.0/24`,availabilityZone:void 0,mapPublicIpOnLaunch:!1}},e[5]=v,e[6]=y);let{control:b,handleSubmit:Se,register:x,formState:Ce}=de(y),{errors:S,isSubmitting:C}=Ce,w;e[7]===b?w=e[8]:(w={control:b},e[7]=b,e[8]=w);let T=ue(w),E;e[9]!==f||e[10]!==t?(E=async e=>{let n=(await f.mutateAsync(e)).Subnet?.SubnetId;t(n?{to:`/ec2/describe-subnets/$id`,params:{id:n}}:{to:`/ec2/describe-subnets`})},e[9]=f,e[10]=t,e[11]=E):E=e[11];let D=E,O,k;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,u.jsx)(a,{to:`/ec2/describe-subnets`,children:`Back to Subnets`}),k=(0,u.jsx)(le,{title:`Create Subnet`}),e[12]=O,e[13]=k):(O=e[12],k=e[13]);let A;e[14]===f.error?A=e[15]:(A=f.error&&(0,u.jsx)(pe,{error:f.error,msg:`Failed to create subnet`}),e[14]=f.error,e[15]=A);let j;e[16]!==Se||e[17]!==D?(j=Se(D),e[16]=Se,e[17]=D,e[18]=j):j=e[18];let M;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`vpcId`,children:`VPC`})}),e[19]=M):M=e[19];let N;e[20]!==S.vpcId||e[21]!==m?(N=e=>{let{field:t}=e;return(0,u.jsxs)(re,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,u.jsx)(ne,{"aria-invalid":!!S.vpcId,className:`w-full`,id:`vpcId`,children:(0,u.jsx)(ee,{})}),(0,u.jsx)(te,{children:m.map(be)})]})},e[20]=S.vpcId,e[21]=m,e[22]=N):N=e[22];let P;e[23]!==b||e[24]!==N?(P=(0,u.jsx)(s,{control:b,name:`vpcId`,render:N}),e[23]=b,e[24]=N,e[25]=P):P=e[25];let F;e[26]===S.vpcId?F=e[27]:(F=(0,u.jsx)(he,{errors:[S.vpcId]}),e[26]=S.vpcId,e[27]=F);let I;e[28]!==P||e[29]!==F?(I=(0,u.jsxs)(l,{children:[M,P,F]}),e[28]=P,e[29]=F,e[30]=I):I=e[30];let L;e[31]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`cidrBlock`,children:`CIDR Block`})}),e[31]=L):L=e[31];let R=!!S.cidrBlock,z;e[32]===x?z=e[33]:(z=x(`cidrBlock`),e[32]=x,e[33]=z);let B;e[34]!==R||e[35]!==z?(B=(0,u.jsx)(ae,{"aria-invalid":R,id:`cidrBlock`,placeholder:`10.0.1.0/24`,...z}),e[34]=R,e[35]=z,e[36]=B):B=e[36];let V;e[37]===S.cidrBlock?V=e[38]:(V=(0,u.jsx)(he,{errors:[S.cidrBlock]}),e[37]=S.cidrBlock,e[38]=V);let H;e[39]!==B||e[40]!==V?(H=(0,u.jsxs)(l,{children:[L,B,V]}),e[39]=B,e[40]=V,e[41]=H):H=e[41];let U;e[42]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,u.jsx)(c,{children:(0,u.jsx)(`label`,{htmlFor:`availabilityZone`,children:`Availability Zone (optional)`})}),e[42]=U):U=e[42];let W;e[43]===g?W=e[44]:(W=e=>{let{field:t}=e;return(0,u.jsxs)(re,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,u.jsx)(ne,{className:`w-full`,id:`availabilityZone`,children:(0,u.jsx)(ee,{})}),(0,u.jsxs)(te,{children:[(0,u.jsx)(o,{value:`none`,children:`none`}),g.map(ye)]})]})},e[43]=g,e[44]=W);let G;e[45]!==b||e[46]!==W?(G=(0,u.jsxs)(l,{children:[U,(0,u.jsx)(s,{control:b,name:`availabilityZone`,render:W})]}),e[45]=b,e[46]=W,e[47]=G):G=e[47];let K;e[48]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,u.jsx)(c,{children:`Auto-assign public IPv4`}),e[48]=K):K=e[48];let q;e[49]===b?q=e[50]:(q=(0,u.jsxs)(l,{children:[K,(0,u.jsx)(s,{control:b,name:`mapPublicIpOnLaunch`,render:ve})]}),e[49]=b,e[50]=q);let J;e[51]===T?J=e[52]:(J=xe(T),e[51]=T,e[52]=J);let Y;e[53]===J?Y=e[54]:(Y=(0,u.jsx)(ie,{commands:J}),e[53]=J,e[54]=Y);let X;e[55]===t?X=e[56]:(X=async()=>{await t({to:`/ec2/describe-subnets`})},e[55]=t,e[56]=X);let Z;e[57]!==f.isPending||e[58]!==C||e[59]!==X?(Z=(0,u.jsx)(me,{isPending:f.isPending,isSubmitting:C,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Subnet`}),e[57]=f.isPending,e[58]=C,e[59]=X,e[60]=Z):Z=e[60];let Q;e[61]!==j||e[62]!==I||e[63]!==H||e[64]!==G||e[65]!==q||e[66]!==Y||e[67]!==Z?(Q=(0,u.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:j,children:[I,H,G,q,Y,Z]}),e[61]=j,e[62]=I,e[63]=H,e[64]=G,e[65]=q,e[66]=Y,e[67]=Z,e[68]=Q):Q=e[68];let $;return e[69]!==A||e[70]!==Q?($=(0,u.jsxs)(u.Fragment,{children:[O,k,A,Q]}),e[69]=A,e[70]=Q,e[71]=$):$=e[71],$}function ve(e){let{field:t}=e;return(0,u.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,u.jsx)(`input`,{"aria-label":`Enable auto-assign public IPv4 address`,checked:t.value??!1,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Enable auto-assign public IPv4 address`]})}function ye(e){return(0,u.jsx)(o,{value:e.ZoneName??``,children:e.ZoneName},e.ZoneName)}function be(e){let t=i(e.Tags);return(0,u.jsx)(o,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function xe(e){let t=e.vpcId??``,n=e.cidrBlock??``,r=e.availabilityZone??``,i=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-subnet`},{type:`flag`,value:` \\ --vpc-id`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` \\ --cidr-block`},{type:`value`,value:` ${n||``}`}];r&&i.push({type:`flag`,value:` \\ --availability-zone`},{type:`value`,value:` ${r}`});let a=[{label:`Create Subnet`,parts:i}];return e.mapPublicIpOnLaunch===!0&&a.push({label:`Enable auto-assign public IPv4`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 modify-subnet-attribute`},{type:`flag`,value:` \\ diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-CSrYTK6r.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-BGShIRhO.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-CSrYTK6r.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-BGShIRhO.js index 4485f9202..e09d20a3b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-CSrYTK6r.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-target-group-BGShIRhO.js @@ -1,4 +1,4 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{t as i}from"./back-link-CjKy1JE5.js";import{t as a}from"./cli-command-panel-CLiFy1rG.js";import{M as o}from"./ec2-CWEplLq4.js";import{i as s}from"./elbv2-K4aD09h6.js";import{t as c}from"./page-heading-vksh_67w.js";import{i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{t as p}from"./target-group-form-DvZOw-26.js";import{a as m}from"./elbv2-CtsfBUSG.js";var h=t(),g=e();function _(){let e=(0,h.c)(38),t=r(),{data:_}=n(o),y=s(),b;e[0]===_.Vpcs?b=e[1]:(b=_.Vpcs??[],e[0]=_.Vpcs,e[1]=b);let x=b,S;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(S=u(m),e[2]=S):S=e[2];let C=x[0]?.VpcId??``,w,T;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(w={protocol:`HTTP`,path:`/`,port:`traffic-port`,intervalSeconds:30,timeoutSeconds:5,healthyThresholdCount:5,unhealthyThresholdCount:2,matcher:`200`},T=[],e[3]=w,e[4]=T):(w=e[3],T=e[4]);let E;e[5]===C?E=e[6]:(E={resolver:S,defaultValues:{name:``,protocol:`HTTP`,port:80,vpcId:C,healthCheck:w,tags:T}},e[5]=C,e[6]=E);let D=l(E),{handleSubmit:O,watch:k,formState:A}=D,{isSubmitting:j}=A,M;e[7]!==y||e[8]!==t?(M=async e=>{try{let n=(await y.mutateAsync(e)).TargetGroups?.[0]?.TargetGroupArn;t(n?{to:`/ec2/describe-target-groups/$id`,params:{id:encodeURIComponent(n)}}:{to:`/ec2/describe-target-groups`})}catch{}},e[7]=y,e[8]=t,e[9]=M):M=e[9];let N=M,P,F;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,g.jsx)(i,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),F=(0,g.jsx)(c,{title:`Create Target Group`}),e[10]=P,e[11]=F):(P=e[10],F=e[11]);let I;e[12]===y.error?I=e[13]:(I=y.error&&(0,g.jsx)(d,{error:y.error,msg:`Failed to create target group`}),e[12]=y.error,e[13]=I);let L;e[14]!==O||e[15]!==N?(L=O(N),e[14]=O,e[15]=N,e[16]=L):L=e[16];let R;e[17]!==D||e[18]!==x?(R=(0,g.jsx)(p,{form:D,vpcs:x}),e[17]=D,e[18]=x,e[19]=R):R=e[19];let z;e[20]===k?z=e[21]:(z=v(k),e[20]=k,e[21]=z);let B;e[22]===z?B=e[23]:(B=(0,g.jsx)(a,{commands:z}),e[22]=z,e[23]=B);let V;e[24]===t?V=e[25]:(V=async()=>{await t({to:`/ec2/describe-target-groups`})},e[24]=t,e[25]=V);let H;e[26]!==y.isPending||e[27]!==j||e[28]!==V?(H=(0,g.jsx)(f,{isPending:y.isPending,isSubmitting:j,onCancel:V,pendingLabel:`Creating…`,submitLabel:`Create Target Group`}),e[26]=y.isPending,e[27]=j,e[28]=V,e[29]=H):H=e[29];let U;e[30]!==L||e[31]!==R||e[32]!==B||e[33]!==H?(U=(0,g.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:L,children:[R,B,H]}),e[30]=L,e[31]=R,e[32]=B,e[33]=H,e[34]=U):U=e[34];let W;return e[35]!==I||e[36]!==U?(W=(0,g.jsxs)(g.Fragment,{children:[P,F,I,U]}),e[35]=I,e[36]=U,e[37]=W):W=e[37],W}function v(e){let t=e(`name`),n=e(`protocol`)||`HTTP`,r=e(`port`),i=e(`vpcId`),a=e(`healthCheck.protocol`)||`HTTP`,o=e(`healthCheck.path`)||`/`,s=e(`healthCheck.port`)||`traffic-port`,c=e(`healthCheck.intervalSeconds`),l=e(`healthCheck.timeoutSeconds`),u=e(`healthCheck.healthyThresholdCount`),d=e(`healthCheck.unhealthyThresholdCount`),f=e(`healthCheck.matcher`)||`200`,p=[{type:`bin`,value:`AWS_PROFILE=spinifex aws elbv2 create-target-group`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{t as i}from"./back-link-wsXUoJ12.js";import{t as a}from"./cli-command-panel-DavMY-tN.js";import{M as o}from"./ec2-DYgBhYCJ.js";import{i as s}from"./elbv2-D0Z7QbU2.js";import{t as c}from"./page-heading-vksh_67w.js";import{i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{t as p}from"./target-group-form-WUXG3BOb.js";import{a as m}from"./elbv2-DqjEJ4Pi.js";var h=t(),g=e();function _(){let e=(0,h.c)(38),t=r(),{data:_}=n(o),y=s(),b;e[0]===_.Vpcs?b=e[1]:(b=_.Vpcs??[],e[0]=_.Vpcs,e[1]=b);let x=b,S;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(S=u(m),e[2]=S):S=e[2];let C=x[0]?.VpcId??``,w,T;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(w={protocol:`HTTP`,path:`/`,port:`traffic-port`,intervalSeconds:30,timeoutSeconds:5,healthyThresholdCount:5,unhealthyThresholdCount:2,matcher:`200`},T=[],e[3]=w,e[4]=T):(w=e[3],T=e[4]);let E;e[5]===C?E=e[6]:(E={resolver:S,defaultValues:{name:``,protocol:`HTTP`,port:80,vpcId:C,healthCheck:w,tags:T}},e[5]=C,e[6]=E);let D=l(E),{handleSubmit:O,watch:k,formState:A}=D,{isSubmitting:j}=A,M;e[7]!==y||e[8]!==t?(M=async e=>{try{let n=(await y.mutateAsync(e)).TargetGroups?.[0]?.TargetGroupArn;t(n?{to:`/ec2/describe-target-groups/$id`,params:{id:encodeURIComponent(n)}}:{to:`/ec2/describe-target-groups`})}catch{}},e[7]=y,e[8]=t,e[9]=M):M=e[9];let N=M,P,F;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,g.jsx)(i,{to:`/ec2/describe-target-groups`,children:`Back to target groups`}),F=(0,g.jsx)(c,{title:`Create Target Group`}),e[10]=P,e[11]=F):(P=e[10],F=e[11]);let I;e[12]===y.error?I=e[13]:(I=y.error&&(0,g.jsx)(d,{error:y.error,msg:`Failed to create target group`}),e[12]=y.error,e[13]=I);let L;e[14]!==O||e[15]!==N?(L=O(N),e[14]=O,e[15]=N,e[16]=L):L=e[16];let R;e[17]!==D||e[18]!==x?(R=(0,g.jsx)(p,{form:D,vpcs:x}),e[17]=D,e[18]=x,e[19]=R):R=e[19];let z;e[20]===k?z=e[21]:(z=v(k),e[20]=k,e[21]=z);let B;e[22]===z?B=e[23]:(B=(0,g.jsx)(a,{commands:z}),e[22]=z,e[23]=B);let V;e[24]===t?V=e[25]:(V=async()=>{await t({to:`/ec2/describe-target-groups`})},e[24]=t,e[25]=V);let H;e[26]!==y.isPending||e[27]!==j||e[28]!==V?(H=(0,g.jsx)(f,{isPending:y.isPending,isSubmitting:j,onCancel:V,pendingLabel:`Creating…`,submitLabel:`Create Target Group`}),e[26]=y.isPending,e[27]=j,e[28]=V,e[29]=H):H=e[29];let U;e[30]!==L||e[31]!==R||e[32]!==B||e[33]!==H?(U=(0,g.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:L,children:[R,B,H]}),e[30]=L,e[31]=R,e[32]=B,e[33]=H,e[34]=U):U=e[34];let W;return e[35]!==I||e[36]!==U?(W=(0,g.jsxs)(g.Fragment,{children:[P,F,I,U]}),e[35]=I,e[36]=U,e[37]=W):W=e[37],W}function v(e){let t=e(`name`),n=e(`protocol`)||`HTTP`,r=e(`port`),i=e(`vpcId`),a=e(`healthCheck.protocol`)||`HTTP`,o=e(`healthCheck.path`)||`/`,s=e(`healthCheck.port`)||`traffic-port`,c=e(`healthCheck.intervalSeconds`),l=e(`healthCheck.timeoutSeconds`),u=e(`healthCheck.healthyThresholdCount`),d=e(`healthCheck.unhealthyThresholdCount`),f=e(`healthCheck.matcher`)||`200`,p=[{type:`bin`,value:`AWS_PROFILE=spinifex aws elbv2 create-target-group`},{type:`flag`,value:` \\ --name`},{type:`value`,value:` ${t||``}`},{type:`flag`,value:` \\ --protocol`},{type:`value`,value:` ${n}`},{type:`flag`,value:` \\ --port`},{type:`value`,value:` ${r??80}`},{type:`flag`,value:` \\ diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-Bv8sj586.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-vDT-lrk7.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-Bv8sj586.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-vDT-lrk7.js index b18e7772f..8b8e2b5d7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-Bv8sj586.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-user-vDT-lrk7.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{d as o}from"./iam-CKOkzDco.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-DF_n2ejy.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-BUM37An0.js";import{r as p,s as m,t as h}from"./field-c7GHI5st.js";import{o as g}from"./iam-Cgrr-Iit.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-users`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-users`,children:`Back to users`}),N=(0,v.jsx)(s,{title:`Create User`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create user`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`userName`,children:`User Name`})}),e[13]=I):I=e[13];let L=!!E.userName,R;e[14]===C?R=e[15]:(R=C(`userName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`userName`,placeholder:`my-user...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.userName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.userName]}),e[19]=E.userName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-users`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create User`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.userName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-user`},{type:`flag`,value:` --user-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create User`,parts:r}]}export{y as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{d as o}from"./iam-DpkrYySm.js";import{t as s}from"./page-heading-vksh_67w.js";import{a as c,i as l,t as u}from"./zod-A4qtKH_p.js";import{t as d}from"./error-banner-DeOeVBKS.js";import{t as f}from"./form-actions-DXvy9CQI.js";import{r as p,s as m,t as h}from"./field-CS-ql6du.js";import{o as g}from"./iam-DpUWI3xh.js";var _=t(),v=e();function y(){let e=(0,_.c)(53),t=n(),y=o(),x;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(x={resolver:u(g)},e[0]=x):x=e[0];let{handleSubmit:S,register:C,control:w,formState:T}=l(x),{errors:E,isSubmitting:D}=T,O;e[1]===w?O=e[2]:(O={control:w},e[1]=w,e[2]=O);let k=c(O),A;e[3]!==y||e[4]!==t?(A=async e=>{await y.mutateAsync(e),t({to:`/iam/list-users`})},e[3]=y,e[4]=t,e[5]=A):A=e[5];let j=A,M,N;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,v.jsx)(r,{to:`/iam/list-users`,children:`Back to users`}),N=(0,v.jsx)(s,{title:`Create User`}),e[6]=M,e[7]=N):(M=e[6],N=e[7]);let P;e[8]===y.error?P=e[9]:(P=y.error&&(0,v.jsx)(d,{error:y.error,msg:`Failed to create user`}),e[8]=y.error,e[9]=P);let F;e[10]!==S||e[11]!==j?(F=S(j),e[10]=S,e[11]=j,e[12]=F):F=e[12];let I;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`userName`,children:`User Name`})}),e[13]=I):I=e[13];let L=!!E.userName,R;e[14]===C?R=e[15]:(R=C(`userName`),e[14]=C,e[15]=R);let z;e[16]!==R||e[17]!==L?(z=(0,v.jsx)(a,{"aria-invalid":L,id:`userName`,placeholder:`my-user...`,...R}),e[16]=R,e[17]=L,e[18]=z):z=e[18];let B;e[19]===E.userName?B=e[20]:(B=(0,v.jsx)(p,{errors:[E.userName]}),e[19]=E.userName,e[20]=B);let V;e[21]!==z||e[22]!==B?(V=(0,v.jsxs)(h,{children:[I,z,B]}),e[21]=z,e[22]=B,e[23]=V):V=e[23];let H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,v.jsx)(m,{children:(0,v.jsx)(`label`,{htmlFor:`path`,children:`Path (optional)`})}),e[24]=H):H=e[24];let U;e[25]===C?U=e[26]:(U=C(`path`),e[25]=C,e[26]=U);let W;e[27]===U?W=e[28]:(W=(0,v.jsx)(a,{id:`path`,placeholder:`/`,...U}),e[27]=U,e[28]=W);let G;e[29]===E.path?G=e[30]:(G=(0,v.jsx)(p,{errors:[E.path]}),e[29]=E.path,e[30]=G);let K;e[31]!==W||e[32]!==G?(K=(0,v.jsxs)(h,{children:[H,W,G]}),e[31]=W,e[32]=G,e[33]=K):K=e[33];let q;e[34]===k?q=e[35]:(q=b(k),e[34]=k,e[35]=q);let J;e[36]===q?J=e[37]:(J=(0,v.jsx)(i,{commands:q}),e[36]=q,e[37]=J);let Y;e[38]===t?Y=e[39]:(Y=async()=>{await t({to:`/iam/list-users`})},e[38]=t,e[39]=Y);let X;e[40]!==y.isPending||e[41]!==D||e[42]!==Y?(X=(0,v.jsx)(f,{isPending:y.isPending,isSubmitting:D,onCancel:Y,pendingLabel:`Creating...`,submitLabel:`Create User`}),e[40]=y.isPending,e[41]=D,e[42]=Y,e[43]=X):X=e[43];let Z;e[44]!==V||e[45]!==K||e[46]!==J||e[47]!==X||e[48]!==F?(Z=(0,v.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:F,children:[V,K,J,X]}),e[44]=V,e[45]=K,e[46]=J,e[47]=X,e[48]=F,e[49]=Z):Z=e[49];let Q;return e[50]!==Z||e[51]!==P?(Q=(0,v.jsxs)(v.Fragment,{children:[M,N,P,Z]}),e[50]=Z,e[51]=P,e[52]=Q):Q=e[52],Q}function b(e){let t=e.userName??``,n=e.path??``,r=[{type:`bin`,value:`AWS_PROFILE=spinifex aws iam create-user`},{type:`flag`,value:` --user-name`},{type:`value`,value:` ${t||``}`}];return n&&n!==`/`&&r.push({type:`flag`,value:` --path`},{type:`value`,value:` ${n}`}),[{label:`Create User`,parts:r}]}export{y as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-BamGr8Qm.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-_mFhkjRH.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-BamGr8Qm.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-_mFhkjRH.js index a1ba87c04..6583dd3c2 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-BamGr8Qm.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-volume-_mFhkjRH.js @@ -1,3 +1,3 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-BH3pQKLF.js";import{t as i}from"./back-link-CjKy1JE5.js";import{c as ee,i as a,n as o,s,t as c}from"./select-B01jpDaX.js";import{t as l}from"./cli-command-panel-CLiFy1rG.js";import{t as te}from"./input-6kdUb_DH.js";import{r as ne}from"./ec2-CWEplLq4.js";import{w as re}from"./ec2-Ctto2xjU.js";import{t as ie}from"./page-heading-vksh_67w.js";import{i as ae,n as oe,t as se}from"./zod-DF_n2ejy.js";import{t as ce}from"./error-banner-DeOeVBKS.js";import{t as le}from"./form-actions-BUM37An0.js";import{r as u,s as d,t as f}from"./field-c7GHI5st.js";import{g as p}from"./ec2-DhWukC79.js";var m=t(),h=e();function g(){let e=(0,m.c)(57),t=r(),{data:a}=n(ne),g=re(),y;e[0]===a.AvailabilityZones?y=e[1]:(y=a.AvailabilityZones??[],e[0]=a.AvailabilityZones,e[1]=y);let b=y,x=b[0]?.ZoneName??``,S;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(S=se(p),e[2]=S):S=e[2];let C;e[3]===x?C=e[4]:(C={resolver:S,defaultValues:{size:1,availabilityZone:x}},e[3]=x,e[4]=C);let{control:w,handleSubmit:T,register:E,watch:D,formState:O}=ae(C),{errors:k,isSubmitting:A}=O,j;e[5]!==g||e[6]!==t?(j=async e=>{await g.mutateAsync(e),t({to:`/ec2/describe-volumes`})},e[5]=g,e[6]=t,e[7]=j):j=e[7];let M=j,N,P;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,h.jsx)(i,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),P=(0,h.jsx)(ie,{title:`Create Volume`}),e[8]=N,e[9]=P):(N=e[8],P=e[9]);let F;e[10]===g.error?F=e[11]:(F=g.error&&(0,h.jsx)(ce,{error:g.error,msg:`Failed to create volume`}),e[10]=g.error,e[11]=F);let I;e[12]!==T||e[13]!==M?(I=T(M),e[12]=T,e[13]=M,e[14]=I):I=e[14];let L;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`size`,children:`Size (GiB)`})}),e[15]=L):L=e[15];let R=!!k.size,z;e[16]===E?z=e[17]:(z=E(`size`,{valueAsNumber:!0}),e[16]=E,e[17]=z);let B;e[18]!==R||e[19]!==z?(B=(0,h.jsx)(te,{"aria-invalid":R,id:`size`,max:16384,min:1,type:`number`,...z}),e[18]=R,e[19]=z,e[20]=B):B=e[20];let V;e[21]===k.size?V=e[22]:(V=(0,h.jsx)(u,{errors:[k.size]}),e[21]=k.size,e[22]=V);let H;e[23]!==B||e[24]!==V?(H=(0,h.jsxs)(f,{children:[L,B,V]}),e[23]=B,e[24]=V,e[25]=H):H=e[25];let U;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`availabilityZone`,children:`Availability Zone`})}),e[26]=U):U=e[26];let W;e[27]!==b||e[28]!==k.availabilityZone?(W=e=>{let{field:t}=e;return(0,h.jsxs)(c,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,h.jsx)(s,{"aria-invalid":!!k.availabilityZone,className:`w-full`,id:`availabilityZone`,children:(0,h.jsx)(ee,{})}),(0,h.jsx)(o,{children:b.map(_)})]})},e[27]=b,e[28]=k.availabilityZone,e[29]=W):W=e[29];let G;e[30]!==w||e[31]!==W?(G=(0,h.jsx)(oe,{control:w,name:`availabilityZone`,render:W}),e[30]=w,e[31]=W,e[32]=G):G=e[32];let K;e[33]===k.availabilityZone?K=e[34]:(K=(0,h.jsx)(u,{errors:[k.availabilityZone]}),e[33]=k.availabilityZone,e[34]=K);let q;e[35]!==G||e[36]!==K?(q=(0,h.jsxs)(f,{children:[U,G,K]}),e[35]=G,e[36]=K,e[37]=q):q=e[37];let J;e[38]===D?J=e[39]:(J=v(D),e[38]=D,e[39]=J);let Y;e[40]===J?Y=e[41]:(Y=(0,h.jsx)(l,{commands:J}),e[40]=J,e[41]=Y);let X;e[42]===t?X=e[43]:(X=async()=>{await t({to:`/ec2/describe-volumes`})},e[42]=t,e[43]=X);let Z;e[44]!==g.isPending||e[45]!==A||e[46]!==X?(Z=(0,h.jsx)(le,{isPending:g.isPending,isSubmitting:A,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Volume`}),e[44]=g.isPending,e[45]=A,e[46]=X,e[47]=Z):Z=e[47];let Q;e[48]!==H||e[49]!==q||e[50]!==Y||e[51]!==Z||e[52]!==I?(Q=(0,h.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:I,children:[H,q,Y,Z]}),e[48]=H,e[49]=q,e[50]=Y,e[51]=Z,e[52]=I,e[53]=Q):Q=e[53];let $;return e[54]!==Q||e[55]!==F?($=(0,h.jsxs)(h.Fragment,{children:[N,P,F,Q]}),e[54]=Q,e[55]=F,e[56]=$):$=e[56],$}function _(e){return(0,h.jsx)(a,{value:e.ZoneName??``,children:e.ZoneName},e.ZoneName)}function v(e){let t=e(`size`),n=e(`availabilityZone`);return[{label:`Create Volume`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-volume`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./useNavigate-CTe_-BZA.js";import{t as i}from"./back-link-wsXUoJ12.js";import{c as ee,i as a,n as o,s,t as c}from"./select-Cn66OoPn.js";import{t as l}from"./cli-command-panel-DavMY-tN.js";import{t as te}from"./input-D3aUBtS6.js";import{r as ne}from"./ec2-DYgBhYCJ.js";import{w as re}from"./ec2-Csn1kwZ8.js";import{t as ie}from"./page-heading-vksh_67w.js";import{i as ae,n as oe,t as se}from"./zod-A4qtKH_p.js";import{t as ce}from"./error-banner-DeOeVBKS.js";import{t as le}from"./form-actions-DXvy9CQI.js";import{r as u,s as d,t as f}from"./field-CS-ql6du.js";import{g as p}from"./ec2-DqNqPeiA.js";var m=t(),h=e();function g(){let e=(0,m.c)(57),t=r(),{data:a}=n(ne),g=re(),y;e[0]===a.AvailabilityZones?y=e[1]:(y=a.AvailabilityZones??[],e[0]=a.AvailabilityZones,e[1]=y);let b=y,x=b[0]?.ZoneName??``,S;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(S=se(p),e[2]=S):S=e[2];let C;e[3]===x?C=e[4]:(C={resolver:S,defaultValues:{size:1,availabilityZone:x}},e[3]=x,e[4]=C);let{control:w,handleSubmit:T,register:E,watch:D,formState:O}=ae(C),{errors:k,isSubmitting:A}=O,j;e[5]!==g||e[6]!==t?(j=async e=>{await g.mutateAsync(e),t({to:`/ec2/describe-volumes`})},e[5]=g,e[6]=t,e[7]=j):j=e[7];let M=j,N,P;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,h.jsx)(i,{to:`/ec2/describe-volumes`,children:`Back to volumes`}),P=(0,h.jsx)(ie,{title:`Create Volume`}),e[8]=N,e[9]=P):(N=e[8],P=e[9]);let F;e[10]===g.error?F=e[11]:(F=g.error&&(0,h.jsx)(ce,{error:g.error,msg:`Failed to create volume`}),e[10]=g.error,e[11]=F);let I;e[12]!==T||e[13]!==M?(I=T(M),e[12]=T,e[13]=M,e[14]=I):I=e[14];let L;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`size`,children:`Size (GiB)`})}),e[15]=L):L=e[15];let R=!!k.size,z;e[16]===E?z=e[17]:(z=E(`size`,{valueAsNumber:!0}),e[16]=E,e[17]=z);let B;e[18]!==R||e[19]!==z?(B=(0,h.jsx)(te,{"aria-invalid":R,id:`size`,max:16384,min:1,type:`number`,...z}),e[18]=R,e[19]=z,e[20]=B):B=e[20];let V;e[21]===k.size?V=e[22]:(V=(0,h.jsx)(u,{errors:[k.size]}),e[21]=k.size,e[22]=V);let H;e[23]!==B||e[24]!==V?(H=(0,h.jsxs)(f,{children:[L,B,V]}),e[23]=B,e[24]=V,e[25]=H):H=e[25];let U;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:`availabilityZone`,children:`Availability Zone`})}),e[26]=U):U=e[26];let W;e[27]!==b||e[28]!==k.availabilityZone?(W=e=>{let{field:t}=e;return(0,h.jsxs)(c,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,h.jsx)(s,{"aria-invalid":!!k.availabilityZone,className:`w-full`,id:`availabilityZone`,children:(0,h.jsx)(ee,{})}),(0,h.jsx)(o,{children:b.map(_)})]})},e[27]=b,e[28]=k.availabilityZone,e[29]=W):W=e[29];let G;e[30]!==w||e[31]!==W?(G=(0,h.jsx)(oe,{control:w,name:`availabilityZone`,render:W}),e[30]=w,e[31]=W,e[32]=G):G=e[32];let K;e[33]===k.availabilityZone?K=e[34]:(K=(0,h.jsx)(u,{errors:[k.availabilityZone]}),e[33]=k.availabilityZone,e[34]=K);let q;e[35]!==G||e[36]!==K?(q=(0,h.jsxs)(f,{children:[U,G,K]}),e[35]=G,e[36]=K,e[37]=q):q=e[37];let J;e[38]===D?J=e[39]:(J=v(D),e[38]=D,e[39]=J);let Y;e[40]===J?Y=e[41]:(Y=(0,h.jsx)(l,{commands:J}),e[40]=J,e[41]=Y);let X;e[42]===t?X=e[43]:(X=async()=>{await t({to:`/ec2/describe-volumes`})},e[42]=t,e[43]=X);let Z;e[44]!==g.isPending||e[45]!==A||e[46]!==X?(Z=(0,h.jsx)(le,{isPending:g.isPending,isSubmitting:A,onCancel:X,pendingLabel:`Creating…`,submitLabel:`Create Volume`}),e[44]=g.isPending,e[45]=A,e[46]=X,e[47]=Z):Z=e[47];let Q;e[48]!==H||e[49]!==q||e[50]!==Y||e[51]!==Z||e[52]!==I?(Q=(0,h.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:I,children:[H,q,Y,Z]}),e[48]=H,e[49]=q,e[50]=Y,e[51]=Z,e[52]=I,e[53]=Q):Q=e[53];let $;return e[54]!==Q||e[55]!==F?($=(0,h.jsxs)(h.Fragment,{children:[N,P,F,Q]}),e[54]=Q,e[55]=F,e[56]=$):$=e[56],$}function _(e){return(0,h.jsx)(a,{value:e.ZoneName??``,children:e.ZoneName},e.ZoneName)}function v(e){let t=e(`size`),n=e(`availabilityZone`);return[{label:`Create Volume`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-volume`},{type:`flag`,value:` \\ --size`},{type:`value`,value:` ${t||1}`},{type:`flag`,value:` \\ --availability-zone`},{type:`value`,value:` ${n||``}`}]}]}export{g as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-CyDH_vpB.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-D5-RWY8E.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-CyDH_vpB.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-D5-RWY8E.js index b48f2bec8..7b4f9b97e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-CyDH_vpB.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/create-vpc-D5-RWY8E.js @@ -1,4 +1,4 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{t as a}from"./back-link-CjKy1JE5.js";import{t as o}from"./chevron-down-Dt4q6d24.js";import{t as s}from"./chevron-right-c57whaks.js";import{c,i as l,n as u,s as d,t as f}from"./select-B01jpDaX.js";import{t as p}from"./cli-command-panel-CLiFy1rG.js";import{t as m}from"./button-BarTr35m.js";import{t as ee}from"./input-6kdUb_DH.js";import{E as h,T as g}from"./ec2-Ctto2xjU.js";import{t as te}from"./page-heading-vksh_67w.js";import{a as ne,i as re,n as _,t as ie}from"./zod-DF_n2ejy.js";import{t as ae}from"./error-banner-DeOeVBKS.js";import{t as oe}from"./form-actions-BUM37An0.js";import{r as se,s as v,t as y}from"./field-c7GHI5st.js";import{t as ce}from"./subnet-calculator-BlCTyGtY.js";import{_ as le}from"./ec2-DhWukC79.js";var ue=r(),de=t(n(),1),b=e();function fe(e){let t=(0,ue.c)(18),{form:n,type:r,count:i,defaults:a}=e,[c,l]=(0,de.useState)(!1),u=r===`public`?`publicSubnetCidrs`:`privateSubnetCidrs`;if(i===0)return null;let d;t[0]===c?d=t[1]:(d=()=>{l(!c)},t[0]=c,t[1]=d);let f;t[2]===c?f=t[3]:(f=c?(0,b.jsx)(o,{className:`size-3`}):(0,b.jsx)(s,{className:`size-3`}),t[2]=c,t[3]=f);let p;t[4]!==d||t[5]!==f||t[6]!==r?(p=(0,b.jsxs)(m,{className:`gap-1 px-0 text-xs text-muted-foreground`,onClick:d,type:`button`,variant:`link`,children:[f,`Customize `,r,` subnet CIDR blocks`]}),t[4]=d,t[5]=f,t[6]=r,t[7]=p):p=t[7];let h;t[8]!==i||t[9]!==a||t[10]!==c||t[11]!==u||t[12]!==n||t[13]!==r?(h=c&&(0,b.jsx)(`div`,{className:`mt-2 space-y-2`,children:Array.from({length:i},(e,t)=>(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(`span`,{className:`w-32 text-xs text-muted-foreground`,children:[r===`public`?`Public`:`Private`,` subnet `,t+1]}),(0,b.jsx)(ee,{defaultValue:a[t],placeholder:a[t],...n.register(`${u}.${t}`)})]},t))}),t[8]=i,t[9]=a,t[10]=c,t[11]=u,t[12]=n,t[13]=r,t[14]=h):h=t[14];let g;return t[15]!==p||t[16]!==h?(g=(0,b.jsxs)(`div`,{className:`mt-2`,children:[p,h]}),t[15]=p,t[16]=h,t[17]=g):g=t[17],g}function x(e){let t=(0,ue.c)(8),{label:n,cidr:r,variant:i}=e,a=`rounded-md border px-3 py-2 text-xs ${i===`public`?`border-emerald-500/30 bg-emerald-500/10`:`border-blue-500/30 bg-blue-500/10`}`,o;t[0]===n?o=t[1]:(o=(0,b.jsx)(`div`,{className:`font-medium`,children:n}),t[0]=n,t[1]=o);let s;t[2]===r?s=t[3]:(s=(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:r}),t[2]=r,t[3]=s);let c;return t[4]!==a||t[5]!==o||t[6]!==s?(c=(0,b.jsxs)(`div`,{className:a,children:[o,s]}),t[4]=a,t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function pe(e){let t=(0,ue.c)(14),{mode:n,vpcCidr:r,publicSubnets:i,privateSubnets:a,hasIgw:o}=e,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,b.jsx)(`h3`,{className:`mb-3 text-xs font-semibold tracking-wider text-muted-foreground uppercase`,children:`Preview`}),t[0]=s):s=t[0];let c;t[1]===r?c=t[2]:(c=(0,b.jsxs)(`div`,{className:`mb-3 text-xs font-medium`,children:[`VPC `,(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,r,`)`]})]}),t[1]=r,t[2]=c);let l;t[3]!==o||t[4]!==n||t[5]!==a||t[6]!==i?(l=n===`vpc-and-more`&&(0,b.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-3`,children:[(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Subnets`}),i.map(S),a.map(me),i.length===0&&a.length===0&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`No subnets`})]}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Route Tables`}),i.length>0&&(0,b.jsxs)(`div`,{className:`rounded-md border border-foreground/10 bg-background px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Public Route Table`}),(0,b.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`0.0.0.0/0 → IGW`}),(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:`local`})]}),a.length>0&&(0,b.jsxs)(`div`,{className:`rounded-md border border-foreground/10 bg-background px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Private Route Table`}),(0,b.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`local`})]})]}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Network Connections`}),o&&(0,b.jsxs)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Internet Gateway`}),(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:`Attached to VPC`})]}),!o&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`No internet gateway`})]})]}),t[3]=o,t[4]=n,t[5]=a,t[6]=i,t[7]=l):l=t[7];let u;t[8]===n?u=t[9]:(u=n===`vpc-only`&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`VPC only — no additional resources will be created.`}),t[8]=n,t[9]=u);let d;return t[10]!==c||t[11]!==l||t[12]!==u?(d=(0,b.jsxs)(`div`,{className:`rounded-lg border bg-muted/30 p-4`,children:[s,(0,b.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed border-foreground/20 p-4`,children:[c,l,u]})]}),t[10]=c,t[11]=l,t[12]=u,t[13]=d):d=t[13],d}function me(e){return(0,b.jsx)(x,{cidr:e.cidr,label:e.label,variant:`private`},e.cidr)}function S(e){return(0,b.jsx)(x,{cidr:e.cidr,label:e.label,variant:`public`},e.cidr)}var he=[0,1],C=[0,1,2];function w(){let e=(0,ue.c)(86),t=i(),n=g(),r=h(),[o,s]=(0,de.useState)(null),c;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=ie(le),e[0]=c):c=e[0];let l;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(l={resolver:c,defaultValues:{mode:`vpc-only`,namePrefix:``,autoGenerateNames:!0,cidrBlock:`10.0.0.0/16`,tenancy:`default`,natGateway:`none`,publicSubnetCount:1,privateSubnetCount:1,publicSubnetCidrs:[],privateSubnetCidrs:[],tags:[]}},e[1]=l):l=e[1];let u=re(l),{handleSubmit:d,register:f,watch:m,control:x,formState:me}=u,{errors:S,isSubmitting:he}=me,C;e[2]===x?C=e[3]:(C={control:x,name:`mode`},e[2]=x,e[3]=C);let w=ne(C),T;e[4]===x?T=e[5]:(T={control:x,name:`cidrBlock`},e[4]=x,e[5]=T);let Ee=ne(T),E;e[6]===x?E=e[7]:(E={control:x,name:`publicSubnetCount`},e[6]=x,e[7]=E);let D=ne(E),O;e[8]===x?O=e[9]:(O={control:x,name:`privateSubnetCount`},e[8]=x,e[9]=O);let De=ne(O),k=ce(Ee||`10.0.0.0/16`,w===`vpc-and-more`?D:0,w===`vpc-and-more`?De:0),[Oe,ke]=(0,de.useState)(``),Ae;e[10]!==n||e[11]!==t||e[12]!==r?(Ae=async e=>{if(s(null),e.mode===`vpc-only`){let r=e.autoGenerateNames&&e.namePrefix?`${e.namePrefix}-vpc`:e.namePrefix,i=(await n.mutateAsync({cidrBlock:e.cidrBlock,name:r||void 0})).Vpc?.VpcId;t(i?{to:`/ec2/describe-vpcs/$id`,params:{id:i}}:{to:`/ec2/describe-vpcs`});return}ke(`Creating VPC and resources...`);let i=await r.mutateAsync(e);s(i),!i.error&&i.vpcId&&t({to:`/ec2/describe-vpcs/$id`,params:{id:i.vpcId}}),ke(``)},e[10]=n,e[11]=t,e[12]=r,e[13]=Ae):Ae=e[13];let je=Ae,Me=n.error??r.error,Ne=n.isPending||r.isPending,A,j;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,b.jsx)(a,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),j=(0,b.jsx)(te,{title:`Create VPC`}),e[14]=A,e[15]=j):(A=e[14],j=e[15]);let M;e[16]===Me?M=e[17]:(M=Me&&(0,b.jsx)(ae,{error:Me,msg:`Failed to create VPC`}),e[16]=Me,e[17]=M);let N;e[18]===o?N=e[19]:(N=o?.error&&(0,b.jsxs)(`div`,{className:`mb-6 max-w-4xl rounded-md border border-destructive bg-destructive/10 p-4`,children:[(0,b.jsxs)(`h2`,{className:`text-sm font-medium text-destructive`,children:[`Wizard failed: `,o.failedStep]}),(0,b.jsx)(`p`,{className:`mt-1 text-sm text-destructive`,children:o.error.message}),o.created.length>0&&(0,b.jsxs)(`div`,{className:`mt-3`,children:[(0,b.jsx)(`p`,{className:`text-xs font-medium text-destructive`,children:`Successfully created resources:`}),(0,b.jsx)(`ul`,{className:`mt-1 list-inside list-disc text-xs text-destructive`,children:o.created.map(we)})]})]}),e[18]=o,e[19]=N);let P;e[20]===Oe?P=e[21]:(P=Oe&&(0,b.jsx)(`div`,{className:`mb-4 max-w-4xl text-sm text-muted-foreground`,children:Oe}),e[20]=Oe,e[21]=P);let F;e[22]!==d||e[23]!==je?(F=d(je),e[22]=d,e[23]=je,e[24]=F):F=e[24];let Pe;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(Pe=(0,b.jsx)(v,{children:`Resources to create`}),e[25]=Pe):Pe=e[25];let I;e[26]===x?I=e[27]:(I=(0,b.jsxs)(y,{children:[Pe,(0,b.jsx)(_,{control:x,name:`mode`,render:Ce})]}),e[26]=x,e[27]=I);let L;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,b.jsx)(v,{children:(0,b.jsx)(`label`,{htmlFor:`namePrefix`,children:`Name tag auto-generation`})}),e[28]=L):L=e[28];let R;e[29]===f?R=e[30]:(R=f(`namePrefix`),e[29]=f,e[30]=R);let z;e[31]===R?z=e[32]:(z=(0,b.jsx)(ee,{id:`namePrefix`,placeholder:`project`,...R}),e[31]=R,e[32]=z);let B;e[33]===x?B=e[34]:(B=(0,b.jsx)(_,{control:x,name:`autoGenerateNames`,render:Se}),e[33]=x,e[34]=B);let V;e[35]!==z||e[36]!==B?(V=(0,b.jsxs)(y,{children:[L,(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[z,B]})]}),e[35]=z,e[36]=B,e[37]=V):V=e[37];let H;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,b.jsx)(v,{children:(0,b.jsx)(`label`,{htmlFor:`cidrBlock`,children:`IPv4 CIDR block`})}),e[38]=H):H=e[38];let Fe=!!S.cidrBlock,U;e[39]===f?U=e[40]:(U=f(`cidrBlock`),e[39]=f,e[40]=U);let W;e[41]!==Fe||e[42]!==U?(W=(0,b.jsx)(ee,{"aria-invalid":Fe,id:`cidrBlock`,placeholder:`10.0.0.0/16`,...U}),e[41]=Fe,e[42]=U,e[43]=W):W=e[43];let G;e[44]===S.cidrBlock?G=e[45]:(G=(0,b.jsx)(se,{errors:[S.cidrBlock]}),e[44]=S.cidrBlock,e[45]=G);let K;e[46]!==W||e[47]!==G?(K=(0,b.jsxs)(y,{children:[H,W,G]}),e[46]=W,e[47]=G,e[48]=K):K=e[48];let Ie;e[49]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,b.jsx)(v,{children:`Tenancy`}),e[49]=Ie):Ie=e[49];let q;e[50]===x?q=e[51]:(q=(0,b.jsxs)(y,{children:[Ie,(0,b.jsx)(_,{control:x,name:`tenancy`,render:xe})]}),e[50]=x,e[51]=q);let Le=w===`vpc-and-more`&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`Number of public subnets`}),(0,b.jsx)(_,{control:x,name:`publicSubnetCount`,render:be}),(0,b.jsx)(fe,{count:D,defaults:k.publicSubnets.map(ye),form:u,type:`public`})]}),(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`Number of private subnets`}),(0,b.jsx)(_,{control:x,name:`privateSubnetCount`,render:ve}),(0,b.jsx)(fe,{count:De,defaults:k.privateSubnets.map(_e),form:u,type:`private`})]}),D>0&&De>0&&(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`NAT gateways`}),(0,b.jsx)(_,{control:x,name:`natGateway`,render:ge}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Creates an Elastic IP + NAT gateway in the public subnet and routes private subnet egress (0.0.0.0/0) through it.`})]})]}),Re=p,ze=Te(m,k),J;e[52]!==Re||e[53]!==ze?(J=(0,b.jsx)(Re,{commands:ze}),e[52]=Re,e[53]=ze,e[54]=J):J=e[54];let Y;e[55]===t?Y=e[56]:(Y=async()=>{await t({to:`/ec2/describe-vpcs`})},e[55]=t,e[56]=Y);let X;e[57]!==Ne||e[58]!==he||e[59]!==Y?(X=(0,b.jsx)(oe,{isPending:Ne,isSubmitting:he,onCancel:Y,pendingLabel:`Creating…`,submitLabel:`Create VPC`}),e[57]=Ne,e[58]=he,e[59]=Y,e[60]=X):X=e[60];let Z;e[61]!==F||e[62]!==I||e[63]!==V||e[64]!==K||e[65]!==q||e[66]!==Le||e[67]!==J||e[68]!==X?(Z=(0,b.jsxs)(`form`,{className:`min-w-0 flex-1 space-y-6`,onSubmit:F,children:[I,V,K,q,Le,J,X]}),e[61]=F,e[62]=I,e[63]=V,e[64]=K,e[65]=q,e[66]=Le,e[67]=J,e[68]=X,e[69]=Z):Z=e[69];let Be=w===`vpc-and-more`&&D>0,Ve=Ee||`10.0.0.0/16`,Q;e[70]!==w||e[71]!==k.privateSubnets||e[72]!==k.publicSubnets||e[73]!==Be||e[74]!==Ve?(Q=(0,b.jsx)(`div`,{className:`hidden min-w-0 flex-1 lg:block`,children:(0,b.jsx)(pe,{hasIgw:Be,mode:w,privateSubnets:k.privateSubnets,publicSubnets:k.publicSubnets,vpcCidr:Ve})}),e[70]=w,e[71]=k.privateSubnets,e[72]=k.publicSubnets,e[73]=Be,e[74]=Ve,e[75]=Q):Q=e[75];let $;e[76]!==Z||e[77]!==Q?($=(0,b.jsxs)(`div`,{className:`flex max-w-6xl gap-8`,children:[Z,Q]}),e[76]=Z,e[77]=Q,e[78]=$):$=e[78];let He;return e[79]!==M||e[80]!==N||e[81]!==P||e[82]!==$||e[83]!==A||e[84]!==j?(He=(0,b.jsxs)(b.Fragment,{children:[A,j,M,N,P,$]}),e[79]=M,e[80]=N,e[81]=P,e[82]=$,e[83]=A,e[84]=j,e[85]=He):He=e[85],He}function ge(e){let{field:t}=e;return(0,b.jsxs)(f,{onValueChange:t.onChange,value:t.value??`none`,children:[(0,b.jsx)(d,{id:`natGateway`,children:(0,b.jsx)(c,{})}),(0,b.jsxs)(u,{children:[(0,b.jsx)(l,{value:`none`,children:`None`}),(0,b.jsx)(l,{value:`single`,children:`In 1 AZ`})]})]})}function _e(e){return e.cidr}function ve(e){let{field:t}=e;return(0,b.jsx)(`div`,{className:`flex gap-1`,children:C.map(e=>(0,b.jsx)(m,{onClick:()=>{t.onChange(e)},size:`sm`,type:`button`,variant:t.value===e?`default`:`outline`,children:e},e))})}function ye(e){return e.cidr}function be(e){let{field:t}=e;return(0,b.jsx)(`div`,{className:`flex gap-1`,children:he.map(e=>(0,b.jsx)(m,{onClick:()=>{t.onChange(e)},size:`sm`,type:`button`,variant:t.value===e?`default`:`outline`,children:e},e))})}function xe(e){let{field:t}=e;return(0,b.jsxs)(f,{onValueChange:t.onChange,value:t.value,children:[(0,b.jsx)(d,{id:`tenancy`,children:(0,b.jsx)(c,{})}),(0,b.jsxs)(u,{children:[(0,b.jsx)(l,{value:`default`,children:`default`}),(0,b.jsx)(l,{value:`dedicated`,children:`dedicated`})]})]})}function Se(e){let{field:t}=e;return(0,b.jsxs)(`label`,{className:`flex shrink-0 items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`Auto-generate name tags`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Auto-generate`]})}function Ce(e){let{field:t}=e;return(0,b.jsxs)(`div`,{className:`flex gap-4`,children:[(0,b.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`VPC only`,checked:t.value===`vpc-only`,name:`mode`,onChange:()=>{t.onChange(`vpc-only`)},type:`radio`}),`VPC only`]}),(0,b.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`VPC and more`,checked:t.value===`vpc-and-more`,name:`mode`,onChange:()=>{t.onChange(`vpc-and-more`)},type:`radio`}),`VPC and more`]})]})}function we(e,t){return(0,b.jsxs)(`li`,{children:[e.type,`: `,e.id]},t)}function Te(e,t){let n=e(`mode`),r=e(`cidrBlock`),i=e(`tenancy`),a=e(`natGateway`);if(n===`vpc-only`){let e=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-vpc`},{type:`flag`,value:` \\ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{t as a}from"./back-link-wsXUoJ12.js";import{t as o}from"./chevron-down-Dt4q6d24.js";import{t as s}from"./chevron-right-c57whaks.js";import{c,i as l,n as u,s as d,t as f}from"./select-Cn66OoPn.js";import{t as p}from"./cli-command-panel-DavMY-tN.js";import{t as m}from"./button-qf9lLJ2x.js";import{t as ee}from"./input-D3aUBtS6.js";import{E as h,T as g}from"./ec2-Csn1kwZ8.js";import{t as te}from"./page-heading-vksh_67w.js";import{a as ne,i as re,n as _,t as ie}from"./zod-A4qtKH_p.js";import{t as ae}from"./error-banner-DeOeVBKS.js";import{t as oe}from"./form-actions-DXvy9CQI.js";import{r as se,s as v,t as y}from"./field-CS-ql6du.js";import{t as ce}from"./subnet-calculator-BlCTyGtY.js";import{_ as le}from"./ec2-DqNqPeiA.js";var ue=r(),de=t(n(),1),b=e();function fe(e){let t=(0,ue.c)(18),{form:n,type:r,count:i,defaults:a}=e,[c,l]=(0,de.useState)(!1),u=r===`public`?`publicSubnetCidrs`:`privateSubnetCidrs`;if(i===0)return null;let d;t[0]===c?d=t[1]:(d=()=>{l(!c)},t[0]=c,t[1]=d);let f;t[2]===c?f=t[3]:(f=c?(0,b.jsx)(o,{className:`size-3`}):(0,b.jsx)(s,{className:`size-3`}),t[2]=c,t[3]=f);let p;t[4]!==d||t[5]!==f||t[6]!==r?(p=(0,b.jsxs)(m,{className:`gap-1 px-0 text-xs text-muted-foreground`,onClick:d,type:`button`,variant:`link`,children:[f,`Customize `,r,` subnet CIDR blocks`]}),t[4]=d,t[5]=f,t[6]=r,t[7]=p):p=t[7];let h;t[8]!==i||t[9]!==a||t[10]!==c||t[11]!==u||t[12]!==n||t[13]!==r?(h=c&&(0,b.jsx)(`div`,{className:`mt-2 space-y-2`,children:Array.from({length:i},(e,t)=>(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(`span`,{className:`w-32 text-xs text-muted-foreground`,children:[r===`public`?`Public`:`Private`,` subnet `,t+1]}),(0,b.jsx)(ee,{defaultValue:a[t],placeholder:a[t],...n.register(`${u}.${t}`)})]},t))}),t[8]=i,t[9]=a,t[10]=c,t[11]=u,t[12]=n,t[13]=r,t[14]=h):h=t[14];let g;return t[15]!==p||t[16]!==h?(g=(0,b.jsxs)(`div`,{className:`mt-2`,children:[p,h]}),t[15]=p,t[16]=h,t[17]=g):g=t[17],g}function x(e){let t=(0,ue.c)(8),{label:n,cidr:r,variant:i}=e,a=`rounded-md border px-3 py-2 text-xs ${i===`public`?`border-emerald-500/30 bg-emerald-500/10`:`border-blue-500/30 bg-blue-500/10`}`,o;t[0]===n?o=t[1]:(o=(0,b.jsx)(`div`,{className:`font-medium`,children:n}),t[0]=n,t[1]=o);let s;t[2]===r?s=t[3]:(s=(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:r}),t[2]=r,t[3]=s);let c;return t[4]!==a||t[5]!==o||t[6]!==s?(c=(0,b.jsxs)(`div`,{className:a,children:[o,s]}),t[4]=a,t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function pe(e){let t=(0,ue.c)(14),{mode:n,vpcCidr:r,publicSubnets:i,privateSubnets:a,hasIgw:o}=e,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,b.jsx)(`h3`,{className:`mb-3 text-xs font-semibold tracking-wider text-muted-foreground uppercase`,children:`Preview`}),t[0]=s):s=t[0];let c;t[1]===r?c=t[2]:(c=(0,b.jsxs)(`div`,{className:`mb-3 text-xs font-medium`,children:[`VPC `,(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,r,`)`]})]}),t[1]=r,t[2]=c);let l;t[3]!==o||t[4]!==n||t[5]!==a||t[6]!==i?(l=n===`vpc-and-more`&&(0,b.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-3`,children:[(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Subnets`}),i.map(S),a.map(me),i.length===0&&a.length===0&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`No subnets`})]}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Route Tables`}),i.length>0&&(0,b.jsxs)(`div`,{className:`rounded-md border border-foreground/10 bg-background px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Public Route Table`}),(0,b.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`0.0.0.0/0 → IGW`}),(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:`local`})]}),a.length>0&&(0,b.jsxs)(`div`,{className:`rounded-md border border-foreground/10 bg-background px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Private Route Table`}),(0,b.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`local`})]})]}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`Network Connections`}),o&&(0,b.jsxs)(`div`,{className:`rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:`Internet Gateway`}),(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:`Attached to VPC`})]}),!o&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`No internet gateway`})]})]}),t[3]=o,t[4]=n,t[5]=a,t[6]=i,t[7]=l):l=t[7];let u;t[8]===n?u=t[9]:(u=n===`vpc-only`&&(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`VPC only — no additional resources will be created.`}),t[8]=n,t[9]=u);let d;return t[10]!==c||t[11]!==l||t[12]!==u?(d=(0,b.jsxs)(`div`,{className:`rounded-lg border bg-muted/30 p-4`,children:[s,(0,b.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed border-foreground/20 p-4`,children:[c,l,u]})]}),t[10]=c,t[11]=l,t[12]=u,t[13]=d):d=t[13],d}function me(e){return(0,b.jsx)(x,{cidr:e.cidr,label:e.label,variant:`private`},e.cidr)}function S(e){return(0,b.jsx)(x,{cidr:e.cidr,label:e.label,variant:`public`},e.cidr)}var he=[0,1],C=[0,1,2];function w(){let e=(0,ue.c)(86),t=i(),n=g(),r=h(),[o,s]=(0,de.useState)(null),c;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=ie(le),e[0]=c):c=e[0];let l;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(l={resolver:c,defaultValues:{mode:`vpc-only`,namePrefix:``,autoGenerateNames:!0,cidrBlock:`10.0.0.0/16`,tenancy:`default`,natGateway:`none`,publicSubnetCount:1,privateSubnetCount:1,publicSubnetCidrs:[],privateSubnetCidrs:[],tags:[]}},e[1]=l):l=e[1];let u=re(l),{handleSubmit:d,register:f,watch:m,control:x,formState:me}=u,{errors:S,isSubmitting:he}=me,C;e[2]===x?C=e[3]:(C={control:x,name:`mode`},e[2]=x,e[3]=C);let w=ne(C),T;e[4]===x?T=e[5]:(T={control:x,name:`cidrBlock`},e[4]=x,e[5]=T);let Ee=ne(T),E;e[6]===x?E=e[7]:(E={control:x,name:`publicSubnetCount`},e[6]=x,e[7]=E);let D=ne(E),O;e[8]===x?O=e[9]:(O={control:x,name:`privateSubnetCount`},e[8]=x,e[9]=O);let De=ne(O),k=ce(Ee||`10.0.0.0/16`,w===`vpc-and-more`?D:0,w===`vpc-and-more`?De:0),[Oe,ke]=(0,de.useState)(``),Ae;e[10]!==n||e[11]!==t||e[12]!==r?(Ae=async e=>{if(s(null),e.mode===`vpc-only`){let r=e.autoGenerateNames&&e.namePrefix?`${e.namePrefix}-vpc`:e.namePrefix,i=(await n.mutateAsync({cidrBlock:e.cidrBlock,name:r||void 0})).Vpc?.VpcId;t(i?{to:`/ec2/describe-vpcs/$id`,params:{id:i}}:{to:`/ec2/describe-vpcs`});return}ke(`Creating VPC and resources...`);let i=await r.mutateAsync(e);s(i),!i.error&&i.vpcId&&t({to:`/ec2/describe-vpcs/$id`,params:{id:i.vpcId}}),ke(``)},e[10]=n,e[11]=t,e[12]=r,e[13]=Ae):Ae=e[13];let je=Ae,Me=n.error??r.error,Ne=n.isPending||r.isPending,A,j;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,b.jsx)(a,{to:`/ec2/describe-vpcs`,children:`Back to VPCs`}),j=(0,b.jsx)(te,{title:`Create VPC`}),e[14]=A,e[15]=j):(A=e[14],j=e[15]);let M;e[16]===Me?M=e[17]:(M=Me&&(0,b.jsx)(ae,{error:Me,msg:`Failed to create VPC`}),e[16]=Me,e[17]=M);let N;e[18]===o?N=e[19]:(N=o?.error&&(0,b.jsxs)(`div`,{className:`mb-6 max-w-4xl rounded-md border border-destructive bg-destructive/10 p-4`,children:[(0,b.jsxs)(`h2`,{className:`text-sm font-medium text-destructive`,children:[`Wizard failed: `,o.failedStep]}),(0,b.jsx)(`p`,{className:`mt-1 text-sm text-destructive`,children:o.error.message}),o.created.length>0&&(0,b.jsxs)(`div`,{className:`mt-3`,children:[(0,b.jsx)(`p`,{className:`text-xs font-medium text-destructive`,children:`Successfully created resources:`}),(0,b.jsx)(`ul`,{className:`mt-1 list-inside list-disc text-xs text-destructive`,children:o.created.map(we)})]})]}),e[18]=o,e[19]=N);let P;e[20]===Oe?P=e[21]:(P=Oe&&(0,b.jsx)(`div`,{className:`mb-4 max-w-4xl text-sm text-muted-foreground`,children:Oe}),e[20]=Oe,e[21]=P);let F;e[22]!==d||e[23]!==je?(F=d(je),e[22]=d,e[23]=je,e[24]=F):F=e[24];let Pe;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(Pe=(0,b.jsx)(v,{children:`Resources to create`}),e[25]=Pe):Pe=e[25];let I;e[26]===x?I=e[27]:(I=(0,b.jsxs)(y,{children:[Pe,(0,b.jsx)(_,{control:x,name:`mode`,render:Ce})]}),e[26]=x,e[27]=I);let L;e[28]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,b.jsx)(v,{children:(0,b.jsx)(`label`,{htmlFor:`namePrefix`,children:`Name tag auto-generation`})}),e[28]=L):L=e[28];let R;e[29]===f?R=e[30]:(R=f(`namePrefix`),e[29]=f,e[30]=R);let z;e[31]===R?z=e[32]:(z=(0,b.jsx)(ee,{id:`namePrefix`,placeholder:`project`,...R}),e[31]=R,e[32]=z);let B;e[33]===x?B=e[34]:(B=(0,b.jsx)(_,{control:x,name:`autoGenerateNames`,render:Se}),e[33]=x,e[34]=B);let V;e[35]!==z||e[36]!==B?(V=(0,b.jsxs)(y,{children:[L,(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[z,B]})]}),e[35]=z,e[36]=B,e[37]=V):V=e[37];let H;e[38]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,b.jsx)(v,{children:(0,b.jsx)(`label`,{htmlFor:`cidrBlock`,children:`IPv4 CIDR block`})}),e[38]=H):H=e[38];let Fe=!!S.cidrBlock,U;e[39]===f?U=e[40]:(U=f(`cidrBlock`),e[39]=f,e[40]=U);let W;e[41]!==Fe||e[42]!==U?(W=(0,b.jsx)(ee,{"aria-invalid":Fe,id:`cidrBlock`,placeholder:`10.0.0.0/16`,...U}),e[41]=Fe,e[42]=U,e[43]=W):W=e[43];let G;e[44]===S.cidrBlock?G=e[45]:(G=(0,b.jsx)(se,{errors:[S.cidrBlock]}),e[44]=S.cidrBlock,e[45]=G);let K;e[46]!==W||e[47]!==G?(K=(0,b.jsxs)(y,{children:[H,W,G]}),e[46]=W,e[47]=G,e[48]=K):K=e[48];let Ie;e[49]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,b.jsx)(v,{children:`Tenancy`}),e[49]=Ie):Ie=e[49];let q;e[50]===x?q=e[51]:(q=(0,b.jsxs)(y,{children:[Ie,(0,b.jsx)(_,{control:x,name:`tenancy`,render:xe})]}),e[50]=x,e[51]=q);let Le=w===`vpc-and-more`&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`Number of public subnets`}),(0,b.jsx)(_,{control:x,name:`publicSubnetCount`,render:be}),(0,b.jsx)(fe,{count:D,defaults:k.publicSubnets.map(ye),form:u,type:`public`})]}),(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`Number of private subnets`}),(0,b.jsx)(_,{control:x,name:`privateSubnetCount`,render:ve}),(0,b.jsx)(fe,{count:De,defaults:k.privateSubnets.map(_e),form:u,type:`private`})]}),D>0&&De>0&&(0,b.jsxs)(y,{children:[(0,b.jsx)(v,{children:`NAT gateways`}),(0,b.jsx)(_,{control:x,name:`natGateway`,render:ge}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Creates an Elastic IP + NAT gateway in the public subnet and routes private subnet egress (0.0.0.0/0) through it.`})]})]}),Re=p,ze=Te(m,k),J;e[52]!==Re||e[53]!==ze?(J=(0,b.jsx)(Re,{commands:ze}),e[52]=Re,e[53]=ze,e[54]=J):J=e[54];let Y;e[55]===t?Y=e[56]:(Y=async()=>{await t({to:`/ec2/describe-vpcs`})},e[55]=t,e[56]=Y);let X;e[57]!==Ne||e[58]!==he||e[59]!==Y?(X=(0,b.jsx)(oe,{isPending:Ne,isSubmitting:he,onCancel:Y,pendingLabel:`Creating…`,submitLabel:`Create VPC`}),e[57]=Ne,e[58]=he,e[59]=Y,e[60]=X):X=e[60];let Z;e[61]!==F||e[62]!==I||e[63]!==V||e[64]!==K||e[65]!==q||e[66]!==Le||e[67]!==J||e[68]!==X?(Z=(0,b.jsxs)(`form`,{className:`min-w-0 flex-1 space-y-6`,onSubmit:F,children:[I,V,K,q,Le,J,X]}),e[61]=F,e[62]=I,e[63]=V,e[64]=K,e[65]=q,e[66]=Le,e[67]=J,e[68]=X,e[69]=Z):Z=e[69];let Be=w===`vpc-and-more`&&D>0,Ve=Ee||`10.0.0.0/16`,Q;e[70]!==w||e[71]!==k.privateSubnets||e[72]!==k.publicSubnets||e[73]!==Be||e[74]!==Ve?(Q=(0,b.jsx)(`div`,{className:`hidden min-w-0 flex-1 lg:block`,children:(0,b.jsx)(pe,{hasIgw:Be,mode:w,privateSubnets:k.privateSubnets,publicSubnets:k.publicSubnets,vpcCidr:Ve})}),e[70]=w,e[71]=k.privateSubnets,e[72]=k.publicSubnets,e[73]=Be,e[74]=Ve,e[75]=Q):Q=e[75];let $;e[76]!==Z||e[77]!==Q?($=(0,b.jsxs)(`div`,{className:`flex max-w-6xl gap-8`,children:[Z,Q]}),e[76]=Z,e[77]=Q,e[78]=$):$=e[78];let He;return e[79]!==M||e[80]!==N||e[81]!==P||e[82]!==$||e[83]!==A||e[84]!==j?(He=(0,b.jsxs)(b.Fragment,{children:[A,j,M,N,P,$]}),e[79]=M,e[80]=N,e[81]=P,e[82]=$,e[83]=A,e[84]=j,e[85]=He):He=e[85],He}function ge(e){let{field:t}=e;return(0,b.jsxs)(f,{onValueChange:t.onChange,value:t.value??`none`,children:[(0,b.jsx)(d,{id:`natGateway`,children:(0,b.jsx)(c,{})}),(0,b.jsxs)(u,{children:[(0,b.jsx)(l,{value:`none`,children:`None`}),(0,b.jsx)(l,{value:`single`,children:`In 1 AZ`})]})]})}function _e(e){return e.cidr}function ve(e){let{field:t}=e;return(0,b.jsx)(`div`,{className:`flex gap-1`,children:C.map(e=>(0,b.jsx)(m,{onClick:()=>{t.onChange(e)},size:`sm`,type:`button`,variant:t.value===e?`default`:`outline`,children:e},e))})}function ye(e){return e.cidr}function be(e){let{field:t}=e;return(0,b.jsx)(`div`,{className:`flex gap-1`,children:he.map(e=>(0,b.jsx)(m,{onClick:()=>{t.onChange(e)},size:`sm`,type:`button`,variant:t.value===e?`default`:`outline`,children:e},e))})}function xe(e){let{field:t}=e;return(0,b.jsxs)(f,{onValueChange:t.onChange,value:t.value,children:[(0,b.jsx)(d,{id:`tenancy`,children:(0,b.jsx)(c,{})}),(0,b.jsxs)(u,{children:[(0,b.jsx)(l,{value:`default`,children:`default`}),(0,b.jsx)(l,{value:`dedicated`,children:`dedicated`})]})]})}function Se(e){let{field:t}=e;return(0,b.jsxs)(`label`,{className:`flex shrink-0 items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`Auto-generate name tags`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Auto-generate`]})}function Ce(e){let{field:t}=e;return(0,b.jsxs)(`div`,{className:`flex gap-4`,children:[(0,b.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`VPC only`,checked:t.value===`vpc-only`,name:`mode`,onChange:()=>{t.onChange(`vpc-only`)},type:`radio`}),`VPC only`]}),(0,b.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,b.jsx)(`input`,{"aria-label":`VPC and more`,checked:t.value===`vpc-and-more`,name:`mode`,onChange:()=>{t.onChange(`vpc-and-more`)},type:`radio`}),`VPC and more`]})]})}function we(e,t){return(0,b.jsxs)(`li`,{children:[e.type,`: `,e.id]},t)}function Te(e,t){let n=e(`mode`),r=e(`cidrBlock`),i=e(`tenancy`),a=e(`natGateway`);if(n===`vpc-only`){let e=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 create-vpc`},{type:`flag`,value:` \\ --cidr-block`},{type:`value`,value:` ${r||`10.0.0.0/16`}`}];return i&&i!=="default"&&e.push({type:`flag`,value:` \\ --instance-tenancy`},{type:`value`,value:` ${i}`}),[{label:`Create VPC`,parts:e}]}let o=[],s=[...t.publicSubnets.map((e,t)=>({...e,name:`PUBLIC_SUBNET_${t+1}`})),...t.privateSubnets.map((e,t)=>({...e,name:`PRIVATE_SUBNET_${t+1}`}))];o.push({label:`Create VPC`,parts:[{type:`comment`,value:`# Create VPC with subnets, internet gateway, and routing diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-DL-8egB9.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-CJZ8g-R_.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-DL-8egB9.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-CJZ8g-R_.js index 839816927..c1b22e1b2 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-DL-8egB9.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/createBaseUIEventDetails-CJZ8g-R_.js @@ -1 +1 @@ -import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{a as n,i as r,l as i}from"./dist-BKgR2qk6.js";import{c as a,w as o}from"./button-BarTr35m.js";function s(e){return e?.ownerDocument||document}var c=e(t(),1),l=0;function u(e,t=`mui`){let[n,r]=c.useState(e),i=e||n;return c.useEffect(()=>{n??(l+=1,r(`${t}-${l}`))},[n,t]),i}var d=a.useId;function f(e,t){if(d!==void 0){let n=d();return e??(t?`${t}-${n}`:n)}return u(e,t)}function p(e){return f(e,`base-ui`)}function m(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function h(e,t){if(!e||!t)return!1;let n=t.getRootNode?.();if(e.contains(t))return!0;if(n&&o(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function g(e){return`composedPath`in e?e.composedPath()[0]??e.target:e.target}function _(e){c.useEffect(e,r)}var v=0,y=class e{static create(){return new e}currentId=v;start(e,t){this.clear(),this.currentId=setTimeout(()=>{this.currentId=v,t()},e)}isStarted(){return this.currentId!==v}clear=()=>{this.currentId!==v&&(clearTimeout(this.currentId),this.currentId=v)};disposeEffect=()=>this.clear};function b(){let e=i(y.create).current;return _(e.disposeEffect),e}var x=`none`,S=`trigger-press`,C=`trigger-hover`,w=`trigger-focus`,T=`outside-press`,E=`item-press`,D=`close-press`,O=`focus-out`,k=`escape-key`,A=`list-navigation`,j=`cancel-open`,M=`disabled`,N=`missing`,P=`initial`,F=`imperative-action`,I=`window-resize`;function L(e,t,r,i){let a=!1,o=!1,s=i??n;return{reason:e,event:t??new Event(`base-ui`),cancel(){a=!0},allowPropagation(){o=!0},get isCanceled(){return a},get isPropagationAllowed(){return o},trigger:r,...s}}export{g as C,s as E,h as S,f as T,I as _,k as a,_ as b,P as c,N as d,x as f,S as g,C as h,M as i,E as l,w as m,j as n,O as o,T as p,D as r,F as s,L as t,A as u,y as v,p as w,m as x,b as y}; \ No newline at end of file +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{a as n,i as r,l as i}from"./dist-DeC3TnAR.js";import{c as a,w as o}from"./button-qf9lLJ2x.js";function s(e){return e?.ownerDocument||document}var c=e(t(),1),l=0;function u(e,t=`mui`){let[n,r]=c.useState(e),i=e||n;return c.useEffect(()=>{n??(l+=1,r(`${t}-${l}`))},[n,t]),i}var d=a.useId;function f(e,t){if(d!==void 0){let n=d();return e??(t?`${t}-${n}`:n)}return u(e,t)}function p(e){return f(e,`base-ui`)}function m(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function h(e,t){if(!e||!t)return!1;let n=t.getRootNode?.();if(e.contains(t))return!0;if(n&&o(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function g(e){return`composedPath`in e?e.composedPath()[0]??e.target:e.target}function _(e){c.useEffect(e,r)}var v=0,y=class e{static create(){return new e}currentId=v;start(e,t){this.clear(),this.currentId=setTimeout(()=>{this.currentId=v,t()},e)}isStarted(){return this.currentId!==v}clear=()=>{this.currentId!==v&&(clearTimeout(this.currentId),this.currentId=v)};disposeEffect=()=>this.clear};function b(){let e=i(y.create).current;return _(e.disposeEffect),e}var x=`none`,S=`trigger-press`,C=`trigger-hover`,w=`trigger-focus`,T=`outside-press`,E=`item-press`,D=`close-press`,O=`focus-out`,k=`escape-key`,A=`list-navigation`,j=`cancel-open`,M=`disabled`,N=`missing`,P=`initial`,F=`imperative-action`,I=`window-resize`;function L(e,t,r,i){let a=!1,o=!1,s=i??n;return{reason:e,event:t??new Event(`base-ui`),cancel(){a=!0},allowPropagation(){o=!0},get isCanceled(){return a},get isPropagationAllowed(){return o},trigger:r,...s}}export{g as C,s as E,h as S,f as T,I as _,k as a,_ as b,P as c,N as d,x as f,S as g,C as h,M as i,E as l,w as m,j as n,O as o,T as p,D as r,F as s,L as t,A as u,y as v,p as w,m as x,b as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-SdDN4LiF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-BYHqotoI.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-SdDN4LiF.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-BYHqotoI.js index b5e8b1ba6..24d3db291 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-SdDN4LiF.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-confirmation-dialog-BYHqotoI.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{a as n,i as r,l as i,n as a,o,r as s,s as c,t as l}from"./alert-dialog-kCQ1W4Rz.js";var u=t(),d=e();function f(e){let t=(0,u.c)(19),{open:f,onOpenChange:p,title:m,description:h,isPending:g,onConfirm:_,confirmLabel:v,pendingLabel:y}=e,b=v===void 0?`Delete`:v,x=y===void 0?`Deleting…`:y,S;t[0]===m?S=t[1]:(S=(0,d.jsx)(i,{children:m}),t[0]=m,t[1]=S);let C;t[2]===h?C=t[3]:(C=(0,d.jsx)(n,{children:h}),t[2]=h,t[3]=C);let w;t[4]!==S||t[5]!==C?(w=(0,d.jsxs)(c,{children:[S,C]}),t[4]=S,t[5]=C,t[6]=w):w=t[6];let T;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,d.jsx)(s,{children:`Cancel`}),t[7]=T):T=t[7];let E=g?x:b,D;t[8]!==g||t[9]!==_||t[10]!==E?(D=(0,d.jsxs)(o,{children:[T,(0,d.jsx)(a,{disabled:g,onClick:_,children:E})]}),t[8]=g,t[9]=_,t[10]=E,t[11]=D):D=t[11];let O;t[12]!==w||t[13]!==D?(O=(0,d.jsxs)(r,{children:[w,D]}),t[12]=w,t[13]=D,t[14]=O):O=t[14];let k;return t[15]!==p||t[16]!==f||t[17]!==O?(k=(0,d.jsx)(l,{onOpenChange:p,open:f,children:O}),t[15]=p,t[16]=f,t[17]=O,t[18]=k):k=t[18],k}export{f as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{a as n,i as r,l as i,n as a,o,r as s,s as c,t as l}from"./alert-dialog-jxylPXwR.js";var u=t(),d=e();function f(e){let t=(0,u.c)(19),{open:f,onOpenChange:p,title:m,description:h,isPending:g,onConfirm:_,confirmLabel:v,pendingLabel:y}=e,b=v===void 0?`Delete`:v,x=y===void 0?`Deleting…`:y,S;t[0]===m?S=t[1]:(S=(0,d.jsx)(i,{children:m}),t[0]=m,t[1]=S);let C;t[2]===h?C=t[3]:(C=(0,d.jsx)(n,{children:h}),t[2]=h,t[3]=C);let w;t[4]!==S||t[5]!==C?(w=(0,d.jsxs)(c,{children:[S,C]}),t[4]=S,t[5]=C,t[6]=w):w=t[6];let T;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,d.jsx)(s,{children:`Cancel`}),t[7]=T):T=t[7];let E=g?x:b,D;t[8]!==g||t[9]!==_||t[10]!==E?(D=(0,d.jsxs)(o,{children:[T,(0,d.jsx)(a,{disabled:g,onClick:_,children:E})]}),t[8]=g,t[9]=_,t[10]=E,t[11]=D):D=t[11];let O;t[12]!==w||t[13]!==D?(O=(0,d.jsxs)(r,{children:[w,D]}),t[12]=w,t[13]=D,t[14]=O):O=t[14];let k;return t[15]!==p||t[16]!==f||t[17]!==O?(k=(0,d.jsx)(l,{onOpenChange:p,open:f,children:O}),t[15]=p,t[16]=f,t[17]=O,t[18]=k):k=t[18],k}export{f as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-BdhZGMA5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-lxcaswKe.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-BdhZGMA5.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-lxcaswKe.js index b34a3c644..84a1062c7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-BdhZGMA5.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-instance-dialog-lxcaswKe.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./button-BarTr35m.js";import{t as o}from"./input-6kdUb_DH.js";import{w as s,y as c}from"./rds-CE3126Ga.js";import{a as l}from"./rds-BkKLEWPo.js";import{n as u,s as d,t as f}from"./field-c7GHI5st.js";import{a as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b}from"./alert-dialog-kCQ1W4Rz.js";var x=r(),S=t(n(),1),C=e();function w(e,t=new Date){return s(e,`final`,t)}function T(e){let t=(0,x.c)(46),{open:n,onOpenChange:r,dbInstanceIdentifier:s,deletionProtection:T,onDeleted:E,onModify:D}=e,O=l(),[k,A]=(0,S.useState)(!1),j;t[0]===s?j=t[1]:(j=()=>w(s),t[0]=s,t[1]=j);let[M,N]=(0,S.useState)(j),[P,F]=(0,S.useState)(``),I;t[2]!==s||t[3]!==O||t[4]!==r?(I=function(e){e||(A(!1),N(w(s)),F(``),O.reset()),r(e)},t[2]=s,t[3]=O,t[4]=r,t[5]=I):I=t[5];let L=I,R;t[6]!==k||t[7]!==M?(R=k?void 0:c.safeParse(M).error?.issues[0]?.message,t[6]=k,t[7]=M,t[8]=R):R=t[8];let z=R,B=!(k&&P!==s)&&!z,V;t[9]!==s||t[10]!==O||t[11]!==L||t[12]!==E||t[13]!==k||t[14]!==M?(V=async function(){try{await O.mutateAsync({dbInstanceIdentifier:s,skipFinalSnapshot:k,finalSnapshotIdentifier:M}),L(!1),E?.()}catch{}},t[9]=s,t[10]=O,t[11]=L,t[12]=E,t[13]=k,t[14]=M,t[15]=V):V=t[15];let H=V,U;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,C.jsx)(h,{children:`Delete DB Instance`}),t[16]=U):U=t[16];let W=T?`"${s}" has deletion protection enabled and cannot be deleted while it is on.`:`This tears down "${s}". It cannot be undone.`,G;t[17]===W?G=t[18]:(G=(0,C.jsxs)(y,{children:[U,(0,C.jsx)(p,{children:W})]}),t[17]=W,t[18]=G);let K;t[19]!==s||t[20]!==T||t[21]!==D||t[22]!==k||t[23]!==M||t[24]!==z||t[25]!==P?(K=T?(0,C.jsxs)(`div`,{className:`space-y-3`,children:[(0,C.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Turn deletion protection off first, then delete the instance.`}),D?(0,C.jsx)(a,{onClick:D,size:`sm`,variant:`outline`,children:`Modify Instance`}):(0,C.jsxs)(i,{className:`text-sm text-primary hover:underline`,params:{id:s},to:`/rds/describe-db-instances/$id`,children:[`Open `,s,` to modify it`]})]}):(0,C.jsxs)(`div`,{className:`space-y-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-start gap-2 text-sm`,children:[(0,C.jsx)(`input`,{checked:!k,onChange:e=>{A(!e.target.checked)},type:`checkbox`}),(0,C.jsxs)(`span`,{children:[`Take a final snapshot before deleting`,(0,C.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:`A final snapshot retains the underlying data volume until that snapshot is itself deleted.`})]})]}),k?(0,C.jsxs)(f,{children:[(0,C.jsx)(d,{children:(0,C.jsxs)(`label`,{htmlFor:`confirmIdentifier`,children:[`Type `,s,` to confirm`]})}),(0,C.jsx)(o,{id:`confirmIdentifier`,onChange:e=>{F(e.target.value)},placeholder:s,value:P}),(0,C.jsx)(u,{children:`Deleting without a final snapshot destroys the data volume. There is no way back.`})]}):(0,C.jsxs)(f,{children:[(0,C.jsx)(d,{children:(0,C.jsx)(`label`,{htmlFor:`finalSnapshotIdentifier`,children:`Final snapshot name`})}),(0,C.jsx)(o,{"aria-invalid":!!z,id:`finalSnapshotIdentifier`,onChange:e=>{N(e.target.value)},value:M}),z&&(0,C.jsx)(`p`,{className:`text-xs text-destructive`,children:z})]})]}),t[19]=s,t[20]=T,t[21]=D,t[22]=k,t[23]=M,t[24]=z,t[25]=P,t[26]=K):K=t[26];let q;t[27]===O.error?q=t[28]:(q=O.error&&(0,C.jsx)(`p`,{className:`text-sm text-destructive`,children:O.error.message}),t[27]=O.error,t[28]=q);let J;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,C.jsx)(v,{children:`Cancel`}),t[29]=J):J=t[29];let Y;t[30]!==B||t[31]!==O.isPending||t[32]!==T||t[33]!==H?(Y=!T&&(0,C.jsx)(g,{disabled:O.isPending||!B,onClick:e=>{e.preventDefault(),H()},children:O.isPending?`Deleting…`:`Delete`}),t[30]=B,t[31]=O.isPending,t[32]=T,t[33]=H,t[34]=Y):Y=t[34];let X;t[35]===Y?X=t[36]:(X=(0,C.jsxs)(_,{children:[J,Y]}),t[35]=Y,t[36]=X);let Z;t[37]!==X||t[38]!==G||t[39]!==K||t[40]!==q?(Z=(0,C.jsxs)(m,{children:[G,K,q,X]}),t[37]=X,t[38]=G,t[39]=K,t[40]=q,t[41]=Z):Z=t[41];let Q;return t[42]!==L||t[43]!==n||t[44]!==Z?(Q=(0,C.jsx)(b,{onOpenChange:L,open:n,children:Z}),t[42]=L,t[43]=n,t[44]=Z,t[45]=Q):Q=t[45],Q}export{T as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./button-qf9lLJ2x.js";import{t as o}from"./input-D3aUBtS6.js";import{w as s,y as c}from"./rds-DIuGt87z.js";import{a as l}from"./rds-DbPUva_R.js";import{n as u,s as d,t as f}from"./field-CS-ql6du.js";import{a as p,i as m,l as h,n as g,o as _,r as v,s as y,t as b}from"./alert-dialog-jxylPXwR.js";var x=r(),S=t(n(),1),C=e();function w(e,t=new Date){return s(e,`final`,t)}function T(e){let t=(0,x.c)(46),{open:n,onOpenChange:r,dbInstanceIdentifier:s,deletionProtection:T,onDeleted:E,onModify:D}=e,O=l(),[k,A]=(0,S.useState)(!1),j;t[0]===s?j=t[1]:(j=()=>w(s),t[0]=s,t[1]=j);let[M,N]=(0,S.useState)(j),[P,F]=(0,S.useState)(``),I;t[2]!==s||t[3]!==O||t[4]!==r?(I=function(e){e||(A(!1),N(w(s)),F(``),O.reset()),r(e)},t[2]=s,t[3]=O,t[4]=r,t[5]=I):I=t[5];let L=I,R;t[6]!==k||t[7]!==M?(R=k?void 0:c.safeParse(M).error?.issues[0]?.message,t[6]=k,t[7]=M,t[8]=R):R=t[8];let z=R,B=!(k&&P!==s)&&!z,V;t[9]!==s||t[10]!==O||t[11]!==L||t[12]!==E||t[13]!==k||t[14]!==M?(V=async function(){try{await O.mutateAsync({dbInstanceIdentifier:s,skipFinalSnapshot:k,finalSnapshotIdentifier:M}),L(!1),E?.()}catch{}},t[9]=s,t[10]=O,t[11]=L,t[12]=E,t[13]=k,t[14]=M,t[15]=V):V=t[15];let H=V,U;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,C.jsx)(h,{children:`Delete DB Instance`}),t[16]=U):U=t[16];let W=T?`"${s}" has deletion protection enabled and cannot be deleted while it is on.`:`This tears down "${s}". It cannot be undone.`,G;t[17]===W?G=t[18]:(G=(0,C.jsxs)(y,{children:[U,(0,C.jsx)(p,{children:W})]}),t[17]=W,t[18]=G);let K;t[19]!==s||t[20]!==T||t[21]!==D||t[22]!==k||t[23]!==M||t[24]!==z||t[25]!==P?(K=T?(0,C.jsxs)(`div`,{className:`space-y-3`,children:[(0,C.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Turn deletion protection off first, then delete the instance.`}),D?(0,C.jsx)(a,{onClick:D,size:`sm`,variant:`outline`,children:`Modify Instance`}):(0,C.jsxs)(i,{className:`text-sm text-primary hover:underline`,params:{id:s},to:`/rds/describe-db-instances/$id`,children:[`Open `,s,` to modify it`]})]}):(0,C.jsxs)(`div`,{className:`space-y-4`,children:[(0,C.jsxs)(`label`,{className:`flex items-start gap-2 text-sm`,children:[(0,C.jsx)(`input`,{checked:!k,onChange:e=>{A(!e.target.checked)},type:`checkbox`}),(0,C.jsxs)(`span`,{children:[`Take a final snapshot before deleting`,(0,C.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:`A final snapshot retains the underlying data volume until that snapshot is itself deleted.`})]})]}),k?(0,C.jsxs)(f,{children:[(0,C.jsx)(d,{children:(0,C.jsxs)(`label`,{htmlFor:`confirmIdentifier`,children:[`Type `,s,` to confirm`]})}),(0,C.jsx)(o,{id:`confirmIdentifier`,onChange:e=>{F(e.target.value)},placeholder:s,value:P}),(0,C.jsx)(u,{children:`Deleting without a final snapshot destroys the data volume. There is no way back.`})]}):(0,C.jsxs)(f,{children:[(0,C.jsx)(d,{children:(0,C.jsx)(`label`,{htmlFor:`finalSnapshotIdentifier`,children:`Final snapshot name`})}),(0,C.jsx)(o,{"aria-invalid":!!z,id:`finalSnapshotIdentifier`,onChange:e=>{N(e.target.value)},value:M}),z&&(0,C.jsx)(`p`,{className:`text-xs text-destructive`,children:z})]})]}),t[19]=s,t[20]=T,t[21]=D,t[22]=k,t[23]=M,t[24]=z,t[25]=P,t[26]=K):K=t[26];let q;t[27]===O.error?q=t[28]:(q=O.error&&(0,C.jsx)(`p`,{className:`text-sm text-destructive`,children:O.error.message}),t[27]=O.error,t[28]=q);let J;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,C.jsx)(v,{children:`Cancel`}),t[29]=J):J=t[29];let Y;t[30]!==B||t[31]!==O.isPending||t[32]!==T||t[33]!==H?(Y=!T&&(0,C.jsx)(g,{disabled:O.isPending||!B,onClick:e=>{e.preventDefault(),H()},children:O.isPending?`Deleting…`:`Delete`}),t[30]=B,t[31]=O.isPending,t[32]=T,t[33]=H,t[34]=Y):Y=t[34];let X;t[35]===Y?X=t[36]:(X=(0,C.jsxs)(_,{children:[J,Y]}),t[35]=Y,t[36]=X);let Z;t[37]!==X||t[38]!==G||t[39]!==K||t[40]!==q?(Z=(0,C.jsxs)(m,{children:[G,K,q,X]}),t[37]=X,t[38]=G,t[39]=K,t[40]=q,t[41]=Z):Z=t[41];let Q;return t[42]!==L||t[43]!==n||t[44]!==Z?(Q=(0,C.jsx)(b,{onOpenChange:L,open:n,children:Z}),t[42]=L,t[43]=n,t[44]=Z,t[45]=Q):Q=t[45],Q}export{T as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DHJeV95z.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DVhsvQ9C.js similarity index 83% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DHJeV95z.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DVhsvQ9C.js index eeb67fc9c..1127f2b7c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DHJeV95z.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-parameter-group-dialog-DVhsvQ9C.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{o as n}from"./rds-BkKLEWPo.js";import{t as r}from"./rds-delete-dialog-BtEPTeBR.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbParameterGroupName:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB parameter group "`,c,`" and every value stored on it. It is refused while any DB instance references the group, including one whose pending changes name it.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Parameter Group`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{o as n}from"./rds-DbPUva_R.js";import{t as r}from"./rds-delete-dialog-BWwoVrYv.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbParameterGroupName:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB parameter group "`,c,`" and every value stored on it. It is refused while any DB instance references the group, including one whose pending changes name it.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Parameter Group`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-D3b3mehr.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-elwW83vt.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-D3b3mehr.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-elwW83vt.js index 34c9d7057..d6036dcf7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-D3b3mehr.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-snapshot-dialog-elwW83vt.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{s as n}from"./rds-BkKLEWPo.js";import{t as r}from"./rds-delete-dialog-BtEPTeBR.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbSnapshotIdentifier:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB snapshot "`,c,`" and the data behind it. It is refused while an instance restored from it still exists. If this was a final snapshot, deleting it also releases the data volume its instance left behind.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Snapshot`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{s as n}from"./rds-DbPUva_R.js";import{t as r}from"./rds-delete-dialog-BWwoVrYv.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbSnapshotIdentifier:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB snapshot "`,c,`" and the data behind it. It is refused while an instance restored from it still exists. If this was a final snapshot, deleting it also releases the data volume its instance left behind.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Snapshot`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-BgemfFMN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-Mj0lUr0p.js similarity index 82% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-BgemfFMN.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-Mj0lUr0p.js index 81f8b72db..e2179f1c6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-BgemfFMN.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/delete-db-subnet-group-dialog-Mj0lUr0p.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{c as n}from"./rds-BkKLEWPo.js";import{t as r}from"./rds-delete-dialog-BtEPTeBR.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbSubnetGroupName:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB subnet group "`,c,`". It is refused while any DB instance still references it, including one that is only deleting.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Subnet Group`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{c as n}from"./rds-DbPUva_R.js";import{t as r}from"./rds-delete-dialog-BWwoVrYv.js";var i=t(),a=e();function o(e){let t=(0,i.c)(9),{open:o,onOpenChange:s,dbSubnetGroupName:c,onDeleted:l}=e,u;t[0]===c?u=t[1]:(u=(0,a.jsxs)(a.Fragment,{children:[`This deletes the DB subnet group "`,c,`". It is refused while any DB instance still references it, including one that is only deleting.`]}),t[0]=c,t[1]=u);let d=n(),f;return t[2]!==c||t[3]!==l||t[4]!==s||t[5]!==o||t[6]!==u||t[7]!==d?(f=(0,a.jsx)(r,{description:u,identifier:c,mutation:d,onDeleted:l,onOpenChange:s,open:o,title:`Delete DB Subnet Group`}),t[2]=c,t[3]=l,t[4]=s,t[5]=o,t[6]=u,t[7]=d,t[8]=f):f=t[8],f}export{o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-DKlK9Anw.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-BvGejO0s.js similarity index 79% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-DKlK9Anw.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-BvGejO0s.js index 6aa4ac7a1..34fd6bf84 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-DKlK9Anw.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-addresses-BvGejO0s.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{n as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.Addresses?i=e[1]:(i=t.Addresses??[],e[0]=t.Addresses,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/ec2/allocate-address`,children:(0,u.jsx)(a,{children:`Allocate Elastic IP`})}),title:`Elastic IPs`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No Elastic IPs found.`})]}),e[3]=c,e[4]=p),p}function f(e){if(!e.AllocationId)return null;let t=i(e.Tags),n=e.AssociationId?`${e.PublicIp} • associated`:`${e.PublicIp} • available`;return(0,u.jsx)(c,{params:{id:e.AllocationId},subtitle:n,title:t?`${e.AllocationId} (${t})`:e.AllocationId??``,to:`/ec2/describe-addresses/$id`},e.AllocationId)}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{n as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.Addresses?i=e[1]:(i=t.Addresses??[],e[0]=t.Addresses,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/ec2/allocate-address`,children:(0,u.jsx)(a,{children:`Allocate Elastic IP`})}),title:`Elastic IPs`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No Elastic IPs found.`})]}),e[3]=c,e[4]=p),p}function f(e){if(!e.AllocationId)return null;let t=i(e.Tags),n=e.AssociationId?`${e.PublicIp} • associated`:`${e.PublicIp} • available`;return(0,u.jsx)(c,{params:{id:e.AllocationId},subtitle:n,title:t?`${e.AllocationId} (${t})`:e.AllocationId??``,to:`/ec2/describe-addresses/$id`},e.AllocationId)}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-ririu0gg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-fwSV1dE8.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-ririu0gg.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-fwSV1dE8.js index 303de62a7..f11bf451f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-ririu0gg.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-instances-fwSV1dE8.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{t as s}from"./button-BarTr35m.js";import{c,m as l,p as u,u as d}from"./rds-CE3126Ga.js";import{d as f,m as p,p as m}from"./rds-BkKLEWPo.js";import{r as h}from"./rds-CyiqRExv.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./state-badge-D1Z6q_OA.js";import{t as y}from"./delete-db-instance-dialog-BdhZGMA5.js";var b=r(),x=t(n(),1),S=e();function C(e){return[e.Engine,e.EngineVersion].filter(Boolean).join(` `)}function w(){let e=(0,b.c)(19),t=o(),{data:n}=i(h),r=m(),w=p(),E=f(),[D,O]=(0,x.useState)(null),k;e[0]===n.DBInstances?k=e[1]:(k=n.DBInstances??[],e[0]=n.DBInstances,e[1]=k);let A=k,j=r.error??w.error??E.error,M;e[2]===t?M=e[3]:(M=(0,S.jsx)(g,{actions:(0,S.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-instance`})},children:`Create Database`}),title:`Databases`}),e[2]=t,e[3]=M);let N;e[4]===j?N=e[5]:(N=j&&(0,S.jsx)(_,{error:j,msg:`Failed to change the DB instance state.`}),e[4]=j,e[5]=N);let P;e[6]!==A||e[7]!==t||e[8]!==E||e[9]!==r||e[10]!==w?(P=A.length>0?(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,S.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Engine`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Class`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Endpoint`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Storage`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,S.jsx)(`tbody`,{children:A.map(e=>{let n=e.DBInstanceIdentifier;if(!n)return null;let i=e.DBInstanceStatus;return(0,S.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-instances/$id`,params:{id:n}})},children:[(0,S.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(a,{className:`text-primary hover:underline`,onClick:T,params:{id:n},to:`/rds/describe-db-instances/$id`,children:n})}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:C(e)}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:e.DBInstanceClass}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:(0,S.jsx)(v,{state:i})}),(0,S.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.Endpoint?.Address??`—`}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:e.AllocatedStorage?`${e.AllocatedStorage} GiB`:`—`}),(0,S.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,S.jsx)(s,{disabled:!u(i)||r.isPending,onClick:e=>{e.stopPropagation(),r.mutate(n)},size:`sm`,variant:`outline`,children:`Start`}),(0,S.jsx)(s,{disabled:!l(i)||w.isPending,onClick:e=>{e.stopPropagation(),w.mutate(n)},size:`sm`,variant:`outline`,children:`Stop`}),(0,S.jsx)(s,{disabled:!d(i)||E.isPending,onClick:e=>{e.stopPropagation(),E.mutate(n)},size:`sm`,variant:`outline`,children:`Reboot`}),(0,S.jsx)(s,{disabled:!c(i),onClick:t=>{t.stopPropagation(),O({identifier:n,deletionProtection:e.DeletionProtection??!1})},size:`sm`,variant:`destructive`,children:`Delete`})]})]},n)})})]})}):(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB instances found.`}),e[6]=A,e[7]=t,e[8]=E,e[9]=r,e[10]=w,e[11]=P):P=e[11];let F;e[12]===D?F=e[13]:(F=D&&(0,S.jsx)(y,{dbInstanceIdentifier:D.identifier,deletionProtection:D.deletionProtection,onOpenChange:e=>{e||O(null)},open:!0}),e[12]=D,e[13]=F);let I;return e[14]!==M||e[15]!==N||e[16]!==P||e[17]!==F?(I=(0,S.jsxs)(S.Fragment,{children:[M,N,P,F]}),e[14]=M,e[15]=N,e[16]=P,e[17]=F,e[18]=I):I=e[18],I}function T(e){e.stopPropagation()}var E=w;export{E as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{t as s}from"./button-qf9lLJ2x.js";import{c,m as l,p as u,u as d}from"./rds-DIuGt87z.js";import{d as f,m as p,p as m}from"./rds-DbPUva_R.js";import{r as h}from"./rds-Ca8CaJkU.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./state-badge-pn00UE1d.js";import{t as y}from"./delete-db-instance-dialog-lxcaswKe.js";var b=r(),x=t(n(),1),S=e();function C(e){return[e.Engine,e.EngineVersion].filter(Boolean).join(` `)}function w(){let e=(0,b.c)(19),t=o(),{data:n}=i(h),r=m(),w=p(),E=f(),[D,O]=(0,x.useState)(null),k;e[0]===n.DBInstances?k=e[1]:(k=n.DBInstances??[],e[0]=n.DBInstances,e[1]=k);let A=k,j=r.error??w.error??E.error,M;e[2]===t?M=e[3]:(M=(0,S.jsx)(g,{actions:(0,S.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-instance`})},children:`Create Database`}),title:`Databases`}),e[2]=t,e[3]=M);let N;e[4]===j?N=e[5]:(N=j&&(0,S.jsx)(_,{error:j,msg:`Failed to change the DB instance state.`}),e[4]=j,e[5]=N);let P;e[6]!==A||e[7]!==t||e[8]!==E||e[9]!==r||e[10]!==w?(P=A.length>0?(0,S.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,S.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Engine`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Class`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Endpoint`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Storage`}),(0,S.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,S.jsx)(`tbody`,{children:A.map(e=>{let n=e.DBInstanceIdentifier;if(!n)return null;let i=e.DBInstanceStatus;return(0,S.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-instances/$id`,params:{id:n}})},children:[(0,S.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,S.jsx)(a,{className:`text-primary hover:underline`,onClick:T,params:{id:n},to:`/rds/describe-db-instances/$id`,children:n})}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:C(e)}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:e.DBInstanceClass}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:(0,S.jsx)(v,{state:i})}),(0,S.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.Endpoint?.Address??`—`}),(0,S.jsx)(`td`,{className:`px-4 py-2`,children:e.AllocatedStorage?`${e.AllocatedStorage} GiB`:`—`}),(0,S.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,S.jsx)(s,{disabled:!u(i)||r.isPending,onClick:e=>{e.stopPropagation(),r.mutate(n)},size:`sm`,variant:`outline`,children:`Start`}),(0,S.jsx)(s,{disabled:!l(i)||w.isPending,onClick:e=>{e.stopPropagation(),w.mutate(n)},size:`sm`,variant:`outline`,children:`Stop`}),(0,S.jsx)(s,{disabled:!d(i)||E.isPending,onClick:e=>{e.stopPropagation(),E.mutate(n)},size:`sm`,variant:`outline`,children:`Reboot`}),(0,S.jsx)(s,{disabled:!c(i),onClick:t=>{t.stopPropagation(),O({identifier:n,deletionProtection:e.DeletionProtection??!1})},size:`sm`,variant:`destructive`,children:`Delete`})]})]},n)})})]})}):(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB instances found.`}),e[6]=A,e[7]=t,e[8]=E,e[9]=r,e[10]=w,e[11]=P):P=e[11];let F;e[12]===D?F=e[13]:(F=D&&(0,S.jsx)(y,{dbInstanceIdentifier:D.identifier,deletionProtection:D.deletionProtection,onOpenChange:e=>{e||O(null)},open:!0}),e[12]=D,e[13]=F);let I;return e[14]!==M||e[15]!==N||e[16]!==P||e[17]!==F?(I=(0,S.jsxs)(S.Fragment,{children:[M,N,P,F]}),e[14]=M,e[15]=N,e[16]=P,e[17]=F,e[18]=I):I=e[18],I}function T(e){e.stopPropagation()}var E=w;export{E as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-Vj5U5CsP.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-DGI1_IDI.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-Vj5U5CsP.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-DGI1_IDI.js index 1e216f29f..c9ebde351 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-Vj5U5CsP.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-parameter-groups-DGI1_IDI.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{t as s}from"./button-BarTr35m.js";import{b as c}from"./rds-CE3126Ga.js";import{d as l}from"./rds-CyiqRExv.js";import{t as u}from"./page-heading-vksh_67w.js";import{t as d}from"./delete-db-parameter-group-dialog-DHJeV95z.js";var f=r(),p=t(n(),1),m=e();function h(){let e=(0,f.c)(14),t=o(),{data:n}=i(l),[r,h]=(0,p.useState)(null),_;e[0]===n.DBParameterGroups?_=e[1]:(_=n.DBParameterGroups??[],e[0]=n.DBParameterGroups,e[1]=_);let v=_,y;e[2]===t?y=e[3]:(y=(0,m.jsx)(u,{actions:(0,m.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-parameter-group`})},children:`Create Parameter Group`}),title:`DB Parameter Groups`}),e[2]=t,e[3]=y);let b;e[4]!==v||e[5]!==t?(b=v.length>0?(0,m.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,m.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Family`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,m.jsx)(`tbody`,{children:v.map(e=>{let n=e.DBParameterGroupName;if(!n)return null;let r=c(n);return(0,m.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-parameter-groups/$name`,params:{name:n}})},children:[(0,m.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(a,{className:`text-primary hover:underline`,onClick:g,params:{name:n},to:`/rds/describe-db-parameter-groups/$name`,children:n})}),(0,m.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.DBParameterGroupFamily}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:r?`Default`:`Customer`}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:e.Description}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,m.jsx)(s,{disabled:r,onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB parameter groups found.`}),e[4]=v,e[5]=t,e[6]=b):b=e[6];let x;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,m.jsx)(`p`,{className:`mt-4 text-xs text-muted-foreground`,children:`A default group is owned by the service. It is readable and attachable but cannot be modified, deleted or tagged — create your own group to change a value.`}),e[7]=x):x=e[7];let S;e[8]===r?S=e[9]:(S=r&&(0,m.jsx)(d,{dbParameterGroupName:r,onOpenChange:e=>{e||h(null)},open:!0}),e[8]=r,e[9]=S);let C;return e[10]!==y||e[11]!==b||e[12]!==S?(C=(0,m.jsxs)(m.Fragment,{children:[y,b,x,S]}),e[10]=y,e[11]=b,e[12]=S,e[13]=C):C=e[13],C}function g(e){e.stopPropagation()}var _=h;export{_ as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{t as s}from"./button-qf9lLJ2x.js";import{b as c}from"./rds-DIuGt87z.js";import{d as l}from"./rds-Ca8CaJkU.js";import{t as u}from"./page-heading-vksh_67w.js";import{t as d}from"./delete-db-parameter-group-dialog-DVhsvQ9C.js";var f=r(),p=t(n(),1),m=e();function h(){let e=(0,f.c)(14),t=o(),{data:n}=i(l),[r,h]=(0,p.useState)(null),_;e[0]===n.DBParameterGroups?_=e[1]:(_=n.DBParameterGroups??[],e[0]=n.DBParameterGroups,e[1]=_);let v=_,y;e[2]===t?y=e[3]:(y=(0,m.jsx)(u,{actions:(0,m.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-parameter-group`})},children:`Create Parameter Group`}),title:`DB Parameter Groups`}),e[2]=t,e[3]=y);let b;e[4]!==v||e[5]!==t?(b=v.length>0?(0,m.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,m.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Family`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,m.jsx)(`tbody`,{children:v.map(e=>{let n=e.DBParameterGroupName;if(!n)return null;let r=c(n);return(0,m.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-parameter-groups/$name`,params:{name:n}})},children:[(0,m.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(a,{className:`text-primary hover:underline`,onClick:g,params:{name:n},to:`/rds/describe-db-parameter-groups/$name`,children:n})}),(0,m.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.DBParameterGroupFamily}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:r?`Default`:`Customer`}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:e.Description}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,m.jsx)(s,{disabled:r,onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB parameter groups found.`}),e[4]=v,e[5]=t,e[6]=b):b=e[6];let x;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,m.jsx)(`p`,{className:`mt-4 text-xs text-muted-foreground`,children:`A default group is owned by the service. It is readable and attachable but cannot be modified, deleted or tagged — create your own group to change a value.`}),e[7]=x):x=e[7];let S;e[8]===r?S=e[9]:(S=r&&(0,m.jsx)(d,{dbParameterGroupName:r,onOpenChange:e=>{e||h(null)},open:!0}),e[8]=r,e[9]=S);let C;return e[10]!==y||e[11]!==b||e[12]!==S?(C=(0,m.jsxs)(m.Fragment,{children:[y,b,x,S]}),e[10]=y,e[11]=b,e[12]=S,e[13]=C):C=e[13],C}function g(e){e.stopPropagation()}var _=h;export{_ as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-DXVrzU4j.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-Dueg64Bg.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-DXVrzU4j.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-Dueg64Bg.js index 69684fbbf..adfa9e6a6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-DXVrzU4j.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-snapshots-Dueg64Bg.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{in as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./button-BarTr35m.js";import{a as l,d as u,l as d,o as f}from"./rds-CE3126Ga.js";import{a as p}from"./rds-CyiqRExv.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./state-badge-D1Z6q_OA.js";import{t as g}from"./create-db-snapshot-dialog-CiBeyQ69.js";import{t as _}from"./delete-db-snapshot-dialog-D3b3mehr.js";var v=r(),y=t(n(),1),b=e(),x=[{value:``,label:`All types`},{value:f,label:`Manual`},{value:l,label:`Automated`}];function S(){let e=(0,v.c)(26),t=o(),{data:n}=i(p),[r,l]=(0,y.useState)(``),[f,S]=(0,y.useState)(!1),[C,w]=(0,y.useState)(null),T;e[0]===n.DBSnapshots?T=e[1]:(T=n.DBSnapshots??[],e[0]=n.DBSnapshots,e[1]=T);let E,D,O;if(e[2]!==t||e[3]!==T||e[4]!==r){let n;e[8]===r?n=e[9]:(n=e=>r===``||e.SnapshotType===r,e[8]=r,e[9]=n);let i=T.filter(n);e[10]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,b.jsx)(m,{actions:(0,b.jsx)(c,{onClick:()=>{S(!0)},children:`Take Snapshot`}),title:`Snapshots`}),e[10]=E):E=e[10];let o;e[11]===r?o=e[12]:(o=x.map(e=>(0,b.jsx)(c,{onClick:()=>{l(e.value)},size:`sm`,variant:r===e.value?`default`:`outline`,children:e.label},e.value)),e[11]=r,e[12]=o),e[13]===o?D=e[14]:(D=(0,b.jsx)(`div`,{className:`mb-4 flex items-center gap-2`,children:o}),e[13]=o,e[14]=D),O=i.length>0?(0,b.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,b.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,b.jsx)(`thead`,{children:(0,b.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`DB instance`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Engine`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Storage`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,b.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,b.jsx)(`tbody`,{children:i.map(e=>{let n=e.DBSnapshotIdentifier;if(!n)return null;let r=e.DBInstanceIdentifier??``;return(0,b.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,b.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,b.jsx)(a,{className:`text-primary hover:underline`,params:{id:n},to:`/rds/describe-db-snapshots/$id`,children:n})}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:r===``?`—`:(0,b.jsx)(a,{className:`text-primary hover:underline`,params:{id:r},to:`/rds/describe-db-instances/$id`,children:r})}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:e.SnapshotType}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:[e.Engine,e.EngineVersion].filter(Boolean).join(` `)}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:e.AllocatedStorage?`${e.AllocatedStorage} GiB`:`—`}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:(0,b.jsx)(h,{state:e.Status})}),(0,b.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:s(e.SnapshotCreateTime)}),(0,b.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,b.jsx)(c,{disabled:!u(e.Status),onClick:async()=>{await t({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:n}})},size:`sm`,variant:`outline`,children:`Restore`}),(0,b.jsx)(c,{disabled:!d(e.Status,e.SnapshotType),onClick:()=>{w(n)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},n)})})]})}):(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB snapshots found.`}),e[2]=t,e[3]=T,e[4]=r,e[5]=E,e[6]=D,e[7]=O}else E=e[5],D=e[6],O=e[7];let k;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,b.jsx)(`p`,{className:`mt-4 text-xs text-muted-foreground`,children:`Automated backups live in the reserved rds: namespace and cannot be deleted by hand — the instance's backup retention is what removes them.`}),e[15]=k):k=e[15];let A;e[16]===f?A=e[17]:(A=f&&(0,b.jsx)(g,{onOpenChange:S,open:!0}),e[16]=f,e[17]=A);let j;e[18]===C?j=e[19]:(j=C&&(0,b.jsx)(_,{dbSnapshotIdentifier:C,onOpenChange:e=>{e||w(null)},open:!0}),e[18]=C,e[19]=j);let M;return e[20]!==E||e[21]!==D||e[22]!==O||e[23]!==A||e[24]!==j?(M=(0,b.jsxs)(b.Fragment,{children:[E,D,O,k,A,j]}),e[20]=E,e[21]=D,e[22]=O,e[23]=A,e[24]=j,e[25]=M):M=e[25],M}var C=S;export{C as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{an as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./button-qf9lLJ2x.js";import{a as l,d as u,l as d,o as f}from"./rds-DIuGt87z.js";import{a as p}from"./rds-Ca8CaJkU.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./state-badge-pn00UE1d.js";import{t as g}from"./create-db-snapshot-dialog-5YPk6G0l.js";import{t as _}from"./delete-db-snapshot-dialog-elwW83vt.js";var v=r(),y=t(n(),1),b=e(),x=[{value:``,label:`All types`},{value:f,label:`Manual`},{value:l,label:`Automated`}];function S(){let e=(0,v.c)(26),t=o(),{data:n}=i(p),[r,l]=(0,y.useState)(``),[f,S]=(0,y.useState)(!1),[C,w]=(0,y.useState)(null),T;e[0]===n.DBSnapshots?T=e[1]:(T=n.DBSnapshots??[],e[0]=n.DBSnapshots,e[1]=T);let E,D,O;if(e[2]!==t||e[3]!==T||e[4]!==r){let n;e[8]===r?n=e[9]:(n=e=>r===``||e.SnapshotType===r,e[8]=r,e[9]=n);let i=T.filter(n);e[10]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,b.jsx)(m,{actions:(0,b.jsx)(c,{onClick:()=>{S(!0)},children:`Take Snapshot`}),title:`Snapshots`}),e[10]=E):E=e[10];let o;e[11]===r?o=e[12]:(o=x.map(e=>(0,b.jsx)(c,{onClick:()=>{l(e.value)},size:`sm`,variant:r===e.value?`default`:`outline`,children:e.label},e.value)),e[11]=r,e[12]=o),e[13]===o?D=e[14]:(D=(0,b.jsx)(`div`,{className:`mb-4 flex items-center gap-2`,children:o}),e[13]=o,e[14]=D),O=i.length>0?(0,b.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,b.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,b.jsx)(`thead`,{children:(0,b.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Identifier`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`DB instance`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Engine`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Storage`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,b.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,b.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,b.jsx)(`tbody`,{children:i.map(e=>{let n=e.DBSnapshotIdentifier;if(!n)return null;let r=e.DBInstanceIdentifier??``;return(0,b.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,b.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,b.jsx)(a,{className:`text-primary hover:underline`,params:{id:n},to:`/rds/describe-db-snapshots/$id`,children:n})}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:r===``?`—`:(0,b.jsx)(a,{className:`text-primary hover:underline`,params:{id:r},to:`/rds/describe-db-instances/$id`,children:r})}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:e.SnapshotType}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:[e.Engine,e.EngineVersion].filter(Boolean).join(` `)}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:e.AllocatedStorage?`${e.AllocatedStorage} GiB`:`—`}),(0,b.jsx)(`td`,{className:`px-4 py-2`,children:(0,b.jsx)(h,{state:e.Status})}),(0,b.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:s(e.SnapshotCreateTime)}),(0,b.jsxs)(`td`,{className:`space-x-2 px-4 py-2 text-right`,children:[(0,b.jsx)(c,{disabled:!u(e.Status),onClick:async()=>{await t({to:`/rds/restore-db-instance-from-db-snapshot/$id`,params:{id:n}})},size:`sm`,variant:`outline`,children:`Restore`}),(0,b.jsx)(c,{disabled:!d(e.Status,e.SnapshotType),onClick:()=>{w(n)},size:`sm`,variant:`destructive`,children:`Delete`})]})]},n)})})]})}):(0,b.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB snapshots found.`}),e[2]=t,e[3]=T,e[4]=r,e[5]=E,e[6]=D,e[7]=O}else E=e[5],D=e[6],O=e[7];let k;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,b.jsx)(`p`,{className:`mt-4 text-xs text-muted-foreground`,children:`Automated backups live in the reserved rds: namespace and cannot be deleted by hand — the instance's backup retention is what removes them.`}),e[15]=k):k=e[15];let A;e[16]===f?A=e[17]:(A=f&&(0,b.jsx)(g,{onOpenChange:S,open:!0}),e[16]=f,e[17]=A);let j;e[18]===C?j=e[19]:(j=C&&(0,b.jsx)(_,{dbSnapshotIdentifier:C,onOpenChange:e=>{e||w(null)},open:!0}),e[18]=C,e[19]=j);let M;return e[20]!==E||e[21]!==D||e[22]!==O||e[23]!==A||e[24]!==j?(M=(0,b.jsxs)(b.Fragment,{children:[E,D,O,k,A,j]}),e[20]=E,e[21]=D,e[22]=O,e[23]=A,e[24]=j,e[25]=M):M=e[25],M}var C=S;export{C as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-B9VO6RnW.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-CUjsw06h.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-B9VO6RnW.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-CUjsw06h.js index 178cd0e7a..789340361 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-B9VO6RnW.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-db-subnet-groups-CUjsw06h.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{t as s}from"./button-BarTr35m.js";import{h as c}from"./rds-CyiqRExv.js";import{t as l}from"./page-heading-vksh_67w.js";import{t as u}from"./state-badge-D1Z6q_OA.js";import{t as d}from"./delete-db-subnet-group-dialog-BgemfFMN.js";var f=r(),p=t(n(),1),m=e();function h(){let e=(0,f.c)(13),t=o(),{data:n}=i(c),[r,h]=(0,p.useState)(null),_;e[0]===n.DBSubnetGroups?_=e[1]:(_=n.DBSubnetGroups??[],e[0]=n.DBSubnetGroups,e[1]=_);let v=_,y;e[2]===t?y=e[3]:(y=(0,m.jsx)(l,{actions:(0,m.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-subnet-group`})},children:`Create Subnet Group`}),title:`DB Subnet Groups`}),e[2]=t,e[3]=y);let b;e[4]!==v||e[5]!==t?(b=v.length>0?(0,m.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,m.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Subnets`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,m.jsx)(`tbody`,{children:v.map(e=>{let n=e.DBSubnetGroupName;return n?(0,m.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-subnet-groups/$name`,params:{name:n}})},children:[(0,m.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(a,{className:`text-primary hover:underline`,onClick:g,params:{name:n},to:`/rds/describe-db-subnet-groups/$name`,children:n})}),(0,m.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??`—`}),(0,m.jsx)(`td`,{className:`px-4 py-2`,children:e.Subnets?.length??0}),(0,m.jsx)(`td`,{className:`px-4 py-2`,children:(0,m.jsx)(u,{state:e.SubnetGroupStatus})}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:e.DBSubnetGroupDescription}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,m.jsx)(s,{onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n):null})})]})}):(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB subnet groups found. Without one, a database is placed in the account's default VPC subnet.`}),e[4]=v,e[5]=t,e[6]=b):b=e[6];let x;e[7]===r?x=e[8]:(x=r&&(0,m.jsx)(d,{dbSubnetGroupName:r,onOpenChange:e=>{e||h(null)},open:!0}),e[7]=r,e[8]=x);let S;return e[9]!==y||e[10]!==b||e[11]!==x?(S=(0,m.jsxs)(m.Fragment,{children:[y,b,x]}),e[9]=y,e[10]=b,e[11]=x,e[12]=S):S=e[12],S}function g(e){e.stopPropagation()}var _=h;export{_ as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{t as s}from"./button-qf9lLJ2x.js";import{h as c}from"./rds-Ca8CaJkU.js";import{t as l}from"./page-heading-vksh_67w.js";import{t as u}from"./state-badge-pn00UE1d.js";import{t as d}from"./delete-db-subnet-group-dialog-Mj0lUr0p.js";var f=r(),p=t(n(),1),m=e();function h(){let e=(0,f.c)(13),t=o(),{data:n}=i(c),[r,h]=(0,p.useState)(null),_;e[0]===n.DBSubnetGroups?_=e[1]:(_=n.DBSubnetGroups??[],e[0]=n.DBSubnetGroups,e[1]=_);let v=_,y;e[2]===t?y=e[3]:(y=(0,m.jsx)(l,{actions:(0,m.jsx)(s,{onClick:async()=>{await t({to:`/rds/create-db-subnet-group`})},children:`Create Subnet Group`}),title:`DB Subnet Groups`}),e[2]=t,e[3]=y);let b;e[4]!==v||e[5]!==t?(b=v.length>0?(0,m.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,m.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Subnets`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Description`}),(0,m.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,m.jsx)(`tbody`,{children:v.map(e=>{let n=e.DBSubnetGroupName;return n?(0,m.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/rds/describe-db-subnet-groups/$name`,params:{name:n}})},children:[(0,m.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,m.jsx)(a,{className:`text-primary hover:underline`,onClick:g,params:{name:n},to:`/rds/describe-db-subnet-groups/$name`,children:n})}),(0,m.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??`—`}),(0,m.jsx)(`td`,{className:`px-4 py-2`,children:e.Subnets?.length??0}),(0,m.jsx)(`td`,{className:`px-4 py-2`,children:(0,m.jsx)(u,{state:e.SubnetGroupStatus})}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:e.DBSubnetGroupDescription}),(0,m.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,m.jsx)(s,{onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n):null})})]})}):(0,m.jsx)(`p`,{className:`text-muted-foreground`,children:`No DB subnet groups found. Without one, a database is placed in the account's default VPC subnet.`}),e[4]=v,e[5]=t,e[6]=b):b=e[6];let x;e[7]===r?x=e[8]:(x=r&&(0,m.jsx)(d,{dbSubnetGroupName:r,onOpenChange:e=>{e||h(null)},open:!0}),e[7]=r,e[8]=x);let S;return e[9]!==y||e[10]!==b||e[11]!==x?(S=(0,m.jsxs)(m.Fragment,{children:[y,b,x]}),e[9]=y,e[10]=b,e[11]=x,e[12]=S):S=e[12],S}function g(e){e.stopPropagation()}var _=h;export{_ as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-Zp7giKqa.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-D95mop7O.js similarity index 81% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-Zp7giKqa.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-D95mop7O.js index 2d0c72b9d..cb33191d3 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-Zp7giKqa.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-images-D95mop7O.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{o as r}from"./ec2-CWEplLq4.js";import{t as i}from"./page-heading-vksh_67w.js";import{t as a}from"./state-badge-D1Z6q_OA.js";import{t as o}from"./list-card-DFj_XTL4.js";import{i as s}from"./system-managed-Dk7ySh_E.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(r),a;e[0]===t.Images?a=e[1]:(a=t.Images??[],e[0]=t.Images,e[1]=a);let o;if(e[2]!==a){let t=a.filter(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(i,{title:`Images`}),e[4]=n):n=e[4],o=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No images found.`})]}),e[2]=a,e[3]=o}else o=e[3];return o}function d(e){return e.ImageId?(0,l.jsx)(o,{badge:(0,l.jsx)(a,{state:e.State}),params:{id:e.ImageId},subtitle:e.ImageId??``,title:e.Name??e.ImageId??``,to:`/ec2/describe-images/$id`},e.ImageId):null}function f(e){return!s(e)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{o as r}from"./ec2-DYgBhYCJ.js";import{t as i}from"./page-heading-vksh_67w.js";import{t as a}from"./state-badge-pn00UE1d.js";import{t as o}from"./list-card-PsHyk9Gp.js";import{i as s}from"./system-managed-Dk7ySh_E.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(r),a;e[0]===t.Images?a=e[1]:(a=t.Images??[],e[0]=t.Images,e[1]=a);let o;if(e[2]!==a){let t=a.filter(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(i,{title:`Images`}),e[4]=n):n=e[4],o=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No images found.`})]}),e[2]=a,e[3]=o}else o=e[3];return o}function d(e){return e.ImageId?(0,l.jsx)(o,{badge:(0,l.jsx)(a,{state:e.State}),params:{id:e.ImageId},subtitle:e.ImageId??``,title:e.Name??e.ImageId??``,to:`/ec2/describe-images/$id`},e.ImageId):null}function f(e){return!s(e)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-BK0FW0LB.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-C7L5X-xg.js similarity index 82% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-BK0FW0LB.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-C7L5X-xg.js index a4a30aa96..2d990a51c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-BK0FW0LB.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-instances-C7L5X-xg.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{l as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e(),d={running:0,pending:1,stopping:2,"shutting-down":3,stopped:4,terminated:5};function f(){let e=(0,l.c)(3),{data:t}=n(a),s;if(e[0]!==t.Reservations){let n=(t.Reservations?.flatMap(h)??[]).toSorted(m),a;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/run-instances`,children:(0,u.jsx)(i,{children:`Run Instances`})}),title:`Instances`}),e[2]=a):a=e[2],s=(0,u.jsxs)(u.Fragment,{children:[a,n.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:n.map(p)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No instances found.`})]}),e[0]=t.Reservations,e[1]=s}else s=e[1];return s}function p(e){return e.InstanceId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State?.Name}),params:{id:e.InstanceId},subtitle:`${e.InstanceType}`,title:e.InstanceId,to:`/ec2/describe-instances/$id`},e.InstanceId):null}function m(e,t){let n=d[e.State?.Name??``]??6,r=d[t.State?.Name??``]??6;return n===r?(e.InstanceId??``).localeCompare(t.InstanceId??``):n-r}function h(e){return e.Instances??[]}export{f as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{l as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e(),d={running:0,pending:1,stopping:2,"shutting-down":3,stopped:4,terminated:5};function f(){let e=(0,l.c)(3),{data:t}=n(a),s;if(e[0]!==t.Reservations){let n=(t.Reservations?.flatMap(h)??[]).toSorted(m),a;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/run-instances`,children:(0,u.jsx)(i,{children:`Run Instances`})}),title:`Instances`}),e[2]=a):a=e[2],s=(0,u.jsxs)(u.Fragment,{children:[a,n.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:n.map(p)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No instances found.`})]}),e[0]=t.Reservations,e[1]=s}else s=e[1];return s}function p(e){return e.InstanceId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State?.Name}),params:{id:e.InstanceId},subtitle:`${e.InstanceType}`,title:e.InstanceId,to:`/ec2/describe-instances/$id`},e.InstanceId):null}function m(e,t){let n=d[e.State?.Name??``]??6,r=d[t.State?.Name??``]??6;return n===r?(e.InstanceId??``).localeCompare(t.InstanceId??``):n-r}function h(e){return e.Instances??[]}export{f as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-CiiBScpk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-Dh9zgncU.js similarity index 80% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-CiiBScpk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-Dh9zgncU.js index 389fbf0cd..b6412d3b5 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-CiiBScpk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-internet-gateways-Dh9zgncU.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{d as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.InternetGateways?i=e[1]:(i=t.InternetGateways??[],e[0]=t.InternetGateways,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/ec2/create-internet-gateway`,children:(0,u.jsx)(a,{children:`Create Internet Gateway`})}),title:`Internet Gateways`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No Internet Gateways found.`})]}),e[3]=c,e[4]=p),p}function f(e){if(!e.InternetGatewayId)return null;let t=i(e.Tags),n=e.Attachments?.[0]?.VpcId;return(0,u.jsx)(c,{params:{id:e.InternetGatewayId},subtitle:n?`attached to ${n}`:`detached`,title:t?`${e.InternetGatewayId} (${t})`:e.InternetGatewayId,to:`/ec2/describe-internet-gateways/$id`},e.InternetGatewayId)}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{d as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.InternetGateways?i=e[1]:(i=t.InternetGateways??[],e[0]=t.InternetGateways,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/ec2/create-internet-gateway`,children:(0,u.jsx)(a,{children:`Create Internet Gateway`})}),title:`Internet Gateways`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No Internet Gateways found.`})]}),e[3]=c,e[4]=p),p}function f(e){if(!e.InternetGatewayId)return null;let t=i(e.Tags),n=e.Attachments?.[0]?.VpcId;return(0,u.jsx)(c,{params:{id:e.InternetGatewayId},subtitle:n?`attached to ${n}`:`detached`,title:t?`${e.InternetGatewayId} (${t})`:e.InternetGatewayId,to:`/ec2/describe-internet-gateways/$id`},e.InternetGatewayId)}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-BRKxsJWn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-CIcalo7_.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-BRKxsJWn.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-CIcalo7_.js index 8572cdef7..9c3d75213 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-BRKxsJWn.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-key-pairs-CIcalo7_.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{p as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(6),{data:t}=n(a),s;e[0]===t.KeyPairs?s=e[1]:(s=t.KeyPairs??[],e[0]=t.KeyPairs,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(r,{to:`/ec2/import-key-pair`,children:(0,l.jsx)(i,{variant:`outline`,children:`Import Key Pair`})}),e[4]=n):n=e[4];let a;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,l.jsx)(o,{actions:(0,l.jsxs)(`div`,{className:`flex gap-2`,children:[n,(0,l.jsx)(r,{to:`/ec2/create-key-pair`,children:(0,l.jsx)(i,{children:`Create Key Pair`})})]}),title:`Key Pairs`}),e[5]=a):a=e[5],u=(0,l.jsxs)(l.Fragment,{children:[a,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No key pairs found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.KeyPairId?(0,l.jsx)(s,{params:{id:e.KeyPairId},subtitle:e.KeyPairId??``,title:e.KeyName??``,to:`/ec2/describe-key-pairs/$id`},e.KeyPairId):null}function f(e,t){let n=e.KeyName?.toLowerCase()??``,r=t.KeyName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{p as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(6),{data:t}=n(a),s;e[0]===t.KeyPairs?s=e[1]:(s=t.KeyPairs??[],e[0]=t.KeyPairs,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(r,{to:`/ec2/import-key-pair`,children:(0,l.jsx)(i,{variant:`outline`,children:`Import Key Pair`})}),e[4]=n):n=e[4];let a;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,l.jsx)(o,{actions:(0,l.jsxs)(`div`,{className:`flex gap-2`,children:[n,(0,l.jsx)(r,{to:`/ec2/create-key-pair`,children:(0,l.jsx)(i,{children:`Create Key Pair`})})]}),title:`Key Pairs`}),e[5]=a):a=e[5],u=(0,l.jsxs)(l.Fragment,{children:[a,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No key pairs found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.KeyPairId?(0,l.jsx)(s,{params:{id:e.KeyPairId},subtitle:e.KeyPairId??``,title:e.KeyName??``,to:`/ec2/describe-key-pairs/$id`},e.KeyPairId):null}function f(e,t){let n=e.KeyName?.toLowerCase()??``,r=t.KeyName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-BuaCkV_y.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-16l2HSO9.js similarity index 81% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-BuaCkV_y.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-16l2HSO9.js index 78eb60063..165f01459 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-BuaCkV_y.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-launch-templates-16l2HSO9.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{h as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./badge-B_ExXcw2.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.LaunchTemplates?s=e[1]:(s=t.LaunchTemplates??[],e[0]=t.LaunchTemplates,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-launch-template`,children:(0,u.jsx)(i,{children:`Create Launch Template`})}),title:`Launch Templates`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No launch templates found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.LaunchTemplateId?(0,u.jsx)(c,{badge:(0,u.jsxs)(s,{variant:`secondary`,children:[`default v`,e.DefaultVersionNumber]}),params:{id:e.LaunchTemplateId},subtitle:`${e.LaunchTemplateId} • latest v${e.LatestVersionNumber}`,title:e.LaunchTemplateName??e.LaunchTemplateId,to:`/ec2/describe-launch-templates/$id`},e.LaunchTemplateId):null}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{h as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./badge-6vbuGFqk.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.LaunchTemplates?s=e[1]:(s=t.LaunchTemplates??[],e[0]=t.LaunchTemplates,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-launch-template`,children:(0,u.jsx)(i,{children:`Create Launch Template`})}),title:`Launch Templates`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No launch templates found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.LaunchTemplateId?(0,u.jsx)(c,{badge:(0,u.jsxs)(s,{variant:`secondary`,children:[`default v`,e.DefaultVersionNumber]}),params:{id:e.LaunchTemplateId},subtitle:`${e.LaunchTemplateId} • latest v${e.LatestVersionNumber}`,title:e.LaunchTemplateName??e.LaunchTemplateId,to:`/ec2/describe-launch-templates/$id`},e.LaunchTemplateId):null}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-ayJnDdyt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-CvSYkE1t.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-ayJnDdyt.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-CvSYkE1t.js index 1448f1727..4c8e767fd 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-ayJnDdyt.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-load-balancers-CvSYkE1t.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./useNavigate-BH3pQKLF.js";import{in as a}from"./cluster-config-xw_Q7X1e.js";import{t as o}from"./button-BarTr35m.js";import{a as s}from"./elbv2-DSjTzB2q.js";import{t as c}from"./page-heading-vksh_67w.js";import{t as l}from"./state-badge-D1Z6q_OA.js";var u=t(),d=e();function f(){let e=(0,u.c)(10),t=i(),{data:f}=n(s),m;e[0]===f.LoadBalancers?m=e[1]:(m=f.LoadBalancers??[],e[0]=f.LoadBalancers,e[1]=m);let h=m,g;e[2]===t?g=e[3]:(g=(0,d.jsx)(c,{actions:(0,d.jsx)(o,{onClick:async()=>{await t({to:`/ec2/create-load-balancer`})},children:`Create Load Balancer`}),title:`Load Balancers`}),e[2]=t,e[3]=g);let _;e[4]!==h||e[5]!==t?(_=h.length>0?(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`DNS Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`State`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Scheme`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`})]})}),(0,d.jsx)(`tbody`,{children:h.map(e=>{if(!e.LoadBalancerArn)return null;let n=e.LoadBalancerArn;return(0,d.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ec2/describe-load-balancers/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,d.jsx)(r,{className:`text-primary hover:underline`,onClick:p,params:{id:encodeURIComponent(n)},to:`/ec2/describe-load-balancers/$id`,children:e.LoadBalancerName??n})}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.DNSName??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:(0,d.jsx)(l,{state:e.State?.Code})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Type??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Scheme??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:a(e.CreatedTime)})]},n)})})]})}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No load balancers found.`}),e[4]=h,e[5]=t,e[6]=_):_=e[6];let v;return e[7]!==g||e[8]!==_?(v=(0,d.jsxs)(d.Fragment,{children:[g,_]}),e[7]=g,e[8]=_,e[9]=v):v=e[9],v}function p(e){e.stopPropagation()}var m=f;export{m as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./useNavigate-CTe_-BZA.js";import{an as a}from"./cluster-config-DkOiY8HH.js";import{t as o}from"./button-qf9lLJ2x.js";import{a as s}from"./elbv2-CmXUhudd.js";import{t as c}from"./page-heading-vksh_67w.js";import{t as l}from"./state-badge-pn00UE1d.js";var u=t(),d=e();function f(){let e=(0,u.c)(10),t=i(),{data:f}=n(s),m;e[0]===f.LoadBalancers?m=e[1]:(m=f.LoadBalancers??[],e[0]=f.LoadBalancers,e[1]=m);let h=m,g;e[2]===t?g=e[3]:(g=(0,d.jsx)(c,{actions:(0,d.jsx)(o,{onClick:async()=>{await t({to:`/ec2/create-load-balancer`})},children:`Create Load Balancer`}),title:`Load Balancers`}),e[2]=t,e[3]=g);let _;e[4]!==h||e[5]!==t?(_=h.length>0?(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`DNS Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`State`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Type`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Scheme`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`})]})}),(0,d.jsx)(`tbody`,{children:h.map(e=>{if(!e.LoadBalancerArn)return null;let n=e.LoadBalancerArn;return(0,d.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ec2/describe-load-balancers/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,d.jsx)(r,{className:`text-primary hover:underline`,onClick:p,params:{id:encodeURIComponent(n)},to:`/ec2/describe-load-balancers/$id`,children:e.LoadBalancerName??n})}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.DNSName??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:(0,d.jsx)(l,{state:e.State?.Code})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Type??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Scheme??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:a(e.CreatedTime)})]},n)})})]})}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No load balancers found.`}),e[4]=h,e[5]=t,e[6]=_):_=e[6];let v;return e[7]!==g||e[8]!==_?(v=(0,d.jsxs)(d.Fragment,{children:[g,_]}),e[7]=g,e[8]=_,e[9]=v):v=e[9],v}function p(e){e.stopPropagation()}var m=f;export{m as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-B8p3GKN1.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-BeyzhmC1.js similarity index 75% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-B8p3GKN1.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-BeyzhmC1.js index 91ab359c1..a0c022436 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-B8p3GKN1.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-nat-gateways-BeyzhmC1.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{_ as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-D1Z6q_OA.js";import{t as l}from"./list-card-DFj_XTL4.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.NatGateways?i=e[1]:(i=t.NatGateways??[],e[0]=t.NatGateways,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-nat-gateway`,children:(0,d.jsx)(a,{children:`Create NAT Gateway`})}),title:`NAT Gateways`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No NAT Gateways found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.NatGatewayId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.NatGatewayId},subtitle:e.SubnetId??``,title:t?`${e.NatGatewayId} (${t})`:e.NatGatewayId,to:`/ec2/describe-nat-gateways/$id`},e.NatGatewayId)}export{f as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{_ as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-pn00UE1d.js";import{t as l}from"./list-card-PsHyk9Gp.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.NatGateways?i=e[1]:(i=t.NatGateways??[],e[0]=t.NatGateways,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-nat-gateway`,children:(0,d.jsx)(a,{children:`Create NAT Gateway`})}),title:`NAT Gateways`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No NAT Gateways found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.NatGatewayId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.NatGatewayId},subtitle:e.SubnetId??``,title:t?`${e.NatGatewayId} (${t})`:e.NatGatewayId,to:`/ec2/describe-nat-gateways/$id`},e.NatGatewayId)}export{f as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-XiQbPRZ5.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-DO9--Khm.js similarity index 79% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-XiQbPRZ5.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-DO9--Khm.js index 647d1be81..283406e27 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-XiQbPRZ5.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-placement-groups-DO9--Khm.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{y as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.PlacementGroups?s=e[1]:(s=t.PlacementGroups??[],e[0]=t.PlacementGroups,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-placement-group`,children:(0,u.jsx)(i,{children:`Create Placement Group`})}),title:`Placement Groups`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No placement groups found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.GroupId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.GroupId},subtitle:`${e.Strategy} \u2022 ${e.GroupId}`,title:e.GroupName??e.GroupId,to:`/ec2/describe-placement-groups/$id`},e.GroupId):null}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{y as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.PlacementGroups?s=e[1]:(s=t.PlacementGroups??[],e[0]=t.PlacementGroups,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-placement-group`,children:(0,u.jsx)(i,{children:`Create Placement Group`})}),title:`Placement Groups`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No placement groups found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.GroupId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.GroupId},subtitle:`${e.Strategy} \u2022 ${e.GroupId}`,title:e.GroupName??e.GroupId,to:`/ec2/describe-placement-groups/$id`},e.GroupId):null}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-Cz9uMOpx.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-B3zHyrvm.js similarity index 78% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-Cz9uMOpx.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-B3zHyrvm.js index 472ff8ff4..7211bc5e0 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-Cz9uMOpx.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-route-tables-B3zHyrvm.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{S as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./badge-B_ExXcw2.js";import{t as l}from"./list-card-DFj_XTL4.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.RouteTables?i=e[1]:(i=t.RouteTables??[],e[0]=t.RouteTables,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-route-table`,children:(0,d.jsx)(a,{children:`Create Route Table`})}),title:`Route Tables`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No Route Tables found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.RouteTableId)return null;let t=i(e.Tags),n=e.Associations?.some(h)??!1,r=e.Associations?.filter(m).length??0;return(0,d.jsx)(l,{badge:n?(0,d.jsx)(c,{variant:`secondary`,children:`Main`}):null,params:{id:e.RouteTableId},subtitle:`${e.VpcId??``} · ${r} subnet${r===1?``:`s`}`,title:t?`${e.RouteTableId} (${t})`:e.RouteTableId,to:`/ec2/describe-route-tables/$id`},e.RouteTableId)}function m(e){return e.SubnetId}function h(e){return e.Main}export{f as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{S as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./badge-6vbuGFqk.js";import{t as l}from"./list-card-PsHyk9Gp.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.RouteTables?i=e[1]:(i=t.RouteTables??[],e[0]=t.RouteTables,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-route-table`,children:(0,d.jsx)(a,{children:`Create Route Table`})}),title:`Route Tables`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No Route Tables found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.RouteTableId)return null;let t=i(e.Tags),n=e.Associations?.some(h)??!1,r=e.Associations?.filter(m).length??0;return(0,d.jsx)(l,{badge:n?(0,d.jsx)(c,{variant:`secondary`,children:`Main`}):null,params:{id:e.RouteTableId},subtitle:`${e.VpcId??``} · ${r} subnet${r===1?``:`s`}`,title:t?`${e.RouteTableId} (${t})`:e.RouteTableId,to:`/ec2/describe-route-tables/$id`},e.RouteTableId)}function m(e){return e.SubnetId}function h(e){return e.Main}export{f as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-uryLUVIn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-05FUEYLk.js similarity index 83% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-uryLUVIn.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-05FUEYLk.js index 521576ffc..32c81bb77 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-uryLUVIn.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-security-groups-05FUEYLk.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{w as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.SecurityGroups?s=e[1]:(s=t.SecurityGroups??[],e[0]=t.SecurityGroups,e[1]=s);let u=s,f;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/ec2/create-security-group`,children:(0,l.jsx)(i,{children:`Create Security Group`})}),title:`Security Groups`}),e[2]=f):f=e[2];let p;return e[3]===u?p=e[4]:(p=(0,l.jsxs)(l.Fragment,{children:[f,u.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:u.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No security groups found.`})]}),e[3]=u,e[4]=p),p}function d(e){return e.GroupId?(0,l.jsx)(s,{params:{id:e.GroupId},subtitle:e.VpcId??``,title:e.GroupName?`${e.GroupId} (${e.GroupName})`:e.GroupId,to:`/ec2/describe-security-groups/$id`},e.GroupId):null}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{w as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.SecurityGroups?s=e[1]:(s=t.SecurityGroups??[],e[0]=t.SecurityGroups,e[1]=s);let u=s,f;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/ec2/create-security-group`,children:(0,l.jsx)(i,{children:`Create Security Group`})}),title:`Security Groups`}),e[2]=f):f=e[2];let p;return e[3]===u?p=e[4]:(p=(0,l.jsxs)(l.Fragment,{children:[f,u.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:u.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No security groups found.`})]}),e[3]=u,e[4]=p),p}function d(e){return e.GroupId?(0,l.jsx)(s,{params:{id:e.GroupId},subtitle:e.VpcId??``,title:e.GroupName?`${e.GroupId} (${e.GroupName})`:e.GroupId,to:`/ec2/describe-security-groups/$id`},e.GroupId):null}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-63g9NU9g.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-DJhUVUCi.js similarity index 78% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-63g9NU9g.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-DJhUVUCi.js index da21ab9ed..fab33dcc7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-63g9NU9g.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-snapshots-DJhUVUCi.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{E as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.Snapshots?s=e[1]:(s=t.Snapshots??[],e[0]=t.Snapshots,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-snapshot`,children:(0,u.jsx)(i,{children:`Create Snapshot`})}),title:`Snapshots`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No snapshots found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.SnapshotId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.SnapshotId},subtitle:`${e.VolumeSize} GiB \u2022 ${e.VolumeId}`,title:e.SnapshotId,to:`/ec2/describe-snapshots/$id`},e.SnapshotId):null}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{E as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.Snapshots?s=e[1]:(s=t.Snapshots??[],e[0]=t.Snapshots,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-snapshot`,children:(0,u.jsx)(i,{children:`Create Snapshot`})}),title:`Snapshots`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No snapshots found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.SnapshotId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.SnapshotId},subtitle:`${e.VolumeSize} GiB \u2022 ${e.VolumeId}`,title:e.SnapshotId,to:`/ec2/describe-snapshots/$id`},e.SnapshotId):null}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-lWLraP1d.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-Rh3w0AKG.js similarity index 75% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-lWLraP1d.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-Rh3w0AKG.js index 1e5d5c6ac..af100a81f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-lWLraP1d.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-subnets-Rh3w0AKG.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{O as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-D1Z6q_OA.js";import{t as l}from"./list-card-DFj_XTL4.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.Subnets?i=e[1]:(i=t.Subnets??[],e[0]=t.Subnets,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-subnet`,children:(0,d.jsx)(a,{children:`Create Subnet`})}),title:`Subnets`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No subnets found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.SubnetId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.SubnetId},subtitle:`${e.CidrBlock??``} \u2022 ${e.AvailabilityZone??``}`,title:t?`${e.SubnetId} (${t})`:e.SubnetId,to:`/ec2/describe-subnets/$id`},e.SubnetId)}export{f as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{O as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-pn00UE1d.js";import{t as l}from"./list-card-PsHyk9Gp.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.Subnets?i=e[1]:(i=t.Subnets??[],e[0]=t.Subnets,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-subnet`,children:(0,d.jsx)(a,{children:`Create Subnet`})}),title:`Subnets`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No subnets found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.SubnetId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.SubnetId},subtitle:`${e.CidrBlock??``} \u2022 ${e.AvailabilityZone??``}`,title:t?`${e.SubnetId} (${t})`:e.SubnetId,to:`/ec2/describe-subnets/$id`},e.SubnetId)}export{f as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups-5RCbjKmg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups--rLbL4B_.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups-5RCbjKmg.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups--rLbL4B_.js index 1247bfc51..a42644a1b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups-5RCbjKmg.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-target-groups--rLbL4B_.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-Dhy4xOXd.js";import{t as a}from"./useNavigate-BH3pQKLF.js";import{t as o}from"./button-BarTr35m.js";import{d as s,u as c}from"./elbv2-DSjTzB2q.js";import{t as l}from"./page-heading-vksh_67w.js";var u=t(),d=e();function f(){let e=(0,u.c)(6),t=a(),{data:n}=r(c),s;e[0]===n.TargetGroups?s=e[1]:(s=n.TargetGroups??[],e[0]=n.TargetGroups,e[1]=s);let f=s,h;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,d.jsx)(l,{actions:(0,d.jsx)(i,{to:`/ec2/create-target-group`,children:(0,d.jsx)(o,{children:`Create Target Group`})}),title:`Target Groups`}),e[2]=h):h=e[2];let g;return e[3]!==t||e[4]!==f?(g=(0,d.jsxs)(d.Fragment,{children:[h,f.length>0?(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Protocol`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target Type`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Targets`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`})]})}),(0,d.jsx)(`tbody`,{children:f.map(e=>{if(!e.TargetGroupArn)return null;let n=e.TargetGroupArn;return(0,d.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ec2/describe-target-groups/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,d.jsx)(i,{className:`text-primary hover:underline`,onClick:p,params:{id:encodeURIComponent(n)},to:`/ec2/describe-target-groups/$id`,children:e.TargetGroupName??n})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Protocol??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Port??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.TargetType??``}),(0,d.jsx)(m,{arn:n})]},n)})})]})}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No target groups found.`})]}),e[3]=t,e[4]=f,e[5]=g):g=e[5],g}function p(e){e.stopPropagation()}function m(e){let t=(0,u.c)(14),{arn:r}=e,i;t[0]===r?i=t[1]:(i=s(r),t[0]=r,t[1]=i);let{data:a,isLoading:o}=n(i);if(o){let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:`…`}),(0,d.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:`…`})]}),t[2]=e):e=t[2],e}let c;t[3]===a?.TargetHealthDescriptions?c=t[4]:(c=a?.TargetHealthDescriptions??[],t[3]=a?.TargetHealthDescriptions,t[4]=c);let l=c,f;if(t[5]!==l){let e={};for(let t of l){let n=t.TargetHealth?.State??`unknown`;e[n]=(e[n]??0)+1}f=Object.entries(e).map(h).join(`, `)||`—`,t[5]=l,t[6]=f}else f=t[6];let p=f,m;t[7]===l.length?m=t[8]:(m=(0,d.jsx)(`td`,{className:`px-4 py-2`,children:l.length}),t[7]=l.length,t[8]=m);let g;t[9]===p?g=t[10]:(g=(0,d.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:p}),t[9]=p,t[10]=g);let _;return t[11]!==m||t[12]!==g?(_=(0,d.jsxs)(d.Fragment,{children:[m,g]}),t[11]=m,t[12]=g,t[13]=_):_=t[13],_}function h(e){let[t,n]=e;return`${n} ${t}`}var g=f;export{g as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as i}from"./link-BokOReHc.js";import{t as a}from"./useNavigate-CTe_-BZA.js";import{t as o}from"./button-qf9lLJ2x.js";import{d as s,u as c}from"./elbv2-CmXUhudd.js";import{t as l}from"./page-heading-vksh_67w.js";var u=t(),d=e();function f(){let e=(0,u.c)(6),t=a(),{data:n}=r(c),s;e[0]===n.TargetGroups?s=e[1]:(s=n.TargetGroups??[],e[0]=n.TargetGroups,e[1]=s);let f=s,h;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,d.jsx)(l,{actions:(0,d.jsx)(i,{to:`/ec2/create-target-group`,children:(0,d.jsx)(o,{children:`Create Target Group`})}),title:`Target Groups`}),e[2]=h):h=e[2];let g;return e[3]!==t||e[4]!==f?(g=(0,d.jsxs)(d.Fragment,{children:[h,f.length>0?(0,d.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,d.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,d.jsx)(`thead`,{children:(0,d.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Protocol`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Port`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`VPC`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Target Type`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Targets`}),(0,d.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Health`})]})}),(0,d.jsx)(`tbody`,{children:f.map(e=>{if(!e.TargetGroupArn)return null;let n=e.TargetGroupArn;return(0,d.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ec2/describe-target-groups/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,d.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,d.jsx)(i,{className:`text-primary hover:underline`,onClick:p,params:{id:encodeURIComponent(n)},to:`/ec2/describe-target-groups/$id`,children:e.TargetGroupName??n})}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Protocol??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.Port??``}),(0,d.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.VpcId??``}),(0,d.jsx)(`td`,{className:`px-4 py-2`,children:e.TargetType??``}),(0,d.jsx)(m,{arn:n})]},n)})})]})}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No target groups found.`})]}),e[3]=t,e[4]=f,e[5]=g):g=e[5],g}function p(e){e.stopPropagation()}function m(e){let t=(0,u.c)(14),{arn:r}=e,i;t[0]===r?i=t[1]:(i=s(r),t[0]=r,t[1]=i);let{data:a,isLoading:o}=n(i);if(o){let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:`…`}),(0,d.jsx)(`td`,{className:`px-4 py-2 text-muted-foreground`,children:`…`})]}),t[2]=e):e=t[2],e}let c;t[3]===a?.TargetHealthDescriptions?c=t[4]:(c=a?.TargetHealthDescriptions??[],t[3]=a?.TargetHealthDescriptions,t[4]=c);let l=c,f;if(t[5]!==l){let e={};for(let t of l){let n=t.TargetHealth?.State??`unknown`;e[n]=(e[n]??0)+1}f=Object.entries(e).map(h).join(`, `)||`—`,t[5]=l,t[6]=f}else f=t[6];let p=f,m;t[7]===l.length?m=t[8]:(m=(0,d.jsx)(`td`,{className:`px-4 py-2`,children:l.length}),t[7]=l.length,t[8]=m);let g;t[9]===p?g=t[10]:(g=(0,d.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:p}),t[9]=p,t[10]=g);let _;return t[11]!==m||t[12]!==g?(_=(0,d.jsxs)(d.Fragment,{children:[m,g]}),t[11]=m,t[12]=g,t[13]=_):_=t[13],_}function h(e){let[t,n]=e;return`${n} ${t}`}var g=f;export{g as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-Dj4fTW0o.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-BOLvkqX1.js similarity index 77% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-Dj4fTW0o.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-BOLvkqX1.js index 276eaecaf..d6ba58a53 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-Dj4fTW0o.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-volumes-BOLvkqX1.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{A as a}from"./ec2-CWEplLq4.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.Volumes?s=e[1]:(s=t.Volumes??[],e[0]=t.Volumes,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-volume`,children:(0,u.jsx)(i,{children:`Create Volume`})}),title:`Volumes`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No volumes found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.VolumeId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.VolumeId},subtitle:`${e.Size} GiB`,title:e.VolumeId,to:`/ec2/describe-volumes/$id`},e.VolumeId):null}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{A as a}from"./ec2-DYgBhYCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.Volumes?s=e[1]:(s=t.Volumes??[],e[0]=t.Volumes,e[1]=s);let c=s,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{to:`/ec2/create-volume`,children:(0,u.jsx)(i,{children:`Create Volume`})}),title:`Volumes`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No volumes found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.VolumeId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.State}),params:{id:e.VolumeId},subtitle:`${e.Size} GiB`,title:e.VolumeId,to:`/ec2/describe-volumes/$id`},e.VolumeId):null}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-cdkXn9V9.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-BfQ6LNv4.js similarity index 73% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-cdkXn9V9.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-BfQ6LNv4.js index 177aa0ed1..8762d7405 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-cdkXn9V9.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/describe-vpcs-BfQ6LNv4.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{sn as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{M as o}from"./ec2-CWEplLq4.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-D1Z6q_OA.js";import{t as l}from"./list-card-DFj_XTL4.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.Vpcs?i=e[1]:(i=t.Vpcs??[],e[0]=t.Vpcs,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-vpc`,children:(0,d.jsx)(a,{children:`Create VPC`})}),title:`VPCs`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No VPCs found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.VpcId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.VpcId},subtitle:e.CidrBlock??``,title:t?`${e.VpcId} (${t})`:e.VpcId,to:`/ec2/describe-vpcs/$id`},e.VpcId)}export{f as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{cn as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{M as o}from"./ec2-DYgBhYCJ.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./state-badge-pn00UE1d.js";import{t as l}from"./list-card-PsHyk9Gp.js";var u=t(),d=e();function f(){let e=(0,u.c)(5),{data:t}=n(o),i;e[0]===t.Vpcs?i=e[1]:(i=t.Vpcs??[],e[0]=t.Vpcs,e[1]=i);let c=i,l;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,d.jsx)(s,{actions:(0,d.jsx)(r,{to:`/ec2/create-vpc`,children:(0,d.jsx)(a,{children:`Create VPC`})}),title:`VPCs`}),e[2]=l):l=e[2];let f;return e[3]===c?f=e[4]:(f=(0,d.jsxs)(d.Fragment,{children:[l,c.length>0?(0,d.jsx)(`div`,{className:`space-y-4`,children:c.map(p)}):(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`No VPCs found.`})]}),e[3]=c,e[4]=f),f}function p(e){if(!e.VpcId)return null;let t=i(e.Tags);return(0,d.jsx)(l,{badge:(0,d.jsx)(c,{state:e.State}),params:{id:e.VpcId},subtitle:e.CidrBlock??``,title:t?`${e.VpcId} (${t})`:e.VpcId,to:`/ec2/describe-vpcs/$id`},e.VpcId)}export{f as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-BKgR2qk6.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-DeC3TnAR.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-BKgR2qk6.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-DeC3TnAR.js index 1ee2df0a6..3465bd2d1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-BKgR2qk6.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/dist-DeC3TnAR.js @@ -1 +1 @@ -import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{dn as n}from"./cluster-config-xw_Q7X1e.js";function r(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}var i={};function a(e,t,n,r,i){if(!n&&!r&&!i&&!e)return s(t);let a=s(e);return t&&(a=c(a,t)),n&&(a=c(a,n)),r&&(a=c(a,r)),i&&(a=c(a,i)),a}function o(e){if(e.length===0)return i;if(e.length===1)return s(e[0]);let t=s(e[0]);for(let n=1;n=65&&i<=90&&(typeof t==`function`||t===void 0)}function f(e){return typeof e==`function`}function p(e,t){return f(e)?e(t):e??i}function m(e,t){return t?e?(...n)=>{let r=n[0];if(v(r)){let i=r;g(i);let a=t(...n);return i.baseUIHandlerPrevented||e?.(...n),a}let i=t(...n);return e?.(...n),i}:h(t):e}function h(e){return e&&((...t)=>{let n=t[0];return v(n)&&g(n),e(...t)})}function g(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function _(e,t){return t?e?t+` `+e:t:e}function v(e){return typeof e==`object`&&!!e&&`nativeEvent`in e}function y(e,t){return function(n,...r){let i=new URL(e);return i.searchParams.set(`code`,n.toString()),r.forEach(e=>i.searchParams.append(`args[]`,e)),`${t} error #${n}; visit ${i} for the full message.`}}var b=y(`https://base-ui.com/production-error`,`Base UI`),x=e(t(),1),S={};function C(e,t){let n=x.useRef(S);return n.current===S&&(n.current=e(t)),n}function w(e,t,n,r){let i=C(E).current;return D(i,e,t,n,r)&&k(i,[e,t,n,r]),i.callback}function T(e){let t=C(E).current;return O(t,e)&&k(t,e),t.callback}function E(){return{callback:null,cleanup:null,refs:[]}}function D(e,t,n,r,i){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==i}function O(e,t){return e.refs.length!==t.length||e.refs.some((e,n)=>e!==t[n])}function k(e,t){if(e.refs=t,t.every(e=>e==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&=(e.cleanup(),null),n!=null){let r=Array(t.length).fill(null);for(let e=0;e{for(let e=0;e=e}function M(e){if(!x.isValidElement(e))return null;let t=e,n=t.props;return(j(19)?n?.ref:t.ref)??null}function N(){}var P=Object.freeze([]),F=Object.freeze({});function I(e,t){let n={};for(let r in e){let i=e[r];if(t?.hasOwnProperty(r)){let e=t[r](i);e!=null&&Object.assign(n,e);continue}i===!0?n[`data-${r.toLowerCase()}`]=``:i&&(n[`data-${r.toLowerCase()}`]=i.toString())}return n}function L(e,t){return typeof e==`function`?e(t):e}function R(e,t){return typeof e==`function`?e(t):e}function z(e,t,n={}){let r=t.render;n.enabled!==!1&&(r=U(r));let i=B(t,n,r);if(n.enabled===!1)return null;let a=n.state??F;return W(e,r,i,a)}function B(e,t,n){let{className:i,style:a}=e,{state:o=F,ref:s,props:c,stateAttributesMapping:l,enabled:u=!0}=t,d=u?L(i,o):void 0,f=u?R(a,o):void 0,p=u?I(o,l):F,m=u&&c?V(c):void 0,h=u?r(p,m)??{}:F;return typeof document<`u`&&(u?h.ref=Array.isArray(s)?T([h.ref,M(n),...s]):w(h.ref,M(n),s):w(null,null)),u?(d!==void 0&&(h.className=_(h.className,d)),f!==void 0&&(h.style=r(h.style,f)),h):F}function V(e){return Array.isArray(e)?o(e):a(void 0,e)}var H=Symbol.for(`react.lazy`);function U(e){if(e?.$$typeof!==H)return e;let t=x.Children.toArray(e)[0];return x.isValidElement(t)?t:e}function W(e,t,n,r){if(t){if(typeof t==`function`)return t(n,r);let e=a(n,t.props);return e.ref=n.ref,x.cloneElement(t,e)}if(e&&typeof e==`string`)return G(e,n);throw Error(b(8))}function G(e,t){return e===`button`?(0,x.createElement)(`button`,{type:`button`,...t,key:t.key}):e===`img`?(0,x.createElement)(`img`,{alt:``,...t,key:t.key}):x.createElement(e,t)}var K=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,q=n,J=(e,t)=>n=>{if(t?.variants==null)return q(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=K(t)||K(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return q(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)};export{F as a,w as c,g as d,a as f,P as i,C as l,z as n,N as o,R as r,j as s,J as t,b as u}; \ No newline at end of file +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{fn as n}from"./cluster-config-DkOiY8HH.js";function r(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}var i={};function a(e,t,n,r,i){if(!n&&!r&&!i&&!e)return s(t);let a=s(e);return t&&(a=c(a,t)),n&&(a=c(a,n)),r&&(a=c(a,r)),i&&(a=c(a,i)),a}function o(e){if(e.length===0)return i;if(e.length===1)return s(e[0]);let t=s(e[0]);for(let n=1;n=65&&i<=90&&(typeof t==`function`||t===void 0)}function f(e){return typeof e==`function`}function p(e,t){return f(e)?e(t):e??i}function m(e,t){return t?e?(...n)=>{let r=n[0];if(v(r)){let i=r;g(i);let a=t(...n);return i.baseUIHandlerPrevented||e?.(...n),a}let i=t(...n);return e?.(...n),i}:h(t):e}function h(e){return e&&((...t)=>{let n=t[0];return v(n)&&g(n),e(...t)})}function g(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function _(e,t){return t?e?t+` `+e:t:e}function v(e){return typeof e==`object`&&!!e&&`nativeEvent`in e}function y(e,t){return function(n,...r){let i=new URL(e);return i.searchParams.set(`code`,n.toString()),r.forEach(e=>i.searchParams.append(`args[]`,e)),`${t} error #${n}; visit ${i} for the full message.`}}var b=y(`https://base-ui.com/production-error`,`Base UI`),x=e(t(),1),S={};function C(e,t){let n=x.useRef(S);return n.current===S&&(n.current=e(t)),n}function w(e,t,n,r){let i=C(E).current;return D(i,e,t,n,r)&&k(i,[e,t,n,r]),i.callback}function T(e){let t=C(E).current;return O(t,e)&&k(t,e),t.callback}function E(){return{callback:null,cleanup:null,refs:[]}}function D(e,t,n,r,i){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==i}function O(e,t){return e.refs.length!==t.length||e.refs.some((e,n)=>e!==t[n])}function k(e,t){if(e.refs=t,t.every(e=>e==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&=(e.cleanup(),null),n!=null){let r=Array(t.length).fill(null);for(let e=0;e{for(let e=0;e=e}function M(e){if(!x.isValidElement(e))return null;let t=e,n=t.props;return(j(19)?n?.ref:t.ref)??null}function N(){}var P=Object.freeze([]),F=Object.freeze({});function I(e,t){let n={};for(let r in e){let i=e[r];if(t?.hasOwnProperty(r)){let e=t[r](i);e!=null&&Object.assign(n,e);continue}i===!0?n[`data-${r.toLowerCase()}`]=``:i&&(n[`data-${r.toLowerCase()}`]=i.toString())}return n}function L(e,t){return typeof e==`function`?e(t):e}function R(e,t){return typeof e==`function`?e(t):e}function z(e,t,n={}){let r=t.render;n.enabled!==!1&&(r=U(r));let i=B(t,n,r);if(n.enabled===!1)return null;let a=n.state??F;return W(e,r,i,a)}function B(e,t,n){let{className:i,style:a}=e,{state:o=F,ref:s,props:c,stateAttributesMapping:l,enabled:u=!0}=t,d=u?L(i,o):void 0,f=u?R(a,o):void 0,p=u?I(o,l):F,m=u&&c?V(c):void 0,h=u?r(p,m)??{}:F;return typeof document<`u`&&(u?h.ref=Array.isArray(s)?T([h.ref,M(n),...s]):w(h.ref,M(n),s):w(null,null)),u?(d!==void 0&&(h.className=_(h.className,d)),f!==void 0&&(h.style=r(h.style,f)),h):F}function V(e){return Array.isArray(e)?o(e):a(void 0,e)}var H=Symbol.for(`react.lazy`);function U(e){if(e?.$$typeof!==H)return e;let t=x.Children.toArray(e)[0];return x.isValidElement(t)?t:e}function W(e,t,n,r){if(t){if(typeof t==`function`)return t(n,r);let e=a(n,t.props);return e.ref=n.ref,x.cloneElement(t,e)}if(e&&typeof e==`string`)return G(e,n);throw Error(b(8))}function G(e,t){return e===`button`?(0,x.createElement)(`button`,{type:`button`,...t,key:t.key}):e===`img`?(0,x.createElement)(`img`,{alt:``,...t,key:t.key}):x.createElement(e,t)}var K=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,q=n,J=(e,t)=>n=>{if(t?.variants==null)return q(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=K(t)||K(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return q(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)};export{F as a,w as c,g as d,a as f,P as i,C as l,z as n,N as o,R as r,j as s,J as t,b as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Csn1kwZ8.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Csn1kwZ8.js new file mode 100644 index 000000000..808c6c475 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Csn1kwZ8.js @@ -0,0 +1 @@ +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{$i as r,$r as i,Ci as a,Di as o,Ei as s,Gr as c,Ji as l,Jr as u,Kr as d,Qi as f,Qr as p,Si as ee,Ti as te,Xi as ne,Xr as re,Yi as ie,Yr as ae,Zi as oe,Zr as se,_i as ce,aa as le,ai as ue,bi as de,ca as fe,ci as pe,da as me,di as he,ea as ge,ei as _e,fa as ve,fi as ye,gi as be,hi as xe,ia as Se,ii as m,la as h,li as g,mi as _,na as v,ni as y,oa as b,oi as x,pi as S,qi as C,qr as w,ra as T,ri as E,s as D,sa as O,si as k,ta as A,ti as j,ua as Ce,ui as we,vi as Te,wi as Ee,xi as De,yi as Oe}from"./awsClient-Cqp6x3OY.js";import{F as ke,I as M,N,P,p as F}from"./ec2-DYgBhYCJ.js";import{t as Ae}from"./subnet-calculator-BlCTyGtY.js";var I=class extends M(N,P,`AllocateAddress`,c){},je=class extends M(N,P,`AssociateAddress`,d){},Me=class extends M(N,P,`AssociateIamInstanceProfile`,w){},L=class extends M(N,P,`AssociateRouteTable`,u){},R=class extends M(N,P,`AttachInternetGateway`,ae){},Ne=class extends M(N,P,`AttachVolume`,re){},Pe=class extends M(N,P,`AuthorizeSecurityGroupEgress`,se){},z=class extends M(N,P,`AuthorizeSecurityGroupIngress`,p){},Fe=class extends M(N,ke,`CopySnapshot`,i){},Ie=class extends M(N,P,`CreateImage`,_e){},B=class extends M(N,P,`CreateInternetGateway`,j){},Le=class extends M(N,P,`CreateKeyPair`,y){},Re=class extends M(N,P,`CreateLaunchTemplate`,E){},ze=class extends M(N,P,`CreateLaunchTemplateVersion`,m){},V=class extends M(N,P,`CreateNatGateway`,ue){},Be=class extends M(N,P,`CreatePlacementGroup`,x){},H=class extends M(N,P,`CreateRoute`,k){},U=class extends M(N,P,`CreateRouteTable`,pe){},W=class extends M(N,P,`CreateSecurityGroup`,g){},Ve=class extends M(N,P,`CreateSnapshot`,we){},G=class extends M(N,P,`CreateSubnet`,he){},He=class extends M(N,P,`CreateVolume`,ye){},K=class extends M(N,P,`CreateVpc`,S){},Ue=class extends M(N,P,`DeleteInternetGateway`,_){},We=class extends M(N,P,`DeleteKeyPair`,xe){},Ge=class extends M(N,P,`DeleteLaunchTemplate`,be){},Ke=class extends M(N,P,`DeleteLaunchTemplateVersions`,ce){},qe=class extends M(N,P,`DeleteNatGateway`,Te){},Je=class extends M(N,P,`DeletePlacementGroup`,Oe){},Ye=class extends M(N,P,`DeleteRoute`,de){},Xe=class extends M(N,P,`DeleteRouteTable`,De){},Ze=class extends M(N,P,`DeleteSecurityGroup`,ee){},Qe=class extends M(N,P,`DeleteSnapshot`,a){},$e=class extends M(N,P,`DeleteSubnet`,Ee){},et=class extends M(N,P,`DeleteVolume`,te){},tt=class extends M(N,P,`DeleteVpc`,s){},nt=class extends M(N,P,`DeregisterImage`,o){},rt=class extends M(N,P,`DetachInternetGateway`,C){},it=class extends M(N,P,`DetachVolume`,l){},at=class extends M(N,P,`DisassociateAddress`,ie){},ot=class extends M(N,P,`DisassociateIamInstanceProfile`,ne){},st=class extends M(N,P,`DisassociateRouteTable`,oe){},ct=class extends M(N,P,`GetConsoleOutput`,f){},lt=class extends M(N,P,`ImportKeyPair`,r){},ut=class extends M(N,P,`ModifyInstanceAttribute`,ge){},dt=class extends M(N,P,`ModifyLaunchTemplate`,A){},q=class extends M(N,P,`ModifySubnetAttribute`,v){},ft=class extends M(N,P,`ModifyVolume`,T){},pt=class extends M(N,P,`RebootInstances`,Se){},mt=class extends M(N,P,`RegisterImage`,le){},ht=class extends M(N,P,`ReleaseAddress`,b){},gt=class extends M(N,P,`RevokeSecurityGroupEgress`,O){},_t=class extends M(N,P,`RevokeSecurityGroupIngress`,fe){},vt=class extends M(N,P,`RunInstances`,h){},yt=class extends M(N,P,`StartInstances`,Ce){},bt=class extends M(N,P,`StopInstances`,me){},xt=class extends M(N,P,`TerminateInstances`,ve){},J={application_status_check:`application-status-check`,capacity_block:`capacity-block`,capacity_manager_data_export:`capacity-manager-data-export`,capacity_reservation:`capacity-reservation`,capacity_reservation_cancellation_quote:`capacity-reservation-cancellation-quote`,capacity_reservation_fleet:`capacity-reservation-fleet`,capacity_reservation_modification_quote:`capacity-reservation-modification-quote`,carrier_gateway:`carrier-gateway`,client_vpn_endpoint:`client-vpn-endpoint`,coip_pool:`coip-pool`,customer_gateway:`customer-gateway`,declarative_policies_report:`declarative-policies-report`,dedicated_host:`dedicated-host`,dhcp_options:`dhcp-options`,egress_only_internet_gateway:`egress-only-internet-gateway`,elastic_gpu:`elastic-gpu`,elastic_ip:`elastic-ip`,export_image_task:`export-image-task`,export_instance_task:`export-instance-task`,fleet:`fleet`,fpga_image:`fpga-image`,host_reservation:`host-reservation`,image:`image`,image_usage_report:`image-usage-report`,import_image_task:`import-image-task`,import_snapshot_task:`import-snapshot-task`,instance:`instance`,instance_connect_endpoint:`instance-connect-endpoint`,instance_event_window:`instance-event-window`,internet_gateway:`internet-gateway`,ipam:`ipam`,ipam_external_resource_verification_token:`ipam-external-resource-verification-token`,ipam_internet_registry_association:`ipam-internet-registry-association`,ipam_policy:`ipam-policy`,ipam_pool:`ipam-pool`,ipam_pool_allocation:`ipam-pool-allocation`,ipam_prefix_list_resolver:`ipam-prefix-list-resolver`,ipam_prefix_list_resolver_target:`ipam-prefix-list-resolver-target`,ipam_resource_discovery:`ipam-resource-discovery`,ipam_resource_discovery_association:`ipam-resource-discovery-association`,ipam_scope:`ipam-scope`,ipv4pool_ec2:`ipv4pool-ec2`,ipv6pool_ec2:`ipv6pool-ec2`,key_pair:`key-pair`,launch_template:`launch-template`,local_gateway:`local-gateway`,local_gateway_route_table:`local-gateway-route-table`,local_gateway_route_table_virtual_interface_group_association:`local-gateway-route-table-virtual-interface-group-association`,local_gateway_route_table_vpc_association:`local-gateway-route-table-vpc-association`,local_gateway_virtual_interface:`local-gateway-virtual-interface`,local_gateway_virtual_interface_group:`local-gateway-virtual-interface-group`,mac_modification_task:`mac-modification-task`,natgateway:`natgateway`,network_acl:`network-acl`,network_insights_access_scope:`network-insights-access-scope`,network_insights_access_scope_analysis:`network-insights-access-scope-analysis`,network_insights_analysis:`network-insights-analysis`,network_insights_path:`network-insights-path`,network_interface:`network-interface`,outpost_lag:`outpost-lag`,placement_group:`placement-group`,prefix_list:`prefix-list`,replace_root_volume_task:`replace-root-volume-task`,reserved_instances:`reserved-instances`,route_server:`route-server`,route_server_endpoint:`route-server-endpoint`,route_server_peer:`route-server-peer`,route_table:`route-table`,secondary_interface:`secondary-interface`,secondary_network:`secondary-network`,secondary_subnet:`secondary-subnet`,security_group:`security-group`,security_group_rule:`security-group-rule`,service_link_virtual_interface:`service-link-virtual-interface`,snapshot:`snapshot`,spot_fleet_request:`spot-fleet-request`,spot_instances_request:`spot-instances-request`,subnet:`subnet`,subnet_cidr_reservation:`subnet-cidr-reservation`,traffic_mirror_filter:`traffic-mirror-filter`,traffic_mirror_filter_rule:`traffic-mirror-filter-rule`,traffic_mirror_session:`traffic-mirror-session`,traffic_mirror_target:`traffic-mirror-target`,transit_gateway:`transit-gateway`,transit_gateway_attachment:`transit-gateway-attachment`,transit_gateway_connect_peer:`transit-gateway-connect-peer`,transit_gateway_metering_policy:`transit-gateway-metering-policy`,transit_gateway_multicast_domain:`transit-gateway-multicast-domain`,transit_gateway_policy_table:`transit-gateway-policy-table`,transit_gateway_route_table:`transit-gateway-route-table`,transit_gateway_route_table_announcement:`transit-gateway-route-table-announcement`,verified_access_endpoint:`verified-access-endpoint`,verified_access_endpoint_target:`verified-access-endpoint-target`,verified_access_group:`verified-access-group`,verified_access_instance:`verified-access-instance`,verified_access_policy:`verified-access-policy`,verified_access_trust_provider:`verified-access-trust-provider`,volume:`volume`,vpc:`vpc`,vpc_block_public_access_exclusion:`vpc-block-public-access-exclusion`,vpc_encryption_control:`vpc-encryption-control`,vpc_endpoint:`vpc-endpoint`,vpc_endpoint_connection:`vpc-endpoint-connection`,vpc_endpoint_connection_device_type:`vpc-endpoint-connection-device-type`,vpc_endpoint_service:`vpc-endpoint-service`,vpc_endpoint_service_permission:`vpc-endpoint-service-permission`,vpc_flow_log:`vpc-flow-log`,vpc_peering_connection:`vpc-peering-connection`,vpn_concentrator:`vpn-concentrator`,vpn_connection:`vpn-connection`,vpn_connection_device_type:`vpn-connection-device-type`,vpn_gateway:`vpn-gateway`},Y=e(),St=/\s+/;function Ct(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:wt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function wt(e){let t=new yt({InstanceIds:[e]});return await D().send(t)}function Tt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Et,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function Et(e){let t=new bt({InstanceIds:[e]});return await D().send(t)}function Dt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ot,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function Ot(e){let t=new xt({InstanceIds:[e]});return await D().send(t)}function kt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:At,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function At(e){let t=new pt({InstanceIds:[e]});return await D().send(t)}function jt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Mt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Mt(e){let t=D(),n=await Nt(t,e),r=new vt({ImageId:e.imageId||void 0,InstanceType:e.instanceType?e.instanceType:void 0,KeyName:e.keyName||void 0,MinCount:e.count,MaxCount:e.count,SubnetId:e.subnetId||void 0,SecurityGroupIds:n.length>0?n:void 0,Placement:e.placementGroupName?{GroupName:e.placementGroupName}:void 0,BlockDeviceMappings:Pt(e),LaunchTemplate:e.launchTemplateId?{LaunchTemplateId:e.launchTemplateId,Version:e.launchTemplateVersion||`$Default`}:void 0});return await t.send(r)}async function Nt(e,t){if(t.securityGroupMode!==`create`)return t.securityGroupIds??[];let n=(await e.send(new W({GroupName:t.newSgName,Description:t.newSgDescription||`Created by launch wizard`,VpcId:t.resolvedVpcId}))).GroupId;if(!n)throw Error(`Security group was created but no ID was returned`);let r=[...t.allowSsh?[22]:[],...t.allowHttp?[80]:[],...t.allowHttps?[443]:[]];if(r.length>0){let i=t.ruleSource===`custom`&&t.customCidr?t.customCidr:`0.0.0.0/0`;await e.send(new z({GroupId:n,IpPermissions:r.map(e=>({IpProtocol:`tcp`,FromPort:e,ToPort:e,IpRanges:[{CidrIp:i}]}))}))}return[n]}function Pt(e){let{rootDeviceName:t,rootVolumeSize:n,rootVolumeType:r,rootDeleteOnTermination:i}=e;return n!==void 0||r!==void 0||i!==void 0?[{DeviceName:t,Ebs:{...n!==void 0&&{VolumeSize:n},...r!==void 0&&{VolumeType:r},...i!==void 0&&{DeleteOnTermination:i}}}]:void 0}var Ft=`/dev/sda1`;function It(e){let t=new TextEncoder().encode(e),n=``;for(let e of t)n+=String.fromCodePoint(e);return btoa(n)}function X(e){let t={};e.imageId&&(t.ImageId=e.imageId),e.instanceType&&(t.InstanceType=e.instanceType),e.keyName&&(t.KeyName=e.keyName);let n=e.securityGroupIds??[];return e.subnetId?t.NetworkInterfaces=[{DeviceIndex:0,SubnetId:e.subnetId,Groups:n.length>0?n:void 0}]:n.length>0&&(t.SecurityGroupIds=n),(e.rootVolumeSize!==void 0||e.rootVolumeType!==void 0)&&(t.BlockDeviceMappings=[{DeviceName:Ft,Ebs:{...e.rootVolumeSize!==void 0&&{VolumeSize:e.rootVolumeSize},...e.rootVolumeType!==void 0&&{VolumeType:e.rootVolumeType}}}]),e.userData&&(t.UserData=It(e.userData)),t}function Lt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Rt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]})}},e[0]=r,e[1]=i),n(i)}async function Rt(e){let t=new Re({LaunchTemplateName:e.launchTemplateName,VersionDescription:e.versionDescription||void 0,LaunchTemplateData:X(e)});return await D().send(t)}function zt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Bt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Bt(e){let t=new ze({LaunchTemplateId:e.launchTemplateId,SourceVersion:e.sourceVersion||void 0,VersionDescription:e.versionDescription||void 0,LaunchTemplateData:X(e)});return await D().send(t)}function Vt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ht,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Ht(e){let t=new dt({LaunchTemplateId:e.launchTemplateId,DefaultVersion:e.defaultVersion});return await D().send(t)}function Ut(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Wt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Wt(e){let t=new Ke({LaunchTemplateId:e.launchTemplateId,Versions:e.versions});return await D().send(t)}function Gt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Kt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]})}},e[0]=r,e[1]=i),n(i)}async function Kt(e){let t=new Ge({LaunchTemplateId:e});return await D().send(t)}function qt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Jt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Jt(e){let t=new Le({KeyName:e.keyName,KeyType:e.keyType}),n=await D().send(t);if(!n.KeyMaterial)throw Error(`Key pair was created but the API returned no private key. The key cannot be recovered — delete it and try again.`);return n}function Yt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Xt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Xt(e){let t=e.publicKeyMaterial.trim().split(St).slice(0,2).join(` `),n=new lt({KeyName:e.keyName,PublicKeyMaterial:new TextEncoder().encode(t)});return await D().send(n)}function Zt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Qt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Qt(e){let t=new We({KeyPairId:e});return await D().send(t)}function $t(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:en,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function en(e){let t=new He({Size:e.size,AvailabilityZone:e.availabilityZone,VolumeType:`gp3`});return await D().send(t)}function tn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:nn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function nn(e){let t=new ft({VolumeId:e.volumeId,Size:e.size});return await D().send(t)}function rn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:an,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function an(e){let t=new et({VolumeId:e});return await D().send(t)}function on(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:sn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function sn(e){let t=new Ve({VolumeId:e.volumeId,Description:e.description||void 0});return await D().send(t)}function cn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ln,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function ln(e){let t=new Qe({SnapshotId:e});return await D().send(t)}function un(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function dn(e){let t=new Fe({SourceSnapshotId:e.sourceSnapshotId,SourceRegion:e.sourceRegion,Description:e.description||void 0});return await D().send(t)}function fn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function pn(e){let t=new Ne({VolumeId:e.volumeId,InstanceId:e.instanceId,Device:e.device||void 0});return await D().send(t)}function mn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:hn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function hn(e){let t=new it({VolumeId:e.volumeId,InstanceId:e.instanceId||void 0,Force:e.force});return await D().send(t)}function gn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:_n,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function _n(e){let{instanceId:t,...n}=e,r=new ut({InstanceId:t,InstanceType:{Value:n.instanceType}});return await D().send(r)}function vn(){let e=(0,Y.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:yn},e[0]=t):t=e[0],n(t)}async function yn(e){let t=new ct({InstanceId:e});return await D().send(t)}function bn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function xn(e){let t=new Ie({InstanceId:e.instanceId,Name:e.name,Description:e.description||void 0});return await D().send(t)}function Sn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Cn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function Cn(e){let t=new mt({Name:e.name,Description:e.description||void 0,BlockDeviceMappings:[{DeviceName:`/dev/sda1`,Ebs:{SnapshotId:e.snapshotId}}]});return await D().send(t)}function wn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Tn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function Tn(e){let t=new nt({ImageId:e});return await D().send(t)}function En(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Dn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`vpcs`]})}},e[0]=r,e[1]=i),n(i)}async function Dn(e){let t=new K({CidrBlock:e.cidrBlock,TagSpecifications:e.name?[{ResourceType:`vpc`,Tags:[{Key:`Name`,Value:e.name}]}]:void 0});return await D().send(t)}function On(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:kn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`vpcs`]})}},e[0]=r,e[1]=i),n(i)}async function kn(e){let t=new tt({VpcId:e});return await D().send(t)}function An(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:jn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`subnets`]})}},e[0]=r,e[1]=i),n(i)}async function jn(e){let t=D(),n=await t.send(new G({VpcId:e.vpcId,CidrBlock:e.cidrBlock,AvailabilityZone:e.availabilityZone||void 0})),r=n.Subnet?.SubnetId;return e.mapPublicIpOnLaunch&&r&&await t.send(new q({SubnetId:r,MapPublicIpOnLaunch:{Value:!0}})),n}function Mn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Nn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`subnets`]})}},e[0]=r,e[1]=i),n(i)}async function Nn(e){let t=new $e({SubnetId:e});return await D().send(t)}function Pn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Fn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`placementGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Fn(e){let t=new Be({GroupName:e.groupName,Strategy:e.strategy});return await D().send(t)}function In(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ln,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`placementGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Ln(e){let t=new Je({GroupName:e});return await D().send(t)}function Rn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:zn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function zn(e){let t=new W({GroupName:e.groupName,Description:e.description,VpcId:e.vpcId});return await D().send(t)}function Bn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Vn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Vn(e){let t=new Ze({GroupId:e});return await D().send(t)}function Hn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Un,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Un(e){let t=new z({GroupId:e.groupId,IpPermissions:[{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,IpRanges:[{CidrIp:e.cidrIp}]}]});return await D().send(t)}function Wn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Gn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Gn(e){let t=new Pe({GroupId:e.groupId,IpPermissions:[{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,IpRanges:[{CidrIp:e.cidrIp}]}]});return await D().send(t)}function Z(e){return{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,...e.sourceGroupId?{UserIdGroupPairs:[{GroupId:e.sourceGroupId}]}:{IpRanges:[{CidrIp:e.cidrIp??``}]}}}function Kn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:qn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function qn(e){let t=new _t({GroupId:e.groupId,IpPermissions:[Z(e)]});return await D().send(t)}function Jn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Yn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Yn(e){let t=new gt({GroupId:e.groupId,IpPermissions:[Z(e)]});return await D().send(t)}function Xn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Zn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function Zn(e){let t=new B({TagSpecifications:$(J.internet_gateway,e?.name,[])});return await D().send(t)}function Qn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$n,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function $n(e){let t=new Ue({InternetGatewayId:e});return await D().send(t)}function er(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:tr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function tr(e){let t=new R({InternetGatewayId:e.internetGatewayId,VpcId:e.vpcId});return await D().send(t)}function nr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:rr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function rr(e){let t=new rt({InternetGatewayId:e.internetGatewayId,VpcId:e.vpcId});return await D().send(t)}function ir(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ar,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function ar(e){let t=new I({Domain:`vpc`,TagSpecifications:$(J.elastic_ip,e?.name,[])});return await D().send(t)}function or(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:sr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function sr(e){let t=new ht({AllocationId:e});return await D().send(t)}function cr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:lr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function lr(e){let t=new je({AllocationId:e.allocationId,InstanceId:e.instanceId,NetworkInterfaceId:e.networkInterfaceId});return await D().send(t)}function ur(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function dr(e){let t=new at({AssociationId:e});return await D().send(t)}function fr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pr,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`iam-instance-profile-associations`,t.instanceId]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function pr(e){let t=new Me({InstanceId:e.instanceId,IamInstanceProfile:{Name:e.instanceProfileName}});return await D().send(t)}function mr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:hr,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`iam-instance-profile-associations`,t.instanceId]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function hr(e){let t=new ot({AssociationId:e.associationId});return await D().send(t)}function Q(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:gr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`natGateways`]}),r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function gr(e){let t=new V({SubnetId:e.subnetId,AllocationId:e.allocationId,TagSpecifications:$(J.natgateway,e.name,[])});return await D().send(t)}function _r(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:vr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`natGateways`]})}},e[0]=r,e[1]=i),n(i)}async function vr(e){let t=new qe({NatGatewayId:e});return await D().send(t)}function yr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:br,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function br(e){let t=new U({VpcId:e.vpcId,TagSpecifications:$(J.route_table,e.name,[])});return await D().send(t)}function xr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Sr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Sr(e){let t=new Xe({RouteTableId:e});return await D().send(t)}function Cr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:wr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function wr(e){let t=new H({RouteTableId:e.routeTableId,DestinationCidrBlock:e.destinationCidrBlock,GatewayId:e.gatewayId,NatGatewayId:e.natGatewayId});return await D().send(t)}function Tr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Er,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Er(e){let t=new Ye({RouteTableId:e.routeTableId,DestinationCidrBlock:e.destinationCidrBlock});return await D().send(t)}function Dr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Or,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Or(e){let t=new L({RouteTableId:e.routeTableId,SubnetId:e.subnetId});return await D().send(t)}function kr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ar,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Ar(e){let t=new st({AssociationId:e});return await D().send(t)}function jr(e,t){let n=[];return e&&n.push({Key:`Name`,Value:e}),n.push(...t),n}function $(e,t,n){let r=jr(t,n);if(r.length!==0)return[{ResourceType:e,Tags:r}]}function Mr(){let e=t();return n({mutationFn:async e=>{let t=D(),n=[],r=e.autoGenerateNames?e.namePrefix:void 0,i=e.tags.map(e=>({Key:e.key,Value:e.value})),a=`creating VPC`;try{let o=r?`${r}-vpc`:e.namePrefix,s=(await t.send(new K({CidrBlock:e.cidrBlock,InstanceTenancy:e.tenancy,TagSpecifications:$(J.vpc,o,i)}))).Vpc?.VpcId;if(!s)throw Error(`VPC was created but no VPC ID was returned by the API`);if(n.push({type:`VPC`,id:s}),e.mode===`vpc-only`)return{vpcId:s,created:n};let c=Ae(e.cidrBlock,e.publicSubnetCount,e.privateSubnetCount),l=e.publicSubnetCidrs.length>0?e.publicSubnetCidrs:c.publicSubnets.map(e=>e.cidr),u=e.privateSubnetCidrs.length>0?e.privateSubnetCidrs:c.privateSubnets.map(e=>e.cidr);a=`creating public subnets`;let d=await Promise.all(Array.from({length:e.publicSubnetCount},async(e,a)=>{let o=r?`${r}-subnet-public-${a+1}`:void 0,c=(await t.send(new G({VpcId:s,CidrBlock:l[a],TagSpecifications:$(J.subnet,o,i)}))).Subnet?.SubnetId;if(!c)throw Error(`Public subnet ${a+1} was created but no subnet ID was returned`);return n.push({type:`Public Subnet`,id:c}),await t.send(new q({SubnetId:c,MapPublicIpOnLaunch:{Value:!0}})),c}));a=`creating private subnets`;let f=await Promise.all(Array.from({length:e.privateSubnetCount},async(e,a)=>{let o=r?`${r}-subnet-private-${a+1}`:void 0,c=(await t.send(new G({VpcId:s,CidrBlock:u[a],TagSpecifications:$(J.subnet,o,i)}))).Subnet?.SubnetId;if(!c)throw Error(`Private subnet ${a+1} was created but no subnet ID was returned`);return n.push({type:`Private Subnet`,id:c}),c}));if(e.publicSubnetCount>0){a=`creating internet gateway`;let e=r?`${r}-igw`:void 0,o=(await t.send(new B({TagSpecifications:$(J.internet_gateway,e,i)}))).InternetGateway?.InternetGatewayId;if(!o)throw Error(`Internet gateway was created but no ID was returned`);n.push({type:`Internet Gateway`,id:o}),a=`attaching internet gateway to VPC`,await t.send(new R({InternetGatewayId:o,VpcId:s})),a=`creating public route table`;let c=r?`${r}-rtb-public`:void 0,l=(await t.send(new U({VpcId:s,TagSpecifications:$(J.route_table,c,i)}))).RouteTable?.RouteTableId;if(!l)throw Error(`Public route table was created but no ID was returned`);n.push({type:`Public Route Table`,id:l}),a=`creating default route to internet gateway`,await t.send(new H({RouteTableId:l,DestinationCidrBlock:`0.0.0.0/0`,GatewayId:o})),a=`associating public subnets with route table`,await Promise.all(d.map(async e=>await t.send(new L({RouteTableId:l,SubnetId:e}))))}if(e.privateSubnetCount>0){a=`creating private route table`;let o=r?`${r}-rtb-private`:void 0,c=(await t.send(new U({VpcId:s,TagSpecifications:$(J.route_table,o,i)}))).RouteTable?.RouteTableId;if(!c)throw Error(`Private route table was created but no ID was returned`);if(n.push({type:`Private Route Table`,id:c}),a=`associating private subnets with route table`,await Promise.all(f.map(async e=>await t.send(new L({RouteTableId:c,SubnetId:e})))),e.natGateway===`single`&&d[0]){a=`allocating Elastic IP for NAT gateway`;let e=(await t.send(new I({Domain:`vpc`,TagSpecifications:$(J.elastic_ip,r?`${r}-eip-nat`:void 0,i)}))).AllocationId;if(!e)throw Error(`Elastic IP was allocated but no allocation ID was returned`);n.push({type:`Elastic IP`,id:e}),a=`creating NAT gateway`;let o=(await t.send(new V({SubnetId:d[0],AllocationId:e,TagSpecifications:$(J.natgateway,r?`${r}-nat`:void 0,i)}))).NatGateway?.NatGatewayId;if(!o)throw Error(`NAT gateway was created but no ID was returned`);n.push({type:`NAT Gateway`,id:o}),a=`creating default route to NAT gateway`,await t.send(new H({RouteTableId:c,DestinationCidrBlock:`0.0.0.0/0`,NatGatewayId:o}))}}return{vpcId:s,created:n}}catch(e){return{vpcId:n.find(e=>e.type===`VPC`)?.id,created:n,error:e instanceof Error?e:Error(String(e)),failedStep:`Failed while ${a}`}}},onSuccess:()=>{e.invalidateQueries({queryKey:[`ec2`,`vpcs`]}),e.invalidateQueries({queryKey:[`ec2`,`subnets`]}),e.invalidateQueries({queryKey:[`ec2`,`internetGateways`]}),e.invalidateQueries({queryKey:[`ec2`,`routeTables`]}),e.invalidateQueries({queryKey:[`ec2`,`natGateways`]}),e.invalidateQueries({queryKey:[`ec2`,`addresses`]})}})}export{or as $,Ut as A,wn as B,An as C,Qn as D,Mr as E,Bn as F,kr as G,mn as H,cn as I,gn as J,vn as K,Mn as L,In as M,Tr as N,Zt as O,xr as P,Sn as Q,rn as R,on as S,En as T,ur as U,nr as V,mr as W,tn as X,Vt as Y,kt as Z,Q as _,Dr as a,yr as b,Wn as c,bn as d,Jn as et,jt as f,zt as g,Lt as h,fr as i,Dt as it,_r as j,Gt as k,Hn as l,qt as m,ir as n,Ct as nt,er as o,Xn as p,Yt as q,cr as r,Tt as rt,fn as s,X as t,Kn as tt,un as u,Pn as v,$t as w,Rn as x,Cr as y,On as z}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Ctto2xjU.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Ctto2xjU.js deleted file mode 100644 index 26da5fd79..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-Ctto2xjU.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{$i as r,$r as i,Ci as a,Di as o,Ei as s,Ji as c,Jr as l,Kr as u,Oi as d,Qi as f,Qr as p,Si as ee,Ti as te,Xi as ne,Xr as re,Yi as ie,Yr as ae,Zi as oe,Zr as se,_i as ce,aa as le,ai as ue,bi as de,ca as fe,ci as pe,da as me,di as he,ea as ge,ei as _e,fa as ve,fi as ye,gi as be,hi as xe,ia as Se,ii as m,la as h,li as g,mi as _,na as v,ni as y,oa as b,oi as x,pa as S,pi as C,qr as w,ra as T,ri as E,s as D,sa as O,si as k,ta as A,ti as j,ua as Ce,ui as we,vi as Te,wi as Ee,xi as De,yi as Oe}from"./awsClient-b0hcP1Iz.js";import{F as ke,I as M,N,P,p as F}from"./ec2-CWEplLq4.js";import{t as Ae}from"./subnet-calculator-BlCTyGtY.js";var I=class extends M(N,P,`AllocateAddress`,u){},je=class extends M(N,P,`AssociateAddress`,w){},Me=class extends M(N,P,`AssociateIamInstanceProfile`,l){},L=class extends M(N,P,`AssociateRouteTable`,ae){},R=class extends M(N,P,`AttachInternetGateway`,re){},Ne=class extends M(N,P,`AttachVolume`,se){},Pe=class extends M(N,P,`AuthorizeSecurityGroupEgress`,p){},z=class extends M(N,P,`AuthorizeSecurityGroupIngress`,i){},Fe=class extends M(N,ke,`CopySnapshot`,_e){},Ie=class extends M(N,P,`CreateImage`,j){},B=class extends M(N,P,`CreateInternetGateway`,y){},Le=class extends M(N,P,`CreateKeyPair`,E){},Re=class extends M(N,P,`CreateLaunchTemplate`,m){},ze=class extends M(N,P,`CreateLaunchTemplateVersion`,ue){},V=class extends M(N,P,`CreateNatGateway`,x){},Be=class extends M(N,P,`CreatePlacementGroup`,k){},H=class extends M(N,P,`CreateRoute`,pe){},U=class extends M(N,P,`CreateRouteTable`,g){},W=class extends M(N,P,`CreateSecurityGroup`,we){},Ve=class extends M(N,P,`CreateSnapshot`,he){},G=class extends M(N,P,`CreateSubnet`,ye){},He=class extends M(N,P,`CreateVolume`,C){},K=class extends M(N,P,`CreateVpc`,_){},Ue=class extends M(N,P,`DeleteInternetGateway`,xe){},We=class extends M(N,P,`DeleteKeyPair`,be){},Ge=class extends M(N,P,`DeleteLaunchTemplate`,ce){},Ke=class extends M(N,P,`DeleteLaunchTemplateVersions`,Te){},qe=class extends M(N,P,`DeleteNatGateway`,Oe){},Je=class extends M(N,P,`DeletePlacementGroup`,de){},Ye=class extends M(N,P,`DeleteRoute`,De){},Xe=class extends M(N,P,`DeleteRouteTable`,ee){},Ze=class extends M(N,P,`DeleteSecurityGroup`,a){},Qe=class extends M(N,P,`DeleteSnapshot`,Ee){},$e=class extends M(N,P,`DeleteSubnet`,te){},et=class extends M(N,P,`DeleteVolume`,s){},tt=class extends M(N,P,`DeleteVpc`,o){},nt=class extends M(N,P,`DeregisterImage`,d){},rt=class extends M(N,P,`DetachInternetGateway`,c){},it=class extends M(N,P,`DetachVolume`,ie){},at=class extends M(N,P,`DisassociateAddress`,ne){},ot=class extends M(N,P,`DisassociateIamInstanceProfile`,oe){},st=class extends M(N,P,`DisassociateRouteTable`,f){},ct=class extends M(N,P,`GetConsoleOutput`,r){},lt=class extends M(N,P,`ImportKeyPair`,ge){},ut=class extends M(N,P,`ModifyInstanceAttribute`,A){},dt=class extends M(N,P,`ModifyLaunchTemplate`,v){},q=class extends M(N,P,`ModifySubnetAttribute`,T){},ft=class extends M(N,P,`ModifyVolume`,Se){},pt=class extends M(N,P,`RebootInstances`,le){},mt=class extends M(N,P,`RegisterImage`,b){},ht=class extends M(N,P,`ReleaseAddress`,O){},gt=class extends M(N,P,`RevokeSecurityGroupEgress`,fe){},_t=class extends M(N,P,`RevokeSecurityGroupIngress`,h){},vt=class extends M(N,P,`RunInstances`,Ce){},yt=class extends M(N,P,`StartInstances`,me){},bt=class extends M(N,P,`StopInstances`,ve){},xt=class extends M(N,P,`TerminateInstances`,S){},J={application_status_check:`application-status-check`,capacity_block:`capacity-block`,capacity_manager_data_export:`capacity-manager-data-export`,capacity_reservation:`capacity-reservation`,capacity_reservation_cancellation_quote:`capacity-reservation-cancellation-quote`,capacity_reservation_fleet:`capacity-reservation-fleet`,carrier_gateway:`carrier-gateway`,client_vpn_endpoint:`client-vpn-endpoint`,coip_pool:`coip-pool`,customer_gateway:`customer-gateway`,declarative_policies_report:`declarative-policies-report`,dedicated_host:`dedicated-host`,dhcp_options:`dhcp-options`,egress_only_internet_gateway:`egress-only-internet-gateway`,elastic_gpu:`elastic-gpu`,elastic_ip:`elastic-ip`,export_image_task:`export-image-task`,export_instance_task:`export-instance-task`,fleet:`fleet`,fpga_image:`fpga-image`,host_reservation:`host-reservation`,image:`image`,image_usage_report:`image-usage-report`,import_image_task:`import-image-task`,import_snapshot_task:`import-snapshot-task`,instance:`instance`,instance_connect_endpoint:`instance-connect-endpoint`,instance_event_window:`instance-event-window`,internet_gateway:`internet-gateway`,ipam:`ipam`,ipam_external_resource_verification_token:`ipam-external-resource-verification-token`,ipam_internet_registry_association:`ipam-internet-registry-association`,ipam_policy:`ipam-policy`,ipam_pool:`ipam-pool`,ipam_pool_allocation:`ipam-pool-allocation`,ipam_prefix_list_resolver:`ipam-prefix-list-resolver`,ipam_prefix_list_resolver_target:`ipam-prefix-list-resolver-target`,ipam_resource_discovery:`ipam-resource-discovery`,ipam_resource_discovery_association:`ipam-resource-discovery-association`,ipam_scope:`ipam-scope`,ipv4pool_ec2:`ipv4pool-ec2`,ipv6pool_ec2:`ipv6pool-ec2`,key_pair:`key-pair`,launch_template:`launch-template`,local_gateway:`local-gateway`,local_gateway_route_table:`local-gateway-route-table`,local_gateway_route_table_virtual_interface_group_association:`local-gateway-route-table-virtual-interface-group-association`,local_gateway_route_table_vpc_association:`local-gateway-route-table-vpc-association`,local_gateway_virtual_interface:`local-gateway-virtual-interface`,local_gateway_virtual_interface_group:`local-gateway-virtual-interface-group`,mac_modification_task:`mac-modification-task`,natgateway:`natgateway`,network_acl:`network-acl`,network_insights_access_scope:`network-insights-access-scope`,network_insights_access_scope_analysis:`network-insights-access-scope-analysis`,network_insights_analysis:`network-insights-analysis`,network_insights_path:`network-insights-path`,network_interface:`network-interface`,outpost_lag:`outpost-lag`,placement_group:`placement-group`,prefix_list:`prefix-list`,replace_root_volume_task:`replace-root-volume-task`,reserved_instances:`reserved-instances`,route_server:`route-server`,route_server_endpoint:`route-server-endpoint`,route_server_peer:`route-server-peer`,route_table:`route-table`,secondary_interface:`secondary-interface`,secondary_network:`secondary-network`,secondary_subnet:`secondary-subnet`,security_group:`security-group`,security_group_rule:`security-group-rule`,service_link_virtual_interface:`service-link-virtual-interface`,snapshot:`snapshot`,spot_fleet_request:`spot-fleet-request`,spot_instances_request:`spot-instances-request`,subnet:`subnet`,subnet_cidr_reservation:`subnet-cidr-reservation`,traffic_mirror_filter:`traffic-mirror-filter`,traffic_mirror_filter_rule:`traffic-mirror-filter-rule`,traffic_mirror_session:`traffic-mirror-session`,traffic_mirror_target:`traffic-mirror-target`,transit_gateway:`transit-gateway`,transit_gateway_attachment:`transit-gateway-attachment`,transit_gateway_connect_peer:`transit-gateway-connect-peer`,transit_gateway_metering_policy:`transit-gateway-metering-policy`,transit_gateway_multicast_domain:`transit-gateway-multicast-domain`,transit_gateway_policy_table:`transit-gateway-policy-table`,transit_gateway_route_table:`transit-gateway-route-table`,transit_gateway_route_table_announcement:`transit-gateway-route-table-announcement`,verified_access_endpoint:`verified-access-endpoint`,verified_access_endpoint_target:`verified-access-endpoint-target`,verified_access_group:`verified-access-group`,verified_access_instance:`verified-access-instance`,verified_access_policy:`verified-access-policy`,verified_access_trust_provider:`verified-access-trust-provider`,volume:`volume`,vpc:`vpc`,vpc_block_public_access_exclusion:`vpc-block-public-access-exclusion`,vpc_encryption_control:`vpc-encryption-control`,vpc_endpoint:`vpc-endpoint`,vpc_endpoint_connection:`vpc-endpoint-connection`,vpc_endpoint_connection_device_type:`vpc-endpoint-connection-device-type`,vpc_endpoint_service:`vpc-endpoint-service`,vpc_endpoint_service_permission:`vpc-endpoint-service-permission`,vpc_flow_log:`vpc-flow-log`,vpc_peering_connection:`vpc-peering-connection`,vpn_concentrator:`vpn-concentrator`,vpn_connection:`vpn-connection`,vpn_connection_device_type:`vpn-connection-device-type`,vpn_gateway:`vpn-gateway`},Y=e(),St=/\s+/;function Ct(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:wt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function wt(e){let t=new yt({InstanceIds:[e]});return await D().send(t)}function Tt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Et,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function Et(e){let t=new bt({InstanceIds:[e]});return await D().send(t)}function Dt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ot,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function Ot(e){let t=new xt({InstanceIds:[e]});return await D().send(t)}function kt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:At,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function At(e){let t=new pt({InstanceIds:[e]});return await D().send(t)}function jt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Mt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Mt(e){let t=D(),n=await Nt(t,e),r=new vt({ImageId:e.imageId||void 0,InstanceType:e.instanceType?e.instanceType:void 0,KeyName:e.keyName||void 0,MinCount:e.count,MaxCount:e.count,SubnetId:e.subnetId||void 0,SecurityGroupIds:n.length>0?n:void 0,Placement:e.placementGroupName?{GroupName:e.placementGroupName}:void 0,BlockDeviceMappings:Pt(e),LaunchTemplate:e.launchTemplateId?{LaunchTemplateId:e.launchTemplateId,Version:e.launchTemplateVersion||`$Default`}:void 0});return await t.send(r)}async function Nt(e,t){if(t.securityGroupMode!==`create`)return t.securityGroupIds??[];let n=(await e.send(new W({GroupName:t.newSgName,Description:t.newSgDescription||`Created by launch wizard`,VpcId:t.resolvedVpcId}))).GroupId;if(!n)throw Error(`Security group was created but no ID was returned`);let r=[...t.allowSsh?[22]:[],...t.allowHttp?[80]:[],...t.allowHttps?[443]:[]];if(r.length>0){let i=t.ruleSource===`custom`&&t.customCidr?t.customCidr:`0.0.0.0/0`;await e.send(new z({GroupId:n,IpPermissions:r.map(e=>({IpProtocol:`tcp`,FromPort:e,ToPort:e,IpRanges:[{CidrIp:i}]}))}))}return[n]}function Pt(e){let{rootDeviceName:t,rootVolumeSize:n,rootVolumeType:r,rootDeleteOnTermination:i}=e;return n!==void 0||r!==void 0||i!==void 0?[{DeviceName:t,Ebs:{...n!==void 0&&{VolumeSize:n},...r!==void 0&&{VolumeType:r},...i!==void 0&&{DeleteOnTermination:i}}}]:void 0}var Ft=`/dev/sda1`;function It(e){let t=new TextEncoder().encode(e),n=``;for(let e of t)n+=String.fromCodePoint(e);return btoa(n)}function X(e){let t={};e.imageId&&(t.ImageId=e.imageId),e.instanceType&&(t.InstanceType=e.instanceType),e.keyName&&(t.KeyName=e.keyName);let n=e.securityGroupIds??[];return e.subnetId?t.NetworkInterfaces=[{DeviceIndex:0,SubnetId:e.subnetId,Groups:n.length>0?n:void 0}]:n.length>0&&(t.SecurityGroupIds=n),(e.rootVolumeSize!==void 0||e.rootVolumeType!==void 0)&&(t.BlockDeviceMappings=[{DeviceName:Ft,Ebs:{...e.rootVolumeSize!==void 0&&{VolumeSize:e.rootVolumeSize},...e.rootVolumeType!==void 0&&{VolumeType:e.rootVolumeType}}}]),e.userData&&(t.UserData=It(e.userData)),t}function Lt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Rt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]})}},e[0]=r,e[1]=i),n(i)}async function Rt(e){let t=new Re({LaunchTemplateName:e.launchTemplateName,VersionDescription:e.versionDescription||void 0,LaunchTemplateData:X(e)});return await D().send(t)}function zt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Bt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Bt(e){let t=new ze({LaunchTemplateId:e.launchTemplateId,SourceVersion:e.sourceVersion||void 0,VersionDescription:e.versionDescription||void 0,LaunchTemplateData:X(e)});return await D().send(t)}function Vt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ht,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Ht(e){let t=new dt({LaunchTemplateId:e.launchTemplateId,DefaultVersion:e.defaultVersion});return await D().send(t)}function Ut(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Wt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]}),r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`,t.launchTemplateId,`versions`]})}},e[0]=r,e[1]=i),n(i)}async function Wt(e){let t=new Ke({LaunchTemplateId:e.launchTemplateId,Versions:e.versions});return await D().send(t)}function Gt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Kt,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`launchTemplates`]})}},e[0]=r,e[1]=i),n(i)}async function Kt(e){let t=new Ge({LaunchTemplateId:e});return await D().send(t)}function qt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Jt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Jt(e){let t=new Le({KeyName:e.keyName,KeyType:e.keyType}),n=await D().send(t);if(!n.KeyMaterial)throw Error(`Key pair was created but the API returned no private key. The key cannot be recovered — delete it and try again.`);return n}function Yt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Xt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Xt(e){let t=e.publicKeyMaterial.trim().split(St).slice(0,2).join(` `),n=new lt({KeyName:e.keyName,PublicKeyMaterial:new TextEncoder().encode(t)});return await D().send(n)}function Zt(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Qt,onSuccess:()=>{r.invalidateQueries(F)}},e[0]=r,e[1]=i),n(i)}async function Qt(e){let t=new We({KeyPairId:e});return await D().send(t)}function $t(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:en,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function en(e){let t=new He({Size:e.size,AvailabilityZone:e.availabilityZone,VolumeType:`gp3`});return await D().send(t)}function tn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:nn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function nn(e){let t=new ft({VolumeId:e.volumeId,Size:e.size});return await D().send(t)}function rn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:an,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]})}},e[0]=r,e[1]=i),n(i)}async function an(e){let t=new et({VolumeId:e});return await D().send(t)}function on(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:sn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function sn(e){let t=new Ve({VolumeId:e.volumeId,Description:e.description||void 0});return await D().send(t)}function cn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ln,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function ln(e){let t=new Qe({SnapshotId:e});return await D().send(t)}function un(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`snapshots`]})}},e[0]=r,e[1]=i),n(i)}async function dn(e){let t=new Fe({SourceSnapshotId:e.sourceSnapshotId,SourceRegion:e.sourceRegion,Description:e.description||void 0});return await D().send(t)}function fn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function pn(e){let t=new Ne({VolumeId:e.volumeId,InstanceId:e.instanceId,Device:e.device||void 0});return await D().send(t)}function mn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:hn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`volumes`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function hn(e){let t=new it({VolumeId:e.volumeId,InstanceId:e.instanceId||void 0,Force:e.force});return await D().send(t)}function gn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:_n,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function _n(e){let{instanceId:t,...n}=e,r=new ut({InstanceId:t,InstanceType:{Value:n.instanceType}});return await D().send(r)}function vn(){let e=(0,Y.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:yn},e[0]=t):t=e[0],n(t)}async function yn(e){let t=new ct({InstanceId:e});return await D().send(t)}function bn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function xn(e){let t=new Ie({InstanceId:e.instanceId,Name:e.name,Description:e.description||void 0});return await D().send(t)}function Sn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Cn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function Cn(e){let t=new mt({Name:e.name,Description:e.description||void 0,BlockDeviceMappings:[{DeviceName:`/dev/sda1`,Ebs:{SnapshotId:e.snapshotId}}]});return await D().send(t)}function wn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Tn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`images`]})}},e[0]=r,e[1]=i),n(i)}async function Tn(e){let t=new nt({ImageId:e});return await D().send(t)}function En(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Dn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`vpcs`]})}},e[0]=r,e[1]=i),n(i)}async function Dn(e){let t=new K({CidrBlock:e.cidrBlock,TagSpecifications:e.name?[{ResourceType:`vpc`,Tags:[{Key:`Name`,Value:e.name}]}]:void 0});return await D().send(t)}function On(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:kn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`vpcs`]})}},e[0]=r,e[1]=i),n(i)}async function kn(e){let t=new tt({VpcId:e});return await D().send(t)}function An(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:jn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`subnets`]})}},e[0]=r,e[1]=i),n(i)}async function jn(e){let t=D(),n=await t.send(new G({VpcId:e.vpcId,CidrBlock:e.cidrBlock,AvailabilityZone:e.availabilityZone||void 0})),r=n.Subnet?.SubnetId;return e.mapPublicIpOnLaunch&&r&&await t.send(new q({SubnetId:r,MapPublicIpOnLaunch:{Value:!0}})),n}function Mn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Nn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`subnets`]})}},e[0]=r,e[1]=i),n(i)}async function Nn(e){let t=new $e({SubnetId:e});return await D().send(t)}function Pn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Fn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`placementGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Fn(e){let t=new Be({GroupName:e.groupName,Strategy:e.strategy});return await D().send(t)}function In(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ln,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`placementGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Ln(e){let t=new Je({GroupName:e});return await D().send(t)}function Rn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:zn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function zn(e){let t=new W({GroupName:e.groupName,Description:e.description,VpcId:e.vpcId});return await D().send(t)}function Bn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Vn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]})}},e[0]=r,e[1]=i),n(i)}async function Vn(e){let t=new Ze({GroupId:e});return await D().send(t)}function Hn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Un,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Un(e){let t=new z({GroupId:e.groupId,IpPermissions:[{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,IpRanges:[{CidrIp:e.cidrIp}]}]});return await D().send(t)}function Wn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Gn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Gn(e){let t=new Pe({GroupId:e.groupId,IpPermissions:[{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,IpRanges:[{CidrIp:e.cidrIp}]}]});return await D().send(t)}function Z(e){return{IpProtocol:e.ipProtocol,FromPort:e.fromPort,ToPort:e.toPort,...e.sourceGroupId?{UserIdGroupPairs:[{GroupId:e.sourceGroupId}]}:{IpRanges:[{CidrIp:e.cidrIp??``}]}}}function Kn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:qn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function qn(e){let t=new _t({GroupId:e.groupId,IpPermissions:[Z(e)]});return await D().send(t)}function Jn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Yn,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`securityGroups`]}),r.invalidateQueries({queryKey:[`ec2`,`securityGroups`,t.groupId]})}},e[0]=r,e[1]=i),n(i)}async function Yn(e){let t=new gt({GroupId:e.groupId,IpPermissions:[Z(e)]});return await D().send(t)}function Xn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Zn,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function Zn(e){let t=new B({TagSpecifications:$(J.internet_gateway,e?.name,[])});return await D().send(t)}function Qn(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$n,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function $n(e){let t=new Ue({InternetGatewayId:e});return await D().send(t)}function er(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:tr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function tr(e){let t=new R({InternetGatewayId:e.internetGatewayId,VpcId:e.vpcId});return await D().send(t)}function nr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:rr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`internetGateways`]})}},e[0]=r,e[1]=i),n(i)}async function rr(e){let t=new rt({InternetGatewayId:e.internetGatewayId,VpcId:e.vpcId});return await D().send(t)}function ir(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ar,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function ar(e){let t=new I({Domain:`vpc`,TagSpecifications:$(J.elastic_ip,e?.name,[])});return await D().send(t)}function or(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:sr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function sr(e){let t=new ht({AllocationId:e});return await D().send(t)}function cr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:lr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function lr(e){let t=new je({AllocationId:e.allocationId,InstanceId:e.instanceId,NetworkInterfaceId:e.networkInterfaceId});return await D().send(t)}function ur(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`addresses`]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function dr(e){let t=new at({AssociationId:e});return await D().send(t)}function fr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pr,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`iam-instance-profile-associations`,t.instanceId]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function pr(e){let t=new Me({InstanceId:e.instanceId,IamInstanceProfile:{Name:e.instanceProfileName}});return await D().send(t)}function mr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:hr,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ec2`,`iam-instance-profile-associations`,t.instanceId]}),r.invalidateQueries({queryKey:[`ec2`,`instances`]})}},e[0]=r,e[1]=i),n(i)}async function hr(e){let t=new ot({AssociationId:e.associationId});return await D().send(t)}function Q(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:gr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`natGateways`]}),r.invalidateQueries({queryKey:[`ec2`,`addresses`]})}},e[0]=r,e[1]=i),n(i)}async function gr(e){let t=new V({SubnetId:e.subnetId,AllocationId:e.allocationId,TagSpecifications:$(J.natgateway,e.name,[])});return await D().send(t)}function _r(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:vr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`natGateways`]})}},e[0]=r,e[1]=i),n(i)}async function vr(e){let t=new qe({NatGatewayId:e});return await D().send(t)}function yr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:br,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function br(e){let t=new U({VpcId:e.vpcId,TagSpecifications:$(J.route_table,e.name,[])});return await D().send(t)}function xr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Sr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Sr(e){let t=new Xe({RouteTableId:e});return await D().send(t)}function Cr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:wr,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function wr(e){let t=new H({RouteTableId:e.routeTableId,DestinationCidrBlock:e.destinationCidrBlock,GatewayId:e.gatewayId,NatGatewayId:e.natGatewayId});return await D().send(t)}function Tr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Er,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Er(e){let t=new Ye({RouteTableId:e.routeTableId,DestinationCidrBlock:e.destinationCidrBlock});return await D().send(t)}function Dr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Or,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Or(e){let t=new L({RouteTableId:e.routeTableId,SubnetId:e.subnetId});return await D().send(t)}function kr(){let e=(0,Y.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ar,onSuccess:()=>{r.invalidateQueries({queryKey:[`ec2`,`routeTables`]})}},e[0]=r,e[1]=i),n(i)}async function Ar(e){let t=new st({AssociationId:e});return await D().send(t)}function jr(e,t){let n=[];return e&&n.push({Key:`Name`,Value:e}),n.push(...t),n}function $(e,t,n){let r=jr(t,n);if(r.length!==0)return[{ResourceType:e,Tags:r}]}function Mr(){let e=t();return n({mutationFn:async e=>{let t=D(),n=[],r=e.autoGenerateNames?e.namePrefix:void 0,i=e.tags.map(e=>({Key:e.key,Value:e.value})),a=`creating VPC`;try{let o=r?`${r}-vpc`:e.namePrefix,s=(await t.send(new K({CidrBlock:e.cidrBlock,InstanceTenancy:e.tenancy,TagSpecifications:$(J.vpc,o,i)}))).Vpc?.VpcId;if(!s)throw Error(`VPC was created but no VPC ID was returned by the API`);if(n.push({type:`VPC`,id:s}),e.mode===`vpc-only`)return{vpcId:s,created:n};let c=Ae(e.cidrBlock,e.publicSubnetCount,e.privateSubnetCount),l=e.publicSubnetCidrs.length>0?e.publicSubnetCidrs:c.publicSubnets.map(e=>e.cidr),u=e.privateSubnetCidrs.length>0?e.privateSubnetCidrs:c.privateSubnets.map(e=>e.cidr);a=`creating public subnets`;let d=await Promise.all(Array.from({length:e.publicSubnetCount},async(e,a)=>{let o=r?`${r}-subnet-public-${a+1}`:void 0,c=(await t.send(new G({VpcId:s,CidrBlock:l[a],TagSpecifications:$(J.subnet,o,i)}))).Subnet?.SubnetId;if(!c)throw Error(`Public subnet ${a+1} was created but no subnet ID was returned`);return n.push({type:`Public Subnet`,id:c}),await t.send(new q({SubnetId:c,MapPublicIpOnLaunch:{Value:!0}})),c}));a=`creating private subnets`;let f=await Promise.all(Array.from({length:e.privateSubnetCount},async(e,a)=>{let o=r?`${r}-subnet-private-${a+1}`:void 0,c=(await t.send(new G({VpcId:s,CidrBlock:u[a],TagSpecifications:$(J.subnet,o,i)}))).Subnet?.SubnetId;if(!c)throw Error(`Private subnet ${a+1} was created but no subnet ID was returned`);return n.push({type:`Private Subnet`,id:c}),c}));if(e.publicSubnetCount>0){a=`creating internet gateway`;let e=r?`${r}-igw`:void 0,o=(await t.send(new B({TagSpecifications:$(J.internet_gateway,e,i)}))).InternetGateway?.InternetGatewayId;if(!o)throw Error(`Internet gateway was created but no ID was returned`);n.push({type:`Internet Gateway`,id:o}),a=`attaching internet gateway to VPC`,await t.send(new R({InternetGatewayId:o,VpcId:s})),a=`creating public route table`;let c=r?`${r}-rtb-public`:void 0,l=(await t.send(new U({VpcId:s,TagSpecifications:$(J.route_table,c,i)}))).RouteTable?.RouteTableId;if(!l)throw Error(`Public route table was created but no ID was returned`);n.push({type:`Public Route Table`,id:l}),a=`creating default route to internet gateway`,await t.send(new H({RouteTableId:l,DestinationCidrBlock:`0.0.0.0/0`,GatewayId:o})),a=`associating public subnets with route table`,await Promise.all(d.map(async e=>await t.send(new L({RouteTableId:l,SubnetId:e}))))}if(e.privateSubnetCount>0){a=`creating private route table`;let o=r?`${r}-rtb-private`:void 0,c=(await t.send(new U({VpcId:s,TagSpecifications:$(J.route_table,o,i)}))).RouteTable?.RouteTableId;if(!c)throw Error(`Private route table was created but no ID was returned`);if(n.push({type:`Private Route Table`,id:c}),a=`associating private subnets with route table`,await Promise.all(f.map(async e=>await t.send(new L({RouteTableId:c,SubnetId:e})))),e.natGateway===`single`&&d[0]){a=`allocating Elastic IP for NAT gateway`;let e=(await t.send(new I({Domain:`vpc`,TagSpecifications:$(J.elastic_ip,r?`${r}-eip-nat`:void 0,i)}))).AllocationId;if(!e)throw Error(`Elastic IP was allocated but no allocation ID was returned`);n.push({type:`Elastic IP`,id:e}),a=`creating NAT gateway`;let o=(await t.send(new V({SubnetId:d[0],AllocationId:e,TagSpecifications:$(J.natgateway,r?`${r}-nat`:void 0,i)}))).NatGateway?.NatGatewayId;if(!o)throw Error(`NAT gateway was created but no ID was returned`);n.push({type:`NAT Gateway`,id:o}),a=`creating default route to NAT gateway`,await t.send(new H({RouteTableId:c,DestinationCidrBlock:`0.0.0.0/0`,NatGatewayId:o}))}}return{vpcId:s,created:n}}catch(e){return{vpcId:n.find(e=>e.type===`VPC`)?.id,created:n,error:e instanceof Error?e:Error(String(e)),failedStep:`Failed while ${a}`}}},onSuccess:()=>{e.invalidateQueries({queryKey:[`ec2`,`vpcs`]}),e.invalidateQueries({queryKey:[`ec2`,`subnets`]}),e.invalidateQueries({queryKey:[`ec2`,`internetGateways`]}),e.invalidateQueries({queryKey:[`ec2`,`routeTables`]}),e.invalidateQueries({queryKey:[`ec2`,`natGateways`]}),e.invalidateQueries({queryKey:[`ec2`,`addresses`]})}})}export{or as $,Ut as A,wn as B,An as C,Qn as D,Mr as E,Bn as F,kr as G,mn as H,cn as I,gn as J,vn as K,Mn as L,In as M,Tr as N,Zt as O,xr as P,Sn as Q,rn as R,on as S,En as T,ur as U,nr as V,mr as W,tn as X,Vt as Y,kt as Z,Q as _,Dr as a,yr as b,Wn as c,bn as d,Jn as et,jt as f,zt as g,Lt as h,fr as i,Dt as it,_r as j,Gt as k,Hn as l,qt as m,ir as n,Ct as nt,er as o,Xn as p,Yt as q,cr as r,Tt as rt,fn as s,X as t,Kn as tt,un as u,Pn as v,$t as w,Rn as x,Cr as y,On as z}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-CWEplLq4.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DYgBhYCJ.js similarity index 60% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-CWEplLq4.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DYgBhYCJ.js index c8be84d83..48badc344 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-CWEplLq4.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DYgBhYCJ.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{It as t,Jt as n,O as r,Qt as i,_t as a,dt as o,gt as ee}from"./cluster-config-xw_Q7X1e.js";import{Ai as s,Bi as c,Fi as l,Gi as u,Hi as d,Ii as f,Ki as p,Li as m,Mi as h,Ni as g,Pi as _,Ri as v,Ui as y,Vi as b,Wi as x,ji as S,ki as C,ma as te,qi as ne,s as w,va as re,zi as T}from"./awsClient-b0hcP1Iz.js";var E=`2016-11-15`;function D(e){return(t,a)=>async a=>{let{input:s}=a;if(!s.PresignedUrl){let t=await e.region(),c=await ee(s,{getEndpointParameterInstructions(){return{UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}}}},{...e,region:s.SourceRegion}),l=typeof e.endpoint==`function`?await e.endpoint():n(c),u=new i({...l,protocol:`https`,headers:{host:l.hostname},query:{...Object.entries(s).reduce((e,[t,n])=>(e[t]=String(n??``),e),{}),Action:`CopySnapshot`,Version:E,DestinationRegion:t}}),d=await new r({credentials:e.credentials,region:s.SourceRegion,service:`ec2`,sha256:e.sha256,uriEscapePath:e.signingEscapePath}).presign(u,{expiresIn:3600});if(a={...a,input:{...a.input,DestinationRegion:t,PresignedUrl:re(d)}},i.isInstance(a.request)){let{request:e}=a;(e.body??``).includes(`DestinationRegion=`)||(e.body+=`&DestinationRegion=${t}`),(e.body??``).includes(`PresignedUrl=`)||(e.body+=`&PresignedUrl=${o(a.input.PresignedUrl)}`)}}return t(a)}}var O={step:`serialize`,tags:[`CROSS_REGION_PRESIGNED_URL`],name:`crossRegionPresignedUrlMiddleware`,override:!0,relation:`after`,toMiddleware:`endpointV2Middleware`},k=e=>({applyToStack:t=>{t.add(D(e),O)}}),A=t(te,`AmazonEC2`,`EC2Client`,a),j={},M=(e,t,n,r)=>[],N=(e,t,n,r)=>[k(n)],P=class extends A(j,M,`DescribeAddresses`,C){},F=class extends A(j,M,`DescribeAvailabilityZones`,s){},I=class extends A(j,M,`DescribeIamInstanceProfileAssociations`,S){},L=class extends A(j,M,`DescribeImages`,h){},R=class extends A(j,M,`DescribeInstances`,_){},z=class extends A(j,M,`DescribeInstanceTypes`,g){},B=class extends A(j,M,`DescribeInternetGateways`,l){},V=class extends A(j,M,`DescribeKeyPairs`,f){},H=class extends A(j,M,`DescribeLaunchTemplates`,v){},U=class extends A(j,M,`DescribeLaunchTemplateVersions`,m){},W=class extends A(j,M,`DescribeNatGateways`,T){},G=class extends A(j,M,`DescribePlacementGroups`,c){},K=class extends A(j,M,`DescribeRegions`,b){},q=class extends A(j,M,`DescribeRouteTables`,d){},J=class extends A(j,M,`DescribeSecurityGroups`,y){},Y=class extends A(j,M,`DescribeSnapshots`,x){},X=class extends A(j,M,`DescribeSubnets`,u){},Z=class extends A(j,M,`DescribeVolumes`,p){},Q=class extends A(j,M,`DescribeVpcs`,ne){},ie=e({queryKey:[`ec2`,`availabilityZones`],queryFn:async()=>{let e=new F({});return await w().send(e)},staleTime:3e5}),ae=e({queryKey:[`ec2`,`instances`],queryFn:async()=>{let e=new R({});return await w().send(e)},refetchInterval:5e3}),oe=t=>e({queryKey:[`ec2`,`instances`,t],queryFn:async()=>{let e=new R({InstanceIds:[t]});return await w().send(e)},refetchInterval:5e3}),se=t=>e({queryKey:[`ec2`,`iam-instance-profile-associations`,t],queryFn:async()=>{let e=new I({Filters:[{Name:`instance-id`,Values:[t]}]});return await w().send(e)},refetchInterval:5e3}),ce=e({queryKey:[`ec2`,`instances`,`types`],queryFn:async()=>{let e=new z({Filters:[{Name:`capacity`,Values:[`true`]}]});return await w().send(e)},refetchInterval:5e3}),le=e({queryKey:[`ec2`,`images`],queryFn:async()=>{let e=new L({});return await w().send(e)}}),ue=t=>e({queryKey:[`ec2`,`images`,t??`none`],queryFn:async()=>{if(!t)return{Images:[],$metadata:{}};let e=new L({ImageIds:[t]});return await w().send(e)}}),de=e({queryKey:[`ec2`,`keypairs`],queryFn:async()=>{let e=new V({});return await w().send(e)}}),fe=t=>e({queryKey:[`ec2`,`keypairs`,t],queryFn:async()=>{let e=new V({KeyPairIds:[t]});return await w().send(e)}}),pe=e({queryKey:[`ec2`,`regions`],queryFn:async()=>{let e=new K({});return await w().send(e)},staleTime:3e5}),me=e({queryKey:[`ec2`,`subnets`],queryFn:async()=>{let e=new X({});return await w().send(e)}}),he=t=>e({queryKey:[`ec2`,`subnets`,t],queryFn:async()=>{let e=new X({SubnetIds:[t]});return await w().send(e)}}),ge=e({queryKey:[`ec2`,`snapshots`],queryFn:async()=>{let e=new Y({});return await w().send(e)},refetchInterval:5e3}),_e=t=>e({queryKey:[`ec2`,`snapshots`,t],queryFn:async()=>{let e=new Y({SnapshotIds:[t]});return await w().send(e)},refetchInterval:5e3}),ve=e({queryKey:[`ec2`,`internetGateways`],queryFn:async()=>{let e=new B({});return await w().send(e)},refetchInterval:5e3}),ye=t=>e({queryKey:[`ec2`,`internetGateways`,t],queryFn:async()=>{let e=new B({InternetGatewayIds:[t]});return await w().send(e)},refetchInterval:5e3}),be=e({queryKey:[`ec2`,`routeTables`],queryFn:async()=>{let e=new q({});return await w().send(e)},refetchInterval:5e3}),xe=t=>e({queryKey:[`ec2`,`routeTables`,t],queryFn:async()=>{let e=new q({RouteTableIds:[t]});return await w().send(e)},refetchInterval:5e3}),Se=e({queryKey:[`ec2`,`vpcs`],queryFn:async()=>{let e=new Q({});return await w().send(e)}}),Ce=t=>e({queryKey:[`ec2`,`vpcs`,t],queryFn:async()=>{let e=new Q({VpcIds:[t]});return await w().send(e)}}),we=e({queryKey:[`ec2`,`placementGroups`],queryFn:async()=>{let e=new G({});return await w().send(e)}}),$=t=>e({queryKey:[`ec2`,`placementGroups`,t],queryFn:async()=>{let e=new G({GroupIds:[t]});return await w().send(e)}}),Te=e({queryKey:[`ec2`,`securityGroups`],queryFn:async()=>{let e=new J({});return await w().send(e)}}),Ee=t=>e({queryKey:[`ec2`,`securityGroups`,t],queryFn:async()=>{let e=new J({GroupIds:[t]});return await w().send(e)}}),De=e({queryKey:[`ec2`,`addresses`],queryFn:async()=>{let e=new P({});return await w().send(e)},refetchInterval:5e3}),Oe=t=>e({queryKey:[`ec2`,`addresses`,t],queryFn:async()=>{let e=new P({AllocationIds:[t]});return await w().send(e)},refetchInterval:5e3}),ke=e({queryKey:[`ec2`,`natGateways`],queryFn:async()=>{let e=new W({});return await w().send(e)},refetchInterval:5e3}),Ae=t=>e({queryKey:[`ec2`,`natGateways`,t],queryFn:async()=>{let e=new W({NatGatewayIds:[t]});return await w().send(e)},refetchInterval:5e3}),je=e({queryKey:[`ec2`,`launchTemplates`],queryFn:async()=>{let e=new H({});return await w().send(e)},refetchInterval:5e3}),Me=t=>e({queryKey:[`ec2`,`launchTemplates`,t,`versions`],queryFn:async()=>{let e=new U({LaunchTemplateId:t});return await w().send(e)},refetchInterval:5e3}),Ne=e({queryKey:[`ec2`,`volumes`],queryFn:async()=>{let e=new Z({});return await w().send(e)},refetchInterval:5e3}),Pe=t=>e({queryKey:[`ec2`,`volumes`,t],queryFn:async()=>{let e=new Z({VolumeIds:[t]});return await w().send(e)},refetchInterval:5e3});export{Ne as A,Ee as C,he as D,ge as E,N as F,A as I,Se as M,j as N,me as O,M as P,be as S,_e as T,ke as _,ue as a,pe as b,ce as c,ve as d,fe as f,Ae as g,je as h,se as i,Ce as j,Pe as k,ae as l,Me as m,De as n,le as o,de as p,ie as r,oe as s,Oe as t,ye as u,$ as v,Te as w,xe as x,we as y}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{$t as t,Lt as n,Yt as r,_t as i,ft as a,k as o,vt as s}from"./cluster-config-DkOiY8HH.js";import{Ai as c,Bi as l,Fi as u,Gi as d,Hi as f,Ii as p,Ki as m,Li as h,Mi as g,Ni as _,Oi as v,Pi as y,Ri as b,Ui as x,Vi as S,Wi as C,_a as ee,ji as te,ki as ne,pa as re,s as w,zi as T}from"./awsClient-Cqp6x3OY.js";var E=`2016-11-15`;function D(e){return(n,s)=>async s=>{let{input:c}=s;if(!c.PresignedUrl){let n=await e.region(),l=await i(c,{getEndpointParameterInstructions(){return{UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}}}},{...e,region:c.SourceRegion}),u=typeof e.endpoint==`function`?await e.endpoint():r(l),d=new t({...u,protocol:`https`,headers:{host:u.hostname},query:{...Object.entries(c).reduce((e,[t,n])=>(e[t]=String(n??``),e),{}),Action:`CopySnapshot`,Version:E,DestinationRegion:n}}),f=await new o({credentials:e.credentials,region:c.SourceRegion,service:`ec2`,sha256:e.sha256,uriEscapePath:e.signingEscapePath}).presign(d,{expiresIn:3600});if(s={...s,input:{...s.input,DestinationRegion:n,PresignedUrl:ee(f)}},t.isInstance(s.request)){let{request:e}=s;(e.body??``).includes(`DestinationRegion=`)||(e.body+=`&DestinationRegion=${n}`),(e.body??``).includes(`PresignedUrl=`)||(e.body+=`&PresignedUrl=${a(s.input.PresignedUrl)}`)}}return n(s)}}var O={step:`serialize`,tags:[`CROSS_REGION_PRESIGNED_URL`],name:`crossRegionPresignedUrlMiddleware`,override:!0,relation:`after`,toMiddleware:`endpointV2Middleware`},k=e=>({applyToStack:t=>{t.add(D(e),O)}}),A=n(re,`AmazonEC2`,`EC2Client`,s),j={},M=(e,t,n,r)=>[],N=(e,t,n,r)=>[k(n)],P=class extends A(j,M,`DescribeAddresses`,v){},F=class extends A(j,M,`DescribeAvailabilityZones`,ne){},I=class extends A(j,M,`DescribeIamInstanceProfileAssociations`,c){},L=class extends A(j,M,`DescribeImages`,te){},R=class extends A(j,M,`DescribeInstances`,_){},z=class extends A(j,M,`DescribeInstanceTypes`,g){},B=class extends A(j,M,`DescribeInternetGateways`,y){},V=class extends A(j,M,`DescribeKeyPairs`,u){},H=class extends A(j,M,`DescribeLaunchTemplates`,h){},U=class extends A(j,M,`DescribeLaunchTemplateVersions`,p){},W=class extends A(j,M,`DescribeNatGateways`,b){},G=class extends A(j,M,`DescribePlacementGroups`,T){},K=class extends A(j,M,`DescribeRegions`,l){},q=class extends A(j,M,`DescribeRouteTables`,S){},J=class extends A(j,M,`DescribeSecurityGroups`,f){},Y=class extends A(j,M,`DescribeSnapshots`,x){},X=class extends A(j,M,`DescribeSubnets`,C){},Z=class extends A(j,M,`DescribeVolumes`,d){},Q=class extends A(j,M,`DescribeVpcs`,m){},ie=e({queryKey:[`ec2`,`availabilityZones`],queryFn:async()=>{let e=new F({});return await w().send(e)},staleTime:3e5}),ae=e({queryKey:[`ec2`,`instances`],queryFn:async()=>{let e=new R({});return await w().send(e)},refetchInterval:5e3}),oe=t=>e({queryKey:[`ec2`,`instances`,t],queryFn:async()=>{let e=new R({InstanceIds:[t]});return await w().send(e)},refetchInterval:5e3}),se=t=>e({queryKey:[`ec2`,`iam-instance-profile-associations`,t],queryFn:async()=>{let e=new I({Filters:[{Name:`instance-id`,Values:[t]}]});return await w().send(e)},refetchInterval:5e3}),ce=e({queryKey:[`ec2`,`instances`,`types`],queryFn:async()=>{let e=new z({Filters:[{Name:`capacity`,Values:[`true`]}]});return await w().send(e)},refetchInterval:5e3}),le=e({queryKey:[`ec2`,`images`],queryFn:async()=>{let e=new L({});return await w().send(e)}}),ue=t=>e({queryKey:[`ec2`,`images`,t??`none`],queryFn:async()=>{if(!t)return{Images:[],$metadata:{}};let e=new L({ImageIds:[t]});return await w().send(e)}}),de=e({queryKey:[`ec2`,`keypairs`],queryFn:async()=>{let e=new V({});return await w().send(e)}}),fe=t=>e({queryKey:[`ec2`,`keypairs`,t],queryFn:async()=>{let e=new V({KeyPairIds:[t]});return await w().send(e)}}),pe=e({queryKey:[`ec2`,`regions`],queryFn:async()=>{let e=new K({});return await w().send(e)},staleTime:3e5}),me=e({queryKey:[`ec2`,`subnets`],queryFn:async()=>{let e=new X({});return await w().send(e)}}),he=t=>e({queryKey:[`ec2`,`subnets`,t],queryFn:async()=>{let e=new X({SubnetIds:[t]});return await w().send(e)}}),ge=e({queryKey:[`ec2`,`snapshots`],queryFn:async()=>{let e=new Y({});return await w().send(e)},refetchInterval:5e3}),_e=t=>e({queryKey:[`ec2`,`snapshots`,t],queryFn:async()=>{let e=new Y({SnapshotIds:[t]});return await w().send(e)},refetchInterval:5e3}),ve=e({queryKey:[`ec2`,`internetGateways`],queryFn:async()=>{let e=new B({});return await w().send(e)},refetchInterval:5e3}),ye=t=>e({queryKey:[`ec2`,`internetGateways`,t],queryFn:async()=>{let e=new B({InternetGatewayIds:[t]});return await w().send(e)},refetchInterval:5e3}),be=e({queryKey:[`ec2`,`routeTables`],queryFn:async()=>{let e=new q({});return await w().send(e)},refetchInterval:5e3}),xe=t=>e({queryKey:[`ec2`,`routeTables`,t],queryFn:async()=>{let e=new q({RouteTableIds:[t]});return await w().send(e)},refetchInterval:5e3}),Se=e({queryKey:[`ec2`,`vpcs`],queryFn:async()=>{let e=new Q({});return await w().send(e)}}),Ce=t=>e({queryKey:[`ec2`,`vpcs`,t],queryFn:async()=>{let e=new Q({VpcIds:[t]});return await w().send(e)}}),we=e({queryKey:[`ec2`,`placementGroups`],queryFn:async()=>{let e=new G({});return await w().send(e)}}),$=t=>e({queryKey:[`ec2`,`placementGroups`,t],queryFn:async()=>{let e=new G({GroupIds:[t]});return await w().send(e)}}),Te=e({queryKey:[`ec2`,`securityGroups`],queryFn:async()=>{let e=new J({});return await w().send(e)}}),Ee=t=>e({queryKey:[`ec2`,`securityGroups`,t],queryFn:async()=>{let e=new J({GroupIds:[t]});return await w().send(e)}}),De=e({queryKey:[`ec2`,`addresses`],queryFn:async()=>{let e=new P({});return await w().send(e)},refetchInterval:5e3}),Oe=t=>e({queryKey:[`ec2`,`addresses`,t],queryFn:async()=>{let e=new P({AllocationIds:[t]});return await w().send(e)},refetchInterval:5e3}),ke=e({queryKey:[`ec2`,`natGateways`],queryFn:async()=>{let e=new W({});return await w().send(e)},refetchInterval:5e3}),Ae=t=>e({queryKey:[`ec2`,`natGateways`,t],queryFn:async()=>{let e=new W({NatGatewayIds:[t]});return await w().send(e)},refetchInterval:5e3}),je=e({queryKey:[`ec2`,`launchTemplates`],queryFn:async()=>{let e=new H({});return await w().send(e)},refetchInterval:5e3}),Me=t=>e({queryKey:[`ec2`,`launchTemplates`,t,`versions`],queryFn:async()=>{let e=new U({LaunchTemplateId:t});return await w().send(e)},refetchInterval:5e3}),Ne=e({queryKey:[`ec2`,`volumes`],queryFn:async()=>{let e=new Z({});return await w().send(e)},refetchInterval:5e3}),Pe=t=>e({queryKey:[`ec2`,`volumes`,t],queryFn:async()=>{let e=new Z({VolumeIds:[t]});return await w().send(e)},refetchInterval:5e3});export{Ne as A,Ee as C,he as D,ge as E,N as F,A as I,Se as M,j as N,me as O,M as P,be as S,_e as T,ke as _,ue as a,pe as b,ce as c,ve as d,fe as f,Ae as g,je as h,se as i,Ce as j,Pe as k,ae as l,Me as m,De as n,le as o,de as p,ie as r,oe as s,Oe as t,ye as u,$ as v,Te as w,xe as x,we as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DhWukC79.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DqNqPeiA.js similarity index 51% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DhWukC79.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DqNqPeiA.js index f373d3d30..a391a4ffc 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DhWukC79.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ec2-DqNqPeiA.js @@ -1 +1 @@ -import{c as e,d as t,g as n,l as r,m as i,p as a,u as o}from"./cluster-config-xw_Q7X1e.js";import{i as s,n as c,r as l}from"./subnet-calculator-BlCTyGtY.js";var u=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/,d=n().min(1,`Key name is required`).max(255,`Key name must be 255 characters or less`).regex(/^[\w\s._\-:/()#,@[\]+=&;{}!$*]+$/,`Key name contains invalid characters`),f=[`gp3`],p=`launch-wizard-`,m=i({imageId:n().optional(),instanceType:n().optional(),keyName:n().optional(),launchTemplateId:n().optional(),launchTemplateVersion:n().optional(),subnetId:n().optional(),placementGroupName:n().optional(),count:t(`Instance count must be a whole number`).min(1,`Instance count must be at least 1`),rootDeviceName:n().optional(),rootVolumeSize:a().int(`Volume size must be a whole number`).min(1,`Volume size must be at least 1 GiB`).max(16384,`Volume size must be at most 16384 GiB`).optional(),rootVolumeType:e(f).optional(),rootDeleteOnTermination:o().optional(),securityGroupMode:e([`create`,`existing`]).optional(),securityGroupIds:r(n()).optional(),newSgName:n().optional(),newSgDescription:n().optional(),allowSsh:o().optional(),allowHttp:o().optional(),allowHttps:o().optional(),ruleSource:e([`anywhere`,`custom`]).optional(),customCidr:n().optional()}).superRefine((e,t)=>{if(e.launchTemplateId||(e.imageId||t.addIssue({code:`custom`,message:`Please select an image`,path:[`imageId`]}),e.instanceType||t.addIssue({code:`custom`,message:`Please select an instance type`,path:[`instanceType`]}),e.keyName||t.addIssue({code:`custom`,message:`Please select a key pair`,path:[`keyName`]})),e.securityGroupMode){if(e.securityGroupMode===`existing`){(e.securityGroupIds??[]).length===0&&t.addIssue({code:`custom`,message:`Select at least one security group`,path:[`securityGroupIds`]});return}(!e.newSgName||e.newSgName.trim().length===0)&&t.addIssue({code:`custom`,message:`Security group name is required`,path:[`newSgName`]}),e.ruleSource===`custom`&&(!e.customCidr||!s(e.customCidr))&&t.addIssue({code:`custom`,message:`Enter a valid CIDR (e.g. 203.0.113.0/24)`,path:[`customCidr`]})}});function h(e){let t=0,n=RegExp(`^${p}(\\d+)$`);for(let r of e){let e=n.exec(r);if(e){let n=Number(e[1]);n>t&&(t=n)}}return`${p}${t+1}`}var g=i({keyName:d,keyType:e([`rsa`,`ed25519`])}),_=i({keyName:d,publicKeyMaterial:n().min(1,`Public key is required`).refine(e=>e.trim().length>0,`Public key cannot be empty`)}),v=i({size:a().int(`Size must be a whole number`).min(1,`Size must be at least 1 GiB`).max(16384,`Size must be at most 16384 GiB`),availabilityZone:n().min(1,`Availability zone is required`)}),y=i({size:a().int(`Size must be a whole number`).min(1,`Size must be at least 1 GiB`)}),b=i({volumeId:n().min(1,`Volume is required`),description:n().optional()});i({sourceSnapshotId:n().min(1,`Source snapshot is required`),sourceRegion:n().min(1,`Source region is required`),description:n().optional()}),i({volumeId:n().min(1,`Volume is required`),instanceId:n().min(1,`Instance is required`),device:n().optional()}),i({volumeId:n().min(1,`Volume is required`),instanceId:n().optional(),force:o().optional()}),i({instanceType:n().min(1,`Instance type is required`)}),i({name:n().min(1,`Name is required`),description:n().optional()});var x=i({vpcId:n().min(1,`VPC is required`),cidrBlock:n().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.1.0/24)`),availabilityZone:n().optional(),mapPublicIpOnLaunch:o().optional()}),S=i({name:n().optional()}),C=i({subnetId:n().min(1,`Subnet is required`),allocationId:n().min(1,`Elastic IP is required`),name:n().optional()}),w=i({name:n().optional()}),T=i({vpcId:n().min(1,`VPC is required`),name:n().optional()}),E=i({destinationCidrBlock:n().min(1,`Destination is required`).regex(u,`Must be a valid CIDR block (e.g. 0.0.0.0/0)`),targetType:e([`igw`,`nat`]),targetId:n().min(1,`Target is required`)}),D=i({subnetId:n().min(1,`Subnet is required`)});i({cidrBlock:n().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.0.0/16)`),name:n().optional()});var O=i({key:n().min(1,`Key is required`),value:n()}),k=i({mode:e([`vpc-only`,`vpc-and-more`]),namePrefix:n().optional(),autoGenerateNames:o(),cidrBlock:n().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.0.0/16)`).refine(e=>s(e),`CIDR has invalid octets or prefix length (must be /16 to /28)`),tenancy:e([`default`,`dedicated`]),natGateway:e([`none`,`single`]).optional(),publicSubnetCount:a().int().min(0).max(1),privateSubnetCount:a().int().min(0).max(2),publicSubnetCidrs:r(n()),privateSubnetCidrs:r(n()),tags:r(O)}).superRefine((e,t)=>{if(e.mode!==`vpc-and-more`)return;let n=[];for(let[r,i]of e.publicSubnetCidrs.entries())s(i,16,28)?(c(e.cidrBlock,i)||t.addIssue({code:`custom`,message:`Subnet CIDR must be within the VPC CIDR range`,path:[`publicSubnetCidrs`,r]}),n.push({cidr:i,field:`publicSubnetCidrs`,index:r})):t.addIssue({code:`custom`,message:`Invalid subnet CIDR format or prefix length`,path:[`publicSubnetCidrs`,r]});for(let[r,i]of e.privateSubnetCidrs.entries())s(i,16,28)?(c(e.cidrBlock,i)||t.addIssue({code:`custom`,message:`Subnet CIDR must be within the VPC CIDR range`,path:[`privateSubnetCidrs`,r]}),n.push({cidr:i,field:`privateSubnetCidrs`,index:r})):t.addIssue({code:`custom`,message:`Invalid subnet CIDR format or prefix length`,path:[`privateSubnetCidrs`,r]});for(let e=0;e{let n=e.launchTemplateName??``;if(n.lengthF){t.addIssue({code:`custom`,message:`Name must be ${P}–${F} characters`,path:[`launchTemplateName`]});return}N.test(n)||t.addIssue({code:`custom`,message:`Name may contain only letters, digits and ()./_-`,path:[`launchTemplateName`]})}),R=I;export{k as _,w as a,h as b,R as c,E as d,T as f,v as g,x as h,m as i,C as l,b as m,S as n,g as o,j as p,D as r,L as s,f as t,A as u,_ as v,M as x,y}; \ No newline at end of file +import{_ as e,d as t,f as n,h as r,l as i,m as a,u as o}from"./cluster-config-DkOiY8HH.js";import{i as s,n as c,r as l}from"./subnet-calculator-BlCTyGtY.js";var u=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/,d=e().min(1,`Key name is required`).max(255,`Key name must be 255 characters or less`).regex(/^[\w\s._\-:/()#,@[\]+=&;{}!$*]+$/,`Key name contains invalid characters`),f=[`gp3`],p=`launch-wizard-`,m=r({imageId:e().optional(),instanceType:e().optional(),keyName:e().optional(),launchTemplateId:e().optional(),launchTemplateVersion:e().optional(),subnetId:e().optional(),placementGroupName:e().optional(),count:n(`Instance count must be a whole number`).min(1,`Instance count must be at least 1`),rootDeviceName:e().optional(),rootVolumeSize:a().int(`Volume size must be a whole number`).min(1,`Volume size must be at least 1 GiB`).max(16384,`Volume size must be at most 16384 GiB`).optional(),rootVolumeType:i(f).optional(),rootDeleteOnTermination:t().optional(),securityGroupMode:i([`create`,`existing`]).optional(),securityGroupIds:o(e()).optional(),newSgName:e().optional(),newSgDescription:e().optional(),allowSsh:t().optional(),allowHttp:t().optional(),allowHttps:t().optional(),ruleSource:i([`anywhere`,`custom`]).optional(),customCidr:e().optional()}).superRefine((e,t)=>{if(e.launchTemplateId||(e.imageId||t.addIssue({code:`custom`,message:`Please select an image`,path:[`imageId`]}),e.instanceType||t.addIssue({code:`custom`,message:`Please select an instance type`,path:[`instanceType`]}),e.keyName||t.addIssue({code:`custom`,message:`Please select a key pair`,path:[`keyName`]})),e.securityGroupMode){if(e.securityGroupMode===`existing`){(e.securityGroupIds??[]).length===0&&t.addIssue({code:`custom`,message:`Select at least one security group`,path:[`securityGroupIds`]});return}(!e.newSgName||e.newSgName.trim().length===0)&&t.addIssue({code:`custom`,message:`Security group name is required`,path:[`newSgName`]}),e.ruleSource===`custom`&&(!e.customCidr||!s(e.customCidr))&&t.addIssue({code:`custom`,message:`Enter a valid CIDR (e.g. 203.0.113.0/24)`,path:[`customCidr`]})}});function h(e){let t=0,n=RegExp(`^${p}(\\d+)$`);for(let r of e){let e=n.exec(r);if(e){let n=Number(e[1]);n>t&&(t=n)}}return`${p}${t+1}`}var g=r({keyName:d,keyType:i([`rsa`,`ed25519`])}),_=r({keyName:d,publicKeyMaterial:e().min(1,`Public key is required`).refine(e=>e.trim().length>0,`Public key cannot be empty`)}),v=r({size:a().int(`Size must be a whole number`).min(1,`Size must be at least 1 GiB`).max(16384,`Size must be at most 16384 GiB`),availabilityZone:e().min(1,`Availability zone is required`)}),y=r({size:a().int(`Size must be a whole number`).min(1,`Size must be at least 1 GiB`)}),b=r({volumeId:e().min(1,`Volume is required`),description:e().optional()});r({sourceSnapshotId:e().min(1,`Source snapshot is required`),sourceRegion:e().min(1,`Source region is required`),description:e().optional()}),r({volumeId:e().min(1,`Volume is required`),instanceId:e().min(1,`Instance is required`),device:e().optional()}),r({volumeId:e().min(1,`Volume is required`),instanceId:e().optional(),force:t().optional()}),r({instanceType:e().min(1,`Instance type is required`)}),r({name:e().min(1,`Name is required`),description:e().optional()});var x=r({vpcId:e().min(1,`VPC is required`),cidrBlock:e().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.1.0/24)`),availabilityZone:e().optional(),mapPublicIpOnLaunch:t().optional()}),S=r({name:e().optional()}),C=r({subnetId:e().min(1,`Subnet is required`),allocationId:e().min(1,`Elastic IP is required`),name:e().optional()}),w=r({name:e().optional()}),T=r({vpcId:e().min(1,`VPC is required`),name:e().optional()}),E=r({destinationCidrBlock:e().min(1,`Destination is required`).regex(u,`Must be a valid CIDR block (e.g. 0.0.0.0/0)`),targetType:i([`igw`,`nat`]),targetId:e().min(1,`Target is required`)}),D=r({subnetId:e().min(1,`Subnet is required`)});r({cidrBlock:e().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.0.0/16)`),name:e().optional()});var O=r({key:e().min(1,`Key is required`),value:e()}),k=r({mode:i([`vpc-only`,`vpc-and-more`]),namePrefix:e().optional(),autoGenerateNames:t(),cidrBlock:e().min(1,`CIDR block is required`).regex(u,`Must be a valid CIDR block (e.g. 10.0.0.0/16)`).refine(e=>s(e),`CIDR has invalid octets or prefix length (must be /16 to /28)`),tenancy:i([`default`,`dedicated`]),natGateway:i([`none`,`single`]).optional(),publicSubnetCount:a().int().min(0).max(1),privateSubnetCount:a().int().min(0).max(2),publicSubnetCidrs:o(e()),privateSubnetCidrs:o(e()),tags:o(O)}).superRefine((e,t)=>{if(e.mode!==`vpc-and-more`)return;let n=[];for(let[r,i]of e.publicSubnetCidrs.entries())s(i,16,28)?(c(e.cidrBlock,i)||t.addIssue({code:`custom`,message:`Subnet CIDR must be within the VPC CIDR range`,path:[`publicSubnetCidrs`,r]}),n.push({cidr:i,field:`publicSubnetCidrs`,index:r})):t.addIssue({code:`custom`,message:`Invalid subnet CIDR format or prefix length`,path:[`publicSubnetCidrs`,r]});for(let[r,i]of e.privateSubnetCidrs.entries())s(i,16,28)?(c(e.cidrBlock,i)||t.addIssue({code:`custom`,message:`Subnet CIDR must be within the VPC CIDR range`,path:[`privateSubnetCidrs`,r]}),n.push({cidr:i,field:`privateSubnetCidrs`,index:r})):t.addIssue({code:`custom`,message:`Invalid subnet CIDR format or prefix length`,path:[`privateSubnetCidrs`,r]});for(let e=0;e{let n=e.launchTemplateName??``;if(n.lengthF){t.addIssue({code:`custom`,message:`Name must be ${P}–${F} characters`,path:[`launchTemplateName`]});return}N.test(n)||t.addIssue({code:`custom`,message:`Name may contain only letters, digits and ()./_-`,path:[`launchTemplateName`]})}),R=I;export{k as _,w as a,h as b,R as c,E as d,T as f,v as g,x as h,m as i,C as l,b as m,S as n,g as o,j as p,D as r,L as s,f as t,A as u,_ as v,M as x,y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-F-ANqxrm.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BDgZC3r0.js similarity index 63% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-F-ANqxrm.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BDgZC3r0.js index e9f3ede57..6060c4cc2 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-F-ANqxrm.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BDgZC3r0.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{Ar as r,Br as i,Hr as a,Mr as o,Nr as s,Pr as c,Rr as l,Vr as u,c as d,jr as f}from"./awsClient-b0hcP1Iz.js";import{a as p,o as m,s as h}from"./ecr-BFtKzkrF.js";var g=class extends h(p,m,`BatchDeleteImage`,r){},_=class extends h(p,m,`CreateRepository`,f){},v=class extends h(p,m,`DeleteLifecyclePolicy`,o){},y=class extends h(p,m,`DeleteRepository`,s){},b=class extends h(p,m,`DeleteRepositoryPolicy`,c){},x=class extends h(p,m,`GetLifecyclePolicyPreview`,l){},S=class extends h(p,m,`PutImageTagMutability`,i){},C=class extends h(p,m,`PutLifecyclePolicy`,u){},w=class extends h(p,m,`SetRepositoryPolicy`,a){},T=e();function E(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:D,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function D(e){let t=new _({repositoryName:e});return await d().send(t)}function O(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:k,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function k(e){let t=new y({repositoryName:e,force:!0});return await d().send(t)}function A(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:j,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`images`]})}},e[0]=r,e[1]=i),n(i)}async function j(e){let t=new g({repositoryName:e.repositoryName,imageIds:e.imageIds});return await d().send(t)}function M(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:N,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`policy`]})}},e[0]=r,e[1]=i),n(i)}async function N(e){let t=new w({repositoryName:e.repositoryName,policyText:e.policyText});return await d().send(t)}function P(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:F,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function F(e){let t=new S({repositoryName:e.repositoryName,imageTagMutability:e.imageTagMutability});return await d().send(t)}function I(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:L,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t,`policy`]})}},e[0]=r,e[1]=i),n(i)}async function L(e){let t=new b({repositoryName:e});return await d().send(t)}function R(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`lifecycle`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new C({repositoryName:e.repositoryName,lifecyclePolicyText:e.lifecyclePolicyText});return await d().send(t)}function B(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t,`lifecycle`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new v({repositoryName:e});return await d().send(t)}function H(){let e=(0,T.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:U},e[0]=t):t=e[0],n(t)}async function U(e){let t=new x({repositoryName:e});return await d().send(t)}export{I as a,R as c,O as i,M as l,E as n,H as o,B as r,P as s,A as t}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{Ar as r,Br as i,Lr as a,Mr as o,Nr as s,Vr as c,c as l,jr as u,kr as d,zr as f}from"./awsClient-Cqp6x3OY.js";import{a as p,o as m,s as h}from"./ecr-dHrKdmGg.js";var g=class extends h(p,m,`BatchDeleteImage`,d){},_=class extends h(p,m,`CreateRepository`,r){},v=class extends h(p,m,`DeleteLifecyclePolicy`,u){},y=class extends h(p,m,`DeleteRepository`,o){},b=class extends h(p,m,`DeleteRepositoryPolicy`,s){},x=class extends h(p,m,`GetLifecyclePolicyPreview`,a){},S=class extends h(p,m,`PutImageTagMutability`,f){},C=class extends h(p,m,`PutLifecyclePolicy`,i){},w=class extends h(p,m,`SetRepositoryPolicy`,c){},T=e();function E(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:D,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function D(e){let t=new _({repositoryName:e});return await l().send(t)}function O(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:k,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function k(e){let t=new y({repositoryName:e,force:!0});return await l().send(t)}function A(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:j,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`images`]})}},e[0]=r,e[1]=i),n(i)}async function j(e){let t=new g({repositoryName:e.repositoryName,imageIds:e.imageIds});return await l().send(t)}function M(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:N,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`policy`]})}},e[0]=r,e[1]=i),n(i)}async function N(e){let t=new w({repositoryName:e.repositoryName,policyText:e.policyText});return await l().send(t)}function P(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:F,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`]})}},e[0]=r,e[1]=i),n(i)}async function F(e){let t=new S({repositoryName:e.repositoryName,imageTagMutability:e.imageTagMutability});return await l().send(t)}function I(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:L,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t,`policy`]})}},e[0]=r,e[1]=i),n(i)}async function L(e){let t=new b({repositoryName:e});return await l().send(t)}function R(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t.repositoryName,`lifecycle`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new C({repositoryName:e.repositoryName,lifecyclePolicyText:e.lifecyclePolicyText});return await l().send(t)}function B(){let e=(0,T.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecr`,`repositories`,t,`lifecycle`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new v({repositoryName:e});return await l().send(t)}function H(){let e=(0,T.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:U},e[0]=t):t=e[0],n(t)}async function U(e){let t=new x({repositoryName:e});return await l().send(t)}export{I as a,R as c,O as i,M as l,E as n,H as o,B as r,P as s,A as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BFtKzkrF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BFtKzkrF.js deleted file mode 100644 index ae9748eac..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-BFtKzkrF.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{It as t,_t as n}from"./cluster-config-xw_Q7X1e.js";import{Fr as r,Gr as i,Ir as a,Lr as o,Ur as s,Wr as c,c as l,zr as u}from"./awsClient-b0hcP1Iz.js";var d=t(i,`AmazonEC2ContainerRegistry_V20150921`,`ECRClient`,n),f={},p=(e,t,n,r)=>[],m=class extends d(f,p,`DescribeImages`,r){},h=class extends d(f,p,`DescribeRepositories`,a){},g=class extends d(f,p,`GetLifecyclePolicy`,o){},_=class extends d(f,p,`GetRepositoryPolicy`,u){},v=e({queryKey:[`ecr`,`repositories`],queryFn:async()=>{let e=new h({});return await l().send(e)}}),y=t=>e({queryKey:[`ecr`,`repositories`,t,`images`],queryFn:async()=>{let e=new m({repositoryName:t});return await l().send(e)}}),b=t=>e({queryKey:[`ecr`,`repositories`,t,`policy`],queryFn:async()=>{try{let e=new _({repositoryName:t});return(await l().send(e)).policyText??null}catch(e){if(e instanceof c)return null;throw e}}}),x=t=>e({queryKey:[`ecr`,`repositories`,t,`lifecycle`],queryFn:async()=>{try{let e=new g({repositoryName:t});return(await l().send(e)).lifecyclePolicyText??null}catch(e){if(e instanceof s)return null;throw e}}});export{f as a,b as i,v as n,p as o,y as r,d as s,x as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-dHrKdmGg.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-dHrKdmGg.js new file mode 100644 index 000000000..61e4fc010 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecr-dHrKdmGg.js @@ -0,0 +1 @@ +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Lt as t,vt as n}from"./cluster-config-DkOiY8HH.js";import{Fr as r,Hr as i,Ir as a,Pr as o,Rr as s,Ur as c,Wr as l,c as u}from"./awsClient-Cqp6x3OY.js";var d=t(l,`AmazonEC2ContainerRegistry_V20150921`,`ECRClient`,n),f={},p=(e,t,n,r)=>[],m=class extends d(f,p,`DescribeImages`,o){},h=class extends d(f,p,`DescribeRepositories`,r){},g=class extends d(f,p,`GetLifecyclePolicy`,a){},_=class extends d(f,p,`GetRepositoryPolicy`,s){},v=e({queryKey:[`ecr`,`repositories`],queryFn:async()=>{let e=new h({});return await u().send(e)}}),y=t=>e({queryKey:[`ecr`,`repositories`,t,`images`],queryFn:async()=>{let e=new m({repositoryName:t});return await u().send(e)}}),b=t=>e({queryKey:[`ecr`,`repositories`,t,`policy`],queryFn:async()=>{try{let e=new _({repositoryName:t});return(await u().send(e)).policyText??null}catch(e){if(e instanceof c)return null;throw e}}}),x=t=>e({queryKey:[`ecr`,`repositories`,t,`lifecycle`],queryFn:async()=>{try{let e=new g({repositoryName:t});return(await u().send(e)).lifecyclePolicyText??null}catch(e){if(e instanceof i)return null;throw e}}});export{f as a,b as i,v as n,p as o,y as r,d as s,x as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-8RzYyUs4.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-8RzYyUs4.js deleted file mode 100644 index e74eace2a..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-8RzYyUs4.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{o as r}from"./cluster-config-xw_Q7X1e.js";import{Dr as i,Er as a,Or as o,Tr as s,dr as c,fr as l,l as u,mr as d,pr as f,ur as p}from"./awsClient-b0hcP1Iz.js";import{i as m,t as h}from"./signed-fetch-B-FFW93q.js";import{c as g,l as _,r as v,u as y}from"./ecs-gqt7DXoF.js";var b=class extends y(g,_,`CreateCluster`,p){},x=class extends y(g,_,`CreateService`,c){},S=class extends y(g,_,`DeleteCluster`,l){},C=class extends y(g,_,`DeregisterContainerInstance`,f){},w=class extends y(g,_,`DeregisterTaskDefinition`,d){},T=class extends y(g,_,`RegisterTaskDefinition`,s){},E=class extends y(g,_,`RunTask`,a){},D=class extends y(g,_,`StopTask`,i){},O=class extends y(g,_,`UpdateContainerInstancesState`,o){},k=e(),A=`AmazonEC2ContainerServiceV20141113.ProvisionCapacity`;async function j(e){let t=r();if(!t)throw Error(`Not authenticated`);return await m({label:`ProvisionCapacity`,credentials:t,service:`ecs`,contentType:h,target:A,body:JSON.stringify(e)})}function M(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:N,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function N(e){let t=new b({clusterName:e});return await u().send(t)}function P(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:F,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function F(e){let t=new S({cluster:e});return await u().send(t)}function I(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:L,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`tasks`]})}},e[0]=r,e[1]=i),n(i)}async function L(e){let t=new D({cluster:e.cluster,task:e.task});return await u().send(t)}function R(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`task-definitions`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new w({taskDefinition:e});return await u().send(t)}function B(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`container-instances`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new O({cluster:e.cluster,containerInstances:[e.containerInstance],status:e.status});return await u().send(t)}function H(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:U,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`container-instances`]})}},e[0]=r,e[1]=i),n(i)}async function U(e){let t=new C({cluster:e.cluster,containerInstance:e.containerInstance,force:!0});return await u().send(t)}function W(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`task-definitions`]})}},e[0]=r,e[1]=i),n(i)}async function G(e){let t={name:e.containerName,image:e.image,essential:e.essential,cpu:e.containerCpu?Number(e.containerCpu):void 0,memory:e.containerMemory?Number(e.containerMemory):void 0,portMappings:e.portMappings.length>0?e.portMappings.map(K):void 0,resourceRequirements:e.containerGpuCount>0?[{type:`GPU`,value:String(e.containerGpuCount)}]:void 0},n=new T({family:e.family,networkMode:e.networkMode,cpu:e.cpu||void 0,memory:e.memory||void 0,containerDefinitions:[t]});return await u().send(n)}function K(e){return{containerPort:e.containerPort,hostPort:e.containerPort,protocol:e.protocol}}function q(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:J,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:v(t.Cluster).queryKey})}},e[0]=r,e[1]=i),n(i)}async function J(e){return await j(e)}function Y(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:X,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`tasks`]})}},e[0]=r,e[1]=i),n(i)}async function X(e){let t=new E({cluster:e.cluster,taskDefinition:e.taskDefinition,count:e.count,networkConfiguration:e.awsvpc?{awsvpcConfiguration:{subnets:e.subnets,securityGroups:e.securityGroups.length>0?e.securityGroups:void 0,assignPublicIp:e.assignPublicIp?`ENABLED`:`DISABLED`}}:void 0}),n=await u().send(t);if((n.tasks?.length??0)===0&&n.failures?.length){let[e]=n.failures;throw Error(`Task not placed: ${e?.reason??`unknown`}${e?.detail?` (${e.detail})`:``}`)}return n}function Z(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Q,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`services`]})}},e[0]=r,e[1]=i),n(i)}async function Q(e){let t=new x({cluster:e.cluster,serviceName:e.serviceName,taskDefinition:e.taskDefinition,desiredCount:e.desiredCount,networkConfiguration:e.awsvpc?{awsvpcConfiguration:{subnets:e.subnets,securityGroups:e.securityGroups.length>0?e.securityGroups:void 0,assignPublicIp:e.assignPublicIp?`ENABLED`:`DISABLED`}}:void 0,loadBalancers:e.targetGroupArn?[{targetGroupArn:e.targetGroupArn,containerName:e.loadBalancerContainerName||void 0,containerPort:e.loadBalancerContainerPort?Number(e.loadBalancerContainerPort):void 0}]:void 0});return await u().send(t)}export{R as a,Y as c,H as i,I as l,Z as n,q as o,P as r,W as s,M as t,B as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BRK1HDnD.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BRK1HDnD.js new file mode 100644 index 000000000..808dbe3f7 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BRK1HDnD.js @@ -0,0 +1 @@ +import{_ as e,d as t,h as n,l as r,m as i,u as a}from"./cluster-config-DkOiY8HH.js";var o=[`bridge`,`awsvpc`,`host`,`none`],s=n({containerPort:i().int().min(1).max(65535),protocol:r([`tcp`,`udp`])}),c=n({family:e().min(1,`Family is required`),networkMode:r(o),cpu:e(),memory:e(),containerName:e().min(1,`Container name is required`),image:e().min(1,`Image is required`),containerCpu:e(),containerMemory:e(),containerGpuCount:i().int().min(0),essential:t(),portMappings:a(s)}),l=n({cluster:e().min(1,`Cluster is required`),taskDefinition:e().min(1,`Task definition is required`),count:i().int().min(1).max(10),subnets:a(e()),securityGroups:a(e()),assignPublicIp:t()}),u=n({cluster:e().min(1,`Cluster is required`),serviceName:e().min(1,`Service name is required`),taskDefinition:e().min(1,`Task definition is required`),desiredCount:i().int().min(0).max(10),subnets:a(e()),securityGroups:a(e()),assignPublicIp:t(),targetGroupArn:e(),loadBalancerContainerName:e(),loadBalancerContainerPort:e()});export{l as i,u as n,c as r,o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-gqt7DXoF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BmKTMTV2.js similarity index 64% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-gqt7DXoF.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BmKTMTV2.js index da80864b4..57e1127bb 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-gqt7DXoF.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-BmKTMTV2.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{It as t,_t as n}from"./cluster-config-xw_Q7X1e.js";import{Cr as r,Sr as i,_r as a,br as o,gr as s,hr as c,kr as l,l as u,vr as d,wr as f,xr as p,yr as m}from"./awsClient-b0hcP1Iz.js";var h=t(l,`AmazonEC2ContainerServiceV20141113`,`ECSClient`,n),g={},_=(e,t,n,r)=>[],v=class extends h(g,_,`DescribeClusters`,c){},y=class extends h(g,_,`DescribeContainerInstances`,s){},b=class extends h(g,_,`DescribeServices`,a){},x=class extends h(g,_,`DescribeTaskDefinition`,d){},S=class extends h(g,_,`DescribeTasks`,m){},C=class extends h(g,_,`ListClusters`,o){},w=class extends h(g,_,`ListContainerInstances`,p){},T=class extends h(g,_,`ListServices`,i){},E=class extends h(g,_,`ListTaskDefinitions`,r){},D=class extends h(g,_,`ListTasks`,f){},O=3e4,k=15e3,A=e({queryKey:[`ecs`,`clusters`],queryFn:async()=>{let e=u(),t=(await e.send(new C({}))).clusterArns??[];return t.length===0?[]:(await e.send(new v({clusters:t}))).clusters??[]},staleTime:O}),j=t=>e({queryKey:[`ecs`,`clusters`,t],queryFn:async()=>(await u().send(new v({clusters:[t]}))).clusters?.[0]??null,staleTime:O}),M=t=>e({queryKey:[`ecs`,`clusters`,t,`services`],queryFn:async()=>{let e=u(),n=(await e.send(new T({cluster:t}))).serviceArns??[];return n.length===0?[]:(await e.send(new b({cluster:t,services:n}))).services??[]},staleTime:O}),N=t=>e({queryKey:[`ecs`,`clusters`,t,`tasks`],queryFn:async()=>{let e=u(),n=(await e.send(new D({cluster:t}))).taskArns??[];return n.length===0?[]:(await e.send(new S({cluster:t,tasks:n}))).tasks??[]},staleTime:k}),P=t=>e({queryKey:[`ecs`,`clusters`,t,`container-instances`],queryFn:async()=>{let e=u(),n=(await e.send(new w({cluster:t}))).containerInstanceArns??[];return n.length===0?[]:(await e.send(new y({cluster:t,containerInstances:n}))).containerInstances??[]},staleTime:O}),F=e({queryKey:[`ecs`,`task-definitions`],queryFn:async()=>(await u().send(new E({}))).taskDefinitionArns??[],staleTime:O}),I=t=>e({queryKey:[`ecs`,`task-definitions`,t],queryFn:async()=>(await u().send(new x({taskDefinition:t}))).taskDefinition,enabled:t!==``,staleTime:O});export{I as a,g as c,M as i,_ as l,A as n,F as o,P as r,N as s,j as t,h as u}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Lt as t,vt as n}from"./cluster-config-DkOiY8HH.js";import{Cr as r,Or as i,Sr as a,_r as o,br as s,gr as c,hr as l,l as u,mr as d,vr as f,xr as p,yr as m}from"./awsClient-Cqp6x3OY.js";var h=t(i,`AmazonEC2ContainerServiceV20141113`,`ECSClient`,n),g={},_=(e,t,n,r)=>[],v=class extends h(g,_,`DescribeClusters`,d){},y=class extends h(g,_,`DescribeContainerInstances`,l){},b=class extends h(g,_,`DescribeServices`,c){},x=class extends h(g,_,`DescribeTaskDefinition`,o){},S=class extends h(g,_,`DescribeTasks`,f){},C=class extends h(g,_,`ListClusters`,m){},w=class extends h(g,_,`ListContainerInstances`,s){},T=class extends h(g,_,`ListServices`,p){},E=class extends h(g,_,`ListTaskDefinitions`,a){},D=class extends h(g,_,`ListTasks`,r){},O=3e4,k=15e3,A=e({queryKey:[`ecs`,`clusters`],queryFn:async()=>{let e=u(),t=(await e.send(new C({}))).clusterArns??[];return t.length===0?[]:(await e.send(new v({clusters:t}))).clusters??[]},staleTime:O}),j=t=>e({queryKey:[`ecs`,`clusters`,t],queryFn:async()=>(await u().send(new v({clusters:[t]}))).clusters?.[0]??null,staleTime:O}),M=t=>e({queryKey:[`ecs`,`clusters`,t,`services`],queryFn:async()=>{let e=u(),n=(await e.send(new T({cluster:t}))).serviceArns??[];return n.length===0?[]:(await e.send(new b({cluster:t,services:n}))).services??[]},staleTime:O}),N=t=>e({queryKey:[`ecs`,`clusters`,t,`tasks`],queryFn:async()=>{let e=u(),n=(await e.send(new D({cluster:t}))).taskArns??[];return n.length===0?[]:(await e.send(new S({cluster:t,tasks:n}))).tasks??[]},staleTime:k}),P=t=>e({queryKey:[`ecs`,`clusters`,t,`container-instances`],queryFn:async()=>{let e=u(),n=(await e.send(new w({cluster:t}))).containerInstanceArns??[];return n.length===0?[]:(await e.send(new y({cluster:t,containerInstances:n}))).containerInstances??[]},staleTime:O}),F=e({queryKey:[`ecs`,`task-definitions`],queryFn:async()=>(await u().send(new E({}))).taskDefinitionArns??[],staleTime:O}),I=t=>e({queryKey:[`ecs`,`task-definitions`,t],queryFn:async()=>(await u().send(new x({taskDefinition:t}))).taskDefinition,enabled:t!==``,staleTime:O});export{I as a,g as c,M as i,_ as l,A as n,F as o,P as r,N as s,j as t,h as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-Bz1Yh-WL.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-Bz1Yh-WL.js new file mode 100644 index 000000000..3163ebf1b --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-Bz1Yh-WL.js @@ -0,0 +1 @@ +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{s as r}from"./cluster-config-DkOiY8HH.js";import{Dr as i,Er as a,Tr as o,dr as s,fr as c,l,lr as u,pr as d,ur as f,wr as p}from"./awsClient-Cqp6x3OY.js";import{i as m,t as h}from"./signed-fetch-C_pG4AOx.js";import{c as g,l as _,r as v,u as y}from"./ecs-BmKTMTV2.js";var b=class extends y(g,_,`CreateCluster`,u){},x=class extends y(g,_,`CreateService`,f){},S=class extends y(g,_,`DeleteCluster`,s){},C=class extends y(g,_,`DeregisterContainerInstance`,c){},w=class extends y(g,_,`DeregisterTaskDefinition`,d){},T=class extends y(g,_,`RegisterTaskDefinition`,p){},E=class extends y(g,_,`RunTask`,o){},D=class extends y(g,_,`StopTask`,a){},O=class extends y(g,_,`UpdateContainerInstancesState`,i){},k=e(),A=`AmazonEC2ContainerServiceV20141113.ProvisionCapacity`;async function j(e){let t=r();if(!t)throw Error(`Not authenticated`);return await m({label:`ProvisionCapacity`,credentials:t,service:`ecs`,contentType:h,target:A,body:JSON.stringify(e)})}function M(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:N,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function N(e){let t=new b({clusterName:e});return await l().send(t)}function P(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:F,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function F(e){let t=new S({cluster:e});return await l().send(t)}function I(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:L,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`tasks`]})}},e[0]=r,e[1]=i),n(i)}async function L(e){let t=new D({cluster:e.cluster,task:e.task});return await l().send(t)}function R(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`task-definitions`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new w({taskDefinition:e});return await l().send(t)}function B(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`container-instances`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new O({cluster:e.cluster,containerInstances:[e.containerInstance],status:e.status});return await l().send(t)}function H(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:U,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`container-instances`]})}},e[0]=r,e[1]=i),n(i)}async function U(e){let t=new C({cluster:e.cluster,containerInstance:e.containerInstance,force:!0});return await l().send(t)}function W(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:()=>{r.invalidateQueries({queryKey:[`ecs`,`task-definitions`]})}},e[0]=r,e[1]=i),n(i)}async function G(e){let t={name:e.containerName,image:e.image,essential:e.essential,cpu:e.containerCpu?Number(e.containerCpu):void 0,memory:e.containerMemory?Number(e.containerMemory):void 0,portMappings:e.portMappings.length>0?e.portMappings.map(K):void 0,resourceRequirements:e.containerGpuCount>0?[{type:`GPU`,value:String(e.containerGpuCount)}]:void 0},n=new T({family:e.family,networkMode:e.networkMode,cpu:e.cpu||void 0,memory:e.memory||void 0,containerDefinitions:[t]});return await l().send(n)}function K(e){return{containerPort:e.containerPort,hostPort:e.containerPort,protocol:e.protocol}}function q(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:J,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:v(t.Cluster).queryKey})}},e[0]=r,e[1]=i),n(i)}async function J(e){return await j(e)}function Y(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:X,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`tasks`]})}},e[0]=r,e[1]=i),n(i)}async function X(e){let t=new E({cluster:e.cluster,taskDefinition:e.taskDefinition,count:e.count,networkConfiguration:e.awsvpc?{awsvpcConfiguration:{subnets:e.subnets,securityGroups:e.securityGroups.length>0?e.securityGroups:void 0,assignPublicIp:e.assignPublicIp?`ENABLED`:`DISABLED`}}:void 0}),n=await l().send(t);if((n.tasks?.length??0)===0&&n.failures?.length){let[e]=n.failures;throw Error(`Task not placed: ${e?.reason??`unknown`}${e?.detail?` (${e.detail})`:``}`)}return n}function Z(){let e=(0,k.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Q,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`ecs`,`clusters`,t.cluster,`services`]})}},e[0]=r,e[1]=i),n(i)}async function Q(e){let t=new x({cluster:e.cluster,serviceName:e.serviceName,taskDefinition:e.taskDefinition,desiredCount:e.desiredCount,networkConfiguration:e.awsvpc?{awsvpcConfiguration:{subnets:e.subnets,securityGroups:e.securityGroups.length>0?e.securityGroups:void 0,assignPublicIp:e.assignPublicIp?`ENABLED`:`DISABLED`}}:void 0,loadBalancers:e.targetGroupArn?[{targetGroupArn:e.targetGroupArn,containerName:e.loadBalancerContainerName||void 0,containerPort:e.loadBalancerContainerPort?Number(e.loadBalancerContainerPort):void 0}]:void 0});return await l().send(t)}export{R as a,Y as c,H as i,I as l,Z as n,q as o,P as r,W as s,M as t,B as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-KDGpZ8Lc.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-KDGpZ8Lc.js deleted file mode 100644 index 8b5e662b7..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-KDGpZ8Lc.js +++ /dev/null @@ -1 +0,0 @@ -import{c as e,g as t,l as n,m as r,p as i,u as a}from"./cluster-config-xw_Q7X1e.js";var o=[`bridge`,`awsvpc`,`host`,`none`],s=r({containerPort:i().int().min(1).max(65535),protocol:e([`tcp`,`udp`])}),c=r({family:t().min(1,`Family is required`),networkMode:e(o),cpu:t(),memory:t(),containerName:t().min(1,`Container name is required`),image:t().min(1,`Image is required`),containerCpu:t(),containerMemory:t(),containerGpuCount:i().int().min(0),essential:a(),portMappings:n(s)}),l=r({cluster:t().min(1,`Cluster is required`),taskDefinition:t().min(1,`Task definition is required`),count:i().int().min(1).max(10),subnets:n(t()),securityGroups:n(t()),assignPublicIp:a()}),u=r({cluster:t().min(1,`Cluster is required`),serviceName:t().min(1,`Service name is required`),taskDefinition:t().min(1,`Task definition is required`),desiredCount:i().int().min(0).max(10),subnets:n(t()),securityGroups:n(t()),assignPublicIp:a(),targetGroupArn:t(),loadBalancerContainerName:t(),loadBalancerContainerPort:t()});export{l as i,u as n,c as r,o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CU0acTSl.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CSH8MVoU.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CU0acTSl.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CSH8MVoU.js index 2276fa3dc..05728f4c1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CU0acTSl.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ecs-section-nav-CSH8MVoU.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-Dhy4xOXd.js";var r=t(),i=e(),a=`-mb-px border-b-2 px-3 py-2 text-sm font-medium transition-colors`,o={className:`border-primary text-foreground`},s={className:`border-transparent text-muted-foreground hover:text-foreground`};function c(){let e=(0,r.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{activeOptions:{exact:!1},activeProps:o,className:a,inactiveProps:s,to:`/ecs/list-clusters`,children:`Clusters`}),e[0]=t):t=e[0];let c;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,i.jsxs)(`nav`,{className:`mb-6 flex gap-1 border-b`,children:[t,(0,i.jsx)(n,{activeOptions:{exact:!1},activeProps:o,className:a,inactiveProps:s,to:`/ecs/task-definitions`,children:`Task definitions`})]}),e[1]=c):c=e[1],c}export{c as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-BokOReHc.js";var r=t(),i=e(),a=`-mb-px border-b-2 px-3 py-2 text-sm font-medium transition-colors`,o={className:`border-primary text-foreground`},s={className:`border-transparent text-muted-foreground hover:text-foreground`};function c(){let e=(0,r.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{activeOptions:{exact:!1},activeProps:o,className:a,inactiveProps:s,to:`/ecs/list-clusters`,children:`Clusters`}),e[0]=t):t=e[0];let c;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,i.jsxs)(`nav`,{className:`mb-6 flex gap-1 border-b`,children:[t,(0,i.jsx)(n,{activeOptions:{exact:!1},activeProps:o,className:a,inactiveProps:s,to:`/ecs/task-definitions`,children:`Task definitions`})]}),e[1]=c):c=e[1],c}export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-CC8GhK3R.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-Ba3nNOPR.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-CC8GhK3R.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-Ba3nNOPR.js index 604464b61..cd605f8c8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-CC8GhK3R.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-Ba3nNOPR.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Jn as t,Qn as n,Xn as r,Yn as i,Zn as a,ar as o,er as s,ir as c,nr as l,rr as u,tr as d,u as f}from"./awsClient-b0hcP1Iz.js";import{n as p,r as m,t as h}from"./commandBuilder-DOzu_YCE.js";var g=class extends m(h,p,`DescribeAccessEntry`,t){},_=class extends m(h,p,`DescribeAddon`,i){},v=class extends m(h,p,`DescribeAddonVersions`,r){},y=class extends m(h,p,`DescribeCluster`,a){},b=class extends m(h,p,`DescribeNodegroup`,n){},x=class extends m(h,p,`ListAccessEntries`,s){},S=class extends m(h,p,`ListAccessPolicies`,d){},C=class extends m(h,p,`ListAddons`,l){},w=class extends m(h,p,`ListAssociatedAccessPolicies`,u){},T=class extends m(h,p,`ListClusters`,c){},E=class extends m(h,p,`ListNodegroups`,o){},D=3e4,O=3e5,k=e({queryKey:[`eks`,`clusters`],queryFn:async()=>{let e=new T({});return await f().send(e)},staleTime:D}),A=t=>e({queryKey:[`eks`,`clusters`,t],queryFn:async()=>{let e=new y({name:t});return await f().send(e)},staleTime:D}),j=t=>e({queryKey:[`eks`,`clusters`,t,`nodegroups`],queryFn:async()=>{let e=new E({clusterName:t});return await f().send(e)},staleTime:D}),M=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`nodegroups`,n],queryFn:async()=>{let e=new b({clusterName:t,nodegroupName:n});return await f().send(e)},staleTime:D}),N=t=>e({queryKey:[`eks`,`clusters`,t,`access-entries`],queryFn:async()=>{let e=new x({clusterName:t});return await f().send(e)},staleTime:D}),P=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`access-entries`,n],queryFn:async()=>{let e=new g({clusterName:t,principalArn:n});return await f().send(e)},staleTime:D}),F=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`access-entries`,n,`policies`],queryFn:async()=>{let e=new w({clusterName:t,principalArn:n});return await f().send(e)},staleTime:D});e({queryKey:[`eks`,`access-policies`],queryFn:async()=>{let e=new S({});return await f().send(e)},staleTime:O});var I=e({queryKey:[`eks`,`addon-versions`],queryFn:async()=>{let e=new v({});return await f().send(e)},staleTime:O}),L=t=>e({queryKey:[`eks`,`clusters`,t,`addons`],queryFn:async()=>{let e=new C({clusterName:t});return await f().send(e)},staleTime:D}),R=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`addons`,n],queryFn:async()=>{let e=new _({clusterName:t,addonName:n});return await f().send(e)},staleTime:D});export{L as a,k as c,I as i,M as l,P as n,F as o,R as r,A as s,N as t,j as u}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Jn as t,Qn as n,Xn as r,Yn as i,Zn as a,ar as o,er as s,ir as c,nr as l,rr as u,tr as d,u as f}from"./awsClient-Cqp6x3OY.js";import{n as p,r as m,t as h}from"./commandBuilder-CU-BmScO.js";var g=class extends m(h,p,`DescribeAccessEntry`,t){},_=class extends m(h,p,`DescribeAddon`,i){},v=class extends m(h,p,`DescribeAddonVersions`,r){},y=class extends m(h,p,`DescribeCluster`,a){},b=class extends m(h,p,`DescribeNodegroup`,n){},x=class extends m(h,p,`ListAccessEntries`,s){},S=class extends m(h,p,`ListAccessPolicies`,d){},C=class extends m(h,p,`ListAddons`,l){},w=class extends m(h,p,`ListAssociatedAccessPolicies`,u){},T=class extends m(h,p,`ListClusters`,c){},E=class extends m(h,p,`ListNodegroups`,o){},D=3e4,O=3e5,k=e({queryKey:[`eks`,`clusters`],queryFn:async()=>{let e=new T({});return await f().send(e)},staleTime:D}),A=t=>e({queryKey:[`eks`,`clusters`,t],queryFn:async()=>{let e=new y({name:t});return await f().send(e)},staleTime:D}),j=t=>e({queryKey:[`eks`,`clusters`,t,`nodegroups`],queryFn:async()=>{let e=new E({clusterName:t});return await f().send(e)},staleTime:D}),M=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`nodegroups`,n],queryFn:async()=>{let e=new b({clusterName:t,nodegroupName:n});return await f().send(e)},staleTime:D}),N=t=>e({queryKey:[`eks`,`clusters`,t,`access-entries`],queryFn:async()=>{let e=new x({clusterName:t});return await f().send(e)},staleTime:D}),P=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`access-entries`,n],queryFn:async()=>{let e=new g({clusterName:t,principalArn:n});return await f().send(e)},staleTime:D}),F=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`access-entries`,n,`policies`],queryFn:async()=>{let e=new w({clusterName:t,principalArn:n});return await f().send(e)},staleTime:D});e({queryKey:[`eks`,`access-policies`],queryFn:async()=>{let e=new S({});return await f().send(e)},staleTime:O});var I=e({queryKey:[`eks`,`addon-versions`],queryFn:async()=>{let e=new v({});return await f().send(e)},staleTime:O}),L=t=>e({queryKey:[`eks`,`clusters`,t,`addons`],queryFn:async()=>{let e=new C({clusterName:t});return await f().send(e)},staleTime:D}),R=(t,n)=>e({queryKey:[`eks`,`clusters`,t,`addons`,n],queryFn:async()=>{let e=new _({clusterName:t,addonName:n});return await f().send(e)},staleTime:D});export{L as a,k as c,I as i,M as l,P as n,F as o,R as r,A as s,N as t,j as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-C1P60riG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-C1P60riG.js deleted file mode 100644 index 34339e2c2..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-C1P60riG.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{c as r,g as i,l as a,m as o,p as s,u as c}from"./cluster-config-xw_Q7X1e.js";import{$n as l,Bn as u,Gn as d,Hn as f,Kn as p,Un as ee,Vn as m,Wn as h,cr as te,or as ne,qn as re,sr as g,u as _,zn as v}from"./awsClient-b0hcP1Iz.js";import{n as y,r as b,t as x}from"./commandBuilder-DOzu_YCE.js";import{i as S}from"./json-DsgWHaZY.js";import{i as C}from"./subnet-calculator-BlCTyGtY.js";var w=class extends b(x,y,`AssociateAccessPolicy`,v){},T=class extends b(x,y,`CreateAccessEntry`,u){},E=class extends b(x,y,`CreateAddon`,m){},D=class extends b(x,y,`CreateCluster`,f){},O=class extends b(x,y,`CreateNodegroup`,ee){},k=class extends b(x,y,`DeleteAccessEntry`,h){},A=class extends b(x,y,`DeleteAddon`,d){},j=class extends b(x,y,`DeleteCluster`,p){},M=class extends b(x,y,`DeleteNodegroup`,re){},N=class extends b(x,y,`DisassociateAccessPolicy`,l){},P=class extends b(x,y,`UpdateAddon`,ne){},F=class extends b(x,y,`UpdateNodegroupConfig`,g){},I=class extends b(x,y,`UpdateNodegroupVersion`,te){},L=e();function R(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:()=>{r.invalidateQueries({queryKey:[`eks`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new D({name:e.name,version:e.version,roleArn:e.roleArn,resourcesVpcConfig:{subnetIds:e.subnetIds,endpointPublicAccess:e.endpointPublicAccess,endpointPrivateAccess:e.endpointPrivateAccess,publicAccessCidrs:e.endpointPublicAccess?e.publicAccessCidrs:void 0},accessConfig:{authenticationMode:`API`,bootstrapClusterCreatorAdminPermissions:e.bootstrapClusterCreatorAdminPermissions}});return await _().send(t)}function B(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:()=>{r.invalidateQueries({queryKey:[`eks`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new j({name:e});return await _().send(t)}function H(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ie,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function ie(e){let t=new O({clusterName:e.clusterName,nodegroupName:e.nodegroupName,nodeRole:e.nodeRole,subnets:e.subnetIds,instanceTypes:e.instanceTypes,amiType:e.amiType,capacityType:e.capacityType,diskSize:e.diskSize,scalingConfig:{minSize:e.minSize,maxSize:e.maxSize,desiredSize:e.desiredSize}});return await _().send(t)}function U(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:W,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function W(e){let t=new F({clusterName:e.clusterName,nodegroupName:e.nodegroupName,scalingConfig:{minSize:e.minSize,maxSize:e.maxSize,desiredSize:e.desiredSize}});return await _().send(t)}function G(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:K,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function K(e){let t=new I({clusterName:e.clusterName,nodegroupName:e.nodegroupName,version:e.version});return await _().send(t)}function q(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:J,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function J(e){let t=new M({clusterName:e.clusterName,nodegroupName:e.nodegroupName});return await _().send(t)}function Y(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ae,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function ae(e){let t=new E({clusterName:e.clusterName,addonName:e.addonName,addonVersion:e.addonVersion,serviceAccountRoleArn:e.serviceAccountRoleArn,configurationValues:e.configurationValues});return await _().send(t)}function oe(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:se,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function se(e){let t=new P({clusterName:e.clusterName,addonName:e.addonName,addonVersion:e.addonVersion,serviceAccountRoleArn:e.serviceAccountRoleArn,configurationValues:e.configurationValues});return await _().send(t)}function ce(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:le,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function le(e){let t=new A({clusterName:e.clusterName,addonName:e.addonName});return await _().send(t)}function ue(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:de,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`]})}},e[0]=r,e[1]=i),n(i)}async function de(e){let t=new T({clusterName:e.clusterName,principalArn:e.principalArn,kubernetesGroups:e.kubernetesGroups,type:e.type});return await _().send(t)}function fe(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`]})}},e[0]=r,e[1]=i),n(i)}async function pe(e){let t=new k({clusterName:e.clusterName,principalArn:e.principalArn});return await _().send(t)}function me(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:he,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`,t.principalArn,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function he(e){let t=new w({clusterName:e.clusterName,principalArn:e.principalArn,policyArn:e.policyArn,accessScope:{type:e.accessScopeType,namespaces:e.namespaces}});return await _().send(t)}function ge(){let e=(0,L.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:_e,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`,t.principalArn,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function _e(e){let t=new N({clusterName:e.clusterName,principalArn:e.principalArn,policyArn:e.policyArn});return await _().send(t)}var ve=[`1.32`,`1.31`,`1.30`],ye=[{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy`,name:`AmazonEKSClusterAdminPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy`,name:`AmazonEKSAdminPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy`,name:`AmazonEKSEditPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy`,name:`AmazonEKSViewPolicy`}],X=[`AL2_x86_64`,`AL2_ARM_64`],Z=[`ON_DEMAND`,`SPOT`],be=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Principal:{Service:`eks.amazonaws.com`},Action:`sts:AssumeRole`}]},null,2),xe=`arn:aws:iam::aws:policy/AmazonEKSClusterPolicy`,Q=i().min(1,`Name is required`).max(100,`Name must be 100 characters or fewer`).regex(/^[0-9A-Za-z][A-Za-z0-9\-_]*$/,`Must start with a letter or digit and contain only letters, digits, hyphens, or underscores`),Se=o({name:Q,version:i().min(1,`Version is required`),roleArn:i().min(1,`Cluster IAM role is required`),vpcId:i().min(1,`VPC is required`),subnetIds:a(i()).min(1,`At least 1 subnet is required`),bootstrapClusterCreatorAdminPermissions:c(),endpointPublicAccess:c(),endpointPrivateAccess:c(),publicAccessCidrs:a(i())}).refine(e=>e.endpointPublicAccess||e.endpointPrivateAccess,{message:`Enable public access, private access, or both`,path:[`endpointPublicAccess`]}).refine(e=>!e.endpointPublicAccess||e.publicAccessCidrs.every(e=>C(e,0,32)),{message:`Each public access CIDR must be valid (e.g. 203.0.113.0/24)`,path:[`publicAccessCidrs`]}),Ce=o({nodegroupName:Q,nodeRole:i().min(1,`Node IAM role is required`),subnetIds:a(i()).min(1,`At least 1 subnet is required`),instanceTypes:i().min(1,`At least 1 instance type is required`),amiType:r(X),capacityType:r(Z),diskSize:s().int().min(1),minSize:s().int().min(0),desiredSize:s().int().min(0),maxSize:s().int().min(1)}).refine(e=>e.minSize<=e.desiredSize&&e.desiredSize<=e.maxSize,{message:`Sizes must satisfy min ≤ desired ≤ max`,path:[`desiredSize`]}),$=S({label:`Configuration`,allowEmpty:!0}),we=o({addonName:i().min(1,`Add-on is required`),addonVersion:i().min(1,`Version is required`),serviceAccountRoleArn:i(),configurationValues:$});function Te(e){switch(e??``){case`ACTIVE`:return`default`;case`CREATE_FAILED`:case`DELETE_FAILED`:case`UPDATE_FAILED`:case`DEGRADED`:return`destructive`;default:return`secondary`}}var Ee=o({principalArn:i().min(1,`Principal ARN is required`),kubernetesGroups:i()});export{U as C,ge as S,G as T,H as _,be as a,B as b,Te as c,Se as d,Ce as f,R as g,Y as h,Z as i,Ee as l,ue as m,ye as n,ve as o,me as p,X as r,$ as s,xe as t,we as u,fe as v,oe as w,q as x,ce as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-DOTzV24J.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-DOTzV24J.js new file mode 100644 index 000000000..448626af9 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/eks-DOTzV24J.js @@ -0,0 +1 @@ +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{_ as r,d as i,h as a,l as o,m as s,u as c}from"./cluster-config-DkOiY8HH.js";import{$n as l,Bn as u,Gn as d,Hn as f,Kn as ee,Un as p,Vn as m,Wn as h,or as te,qn as ne,sr as re,u as g,zn as _}from"./awsClient-Cqp6x3OY.js";import{n as v,r as y,t as b}from"./commandBuilder-CU-BmScO.js";import{i as x}from"./json-hjud9BaA.js";import{i as S}from"./subnet-calculator-BlCTyGtY.js";var C=class extends y(b,v,`AssociateAccessPolicy`,_){},w=class extends y(b,v,`CreateAccessEntry`,u){},T=class extends y(b,v,`CreateAddon`,m){},E=class extends y(b,v,`CreateCluster`,f){},D=class extends y(b,v,`CreateNodegroup`,p){},O=class extends y(b,v,`DeleteAccessEntry`,h){},k=class extends y(b,v,`DeleteAddon`,d){},A=class extends y(b,v,`DeleteCluster`,ee){},j=class extends y(b,v,`DeleteNodegroup`,ne){},M=class extends y(b,v,`DisassociateAccessPolicy`,l){},N=class extends y(b,v,`UpdateAddon`,te){},P=class extends y(b,v,`UpdateNodegroupConfig`,re){},F=e();function I(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:L,onSuccess:()=>{r.invalidateQueries({queryKey:[`eks`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function L(e){let t=new E({name:e.name,version:e.version,roleArn:e.roleArn,resourcesVpcConfig:{subnetIds:e.subnetIds,endpointPublicAccess:e.endpointPublicAccess,endpointPrivateAccess:e.endpointPrivateAccess,publicAccessCidrs:e.endpointPublicAccess?e.publicAccessCidrs:void 0},accessConfig:{authenticationMode:`API`,bootstrapClusterCreatorAdminPermissions:e.bootstrapClusterCreatorAdminPermissions}});return await g().send(t)}function R(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:z,onSuccess:()=>{r.invalidateQueries({queryKey:[`eks`,`clusters`]})}},e[0]=r,e[1]=i),n(i)}async function z(e){let t=new A({name:e});return await g().send(t)}function B(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:V,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function V(e){let t=new D({clusterName:e.clusterName,nodegroupName:e.nodegroupName,nodeRole:e.nodeRole,subnets:e.subnetIds,instanceTypes:e.instanceTypes,amiType:e.amiType,capacityType:e.capacityType,diskSize:e.diskSize,scalingConfig:{minSize:e.minSize,maxSize:e.maxSize,desiredSize:e.desiredSize}});return await g().send(t)}function H(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ie,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function ie(e){let t=new P({clusterName:e.clusterName,nodegroupName:e.nodegroupName,scalingConfig:{minSize:e.minSize,maxSize:e.maxSize,desiredSize:e.desiredSize}});return await g().send(t)}function U(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:W,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`nodegroups`]})}},e[0]=r,e[1]=i),n(i)}async function W(e){let t=new j({clusterName:e.clusterName,nodegroupName:e.nodegroupName});return await g().send(t)}function G(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:K,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function K(e){let t=new T({clusterName:e.clusterName,addonName:e.addonName,addonVersion:e.addonVersion,serviceAccountRoleArn:e.serviceAccountRoleArn,configurationValues:e.configurationValues});return await g().send(t)}function q(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:J,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function J(e){let t=new N({clusterName:e.clusterName,addonName:e.addonName,addonVersion:e.addonVersion,serviceAccountRoleArn:e.serviceAccountRoleArn,configurationValues:e.configurationValues});return await g().send(t)}function Y(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ae,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`addons`]})}},e[0]=r,e[1]=i),n(i)}async function ae(e){let t=new k({clusterName:e.clusterName,addonName:e.addonName});return await g().send(t)}function oe(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:se,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`]})}},e[0]=r,e[1]=i),n(i)}async function se(e){let t=new w({clusterName:e.clusterName,principalArn:e.principalArn,kubernetesGroups:e.kubernetesGroups,type:e.type});return await g().send(t)}function ce(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:le,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`]})}},e[0]=r,e[1]=i),n(i)}async function le(e){let t=new O({clusterName:e.clusterName,principalArn:e.principalArn});return await g().send(t)}function ue(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:de,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`,t.principalArn,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function de(e){let t=new C({clusterName:e.clusterName,principalArn:e.principalArn,policyArn:e.policyArn,accessScope:{type:e.accessScopeType,namespaces:e.namespaces}});return await g().send(t)}function fe(){let e=(0,F.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`eks`,`clusters`,t.clusterName,`access-entries`,t.principalArn,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function pe(e){let t=new M({clusterName:e.clusterName,principalArn:e.principalArn,policyArn:e.policyArn});return await g().send(t)}var me=[`1.32`,`1.31`,`1.30`],he=[{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy`,name:`AmazonEKSClusterAdminPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy`,name:`AmazonEKSAdminPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy`,name:`AmazonEKSEditPolicy`},{arn:`arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy`,name:`AmazonEKSViewPolicy`}],X=[`AL2_x86_64`,`AL2_ARM_64`],Z=[`ON_DEMAND`,`SPOT`],ge=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Principal:{Service:`eks.amazonaws.com`},Action:`sts:AssumeRole`}]},null,2),_e=`arn:aws:iam::aws:policy/AmazonEKSClusterPolicy`,Q=r().min(1,`Name is required`).max(100,`Name must be 100 characters or fewer`).regex(/^[0-9A-Za-z][A-Za-z0-9\-_]*$/,`Must start with a letter or digit and contain only letters, digits, hyphens, or underscores`),ve=a({name:Q,version:r().min(1,`Version is required`),roleArn:r().min(1,`Cluster IAM role is required`),vpcId:r().min(1,`VPC is required`),subnetIds:c(r()).min(1,`At least 1 subnet is required`),bootstrapClusterCreatorAdminPermissions:i(),endpointPublicAccess:i(),endpointPrivateAccess:i(),publicAccessCidrs:c(r())}).refine(e=>e.endpointPublicAccess||e.endpointPrivateAccess,{message:`Enable public access, private access, or both`,path:[`endpointPublicAccess`]}).refine(e=>!e.endpointPublicAccess||e.publicAccessCidrs.every(e=>S(e,0,32)),{message:`Each public access CIDR must be valid (e.g. 203.0.113.0/24)`,path:[`publicAccessCidrs`]}),ye=a({nodegroupName:Q,nodeRole:r().min(1,`Node IAM role is required`),subnetIds:c(r()).min(1,`At least 1 subnet is required`),instanceTypes:r().min(1,`At least 1 instance type is required`),amiType:o(X),capacityType:o(Z),diskSize:s().int().min(1),minSize:s().int().min(0),desiredSize:s().int().min(0),maxSize:s().int().min(1)}).refine(e=>e.minSize<=e.desiredSize&&e.desiredSize<=e.maxSize,{message:`Sizes must satisfy min ≤ desired ≤ max`,path:[`desiredSize`]}),$=x({label:`Configuration`,allowEmpty:!0}),be=a({addonName:r().min(1,`Add-on is required`),addonVersion:r().min(1,`Version is required`),serviceAccountRoleArn:r(),configurationValues:$});function xe(e){switch(e??``){case`ACTIVE`:return`default`;case`CREATE_FAILED`:case`DELETE_FAILED`:case`UPDATE_FAILED`:case`DEGRADED`:return`destructive`;default:return`secondary`}}var Se=a({principalArn:r().min(1,`Principal ARN is required`),kubernetesGroups:r()});export{H as C,fe as S,B as _,ge as a,R as b,xe as c,ve as d,ye as f,I as g,G as h,Z as i,Se as l,oe as m,he as n,me as o,ue as p,X as r,$ as s,_e as t,be as u,ce as v,q as w,U as x,Y as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DSjTzB2q.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CmXUhudd.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DSjTzB2q.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CmXUhudd.js index f4d3a7c65..6da38897c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DSjTzB2q.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CmXUhudd.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Cn as t,Dn as n,En as r,On as i,Sn as a,Tn as o,d as s,kn as c,wn as l,xn as u}from"./awsClient-b0hcP1Iz.js";import{n as d,r as f,t as p}from"./commandBuilder-DzFUl2wS.js";var m=class extends f(p,d,`DescribeListeners`,u){},h=class extends f(p,d,`DescribeLoadBalancerAttributes`,a){},g=class extends f(p,d,`DescribeLoadBalancers`,t){},_=class extends f(p,d,`DescribeRules`,l){},v=class extends f(p,d,`DescribeSSLPolicies`,o){},y=class extends f(p,d,`DescribeTags`,r){},b=class extends f(p,d,`DescribeTargetGroupAttributes`,n){},x=class extends f(p,d,`DescribeTargetGroups`,i){},S=class extends f(p,d,`DescribeTargetHealth`,c){},C=5e3,w=e({queryKey:[`elbv2`,`loadBalancers`],queryFn:async()=>{let e=new g({});return await s().send(e)},refetchInterval:e=>(e.state.data?.LoadBalancers??[]).some(e=>e.State?.Code===`provisioning`)?C:!1}),T=t=>e({queryKey:[`elbv2`,`loadBalancers`,t],queryFn:async()=>{let e=new g({LoadBalancerArns:[t]});return await s().send(e)},refetchInterval:e=>(e.state.data?.LoadBalancers?.[0])?.State?.Code===`provisioning`&&C}),E=t=>e({queryKey:[`elbv2`,`loadBalancers`,t,`attributes`],queryFn:async()=>{let e=new h({LoadBalancerArn:t});return await s().send(e)}}),D=e({queryKey:[`elbv2`,`targetGroups`],queryFn:async()=>{let e=new x({});return await s().send(e)}}),O=t=>e({queryKey:[`elbv2`,`targetGroups`,t],queryFn:async()=>{let e=new x({TargetGroupArns:[t]});return await s().send(e)}}),k=t=>e({queryKey:[`elbv2`,`targetGroups`,t,`attributes`],queryFn:async()=>{let e=new b({TargetGroupArn:t});return await s().send(e)}}),A=t=>e({queryKey:[`elbv2`,`listeners`,t],queryFn:async()=>{let e=new m({LoadBalancerArn:t});return await s().send(e)}}),j=t=>e({queryKey:[`elbv2`,`listeners`,t,`rules`],queryFn:async()=>{let e=new _({ListenerArn:t});return await s().send(e)}}),M=t=>e({queryKey:[`elbv2`,`targetGroups`,t,`health`],queryFn:async()=>{let e=new S({TargetGroupArn:t});return await s().send(e)}}),N=e({queryKey:[`elbv2`,`sslPolicies`],queryFn:async()=>{let e=new v({});return await s().send(e)},staleTime:1/0}),P=t=>e({queryKey:[`elbv2`,`tags`,...t],queryFn:async()=>{let e=new y({ResourceArns:t});return await s().send(e)},enabled:t.length>0});export{w as a,k as c,M as d,T as i,O as l,A as n,N as o,E as r,P as s,j as t,D as u}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{Cn as t,Dn as n,En as r,On as i,Sn as a,Tn as o,d as s,kn as c,wn as l,xn as u}from"./awsClient-Cqp6x3OY.js";import{n as d,r as f,t as p}from"./commandBuilder-BIU1eEwl.js";var m=class extends f(p,d,`DescribeListeners`,u){},h=class extends f(p,d,`DescribeLoadBalancerAttributes`,a){},g=class extends f(p,d,`DescribeLoadBalancers`,t){},_=class extends f(p,d,`DescribeRules`,l){},v=class extends f(p,d,`DescribeSSLPolicies`,o){},y=class extends f(p,d,`DescribeTags`,r){},b=class extends f(p,d,`DescribeTargetGroupAttributes`,n){},x=class extends f(p,d,`DescribeTargetGroups`,i){},S=class extends f(p,d,`DescribeTargetHealth`,c){},C=5e3,w=e({queryKey:[`elbv2`,`loadBalancers`],queryFn:async()=>{let e=new g({});return await s().send(e)},refetchInterval:e=>(e.state.data?.LoadBalancers??[]).some(e=>e.State?.Code===`provisioning`)?C:!1}),T=t=>e({queryKey:[`elbv2`,`loadBalancers`,t],queryFn:async()=>{let e=new g({LoadBalancerArns:[t]});return await s().send(e)},refetchInterval:e=>(e.state.data?.LoadBalancers?.[0])?.State?.Code===`provisioning`&&C}),E=t=>e({queryKey:[`elbv2`,`loadBalancers`,t,`attributes`],queryFn:async()=>{let e=new h({LoadBalancerArn:t});return await s().send(e)}}),D=e({queryKey:[`elbv2`,`targetGroups`],queryFn:async()=>{let e=new x({});return await s().send(e)}}),O=t=>e({queryKey:[`elbv2`,`targetGroups`,t],queryFn:async()=>{let e=new x({TargetGroupArns:[t]});return await s().send(e)}}),k=t=>e({queryKey:[`elbv2`,`targetGroups`,t,`attributes`],queryFn:async()=>{let e=new b({TargetGroupArn:t});return await s().send(e)}}),A=t=>e({queryKey:[`elbv2`,`listeners`,t],queryFn:async()=>{let e=new m({LoadBalancerArn:t});return await s().send(e)}}),j=t=>e({queryKey:[`elbv2`,`listeners`,t,`rules`],queryFn:async()=>{let e=new _({ListenerArn:t});return await s().send(e)}}),M=t=>e({queryKey:[`elbv2`,`targetGroups`,t,`health`],queryFn:async()=>{let e=new S({TargetGroupArn:t});return await s().send(e)}}),N=e({queryKey:[`elbv2`,`sslPolicies`],queryFn:async()=>{let e=new v({});return await s().send(e)},staleTime:1/0}),P=t=>e({queryKey:[`elbv2`,`tags`,...t],queryFn:async()=>{let e=new y({ResourceArns:t});return await s().send(e)},enabled:t.length>0});export{w as a,k as c,M as d,T as i,O as l,A as n,N as o,E as r,P as s,j as t,D as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CtsfBUSG.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CtsfBUSG.js deleted file mode 100644 index 87ea43e00..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-CtsfBUSG.js +++ /dev/null @@ -1 +0,0 @@ -import{c as e,g as t,h as n,l as r,m as i,p as a}from"./cluster-config-xw_Q7X1e.js";var o=/^(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])$/,s=t().min(1,`Name is required`).max(32,`Name must be 32 characters or less`).regex(o,`Name may contain only letters, digits, and hyphens; must start and end with alphanumeric`).refine(e=>!e.startsWith(`internal-`),`Name cannot start with 'internal-'`),c=t().min(1,`Name is required`).max(32,`Name must be 32 characters or less`).regex(o,`Name may contain only letters, digits, and hyphens; must start and end with alphanumeric`),l=a().int(`Port must be a whole number`).min(1,`Port must be at least 1`).max(65535,`Port must be at most 65535`),u=i({key:t().min(1,`Tag key is required`).max(128),value:t().max(256)}),d=i({protocol:e([`HTTP`,`TCP`]),path:t().min(1,`Path is required`).max(1024),port:t().min(1),intervalSeconds:a().int().min(5).max(300),timeoutSeconds:a().int().min(2).max(120),healthyThresholdCount:a().int().min(2).max(10),unhealthyThresholdCount:a().int().min(2).max(10),matcher:t().regex(/^\d{3}(?:[-,]\d{3})*$/,`Matcher must be HTTP codes like 200 or 200-299 or 200,201`)}),f=i({name:c,protocol:e([`HTTP`,`HTTPS`,`TCP`,`UDP`,`TLS`,`TCP_UDP`]),port:l,vpcId:t().min(1,`VPC is required`),healthCheck:d,tags:r(u)}),p=`ELBSecurityPolicy-2016-08`,m=[`application`,`network`],h=[`HTTP`,`HTTPS`],g=[`TCP`,`UDP`,`TLS`,`TCP_UDP`],_=[...h,...g];function v(e){return e===`network`?g:h}function y(e){return e===`network`?`TCP`:`HTTP`}function b(e){return e===`HTTPS`||e===`TLS`}var x=i({protocol:e(_),port:l,defaultTargetGroupArn:t().min(1,`Target group is required`),certificateArn:t().optional(),sslPolicy:t().optional()}).superRefine((e,t)=>{b(e.protocol)&&!e.certificateArn&&t.addIssue({code:`custom`,path:[`certificateArn`],message:`A certificate is required for HTTPS and TLS`})}),S=/^[!-~]+$/,C=i({field:e([`host-header`,`path-pattern`,`http-header`,`http-request-method`,`source-ip`,`query-string`]),httpHeaderName:t().max(40).optional(),rawValues:t().min(1,`At least one value is required`).max(640,`Too many values`)}).superRefine((e,t)=>{e.field===`http-header`&&!e.httpHeaderName&&t.addIssue({code:`custom`,path:[`httpHeaderName`],message:`Header name is required`});let n=e.rawValues.split(/[\n,]/).map(e=>e.trim()).filter(e=>e.length>0);if(n.length===0||n.length>5){t.addIssue({code:`custom`,path:[`rawValues`],message:`Enter 1 to 5 values, comma or newline separated`});return}for(let e of n)if(!S.test(e)){t.addIssue({code:`custom`,path:[`rawValues`],message:`Value "${e}" contains whitespace or non-ASCII characters`});return}}),w=i({priority:a().int(`Priority must be a whole number`).min(1,`Priority must be at least 1`).max(5e4,`Priority must be at most 50000`),conditions:r(C).min(1,`At least one condition is required`).max(5,`Up to 5 conditions per rule`),forwardTargetGroupArn:t().min(1,`Target group is required`)}),T=i({name:s,type:e(m),scheme:e([`internet-facing`,`internal`]),vpcId:t().min(1,`VPC is required`),subnetIds:r(t()).min(1,`At least 1 subnet is required`),securityGroupIds:r(t()),tags:r(u),listener:i({protocol:e(_),port:l,targetGroupMode:e([`new`,`existing`]),existingTargetGroupArn:t().optional(),certificateArn:t().optional(),sslPolicy:t().optional()}).superRefine((e,t)=>{e.targetGroupMode===`existing`&&!e.existingTargetGroupArn&&t.addIssue({code:`custom`,path:[`existingTargetGroupArn`],message:`Target group is required`}),b(e.protocol)&&!e.certificateArn&&t.addIssue({code:`custom`,path:[`certificateArn`],message:`A certificate is required for HTTPS/TLS`})})});i({targets:r(i({instanceId:t().min(1,`Instance is required`),port:l.optional()})).min(1,`At least one target is required`)}),n(t(),t());export{f as a,v as c,w as i,x as n,y as o,T as r,b as s,p as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-K4aD09h6.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-D0Z7QbU2.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-K4aD09h6.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-D0Z7QbU2.js index c24b994e0..2e3949e9c 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-K4aD09h6.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-D0Z7QbU2.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{An as r,Fn as i,In as a,Ln as o,Mn as s,Nn as c,Pn as l,_n as u,bn as d,d as f,dn as p,fn as m,gn as ee,hn as te,jn as ne,mn as re,pn as ie,vn as h,yn as g}from"./awsClient-b0hcP1Iz.js";import{n as _,r as v,t as y}from"./commandBuilder-DzFUl2wS.js";var b=class extends v(y,_,`AddTags`,p){},x=class extends v(y,_,`CreateListener`,m){},S=class extends v(y,_,`CreateLoadBalancer`,ie){},C=class extends v(y,_,`CreateRule`,re){},w=class extends v(y,_,`CreateTargetGroup`,te){},T=class extends v(y,_,`DeleteListener`,ee){},E=class extends v(y,_,`DeleteLoadBalancer`,u){},D=class extends v(y,_,`DeleteRule`,h){},O=class extends v(y,_,`DeleteTargetGroup`,g){},k=class extends v(y,_,`DeregisterTargets`,d){},A=class extends v(y,_,`ModifyListener`,r){},j=class extends v(y,_,`ModifyLoadBalancerAttributes`,ne){},M=class extends v(y,_,`ModifyRule`,s){},N=class extends v(y,_,`ModifyTargetGroupAttributes`,c){},P=class extends v(y,_,`RegisterTargets`,l){},F=class extends v(y,_,`RemoveTags`,i){},I=class extends v(y,_,`SetSecurityGroups`,a){},L=class extends v(y,_,`SetSubnets`,o){},R=e();function z(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:B,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`]})}},e[0]=r,e[1]=i),n(i)}async function B(e){let t=new E({LoadBalancerArn:e});return await f().send(t)}function V(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:H,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn,`attributes`]})}},e[0]=r,e[1]=i),n(i)}async function H(e){let t=new j({LoadBalancerArn:e.loadBalancerArn,Attributes:e.attributes.map(U)});return await f().send(t)}function U(e){return{Key:e.key,Value:e.value}}function W(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`tags`]})}},e[0]=r,e[1]=i),n(i)}async function G(e){let t=new Set(e.tags.map(q)),n=e.initialKeys.filter(e=>!t.has(e)),r=f();e.tags.length>0&&await r.send(new b({ResourceArns:[e.resourceArn],Tags:e.tags.map(K)})),n.length>0&&await r.send(new F({ResourceArns:[e.resourceArn],TagKeys:n}))}function K(e){return{Key:e.key,Value:e.value}}function q(e){return e.key}function J(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Y,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function Y(e){let t=new I({LoadBalancerArn:e.loadBalancerArn,SecurityGroups:e.securityGroupIds});return await f().send(t)}function ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:oe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function oe(e){let t=new L({LoadBalancerArn:e.loadBalancerArn,Subnets:e.subnetIds});return await f().send(t)}function se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ce,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`]})}},e[0]=r,e[1]=i),n(i)}async function ce(e){let t=e.tags.filter(ue).map(le),n=e.healthCheck.protocol===`HTTP`,r=new w({Name:e.name,Protocol:e.protocol,Port:e.port,VpcId:e.vpcId,TargetType:`instance`,HealthCheckProtocol:e.healthCheck.protocol,HealthCheckPath:n?e.healthCheck.path:void 0,HealthCheckPort:e.healthCheck.port,HealthCheckIntervalSeconds:e.healthCheck.intervalSeconds,HealthCheckTimeoutSeconds:e.healthCheck.timeoutSeconds,HealthyThresholdCount:e.healthCheck.healthyThresholdCount,UnhealthyThresholdCount:e.healthCheck.unhealthyThresholdCount,Matcher:n?{HttpCode:e.healthCheck.matcher}:void 0,Tags:t.length>0?t:void 0});return await f().send(r)}function le(e){return{Key:e.key,Value:e.value}}function ue(e){return e.key.length>0}function de(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:fe,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`]})}},e[0]=r,e[1]=i),n(i)}async function fe(e){let t=new O({TargetGroupArn:e});return await f().send(t)}function pe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`attributes`]})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new N({TargetGroupArn:e.targetGroupArn,Attributes:e.attributes.map(he)});return await f().send(t)}function he(e){return{Key:e.key,Value:e.value}}function X(e,t,n){return e!==`HTTPS`&&e!==`TLS`||!t?{}:{Certificates:[{CertificateArn:t}],SslPolicy:e===`HTTPS`?n:void 0}}function ge(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:_e,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function _e(e){let t=[{Type:`forward`,TargetGroupArn:e.defaultTargetGroupArn}],n=new x({LoadBalancerArn:e.loadBalancerArn,Protocol:e.protocol,Port:e.port,DefaultActions:t,...X(e.protocol,e.certificateArn,e.sslPolicy)});return await f().send(n)}function ve(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ye,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`]})}},e[0]=r,e[1]=i),n(i)}async function ye(e){let t=new T({ListenerArn:e});return await f().send(t)}function be(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function xe(e){let t=[{Type:`forward`,TargetGroupArn:e.defaultTargetGroupArn}],n=new A({ListenerArn:e.listenerArn,Protocol:e.protocol,Port:e.port,DefaultActions:t,...X(e.protocol,e.certificateArn,e.sslPolicy)});return await f().send(n)}function Se(){let e=t();return n({mutationFn:async e=>{let t=f(),n=[],r=``;try{let i=e.listener.existingTargetGroupArn;if(e.listener.targetGroupMode===`new`){let a=e.listener.newTargetGroup;if(!a)throw Error(`internal error: new target group requested but no data supplied`);r=`creating target group`;let o=a.tags.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value})),s=a.healthCheck.protocol===`HTTP`;if(i=(await t.send(new w({Name:a.name,Protocol:a.protocol,Port:a.port,VpcId:a.vpcId,TargetType:`instance`,HealthCheckProtocol:a.healthCheck.protocol,HealthCheckPath:s?a.healthCheck.path:void 0,HealthCheckPort:a.healthCheck.port,HealthCheckIntervalSeconds:a.healthCheck.intervalSeconds,HealthCheckTimeoutSeconds:a.healthCheck.timeoutSeconds,HealthyThresholdCount:a.healthCheck.healthyThresholdCount,UnhealthyThresholdCount:a.healthCheck.unhealthyThresholdCount,Matcher:s?{HttpCode:a.healthCheck.matcher}:void 0,Tags:o.length>0?o:void 0}))).TargetGroups?.[0]?.TargetGroupArn,!i)throw Error(`Target group was created but no ARN was returned by the API`);n.push({type:`Target Group`,id:i})}if(!i)throw Error(`Target group selection is required`);r=`creating load balancer`;let a=e.lb.tags.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value})),o=(await t.send(new S({Name:e.lb.name,Scheme:e.lb.scheme,Type:e.lb.type,IpAddressType:`ipv4`,Subnets:e.lb.subnetIds,SecurityGroups:e.lb.securityGroupIds.length>0?e.lb.securityGroupIds:void 0,Tags:a.length>0?a:void 0}))).LoadBalancers?.[0]?.LoadBalancerArn;if(!o)throw Error(`Load balancer was created but no ARN was returned by the API`);return n.push({type:`Load Balancer`,id:o}),r=`creating listener`,await t.send(new x({LoadBalancerArn:o,Protocol:e.listener.protocol,Port:e.listener.port,DefaultActions:[{Type:`forward`,TargetGroupArn:i}],...X(e.listener.protocol,e.listener.certificateArn,e.listener.sslPolicy)})),n.push({type:`Listener`,id:void 0}),{loadBalancerArn:o,created:n}}catch(e){return{loadBalancerArn:void 0,created:n,error:e instanceof Error?e:Error(String(e)),failedStep:r}}},onSettled:()=>{e.invalidateQueries({queryKey:[`elbv2`]})}})}function Z(e){return e.map(e=>({Id:e.id,Port:e.port}))}function Ce(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:we,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`health`]})}},e[0]=r,e[1]=i),n(i)}async function we(e){let t=new P({TargetGroupArn:e.targetGroupArn,Targets:Z(e.targets)});return await f().send(t)}function Q(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Te,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`health`]})}},e[0]=r,e[1]=i),n(i)}async function Te(e){let t=new k({TargetGroupArn:e.targetGroupArn,Targets:Z(e.targets)});return await f().send(t)}function $(e){return e.map(e=>{switch(e.field){case`host-header`:return{Field:e.field,HostHeaderConfig:{Values:e.values}};case`path-pattern`:return{Field:e.field,PathPatternConfig:{Values:e.values}};case`http-header`:return{Field:e.field,HttpHeaderConfig:{HttpHeaderName:e.httpHeaderName??``,Values:e.values}};case`http-request-method`:return{Field:e.field,HttpRequestMethodConfig:{Values:e.values}};case`source-ip`:return{Field:e.field,SourceIpConfig:{Values:e.values}};case`query-string`:return{Field:e.field,QueryStringConfig:{Values:(e.queryStringPairs??[]).map(e=>({Key:e.key&&e.key.length>0?e.key:void 0,Value:e.value}))}};default:return{Field:e.field,Values:e.values}}})}function Ee(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:De,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function De(e){let t=[{Type:`forward`,TargetGroupArn:e.forwardTargetGroupArn}],n=new C({ListenerArn:e.listenerArn,Priority:e.priority,Conditions:$(e.conditions),Actions:t});return await f().send(n)}function Oe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ke,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function ke(e){let t=new M({RuleArn:e.ruleArn,Conditions:e.conditions?$(e.conditions):void 0,Actions:e.forwardTargetGroupArn?[{Type:`forward`,TargetGroupArn:e.forwardTargetGroupArn}]:void 0});return await f().send(t)}function Ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:je,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function je(e){let t=new D({RuleArn:e.ruleArn});return await f().send(t)}export{W as _,ve as a,de as c,V as d,Oe as f,ae as g,J as h,se as i,Q as l,Ce as m,Se as n,z as o,pe as p,Ee as r,Ae as s,ge as t,be as u}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{An as r,Fn as i,In as a,Ln as o,Mn as s,Nn as c,Pn as l,_n as u,bn as d,d as f,dn as p,fn as m,gn as ee,hn as te,jn as ne,mn as re,pn as ie,vn as h,yn as g}from"./awsClient-Cqp6x3OY.js";import{n as _,r as v,t as y}from"./commandBuilder-BIU1eEwl.js";var b=class extends v(y,_,`AddTags`,p){},x=class extends v(y,_,`CreateListener`,m){},S=class extends v(y,_,`CreateLoadBalancer`,ie){},C=class extends v(y,_,`CreateRule`,re){},w=class extends v(y,_,`CreateTargetGroup`,te){},T=class extends v(y,_,`DeleteListener`,ee){},E=class extends v(y,_,`DeleteLoadBalancer`,u){},D=class extends v(y,_,`DeleteRule`,h){},O=class extends v(y,_,`DeleteTargetGroup`,g){},k=class extends v(y,_,`DeregisterTargets`,d){},A=class extends v(y,_,`ModifyListener`,r){},j=class extends v(y,_,`ModifyLoadBalancerAttributes`,ne){},M=class extends v(y,_,`ModifyRule`,s){},N=class extends v(y,_,`ModifyTargetGroupAttributes`,c){},P=class extends v(y,_,`RegisterTargets`,l){},F=class extends v(y,_,`RemoveTags`,i){},I=class extends v(y,_,`SetSecurityGroups`,a){},L=class extends v(y,_,`SetSubnets`,o){},R=e();function z(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:B,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`]})}},e[0]=r,e[1]=i),n(i)}async function B(e){let t=new E({LoadBalancerArn:e});return await f().send(t)}function V(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:H,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn,`attributes`]})}},e[0]=r,e[1]=i),n(i)}async function H(e){let t=new j({LoadBalancerArn:e.loadBalancerArn,Attributes:e.attributes.map(U)});return await f().send(t)}function U(e){return{Key:e.key,Value:e.value}}function W(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:G,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`tags`]})}},e[0]=r,e[1]=i),n(i)}async function G(e){let t=new Set(e.tags.map(q)),n=e.initialKeys.filter(e=>!t.has(e)),r=f();e.tags.length>0&&await r.send(new b({ResourceArns:[e.resourceArn],Tags:e.tags.map(K)})),n.length>0&&await r.send(new F({ResourceArns:[e.resourceArn],TagKeys:n}))}function K(e){return{Key:e.key,Value:e.value}}function q(e){return e.key}function J(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Y,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function Y(e){let t=new I({LoadBalancerArn:e.loadBalancerArn,SecurityGroups:e.securityGroupIds});return await f().send(t)}function ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:oe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`loadBalancers`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function oe(e){let t=new L({LoadBalancerArn:e.loadBalancerArn,Subnets:e.subnetIds});return await f().send(t)}function se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ce,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`]})}},e[0]=r,e[1]=i),n(i)}async function ce(e){let t=e.tags.filter(ue).map(le),n=e.healthCheck.protocol===`HTTP`,r=new w({Name:e.name,Protocol:e.protocol,Port:e.port,VpcId:e.vpcId,TargetType:`instance`,HealthCheckProtocol:e.healthCheck.protocol,HealthCheckPath:n?e.healthCheck.path:void 0,HealthCheckPort:e.healthCheck.port,HealthCheckIntervalSeconds:e.healthCheck.intervalSeconds,HealthCheckTimeoutSeconds:e.healthCheck.timeoutSeconds,HealthyThresholdCount:e.healthCheck.healthyThresholdCount,UnhealthyThresholdCount:e.healthCheck.unhealthyThresholdCount,Matcher:n?{HttpCode:e.healthCheck.matcher}:void 0,Tags:t.length>0?t:void 0});return await f().send(r)}function le(e){return{Key:e.key,Value:e.value}}function ue(e){return e.key.length>0}function de(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:fe,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`]})}},e[0]=r,e[1]=i),n(i)}async function fe(e){let t=new O({TargetGroupArn:e});return await f().send(t)}function pe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`attributes`]})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new N({TargetGroupArn:e.targetGroupArn,Attributes:e.attributes.map(he)});return await f().send(t)}function he(e){return{Key:e.key,Value:e.value}}function X(e,t,n){return e!==`HTTPS`&&e!==`TLS`||!t?{}:{Certificates:[{CertificateArn:t}],SslPolicy:e===`HTTPS`?n:void 0}}function ge(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:_e,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function _e(e){let t=[{Type:`forward`,TargetGroupArn:e.defaultTargetGroupArn}],n=new x({LoadBalancerArn:e.loadBalancerArn,Protocol:e.protocol,Port:e.port,DefaultActions:t,...X(e.protocol,e.certificateArn,e.sslPolicy)});return await f().send(n)}function ve(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ye,onSuccess:()=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`]})}},e[0]=r,e[1]=i),n(i)}async function ye(e){let t=new T({ListenerArn:e});return await f().send(t)}function be(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.loadBalancerArn]})}},e[0]=r,e[1]=i),n(i)}async function xe(e){let t=[{Type:`forward`,TargetGroupArn:e.defaultTargetGroupArn}],n=new A({ListenerArn:e.listenerArn,Protocol:e.protocol,Port:e.port,DefaultActions:t,...X(e.protocol,e.certificateArn,e.sslPolicy)});return await f().send(n)}function Se(){let e=t();return n({mutationFn:async e=>{let t=f(),n=[],r=``;try{let i=e.listener.existingTargetGroupArn;if(e.listener.targetGroupMode===`new`){let a=e.listener.newTargetGroup;if(!a)throw Error(`internal error: new target group requested but no data supplied`);r=`creating target group`;let o=a.tags.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value})),s=a.healthCheck.protocol===`HTTP`;if(i=(await t.send(new w({Name:a.name,Protocol:a.protocol,Port:a.port,VpcId:a.vpcId,TargetType:`instance`,HealthCheckProtocol:a.healthCheck.protocol,HealthCheckPath:s?a.healthCheck.path:void 0,HealthCheckPort:a.healthCheck.port,HealthCheckIntervalSeconds:a.healthCheck.intervalSeconds,HealthCheckTimeoutSeconds:a.healthCheck.timeoutSeconds,HealthyThresholdCount:a.healthCheck.healthyThresholdCount,UnhealthyThresholdCount:a.healthCheck.unhealthyThresholdCount,Matcher:s?{HttpCode:a.healthCheck.matcher}:void 0,Tags:o.length>0?o:void 0}))).TargetGroups?.[0]?.TargetGroupArn,!i)throw Error(`Target group was created but no ARN was returned by the API`);n.push({type:`Target Group`,id:i})}if(!i)throw Error(`Target group selection is required`);r=`creating load balancer`;let a=e.lb.tags.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value})),o=(await t.send(new S({Name:e.lb.name,Scheme:e.lb.scheme,Type:e.lb.type,IpAddressType:`ipv4`,Subnets:e.lb.subnetIds,SecurityGroups:e.lb.securityGroupIds.length>0?e.lb.securityGroupIds:void 0,Tags:a.length>0?a:void 0}))).LoadBalancers?.[0]?.LoadBalancerArn;if(!o)throw Error(`Load balancer was created but no ARN was returned by the API`);return n.push({type:`Load Balancer`,id:o}),r=`creating listener`,await t.send(new x({LoadBalancerArn:o,Protocol:e.listener.protocol,Port:e.listener.port,DefaultActions:[{Type:`forward`,TargetGroupArn:i}],...X(e.listener.protocol,e.listener.certificateArn,e.listener.sslPolicy)})),n.push({type:`Listener`,id:void 0}),{loadBalancerArn:o,created:n}}catch(e){return{loadBalancerArn:void 0,created:n,error:e instanceof Error?e:Error(String(e)),failedStep:r}}},onSettled:()=>{e.invalidateQueries({queryKey:[`elbv2`]})}})}function Z(e){return e.map(e=>({Id:e.id,Port:e.port}))}function Ce(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:we,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`health`]})}},e[0]=r,e[1]=i),n(i)}async function we(e){let t=new P({TargetGroupArn:e.targetGroupArn,Targets:Z(e.targets)});return await f().send(t)}function Q(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Te,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`targetGroups`,t.targetGroupArn,`health`]})}},e[0]=r,e[1]=i),n(i)}async function Te(e){let t=new k({TargetGroupArn:e.targetGroupArn,Targets:Z(e.targets)});return await f().send(t)}function $(e){return e.map(e=>{switch(e.field){case`host-header`:return{Field:e.field,HostHeaderConfig:{Values:e.values}};case`path-pattern`:return{Field:e.field,PathPatternConfig:{Values:e.values}};case`http-header`:return{Field:e.field,HttpHeaderConfig:{HttpHeaderName:e.httpHeaderName??``,Values:e.values}};case`http-request-method`:return{Field:e.field,HttpRequestMethodConfig:{Values:e.values}};case`source-ip`:return{Field:e.field,SourceIpConfig:{Values:e.values}};case`query-string`:return{Field:e.field,QueryStringConfig:{Values:(e.queryStringPairs??[]).map(e=>({Key:e.key&&e.key.length>0?e.key:void 0,Value:e.value}))}};default:return{Field:e.field,Values:e.values}}})}function Ee(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:De,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function De(e){let t=[{Type:`forward`,TargetGroupArn:e.forwardTargetGroupArn}],n=new C({ListenerArn:e.listenerArn,Priority:e.priority,Conditions:$(e.conditions),Actions:t});return await f().send(n)}function Oe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ke,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function ke(e){let t=new M({RuleArn:e.ruleArn,Conditions:e.conditions?$(e.conditions):void 0,Actions:e.forwardTargetGroupArn?[{Type:`forward`,TargetGroupArn:e.forwardTargetGroupArn}]:void 0});return await f().send(t)}function Ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:je,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`elbv2`,`listeners`,t.listenerArn,`rules`]})}},e[0]=r,e[1]=i),n(i)}async function je(e){let t=new D({RuleArn:e.ruleArn});return await f().send(t)}export{W as _,ve as a,de as c,V as d,Oe as f,ae as g,J as h,se as i,Q as l,Ce as m,Se as n,z as o,pe as p,Ee as r,Ae as s,ge as t,be as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DqjEJ4Pi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DqjEJ4Pi.js new file mode 100644 index 000000000..694a4a86c --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/elbv2-DqjEJ4Pi.js @@ -0,0 +1 @@ +import{_ as e,g as t,h as n,l as r,m as i,u as a}from"./cluster-config-DkOiY8HH.js";var o=/^(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])$/,s=e().min(1,`Name is required`).max(32,`Name must be 32 characters or less`).regex(o,`Name may contain only letters, digits, and hyphens; must start and end with alphanumeric`).refine(e=>!e.startsWith(`internal-`),`Name cannot start with 'internal-'`),c=e().min(1,`Name is required`).max(32,`Name must be 32 characters or less`).regex(o,`Name may contain only letters, digits, and hyphens; must start and end with alphanumeric`),l=i().int(`Port must be a whole number`).min(1,`Port must be at least 1`).max(65535,`Port must be at most 65535`),u=n({key:e().min(1,`Tag key is required`).max(128),value:e().max(256)}),d=n({protocol:r([`HTTP`,`TCP`]),path:e().min(1,`Path is required`).max(1024),port:e().min(1),intervalSeconds:i().int().min(5).max(300),timeoutSeconds:i().int().min(2).max(120),healthyThresholdCount:i().int().min(2).max(10),unhealthyThresholdCount:i().int().min(2).max(10),matcher:e().regex(/^\d{3}(?:[-,]\d{3})*$/,`Matcher must be HTTP codes like 200 or 200-299 or 200,201`)}),f=n({name:c,protocol:r([`HTTP`,`HTTPS`,`TCP`,`UDP`,`TLS`,`TCP_UDP`]),port:l,vpcId:e().min(1,`VPC is required`),healthCheck:d,tags:a(u)}),p=`ELBSecurityPolicy-2016-08`,m=[`application`,`network`],h=[`HTTP`,`HTTPS`],g=[`TCP`,`UDP`,`TLS`,`TCP_UDP`],_=[...h,...g];function v(e){return e===`network`?g:h}function y(e){return e===`network`?`TCP`:`HTTP`}function b(e){return e===`HTTPS`||e===`TLS`}var x=n({protocol:r(_),port:l,defaultTargetGroupArn:e().min(1,`Target group is required`),certificateArn:e().optional(),sslPolicy:e().optional()}).superRefine((e,t)=>{b(e.protocol)&&!e.certificateArn&&t.addIssue({code:`custom`,path:[`certificateArn`],message:`A certificate is required for HTTPS and TLS`})}),S=/^[!-~]+$/,C=n({field:r([`host-header`,`path-pattern`,`http-header`,`http-request-method`,`source-ip`,`query-string`]),httpHeaderName:e().max(40).optional(),rawValues:e().min(1,`At least one value is required`).max(640,`Too many values`)}).superRefine((e,t)=>{e.field===`http-header`&&!e.httpHeaderName&&t.addIssue({code:`custom`,path:[`httpHeaderName`],message:`Header name is required`});let n=e.rawValues.split(/[\n,]/).map(e=>e.trim()).filter(e=>e.length>0);if(n.length===0||n.length>5){t.addIssue({code:`custom`,path:[`rawValues`],message:`Enter 1 to 5 values, comma or newline separated`});return}for(let e of n)if(!S.test(e)){t.addIssue({code:`custom`,path:[`rawValues`],message:`Value "${e}" contains whitespace or non-ASCII characters`});return}}),w=n({priority:i().int(`Priority must be a whole number`).min(1,`Priority must be at least 1`).max(5e4,`Priority must be at most 50000`),conditions:a(C).min(1,`At least one condition is required`).max(5,`Up to 5 conditions per rule`),forwardTargetGroupArn:e().min(1,`Target group is required`)}),T=n({name:s,type:r(m),scheme:r([`internet-facing`,`internal`]),vpcId:e().min(1,`VPC is required`),subnetIds:a(e()).min(1,`At least 1 subnet is required`),securityGroupIds:a(e()),tags:a(u),listener:n({protocol:r(_),port:l,targetGroupMode:r([`new`,`existing`]),existingTargetGroupArn:e().optional(),certificateArn:e().optional(),sslPolicy:e().optional()}).superRefine((e,t)=>{e.targetGroupMode===`existing`&&!e.existingTargetGroupArn&&t.addIssue({code:`custom`,path:[`existingTargetGroupArn`],message:`Target group is required`}),b(e.protocol)&&!e.certificateArn&&t.addIssue({code:`custom`,path:[`certificateArn`],message:`A certificate is required for HTTPS/TLS`})})});n({targets:a(n({instanceId:e().min(1,`Instance is required`),port:l.optional()})).min(1,`At least one target is required`)}),t(e(),e());export{f as a,v as c,w as i,x as n,y as o,T as r,b as s,p as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-c7GHI5st.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-CS-ql6du.js similarity index 97% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-c7GHI5st.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-CS-ql6du.js index bd48a5126..8f1cb32d9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-c7GHI5st.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/field-CS-ql6du.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./dist-BKgR2qk6.js";import{tn as r}from"./cluster-config-xw_Q7X1e.js";import"./separator-B3CHPrlt.js";var i=t(),a=e();function o(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex items-center gap-2 text-sm/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`label`,{className:s,"data-slot":`label`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function s(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`fieldset`,{className:s,"data-slot":`field-set`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function c(e){let t=(0,i.c)(10),n,o,s;t[0]===e?(n=t[1],o=t[2],s=t[3]):({className:n,variant:s,...o}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s);let c=s===void 0?`legend`:s,l;t[4]===n?l=t[5]:(l=r(`mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm`,n),t[4]=n,t[5]=l);let u;return t[6]!==o||t[7]!==l||t[8]!==c?(u=(0,a.jsx)(`legend`,{className:l,"data-slot":`field-legend`,"data-variant":c,...o}),t[6]=o,t[7]=l,t[8]=c,t[9]=u):u=t[9],u}function l(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`group/field-group @container/field-group flex w-full flex-col gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`div`,{className:s,"data-slot":`field-group`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}var u=n(`group/field flex w-full gap-2 data-[invalid=true]:text-destructive`,{variants:{orientation:{vertical:`flex-col [&>*]:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center has-[>[data-slot=field-content]]:items-start [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col @md/field-group:flex-row @md/field-group:items-center @md/field-group:has-[>[data-slot=field-content]]:items-start [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function d(e){let t=(0,i.c)(11),n,o,s;t[0]===e?(n=t[1],o=t[2],s=t[3]):({className:n,orientation:s,...o}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s);let c=s===void 0?`vertical`:s,l;t[4]!==n||t[5]!==c?(l=r(u({orientation:c}),n),t[4]=n,t[5]=c,t[6]=l):l=t[6];let d;return t[7]!==c||t[8]!==o||t[9]!==l?(d=(0,a.jsx)(`div`,{className:l,"data-orientation":c,"data-slot":`field`,role:`group`,...o}),t[7]=c,t[8]=o,t[9]=l,t[10]=d):d=t[10],d}function f(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex w-fit items-center gap-2 text-xs/relaxed leading-snug font-medium group-data-[disabled=true]/field:opacity-50`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`div`,{className:s,"data-slot":`field-label`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function p(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`text-left text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-[orientation=horizontal]/field:text-balance [[data-variant=legend]+&]:-mt-1.5`,`last:mt-0 nth-last-2:-mt-1`,`[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`p`,{className:s,"data-slot":`field-description`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function m(e){let t=(0,i.c)(15),n,o,s,c;t[0]===e?(n=t[1],o=t[2],s=t[3],c=t[4]):({className:o,children:n,errors:s,...c}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s,t[4]=c);let l;bb0:{if(n){l=n;break bb0}if(!s?.length){l=null;break bb0}let e;t[5]===s?e=t[6]:(e=[...new Map(s.map(g)).values()],t[5]=s,t[6]=e);let r=e;if(r?.length===1){l=r[0]?.message;break bb0}let i;t[7]===r?i=t[8]:(i=(0,a.jsx)(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:r.map(h)}),t[7]=r,t[8]=i),l=i}let u=l;if(!u)return null;let d;t[9]===o?d=t[10]:(d=r(`text-xs/relaxed font-normal text-destructive`,o),t[9]=o,t[10]=d);let f;return t[11]!==u||t[12]!==c||t[13]!==d?(f=(0,a.jsx)(`div`,{className:d,"data-slot":`field-error`,role:`alert`,...c,children:u}),t[11]=u,t[12]=c,t[13]=d,t[14]=f):f=t[14],f}function h(e){return e?.message&&(0,a.jsx)(`li`,{children:e.message},e.message)}function g(e){return[e?.message,e]}export{c as a,o as c,l as i,p as n,s as o,m as r,f as s,d as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./dist-DeC3TnAR.js";import{nn as r}from"./cluster-config-DkOiY8HH.js";import"./separator--2CKf90h.js";var i=t(),a=e();function o(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex items-center gap-2 text-sm/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`label`,{className:s,"data-slot":`label`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function s(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`fieldset`,{className:s,"data-slot":`field-set`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function c(e){let t=(0,i.c)(10),n,o,s;t[0]===e?(n=t[1],o=t[2],s=t[3]):({className:n,variant:s,...o}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s);let c=s===void 0?`legend`:s,l;t[4]===n?l=t[5]:(l=r(`mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm`,n),t[4]=n,t[5]=l);let u;return t[6]!==o||t[7]!==l||t[8]!==c?(u=(0,a.jsx)(`legend`,{className:l,"data-slot":`field-legend`,"data-variant":c,...o}),t[6]=o,t[7]=l,t[8]=c,t[9]=u):u=t[9],u}function l(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`group/field-group @container/field-group flex w-full flex-col gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`div`,{className:s,"data-slot":`field-group`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}var u=n(`group/field flex w-full gap-2 data-[invalid=true]:text-destructive`,{variants:{orientation:{vertical:`flex-col [&>*]:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center has-[>[data-slot=field-content]]:items-start [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col @md/field-group:flex-row @md/field-group:items-center @md/field-group:has-[>[data-slot=field-content]]:items-start [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function d(e){let t=(0,i.c)(11),n,o,s;t[0]===e?(n=t[1],o=t[2],s=t[3]):({className:n,orientation:s,...o}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s);let c=s===void 0?`vertical`:s,l;t[4]!==n||t[5]!==c?(l=r(u({orientation:c}),n),t[4]=n,t[5]=c,t[6]=l):l=t[6];let d;return t[7]!==c||t[8]!==o||t[9]!==l?(d=(0,a.jsx)(`div`,{className:l,"data-orientation":c,"data-slot":`field`,role:`group`,...o}),t[7]=c,t[8]=o,t[9]=l,t[10]=d):d=t[10],d}function f(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`flex w-fit items-center gap-2 text-xs/relaxed leading-snug font-medium group-data-[disabled=true]/field:opacity-50`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`div`,{className:s,"data-slot":`field-label`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function p(e){let t=(0,i.c)(8),n,o;t[0]===e?(n=t[1],o=t[2]):({className:n,...o}=e,t[0]=e,t[1]=n,t[2]=o);let s;t[3]===n?s=t[4]:(s=r(`text-left text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-[orientation=horizontal]/field:text-balance [[data-variant=legend]+&]:-mt-1.5`,`last:mt-0 nth-last-2:-mt-1`,`[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,n),t[3]=n,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,a.jsx)(`p`,{className:s,"data-slot":`field-description`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function m(e){let t=(0,i.c)(15),n,o,s,c;t[0]===e?(n=t[1],o=t[2],s=t[3],c=t[4]):({className:o,children:n,errors:s,...c}=e,t[0]=e,t[1]=n,t[2]=o,t[3]=s,t[4]=c);let l;bb0:{if(n){l=n;break bb0}if(!s?.length){l=null;break bb0}let e;t[5]===s?e=t[6]:(e=[...new Map(s.map(g)).values()],t[5]=s,t[6]=e);let r=e;if(r?.length===1){l=r[0]?.message;break bb0}let i;t[7]===r?i=t[8]:(i=(0,a.jsx)(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:r.map(h)}),t[7]=r,t[8]=i),l=i}let u=l;if(!u)return null;let d;t[9]===o?d=t[10]:(d=r(`text-xs/relaxed font-normal text-destructive`,o),t[9]=o,t[10]=d);let f;return t[11]!==u||t[12]!==c||t[13]!==d?(f=(0,a.jsx)(`div`,{className:d,"data-slot":`field-error`,role:`alert`,...c,children:u}),t[11]=u,t[12]=c,t[13]=d,t[14]=f):f=t[14],f}function h(e){return e?.message&&(0,a.jsx)(`li`,{children:e.message},e.message)}function g(e){return[e?.message,e]}export{c as a,o as c,l as i,p as n,s as o,m as r,f as s,d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-BUM37An0.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-DXvy9CQI.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-BUM37An0.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-DXvy9CQI.js index 8813e4a07..2ee1044e6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-BUM37An0.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/form-actions-DXvy9CQI.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./button-BarTr35m.js";var r=t(),i=e();function a(e){let t=(0,r.c)(9),{isSubmitting:a,isPending:o,onCancel:s,submitLabel:c,pendingLabel:l}=e,u=a||o,d;t[0]!==u||t[1]!==s?(d=(0,i.jsx)(n,{disabled:u,onClick:s,type:`button`,variant:`outline`,children:`Cancel`}),t[0]=u,t[1]=s,t[2]=d):d=t[2];let f=u?l:c,p;t[3]!==u||t[4]!==f?(p=(0,i.jsx)(n,{disabled:u,type:`submit`,children:f}),t[3]=u,t[4]=f,t[5]=p):p=t[5];let m;return t[6]!==d||t[7]!==p?(m=(0,i.jsxs)(`div`,{className:`flex gap-2`,children:[d,p]}),t[6]=d,t[7]=p,t[8]=m):m=t[8],m}export{a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./button-qf9lLJ2x.js";var r=t(),i=e();function a(e){let t=(0,r.c)(9),{isSubmitting:a,isPending:o,onCancel:s,submitLabel:c,pendingLabel:l}=e,u=a||o,d;t[0]!==u||t[1]!==s?(d=(0,i.jsx)(n,{disabled:u,onClick:s,type:`button`,variant:`outline`,children:`Cancel`}),t[0]=u,t[1]=s,t[2]=d):d=t[2];let f=u?l:c,p;t[3]!==u||t[4]!==f?(p=(0,i.jsx)(n,{disabled:u,type:`submit`,children:f}),t[3]=u,t[4]=f,t[5]=p):p=t[5];let m;return t[6]!==d||t[7]!==p?(m=(0,i.jsxs)(`div`,{className:`flex gap-2`,children:[d,p]}),t[6]=d,t[7]=p,t[8]=m):m=t[8],m}export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-BD2r8UcO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-DMxBayBV.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-BD2r8UcO.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-DMxBayBV.js index dbec40ac2..dd0f09724 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-BD2r8UcO.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/gpu-instance-type-select-DMxBayBV.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{on as n}from"./cluster-config-xw_Q7X1e.js";import{a as r,c as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./select-B01jpDaX.js";var d=t(),f=e();function p(e){return(e.GpuInfo?.Gpus?.length??0)>0}function m(e){let t=new Map;for(let n of e){let e=n.InstanceType;e&&!t.has(e)&&t.set(e,{name:e,gpu:n.GpuInfo?.Gpus?.[0]})}return[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name))}function h(e){let t=(0,d.c)(6),{entry:r,availability:i}=e,a=r.gpu?.MemoryInfo?.SizeInMiB,o;t[0]===a?o=t[1]:(o=a!==void 0&&` — ${n(a)} GPU`,t[0]=a,t[1]=o);let s=i!==void 0&&` (${i} available)`,c;return t[2]!==r.name||t[3]!==o||t[4]!==s?(c=(0,f.jsxs)(f.Fragment,{children:[r.name,o,s]}),t[2]=r.name,t[3]=o,t[4]=s,t[5]=c):c=t[5],c}function g(e){let t=(0,d.c)(33),{instanceTypes:n,value:p,onValueChange:g,availabilityByType:y,disabled:b,id:x,className:S,"aria-invalid":C}=e,w,T;if(t[0]!==n){let e=m(n);w=e.filter(v),T=e.filter(_),t[0]=n,t[1]=w,t[2]=T}else w=t[1],T=t[2];let E;t[3]!==w||t[4]!==T?(E={standardEntries:w,gpuEntries:T},t[3]=w,t[4]=T,t[5]=E):E=t[5];let{standardEntries:D,gpuEntries:O}=E,k=D.length>0&&O.length>0,A;t[6]===g?A=t[7]:(A=e=>{g(e??``)},t[6]=g,t[7]=A);let j;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,f.jsx)(i,{}),t[8]=j):j=t[8];let M;t[9]!==C||t[10]!==S||t[11]!==x?(M=(0,f.jsx)(l,{"aria-invalid":C,className:S,id:x,children:j}),t[9]=C,t[10]=S,t[11]=x,t[12]=M):M=t[12];let N;t[13]!==y||t[14]!==k||t[15]!==D?(N=D.length>0&&(0,f.jsxs)(c,{children:[k&&(0,f.jsx)(r,{children:`Standard`}),D.map(e=>(0,f.jsx)(a,{value:e.name,children:(0,f.jsx)(h,{availability:y?.[e.name],entry:e})},e.name))]}),t[13]=y,t[14]=k,t[15]=D,t[16]=N):N=t[16];let P;t[17]===k?P=t[18]:(P=k&&(0,f.jsx)(s,{}),t[17]=k,t[18]=P);let F;t[19]!==y||t[20]!==O||t[21]!==k?(F=O.length>0&&(0,f.jsxs)(c,{children:[k&&(0,f.jsx)(r,{children:`GPU-Accelerated`}),O.map(e=>(0,f.jsx)(a,{value:e.name,children:(0,f.jsx)(h,{availability:y?.[e.name],entry:e})},e.name))]}),t[19]=y,t[20]=O,t[21]=k,t[22]=F):F=t[22];let I;t[23]!==N||t[24]!==P||t[25]!==F?(I=(0,f.jsxs)(o,{children:[N,P,F]}),t[23]=N,t[24]=P,t[25]=F,t[26]=I):I=t[26];let L;return t[27]!==b||t[28]!==I||t[29]!==A||t[30]!==M||t[31]!==p?(L=(0,f.jsxs)(u,{disabled:b,onValueChange:A,value:p,children:[M,I]}),t[27]=b,t[28]=I,t[29]=A,t[30]=M,t[31]=p,t[32]=L):L=t[32],L}function _(e){return e.gpu}function v(e){return!e.gpu}export{p as n,g as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{sn as n}from"./cluster-config-DkOiY8HH.js";import{a as r,c as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./select-Cn66OoPn.js";var d=t(),f=e();function p(e){return(e.GpuInfo?.Gpus?.length??0)>0}function m(e){let t=new Map;for(let n of e){let e=n.InstanceType;e&&!t.has(e)&&t.set(e,{name:e,gpu:n.GpuInfo?.Gpus?.[0]})}return[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name))}function h(e){let t=(0,d.c)(6),{entry:r,availability:i}=e,a=r.gpu?.MemoryInfo?.SizeInMiB,o;t[0]===a?o=t[1]:(o=a!==void 0&&` — ${n(a)} GPU`,t[0]=a,t[1]=o);let s=i!==void 0&&` (${i} available)`,c;return t[2]!==r.name||t[3]!==o||t[4]!==s?(c=(0,f.jsxs)(f.Fragment,{children:[r.name,o,s]}),t[2]=r.name,t[3]=o,t[4]=s,t[5]=c):c=t[5],c}function g(e){let t=(0,d.c)(33),{instanceTypes:n,value:p,onValueChange:g,availabilityByType:y,disabled:b,id:x,className:S,"aria-invalid":C}=e,w,T;if(t[0]!==n){let e=m(n);w=e.filter(v),T=e.filter(_),t[0]=n,t[1]=w,t[2]=T}else w=t[1],T=t[2];let E;t[3]!==w||t[4]!==T?(E={standardEntries:w,gpuEntries:T},t[3]=w,t[4]=T,t[5]=E):E=t[5];let{standardEntries:D,gpuEntries:O}=E,k=D.length>0&&O.length>0,A;t[6]===g?A=t[7]:(A=e=>{g(e??``)},t[6]=g,t[7]=A);let j;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,f.jsx)(i,{}),t[8]=j):j=t[8];let M;t[9]!==C||t[10]!==S||t[11]!==x?(M=(0,f.jsx)(l,{"aria-invalid":C,className:S,id:x,children:j}),t[9]=C,t[10]=S,t[11]=x,t[12]=M):M=t[12];let N;t[13]!==y||t[14]!==k||t[15]!==D?(N=D.length>0&&(0,f.jsxs)(c,{children:[k&&(0,f.jsx)(r,{children:`Standard`}),D.map(e=>(0,f.jsx)(a,{value:e.name,children:(0,f.jsx)(h,{availability:y?.[e.name],entry:e})},e.name))]}),t[13]=y,t[14]=k,t[15]=D,t[16]=N):N=t[16];let P;t[17]===k?P=t[18]:(P=k&&(0,f.jsx)(s,{}),t[17]=k,t[18]=P);let F;t[19]!==y||t[20]!==O||t[21]!==k?(F=O.length>0&&(0,f.jsxs)(c,{children:[k&&(0,f.jsx)(r,{children:`GPU-Accelerated`}),O.map(e=>(0,f.jsx)(a,{value:e.name,children:(0,f.jsx)(h,{availability:y?.[e.name],entry:e})},e.name))]}),t[19]=y,t[20]=O,t[21]=k,t[22]=F):F=t[22];let I;t[23]!==N||t[24]!==P||t[25]!==F?(I=(0,f.jsxs)(o,{children:[N,P,F]}),t[23]=N,t[24]=P,t[25]=F,t[26]=I):I=t[26];let L;return t[27]!==b||t[28]!==I||t[29]!==A||t[30]!==M||t[31]!==p?(L=(0,f.jsxs)(u,{disabled:b,onValueChange:A,value:p,children:[M,I]}),t[27]=b,t[28]=I,t[29]=A,t[30]=M,t[31]=p,t[32]=L):L=t[32],L}function _(e){return e.gpu}function v(e){return!e.gpu}export{p as n,g as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-C6v-izo3.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-BDQeV5zm.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-C6v-izo3.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-BDQeV5zm.js index 6e357e383..57da2553e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-C6v-izo3.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/guardrail-form-page-BDQeV5zm.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{c as i,i as a,n as o,s,t as c}from"./select-B01jpDaX.js";import{t as l}from"./plus-BodhJT2v.js";import{t as u}from"./trash-DVab4pEz.js";import{t as d}from"./button-BarTr35m.js";import{t as f}from"./input-6kdUb_DH.js";import{a as p,c as m,d as h,i as g,l as _,o as v,t as ee,u as te}from"./bedrock-7XDhMm-7.js";import{t as ne}from"./page-heading-vksh_67w.js";import{i as re,n as ie,r as y,t as ae}from"./zod-DF_n2ejy.js";import{t as oe}from"./error-banner-DeOeVBKS.js";import{t as se}from"./form-actions-BUM37An0.js";import{a as ce,n as le,o as ue,r as b,s as x,t as S}from"./field-c7GHI5st.js";import{t as de}from"./tags-field-array-Dk9nPDzt.js";import{t as fe}from"./textarea-n04EavUm.js";var C=t(),w=e();function T(e){return e}function E(e){let t=(0,C.c)(8),{control:n,name:r,id:a,label:l,options:u}=e,d;t[0]!==a||t[1]!==l||t[2]!==u?(d=e=>{let{field:t,fieldState:n}=e,r=typeof t.value==`string`?t.value:``;return(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:a,children:l})}),(0,w.jsxs)(c,{onValueChange:e=>{t.onChange(e??``)},value:r,children:[(0,w.jsx)(s,{"aria-invalid":!!n.error,className:`w-full`,id:a,children:(0,w.jsx)(i,{})}),(0,w.jsx)(o,{children:u.map(D)})]}),(0,w.jsx)(b,{errors:[n.error]})]})},t[0]=a,t[1]=l,t[2]=u,t[3]=d):d=t[3];let f;return t[4]!==n||t[5]!==r||t[6]!==d?(f=(0,w.jsx)(ie,{control:n,name:r,render:d}),t[4]=n,t[5]=r,t[6]=d,t[7]=f):f=t[7],f}function D(e){return(0,w.jsx)(a,{value:e,children:e},e)}function pe(e){let t=(0,C.c)(19),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`topics`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==i||t[3]!==o||t[4]!==r||t[5]!==c){let e;t[7]!==i||t[8]!==r||t[9]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-name-${e.id}`,children:`Topic name`})}),(0,w.jsx)(f,{"aria-invalid":!!i.topics?.[t]?.name,id:`topic-name-${e.id}`,...r(T(`topics.${t}.name`))}),(0,w.jsx)(b,{errors:[i.topics?.[t]?.name]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-definition-${e.id}`,children:`Definition`})}),(0,w.jsx)(fe,{"aria-invalid":!!i.topics?.[t]?.definition,id:`topic-definition-${e.id}`,rows:2,...r(T(`topics.${t}.definition`))}),(0,w.jsx)(b,{errors:[i.topics?.[t]?.definition]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-examples-${e.id}`,children:`Example prompts`})}),(0,w.jsx)(fe,{id:`topic-examples-${e.id}`,placeholder:`One example prompt per line`,rows:2,...r(T(`topics.${t}.examplesText`))})]}),(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove topic`]})]},e.id),t[7]=i,t[8]=r,t[9]=c,t[10]=e):e=t[10],p=o.map(e),t[2]=i,t[3]=o,t[4]=r,t[5]=c,t[6]=p}else p=t[6];let m;t[11]===s?m=t[12]:(m=()=>{s({name:``,definition:``,examplesText:``})},t[11]=s,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[13]=h):h=t[13];let g;t[14]===m?g=t[15]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add denied topic`]}),t[14]=m,t[15]=g);let _;return t[16]!==p||t[17]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[16]=p,t[17]=g,t[18]=_):_=t[18],_}function me(e){let t=(0,C.c)(17),{control:n}=e,r;t[0]===n?r=t[1]:(r={control:n,name:`contentFilters`},t[0]=n,t[1]=r);let{fields:i,append:a,remove:o}=y(r),s;if(t[2]!==n||t[3]!==i||t[4]!==o){let e;t[6]!==n||t[7]!==o?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-3`,children:[(0,w.jsx)(E,{control:n,id:`filter-type-${e.id}`,label:`Category`,name:T(`contentFilters.${t}.type`),options:p}),(0,w.jsx)(E,{control:n,id:`filter-input-${e.id}`,label:`Input strength`,name:T(`contentFilters.${t}.inputStrength`),options:m}),(0,w.jsx)(E,{control:n,id:`filter-output-${e.id}`,label:`Output strength`,name:T(`contentFilters.${t}.outputStrength`),options:m}),(0,w.jsx)(`div`,{className:`sm:col-span-3`,children:(0,w.jsxs)(d,{onClick:()=>{o(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove content filter`]})})]},e.id),t[6]=n,t[7]=o,t[8]=e):e=t[8],s=i.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=s}else s=t[5];let c;t[9]===a?c=t[10]:(c=()=>{a({type:`SEXUAL`,inputStrength:`NONE`,outputStrength:`NONE`})},t[9]=a,t[10]=c);let f;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,w.jsx)(l,{className:`size-3.5`}),t[11]=f):f=t[11];let h;t[12]===c?h=t[13]:(h=(0,w.jsxs)(d,{onClick:c,size:`sm`,type:`button`,variant:`outline`,children:[f,`Add content filter`]}),t[12]=c,t[13]=h);let g;return t[14]!==s||t[15]!==h?(g=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[s,h]}),t[14]=s,t[15]=h,t[16]=g):g=t[16],g}function he(e){let t=(0,C.c)(8),{register:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,w.jsx)(x,{children:`Managed word list`}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n(`profanityFilter`),t[1]=n,t[2]=i);let a;t[3]===i?a=t[4]:(a=(0,w.jsx)(`input`,{"aria-label":`Block profanity`,type:`checkbox`,...i}),t[3]=i,t[4]=a);let o;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,w.jsx)(`span`,{children:`Block profanity using Bedrock's managed word list`}),t[5]=o):o=t[5];let s;return t[6]===a?s=t[7]:(s=(0,w.jsxs)(S,{children:[r,(0,w.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[a,o]})]}),t[6]=a,t[7]=s),s}function ge(e){let t=(0,C.c)(19),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`words`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==i||t[3]!==o||t[4]!==r||t[5]!==c){let e;t[7]!==i||t[8]!==r||t[9]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,w.jsx)(f,{"aria-invalid":!!i.words?.[t]?.text,placeholder:`Blocked word or phrase`,...r(T(`words.${t}.text`))}),(0,w.jsx)(b,{errors:[i.words?.[t]?.text]})]}),(0,w.jsx)(d,{"aria-label":`Remove word ${t+1}`,onClick:()=>{c(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,w.jsx)(u,{className:`size-3.5`})})]},e.id),t[7]=i,t[8]=r,t[9]=c,t[10]=e):e=t[10],p=o.map(e),t[2]=i,t[3]=o,t[4]=r,t[5]=c,t[6]=p}else p=t[6];let m;t[11]===s?m=t[12]:(m=()=>{s({text:``})},t[11]=s,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[13]=h):h=t[13];let g;t[14]===m?g=t[15]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add word`]}),t[14]=m,t[15]=g);let _;return t[16]!==p||t[17]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-2`,children:[p,g]}),t[16]=p,t[17]=g,t[18]=_):_=t[18],_}function _e(e){let t=(0,C.c)(17),{control:n}=e,r;t[0]===n?r=t[1]:(r={control:n,name:`piiEntities`},t[0]=n,t[1]=r);let{fields:i,append:a,remove:o}=y(r),s;if(t[2]!==n||t[3]!==i||t[4]!==o){let e;t[6]!==n||t[7]!==o?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-2`,children:[(0,w.jsx)(E,{control:n,id:`pii-type-${e.id}`,label:`PII type`,name:T(`piiEntities.${t}.type`),options:_}),(0,w.jsx)(E,{control:n,id:`pii-action-${e.id}`,label:`Action`,name:T(`piiEntities.${t}.action`),options:te}),(0,w.jsx)(`div`,{className:`sm:col-span-2`,children:(0,w.jsxs)(d,{onClick:()=>{o(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove PII entity`]})})]},e.id),t[6]=n,t[7]=o,t[8]=e):e=t[8],s=i.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=s}else s=t[5];let c;t[9]===a?c=t[10]:(c=()=>{a({type:`EMAIL`,action:`BLOCK`})},t[9]=a,t[10]=c);let f;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,w.jsx)(l,{className:`size-3.5`}),t[11]=f):f=t[11];let p;t[12]===c?p=t[13]:(p=(0,w.jsxs)(d,{onClick:c,size:`sm`,type:`button`,variant:`outline`,children:[f,`Add PII entity`]}),t[12]=c,t[13]=p);let m;return t[14]!==s||t[15]!==p?(m=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[s,p]}),t[14]=s,t[15]=p,t[16]=m):m=t[16],m}function ve(e){let t=(0,C.c)(21),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`regexes`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==r||t[6]!==c){let e;t[8]!==n||t[9]!==i||t[10]!==r||t[11]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-name-${e.id}`,children:`Name`})}),(0,w.jsx)(f,{"aria-invalid":!!i.regexes?.[t]?.name,id:`regex-name-${e.id}`,...r(T(`regexes.${t}.name`))}),(0,w.jsx)(b,{errors:[i.regexes?.[t]?.name]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-pattern-${e.id}`,children:`Pattern`})}),(0,w.jsx)(f,{"aria-invalid":!!i.regexes?.[t]?.pattern,id:`regex-pattern-${e.id}`,...r(T(`regexes.${t}.pattern`))}),(0,w.jsx)(b,{errors:[i.regexes?.[t]?.pattern]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-description-${e.id}`,children:`Description`})}),(0,w.jsx)(f,{id:`regex-description-${e.id}`,placeholder:`Optional`,...r(T(`regexes.${t}.description`))})]}),(0,w.jsx)(E,{control:n,id:`regex-action-${e.id}`,label:`Action`,name:T(`regexes.${t}.action`),options:te}),(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove regex`]})]},e.id),t[8]=n,t[9]=i,t[10]=r,t[11]=c,t[12]=e):e=t[12],p=o.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=r,t[6]=c,t[7]=p}else p=t[7];let m;t[13]===s?m=t[14]:(m=()=>{s({name:``,pattern:``,action:`BLOCK`,description:``})},t[13]=s,t[14]=m);let h;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[15]=h):h=t[15];let g;t[16]===m?g=t[17]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add regex`]}),t[16]=m,t[17]=g);let _;return t[18]!==p||t[19]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[18]=p,t[19]=g,t[20]=_):_=t[20],_}var ye=.5;function be(e){let t=(0,C.c)(21),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`contextualGroundingFilters`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==r||t[6]!==c){let e;t[8]!==n||t[9]!==i||t[10]!==r||t[11]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-2`,children:[(0,w.jsx)(E,{control:n,id:`grounding-type-${e.id}`,label:`Filter type`,name:T(`contextualGroundingFilters.${t}.type`),options:v}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`grounding-threshold-${e.id}`,children:`Threshold`})}),(0,w.jsx)(f,{"aria-invalid":!!i.contextualGroundingFilters?.[t]?.threshold,id:`grounding-threshold-${e.id}`,max:1,min:0,step:.01,type:`number`,...r(T(`contextualGroundingFilters.${t}.threshold`),{valueAsNumber:!0})}),(0,w.jsx)(b,{errors:[i.contextualGroundingFilters?.[t]?.threshold]})]}),(0,w.jsx)(`div`,{className:`sm:col-span-2`,children:(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove filter`]})})]},e.id),t[8]=n,t[9]=i,t[10]=r,t[11]=c,t[12]=e):e=t[12],p=o.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=r,t[6]=c,t[7]=p}else p=t[7];let m;t[13]===s?m=t[14]:(m=()=>{s({type:`GROUNDING`,threshold:ye})},t[13]=s,t[14]=m);let h;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[15]=h):h=t[15];let g;t[16]===m?g=t[17]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add contextual grounding filter`]}),t[16]=m,t[17]=g);let _;return t[18]!==p||t[19]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[18]=p,t[19]=g,t[20]=_):_=t[20],_}function O(e){let t=(0,C.c)(127),{mode:i,defaultValues:a}=e,o=n(),s=ee(),c=g(),l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=ae(h),t[0]=l):l=t[0];let u;t[1]===a?u=t[2]:(u={resolver:l,defaultValues:a},t[1]=a,t[2]=u);let{control:d,formState:p,handleSubmit:m,register:_}=re(u),{errors:v,isSubmitting:te}=p,ie;t[3]!==s||t[4]!==i||t[5]!==o||t[6]!==e.guardrailId||t[7]!==c?(ie=async t=>{if(i===`create`){let e=await s.mutateAsync(t);await o({params:{guardrailId:e.guardrailId??``},to:`/bedrock/list-guardrails/$guardrailId`});return}await c.mutateAsync({data:t,guardrailIdentifier:e.guardrailId}),await o({params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`})},t[3]=s,t[4]=i,t[5]=o,t[6]=e.guardrailId,t[7]=c,t[8]=ie):ie=t[8];let y=ie,T;t[9]!==i||t[10]!==o||t[11]!==e.guardrailId?(T=async()=>{if(i===`edit`){await o({params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`});return}await o({to:`/bedrock/list-guardrails`})},t[9]=i,t[10]=o,t[11]=e.guardrailId,t[12]=T):T=t[12];let E=T,D=i===`create`?s:c,ye;t[13]!==d||t[14]!==v||t[15]!==_?(ye={control:d,errors:v,register:_},t[13]=d,t[14]=v,t[15]=_,t[16]=ye):ye=t[16];let O=ye,k;t[17]!==i||t[18]!==e.guardrailId?(k=i===`edit`?(0,w.jsx)(r,{params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`,children:`Back to guardrail`}):(0,w.jsx)(r,{to:`/bedrock/list-guardrails`,children:`Back to guardrails`}),t[17]=i,t[18]=e.guardrailId,t[19]=k):k=t[19];let xe=i===`create`?`Create Guardrail`:`Edit Guardrail`,A;t[20]===xe?A=t[21]:(A=(0,w.jsx)(ne,{title:xe}),t[20]=xe,t[21]=A);let j;t[22]!==i||t[23]!==D.error?(j=D.error&&(0,w.jsx)(oe,{error:D.error,msg:`Failed to ${i===`create`?`create`:`update`} the guardrail`}),t[22]=i,t[23]=D.error,t[24]=j):j=t[24];let M;t[25]!==m||t[26]!==y?(M=m(y),t[25]=m,t[26]=y,t[27]=M):M=t[27];let Se;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-name`,children:`Name`})}),t[28]=Se):Se=t[28];let Ce=!!v.name,N;t[29]===_?N=t[30]:(N=_(`name`),t[29]=_,t[30]=N);let P;t[31]!==Ce||t[32]!==N?(P=(0,w.jsx)(f,{"aria-invalid":Ce,id:`guardrail-name`,placeholder:`content-safety`,...N}),t[31]=Ce,t[32]=N,t[33]=P):P=t[33];let we;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,w.jsx)(le,{children:`Letters, digits, hyphens and underscores only.`}),t[34]=we):we=t[34];let F;t[35]===v.name?F=t[36]:(F=(0,w.jsx)(b,{errors:[v.name]}),t[35]=v.name,t[36]=F);let I;t[37]!==P||t[38]!==F?(I=(0,w.jsxs)(S,{children:[Se,P,we,F]}),t[37]=P,t[38]=F,t[39]=I):I=t[39];let Te;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-description`,children:`Description`})}),t[40]=Te):Te=t[40];let L;t[41]===_?L=t[42]:(L=_(`description`),t[41]=_,t[42]=L);let R;t[43]===L?R=t[44]:(R=(0,w.jsx)(fe,{id:`guardrail-description`,placeholder:`Optional`,rows:2,...L}),t[43]=L,t[44]=R);let z;t[45]===v.description?z=t[46]:(z=(0,w.jsx)(b,{errors:[v.description]}),t[45]=v.description,t[46]=z);let B;t[47]!==R||t[48]!==z?(B=(0,w.jsxs)(S,{children:[Te,R,z]}),t[47]=R,t[48]=z,t[49]=B):B=t[49];let Ee;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-blocked-input`,children:`Blocked input message`})}),t[50]=Ee):Ee=t[50];let De=!!v.blockedInputMessaging,V;t[51]===_?V=t[52]:(V=_(`blockedInputMessaging`),t[51]=_,t[52]=V);let H;t[53]!==De||t[54]!==V?(H=(0,w.jsx)(fe,{"aria-invalid":De,id:`guardrail-blocked-input`,rows:2,...V}),t[53]=De,t[54]=V,t[55]=H):H=t[55];let Oe;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,w.jsx)(le,{children:`Shown when the guardrail blocks a prompt.`}),t[56]=Oe):Oe=t[56];let U;t[57]===v.blockedInputMessaging?U=t[58]:(U=(0,w.jsx)(b,{errors:[v.blockedInputMessaging]}),t[57]=v.blockedInputMessaging,t[58]=U);let W;t[59]!==H||t[60]!==U?(W=(0,w.jsxs)(S,{children:[Ee,H,Oe,U]}),t[59]=H,t[60]=U,t[61]=W):W=t[61];let ke;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-blocked-output`,children:`Blocked output message`})}),t[62]=ke):ke=t[62];let Ae=!!v.blockedOutputsMessaging,G;t[63]===_?G=t[64]:(G=_(`blockedOutputsMessaging`),t[63]=_,t[64]=G);let K;t[65]!==Ae||t[66]!==G?(K=(0,w.jsx)(fe,{"aria-invalid":Ae,id:`guardrail-blocked-output`,rows:2,...G}),t[65]=Ae,t[66]=G,t[67]=K):K=t[67];let je;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,w.jsx)(le,{children:`Shown when the guardrail blocks a model response.`}),t[68]=je):je=t[68];let q;t[69]===v.blockedOutputsMessaging?q=t[70]:(q=(0,w.jsx)(b,{errors:[v.blockedOutputsMessaging]}),t[69]=v.blockedOutputsMessaging,t[70]=q);let J;t[71]!==K||t[72]!==q?(J=(0,w.jsxs)(S,{children:[ke,K,je,q]}),t[71]=K,t[72]=q,t[73]=J):J=t[73];let Me;t[74]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-kms-key`,children:`KMS key ARN`})}),t[74]=Me):Me=t[74];let Y;t[75]===_?Y=t[76]:(Y=_(`kmsKeyId`),t[75]=_,t[76]=Y);let X;t[77]===Y?X=t[78]:(X=(0,w.jsx)(f,{id:`guardrail-kms-key`,placeholder:`Optional`,...Y}),t[77]=Y,t[78]=X);let Ne;t[79]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,w.jsx)(le,{children:`Leave blank to use the account default.`}),t[79]=Ne):Ne=t[79];let Z;t[80]===X?Z=t[81]:(Z=(0,w.jsxs)(S,{children:[Me,X,Ne]}),t[80]=X,t[81]=Z);let Pe;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(Pe=(0,w.jsx)(ce,{children:`Denied topics`}),t[82]=Pe):Pe=t[82];let Fe;t[83]===O?Fe=t[84]:(Fe=(0,w.jsxs)(ue,{children:[Pe,(0,w.jsx)(pe,{...O})]}),t[83]=O,t[84]=Fe);let Ie;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,w.jsx)(ce,{children:`Content filters`}),t[85]=Ie):Ie=t[85];let Le;t[86]===O?Le=t[87]:(Le=(0,w.jsxs)(ue,{children:[Ie,(0,w.jsx)(me,{...O})]}),t[86]=O,t[87]=Le);let Re;t[88]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,w.jsx)(ce,{children:`Word filters`}),t[88]=Re):Re=t[88];let Q;t[89]===O?Q=t[90]:(Q=(0,w.jsxs)(ue,{children:[Re,(0,w.jsx)(he,{...O}),(0,w.jsx)(ge,{...O})]}),t[89]=O,t[90]=Q);let ze;t[91]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,w.jsx)(ce,{children:`Sensitive information`}),t[91]=ze):ze=t[91];let Be;t[92]===O?Be=t[93]:(Be=(0,w.jsxs)(ue,{children:[ze,(0,w.jsx)(_e,{...O}),(0,w.jsx)(ve,{...O})]}),t[92]=O,t[93]=Be);let Ve;t[94]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,w.jsx)(ce,{children:`Contextual grounding`}),t[94]=Ve):Ve=t[94];let He;t[95]===O?He=t[96]:(He=(0,w.jsxs)(ue,{children:[Ve,(0,w.jsx)(be,{...O})]}),t[95]=O,t[96]=He);let Ue;t[97]!==d||t[98]!==i?(Ue=i===`create`&&(0,w.jsx)(de,{control:d,name:`tags`}),t[97]=d,t[98]=i,t[99]=Ue):Ue=t[99];let We;t[100]===E?We=t[101]:(We=()=>{E()},t[100]=E,t[101]=We);let Ge=i===`create`?`Creating…`:`Saving…`,Ke=i===`create`?`Create Guardrail`:`Save Changes`,qe;t[102]!==te||t[103]!==D.isPending||t[104]!==We||t[105]!==Ge||t[106]!==Ke?(qe=(0,w.jsx)(se,{isPending:D.isPending,isSubmitting:te,onCancel:We,pendingLabel:Ge,submitLabel:Ke}),t[102]=te,t[103]=D.isPending,t[104]=We,t[105]=Ge,t[106]=Ke,t[107]=qe):qe=t[107];let $;t[108]!==M||t[109]!==I||t[110]!==B||t[111]!==W||t[112]!==J||t[113]!==Z||t[114]!==Fe||t[115]!==Le||t[116]!==Q||t[117]!==Be||t[118]!==He||t[119]!==Ue||t[120]!==qe?($=(0,w.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:M,children:[I,B,W,J,Z,Fe,Le,Q,Be,He,Ue,qe]}),t[108]=M,t[109]=I,t[110]=B,t[111]=W,t[112]=J,t[113]=Z,t[114]=Fe,t[115]=Le,t[116]=Q,t[117]=Be,t[118]=He,t[119]=Ue,t[120]=qe,t[121]=$):$=t[121];let Je;return t[122]!==$||t[123]!==k||t[124]!==A||t[125]!==j?(Je=(0,w.jsxs)(w.Fragment,{children:[k,A,j,$]}),t[122]=$,t[123]=k,t[124]=A,t[125]=j,t[126]=Je):Je=t[126],Je}export{O as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{c as i,i as a,n as o,s,t as c}from"./select-Cn66OoPn.js";import{t as l}from"./plus-BodhJT2v.js";import{t as u}from"./trash-DVab4pEz.js";import{t as d}from"./button-qf9lLJ2x.js";import{t as f}from"./input-D3aUBtS6.js";import{a as p,c as m,d as h,i as g,l as _,o as v,t as ee,u as te}from"./bedrock-ktyVzA00.js";import{t as ne}from"./page-heading-vksh_67w.js";import{i as re,n as ie,r as y,t as ae}from"./zod-A4qtKH_p.js";import{t as oe}from"./error-banner-DeOeVBKS.js";import{t as se}from"./form-actions-DXvy9CQI.js";import{a as ce,n as le,o as ue,r as b,s as x,t as S}from"./field-CS-ql6du.js";import{t as de}from"./tags-field-array-Bjg8Nmui.js";import{t as fe}from"./textarea-DV1UO8hv.js";var C=t(),w=e();function T(e){return e}function E(e){let t=(0,C.c)(8),{control:n,name:r,id:a,label:l,options:u}=e,d;t[0]!==a||t[1]!==l||t[2]!==u?(d=e=>{let{field:t,fieldState:n}=e,r=typeof t.value==`string`?t.value:``;return(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:a,children:l})}),(0,w.jsxs)(c,{onValueChange:e=>{t.onChange(e??``)},value:r,children:[(0,w.jsx)(s,{"aria-invalid":!!n.error,className:`w-full`,id:a,children:(0,w.jsx)(i,{})}),(0,w.jsx)(o,{children:u.map(D)})]}),(0,w.jsx)(b,{errors:[n.error]})]})},t[0]=a,t[1]=l,t[2]=u,t[3]=d):d=t[3];let f;return t[4]!==n||t[5]!==r||t[6]!==d?(f=(0,w.jsx)(ie,{control:n,name:r,render:d}),t[4]=n,t[5]=r,t[6]=d,t[7]=f):f=t[7],f}function D(e){return(0,w.jsx)(a,{value:e,children:e},e)}function pe(e){let t=(0,C.c)(19),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`topics`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==i||t[3]!==o||t[4]!==r||t[5]!==c){let e;t[7]!==i||t[8]!==r||t[9]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-name-${e.id}`,children:`Topic name`})}),(0,w.jsx)(f,{"aria-invalid":!!i.topics?.[t]?.name,id:`topic-name-${e.id}`,...r(T(`topics.${t}.name`))}),(0,w.jsx)(b,{errors:[i.topics?.[t]?.name]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-definition-${e.id}`,children:`Definition`})}),(0,w.jsx)(fe,{"aria-invalid":!!i.topics?.[t]?.definition,id:`topic-definition-${e.id}`,rows:2,...r(T(`topics.${t}.definition`))}),(0,w.jsx)(b,{errors:[i.topics?.[t]?.definition]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`topic-examples-${e.id}`,children:`Example prompts`})}),(0,w.jsx)(fe,{id:`topic-examples-${e.id}`,placeholder:`One example prompt per line`,rows:2,...r(T(`topics.${t}.examplesText`))})]}),(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove topic`]})]},e.id),t[7]=i,t[8]=r,t[9]=c,t[10]=e):e=t[10],p=o.map(e),t[2]=i,t[3]=o,t[4]=r,t[5]=c,t[6]=p}else p=t[6];let m;t[11]===s?m=t[12]:(m=()=>{s({name:``,definition:``,examplesText:``})},t[11]=s,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[13]=h):h=t[13];let g;t[14]===m?g=t[15]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add denied topic`]}),t[14]=m,t[15]=g);let _;return t[16]!==p||t[17]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[16]=p,t[17]=g,t[18]=_):_=t[18],_}function me(e){let t=(0,C.c)(17),{control:n}=e,r;t[0]===n?r=t[1]:(r={control:n,name:`contentFilters`},t[0]=n,t[1]=r);let{fields:i,append:a,remove:o}=y(r),s;if(t[2]!==n||t[3]!==i||t[4]!==o){let e;t[6]!==n||t[7]!==o?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-3`,children:[(0,w.jsx)(E,{control:n,id:`filter-type-${e.id}`,label:`Category`,name:T(`contentFilters.${t}.type`),options:p}),(0,w.jsx)(E,{control:n,id:`filter-input-${e.id}`,label:`Input strength`,name:T(`contentFilters.${t}.inputStrength`),options:m}),(0,w.jsx)(E,{control:n,id:`filter-output-${e.id}`,label:`Output strength`,name:T(`contentFilters.${t}.outputStrength`),options:m}),(0,w.jsx)(`div`,{className:`sm:col-span-3`,children:(0,w.jsxs)(d,{onClick:()=>{o(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove content filter`]})})]},e.id),t[6]=n,t[7]=o,t[8]=e):e=t[8],s=i.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=s}else s=t[5];let c;t[9]===a?c=t[10]:(c=()=>{a({type:`SEXUAL`,inputStrength:`NONE`,outputStrength:`NONE`})},t[9]=a,t[10]=c);let f;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,w.jsx)(l,{className:`size-3.5`}),t[11]=f):f=t[11];let h;t[12]===c?h=t[13]:(h=(0,w.jsxs)(d,{onClick:c,size:`sm`,type:`button`,variant:`outline`,children:[f,`Add content filter`]}),t[12]=c,t[13]=h);let g;return t[14]!==s||t[15]!==h?(g=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[s,h]}),t[14]=s,t[15]=h,t[16]=g):g=t[16],g}function he(e){let t=(0,C.c)(8),{register:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,w.jsx)(x,{children:`Managed word list`}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n(`profanityFilter`),t[1]=n,t[2]=i);let a;t[3]===i?a=t[4]:(a=(0,w.jsx)(`input`,{"aria-label":`Block profanity`,type:`checkbox`,...i}),t[3]=i,t[4]=a);let o;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,w.jsx)(`span`,{children:`Block profanity using Bedrock's managed word list`}),t[5]=o):o=t[5];let s;return t[6]===a?s=t[7]:(s=(0,w.jsxs)(S,{children:[r,(0,w.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[a,o]})]}),t[6]=a,t[7]=s),s}function ge(e){let t=(0,C.c)(19),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`words`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==i||t[3]!==o||t[4]!==r||t[5]!==c){let e;t[7]!==i||t[8]!==r||t[9]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,w.jsx)(f,{"aria-invalid":!!i.words?.[t]?.text,placeholder:`Blocked word or phrase`,...r(T(`words.${t}.text`))}),(0,w.jsx)(b,{errors:[i.words?.[t]?.text]})]}),(0,w.jsx)(d,{"aria-label":`Remove word ${t+1}`,onClick:()=>{c(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,w.jsx)(u,{className:`size-3.5`})})]},e.id),t[7]=i,t[8]=r,t[9]=c,t[10]=e):e=t[10],p=o.map(e),t[2]=i,t[3]=o,t[4]=r,t[5]=c,t[6]=p}else p=t[6];let m;t[11]===s?m=t[12]:(m=()=>{s({text:``})},t[11]=s,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[13]=h):h=t[13];let g;t[14]===m?g=t[15]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add word`]}),t[14]=m,t[15]=g);let _;return t[16]!==p||t[17]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-2`,children:[p,g]}),t[16]=p,t[17]=g,t[18]=_):_=t[18],_}function _e(e){let t=(0,C.c)(17),{control:n}=e,r;t[0]===n?r=t[1]:(r={control:n,name:`piiEntities`},t[0]=n,t[1]=r);let{fields:i,append:a,remove:o}=y(r),s;if(t[2]!==n||t[3]!==i||t[4]!==o){let e;t[6]!==n||t[7]!==o?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-2`,children:[(0,w.jsx)(E,{control:n,id:`pii-type-${e.id}`,label:`PII type`,name:T(`piiEntities.${t}.type`),options:_}),(0,w.jsx)(E,{control:n,id:`pii-action-${e.id}`,label:`Action`,name:T(`piiEntities.${t}.action`),options:te}),(0,w.jsx)(`div`,{className:`sm:col-span-2`,children:(0,w.jsxs)(d,{onClick:()=>{o(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove PII entity`]})})]},e.id),t[6]=n,t[7]=o,t[8]=e):e=t[8],s=i.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=s}else s=t[5];let c;t[9]===a?c=t[10]:(c=()=>{a({type:`EMAIL`,action:`BLOCK`})},t[9]=a,t[10]=c);let f;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,w.jsx)(l,{className:`size-3.5`}),t[11]=f):f=t[11];let p;t[12]===c?p=t[13]:(p=(0,w.jsxs)(d,{onClick:c,size:`sm`,type:`button`,variant:`outline`,children:[f,`Add PII entity`]}),t[12]=c,t[13]=p);let m;return t[14]!==s||t[15]!==p?(m=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[s,p]}),t[14]=s,t[15]=p,t[16]=m):m=t[16],m}function ve(e){let t=(0,C.c)(21),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`regexes`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==r||t[6]!==c){let e;t[8]!==n||t[9]!==i||t[10]!==r||t[11]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-name-${e.id}`,children:`Name`})}),(0,w.jsx)(f,{"aria-invalid":!!i.regexes?.[t]?.name,id:`regex-name-${e.id}`,...r(T(`regexes.${t}.name`))}),(0,w.jsx)(b,{errors:[i.regexes?.[t]?.name]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-pattern-${e.id}`,children:`Pattern`})}),(0,w.jsx)(f,{"aria-invalid":!!i.regexes?.[t]?.pattern,id:`regex-pattern-${e.id}`,...r(T(`regexes.${t}.pattern`))}),(0,w.jsx)(b,{errors:[i.regexes?.[t]?.pattern]})]}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`regex-description-${e.id}`,children:`Description`})}),(0,w.jsx)(f,{id:`regex-description-${e.id}`,placeholder:`Optional`,...r(T(`regexes.${t}.description`))})]}),(0,w.jsx)(E,{control:n,id:`regex-action-${e.id}`,label:`Action`,name:T(`regexes.${t}.action`),options:te}),(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove regex`]})]},e.id),t[8]=n,t[9]=i,t[10]=r,t[11]=c,t[12]=e):e=t[12],p=o.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=r,t[6]=c,t[7]=p}else p=t[7];let m;t[13]===s?m=t[14]:(m=()=>{s({name:``,pattern:``,action:`BLOCK`,description:``})},t[13]=s,t[14]=m);let h;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[15]=h):h=t[15];let g;t[16]===m?g=t[17]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add regex`]}),t[16]=m,t[17]=g);let _;return t[18]!==p||t[19]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[18]=p,t[19]=g,t[20]=_):_=t[20],_}var ye=.5;function be(e){let t=(0,C.c)(21),{control:n,register:r,errors:i}=e,a;t[0]===n?a=t[1]:(a={control:n,name:`contextualGroundingFilters`},t[0]=n,t[1]=a);let{fields:o,append:s,remove:c}=y(a),p;if(t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==r||t[6]!==c){let e;t[8]!==n||t[9]!==i||t[10]!==r||t[11]!==c?(e=(e,t)=>(0,w.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 rounded-md border p-3 sm:grid-cols-2`,children:[(0,w.jsx)(E,{control:n,id:`grounding-type-${e.id}`,label:`Filter type`,name:T(`contextualGroundingFilters.${t}.type`),options:v}),(0,w.jsxs)(S,{children:[(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`grounding-threshold-${e.id}`,children:`Threshold`})}),(0,w.jsx)(f,{"aria-invalid":!!i.contextualGroundingFilters?.[t]?.threshold,id:`grounding-threshold-${e.id}`,max:1,min:0,step:.01,type:`number`,...r(T(`contextualGroundingFilters.${t}.threshold`),{valueAsNumber:!0})}),(0,w.jsx)(b,{errors:[i.contextualGroundingFilters?.[t]?.threshold]})]}),(0,w.jsx)(`div`,{className:`sm:col-span-2`,children:(0,w.jsxs)(d,{onClick:()=>{c(t)},size:`sm`,type:`button`,variant:`ghost`,children:[(0,w.jsx)(u,{className:`size-3.5`}),`Remove filter`]})})]},e.id),t[8]=n,t[9]=i,t[10]=r,t[11]=c,t[12]=e):e=t[12],p=o.map(e),t[2]=n,t[3]=i,t[4]=o,t[5]=r,t[6]=c,t[7]=p}else p=t[7];let m;t[13]===s?m=t[14]:(m=()=>{s({type:`GROUNDING`,threshold:ye})},t[13]=s,t[14]=m);let h;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,w.jsx)(l,{className:`size-3.5`}),t[15]=h):h=t[15];let g;t[16]===m?g=t[17]:(g=(0,w.jsxs)(d,{onClick:m,size:`sm`,type:`button`,variant:`outline`,children:[h,`Add contextual grounding filter`]}),t[16]=m,t[17]=g);let _;return t[18]!==p||t[19]!==g?(_=(0,w.jsxs)(`div`,{className:`space-y-3`,children:[p,g]}),t[18]=p,t[19]=g,t[20]=_):_=t[20],_}function O(e){let t=(0,C.c)(127),{mode:i,defaultValues:a}=e,o=n(),s=ee(),c=g(),l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=ae(h),t[0]=l):l=t[0];let u;t[1]===a?u=t[2]:(u={resolver:l,defaultValues:a},t[1]=a,t[2]=u);let{control:d,formState:p,handleSubmit:m,register:_}=re(u),{errors:v,isSubmitting:te}=p,ie;t[3]!==s||t[4]!==i||t[5]!==o||t[6]!==e.guardrailId||t[7]!==c?(ie=async t=>{if(i===`create`){let e=await s.mutateAsync(t);await o({params:{guardrailId:e.guardrailId??``},to:`/bedrock/list-guardrails/$guardrailId`});return}await c.mutateAsync({data:t,guardrailIdentifier:e.guardrailId}),await o({params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`})},t[3]=s,t[4]=i,t[5]=o,t[6]=e.guardrailId,t[7]=c,t[8]=ie):ie=t[8];let y=ie,T;t[9]!==i||t[10]!==o||t[11]!==e.guardrailId?(T=async()=>{if(i===`edit`){await o({params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`});return}await o({to:`/bedrock/list-guardrails`})},t[9]=i,t[10]=o,t[11]=e.guardrailId,t[12]=T):T=t[12];let E=T,D=i===`create`?s:c,ye;t[13]!==d||t[14]!==v||t[15]!==_?(ye={control:d,errors:v,register:_},t[13]=d,t[14]=v,t[15]=_,t[16]=ye):ye=t[16];let O=ye,k;t[17]!==i||t[18]!==e.guardrailId?(k=i===`edit`?(0,w.jsx)(r,{params:{guardrailId:e.guardrailId},to:`/bedrock/list-guardrails/$guardrailId`,children:`Back to guardrail`}):(0,w.jsx)(r,{to:`/bedrock/list-guardrails`,children:`Back to guardrails`}),t[17]=i,t[18]=e.guardrailId,t[19]=k):k=t[19];let xe=i===`create`?`Create Guardrail`:`Edit Guardrail`,A;t[20]===xe?A=t[21]:(A=(0,w.jsx)(ne,{title:xe}),t[20]=xe,t[21]=A);let j;t[22]!==i||t[23]!==D.error?(j=D.error&&(0,w.jsx)(oe,{error:D.error,msg:`Failed to ${i===`create`?`create`:`update`} the guardrail`}),t[22]=i,t[23]=D.error,t[24]=j):j=t[24];let M;t[25]!==m||t[26]!==y?(M=m(y),t[25]=m,t[26]=y,t[27]=M):M=t[27];let Se;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-name`,children:`Name`})}),t[28]=Se):Se=t[28];let Ce=!!v.name,N;t[29]===_?N=t[30]:(N=_(`name`),t[29]=_,t[30]=N);let P;t[31]!==Ce||t[32]!==N?(P=(0,w.jsx)(f,{"aria-invalid":Ce,id:`guardrail-name`,placeholder:`content-safety`,...N}),t[31]=Ce,t[32]=N,t[33]=P):P=t[33];let we;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,w.jsx)(le,{children:`Letters, digits, hyphens and underscores only.`}),t[34]=we):we=t[34];let F;t[35]===v.name?F=t[36]:(F=(0,w.jsx)(b,{errors:[v.name]}),t[35]=v.name,t[36]=F);let I;t[37]!==P||t[38]!==F?(I=(0,w.jsxs)(S,{children:[Se,P,we,F]}),t[37]=P,t[38]=F,t[39]=I):I=t[39];let Te;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-description`,children:`Description`})}),t[40]=Te):Te=t[40];let L;t[41]===_?L=t[42]:(L=_(`description`),t[41]=_,t[42]=L);let R;t[43]===L?R=t[44]:(R=(0,w.jsx)(fe,{id:`guardrail-description`,placeholder:`Optional`,rows:2,...L}),t[43]=L,t[44]=R);let z;t[45]===v.description?z=t[46]:(z=(0,w.jsx)(b,{errors:[v.description]}),t[45]=v.description,t[46]=z);let B;t[47]!==R||t[48]!==z?(B=(0,w.jsxs)(S,{children:[Te,R,z]}),t[47]=R,t[48]=z,t[49]=B):B=t[49];let Ee;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-blocked-input`,children:`Blocked input message`})}),t[50]=Ee):Ee=t[50];let De=!!v.blockedInputMessaging,V;t[51]===_?V=t[52]:(V=_(`blockedInputMessaging`),t[51]=_,t[52]=V);let H;t[53]!==De||t[54]!==V?(H=(0,w.jsx)(fe,{"aria-invalid":De,id:`guardrail-blocked-input`,rows:2,...V}),t[53]=De,t[54]=V,t[55]=H):H=t[55];let Oe;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,w.jsx)(le,{children:`Shown when the guardrail blocks a prompt.`}),t[56]=Oe):Oe=t[56];let U;t[57]===v.blockedInputMessaging?U=t[58]:(U=(0,w.jsx)(b,{errors:[v.blockedInputMessaging]}),t[57]=v.blockedInputMessaging,t[58]=U);let W;t[59]!==H||t[60]!==U?(W=(0,w.jsxs)(S,{children:[Ee,H,Oe,U]}),t[59]=H,t[60]=U,t[61]=W):W=t[61];let ke;t[62]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-blocked-output`,children:`Blocked output message`})}),t[62]=ke):ke=t[62];let Ae=!!v.blockedOutputsMessaging,G;t[63]===_?G=t[64]:(G=_(`blockedOutputsMessaging`),t[63]=_,t[64]=G);let K;t[65]!==Ae||t[66]!==G?(K=(0,w.jsx)(fe,{"aria-invalid":Ae,id:`guardrail-blocked-output`,rows:2,...G}),t[65]=Ae,t[66]=G,t[67]=K):K=t[67];let je;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,w.jsx)(le,{children:`Shown when the guardrail blocks a model response.`}),t[68]=je):je=t[68];let q;t[69]===v.blockedOutputsMessaging?q=t[70]:(q=(0,w.jsx)(b,{errors:[v.blockedOutputsMessaging]}),t[69]=v.blockedOutputsMessaging,t[70]=q);let J;t[71]!==K||t[72]!==q?(J=(0,w.jsxs)(S,{children:[ke,K,je,q]}),t[71]=K,t[72]=q,t[73]=J):J=t[73];let Me;t[74]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,w.jsx)(x,{children:(0,w.jsx)(`label`,{htmlFor:`guardrail-kms-key`,children:`KMS key ARN`})}),t[74]=Me):Me=t[74];let Y;t[75]===_?Y=t[76]:(Y=_(`kmsKeyId`),t[75]=_,t[76]=Y);let X;t[77]===Y?X=t[78]:(X=(0,w.jsx)(f,{id:`guardrail-kms-key`,placeholder:`Optional`,...Y}),t[77]=Y,t[78]=X);let Ne;t[79]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,w.jsx)(le,{children:`Leave blank to use the account default.`}),t[79]=Ne):Ne=t[79];let Z;t[80]===X?Z=t[81]:(Z=(0,w.jsxs)(S,{children:[Me,X,Ne]}),t[80]=X,t[81]=Z);let Pe;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(Pe=(0,w.jsx)(ce,{children:`Denied topics`}),t[82]=Pe):Pe=t[82];let Fe;t[83]===O?Fe=t[84]:(Fe=(0,w.jsxs)(ue,{children:[Pe,(0,w.jsx)(pe,{...O})]}),t[83]=O,t[84]=Fe);let Ie;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,w.jsx)(ce,{children:`Content filters`}),t[85]=Ie):Ie=t[85];let Le;t[86]===O?Le=t[87]:(Le=(0,w.jsxs)(ue,{children:[Ie,(0,w.jsx)(me,{...O})]}),t[86]=O,t[87]=Le);let Re;t[88]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,w.jsx)(ce,{children:`Word filters`}),t[88]=Re):Re=t[88];let Q;t[89]===O?Q=t[90]:(Q=(0,w.jsxs)(ue,{children:[Re,(0,w.jsx)(he,{...O}),(0,w.jsx)(ge,{...O})]}),t[89]=O,t[90]=Q);let ze;t[91]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,w.jsx)(ce,{children:`Sensitive information`}),t[91]=ze):ze=t[91];let Be;t[92]===O?Be=t[93]:(Be=(0,w.jsxs)(ue,{children:[ze,(0,w.jsx)(_e,{...O}),(0,w.jsx)(ve,{...O})]}),t[92]=O,t[93]=Be);let Ve;t[94]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,w.jsx)(ce,{children:`Contextual grounding`}),t[94]=Ve):Ve=t[94];let He;t[95]===O?He=t[96]:(He=(0,w.jsxs)(ue,{children:[Ve,(0,w.jsx)(be,{...O})]}),t[95]=O,t[96]=He);let Ue;t[97]!==d||t[98]!==i?(Ue=i===`create`&&(0,w.jsx)(de,{control:d,name:`tags`}),t[97]=d,t[98]=i,t[99]=Ue):Ue=t[99];let We;t[100]===E?We=t[101]:(We=()=>{E()},t[100]=E,t[101]=We);let Ge=i===`create`?`Creating…`:`Saving…`,Ke=i===`create`?`Create Guardrail`:`Save Changes`,qe;t[102]!==te||t[103]!==D.isPending||t[104]!==We||t[105]!==Ge||t[106]!==Ke?(qe=(0,w.jsx)(se,{isPending:D.isPending,isSubmitting:te,onCancel:We,pendingLabel:Ge,submitLabel:Ke}),t[102]=te,t[103]=D.isPending,t[104]=We,t[105]=Ge,t[106]=Ke,t[107]=qe):qe=t[107];let $;t[108]!==M||t[109]!==I||t[110]!==B||t[111]!==W||t[112]!==J||t[113]!==Z||t[114]!==Fe||t[115]!==Le||t[116]!==Q||t[117]!==Be||t[118]!==He||t[119]!==Ue||t[120]!==qe?($=(0,w.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:M,children:[I,B,W,J,Z,Fe,Le,Q,Be,He,Ue,qe]}),t[108]=M,t[109]=I,t[110]=B,t[111]=W,t[112]=J,t[113]=Z,t[114]=Fe,t[115]=Le,t[116]=Q,t[117]=Be,t[118]=He,t[119]=Ue,t[120]=qe,t[121]=$):$=t[121];let Je;return t[122]!==$||t[123]!==k||t[124]!==A||t[125]!==j?(Je=(0,w.jsxs)(w.Fragment,{children:[k,A,j,$]}),t[122]=$,t[123]=k,t[124]=A,t[125]=j,t[126]=Je):Je=t[126],Je}export{O as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/hex-encoding-B19xAT_7.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/hex-encoding-B19xAT_7.js deleted file mode 100644 index 50fee4287..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/hex-encoding-B19xAT_7.js +++ /dev/null @@ -1 +0,0 @@ -function e(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var t=class e{namespace;schemas;exceptions;static registries=new Map;constructor(e,t=new Map,n=new Map){this.namespace=e,this.schemas=t,this.exceptions=n}static for(t){return e.registries.has(t)||e.registries.set(t,new e(t)),e.registries.get(t)}copyFrom(e){let{schemas:t,exceptions:n}=this;for(let[n,r]of e.schemas)t.has(n)||t.set(n,r);for(let[t,r]of e.exceptions)n.has(t)||n.set(t,r)}register(t,n){let r=this.normalizeShapeId(t);for(let t of[this,e.for(r.split(`#`)[0])])t.schemas.set(r,n)}getSchema(e){let t=this.normalizeShapeId(e);if(!this.schemas.has(t)){if(!e.includes(`#`)){let t=`#`+e,n=[];for(let[e,r]of this.schemas.entries())e.endsWith(t)&&n.push(r);if(n.length===1)return n[0]}throw Error(`@smithy/core/schema - schema not found for ${t}`)}return this.schemas.get(t)}registerError(t,n){let r=t,i=r[1];for(let t of[this,e.for(i)])t.schemas.set(i+`#`+r[2],r),t.exceptions.set(r,n)}getErrorCtor(t){let n=t;return this.exceptions.has(n)?this.exceptions.get(n):e.for(n[1]).exceptions.get(n)}getBaseException(){for(let e of this.exceptions.keys())if(Array.isArray(e)){let[,t,n]=e,r=t+`#`+n;if(r.startsWith(`smithy.ts.sdk.synthetic.`)&&r.endsWith(`ServiceException`))return e}}find(e){for(let t of this.schemas.values())if(e(t))return t}clear(){this.schemas.clear(),this.exceptions.clear()}normalizeShapeId(e){return e.includes(`#`)?e:this.namespace+`#`+e}},n=e=>new TextEncoder().encode(e),r=e=>{if(typeof e==`string`)return e;if(typeof e!=`object`||typeof e.byteOffset!=`number`||typeof e.byteLength!=`number`)throw Error(`@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.`);return new TextDecoder(`utf-8`).decode(e)},i={},a={};for(let e=0;e<256;e++){let t=e.toString(16).toLowerCase();t.length===1&&(t=`0${t}`),i[e]=t,a[t]=e}function o(e){if(e.length%2!=0)throw Error(`Hex encoded strings must have an even number length`);let t=new Uint8Array(e.length/2);for(let n=0;nnew TextEncoder().encode(e),r=e=>{if(typeof e==`string`)return e;if(typeof e!=`object`||typeof e.byteOffset!=`number`||typeof e.byteLength!=`number`)throw Error(`@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.`);return new TextDecoder(`utf-8`).decode(e)},i={},a={};for(let e=0;e<256;e++){let t=e.toString(16).toLowerCase();t.length===1&&(t=`0${t}`),i[e]=t,a[t]=e}function o(e){if(e.length%2!=0)throw Error(`Hex encoded strings must have an even number length`);let t=new Uint8Array(e.length/2);for(let n=0;n{let e=new X({});return await y().send(e)},staleTime:3e5}),Q=t=>e({queryKey:[`iam`,`users`,t],queryFn:async()=>{let e=new I({UserName:t});return await y().send(e)},staleTime:3e5}),$=t=>e({queryKey:[`iam`,`access-keys`,t],queryFn:async()=>{let e=new R({UserName:t});return await y().send(e)},staleTime:3e5}),te=e({queryKey:[`iam`,`policies`],queryFn:async()=>{let e=new K({Scope:`Local`});return await y().send(e)},staleTime:3e5}),ne=t=>e({queryKey:[`iam`,`policies`,t],queryFn:async()=>{let e=new M({PolicyArn:t});return await y().send(e)},staleTime:3e5}),re=(t,n)=>e({queryKey:[`iam`,`policy-versions`,t,n],queryFn:async()=>{let e=new N({PolicyArn:t,VersionId:n});return await y().send(e)},staleTime:3e5}),ie=t=>e({queryKey:[`iam`,`attached-user-policies`,t],queryFn:async()=>{let e=new V({UserName:t});return await y().send(e)},staleTime:3e5}),ae=t=>e({queryKey:[`iam`,`user-inline-policies`,t],queryFn:async()=>{let e=new Y({UserName:t});return await y().send(e)},staleTime:3e5}),oe=(t,n)=>e({queryKey:[`iam`,`user-inline-policies`,t,n],queryFn:async()=>{let e=new L({UserName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument,!0):``},staleTime:3e5}),se=e({queryKey:[`iam`,`roles`],queryFn:async()=>{let e=new J({});return await y().send(e)},staleTime:3e5}),ce=t=>e({queryKey:[`iam`,`roles`,t],queryFn:async()=>{let e=new P({RoleName:t});return await y().send(e)},staleTime:3e5}),le=t=>e({queryKey:[`iam`,`attached-role-policies`,t],queryFn:async()=>{let e=new B({RoleName:t});return await y().send(e)},staleTime:3e5}),ue=t=>e({queryKey:[`iam`,`role-inline-policies`,t],queryFn:async()=>{let e=new q({RoleName:t});return await y().send(e)},staleTime:3e5}),de=(t,n)=>e({queryKey:[`iam`,`role-inline-policies`,t,n],queryFn:async()=>{let e=new F({RoleName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument,!1):``},staleTime:3e5}),fe=e({queryKey:[`iam`,`instance-profiles`],queryFn:async()=>{let e=new G({});return await y().send(e)},staleTime:3e5}),pe=t=>e({queryKey:[`iam`,`instance-profiles`,t],queryFn:async()=>{let e=new j({InstanceProfileName:t});return await y().send(e)},staleTime:3e5}),me=t=>e({queryKey:[`iam`,`instance-profiles-for-role`,t],queryFn:async()=>{let e=new ee({RoleName:t});return await y().send(e)},staleTime:3e5}),he=e({queryKey:[`iam`,`groups`],queryFn:async()=>{let e=new U({});return await y().send(e)},staleTime:3e5}),ge=t=>e({queryKey:[`iam`,`groups`,t],queryFn:async()=>{let e=new k({GroupName:t});return await y().send(e)},staleTime:3e5}),_e=t=>e({queryKey:[`iam`,`attached-group-policies`,t],queryFn:async()=>{let e=new z({GroupName:t});return await y().send(e)},staleTime:3e5}),ve=t=>e({queryKey:[`iam`,`group-inline-policies`,t],queryFn:async()=>{let e=new H({GroupName:t});return await y().send(e)},staleTime:3e5}),ye=(t,n)=>e({queryKey:[`iam`,`group-inline-policies`,t,n],queryFn:async()=>{let e=new A({GroupName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument,!0):``},staleTime:3e5}),be=t=>e({queryKey:[`iam`,`groups-for-user`,t],queryFn:async()=>{let e=new W({UserName:t});return await y().send(e)},staleTime:3e5});export{Z as C,Q as S,de as _,ve as a,ae as b,be as c,me as d,fe as f,ue as g,re as h,ie as i,he as l,ne as m,_e as n,ye as o,te as p,le as r,ge as s,$ as t,pe as u,ce as v,oe as x,se as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DmtL7LFe.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DmtL7LFe.js new file mode 100644 index 000000000..d05733f22 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DmtL7LFe.js @@ -0,0 +1 @@ +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{$t as t,Bt as n,Ft as r,Gt as i,Ht as a,It as o,Jt as s,Kt as c,Lt as l,Qt as u,Rt as d,Ut as f,Vt as p,Wt as m,Xt as h,Yt as g,Zt as _,en as v,f as y,nn as b,qt as x,rn as S,tn as C,zt as w}from"./awsClient-Cqp6x3OY.js";import{n as T,r as E,t as D}from"./commandBuilder-BKyTM0Ga.js";import{t as O}from"./json-hjud9BaA.js";var k=class extends E(D,T,`GetGroup`,r){},A=class extends E(D,T,`GetGroupPolicy`,o){},j=class extends E(D,T,`GetInstanceProfile`,l){},M=class extends E(D,T,`GetPolicy`,d){},N=class extends E(D,T,`GetPolicyVersion`,w){},P=class extends E(D,T,`GetRole`,n){},F=class extends E(D,T,`GetRolePolicy`,p){},I=class extends E(D,T,`GetUser`,a){},L=class extends E(D,T,`GetUserPolicy`,f){},R=class extends E(D,T,`ListAccessKeys`,m){},z=class extends E(D,T,`ListAttachedGroupPolicies`,i){},B=class extends E(D,T,`ListAttachedRolePolicies`,c){},V=class extends E(D,T,`ListAttachedUserPolicies`,x){},H=class extends E(D,T,`ListGroupPolicies`,s){},U=class extends E(D,T,`ListGroups`,g){},W=class extends E(D,T,`ListGroupsForUser`,h){},G=class extends E(D,T,`ListInstanceProfiles`,_){},K=class extends E(D,T,`ListInstanceProfilesForRole`,u){},ee=class extends E(D,T,`ListPolicies`,t){},q=class extends E(D,T,`ListRolePolicies`,v){},J=class extends E(D,T,`ListRoles`,C){},Y=class extends E(D,T,`ListUserPolicies`,b){},X=class extends E(D,T,`ListUsers`,S){},Z=1e3,Q=e({queryKey:[`iam`,`users`],queryFn:async()=>{let e=new X({MaxItems:Z});return await y().send(e)},staleTime:3e5}),$=t=>e({queryKey:[`iam`,`users`,t],queryFn:async()=>{let e=new I({UserName:t});return await y().send(e)},staleTime:3e5}),te=t=>e({queryKey:[`iam`,`access-keys`,t],queryFn:async()=>{let e=new R({UserName:t});return await y().send(e)},staleTime:3e5}),ne=e({queryKey:[`iam`,`policies`],queryFn:async()=>{let e=new ee({Scope:`Local`,MaxItems:Z});return await y().send(e)},staleTime:3e5}),re=t=>e({queryKey:[`iam`,`policies`,t],queryFn:async()=>{let e=new M({PolicyArn:t});return await y().send(e)},staleTime:3e5}),ie=(t,n)=>e({queryKey:[`iam`,`policy-versions`,t,n],queryFn:async()=>{let e=new N({PolicyArn:t,VersionId:n});return await y().send(e)},staleTime:3e5}),ae=t=>e({queryKey:[`iam`,`attached-user-policies`,t],queryFn:async()=>{let e=new V({UserName:t});return await y().send(e)},staleTime:3e5}),oe=t=>e({queryKey:[`iam`,`user-inline-policies`,t],queryFn:async()=>{let e=new Y({UserName:t});return await y().send(e)},staleTime:3e5}),se=(t,n)=>e({queryKey:[`iam`,`user-inline-policies`,t,n],queryFn:async()=>{let e=new L({UserName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument):``},staleTime:3e5}),ce=e({queryKey:[`iam`,`roles`],queryFn:async()=>{let e=new J({MaxItems:Z});return await y().send(e)},staleTime:3e5}),le=t=>e({queryKey:[`iam`,`roles`,t],queryFn:async()=>{let e=new P({RoleName:t});return await y().send(e)},staleTime:3e5}),ue=t=>e({queryKey:[`iam`,`attached-role-policies`,t],queryFn:async()=>{let e=new B({RoleName:t});return await y().send(e)},staleTime:3e5}),de=t=>e({queryKey:[`iam`,`role-inline-policies`,t],queryFn:async()=>{let e=new q({RoleName:t});return await y().send(e)},staleTime:3e5}),fe=(t,n)=>e({queryKey:[`iam`,`role-inline-policies`,t,n],queryFn:async()=>{let e=new F({RoleName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument):``},staleTime:3e5}),pe=e({queryKey:[`iam`,`instance-profiles`],queryFn:async()=>{let e=new G({MaxItems:Z});return await y().send(e)},staleTime:3e5}),me=t=>e({queryKey:[`iam`,`instance-profiles`,t],queryFn:async()=>{let e=new j({InstanceProfileName:t});return await y().send(e)},staleTime:3e5}),he=t=>e({queryKey:[`iam`,`instance-profiles-for-role`,t],queryFn:async()=>{let e=new K({RoleName:t});return await y().send(e)},staleTime:3e5}),ge=e({queryKey:[`iam`,`groups`],queryFn:async()=>{let e=new U({MaxItems:Z});return await y().send(e)},staleTime:3e5}),_e=t=>e({queryKey:[`iam`,`groups`,t],queryFn:async()=>{let e=new k({GroupName:t,MaxItems:Z});return await y().send(e)},staleTime:3e5}),ve=t=>e({queryKey:[`iam`,`attached-group-policies`,t],queryFn:async()=>{let e=new z({GroupName:t});return await y().send(e)},staleTime:3e5}),ye=t=>e({queryKey:[`iam`,`group-inline-policies`,t],queryFn:async()=>{let e=new H({GroupName:t});return await y().send(e)},staleTime:3e5}),be=(t,n)=>e({queryKey:[`iam`,`group-inline-policies`,t,n],queryFn:async()=>{let e=new A({GroupName:t,PolicyName:n}),r=await y().send(e);return r.PolicyDocument?O(r.PolicyDocument):``},staleTime:3e5}),xe=t=>e({queryKey:[`iam`,`groups-for-user`,t],queryFn:async()=>{let e=new W({UserName:t});return await y().send(e)},staleTime:3e5});export{Q as C,$ as S,fe as _,ye as a,oe as b,xe as c,he as d,pe as f,de as g,ie as h,ae as i,ge as l,re as m,ve as n,be as o,ne as p,ue as r,_e as s,te as t,me as u,le as v,se as x,ce as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-Cgrr-Iit.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpUWI3xh.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-Cgrr-Iit.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpUWI3xh.js index 2f37d3bb2..6729d4c6d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-Cgrr-Iit.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpUWI3xh.js @@ -1 +1 @@ -import{g as e,m as t}from"./cluster-config-xw_Q7X1e.js";import{i as n}from"./json-DsgWHaZY.js";var r=t({userName:e().min(1,`User name is required`).max(64,`User name must be 64 characters or less`).regex(/^[\w+=,.@-]+$/,`User name contains invalid characters`),path:e().optional()}),i=t({policyName:e().min(1,`Policy name is required`).max(128,`Policy name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Policy name contains invalid characters`),description:e().optional(),policyDocument:n({label:`Policy document`})}),a=t({policyName:e().min(1,`Policy name is required`).max(128,`Policy name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Policy name contains invalid characters`),policyDocument:n({label:`Policy document`})}),o=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Principal:{Service:`ec2.amazonaws.com`},Action:`sts:AssumeRole`}]},null,2),s=t({roleName:e().min(1,`Role name is required`).max(64,`Role name must be 64 characters or less`).regex(/^[\w+=,.@-]+$/,`Role name contains invalid characters`),path:e().optional(),description:e().optional(),assumeRolePolicyDocument:n({label:`Trust policy`})}),c=t({instanceProfileName:e().min(1,`Instance profile name is required`).max(128,`Instance profile name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Instance profile name contains invalid characters`),path:e().optional()}),l=t({groupName:e().min(1,`Group name is required`).max(128,`Group name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Group name contains invalid characters`),path:e().optional()});export{s as a,i,l as n,r as o,c as r,a as s,o as t}; \ No newline at end of file +import{_ as e,h as t}from"./cluster-config-DkOiY8HH.js";import{i as n}from"./json-hjud9BaA.js";var r=t({userName:e().min(1,`User name is required`).max(64,`User name must be 64 characters or less`).regex(/^[\w+=,.@-]+$/,`User name contains invalid characters`),path:e().optional()}),i=t({policyName:e().min(1,`Policy name is required`).max(128,`Policy name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Policy name contains invalid characters`),description:e().optional(),policyDocument:n({label:`Policy document`})}),a=t({policyName:e().min(1,`Policy name is required`).max(128,`Policy name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Policy name contains invalid characters`),policyDocument:n({label:`Policy document`})}),o=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Principal:{Service:`ec2.amazonaws.com`},Action:`sts:AssumeRole`}]},null,2),s=t({roleName:e().min(1,`Role name is required`).max(64,`Role name must be 64 characters or less`).regex(/^[\w+=,.@-]+$/,`Role name contains invalid characters`),path:e().optional(),description:e().optional(),assumeRolePolicyDocument:n({label:`Trust policy`})}),c=t({instanceProfileName:e().min(1,`Instance profile name is required`).max(128,`Instance profile name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Instance profile name contains invalid characters`),path:e().optional()}),l=t({groupName:e().min(1,`Group name is required`).max(128,`Group name must be 128 characters or less`).regex(/^[\w+=,.@-]+$/,`Group name contains invalid characters`),path:e().optional()});export{s as a,i,l as n,r as o,c as r,a as s,o as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-CKOkzDco.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpkrYySm.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-CKOkzDco.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpkrYySm.js index a3ea62918..3c927fbf3 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-CKOkzDco.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/iam-DpkrYySm.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{At as r,Ct as i,Dt as a,Et as o,Mt as s,Nt as c,Ot as ee,Pt as te,St as ne,Tt as l,_t as u,an as d,bt as f,cn as p,f as m,ft as h,gt as g,ht as _,in as v,jt as y,kt as b,ln as x,mt as S,on as C,pt as w,sn as T,vt as E,wt as D,xt as O,yt as k}from"./awsClient-b0hcP1Iz.js";import{n as A,r as j,t as M}from"./commandBuilder-CoLHZwsC.js";var N=class extends j(M,A,`AddRoleToInstanceProfile`,h){},P=class extends j(M,A,`AddUserToGroup`,w){},F=class extends j(M,A,`AttachGroupPolicy`,S){},I=class extends j(M,A,`AttachRolePolicy`,_){},L=class extends j(M,A,`AttachUserPolicy`,g){},R=class extends j(M,A,`CreateAccessKey`,u){},z=class extends j(M,A,`CreateGroup`,E){},B=class extends j(M,A,`CreateInstanceProfile`,k){},V=class extends j(M,A,`CreatePolicy`,f){},H=class extends j(M,A,`CreateRole`,O){},U=class extends j(M,A,`CreateUser`,ne){},W=class extends j(M,A,`DeleteAccessKey`,i){},G=class extends j(M,A,`DeleteGroup`,D){},K=class extends j(M,A,`DeleteGroupPolicy`,l){},q=class extends j(M,A,`DeleteInstanceProfile`,o){},J=class extends j(M,A,`DeletePolicy`,a){},Y=class extends j(M,A,`DeleteRole`,ee){},X=class extends j(M,A,`DeleteRolePolicy`,b){},Z=class extends j(M,A,`DeleteUser`,r){},re=class extends j(M,A,`DeleteUserPolicy`,y){},ie=class extends j(M,A,`DetachGroupPolicy`,s){},ae=class extends j(M,A,`DetachRolePolicy`,c){},oe=class extends j(M,A,`DetachUserPolicy`,te){},se=class extends j(M,A,`PutGroupPolicy`,v){},ce=class extends j(M,A,`PutRolePolicy`,d){},le=class extends j(M,A,`PutUserPolicy`,C){},ue=class extends j(M,A,`RemoveRoleFromInstanceProfile`,T){},de=class extends j(M,A,`RemoveUserFromGroup`,p){},fe=class extends j(M,A,`UpdateAccessKey`,x){},Q=e();function pe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`users`]})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new U({UserName:e.userName,Path:e.path||void 0});return await m().send(t)}function he(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ge,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`users`]})}},e[0]=r,e[1]=i),n(i)}async function ge(e){let t=new Z({UserName:e});return await m().send(t)}function _e(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ve,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function ve(e){let t=new R({UserName:e});return await m().send(t)}function ye(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:be,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function be(e){let{userName:t,accessKeyId:n}=e,r=new W({UserName:t,AccessKeyId:n});return await m().send(r)}function xe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Se,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function Se(e){let{userName:t,accessKeyId:n,status:r}=e,i=new fe({UserName:t,AccessKeyId:n,Status:r});return await m().send(i)}function Ce(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:we,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function we(e){let t=new V({PolicyName:e.policyName,Description:e.description||void 0,PolicyDocument:e.policyDocument});return await m().send(t)}function Te(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ee,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function Ee(e){let t=new J({PolicyArn:e});return await m().send(t)}function De(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Oe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-user-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Oe(e){let{userName:t,policyArn:n}=e,r=new L({UserName:t,PolicyArn:n});return await m().send(r)}function ke(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ae,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-user-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Ae(e){let{userName:t,policyArn:n}=e,r=new oe({UserName:t,PolicyArn:n});return await m().send(r)}function je(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Me,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`user-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Me(e){let{name:t,policyName:n,policyDocument:r}=e,i=new le({UserName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function Ne(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Pe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`user-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Pe(e){let{name:t,policyName:n}=e,r=new re({UserName:t,PolicyName:n});return await m().send(r)}function Fe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ie,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`roles`]})}},e[0]=r,e[1]=i),n(i)}async function Ie(e){let t=new H({RoleName:e.roleName,Path:e.path||void 0,Description:e.description||void 0,AssumeRolePolicyDocument:e.assumeRolePolicyDocument});return await m().send(t)}function Le(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Re,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`roles`]})}},e[0]=r,e[1]=i),n(i)}async function Re(e){let t=new Y({RoleName:e});return await m().send(t)}function ze(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Be,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-role-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Be(e){let{roleName:t,policyArn:n}=e,r=new I({RoleName:t,PolicyArn:n});return await m().send(r)}function Ve(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:He,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-role-policies`]})}},e[0]=r,e[1]=i),n(i)}async function He(e){let{roleName:t,policyArn:n}=e,r=new ae({RoleName:t,PolicyArn:n});return await m().send(r)}function Ue(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:We,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`role-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function We(e){let{name:t,policyName:n,policyDocument:r}=e,i=new ce({RoleName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function Ge(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ke,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`role-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Ke(e){let{name:t,policyName:n}=e,r=new X({RoleName:t,PolicyName:n});return await m().send(r)}function qe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Je,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Je(e){let t=new B({InstanceProfileName:e.instanceProfileName,Path:e.path||void 0});return await m().send(t)}function Ye(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Xe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Xe(e){let t=new q({InstanceProfileName:e});return await m().send(t)}function Ze(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Qe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Qe(e){let{instanceProfileName:t,roleName:n}=e,r=new N({InstanceProfileName:t,RoleName:n});return await m().send(r)}function $e(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:et,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function et(e){let{instanceProfileName:t,roleName:n}=e,r=new ue({InstanceProfileName:t,RoleName:n});return await m().send(r)}function tt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]})}},e[0]=r,e[1]=i),n(i)}async function $(e){let t=new z({GroupName:e.groupName,Path:e.path||void 0});return await m().send(t)}function nt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:rt,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]})}},e[0]=r,e[1]=i),n(i)}async function rt(e){let t=new G({GroupName:e});return await m().send(t)}function it(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:at,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-group-policies`]})}},e[0]=r,e[1]=i),n(i)}async function at(e){let{groupName:t,policyArn:n}=e,r=new F({GroupName:t,PolicyArn:n});return await m().send(r)}function ot(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:st,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-group-policies`]})}},e[0]=r,e[1]=i),n(i)}async function st(e){let{groupName:t,policyArn:n}=e,r=new ie({GroupName:t,PolicyArn:n});return await m().send(r)}function ct(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:lt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`group-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function lt(e){let{name:t,policyName:n,policyDocument:r}=e,i=new se({GroupName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function ut(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`group-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function dt(e){let{name:t,policyName:n}=e,r=new K({GroupName:t,PolicyName:n});return await m().send(r)}function ft(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pt,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]}),r.invalidateQueries({queryKey:[`iam`,`groups-for-user`]})}},e[0]=r,e[1]=i),n(i)}async function pt(e){let{groupName:t,userName:n}=e,r=new P({GroupName:t,UserName:n});return await m().send(r)}function mt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ht,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]}),r.invalidateQueries({queryKey:[`iam`,`groups-for-user`]})}},e[0]=r,e[1]=i),n(i)}async function ht(e){let{groupName:t,userName:n}=e,r=new de({GroupName:t,UserName:n});return await m().send(r)}export{ke as C,$e as D,je as E,mt as O,Ve as S,Ue as T,Le as _,De as a,Ne as b,qe as c,pe as d,ye as f,Te as g,Ye as h,ze as i,xe as k,Ce as l,ut as m,ft as n,_e as o,nt as p,it as r,tt as s,Ze as t,Fe as u,Ge as v,ct as w,ot as x,he as y}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{At as r,Ct as i,Dt as a,Et as o,Mt as s,Nt as c,Ot as ee,Pt as te,St as ne,Tt as l,_t as u,an as d,bt as f,cn as p,f as m,ft as h,gt as g,ht as _,in as v,jt as y,kt as b,ln as x,mt as S,on as C,pt as w,sn as T,vt as E,wt as D,xt as O,yt as k}from"./awsClient-Cqp6x3OY.js";import{n as A,r as j,t as M}from"./commandBuilder-BKyTM0Ga.js";var N=class extends j(M,A,`AddRoleToInstanceProfile`,h){},P=class extends j(M,A,`AddUserToGroup`,w){},F=class extends j(M,A,`AttachGroupPolicy`,S){},I=class extends j(M,A,`AttachRolePolicy`,_){},L=class extends j(M,A,`AttachUserPolicy`,g){},R=class extends j(M,A,`CreateAccessKey`,u){},z=class extends j(M,A,`CreateGroup`,E){},B=class extends j(M,A,`CreateInstanceProfile`,k){},V=class extends j(M,A,`CreatePolicy`,f){},H=class extends j(M,A,`CreateRole`,O){},U=class extends j(M,A,`CreateUser`,ne){},W=class extends j(M,A,`DeleteAccessKey`,i){},G=class extends j(M,A,`DeleteGroup`,D){},K=class extends j(M,A,`DeleteGroupPolicy`,l){},q=class extends j(M,A,`DeleteInstanceProfile`,o){},J=class extends j(M,A,`DeletePolicy`,a){},Y=class extends j(M,A,`DeleteRole`,ee){},X=class extends j(M,A,`DeleteRolePolicy`,b){},Z=class extends j(M,A,`DeleteUser`,r){},re=class extends j(M,A,`DeleteUserPolicy`,y){},ie=class extends j(M,A,`DetachGroupPolicy`,s){},ae=class extends j(M,A,`DetachRolePolicy`,c){},oe=class extends j(M,A,`DetachUserPolicy`,te){},se=class extends j(M,A,`PutGroupPolicy`,v){},ce=class extends j(M,A,`PutRolePolicy`,d){},le=class extends j(M,A,`PutUserPolicy`,C){},ue=class extends j(M,A,`RemoveRoleFromInstanceProfile`,T){},de=class extends j(M,A,`RemoveUserFromGroup`,p){},fe=class extends j(M,A,`UpdateAccessKey`,x){},Q=e();function pe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`users`]})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new U({UserName:e.userName,Path:e.path||void 0});return await m().send(t)}function he(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ge,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`users`]})}},e[0]=r,e[1]=i),n(i)}async function ge(e){let t=new Z({UserName:e});return await m().send(t)}function _e(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ve,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function ve(e){let t=new R({UserName:e});return await m().send(t)}function ye(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:be,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function be(e){let{userName:t,accessKeyId:n}=e,r=new W({UserName:t,AccessKeyId:n});return await m().send(r)}function xe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Se,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`access-keys`]})}},e[0]=r,e[1]=i),n(i)}async function Se(e){let{userName:t,accessKeyId:n,status:r}=e,i=new fe({UserName:t,AccessKeyId:n,Status:r});return await m().send(i)}function Ce(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:we,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function we(e){let t=new V({PolicyName:e.policyName,Description:e.description||void 0,PolicyDocument:e.policyDocument});return await m().send(t)}function Te(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ee,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`policies`]})}},e[0]=r,e[1]=i),n(i)}async function Ee(e){let t=new J({PolicyArn:e});return await m().send(t)}function De(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Oe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-user-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Oe(e){let{userName:t,policyArn:n}=e,r=new L({UserName:t,PolicyArn:n});return await m().send(r)}function ke(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ae,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-user-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Ae(e){let{userName:t,policyArn:n}=e,r=new oe({UserName:t,PolicyArn:n});return await m().send(r)}function je(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Me,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`user-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Me(e){let{name:t,policyName:n,policyDocument:r}=e,i=new le({UserName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function Ne(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Pe,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`user-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Pe(e){let{name:t,policyName:n}=e,r=new re({UserName:t,PolicyName:n});return await m().send(r)}function Fe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ie,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`roles`]})}},e[0]=r,e[1]=i),n(i)}async function Ie(e){let t=new H({RoleName:e.roleName,Path:e.path||void 0,Description:e.description||void 0,AssumeRolePolicyDocument:e.assumeRolePolicyDocument});return await m().send(t)}function Le(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Re,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`roles`]})}},e[0]=r,e[1]=i),n(i)}async function Re(e){let t=new Y({RoleName:e});return await m().send(t)}function ze(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Be,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-role-policies`]})}},e[0]=r,e[1]=i),n(i)}async function Be(e){let{roleName:t,policyArn:n}=e,r=new I({RoleName:t,PolicyArn:n});return await m().send(r)}function Ve(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:He,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-role-policies`]})}},e[0]=r,e[1]=i),n(i)}async function He(e){let{roleName:t,policyArn:n}=e,r=new ae({RoleName:t,PolicyArn:n});return await m().send(r)}function Ue(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:We,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`role-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function We(e){let{name:t,policyName:n,policyDocument:r}=e,i=new ce({RoleName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function Ge(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ke,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`role-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function Ke(e){let{name:t,policyName:n}=e,r=new X({RoleName:t,PolicyName:n});return await m().send(r)}function qe(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Je,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Je(e){let t=new B({InstanceProfileName:e.instanceProfileName,Path:e.path||void 0});return await m().send(t)}function Ye(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Xe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Xe(e){let t=new q({InstanceProfileName:e});return await m().send(t)}function Ze(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Qe,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function Qe(e){let{instanceProfileName:t,roleName:n}=e,r=new N({InstanceProfileName:t,RoleName:n});return await m().send(r)}function $e(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:et,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`instance-profiles`]})}},e[0]=r,e[1]=i),n(i)}async function et(e){let{instanceProfileName:t,roleName:n}=e,r=new ue({InstanceProfileName:t,RoleName:n});return await m().send(r)}function tt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]})}},e[0]=r,e[1]=i),n(i)}async function $(e){let t=new z({GroupName:e.groupName,Path:e.path||void 0});return await m().send(t)}function nt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:rt,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]})}},e[0]=r,e[1]=i),n(i)}async function rt(e){let t=new G({GroupName:e});return await m().send(t)}function it(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:at,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-group-policies`]})}},e[0]=r,e[1]=i),n(i)}async function at(e){let{groupName:t,policyArn:n}=e,r=new F({GroupName:t,PolicyArn:n});return await m().send(r)}function ot(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:st,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`attached-group-policies`]})}},e[0]=r,e[1]=i),n(i)}async function st(e){let{groupName:t,policyArn:n}=e,r=new ie({GroupName:t,PolicyArn:n});return await m().send(r)}function ct(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:lt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`group-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function lt(e){let{name:t,policyName:n,policyDocument:r}=e,i=new se({GroupName:t,PolicyName:n,PolicyDocument:r});return await m().send(i)}function ut(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:dt,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`iam`,`group-inline-policies`,t.name]})}},e[0]=r,e[1]=i),n(i)}async function dt(e){let{name:t,policyName:n}=e,r=new K({GroupName:t,PolicyName:n});return await m().send(r)}function ft(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:pt,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]}),r.invalidateQueries({queryKey:[`iam`,`groups-for-user`]})}},e[0]=r,e[1]=i),n(i)}async function pt(e){let{groupName:t,userName:n}=e,r=new P({GroupName:t,UserName:n});return await m().send(r)}function mt(){let e=(0,Q.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ht,onSuccess:()=>{r.invalidateQueries({queryKey:[`iam`,`groups`]}),r.invalidateQueries({queryKey:[`iam`,`groups-for-user`]})}},e[0]=r,e[1]=i),n(i)}async function ht(e){let{groupName:t,userName:n}=e,r=new de({GroupName:t,UserName:n});return await m().send(r)}export{ke as C,$e as D,je as E,mt as O,Ve as S,Ue as T,Le as _,De as a,Ne as b,qe as c,pe as d,ye as f,Te as g,Ye as h,ze as i,xe as k,Ce as l,ut as m,ft as n,_e as o,nt as p,it as r,tt as s,Ze as t,Fe as u,Ge as v,ct as w,ot as x,he as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-kETKjfrj.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-x6cy9gMM.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-kETKjfrj.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-x6cy9gMM.js index df3389c16..1410e054e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-kETKjfrj.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/import-key-pair-x6cy9gMM.js @@ -1,3 +1,3 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-BH3pQKLF.js";import{t as r}from"./back-link-CjKy1JE5.js";import{t as i}from"./cli-command-panel-CLiFy1rG.js";import{t as a}from"./input-6kdUb_DH.js";import{q as ee}from"./ec2-Ctto2xjU.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,t as l}from"./zod-DF_n2ejy.js";import{t as te}from"./error-banner-DeOeVBKS.js";import{t as u}from"./form-actions-BUM37An0.js";import{r as d,s as f,t as p}from"./field-c7GHI5st.js";import{t as m}from"./textarea-n04EavUm.js";import{v as h}from"./ec2-DhWukC79.js";var g=t(),_=e();function v(){let e=(0,g.c)(55),t=n(),v=ee(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:l(h)},e[0]=b):b=e[0];let{handleSubmit:x,register:S,control:C,formState:w}=c(b),{errors:T,isSubmitting:E}=w,D;e[1]===C?D=e[2]:(D={control:C},e[1]=C,e[2]=D);let O=s(D),k;e[3]!==v||e[4]!==t?(k=async e=>{await v.mutateAsync(e),t({to:`/ec2/describe-key-pairs`})},e[3]=v,e[4]=t,e[5]=k):k=e[5];let A=k,j,M;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,_.jsx)(r,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),M=(0,_.jsx)(o,{title:`Import Key Pair`}),e[6]=j,e[7]=M):(j=e[6],M=e[7]);let N;e[8]===v.error?N=e[9]:(N=v.error&&(0,_.jsx)(te,{error:v.error,msg:`Failed to import key pair`}),e[8]=v.error,e[9]=N);let P;e[10]!==x||e[11]!==A?(P=x(A),e[10]=x,e[11]=A,e[12]=P):P=e[12];let F;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair Name`})}),e[13]=F):F=e[13];let I=!!T.keyName,L;e[14]===S?L=e[15]:(L=S(`keyName`),e[14]=S,e[15]=L);let R;e[16]!==L||e[17]!==I?(R=(0,_.jsx)(a,{"aria-invalid":I,id:`keyName`,placeholder:`my-key-pair…`,...L}),e[16]=L,e[17]=I,e[18]=R):R=e[18];let z;e[19]===T.keyName?z=e[20]:(z=(0,_.jsx)(d,{errors:[T.keyName]}),e[19]=T.keyName,e[20]=z);let B;e[21]!==R||e[22]!==z?(B=(0,_.jsxs)(p,{children:[F,R,z]}),e[21]=R,e[22]=z,e[23]=B):B=e[23];let V,H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`publicKeyMaterial`,children:`Public Key`})}),H=(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,id:`publicKey-description`,children:`Paste your OpenSSH public key (e.g. the contents of id_rsa.pub)`}),e[24]=V,e[25]=H):(V=e[24],H=e[25]);let U=!!T.publicKeyMaterial,W;e[26]===S?W=e[27]:(W=S(`publicKeyMaterial`),e[26]=S,e[27]=W);let G;e[28]!==U||e[29]!==W?(G=(0,_.jsx)(m,{"aria-invalid":U,id:`publicKeyMaterial`,placeholder:`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC…`,rows:8,...W}),e[28]=U,e[29]=W,e[30]=G):G=e[30];let K;e[31]===T.publicKeyMaterial?K=e[32]:(K=(0,_.jsx)(d,{errors:[T.publicKeyMaterial]}),e[31]=T.publicKeyMaterial,e[32]=K);let q;e[33]!==G||e[34]!==K?(q=(0,_.jsxs)(p,{children:[V,H,G,K]}),e[33]=G,e[34]=K,e[35]=q):q=e[35];let J;e[36]===O?J=e[37]:(J=y(O),e[36]=O,e[37]=J);let Y;e[38]===J?Y=e[39]:(Y=(0,_.jsx)(i,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-key-pairs`})},e[40]=t,e[41]=X);let Z;e[42]!==v.isPending||e[43]!==E||e[44]!==X?(Z=(0,_.jsx)(u,{isPending:v.isPending,isSubmitting:E,onCancel:X,pendingLabel:`Importing…`,submitLabel:`Import Key Pair`}),e[42]=v.isPending,e[43]=E,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==B||e[47]!==q||e[48]!==Y||e[49]!==Z||e[50]!==P?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:P,children:[B,q,Y,Z]}),e[46]=B,e[47]=q,e[48]=Y,e[49]=Z,e[50]=P,e[51]=Q):Q=e[51];let $;return e[52]!==Q||e[53]!==N?($=(0,_.jsxs)(_.Fragment,{children:[j,M,N,Q]}),e[52]=Q,e[53]=N,e[54]=$):$=e[54],$}function y(e){return[{label:`Import Key Pair`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 import-key-pair`},{type:`flag`,value:` \\ +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useNavigate-CTe_-BZA.js";import{t as r}from"./back-link-wsXUoJ12.js";import{t as i}from"./cli-command-panel-DavMY-tN.js";import{t as a}from"./input-D3aUBtS6.js";import{q as ee}from"./ec2-Csn1kwZ8.js";import{t as o}from"./page-heading-vksh_67w.js";import{a as s,i as c,t as l}from"./zod-A4qtKH_p.js";import{t as te}from"./error-banner-DeOeVBKS.js";import{t as u}from"./form-actions-DXvy9CQI.js";import{r as d,s as f,t as p}from"./field-CS-ql6du.js";import{t as m}from"./textarea-DV1UO8hv.js";import{v as h}from"./ec2-DqNqPeiA.js";var g=t(),_=e();function v(){let e=(0,g.c)(55),t=n(),v=ee(),b;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(b={resolver:l(h)},e[0]=b):b=e[0];let{handleSubmit:x,register:S,control:C,formState:w}=c(b),{errors:T,isSubmitting:E}=w,D;e[1]===C?D=e[2]:(D={control:C},e[1]=C,e[2]=D);let O=s(D),k;e[3]!==v||e[4]!==t?(k=async e=>{await v.mutateAsync(e),t({to:`/ec2/describe-key-pairs`})},e[3]=v,e[4]=t,e[5]=k):k=e[5];let A=k,j,M;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,_.jsx)(r,{to:`/ec2/describe-key-pairs`,children:`Back to key pairs`}),M=(0,_.jsx)(o,{title:`Import Key Pair`}),e[6]=j,e[7]=M):(j=e[6],M=e[7]);let N;e[8]===v.error?N=e[9]:(N=v.error&&(0,_.jsx)(te,{error:v.error,msg:`Failed to import key pair`}),e[8]=v.error,e[9]=N);let P;e[10]!==x||e[11]!==A?(P=x(A),e[10]=x,e[11]=A,e[12]=P):P=e[12];let F;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair Name`})}),e[13]=F):F=e[13];let I=!!T.keyName,L;e[14]===S?L=e[15]:(L=S(`keyName`),e[14]=S,e[15]=L);let R;e[16]!==L||e[17]!==I?(R=(0,_.jsx)(a,{"aria-invalid":I,id:`keyName`,placeholder:`my-key-pair…`,...L}),e[16]=L,e[17]=I,e[18]=R):R=e[18];let z;e[19]===T.keyName?z=e[20]:(z=(0,_.jsx)(d,{errors:[T.keyName]}),e[19]=T.keyName,e[20]=z);let B;e[21]!==R||e[22]!==z?(B=(0,_.jsxs)(p,{children:[F,R,z]}),e[21]=R,e[22]=z,e[23]=B):B=e[23];let V,H;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,_.jsx)(f,{children:(0,_.jsx)(`label`,{htmlFor:`publicKeyMaterial`,children:`Public Key`})}),H=(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,id:`publicKey-description`,children:`Paste your OpenSSH public key (e.g. the contents of id_rsa.pub)`}),e[24]=V,e[25]=H):(V=e[24],H=e[25]);let U=!!T.publicKeyMaterial,W;e[26]===S?W=e[27]:(W=S(`publicKeyMaterial`),e[26]=S,e[27]=W);let G;e[28]!==U||e[29]!==W?(G=(0,_.jsx)(m,{"aria-invalid":U,id:`publicKeyMaterial`,placeholder:`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC…`,rows:8,...W}),e[28]=U,e[29]=W,e[30]=G):G=e[30];let K;e[31]===T.publicKeyMaterial?K=e[32]:(K=(0,_.jsx)(d,{errors:[T.publicKeyMaterial]}),e[31]=T.publicKeyMaterial,e[32]=K);let q;e[33]!==G||e[34]!==K?(q=(0,_.jsxs)(p,{children:[V,H,G,K]}),e[33]=G,e[34]=K,e[35]=q):q=e[35];let J;e[36]===O?J=e[37]:(J=y(O),e[36]=O,e[37]=J);let Y;e[38]===J?Y=e[39]:(Y=(0,_.jsx)(i,{commands:J}),e[38]=J,e[39]=Y);let X;e[40]===t?X=e[41]:(X=async()=>{await t({to:`/ec2/describe-key-pairs`})},e[40]=t,e[41]=X);let Z;e[42]!==v.isPending||e[43]!==E||e[44]!==X?(Z=(0,_.jsx)(u,{isPending:v.isPending,isSubmitting:E,onCancel:X,pendingLabel:`Importing…`,submitLabel:`Import Key Pair`}),e[42]=v.isPending,e[43]=E,e[44]=X,e[45]=Z):Z=e[45];let Q;e[46]!==B||e[47]!==q||e[48]!==Y||e[49]!==Z||e[50]!==P?(Q=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:P,children:[B,q,Y,Z]}),e[46]=B,e[47]=q,e[48]=Y,e[49]=Z,e[50]=P,e[51]=Q):Q=e[51];let $;return e[52]!==Q||e[53]!==N?($=(0,_.jsxs)(_.Fragment,{children:[j,M,N,Q]}),e[52]=Q,e[53]=N,e[54]=$):$=e[54],$}function y(e){return[{label:`Import Key Pair`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 import-key-pair`},{type:`flag`,value:` \\ --key-name`},{type:`value`,value:` ${(e.keyName??``)||``}`},{type:`flag`,value:` \\ --public-key-material`},{type:`value`,value:` fileb://path/to/key.pub`}]}]}export{v as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-B5IxsngR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-B5IxsngR.js new file mode 100644 index 000000000..244a6bc3d --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-B5IxsngR.js @@ -0,0 +1,11 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/route-ri79I-mW.js","assets/compiler-runtime-D_vZfn79.js","assets/Match-D6VSR81X.js","assets/matchContext-DjfNTEDZ.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/_auth-Cg3v0g0g.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-BokOReHc.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/createLucideIcon-BQgzNCBR.js","assets/chevron-down-Dt4q6d24.js","assets/chevron-right-c57whaks.js","assets/waypoints-DE7eIn9V.js","assets/network-RAx0KOlf.js","assets/admin-context-C7nTf-ee.js","assets/sts-e2q_c_HI.js","assets/signed-fetch-C_pG4AOx.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/s3-ClpClaoT.js","assets/page-heading-vksh_67w.js","assets/badge-6vbuGFqk.js","assets/dist-DeC3TnAR.js","assets/useRender-C4GZPWLS.js","assets/card-xPs7xSYh.js","assets/admin-JuLSsFKq.js","assets/alert-dialog-jxylPXwR.js","assets/button-qf9lLJ2x.js","assets/DialogTitle-2TVGaTYe.js","assets/useValueAsRef-hoe2gsyn.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useScrollLock-UqEMT494.js","assets/state-badge-pn00UE1d.js","assets/route-CAwLPdN1.js","assets/nodes-D2CP1Pn7.js","assets/redirect-B4OxYbs2.js","assets/service-metrics-BTAb6rAK.js","assets/allocate-address-BqJUGAgz.js","assets/useNavigate-CTe_-BZA.js","assets/back-link-wsXUoJ12.js","assets/cli-command-panel-DavMY-tN.js","assets/check-BO7W8OSs.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-D3aUBtS6.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ec2-DqNqPeiA.js","assets/create-internet-gateway-Dwj_-BW9.js","assets/create-key-pair-C7YX-AO2.js","assets/select-Cn66OoPn.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-Puv6a8xb.js","assets/download-B-6MA128.js","assets/triangle-alert-DcjzeKLg.js","assets/import-key-pair-x6cy9gMM.js","assets/textarea-DV1UO8hv.js","assets/create-launch-template-VIoUeN7g.js","assets/launch-template-data-fields-PZ1Q44UQ.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/collapsible-Sj-k2ZCd.js","assets/create-load-balancer-BPY5X6lX.js","assets/acm-DlvuctCR.js","assets/certificate-import-dialog-B6IZXuGX.js","assets/elbv2-D0Z7QbU2.js","assets/commandBuilder-BIU1eEwl.js","assets/elbv2-CmXUhudd.js","assets/tags-field-array-Bjg8Nmui.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/target-group-form-WUXG3BOb.js","assets/elbv2-DqjEJ4Pi.js","assets/create-nat-gateway-BF-3LK_W.js","assets/create-placement-group-C_JJp8Dt.js","assets/create-route-table-BjZ3QG0v.js","assets/create-security-group-B0XC1OvX.js","assets/create-subnet-BbA2kLfW.js","assets/create-target-group-BGShIRhO.js","assets/create-volume-_mFhkjRH.js","assets/create-vpc-D5-RWY8E.js","assets/task-definitions-CUmhuZtU.js","assets/ecs-BmKTMTV2.js","assets/ecs-Bz1Yh-WL.js","assets/delete-confirmation-dialog-BYHqotoI.js","assets/ecs-section-nav-CSH8MVoU.js","assets/create-cluster-Cy3fUa1r.js","assets/eks-DOTzV24J.js","assets/commandBuilder-CU-BmScO.js","assets/json-hjud9BaA.js","assets/iam-DpkrYySm.js","assets/commandBuilder-BKyTM0Ga.js","assets/iam-DmtL7LFe.js","assets/system-managed-Dk7ySh_E.js","assets/system-image-required-D20bojgG.js","assets/rotate-cw-FTUcK_f-.js","assets/policy-document-viewer-DAhLJAGU.js","assets/create-group-D0NYn8W8.js","assets/iam-DpUWI3xh.js","assets/create-instance-profile-Cb5zGMcm.js","assets/create-policy-DlJ9bZT3.js","assets/json-editor-02czSrbA.js","assets/create-role-BaGfB4lO.js","assets/create-user-vDT-lrk7.js","assets/create-db-instance-Q5Pdr85P.js","assets/rds-DIuGt87z.js","assets/rds-DbPUva_R.js","assets/rds-Ca8CaJkU.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-DFjvW5uT.js","assets/create-db-parameter-group-BvJjm9oV.js","assets/create-db-subnet-group-D2PX3uoX.js","assets/create-bucket-DxusrabG.js","assets/s3-D7lLgKWv.js","assets/ls-TM8kmIJ2.js","assets/list-card-PsHyk9Gp.js","assets/route-MJhrpG5n.js","assets/list-model-catalog-CoTQPvKo.js","assets/list-guardrails-DNrvWtXR.js","assets/bedrock-BF8FfWcf.js","assets/commandBuilder-D0AzsM22.js","assets/create-DP60zgai.js","assets/bedrock-ktyVzA00.js","assets/guardrail-form-page-BDQeV5zm.js","assets/list-knowledge-bases-FRi1Cu0q.js","assets/bedrockAgent-CtELySTw.js","assets/commandBuilder-BieYN8IF.js","assets/create-b5D-gsjR.js","assets/bedrockAgent-BE9dOa-O.js","assets/list-model-access-COS9MQ20.js","assets/playground-DhTOBnjO.js","assets/commandBuilder-D669HwKx.js","assets/describe-addresses-BvGejO0s.js","assets/describe-images-D95mop7O.js","assets/describe-instances-C7L5X-xg.js","assets/describe-internet-gateways-Dh9zgncU.js","assets/describe-key-pairs-CIcalo7_.js","assets/describe-launch-templates-16l2HSO9.js","assets/describe-load-balancers-CvSYkE1t.js","assets/describe-nat-gateways-BeyzhmC1.js","assets/describe-placement-groups-DO9--Khm.js","assets/describe-route-tables-B3zHyrvm.js","assets/describe-security-groups-05FUEYLk.js","assets/describe-snapshots-DJhUVUCi.js","assets/describe-subnets-Rh3w0AKG.js","assets/describe-target-groups--rLbL4B_.js","assets/describe-volumes-BOLvkqX1.js","assets/describe-vpcs-BfQ6LNv4.js","assets/list-repositories-DHOyauAo.js","assets/ecr-dHrKdmGg.js","assets/ecr-BDgZC3r0.js","assets/list-clusters-X6G1LD1-.js","assets/list-clusters-xA7fv2I4.js","assets/eks-Ba3nNOPR.js","assets/list-groups-86WQHO2k.js","assets/list-instance-profiles-EE5QowIu.js","assets/list-policies-BO0BzScg.js","assets/list-roles-35tCJiv-.js","assets/list-users-Bt1RrNuk.js","assets/describe-db-instances-fwSV1dE8.js","assets/delete-db-instance-dialog-lxcaswKe.js","assets/describe-db-parameter-groups-DGI1_IDI.js","assets/delete-db-parameter-group-dialog-DVhsvQ9C.js","assets/rds-delete-dialog-BWwoVrYv.js","assets/describe-db-snapshots-Dueg64Bg.js","assets/create-db-snapshot-dialog-5YPk6G0l.js","assets/delete-db-snapshot-dialog-elwW83vt.js","assets/describe-db-subnet-groups-CUjsw06h.js","assets/delete-db-subnet-group-dialog-Mj0lUr0p.js"])))=>i.map(i=>d[i]); +import{i as e,n as t,o as n,r,t as i}from"./compiler-runtime-D_vZfn79.js";import{A as a,C as o,E as s,a as c,b as l,c as u,g as d,h as f,k as p,m,o as h,s as g,v as _,x as v,y}from"./removable-Dwr9otKB.js";import{t as b}from"./query-BPr_oSEg.js";import{t as x}from"./mutation-BziiWz5u.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./lazyRouteComponent-D0nAq0Je.js";import{C as O,S as k,T as ee,_ as te,a as ne,b as re,c as ie,d as ae,f as oe,g as se,h as ce,i as le,l as ue,m as de,n as fe,o as pe,p as me,r as he,t as A,u as ge,v as _e,w as j,y as M}from"./link-BokOReHc.js";import{a as ve,i as ye,n as be,o as xe,r as Se,t as N}from"./Match-D6VSR81X.js";import{r as Ce}from"./matchContext-DjfNTEDZ.js";import{n as we,t as Te}from"./redirect-B4OxYbs2.js";import{a as Ee,n as De,r as Oe,t as ke}from"./useSelector-C6_B_5v6.js";import{n as Ae}from"./with-selector-DrM041uv.js";import{t as je}from"./useNavigate-CTe_-BZA.js";import{f as Me,i as Ne,n as Pe,t as Fe}from"./useValueAsRef-hoe2gsyn.js";import{a as Ie,f as Le,l as Re,n as ze,o as Be,t as Ve,u as He}from"./dist-DeC3TnAR.js";import{t as Ue}from"./useRender-C4GZPWLS.js";import{n as We,nn as P,o as Ge,r as Ke,s as qe,ut as F}from"./cluster-config-DkOiY8HH.js";import{t as I}from"./createLucideIcon-BQgzNCBR.js";import{t as Je}from"./camera-bmANKZ8M.js";import{a as Ye,i as Xe,n as Ze,o as Qe,r as $e,s as et,t as tt}from"./waypoints-DE7eIn9V.js";import{n as nt,t as rt}from"./_id-BkDfjUwp.js";import{t as it}from"./network-RAx0KOlf.js";import{n as at,t as ot}from"./_clusterName-DSoBTvQE.js";import{n as st,t as ct}from"./_id-UlVyYgOJ.js";import{_ as lt,b as ut,n as dt,o as ft,s as pt,t as mt,y as ht}from"./button-qf9lLJ2x.js";import{C as gt,E as _t,S as vt,b as yt,f as bt,g as xt,h as St,i as Ct,m as wt,s as Tt,t as Et,v as Dt,w as Ot,x as kt,y as At}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{$ as jt,D as Mt,E as Nt,H as Pt,L as Ft,M as It,O as Lt,P as Rt,S as zt,St as Bt,Y as Vt,at as Ht,b as Ut,ct as Wt,g as Gt,h as Kt,it as L,j as qt,k as Jt,m as Yt,nt as Xt,ot as Zt,p as Qt,st as $t,tt as en,ut as tn,w as nn,wt as rn,x as an,y as on,z as sn}from"./useScrollLock-UqEMT494.js";import{n as cn,r as ln,t as un}from"./usePositioner-BZ4WwVxL.js";import"./input-D3aUBtS6.js";import{t as dn}from"./separator--2CKf90h.js";import{a as fn,c as pn,i as mn,l as hn,n as gn,o as _n,r as vn,s as yn,t as bn}from"./DialogTitle-2TVGaTYe.js";import{t as xn}from"./awsClient-Cqp6x3OY.js";import{n as Sn,t as Cn}from"./admin-context-C7nTf-ee.js";import{t as wn}from"./acm-DlvuctCR.js";import{i as Tn,t as En}from"./bedrock-BF8FfWcf.js";import{i as Dn}from"./bedrockAgent-CtELySTw.js";import{A as On,E as kn,M as An,O as jn,S as Mn,_ as Nn,c as Pn,d as Fn,h as In,l as Ln,n as Rn,o as zn,p as Bn,r as Vn,w as Hn,y as Un}from"./ec2-DYgBhYCJ.js";import{n as Wn}from"./ecr-dHrKdmGg.js";import{n as Gn,o as Kn}from"./ecs-BmKTMTV2.js";import{c as qn}from"./eks-Ba3nNOPR.js";import{a as Jn,o as Yn,u as Xn}from"./elbv2-CmXUhudd.js";import{C as Zn,f as Qn,l as $n,p as er,y as tr}from"./iam-DmtL7LFe.js";import{a as nr,d as rr,h as ir,o as ar,r as or}from"./rds-Ca8CaJkU.js";import{n as sr}from"./s3-ClpClaoT.js";import{t as cr}from"./login-DQqbUSU7.js";import{t as lr}from"./run-instances-NtPi-zqD.js";import{t as ur}from"./create-snapshot-BsiV7Bxn.js";import{t as dr}from"./create-service-BdeYCVj9.js";import{t as fr}from"./register-task-definition-DOwYZPxR.js";import{t as pr}from"./run-task-DfVldodn.js";import{t as mr}from"./_knowledgeBaseId-BnI_FbyV.js";import{t as hr}from"./_id-CFuJGRSt.js";import{t as gr}from"./_id-Dr1bSR-H.js";import{t as _r}from"./_id-Dt-3JI-F.js";import{t as vr}from"./_id-Ch9414Sv.js";import{t as yr}from"./_id-C7Cm9Wp_.js";import{t as br}from"./_id-DpdFBQia.js";import{t as xr}from"./_id-BXeH_hZi.js";import{t as Sr}from"./_id-DBMLk4pN.js";import{t as Cr}from"./_id-CR_-tZJK.js";import{t as wr}from"./_id-B-3dqH3s.js";import{t as Tr}from"./_id-98ZkQ3qn.js";import{t as Er}from"./_id-f81dZUoo.js";import{t as Dr}from"./_id-DeKRZoaO.js";import{t as Or}from"./_id-C2FbO4pF.js";import{t as kr}from"./_id-UHU3O-RN.js";import{t as Ar}from"./_id-aWzBlnyD.js";import{t as jr}from"./_clusterName-DRa210J1.js";import{t as Mr}from"./_groupName-CXVunn1Z.js";import{t as Nr}from"./_instanceProfileName-DzTjL4hw.js";import{t as Pr}from"./_policyArn-LEkekaXO.js";import{t as Fr}from"./_roleName-C6IPjG-Q.js";import{t as Ir}from"./_userName-Uz0enZQg.js";import{t as Lr}from"./_id-D_-BlrQG.js";import{t as Rr}from"./_name-eOQ9-J1Q.js";import{t as zr}from"./_id-oini5BVy.js";import{t as Br}from"./_id-CNkL0BtN.js";import{t as Vr}from"./_name-CH7eAiV_.js";import{t as Hr}from"./_bucket-DQCindTO.js";import{t as Ur}from"./_-BBModIMM.js";import{t as Wr}from"./_guardrailId.index-gNwMyQy3.js";import{t as Gr}from"./_guardrailId.edit-B8ea2pKG.js";import{t as Kr}from"./_serviceName-DUMZmBWG.js";import{t as qr}from"./_taskId-QnQ-Yd6e.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Jr=class extends u{#e;#t;#n;constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}build(e,t,n){let r=new x({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Yr(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Yr(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Yr(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=Yr(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){h.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>_(t,e))}findAll(e={}){return this.getAll().filter(t=>_(e,t))}notify(e){h.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return h.batch(()=>Promise.all(e.map(e=>e.continue().catch(l))))}};function Yr(e){return e.options.scope?.id}var Xr=class extends u{#e;constructor(e={}){super(),this.config=e,this.#e=new Map}build(e,t,n){let r=t.queryKey,i=t.queryHash??d(r,t),a=this.get(i);return a||(a=new b({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){this.#e.get(e.queryHash)===e&&(e.destroy(),this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){h.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>y(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>y(e,t)):t}notify(e){h.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){h.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){h.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Zr=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Xr,this.#t=e.mutationCache||new Jr,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=g.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=c.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(o(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=m(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return h.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;h.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return h.batch(()=>{let r=n.findAll(e),i=new Set(r);return r.forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,predicate:e=>i.has(e)},t)})}cancelQueries(e,t={}){let n={revert:!0,...t},r=h.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(l).catch(l)}invalidateQueries(e,t={}){return h.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=h.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(l)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(l)}async query(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t),r=n.isStaleByTime(o(t.staleTime,n))?await n.fetch(t):n.state.data,i=t.select;return i?i(r):r}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(o(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(l).catch(l)}infiniteQuery(e){return e._type=`infinite`,this.query(e)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(l).catch(l)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return c.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(f(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{v(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(f(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{v(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=d(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===s&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};function Qr(){try{return sessionStorage}catch{return}}var $r=`tsr-scroll-restoration-v1_3`,ei=Qr();function ti(){try{return JSON.parse(ei?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}var ni=ti(),ri=`data-scroll-restoration-id`,ii=e=>e.state.__TSR_key||e.href;function ai(e){let t=e.getAttribute(ri);if(t)return`[${ri}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var oi=!1,si=`window`;function ci(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function li(e){let t=new Set;for(let n of e){if(n===si)continue;let e=ci(n);e&&t.add(e)}return t}function ui(e,t){let n=t??e.options.scrollRestoration,r=e._scroll;n&&(r.e=!0);let i=e.options.getScrollRestorationKey||ii,a=new Set,o=e=>{let t=ni[e]||={};for(let e of a)e===document?t[si]={scrollX,scrollY}:e.isConnected&&(t[ai(e)]={scrollX:e.scrollLeft,scrollY:e.scrollTop})};n&&!r.s&&(r.s=!0,oi=!1,history.scrollRestoration=`manual`,document.addEventListener(`scroll`,e=>{oi||a.add(e.target)},!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(i(e.fromLocation)),a.clear()}),addEventListener(`pagehide`,()=>{history.scrollRestoration=`auto`,o(i(e.stores.resolvedLocation.get()??e.stores.location.get()));try{ei?.setItem($r,JSON.stringify(ni))}catch{}}),addEventListener(`pageshow`,e=>{e.persisted&&(history.scrollRestoration=`manual`)})),!r.r&&(r.r=!0,e.subscribe(`onRendered`,t=>{let n=e.options.scrollRestorationBehavior,o=e.options.scrollToTopSelectors,s=r.n,c=r.h,l;if(a.clear(),r.n=!0,r.h=!1,typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let u=i(t.toLocation),d=t.fromLocation&&i(t.fromLocation);if(r.e&&d&&d!==u){let e=ni[d];if(e){let t=ni[u];for(let n in e){if(n===si){if(s)continue}else{let e=ci(n);if(!e||s&&o&&(l??=li(o),l.has(e)))continue}t||=ni[u]={},t[n]??=e[n]}}}oi=!0;try{let e=t.toLocation.hash,i=t.toLocation.state.__hashScrollIntoViewOptions??!0,a=!1;if(s){!e&&o&&(l??=li(o));let t=e&&i&&c,s=r.e?ni[u]:void 0;if(s)for(let e in s){let{scrollX:r,scrollY:i}=s[e];if(e===si){if(t)continue;scrollTo({top:i,left:r,behavior:n}),a=!0}else{let t=ci(e);t&&(t.scrollLeft=r,t.scrollTop=i,l?.delete(t))}}if(!e){let e={top:0,left:0,behavior:n};if(a||scrollTo(e),l)for(let t of l)t.scrollTo(e)}}!a&&e&&i&&document.getElementById(e)?.scrollIntoView(i)}finally{oi=!1}}))}function di(e,t=String){let n;for(let r in e){let i=e[r];i!==void 0&&(n||=new URLSearchParams).set(r,t(i))}return n?n.toString():``}function fi(e){return e?e===`false`?!1:e===`true`?!0:e*0==0&&+e+``===e?+e:e:``}function pi(e){let t=new URLSearchParams(e),n=Object.create(null);for(let[e,r]of t.entries()){let t=n[e];t==null?n[e]=fi(r):Array.isArray(t)?t.push(fi(r)):n[e]=[t,fi(r)]}return n}var mi=/^(?:\s|["[{\d-]|fa|nu|tr)/,hi=_i(JSON.parse),gi=vi(JSON.stringify,JSON.parse);function _i(e){let t=e===JSON.parse;return n=>{n[0]===`?`&&(n=n.substring(1));let r=pi(n);for(let n in r){let i=r[n];if(typeof i==`string`){if(t&&!mi.test(i))continue;try{r[n]=e(i)}catch{}}}return r}}function vi(e,t){let n=t===JSON.parse;function r(r){if(r&&typeof r==`object`)try{return e(r)}catch{}else if(t&&typeof r==`string`){if(n&&!mi.test(r))return r;try{return t(r),e(r)}catch{}}return r}return e=>{let t=di(e,r);return t?`?${t}`:``}}function yi(e){let t=new Map,n,r;return{get(e){let n=t.get(e);if(n)return n.visited=!0,n.value},set(i,a){let o=t.get(i);if(o){o.value=a;return}if(t.size>=e){let e=n?.next().value;for(;!e||e.visited;)e?e.visited=!1:n=t.values(),e=n.next().value;e===r&&(n=void 0),t.delete(e.key)}let s={key:i,value:a,visited:!1};r=s,t.set(i,s)},clear(){t.clear(),n=void 0,r=void 0}}}var bi=4,xi=5;function Si(e){let t=e.names;if(t)return t;let n=[];for(let t of e)typeof t!=`string`&&n.push(t[1]);return e.names=n}function Ci(e,t,n){let r=e.substring(t,n);if(r.charCodeAt(0)===36)return r.length===1?[2,`_splat`,``,void 0]:[1,r.substring(1),``,``];let i=r.indexOf(`{`);if(i>=0){let a=r.indexOf(`}`,i),o=r.charCodeAt(i+1)===45,s=i+(o?3:2);if(a>=0&&r.charCodeAt(s-1)===36&&(!o||s!e.parse&&e.caseSensitive===_&&e.prefix===h&&e.suffix===g);if(y)c=y;else{let e=Ei(r,t,_,h,g);c=e,v.push(e),v.length===2&&i?.push(v)}}r=c}p&&m=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!r||!_&&(n.caseSensitive?v:y??=v.toLowerCase()).startsWith(r)){if(a){if(_)continue;let e=t.slice(u).join(`/`),i=e.slice(-a.length);if((n.caseSensitive?i:i.toLowerCase())!==a||e.length-a.length=0;t--){let n=i.optional[t];s.push({node:n,index:u,skipped:e,statics:f,dynamics:p,optionals:m,extract:h,rawParams:g})}if(!_)for(let e=i.optional.length-1;e>=0;e--){let t=i.optional[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?v:y??=v.toLowerCase();if(n&&!e.startsWith(n)||r&&e.indexOf(r,e.length-r.length)=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?v:y??=v.toLowerCase();if(n&&!e.startsWith(n)||r&&e.indexOf(r,e.length-r.length)=0;e--){let t=i.pathless[e];s.push({node:t,index:u,skipped:d,statics:f,dynamics:p,optionals:m,extract:h,rawParams:g})}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===bi)>(e.node.kind===bi)||t.node.kind===bi==(e.node.kind===bi)&&t.node.depth>e.node.depth)))}function Vi(e,t,n){let r=pe(e),i=`/${r}`,a=t?i:i.toLowerCase(),o=`${a}/`,s={input:({url:e})=>{let n=t?e.pathname:e.pathname.toLowerCase();return n===a?e.pathname=`/`:n.startsWith(o)&&(e.pathname=e.pathname.slice(i.length)),e},output:({url:e})=>(e.pathname=fe(`/${r}${e.pathname}`),e)};return n?{input:({url:e})=>Hi(n,s.input({url:e})),output:({url:e})=>s.output({url:Ui(n,e)})}:s}function Hi(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function Ui(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function Wi(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i}=t,a=new Map,o=n(`idle`),s=n(e),c=n(void 0),l=n([]),u=r(()=>l.get().map(e=>a.get(e).get())),d=r(()=>({status:o.get(),isLoading:o.get()===`pending`,matches:u.get(),location:s.get(),resolvedLocation:c.get()}));function f(e){let t=a.get(e);return t||(t=n(void 0),a.set(e,t)),t}let p={status:o,location:s,resolvedLocation:c,ids:l,matches:u,byRoute:a,__store:d,getMatchStore:f,setMatches:m};function m(e){let t=l.get(),n=e.map(e=>e.routeId);i(()=>{ge(t,n)||l.set(n);for(let e of t)n.includes(e)||a.get(e).set(()=>void 0);for(let t of e){let e=f(t.routeId);e.get()!==t&&e.set(t)}})}return p}var Gi=`__TSR_index`,Ki=`popstate`,qi=`beforeunload`,Ji=/^[\x00-\x20]*(?:[\\/][\t\n\r]*){2,}/;function Yi(e){let t=Ji.exec(e);return t?`/`+e.slice(t[0].length):e}function Xi(e){return/[\x00-\x1f\x7f]/.test(e)&&(e=e.replace(/[\x00-\x1f\x7f]/g,e=>` +\r`.includes(e)?``:encodeURIComponent(e))),Yi(e)}function Zi(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=ea(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Gi];i=Qi(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Gi];i=Qi(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t,n?.ignoreBlocker??!1),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Gi]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r,_getBlockers:()=>e.getBlockers?.()??[]}}function Qi(e,t){let n=ta();return{...t,key:n,__TSR_key:n,[Gi]:e}}function $i(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=t=>Xi(e?.createHref?e.createHref(t):t),c=e?.parseLocation??(()=>ea(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=ta();t.history.replaceState({[Gi]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_=()=>{g&&(S._ignoreSubscribers=!0,(g[2]?t.history.pushState:t.history.replaceState)(g[1],``,g[0]),S._ignoreSubscribers=!1,g=void 0,u=void 0)},v=(t,n,r)=>{let i=e?.createHref?s(n):void 0,a=!!g;a||(u=l),l=ea(n,r),g=[i??l.href,r,g?.[2]||t],a||queueMicrotask(()=>_())},y=e=>{l=c(),S.notify({type:e})},b=async()=>{if(m=!1,f){f=!1;return}let e=c(),n=e.state[Gi]-l.state[Gi],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let r=a();if(typeof document<`u`&&r.length){for(let i of r)if(await i.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(-n),S.notify(u);return}}}l=c(),S.notify(u)},x=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},S=Zi({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>v(!0,e,t),replaceState:(e,t)=>v(!1,e,t),back:e=>(e&&(p=!0,m=!0),t.history.back()),forward:e=>{e&&(p=!0,m=!0),t.history.forward()},go:(e,n)=>{d=!0,n&&(p=!0,m=!0),t.history.go(e)},createHref:e=>s(e),flush:_,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(qi,x,{capture:!0}),t.removeEventListener(Ki,b)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return S._ignoreNextBeforeUnload=e=>{m=!1;try{e=new URL(e,t.document.baseURI).href,m=/^https?:/.test(e)&&(!e.includes(`#`)||e.split(`#`)[0]!==t.location.href.split(`#`)[0])}catch{}},t.addEventListener(qi,x,{capture:!0}),t.addEventListener(Ki,b),t.history.pushState=function(...e){let r=n.apply(t.history,e);return S._ignoreSubscribers||y(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return S._ignoreSubscribers||y(`REPLACE`),n},S}function ea(e,t){let n=Xi(e),r=n.indexOf(`#`),i=n.indexOf(`?`);if(!t){let e=ta();t={[Gi]:0,key:e,__TSR_key:e}}return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t}}function ta(){return(Math.random()+1).toString(36).substring(7)}function na(e,t){return e.protocol!==`http:`&&e.protocol!==`https:`||e.origin!==t||!!e.username||!!e.password}function ra(e){return e.pathname+e.search+e.hash}function ia(e){return e.options.loader||e.options.beforeLoad||e.lazyFn||e.options.component?.preload||e.options.pendingComponent?.preload}function R(e,t){return{fromLocation:t,toLocation:e,pathChanged:t?.pathname!==e.pathname,hrefChanged:t?.href!==e.href,hashChanged:t?.hash!==e.hash}}function z({key:e,__TSR_key:t,__TSR_index:n,__hashScrollIntoViewOptions:r,...i}){return i}function aa(e){return e.findIndex(e=>e.status===`error`||e.status===`notFound`||e._notFound)+1}function oa(e,t,n,r,i,a){r&&(t=t.slice(0,r)),i&&(n=n.slice(0,i));for(let r of t){if(a&&e._tx!==a)return;n.some(e=>e.routeId===r.routeId)||e.routesById[r.routeId].options.onLeave?.(r)}for(let r of n){if(a&&e._tx!==a)return;e.routesById[r.routeId].options[t.some(e=>e.routeId===r.routeId)?`onStay`:`onEnter`]?.(r)}}var sa=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={n:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.startTransition=async e=>(e(),!1),this.update=e=>{let t=this.options;this.options={...t,...e},this.isServer=this.options.isServer??!1??typeof document>`u`,this.staticLocations=new WeakMap,this.protocolAllowlist=new Set(this.options.protocolAllowlist),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:$i()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`;let n=this.options.basepath??`/`,r=this.options.rewrite,i=this.basepath!==n||t?.rewrite!==r||t?.caseSensitive!==this.options.caseSensitive;if(i&&(this.basepath=n,this.rewrite=n!==`/`&&pe(n)?Vi(n,this.options.caseSensitive,r):r),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;e=this.buildRouteTree(),this.setRoutes(e)}if(this.stores)i&&this.stores.location.set(this.latestLocation);else if(this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=Wi(this.latestLocation,e),ui(this)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=ji(this.routeTree,this.options.caseSensitive);return this.options.routeMasks&&Di(this.options.routeMasks,e.processedTree),{...e,resolvePathCache:yi(1e3)}},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{for(let t of this.subscribers)if(t.eventType===e.type)try{t.fn(e)}catch(e){console.error(e)}},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i},a)=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:oe(e),external:!1,searchStr:o,search:O(t?.search,i),hash:oe(r.slice(1)),state:ee(t?.state,a)}}let o=Hi(this.rewrite,new URL(i,this.origin)),s=this.options.parseSearch(o.search),c=this.options.stringifySearch(s);return o.search=c,{href:o.href.replace(o.origin,``),publicHref:i,pathname:oe(Yi(o.pathname)),external:!!this.rewrite&&na(o,this.origin),searchStr:c,search:O(t?.search,s),hash:oe(o.hash.slice(1)),state:ee(t?.state,a)}},r=n(e,e.state),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i,{...i.state,__tempLocation:void 0,key:r.state.key,__TSR_key:r.state.__TSR_key});return e.maskedLocation=r,e}return r},this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>{let t=Object.create(null),n=Ai(ie(e),this.processedTree,!0);return n&&Object.assign(t,n.rawParams),[n?.branch||[this.routesById.__root__],t,n?.route]},this.buildLocation=e=>{{let t=this.staticLocations.get(e);if(t)return t}let t=!1,n=(n={})=>{if(n.href){let e=ea(n.href,{});n={...n,to:Hi(this.rewrite,new URL(e.pathname,this.origin)).pathname,search:this.options.parseSearch(e.search),hash:e.hash.slice(1)}}let r=n._fromLocation||this._pendingLocation||this.latestLocation,i,a=()=>(t=!0,r),o=()=>(t=!0,i??=this.matchRoutesLightweight(r)),s=n.to?`${n.to}`:`.`,c=ne(s[0]===`/`?``:n.unsafeRelative===`path`?a().pathname:n.from??o()[1],s,this.options.trailingSlash,this.resolvePathCache),l=this.routesByPath[ie(c)],u=c.includes(`$`),d;if(l)d=l._branch??=Pi(l);else if(u)d=[];else{let[e,t,n]=this.getMatchedRoutes(c);d=e,this.options.notFoundRoute&&(!n||n.path!==`/`&&t[`**`])&&(d=[...d,this.options.notFoundRoute])}let f=u?l?._interpolation??wi(!1,{fullPath:c},0):void 0,p;for(let e of d){let t=e.options.params?.stringify??e.options.stringifyParams;if(t){let e=o()[3];if(p??=fa(n.params,e),!_e(p))break;p===e&&(p=Object.assign(ae(),p));try{Object.assign(p,t(p))}catch{}}}p??=fa(n.params,pa(n.params,f)?o()[3]:ma);let m=e.leaveParams?c:Yi(oe(f?le(c,f,p,this.pathParamsDecoder):c)),h=ha(d,e._includeValidateSearch),g=()=>{let t=o()[2];if(e._includeValidateSearch&&this.options.search?.strict){let e={};d.forEach(n=>{if(n.options.validateSearch)try{Object.assign(e,da(n.options.validateSearch,{...e,...t}))}catch{}}),t=e}return t},_=h.length?ga(h,g(),n):n.search===!0?g():typeof n.search==`function`?n.search(g()):n.search||ma,v=this.options.stringifySearch(_),y=n.hash===!0?a().hash:typeof n.hash==`function`?n.hash(a().hash):n.hash||void 0,b=y?`#${y}`:``,x=n.state?n.state===!0?a().state:typeof n.state==`function`?n.state(a().state):n.state:ma,S=`${m}${v}${b}`,C,w,T=!1;if(this.rewrite){let e=new URL(S,this.origin),t=e.origin,n=Ui(this.rewrite,e);C=ra(e),na(n,t)?(w=n.href,T=!0):w=Yi(ra(n))}else C=de(S),w=C;return{publicHref:w,href:C,pathname:m,search:_,searchStr:v,state:x,hash:y??``,external:T,unmaskOnReload:n.unmaskOnReload}},r=n(e);if(e.mask)r.maskedLocation=n({from:e.from,...e.mask});else if(this.options.routeMasks){let t=Oi(r.pathname,this.processedTree);if(t){let i=Object.assign(ae(),t.rawParams),{from:a,params:o,...s}=t.route,c=fa(o,i);r.maskedLocation=n({from:e.from,...s,params:c})}}return!t&&e._fromLocation&&!r.maskedLocation&&this.staticLocations.set(e,r),r},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r=n.maskedLocation??n;if(r.external)return ca(this,r.publicHref,{replace:n.replace,ignoreBlocker:t});let i,a=ie(this.latestLocation.href)===ie(n.href)&&me(z(n.state),z(this.latestLocation.state)),o=this._commitPromise,s,c=new Promise(e=>{s=e});if(c.resolve=()=>{s(),o?.resolve()},this._commitPromise=c,a)this.load();else{let{maskedLocation:r,hashScrollIntoView:a,...o}=n;r&&(o={...r,state:{...r.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state={...o.state,__hashScrollIntoViewOptions:a??this.options.defaultHashScrollIntoView??!0},this.shouldViewTransition=e,i=n.replace?`REPLACE`:`PUSH`,this.history[i===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t}),this.history.subscribers.size||this.load({action:{type:i}})}return this._scroll.n=n.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,...a}={})=>{let o=this.buildLocation({...a,_includeValidateSearch:!0});this._pendingLocation=o;let s=this.commitLocation({...o,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return queueMicrotask(()=>{this._pendingLocation===o&&(this._pendingLocation=void 0)}),s},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=n?te(n):void 0;if(a||t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i}),a=t.maskedLocation??t;n??=a.publicHref,r??=a.publicHref}let t=!a&&r?r:n;return ca(this,t,i)}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.load=async e=>{this.updateLatestLocation(),e?.action&&(this._scroll.h=e.action.type===`PUSH`||e.action.type===`REPLACE`),await lo(this,e)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&window.CSS?.supports?.(`selector(:active-view-transition-type(a))`)){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(R(r,i)):t.types;if(a===!1)return e();n={update:e,types:a}}else n=e;return document.startViewTransition(n).updateCallbackDone}return e()},this.invalidate=e=>{let t=this._committed,n=e?.filter,r=this._preloads,i=new Set,a=e=>{(!n||n(e))&&i.add(e.id)};t.forEach(a),this._cache.forEach(a),r?.forEach(e=>e.forEach(a)),this._tx?.[3].forEach(a);let o=[];for(let[e,t]of r??[])t.some(e=>i.has(e.id))&&(r.delete(e),o.push(e));let s=t=>{if(i.has(t.id)){let n=this.routesById[t.routeId],r={...t,invalid:!0,...(e?.forcePending||t.status===`error`||t.status===`notFound`)&&ia(n)?{status:`pending`,error:void 0}:void 0};return t._flight=void 0,r}return t};this._committed=t.map(s);for(let[t,n]of this._cache)i.has(t)&&(n.invalid=!0,e?.forcePending&&(n.status=`pending`));for(let e of i){let t=this._flights?.get(e);this._flights?.delete(e),t&&!t[2]&&o.push(t[1])}for(let e of o)e.abort();return this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.resolveRedirect=e=>{let t=e.options,n=e.headers.get(`Location`)||t.href;if(!n){let e=this.buildLocation(t);n=(e.maskedLocation??e).publicHref||`/`}let r;if(j.test(n)||(r=te(n))&&!this.protocolAllowlist.has(r))throw Error(`Redirect blocked: unsafe protocol`);if(r===`http:`||r===`https:`){let e=new URL(n);e.pathname.startsWith(`//`)?n=e.href:na(e,this.origin)||(n=ra(e),r=void 0)}return r&&(t.reloadDocument=!0),t.href=n,e.headers.set(`Location`,n),e},this.clearCache=e=>{let t=this._cache,n=this._preloads,r=e?.filter,i=[],a=[];for(let[e,n]of t)(!r||r(n))&&(a.push(e),i.push(n));let o=[];for(let[e,t]of n??[])(!r||t.some(r))&&(o.push(e),i.push(...t));for(let e of a)t.delete(e);for(let e of o)n.delete(e);for(let e of i){let t=e._flight;e._flight=void 0,t&&!--t[2]&&(this._flights?.get(e.id)===t&&this._flights.delete(e.id),o.push(t[1]))}for(let e of o)e.abort()},this.loadRouteChunk=xa,this.preloadRoute=e=>uo(this,e),this.matchRoute=(e,t)=>{let n={...e,to:e.to?ne(e.from||``,e.to,this.options.trailingSlash,this.resolvePathCache):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n),i=this.stores.status.get()===`pending`;if(t?.pending&&!i)return!1;let a=t?.pending??!i?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),o=ki(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,a.pathname,this.processedTree);return!o||e.params&&!me(o.rawParams,e.params,!0)?!1:t?.includeSearch??!0?me(a.search,r.search,!0)?o.rawParams:!1:o.rawParams},this.getStoreConfig=t,e.pathParamsAllowedCharacters?.length&&(this.pathParamsDecoder=he(e.pathParamsAllowedCharacters)),this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??gi,parseSearch:e.parseSearch??hi,protocolAllowlist:e.protocolAllowlist??ue}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes(e){Object.assign(this,e),this.lightweightCache=new WeakMap,this.staticLocations=new WeakMap;let t=this.options.notFoundRoute;t&&(t.init(99999999999),this.routesById[t.id]!==t&&(t._interpolation=wi(!1,t,0)),this.routesById[t.id]=t)}matchRoutesInternal(e,t){let[n,r,i]=this.getMatchedRoutes(e.pathname),a=n,o=!1;(i?i.path!==`/`&&r[`**`]:ie(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?_a(this.options.notFoundMode,a):void 0,c=Array(a.length),l=this._committed,u=(e,t)=>{let n=l[t];return n?.routeId===e.id?n:e===this.options.notFoundRoute?l.find(t=>t.routeId===e.id):void 0},d;for(let n=0;ntypeof t!=`string`&&!M.call(e,t[1]))}var ma=Object.freeze({});function ha(e,t){let n=[];for(let r=0;r{let n=t(i.preSearchFilters?i.preSearchFilters.reduce((e,t)=>t(e),e):e);return i.postSearchFilters?i.postSearchFilters.reduce((e,t)=>t(e),n):n});let a=i.validateSearch;t&&a&&n.push(({search:e,next:t,meta:n})=>{let r=t(e);try{let e=da(a,r);if(n&&e)for(let t in e)t in r||(n.defaulted||=new Map).set(t,e[t]);return{...r,...e}}catch{}return r})}return n}function ga(e,t,n){let r=(t,i,a)=>{if(t>=e.length){if(!n.search)return{};if(n.search===!0)return i;let e=se(n.search,i);return a&&(a.explicit=e),e}return e[t]({search:i,next:(e,n)=>{if(n){let n=a||{};return{search:r(t+1,e,n),meta:n}}return r(t+1,e,a)},meta:a})};return r(0,t)}function _a(e,t){if(e!==`root`){let e;for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.options.notFoundComponent)return r.id;e||=r.children&&r.id}if(e)return e}return Ce}function va(e,t){let n=e.options.params?.parse??e.options.parseParams;n&&Object.assign(t,n(t))}function ya(e,t){return e.options[t]?.preload?.()}function ba(e,t){let n=ya(e,`component`),r=ya(e,`pendingComponent`);return t&&(r?r=r.then(t):t()),n&&r?Promise.all([n,r]).then(()=>{}):n??r}function xa(e,t,n){let r=()=>t===!1?void 0:t?ya(e,t):ba(e,n),i=e._lazy;if(i)return i===!0?r():i.then(r);if(!e.lazyFn)return r();let a=e.lazyFn().then(t=>{{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazy=!0}},t=>{throw e._lazy=void 0,t});return e._lazy=a,a.then(r)}function Sa(e){let t=e.findIndex(e=>e.status!==`success`||e._notFound)+1;return t&&t{let i=()=>r(t);t.addEventListener(`abort`,i,{once:!0}),Promise.resolve(e).then(n,r).then(()=>t.removeEventListener(`abort`,i))})}function ja(e,t){return e.routesById[t.routeId]}function Ma(e,t,n){return Te(e)?[Da,e]:ve(e)?(e.routeId||=n,[Ea,e]):t?(typeof e?.then==`function`&&(e=Error(`A Promise was thrown`,{cause:e})),[Ta,e]):[wa,e]}function Na(e,t){let n=Ma(t,!0,e.id);if(n[0]!==Ta)return n;try{e.options.onError?.(n[1])}catch(t){n=Ma(t,!0,e.id)}return n}function Pa(e,t,n,r,i){return i[0].signal.aborted?Oa:Xa(e,t,n,Na(n,r),i)}async function Fa(e,t,n,r,i,a){let[o,s]=t,c=n[0].signal,l=!!n[3];for(let i=n[6]??0;ie.navigate({...t,_fromLocation:o}),buildLocation:e.buildLocation,cause:l?`preload`:r.cause,abortController:n[0],preload:l,matches:s,routeId:u.id};try{let e=r._ctx||=u.options.context?u.options.context({...f,deps:r.loaderDeps,context:d})||{}:void 0;r.context={...d,...e}}catch(a){return La(e,r),[i,Pa(e,t,u,a,n)]}if(c.aborted)return[i,Oa];let p=r.paramsError??r.searchError;if(p!==void 0)return La(e,r),[i,Pa(e,t,u,p,n)];let m=u.options.beforeLoad;if(!m)continue;let h=r.status;i>=a&&(r.status=`pending`,n[7]?.());try{Ba(e,r,`beforeLoad`,n[0]);let a=m({...f,search:r.search,context:r.context,...e.options.additionalContext}),o=await(typeof a?.then==`function`?Aa(a,c):a);if(c.aborted)return[i,Oa];let s=Xa(e,t,u,Ma(o,!1,u.id),n);if(s[0]!==wa)return La(e,r),[i,s];r.context={...r.context,...o}}catch(a){return La(e,r),[i,Pa(e,t,u,a,n)]}finally{r.status=h,Ba(e,r,!1,n[0])}}i()}function Ia(e,t,n){if(!(!n||--n[2])){if(e._flights?.get(t.id)===n){let n=e._tx;if(n&&!n[0].signal.aborted&&!n[3].includes(t)&&n[3].some(e=>e.id===t.id)&&n[3].some(e=>e.isFetching===`beforeLoad`))return;e._flights.delete(t.id)}return n[1]}}function La(e,t){let n=t._flight;t._flight=void 0,Ia(e,t,n)?.abort()}function Ra(e,t,n,r){let i=[];for(let a of t)if(!n?.includes(a)){let t=a._flight;if(a._flight=void 0,r&&t?.[2]===1&&e._flights?.get(a.id)===t&&n?.some(e=>e.id===a.id))t[2]=0;else{let n=Ia(e,a,t);n&&i.push(n)}}for(let e of i)e.abort()}function za(e){for(let t of e){let e=t._flight;e&&e[2]++}}function Ba(e,t,n,r){if(t.isFetching=n,r&&e._tx?.[0]!==r)return;let i=e.stores.byRoute.get(t.routeId),a=i?.get();a?.id===t.id&&i.set({...a,isFetching:n})}function Va(e,t,n,r,i,a,o){let s=t[0];return{params:n.params,location:s,navigate:t=>e.navigate({...t,_fromLocation:s}),cause:o?`preload`:n.cause,abortController:i,preload:o,deps:n.loaderDeps,parentMatchPromise:a,context:n.context,route:r,...e.options.additionalContext}}async function Ha(e,t,n,r,i,a,o){let s=o[0],c=s.signal;if(c.aborted)return Oa;if(!i)return[wa,void 0];let l=n._flight;Ba(e,n,`loader`,s);try{if(!l){let s=new AbortController;l=[Promise.resolve().then(()=>i(Va(e,t,n,r,s,a,!!o[3]))).then(e=>Ma(e,!1,r.id),e=>Ma(e,!0,r.id)).then(t=>(t[0]!==wa&&e._flights?.get(n.id)===l&&(e._flights.delete(n.id),l[2]||s.abort()),t[0]===Ta&&l[2]?Na(r,t[1]):t)),s,1],(e._flights??=new Map).set(n.id,l)}return n._flight=l,n.abortController=l[1],Xa(e,t,r,await Aa(l[0],c),o)}catch(t){if(t!==c||!c.aborted)throw t;return La(e,n),Oa}finally{Ba(e,n,!1,s)}}function Ua(e,t,n){t[0]!==Da&&(e.status=`success`,e.error=void 0,t[0]===wa?(e.loaderData=t[1],e.invalid=!1,e.updatedAt=Date.now(),e.preload=n):e.invalid=!0)}function Wa(e,t,n){let r=e._cache.get(t.id);if(r!==n||e._committed.some(e=>e.id===t.id&&e._flight===t._flight))return;let i={...t,_notFound:void 0,context:{}};i._flight&&i._flight[2]++,e._cache.set(t.id,i),r&&La(e,r)}function Ga(e,t){return t[0]===Ta||t[0]===Ea?{...e,status:t[0]===Ta?`error`:`notFound`,error:t[1],_flight:void 0}:e}function Ka(e,t,n,r,i,a,o){let s=t[1][n],c=ja(e,s),l=!!a[3],u=e._cache.get(s.id),d,f=!1,p;try{if(s.status===`success`&&(d=c.options.shouldReload,typeof d==`function`&&(d=d(Va(e,t,s,c,a[0],i,l))),a[0].signal.aborted&&(p=Oa)),!p){if(s.status!==`success`)f=!0;else{let t=l||s.preload?c.options.preloadStaleTime??e.options.defaultPreloadStaleTime??3e4:c.options.staleTime??e.options.defaultStaleTime??0;f=!!(s.invalid||d||d===void 0&&Date.now()-s.updatedAt>=t&&(a[5]||s.cause===`enter`||a[2].some(e=>e.routeId===s.routeId&&e.id!==s.id)))}}}catch(n){s.invalid=!0,La(e,s),p=Pa(e,t,c,n,a)}let m=c.options.loader,h=typeof m==`function`,g=h?m:m?.handler,_=!l||c.options.preload!==!1,v=_&&m?e._flights?.get(s.id):void 0;v===s._flight||p?v=void 0:v&&!f&&!l&&d===void 0?f=!0:f||(v=void 0);let y=!(!m||!f||s.status!==`success`||l||a[4]||((h?void 0:m.staleReloadMode)??e.options.defaultStaleReloadMode)===`blocking`),b=f&&_,x=b&&!y&&(s.status!==`success`||!!m),S=n>=o?a[7]:void 0,C=c.lazyFn&&c._lazy!==!0?S:void 0;if(b&&!m&&(s.invalid=!1,s.updatedAt=Date.now()),v&&v[2]++,x){let t=s._flight;s._flight=v,Ia(e,s,t)?.abort(),n>=o&&(s.status=`pending`),S?.()}b||(s.isFetching=!1);let w=!p&&x?Ha(e,t,s,c,g,i,a).then(t=>(Ua(s,t,l),t[0]===wa&&(m&&!a[0].signal.aborted&&Wa(e,s,u),n>=o&&(s.status=`pending`)),t)):Promise.resolve(p??[wa,s.loaderData]),T=(async()=>{try{let e=xa(c,void 0,C);e&&await Aa(e,a[0].signal)}catch(r){if(!t[1].some((e,t)=>t<=n&&(e.status===`error`||e.status===`notFound`||e._notFound)))return[n,Pa(e,t,c,r,a)]}let r=await w;x&&r[0]===wa&&s.status===`pending`&&!a[0].signal.aborted&&(s.status=`success`,S?.())})();if(r.push([n,w,T]),!y)return w.then(e=>Ga(s,e));let E={...s,status:`pending`,preload:!1,_flight:v};s.invalid=!1,s.isFetching=`loader`;let D=Ha(e,t,E,c,g,i,a).then(e=>(s.isFetching=!1,Ua(E,e,!1),e));return(t[2]??=[]).push([n,D,T,E]),D.then(e=>Ga(E,e))}async function qa(e,t,n,r,i=0){let a=n?.[1][1],o=a?.routeId?t.findIndex(e=>e.routeId===a.routeId):n?.[0]??t.length-1;o<0&&(o=0);for(let n=o;n>=0;n--){let i=ja(e,t[n]);try{let e=xa(i,!1);e&&await Aa(e,r)}catch(e){if(e===r&&r.aborted)throw e}if(i.options.notFoundComponent)return n}return a?.routeId?o:i}function Ja(e,t){t[2]&&=(Ra(e,t[2].map(e=>e[3])),void 0)}async function Ya(e,t,n,r){let i;try{await Promise.all(e.map(e=>e[1].then(async t=>{let a=e[0];if(!(r&&a>=await r)){if(t[0]>=Da)throw[a,t];!i&&t[0]!==wa&&(i=[a,t],await Promise.all((n??[]).map(e=>{if(!(e[0]<=a))return e[1].then(t=>{if(t[0]===Da)throw[e[0],t]})})))}})))}catch(e){return e}return t??i}function Xa(e,t,n,r,i,a){for(;r[0]===Da;){let o=r[1],s=o.options;try{if((s.href||o.headers.has(`Location`))&&(e.resolveRedirect(o),s.reloadDocument)||(s.reloadDocument?i[3]:i[1]>=20))return r;let n=e.buildLocation({...s,_fromLocation:t[0],_includeValidateSearch:!0}),a=n.maskedLocation??n;if(a.external){let t=o.clone();return t.options={...s},t.headers.set(`Location`,a.publicHref),e.resolveRedirect(t),i[3]?[Da,t]:[Da,t,a]}return[Da,o,n]}catch(e){r=a?[Ta,e]:Na(n,e),a=!0}}return r}async function Za(e,t,n,r,i,a){let o=t[1],s=await i,c=!1,l=o.findIndex(e=>e._notFound),u=t=>t[1][0]===Ea?qa(e,o,t,r.signal):t[0],d=l<0?o.length:l;if((s?.[1][0]??0)>=Da)d=0;else if(s){d=s[2]??=await u(s);for(let e of n){if(e[0]>=d)break;let t=await e[1];if(t[0]!==wa&&t[0]=d)break;let t=await e[2];if(t){s=t;break}}if((s?.[1][0]??0)>=Da){let n=s[1];if(n[0]!==Da||n[1].options.reloadDocument||n[2])return Ja(e,t),n;c=!0,s=[0,[Ta,Error(`Too many redirects`)]]}let f=s?s[2]??await u(s):l;if(f>=0){let i=s?.[1],l=i?.[0],u=o[f],d=i?.[1],p=()=>{i&&(u._notFound=void 0,l===Ta?u.status=`error`:(d.routeId=u.routeId,u.routeId===e.routeTree.id?(u.status=`success`,u._notFound=!0):u.status=`notFound`),u.error=d,u.isFetching=!1)};p(),i||a?.();let m=ja(e,u);try{await Aa(i?Promise.resolve().then(()=>xa(m,l===Ta?`errorComponent`:`notFoundComponent`)):Promise.all([xa(m),xa(m,`notFoundComponent`)]),r.signal)}catch(n){if(n===r.signal&&r.signal.aborted)return Ja(e,t),Oa}i?c&&(r.abort(),await Promise.all([...n.map(e=>e[1]),...n.map(e=>e[2]),...(t[2]??[]).map(e=>e[1])]),Ja(e,t),Ra(e,o),p()):u.status=`success`}return t}async function Qa(e,t,n,r=0,i=t[1].length){let a=t[1];for(let t=r;te._notFound);if(e.options.notFoundMode!==`root`&&s>=0){let t=await qa(e,n,void 0,a,s);n[s]._notFound=void 0,n[t]._notFound=!0,s=t}let c=s<0?n.length:s+1,l=0;for(;l{for(let t=d;t=Da&&(c=0);p()}if(!a.aborted&&!r[3]){let t=[];for(let[n,r]of e._flights??[])r[2]||(e._flights.delete(n),t.push(r[1]));for(let e of t)e.abort()}let h=Za(e,i,u,r[0],Ya(u,m,i[2]),r[7]);i[2]?.length&&(i[3]=Ya(i[2],void 0,void 0,h.then(e=>ka(e)?0:Sa(n).length,()=>0))),o=await h}catch(t){if(Ja(e,i),t===a&&a.aborted)return Oa;throw t}return ka(o)?o:Qa(e,o,a,r[6]===n.length?r[6]:0)}function eo(e,t){if(e._tx!==t)return;let n=t[3],r=e.stores.matches.get(),i=e._pending;for(let a=0;a0){i[3]=setTimeout(()=>eo(e,t),n);return}i[2]=0}let m=n.map(e=>({...e,_flight:void 0}));m[a].status=`pending`;let h=i[4]=e.startTransition(()=>e.stores.setMatches(m),m).then(t=>(t&&e._pending===i&&i[4]===h&&!i[2]&&(i[2]=Date.now()+f),t));return}}function to(e,t){let n=e._pending;(e._tx===t||!e._tx?.[3].some(e=>e.id===n?.[1]))&&(clearTimeout(n?.[3]),e._pending=void 0)}async function no(e,t){let n=e._pending;if(!n)return;clearTimeout(n[3]);let r=n[2]-Date.now();if(!n[4]||r<=0||!Sa(t[3]).some(e=>e.id===n[1]))return;let i;try{await Aa(new Promise(e=>{i=setTimeout(e,r)}),t[0].signal)}catch{}clearTimeout(i)}function ro(e,t){e._committed=t,e.stores.setMatches(t)}function io(e,t,n,r){let i=e._committed,a=e._lifecycleEnd,o=e._cache;for(let e of n)e.preload=!1,r&&(e._assetEnd=void 0);let s=Sa(n).length,c=new Map;{let t=Date.now(),r=new Set;for(let e=0;e=(n.preload?i.options.preloadGcTime??e.options.defaultPreloadGcTime??3e5:i.options.gcTime??e.options.defaultGcTime??3e5)||c.set(n.id,o.get(n.id)===n?n:{...n,_flight:void 0,isFetching:!1,context:{}})}}t[3]=[],e._cache=c;let l=e._lifecycleEnd=aa(n);ro(e,n),Ra(e,[...o.values(),...i].filter(e=>e._flight&&c.get(e.id)!==e),n),oa(e,i,n,a,l,t)}async function ao(e,t){let n=e._tx;for(;n&&n!==t;)t=n,await n[5],n=e._tx}function oo(e,t,n){let r=n[1].options,i=n[2];if(!i)return e.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return e.navigate({href:(i.maskedLocation??i).publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});i._redirects=t[1]+1,e._pendingLocation=i;let a=e.commitLocation({...i,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{e._pendingLocation===i&&(e._pendingLocation=void 0)}),a}async function so(e,t,n,r,i){let a=n.map(e=>({...e}));za(a);for(let t of r)La(e,a[t[0]]),a[t[0]]=t[3];let o=[t[2],a],s;try{s=await Za(e,o,r,t[0],i)}catch(t){throw Ra(e,a),t}if(ka(s)){Ra(e,a),s[0]===Da&&e._tx===t&&e._committed===n&&await oo(e,t,s);return}if(await Qa(e,s,t[0].signal),e._tx!==t||e._committed!==n){Ra(e,a);return}for(let t of a){let n=e._cache.get(t.id);n?._flight&&n._flight===t._flight&&(e._cache.delete(t.id),La(e,n))}ro(e,a),Ra(e,n,a)}async function co(e,t,n,r,i,a){let o=await $a(e,t[2],t[3],[t[0],t[1],e._committed,void 0,i,n,a,r]);if(ka(o)){let n=o[0]===Da&&e._tx===t;if((!n||o[1].options.reloadDocument)&&to(e,t),Ra(e,t[3]),t[3]=[],!n)return;if(e._tx!==t){to(e,t);return}await oo(e,t,o);return}let s=o[1];if(e._tx===t&&await no(e,t),e._tx!==t){to(e,t),Ra(e,s),Ja(e,o);return}let c=t[2],l=R(c,e.stores.resolvedLocation.get()),u=o[2];await e.startViewTransition(async()=>{if(e._tx===t&&await no(e,t),e._tx!==t){to(e,t),Ra(e,s),Ja(e,o);return}let n=await e.startTransition(()=>{to(e,t),io(e,t,s,a),e._tx===t&&(e.emit({type:`onLoad`,...l}),e._tx===t&&e.emit({type:`onBeforeRouteMount`,...l}))},s);if(e._tx!==t){Ja(e,o);return}u?.length&&so(e,t,s,u,o[3]).catch(console.error),e.batch(()=>{e.stores.resolvedLocation.set(c),e.stores.status.set(`idle`),e._tx===t&&e.emit({type:`onResolved`,...l}),n&&e._tx===t&&e.emit({type:`onRendered`,...l})}),e._tx===t&&(e._commitPromise?.resolve(),e._commitPromise=void 0)})}async function lo(e,t){let n=e._tx,r=e.stores.resolvedLocation.get(),i=r??e.stores.location.get(),a=e.latestLocation,o=e._pendingLocation,s=o?.href===a.href?o._redirects??0:0,c=e._handoff,l=c?.[0](),u=new AbortController,d=e._preflight;if(e._preflight=u,l||c?.[1](),d?.abort(),!u.signal.aborted){let t=R(a,r);e.emit({type:`onBeforeNavigate`,...t}),u.signal.aborted||e.emit({type:`onBeforeLoad`,...t})}if(u.signal.aborted){await ao(e,n);return}let f=i.href===a.href,p=u,m=e.matchRoutes(a,{_controller:u});za(m);let h=l?c[1](m):void 0;if(h?p=l:l?.abort(),u.signal.aborted){Ra(e,m),await ao(e,n);return}e._preflight=void 0;let g,_=()=>co(e,y,f,()=>eo(e,y),t?.sync,h),v=t?.sync?new Promise(e=>g=e):Promise.resolve().then(_),y=[p,s,a,m,Date.now(),v.then(()=>ao(e,y))];if(e._tx=y,n){for(let t of e.stores.matches.get()){if(e._tx!==y)break;t.isFetching&&Ba(e,t,!1)}n[0].abort(),Ra(e,n[3],y[3],!0)}if(e._tx!==y){Ra(e,y[3]),y[3]=[],g?.(),await ao(e,y);return}e.batch(()=>{e.stores.status.set(`pending`),e.stores.location.set(a)}),(h||!e._committed.length&&m[0]?.status!==`success`&&!m.some(e=>e._notFound))&&eo(e,y),g?.(_()),await y[5]}async function uo(e,t){let n=e.buildLocation(t);for(let t=0;;t++){let r=e._committed,i=new AbortController,a,o,s;try{try{a=e.matchRoutes(n,{_controller:i}),za(a),o=(e._preloads??=new Map).set(i,a),s=await $a(e,n,a,[i,t,r,!0])}finally{o&&(o=o.delete(i),Ra(e,a)),i.abort()}if(!ka(s))return s[1];if(!o||s.length<3)return;n=s[2]}catch(e){ve(e)||console.error(e);return}}}function fo(e,t){if(e)return typeof e==`string`?e:e[t]}function po(e){return e?.scriptFormat??`module`}function mo(e,t,n){let r=ho(t),i=fo(n,`script`)??r.crossOrigin;return{...po(e)===`iife`?{rel:`preload`,as:`script`}:{rel:`modulepreload`},href:r.href,...i?{crossOrigin:i}:{}}}function ho(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}function go(e,t){if(t.length===0)return;if(t.length===1){e.push(t[0]);return}let n=new Set;for(let r of t){let t=JSON.stringify(r);n.has(t)||(n.add(t),e.push(r))}}function _o(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}function vo({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function yo(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var bo=[],xo=0,{link:So,unlink:Co,propagate:wo,checkDirty:To,shallowPropagate:Eo}=vo({update(e){return e._update()},notify(e){bo[Oo++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,Mo(e))}}),Do=0,Oo=0,ko,Ao=0;function jo(e){try{++Ao,e()}finally{--Ao||No()}}function Mo(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Co(n,e)}function No(){if(!(Ao>0)){for(;Do{i.get(),n.current?(ko=void 0,t.next?.(i._snapshot)):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=ko,o=t?.compare??Object.is;if(n)ko=i,++xo,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{ko=a,n&&(i.flags&=-5),Mo(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&To(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Eo(e)}}else e&32&&(i.flags=e&-33);return ko!==void 0&&So(i,ko,xo),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(wo(e),Eo(e),No())}},i}function Fo(e){let t=()=>{let t=ko;ko=n,++xo,n.depsTail=void 0,n.flags=6;try{return e()}finally{ko=t,n.flags&=-5,Mo(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){let e=this.flags;e&16||e&32&&To(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,Mo(this)}};return t(),n}var B=n(r(),1);function Io(e,t){let n=e[1];e.length=0,n?.(t)}function Lo({t:e}){let t=De(),n=t._rendered??=[];return t.startTransition=(r,i)=>new Promise(a=>{Io(n,!1),n.push(i,a),e(t),B.startTransition(r)}),T(()=>{let e=t.history.subscribe(t.load);t.updateLatestLocation();let r=t.latestLocation,i=t.buildLocation({to:r.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(ie(r.publicHref)!==ie(i.publicHref))return t.commitLocation({...i,replace:!0,ignoreBlocker:!0}),e;let a=t.stores.resolvedLocation.get();return a?.href===r.href&&a.state.__TSR_key===r.state.__TSR_key?n.push(t.stores.matches.get(),e=>{e&&t.emit({type:`onRendered`,...R(a,a)})}):t._tx||t.load({sync:!0}).catch(console.error),e},[t,t.history]),null}var V=t();function Ro(){let e=De(),t=e.routesById[Ce],n=Se(e,t),r=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Lo,{t:B.useState()[1]}),e.ssr?(0,V.jsx)(zo,{}):(0,V.jsx)(B.Suspense,{fallback:n,children:(0,V.jsx)(zo,{})})]});return e.options.InnerWrap?(0,V.jsx)(e.options.InnerWrap,{children:r}):r}function zo(){let e=De(),t=e._rendered,n=ke(e.stores.matches,e=>t[0]??e),r=n[0],i=r?.routeId;T(()=>{t[0]===n&&Io(t,!0)},[t,n]);let a=i?(0,V.jsx)(N,{routeId:i}):null;return e.options.disableGlobalCatchBoundary?a:(0,V.jsx)(ye,{getResetKey:()=>r,onCatch:void 0,children:a})}var Bo=e=>({createMutableStore:Po,createReadonlyStore:Po,batch:jo}),H=e=>new Vo(e),Vo=class extends sa{constructor(e){super(e,Bo)}};function Ho({router:e,children:t,...n}){_e(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,V.jsx)(Oe.Provider,{value:e,children:t});return e.options.Wrap?(0,V.jsx)(e.options.Wrap,{children:r}):r}function Uo({router:e,...t}){return(0,V.jsx)(Ho,{router:e,...t,children:(0,V.jsx)(Ro,{})})}function Wo(e){let t=De();return ke(t.stores.location,C(e,t))}function Go(e,t){if(t)for(let[n,r]of Object.entries(t))n!==`suppressHydrationWarning`&&r!==void 0&&r!==!1&&e.setAttribute(n,typeof r==`boolean`?``:String(r))}function Ko(e){let{attrs:t,children:n,nonce:r,preventScriptHoist:i}=e,a=B.useMemo(()=>n===void 0?void 0:{__html:n},[n]);switch(e.tag){case`title`:return(0,V.jsx)(`title`,{...t,suppressHydrationWarning:!0,children:n});case`meta`:return(0,V.jsx)(`meta`,{...t,suppressHydrationWarning:!0});case`link`:return(0,V.jsx)(`link`,{...t,precedence:t?.precedence??(t?.rel===`stylesheet`?`default`:void 0),nonce:r,suppressHydrationWarning:!0});case`style`:return e.inlineCss,(0,V.jsx)(`style`,{...t,dangerouslySetInnerHTML:a,nonce:r});case`script`:return(0,V.jsx)(qo,{attrs:t,preventScriptHoist:i,children:n});default:return null}}function qo({attrs:e,children:t,preventScriptHoist:n}){De();let r=Ee(),i=B.useMemo(()=>t===void 0?void 0:{__html:t},[t]),a=typeof e?.type==`string`&&e.type!==``&&e.type!==`text/javascript`&&e.type!==`module`;if(B.useEffect(()=>{if(!a){if(e?.src){let t=document.createElement(`a`);t.href=e.src;let n=t.href;for(let e of document.scripts)if(e.src===n)return;let r=document.createElement(`script`);return Go(r,e),document.head.appendChild(r),()=>r.remove()}if(typeof t==`string`){let n=typeof e?.type==`string`?e.type:`text/javascript`,r=typeof e?.nonce==`string`?e.nonce:void 0;for(let e of document.scripts){if(e.hasAttribute(`src`))continue;let i=e.getAttribute(`type`)??`text/javascript`,a=e.getAttribute(`nonce`)??void 0;if(e.textContent===t&&i===n&&a===r)return}let i=document.createElement(`script`);return i.textContent=t,Go(i,e),document.head.appendChild(i),()=>i.remove()}}},[e,t,a]),a&&typeof t==`string`)return(0,V.jsx)(`script`,{...e,suppressHydrationWarning:!0,dangerouslySetInnerHTML:i});if(!r){if(e?.src)return(0,V.jsx)(`script`,{...e,suppressHydrationWarning:!0});if(typeof t==`string`)return(0,V.jsx)(`script`,{...e,dangerouslySetInnerHTML:i,suppressHydrationWarning:!0})}return null}function Jo(e,t,n,r){n=Ca(n);let i=n.map(e=>e.meta).filter(e=>e!==void 0),a=[],o={},s;for(let e=i.length-1;e>=0;e--){let n=i[e];for(let e=n.length-1;e>=0;e--){let r=n[e];if(r){if(r.title)s||={tag:`title`,children:r.title};else if(`script:ld+json`in r)try{let e=JSON.stringify(r[`script:ld+json`]);a.push({tag:`script`,attrs:{type:`application/ld+json`},children:ce(e)})}catch{}else{let e=r.name??r.property;if(e){if(o[e])continue;o[e]=!0}a.push({tag:`meta`,attrs:{...r,nonce:t}})}}}}s&&a.push(s),t&&a.push({tag:`meta`,attrs:{property:`csp-nonce`,content:t}}),a.reverse();let c=n.flatMap(e=>e.links??[]).filter(e=>e!==void 0).map(e=>({tag:`link`,attrs:{...e,nonce:t}})),l=e.ssr?.manifest,u=[];l&&(n.forEach(e=>{(l.routes[e.routeId]?.css)?.forEach(e=>{let n=_o(e);u.push({tag:`link`,attrs:{rel:`stylesheet`,...n,crossOrigin:fo(r,`stylesheet`)??n.crossOrigin,suppressHydrationWarning:!0,nonce:t}})})}),l.inlineStyle&&u.push({tag:`style`,attrs:{...l.inlineStyle.attrs,nonce:t},children:l.inlineStyle.children,inlineCss:!0}));let d=[];l&&n.forEach(e=>{l.routes[e.routeId]?.preloads?.forEach(e=>{d.push({tag:`link`,attrs:{...mo(l,e,r),nonce:t}})})});let f=n.flatMap(e=>e.styles??[]).filter(e=>e!==void 0).map(({children:e,...n})=>({tag:`style`,attrs:{...n,nonce:t},children:e})),p=n.flatMap(e=>e.headScripts??[]).filter(e=>e!==void 0).map(({children:e,...n})=>({tag:`script`,attrs:{...n,nonce:t},children:e})),m=[];return go(m,a),m.push(...d),go(m,c),m.push(...u),go(m,f),go(m,p),m}var Yo=e=>{let t=De(),n=t.options.ssr?.nonce,r=B.useCallback(r=>Jo(t,n,r,e),[e,n,t]);return ke(t.stores.matches,r,{compare:me})};function Xo(e){let t=Yo(e.assetCrossOrigin),n=De().options.ssr?.nonce;return(0,V.jsx)(V.Fragment,{children:t.map(e=>(0,B.createElement)(Ko,{...e,key:`tsr-meta-${JSON.stringify(e)}`,nonce:n}))})}var Zo=e((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&te(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&te(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function te(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,te(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),Qo=e(((e,t)=>{t.exports=Zo()})),$o=e((e=>{var t=Qo(),n=r(),i=Me();function a(e){var t=`https://react.dev/errors/`+e;if(1be||(e.current=ye[be],ye[be]=null,be--)}function N(e,t){be++,ye[be]=e.current,e.current=t}var Ce=xe(null),we=xe(null),Te=xe(null),Ee=xe(null);function De(e,t){switch(N(Te,t),N(we,e),N(Ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}Se(Ce),N(Ce,e)}function Oe(){Se(Ce),Se(we),Se(Te)}function ke(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,N(Ee,e)),t=Ce.current;var n=dp(t,e.type);t!==n&&(N(we,e),N(Ce,n))}function Ae(e){we.current===e&&(Se(Ce),Se(we)),Ee.current===e&&(Se(Ee),sh._currentValue=ve)}var je,Ne;function Pe(e){if(je===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);je=t&&t[1]||``,Ne=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Fe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Pe(n):``}function Le(e,t){switch(e.tag){case 26:case 27:case 5:return Pe(e.type);case 16:return Pe(`Lazy`);case 13:return e.child!==t&&t!==null?Pe(`Suspense Fallback`):Pe(`Suspense`);case 19:return Pe(`SuspenseList`);case 0:case 15:return Ie(e.type,!1);case 11:return Ie(e.type.render,!1);case 1:return Ie(e.type,!0);case 31:return Pe(`Activity`);case 30:return Pe(`ViewTransition`);default:return``}}function Re(e){try{var t=``,n=null;do t+=Le(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var ze=Object.prototype.hasOwnProperty,Be=t.unstable_scheduleCallback,Ve=t.unstable_cancelCallback,He=t.unstable_shouldYield,Ue=t.unstable_requestPaint,We=t.unstable_now,P=t.unstable_getCurrentPriorityLevel,Ge=t.unstable_ImmediatePriority,Ke=t.unstable_UserBlockingPriority,qe=t.unstable_NormalPriority,F=t.unstable_LowPriority,I=t.unstable_IdlePriority,Je=t.log,Ye=t.unstable_setDisableYieldValue,Xe=null,Ze=null;function Qe(e){if(typeof Je==`function`&&Ye(e),Ze&&typeof Ze.setStrictMode==`function`)try{Ze.setStrictMode(Xe,e)}catch{}}var $e=Math.clz32?Math.clz32:nt,et=Math.log,tt=Math.LN2;function nt(e){return e>>>=0,e===0?32:31-(et(e)/tt|0)|0}var rt=256,it=262144,at=4194304;function ot(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function st(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=ot(n))):i=ot(o):i=ot(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=ot(n))):i=ot(o)):i=ot(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function ct(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function lt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function pt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function mt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0=pr),gr=` `,_r=!1;function vr(e,t){switch(e){case`keyup`:return dr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function yr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var br=!1;function xr(e,t){switch(e){case`compositionend`:return yr(t);case`keypress`:return t.which===32?(_r=!0,gr):null;case`textInput`:return e=t.data,e===gr&&_r?null:e;default:return null}}function Sr(e,t){if(br)return e===`compositionend`||!fr&&vr(e,t)?(e=Pn(),Nn=Mn=jn=null,br=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Gr(n)}}function qr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?qr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Wr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Wr(e.document)}return t}function Yr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Xr=On&&`documentMode`in document&&11>=document.documentMode,Zr=null,Qr=null,$r=null,ei=!1;function ti(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ei||Zr==null||Zr!==Wr(r)||(r=Zr,`selectionStart`in r&&Yr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$r&&Ur($r,r)||($r=r,r=qf(Qr,`onSelect`),0>=o,i-=o,Zi=1<<32-$e(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),z&&$i(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),z&&$i(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return z&&$i(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),z&&$i(i,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===k&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case D:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===k){if(r.tag===7){n(e,r.sibling),c=i(r,o.props.children),co(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ce&&to(l)===r.type){n(e,r.sibling),c=i(r,o.props),co(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===k?(c=Ri(o.props.children,e.mode,c,o.key),co(c,o),c.return=e,e=c):(c=Li(o.type,o.key,o.props,null,e.mode,c),co(c,o),c.return=e,e=c)}return s(e);case O:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=i(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Vi(o,e.mode,c),c.return=e,e=c}return s(e);case ce:return o=to(o),_(e,r,o,c)}if(_e(o))return h(e,r,o,c);if(he(o)){if(l=he(o),typeof l!=`function`)throw Error(a(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,so(o),c);if(o.$$typeof===re)return _(e,r,Ea(e,o),c);lo(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,o),c.return=e,e=c):(n(e,r),c=zi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{oo=0;var i=_(e,t,n,r);return ao=null,i}catch(t){if(t===Ya||t===Za)throw t;var a=Ni(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var fo=uo(!0),po=uo(!1),mo=!1;function ho(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function go(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function _o(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function vo(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,q&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Ai(e),ki(e,null,n),t}return Ei(e,r,t,n),Ai(e)}function yo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}function bo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var xo=!1;function So(){if(xo){var e=Ba;if(e!==null)throw e}}function Co(e,t,n,r){xo=!1;var i=e.updateQueue;mo=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Y&f)===f:(r&f)===f){f!==0&&f===za&&(xo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=T({},d,f);break a;case 2:mo=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),od|=o,e.lanes=o,e.memoizedState=d}}function wo(e,t){if(typeof e!=`function`)throw Error(a(191,e));e.call(t)}function To(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=j.T,s={};s.types=o===null?null:o.types,j.T=s,uc(e,!1,t,n);try{var c=i(),l=j.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?lc(e,t,Ua(c,r),Ad(e)):lc(e,t,r,Ad(e))}catch(n){lc(e,t,{then:function(){},status:`rejected`,reason:n},Ad())}finally{M.p=a,o!==null&&s.types!==null&&(o.types=s.types),j.T=o}}function $s(){}function ec(e,t,n,r){if(e.tag!==5)throw Error(a(476));var i=tc(e).queue;Qs(e,i,t,ve,n===null?$s:function(){return nc(e),n(r)})}function tc(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ve,baseState:ve,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ds,lastRenderedState:ve},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ds,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function nc(e){var t=tc(e);t.next===null&&(t=e.alternate.memoizedState),lc(e,t.next.queue,{},Ad())}function rc(){return Ta(sh)}function ic(){return os().memoizedState}function ac(){return os().memoizedState}function oc(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Ad();e=_o(n);var r=vo(t,e,n);r!==null&&(Nd(r,t,n),yo(r,t,n)),t={cache:Ma()},e.payload=t;return}t=t.return}}function sc(e,t,n){var r=Ad();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},dc(e)?fc(t,n):(n=Di(e,t,n,r),n!==null&&(Nd(n,e,r),pc(n,t,r)))}function cc(e,t,n){lc(e,t,n,Ad())}function lc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(dc(e))fc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Hr(s,o))return Ei(e,t,i,0),$u===null&&Ti(),!1}catch{}if(n=Di(e,t,i,r),n!==null)return Nd(n,e,r),pc(n,t,r),!0}return!1}function uc(e,t,n,r){if(r={lane:2,revertLane:Nf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},dc(e)){if(t)throw Error(a(479))}else t=Di(e,n,r,2),t!==null&&Nd(t,e,2)}function dc(e){var t=e.alternate;return e===H||t!==null&&t===H}function fc(e,t){Wo=Uo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function pc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,gt(e,n)}}var mc={readContext:Ta,use:ls,useCallback:Xo,useContext:Xo,useEffect:Xo,useImperativeHandle:Xo,useLayoutEffect:Xo,useInsertionEffect:Xo,useMemo:Xo,useReducer:Xo,useRef:Xo,useState:Xo,useDebugValue:Xo,useDeferredValue:Xo,useTransition:Xo,useSyncExternalStore:Xo,useId:Xo,useHostTransitionStatus:Xo,useFormState:Xo,useActionState:Xo,useOptimistic:Xo,useMemoCache:Xo,useCacheRefresh:Xo,useEffectEvent:Xo},hc={readContext:Ta,use:ls,useCallback:function(e,t){return as().memoizedState=[e,t===void 0?null:t],e},useContext:Ta,useEffect:zs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Ls(4194308,4,Gs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ls(4194308,4,e,t)},useInsertionEffect:function(e,t){Ls(4,2,e,t)},useMemo:function(e,t){var n=as();t=t===void 0?null:t;var r=e();if(Go){Qe(!0);try{e()}finally{Qe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=as();if(n!==void 0){var i=n(t);if(Go){Qe(!0);try{n(t)}finally{Qe(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=sc.bind(null,H,e),[r.memoizedState,e]},useRef:function(e){var t=as();return e={current:e},t.memoizedState=e},useState:function(e){e=xs(e);var t=e.queue,n=cc.bind(null,H,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:qs,useDeferredValue:function(e,t){return Xs(as(),e,t)},useTransition:function(){var e=xs(!1);return e=Qs.bind(null,H,e.queue,!0,!1),as().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=H,i=as();if(z){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),$u===null)throw Error(a(349));Y&127||gs(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,zs(vs.bind(null,r,o,e),[e]),r.flags|=2048,Fs(9,{destroy:void 0},_s.bind(null,r,o,n,t),null),n},useId:function(){var e=as(),t=$u.identifierPrefix;if(z){var n=Qi,r=Zi;n=(r&~(1<<32-$e(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Ko++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(i,{is:r.is}):s.createElement(i)}}o[Ct]=t,o[wt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&pl(t)}}return vl(t),t.subtreeFlags&=-33554433,ml(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&pl(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(a(166));if(e=Te.current,da(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=ia,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[Ct]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||$f(e.nodeValue,n)),e||ca(t,!0)}else e=lp(e).createTextNode(r),e[Ct]=t,t.stateNode=e}return vl(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=da(t),n!==null){if(e===null){if(!r)throw Error(a(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(a(557));e[Ct]=t}else fa(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;vl(t),e=!1}else n=pa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Io(t),t):(Io(t),null);if(t.flags&128)throw Error(a(558))}return vl(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=da(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(a(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(a(317));i[Ct]=t}else fa(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;vl(t),i=!1}else i=pa(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Io(t),t):(Io(t),null)}return Io(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),gl(t,t.updateQueue),vl(t),null);case 4:return Oe(),e===null&&Uf(t.stateNode.containerInfo),t.flags|=67108864,vl(t),null;case 10:return ya(t.type),vl(t),null;case 19:if(Ro(t),r=t.memoizedState,r===null)return vl(t),null;if(i=!!(t.flags&128),o=r.rendering,o===null){if(i)_l(r,!1);else{if(ad!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=zo(e),o!==null){for(t.flags|=128,_l(r,!1),e=o.updateQueue,t.updateQueue=e,gl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Ii(n,e),n=n.sibling;return V(t,Lo.current&1|2),z&&$i(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&We()>hd&&(t.flags|=128,i=!0,_l(r,!1),t.lanes=4194304)}}else{if(!i){if(e=zo(o),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,gl(t,e),_l(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!z)return vl(t),null}else 2*We()-r.renderingStartTime>hd&&n!==536870912&&(t.flags|=128,i=!0,_l(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=We(),e.sibling=null,o=Lo.current,o=i?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||z?V(t,o):(n=o,N(jo,t),N(Lo,n),Mo===null&&(Mo=t)),z&&$i(t,r.treeForkCount),e}return vl(t),null;case 22:case 23:return Io(t),Ao(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(vl(t),t.subtreeFlags&6&&(t.flags|=8192)):vl(t),n=t.updateQueue,n!==null&&gl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&Se(Ga),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ya(ja),vl(t),null;case 25:return null;case 30:return t.flags|=33554432,vl(t),null}throw Error(a(156,t.tag))}function bl(e,t){switch(na(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ya(ja),Oe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ae(t),null;case 31:if(t.memoizedState!==null){if(Io(t),t.alternate===null)throw Error(a(340));fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Io(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ro(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Oe(),null;case 10:return ya(t.type),null;case 22:case 23:return Io(t),Ao(),e!==null&&Se(Ga),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ya(ja),null;case 25:return null;default:return null}}function xl(e,t){switch(na(t),t.tag){case 3:ya(ja),Oe();break;case 26:case 27:case 5:Ae(t);break;case 4:Oe();break;case 31:t.memoizedState!==null&&Io(t);break;case 13:Io(t);break;case 19:Ro(t);break;case 10:ya(t.type);break;case 22:case 23:Io(t),Ao(),e!==null&&Se(Ga);break;case 24:ya(ja)}}function Sl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Q(t,t.return,e)}}function Cl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Q(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Q(t,t.return,e)}}function wl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{To(t,n)}catch(t){Q(e,e.return,t)}}}function Tl(e,t,n){n.props=Sc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Q(e,t,n)}}function El(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=vi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);p(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Q(e,t,n)}}function Dl(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Q(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Q(e,t,n)}else n.current=null}}function Ol(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Ct]=e,Lt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,i).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Kr(s,h),v=Kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,j.T=null,n=Cd,Cd=null;var o=yd,s=xd;if(vd=0,bd=yd=null,xd=0,q&6)throw Error(a(331));var c=q;if(q|=4,Ju(o.current),Bu(o,o.current,s,n),q=c,Ef(0,!1),Ze&&typeof Ze.onPostCommitFiberRoot==`function`)try{Ze.onPostCommitFiberRoot(Xe,o)}catch{}return!0}finally{M.p=i,j.T=r,lf(e,t)}}function ff(e,t,n){t=Ui(n,t),t=Oc(e.stateNode,t,2),e=vo(e,t,2),e!==null&&(pt(e,2),Tf(e))}function Q(e,t,n){if(e.tag===3)ff(e,e,n);else for(;t!==null;){if(t.tag===3){ff(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(_d===null||!_d.has(r))){e=Ui(n,e),n=kc(2),r=vo(t,n,2),r!==null&&(Ac(n,r,t,e),pt(r,2),Tf(r));break}}t=t.return}}function pf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Qu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(rd=!0,i.add(n),e=mf.bind(null,e,t,n),t.then(e,e))}function mf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,$u===e&&(Y&n)===n&&(ad===4||ad===3&&(Y&62914560)===Y&&300>We()-pd?q&2?cd|=n:Bd(e,0):cd|=n,ud===Y&&(ud=0)),Tf(e)}function hf(e,t){t===0&&(t=dt()),e=Oi(e,t),e!==null&&(pt(e,t),Tf(e))}function gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),hf(e,n)}function _f(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(a(314))}r!==null&&r.delete(t),hf(e,n)}function vf(e,t){return Be(e,t)}var yf=null,bf=null,xf=!1,Sf=!1,Cf=!1,wf=0;function Tf(e){e!==bf&&e.next===null&&(bf===null?yf=bf=e:bf=bf.next=e),Sf=!0,xf||(xf=!0,Mf())}function Ef(e,t){if(!Cf&&Sf){Cf=!0;do for(var n=!1,r=yf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-$e(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,jf(r,a))}else a=Y,a=st(r,r===$u?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||ct(r,a)||(n=!0,jf(r,a))}r=r.next}while(n);Cf=!1}}function Df(){Of()}function Of(){Sf=xf=!1;var e=0;wf!==0&&hp()&&(e=wf);for(var t=We(),n=null,r=yf;r!==null;){var i=r.next,a=kf(r,t);a===0?(r.next=null,n===null?yf=i:n.next=i,i===null&&(bf=n)):(n=r,(e!==0||a&3)&&(Sf=!0)),r=i}vd!==0&&vd!==5||Ef(e,!1),wf!==0&&(wf=0)}function kf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=rn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Lt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+rn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+rn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+rn(n.imageSizes)+`"]`)):i+=`[href="`+rn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[jt]=!0,o.onload=o.onerror=function(){Rt(o)}),Lt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+rn(r)+`"][href="`+rn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Lt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=It(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Lt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var i=(i=Te.current)?bm(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=It(i).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=It(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(i,e,o,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=It(i).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Pm(e){return`href="`+rn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[jt]){r.loading=1;return}}else t=e.createElement(`link`),t[jt]=!0,t.onload=t.onerror=Rt.bind(null,t),np(t,`link`,n),Lt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+rn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+rn(n.href)+`"]`);if(r)return t.instance=r,Lt(r),r;var i=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Lt(r),np(r,`style`,i),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Pm(n.href);var o=e.querySelector(Fm(i));if(o)return t.state.loading|=4,t.instance=o,Lt(o),o;r=Im(n),(i=vm.get(i))&&Hm(r,i),o=(e.ownerDocument||e).createElement(`link`),Lt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(i=e.querySelector(zm(o)))?(t.instance=i,Lt(i),i):(r=n,(i=vm.get(o))&&(r=T({},n),Um(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),Lt(i),np(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Lt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Lt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=$o()}))(),1),U=i(),ts=(0,B.createContext)(void 0);function ns(e,t){try{let t=localStorage.getItem(e);if(t===`light`||t===`dark`||t===`system`)return t}catch{}return t}function rs(e){let t=(0,U.c)(14),{children:n,defaultTheme:r,storageKey:i}=e,a=r===void 0?`dark`:r,o=i===void 0?`ui-theme`:i,s;t[0]!==a||t[1]!==o?(s=()=>ns(o,a),t[0]=a,t[1]=o,t[2]=s):s=t[2];let[c,l]=(0,B.useState)(s),u,d;t[3]===c?(u=t[4],d=t[5]):(u=()=>{let e=window.document.documentElement;if(e.classList.remove(`light`,`dark`),c===`system`){let t=window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`;e.classList.add(t);return}e.classList.add(c)},d=[c],t[3]=c,t[4]=u,t[5]=d),(0,B.useEffect)(u,d);let f;t[6]===o?f=t[7]:(f=e=>{try{localStorage.setItem(o,e)}catch{}l(e)},t[6]=o,t[7]=f);let p;t[8]!==f||t[9]!==c?(p={theme:c,setTheme:f},t[8]=f,t[9]=c,t[10]=p):p=t[10];let m=p,h;return t[11]!==n||t[12]!==m?(h=(0,V.jsx)(ts.Provider,{value:m,children:n}),t[11]=n,t[12]=m,t[13]=h):h=t[13],h}function is(){let e=(0,B.useContext)(ts);if(e===void 0)throw Error(`useTheme must be used within a ThemeProvider`);return e}var as={name:`activity`,size:24,node:[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]};as.node;var os=I(as),ss={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};ss.node;var cs=I(ss),ls={name:`boxes`,size:24,node:[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]};ls.node;var us=I(ls),ds={name:`brain`,size:24,node:[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]};ds.node;var fs=I(ds),ps={name:`circle-alert`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]],aliases:[`alert-circle`]};ps.node;var ms=I(ps),hs={name:`container`,size:24,node:[[`path`,{d:`M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z`,key:`1t2lqe`}],[`path`,{d:`M10 21.9V14L2.1 9.1`,key:`o7czzq`}],[`path`,{d:`m10 14 11.9-6.9`,key:`zm5e20`}],[`path`,{d:`M14 19.8v-8.1`,key:`159ecu`}],[`path`,{d:`M18 17.5V9.4`,key:`11uown`}]]};hs.node;var gs=I(hs),_s={name:`crosshair`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]};_s.node;var vs=I(_s),ys={name:`database`,size:24,node:[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]};ys.node;var bs=I(ys),xs={name:`file-stack`,size:24,node:[[`path`,{d:`M11 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1`,key:`likhh7`}],[`path`,{d:`M16 16a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1`,key:`17ky3x`}],[`path`,{d:`M21 6a2 2 0 0 0-.586-1.414l-2-2A2 2 0 0 0 17 2h-3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1z`,key:`1hyeo0`}]]};xs.node;var Ss=I(xs),Cs={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};Cs.node;var ws=I(Cs),Ts={name:`id-card`,size:24,node:[[`path`,{d:`M13 19a4 4 0 00-8 0`,key:`cugzd5`}],[`path`,{d:`M16 10h2`,key:`8sgtl7`}],[`path`,{d:`M16 14h2`,key:`epxaof`}],[`circle`,{cx:`9`,cy:`12`,r:`3`,key:`u3jwor`}],[`rect`,{x:`2`,y:`5`,width:`20`,height:`14`,rx:`2`,key:`qneu4z`}]]};Ts.node;var Es=I(Ts),Ds={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};Ds.node;var Os=I(Ds),ks={name:`layers`,size:24,node:[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]],aliases:[`layers-3`]};ks.node;var As=I(ks),js={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};js.node;var Ms=I(js),Ns={name:`layout-list`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}],[`path`,{d:`M14 4h7`,key:`3xa0d5`}],[`path`,{d:`M14 9h7`,key:`1icrd9`}],[`path`,{d:`M14 15h7`,key:`1mj8o2`}],[`path`,{d:`M14 20h7`,key:`11slyb`}]]};Ns.node;var Ps=I(Ns),Fs={name:`log-out`,size:24,node:[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]};Fs.node;var Is=I(Fs),Ls={name:`map-pin`,size:24,node:[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]};Ls.node;var Rs=I(Ls),zs={name:`message-square`,size:24,node:[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]};zs.node;var Bs=I(zs),Vs={name:`moon`,size:24,node:[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]};Vs.node;var Hs=I(Vs),Us={name:`package`,size:24,node:[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]};Us.node;var Ws=I(Us),Gs={name:`panel-left`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]],aliases:[`sidebar`]};Gs.node;var Ks=I(Gs),qs={name:`route`,size:24,node:[[`circle`,{cx:`6`,cy:`19`,r:`3`,key:`1kj8tv`}],[`path`,{d:`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`,key:`1d8sl`}],[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}]]};qs.node;var Js=I(qs),Ys={name:`shield-check`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]};Ys.node;var Xs=I(Ys),Zs={name:`sun`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]};Zs.node;var Qs=I(Zs),$s={name:`user-cog`,size:24,node:[[`path`,{d:`M10 15H6a4 4 0 0 0-4 4v2`,key:`1nfge6`}],[`path`,{d:`m14.305 16.53.923-.382`,key:`1itpsq`}],[`path`,{d:`m15.228 13.852-.923-.383`,key:`eplpkm`}],[`path`,{d:`m16.852 12.228-.383-.923`,key:`13v3q0`}],[`path`,{d:`m16.852 17.772-.383.924`,key:`1i8mnm`}],[`path`,{d:`m19.148 12.228.383-.923`,key:`1q8j1v`}],[`path`,{d:`m19.53 18.696-.382-.924`,key:`vk1qj3`}],[`path`,{d:`m20.772 13.852.924-.383`,key:`n880s0`}],[`path`,{d:`m20.772 16.148.924.383`,key:`1g6xey`}],[`circle`,{cx:`18`,cy:`15`,r:`3`,key:`gjjjvw`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};$s.node;var ec=I($s),tc={name:`users-round`,size:24,node:[[`path`,{d:`M18 21a8 8 0 0 0-16 0`,key:`3ypg7q`}],[`circle`,{cx:`10`,cy:`8`,r:`5`,key:`o932ke`}],[`path`,{d:`M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3`,key:`10s06x`}]],aliases:[`users-2`]};tc.node;var nc=I(tc),rc={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};rc.node;var ic=I(rc);function ac(e,t){return t!=null&&!Vt(t)?0:typeof e==`function`?e():e}function oc(e,t,n){let r=ac(e,n);return typeof r==`number`?r:r?.[t]}function sc(e){return typeof e==`function`?e():e}function cc(e,t){return t||e===`click`||e===`mousedown`}function lc(e){return e?.includes(`mouse`)&&e!==`mousedown`}var uc=B.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new Dt,currentIdRef:{current:null},currentContextRef:{current:null}});function dc(e,t){e.current=t.current}function fc(e){let{children:t,delay:n,timeoutMs:r=0}=e,i=B.useRef(n),a=B.useRef(n),o=B.useRef(null),s=B.useRef(null),c=At();return ft(()=>{if(a.current=n,!o.current){i.current=n;return}i.current={open:oc(i.current,`open`),close:oc(n,`close`)}},[n,o,i,a]),(0,V.jsx)(uc.Provider,{value:B.useMemo(()=>({hasProvider:!0,delayRef:i,initialDelayRef:a,currentIdRef:o,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:t})}function pc(e,t={open:!1}){let{open:n}=t,r=`rootStore`in e?e.rootStore:e,i=r.useState(`floatingId`),{currentIdRef:a,delayRef:o,timeoutMs:s,initialDelayRef:c,currentContextRef:l,hasProvider:u,timeout:d}=B.useContext(uc),[f,p]=B.useState(!1),m=B.useRef(n);return ft(()=>{m.current=n},[n]),ft(()=>{function e(){l.current?.setIsInstantPhase(!1),a.current=null,l.current=null,o.current=c.current,d.clear()}if(a.current&&!n&&a.current===i){if(p(!1),s){let t=i;return d.start(s,()=>{r.select(`open`)||a.current&&a.current!==t||e()}),()=>{(m.current||a.current!==t)&&d.clear()}}e()}},[n,i,a,o,s,c,l,d,r]),ft(()=>{if(!n)return;let e=l.current,t=a.current;d.clear(),l.current={onOpenChange:r.setOpen,setIsInstantPhase:p},a.current=i,o.current={open:0,close:oc(c.current,`close`)},t!==null&&t!==i?(p(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1,Et(bt))):(p(!1),e?.setIsInstantPhase(!1))},[n,i,r,a,o,c,l,d]),ft(()=>()=>{if(a.current===i){if(l.current=null,!m.current)return;a.current=null,dc(o,c),d.clear()}},[l,a,o,i,c,d]),B.useMemo(()=>({activeIdRef:a,hasProvider:u,delayRef:o,isInstantPhase:f}),[a,u,o,f])}function mc(e,t){let n=null,r=null,i=!1;return{contextElement:e||void 0,getBoundingClientRect(){let a=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},o=t.axis===`x`||t.axis===`both`,s=t.axis===`y`||t.axis===`both`,c=[`mouseenter`,`mousemove`].includes(t.dataRef.current.openEvent?.type||``)&&t.pointerType!==`touch`,l=a.width,u=a.height,d=a.x,f=a.y;return n==null&&t.x&&o&&(n=a.x-t.x),r==null&&t.y&&s&&(r=a.y-t.y),d-=n||0,f-=r||0,l=0,u=0,!i||c?(l=t.axis===`y`?a.width:0,u=t.axis===`x`?a.height:0,d=o&&t.x!=null?t.x:d,f=s&&t.y!=null?t.y:f):i&&!c&&(u=t.axis===`x`?a.height:u,l=t.axis===`y`?a.width:l),i=!0,{width:l,height:u,x:d,y:f,top:f,right:d+l,bottom:f+u,left:d}}}}function hc(e){return e!=null&&e.clientX!=null}function gc(e,t={}){let{enabled:n=!0,axis:r=`both`}=t,i=`rootStore`in e?e.rootStore:e,a=i.useState(`open`),o=i.useState(`floatingElement`),s=i.useState(`domReferenceElement`),c=i.context.dataRef,l=B.useRef(!1),u=B.useRef(null),[d,f]=B.useState(),[p,m]=B.useState([]),h=pt(e=>{i.set(`positionReference`,e)}),g=pt((e,t,n)=>{l.current||(!c.current.openEvent||hc(c.current.openEvent))&&i.set(`positionReference`,mc(n??s,{x:e,y:t,axis:r,dataRef:c,pointerType:d}))}),_=pt(e=>{a?u.current||(g(e.clientX,e.clientY,e.currentTarget),m([])):g(e.clientX,e.clientY,e.currentTarget)}),v=Vt(d)?o:a;B.useEffect(()=>{if(!n){h(s);return}if(!v)return;function e(){u.current?.(),u.current=null}let t=lt(o);function r(t){let n=gt(t);vt(o,n)?e():g(t.clientX,t.clientY)}return!c.current.openEvent||hc(c.current.openEvent)?u.current=Pe(t,`mousemove`,r):h(s),e},[v,n,o,c,s,i,g,h,p]),B.useEffect(()=>()=>{i.set(`positionReference`,null)},[i]),B.useEffect(()=>{n&&!o&&(l.current=!1)},[n,o]),B.useEffect(()=>{!n&&a&&(l.current=!0)},[n,a]);let y=B.useMemo(()=>{function e(e){f(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:_,onMouseEnter:_}},[_]);return B.useMemo(()=>n?{reference:y,trigger:y}:{},[n,y])}var _c=Ae();function vc(e){let t=B.useCallback(t=>e===void 0?Be:e.subscribeStore(t),[e]),n=B.useCallback(()=>e===void 0?void 0:e.store,[e]);return(0,_c.useSyncExternalStore)(t,n,()=>e?.serverStore)}var yc=rn&&Bt;function bc(e,t={}){let{enabled:n=!0,delay:r}=t,i=`rootStore`in e?e.rootStore:e,{events:a,dataRef:o}=i.context,s=B.useRef(!1),c=B.useRef(null),l=B.useRef(!0),u=At();B.useEffect(()=>{let e=i.select(`domReferenceElement`);if(!n)return;let t=lt(e);function r(){let e=i.select(`domReferenceElement`);!i.select(`open`)&&ut(e)&&e===kt(_t(e))&&(s.current=!0,c.current=e)}function a(){l.current=!0}function o(){l.current=!1}return Pt(Pe(t,`blur`,r),yc&&Pe(t,`keydown`,a,!0),yc&&Pe(t,`pointerdown`,o,!0))},[i,n]),B.useEffect(()=>{if(!n)return;function e(e){if(e.reason===`trigger-press`||e.reason===`escape-key`){let e=i.select(`domReferenceElement`);ht(e)&&(c.current=e,s.current=!0)}}return a.on(`openchange`,e),()=>{a.off(`openchange`,e)}},[a,n,i]);let d=B.useMemo(()=>{function e(){s.current=!1,c.current=null}return{onMouseLeave(){e()},onFocus(t){let n=t.currentTarget;if(s.current){if(c.current===n)return;e()}let a=gt(t.nativeEvent);if(ht(a)){if(yc&&!t.relatedTarget){if(!l.current&&!L(a))return}else if(!Ht(a))return}let o=Xt(t.relatedTarget,i.context.triggerElements),{nativeEvent:d,currentTarget:f}=t,p=typeof r==`function`?r():r;if(i.select(`open`)&&o||p===0||p===void 0){i.setOpen(!0,Et(wt,d,f));return}u.start(p,()=>{s.current||i.setOpen(!0,Et(wt,d,f))})},onBlur(t){e();let n=t.relatedTarget,r=t.nativeEvent,a=ht(n)&&n.hasAttribute(sn(`focus-guard`))&&n.getAttribute(`data-type`)===`outside`;u.start(0,()=>{let e=i.select(`domReferenceElement`),t=kt(_t(e));(n||t!==e)&&(vt(o.current.floatingContext?.refs.floating.current,t)||vt(e,t)||a||Xt(n??t,i.context.triggerElements)||i.setOpen(!1,Et(wt,r)))})}}},[o,r,i,u]);return B.useMemo(()=>n?{reference:d,trigger:d}:{},[n,d])}var xc=class e{constructor(){this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Dt,this.restTimeout=new Dt,this.handleCloseOptions=void 0}static create(){return new e}dispose=()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()};disposeEffect=()=>this.dispose},Sc=new WeakMap;function Cc(e){if(!e.performedPointerEventsMutation)return;let t=e.pointerEventsScopeElement;t&&Sc.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty(`pointer-events`),e.pointerEventsReferenceElement?.style.removeProperty(`pointer-events`),e.pointerEventsFloatingElement?.style.removeProperty(`pointer-events`),Sc.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function wc(e,t){let{scopeElement:n,referenceElement:r,floatingElement:i}=t,a=Sc.get(n);a&&a!==e&&Cc(a),Cc(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=n,e.pointerEventsReferenceElement=r,e.pointerEventsFloatingElement=i,Sc.set(n,e),n.style.pointerEvents=`none`,r.style.pointerEvents=`auto`,i.style.pointerEvents=`auto`}function Tc(e){let t=e.context.dataRef.current,n=Re(()=>t.hoverInteractionState??xc.create()).current;return t.hoverInteractionState||=n,yt(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function Ec(e,t={}){let{enabled:n=!0,closeDelay:r=0,nodeId:i}=t,a=`rootStore`in e?e.rootStore:e,o=a.useState(`open`),s=a.useState(`floatingElement`),c=a.useState(`domReferenceElement`),{dataRef:l}=a.context,u=It(),d=qt(),f=Tc(a),p=At(),m=pt(()=>cc(l.current.openEvent?.type,f.interactedInside)),h=pt(()=>lc(l.current.openEvent?.type)),g=pt(()=>{Cc(f)});ft(()=>{o||(f.pointerType=void 0,f.restTimeoutPending=!1,f.interactedInside=!1,g())},[o,f,g]),B.useEffect(()=>g,[g]),ft(()=>{if(n&&o&&f.handleCloseOptions?.blockPointerEvents&&h()&&ht(c)&&s){let e=c,t=s,n=_t(s),r=u?.nodesRef.current.find(e=>e.id===d)?.context?.elements.floating;r&&(r.style.pointerEvents=``);let i=f.pointerEventsScopeElement===t?null:f.pointerEventsScopeElement,a=r===t?null:r,o=f.handleCloseOptions?.getScope?.()??i??a??e.closest(`[data-rootownerid]`)??n.body;return wc(f,{scopeElement:o,referenceElement:e,floatingElement:t}),()=>{g()}}},[n,o,c,s,f,h,u,d,g]),B.useEffect(()=>{if(!n)return;function e(){return!!(u&&d&&jt(u.nodesRef.current,d).length>0)}function t(e){let t=oc(r,`close`,f.pointerType),n=()=>{a.setOpen(!1,Et(St,e)),u?.events.emit(`floating.closed`,e)};t?f.openChangeTimeout.start(t,n):(f.openChangeTimeout.clear(),n())}function o(e){let t=gt(e);if(!en(t)){f.interactedInside=!1;return}f.interactedInside=t?.closest(`[aria-haspopup]`)!=null}function c(){f.openChangeTimeout.clear(),p.clear(),u?.events.off(`floating.closed`,v),g()}function _(n){if(e()&&u){u.events.on(`floating.closed`,v);return}if(Xt(n.relatedTarget,a.context.triggerElements))return;let r=l.current.floatingContext?.nodeId??i,o=n.relatedTarget;if(!(u&&r&&ht(o)&&jt(u.nodesRef.current,r,!1).some(e=>vt(e.context?.elements.floating,o)))){if(f.handler){f.handler(n);return}g(),h()&&!m()&&t(n)}}function v(t){u&&d&&!e()&&p.start(0,()=>{u.events.off(`floating.closed`,v),a.setOpen(!1,Et(St,t)),u.events.emit(`floating.closed`,t)})}let y=s;return Pt(y&&Pe(y,`mouseenter`,c),y&&Pe(y,`mouseleave`,_),y&&Pe(y,`pointerdown`,o,!0),()=>{u?.events.off(`floating.closed`,v)})},[n,s,a,l,r,i,h,m,g,f,u,d,p])}var Dc=n(Me(),1),Oc={current:null};function kc(e,t={}){let{enabled:n=!0,delay:r=0,handleClose:i=null,mouseOnly:a=!1,restMs:o=0,move:s=!0,triggerElementRef:c=Oc,externalTree:l,isActiveTrigger:u=!0,getHandleCloseContext:d,isClosing:f,shouldOpen:p,guardStaleOpen:m=!1}=t,h=`rootStore`in e?e.rootStore:e,{dataRef:g,events:_}=h.context,v=It(l),y=Tc(h),b=B.useRef(!1),x=Fe(i),S=Fe(r),C=Fe(o),w=Fe(n),T=Fe(p),E=Fe(f),D=pt(()=>cc(g.current.openEvent?.type,y.interactedInside)),O=pt(()=>T.current?.()!==!1),k=pt((e,t,n)=>{let r=h.context.triggerElements;if(r.hasElement(t))return!e||!vt(e,t);if(!ht(n))return!1;let i=n;return r.hasMatchingElement(e=>vt(e,i))&&(!e||!vt(e,i))}),ee=pt(()=>{y.handler&&=(_t(h.select(`domReferenceElement`)).removeEventListener(`mousemove`,y.handler),void 0)}),te=pt(()=>{Cc(y)});return u&&(y.handleCloseOptions=i?.__options),B.useEffect(()=>ee,[ee]),B.useEffect(()=>{if(!n)return;function e(e){e.open?b.current=!1:(b.current=e.reason===St,ee(),y.openChangeTimeout.clear(),y.restTimeout.clear(),y.blockMouseMove=!0,y.restTimeoutPending=!1)}return _.on(`openchange`,e),()=>{_.off(`openchange`,e)}},[n,_,y,ee]),B.useEffect(()=>{if(!n)return;function e(e,t=!0){let n=oc(S.current,`close`,y.pointerType);n?y.openChangeTimeout.start(n,()=>{h.setOpen(!1,Et(St,e)),v?.events.emit(`floating.closed`,e)}):t&&(y.openChangeTimeout.clear(),h.setOpen(!1,Et(St,e)),v?.events.emit(`floating.closed`,e))}let t=c.current??(u?h.select(`domReferenceElement`):null);if(!ht(t))return;function r(e){if(y.openChangeTimeout.clear(),y.blockMouseMove=!1,a&&!Vt(y.pointerType))return;let t=sc(C.current),n=oc(S.current,`open`,y.pointerType),r=gt(e),i=e.currentTarget??null,o=h.select(`domReferenceElement`),s=i;if(ht(r)&&!h.context.triggerElements.hasElement(r)){for(let e of h.context.triggerElements.elements())if(vt(e,r)){s=e;break}}ht(i)&&ht(o)&&!h.context.triggerElements.hasElement(i)&&vt(i,o)&&(s=o);let c=s!=null&&k(o,s,r),l=h.select(`open`),u=E.current?.()??h.select(`transitionStatus`)===`ending`,d=!l&&u&&b.current,f=!c&&ht(s)&&ht(o)&&vt(o,s)&&d,p=t>0&&!n,m=c&&(l||d)||f,g=!l||c;if(m){O()&&h.setOpen(!0,Et(St,e,s));return}p||(n?y.openChangeTimeout.start(n,()=>{g&&O()&&h.setOpen(!0,Et(St,e,s))}):g&&O()&&h.setOpen(!0,Et(St,e,s)))}function i(t){if(D()){te();return}ee();let n=h.select(`domReferenceElement`),r=_t(n);y.restTimeout.clear(),y.restTimeoutPending=!1;let i=g.current.floatingContext??d?.();if(!Xt(t.relatedTarget,h.context.triggerElements)){if(x.current&&i){h.select(`open`)||y.openChangeTimeout.clear();let n=c.current;y.handler=x.current({...i,tree:v,x:t.clientX,y:t.clientY,onClose(){te(),ee(),w.current&&!D()&&n===h.select(`domReferenceElement`)&&e(t,!0)}}),r.addEventListener(`mousemove`,y.handler),y.handler(t);return}(y.pointerType!==`touch`||!vt(h.select(`floatingElement`),t.relatedTarget))&&e(t)}}function o(e){vt(t,e.relatedTarget)||(y.openChangeTimeout.clear(),y.restTimeout.clear(),y.restTimeoutPending=!1)}let l=m?Pe(t,`mouseout`,o):void 0;return s?Pt(Pe(t,`mousemove`,r,{once:!0}),Pe(t,`mouseenter`,r),Pe(t,`mouseleave`,i),l):Pt(Pe(t,`mouseenter`,r),Pe(t,`mouseleave`,i),l)},[ee,te,g,S,h,n,x,y,u,k,D,a,s,C,c,v,w,d,E,O,m]),B.useMemo(()=>{if(!n)return;function e(e){y.pointerType=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:t}=e,n=e.currentTarget,r=h.select(`domReferenceElement`),i=h.select(`open`),o=k(r,n,e.target);if(a&&!Vt(y.pointerType))return;if(i&&o&&y.handleCloseOptions?.blockPointerEvents){let e=h.select(`floatingElement`);if(e){let t=y.handleCloseOptions?.getScope?.()??n.ownerDocument.body;wc(y,{scopeElement:t,referenceElement:n,floatingElement:e})}}let s=sc(C.current);if(i&&!o||s===0||!o&&y.restTimeoutPending&&e.movementX**2+e.movementY**2<2)return;y.restTimeout.clear();function c(){if(y.restTimeoutPending=!1,D())return;let e=h.select(`open`);!y.blockMouseMove&&(!e||o)&&O()&&h.setOpen(!0,Et(St,t,n))}y.pointerType===`touch`?Dc.flushSync(()=>{c()}):o&&i?c():(y.restTimeoutPending=!0,y.restTimeout.start(s,c))}}},[n,y,D,k,a,h,C,O])}var Ac=.1,jc=Ac*Ac,Mc=.5;function Nc(e,t,n,r,i,a){return r>=t!=a>=t&&e<=(i-n)*(t-r)/(a-r)+n}function Pc(e,t,n,r,i,a,o,s,c,l){let u=!1;return Nc(e,t,n,r,i,a)&&(u=!u),Nc(e,t,i,a,o,s)&&(u=!u),Nc(e,t,o,s,c,l)&&(u=!u),Nc(e,t,c,l,n,r)&&(u=!u),u}function Fc(e,t,n){return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height}function Ic(e,t,n,r,i,a){return e>=Math.min(n,i)&&e<=Math.max(n,i)&&t>=Math.min(r,a)&&t<=Math.max(r,a)}function Lc(e={}){let{blockPointerEvents:t=!1}=e,n=new Dt,r=({x:e,y:t,placement:r,elements:i,onClose:a,nodeId:o,tree:s})=>{let c=r?.split(`-`)[0],l=!1,u=null,d=null,f=typeof performance<`u`?performance.now():0;function p(e,t){let n=performance.now(),r=n-f;if(u===null||d===null||r===0)return u=e,d=t,f=n,!1;let i=e-u,a=t-d,o=i*i+a*a,s=r*r*jc;return u=e,d=t,f=n,o0)}function b(){y()||m()}if(y())return;let x=a.getBoundingClientRect(),S=u.getBoundingClientRect(),C=e>S.right-S.width/2,w=t>S.bottom-S.height/2,T=S.width>x.width,E=S.height>x.height,D=(T?x:S).left,O=(T?x:S).right,k=(E?x:S).top,ee=(E?x:S).bottom;if(c===`top`&&t>=x.bottom-1||c===`bottom`&&t<=x.top+1||c===`left`&&e>=x.right-1||c===`right`&&e<=x.left+1){b();return}let te=!1;switch(c){case`top`:te=Ic(d,f,D,x.top+1,O,S.bottom-1);break;case`bottom`:te=Ic(d,f,D,S.top+1,O,x.bottom-1);break;case`left`:te=Ic(d,f,S.right-1,ee,x.left+1,k);break;case`right`:te=Ic(d,f,x.right-1,ee,S.left+1,k)}if(te)return;if(l&&!Fc(d,f,x)){b();return}if(!g&&p(d,f)){b();return}let ne=!1;switch(c){case`top`:{let n=T?Mc/2:Mc*4,r=T||C?e+n:e-n,i=T?e-n:C?e+n:e-n,a=t+Mc+1,o=C||T?S.bottom-Mc:S.top,s=C?T?S.bottom-Mc:S.top:S.bottom-Mc;ne=Pc(d,f,r,a,i,a,S.left,o,S.right,s);break}case`bottom`:{let n=T?Mc/2:Mc*4,r=T||C?e+n:e-n,i=T?e-n:C?e+n:e-n,a=t-Mc,o=C||T?S.top+Mc:S.bottom,s=C?T?S.top+Mc:S.bottom:S.top+Mc;ne=Pc(d,f,r,a,i,a,S.left,o,S.right,s);break}case`left`:{let n=E?Mc/2:Mc*4,r=E||w?t+n:t-n,i=E?t-n:w?t+n:t-n,a=e+Mc+1,o=w||E?S.right-Mc:S.left,s=w?E?S.right-Mc:S.left:S.right-Mc;ne=Pc(d,f,o,S.top,s,S.bottom,a,r,a,i);break}case`right`:{let n=E?Mc/2:Mc*4,r=E||w?t+n:t-n,i=E?t-n:w?t+n:t-n,a=e-Mc,o=w||E?S.left+Mc:S.right,s=w?E?S.left+Mc:S.right:S.left+Mc;ne=Pc(d,f,a,r,a,i,o,S.top,s,S.bottom);break}}ne?l||n.start(40,b):b()}};return r.__options={...e,blockPointerEvents:t},r}var Rc=Mt(function(e){return gn(`dialog`,e)});function zc(e){let t=(0,U.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,V.jsx)(Rc,{"data-slot":`sheet`,...n}),t[2]=n,t[3]=r),r}function Bc(e){let t=(0,U.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,V.jsx)(vn,{"data-slot":`sheet-portal`,...n}),t[2]=n,t[3]=r),r}function Vc(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:animate-out data-open:animate-in fixed inset-0 z-50 bg-black/80 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(hn,{className:i,"data-slot":`sheet-overlay`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Hc(e){let t=(0,U.c)(17),n,r,i,a,o;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5]):({className:r,children:n,side:a,showCloseButton:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o);let s=a===void 0?`right`:a,c=o===void 0||o,l;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,V.jsx)(Vc,{}),t[6]=l):l=t[6];let u;t[7]===r?u=t[8]:(u=P(`data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-closed:animate-out data-open:animate-in fixed z-50 flex flex-col bg-background bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm`,r),t[7]=r,t[8]=u);let d;t[9]===c?d=t[10]:(d=c&&(0,V.jsxs)(pn,{"data-slot":`sheet-close`,render:(0,V.jsx)(mt,{className:`absolute top-4 right-4`,size:`icon-sm`,variant:`ghost`}),children:[(0,V.jsx)(st,{}),(0,V.jsx)(`span`,{className:`sr-only`,children:`Close`})]}),t[9]=c,t[10]=d);let f;return t[11]!==n||t[12]!==i||t[13]!==s||t[14]!==u||t[15]!==d?(f=(0,V.jsxs)(Bc,{children:[l,(0,V.jsxs)(mn,{className:u,"data-side":s,"data-slot":`sheet-content`,...i,children:[n,d]})]}),t[11]=n,t[12]=i,t[13]=s,t[14]=u,t[15]=d,t[16]=f):f=t[16],f}function Uc(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`flex flex-col gap-1.5 p-6`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`div`,{className:i,"data-slot":`sheet-header`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Wc(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`text-sm font-medium text-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(bn,{className:i,"data-slot":`sheet-title`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Gc(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`text-xs/relaxed text-muted-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(yn,{className:i,"data-slot":`sheet-description`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var Kc=B.createContext(void 0);function qc(e){let t=B.useContext(Kc);if(t===void 0&&!e)throw Error(He(72));return t}var Jc={..._n,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},Yc=class extends Nt{constructor(e,t,n){let r=new Qt;super(Xc(e,r,t,n),Zc(r),Jc)}setOpen=(e,t)=>{Gt(this,e,t,{extraState:{openChangeReason:t.reason}})};cancelPendingOpen(e){this.state.floatingRootContext.dispatchOpenChange(!1,Et(xt,e))}};function Xc(e,t,n,r=!1){return{...fn(t,n,r),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:`none`,disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function Zc(e){return{popupRef:B.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}var Qc=Mt(function(e){let{disabled:t=!1,defaultOpen:n=!1,open:r,disableHoverablePopup:i=!1,trackCursorAxis:a=`none`,actionsRef:o,onOpenChange:s,onOpenChangeComplete:c,handle:l,triggerId:u,defaultTriggerId:d=null,children:f}=e,p=zt((e,t)=>new Yc({open:n,openProp:r,activeTriggerId:d,triggerIdProp:u},e,t));p.useControlledProp(`openProp`,r),p.useControlledProp(`triggerIdProp`,u),p.useContextCallback(`onOpenChange`,s),p.useContextCallback(`onOpenChangeComplete`,c);let m=p.useState(`open`),h=!t&&m,g=p.useState(`activeTriggerId`),_=p.useState(`mounted`),v=p.useState(`payload`);p.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:i,disabled:t}),on(p,{closeOnActiveTriggerUnmount:!0});let{forceUnmount:y,transitionStatus:b}=Ut(h,p),x=p.useState(`isInstantPhase`),S=p.useState(`instantType`),C=p.useState(`lastOpenChangeReason`),w=B.useRef(null);ft(()=>{m&&t&&p.setOpen(!1,Et(Ct))},[m,t,p]),ft(()=>{b===`ending`&&C===`none`||b!==`ending`&&x?(S!==`delay`&&(w.current=S),p.set(`instantType`,`delay`)):w.current!==null&&(p.set(`instantType`,w.current),w.current=null)},[b,x,C,S,p]),ft(()=>{h&&(g??p.set(`payload`,void 0))},[p,g,h]),B.useImperativeHandle(o,()=>({unmount:y,close:()=>p.setOpen(!1,Et(Tt))}),[y,p]);let T=h||_||!t&&a!==`none`;return(0,V.jsxs)(Kc.Provider,{value:p,children:[l&&(0,V.jsx)(Kt,{handle:l,store:p}),T&&(0,V.jsx)($c,{store:p,disabled:t,trackCursorAxis:a}),typeof f==`function`?f({payload:v}):f]})});function $c({store:e,disabled:t,trackCursorAxis:n}){let r=e.useState(`floatingRootContext`),i=Jt(r,{enabled:!t,referencePress:()=>e.select(`closeOnClick`)}),a=gc(r,{enabled:!t&&n!==`none`,axis:n===`none`?void 0:n}),o=B.useMemo(()=>Le(a.reference,i.reference),[a.reference,i.reference]);return an(e,{activeTriggerProps:o,inactiveTriggerProps:o,popupProps:i.floating??Ie}),null}var el=B.createContext(void 0);function tl(){return B.useContext(el)}var nl=`data-base-ui-tooltip-trigger`;function rl(e){if(`composedPath`in e){let t=e.composedPath();for(let e=0;em.select(`transitionStatus`)===`ending`,shouldOpen(){return!ie.current}}),de=bc(v,{enabled:!ee}).reference,fe=e=>{let t=ie.current,n=rl(e),r=le(n),i=y.current,a=i&&n&&vt(i,n);if(r&&m.select(`open`)&&m.select(`lastOpenChangeReason`)===`trigger-hover`){m.setOpen(!1,Et(St,e));return}if(t&&!r&&a&&!te.current&&!m.select(`open`)&&i&&Vt(oe.current)){let t=()=>{!ie.current&&!te.current&&!m.select(`open`)&&m.setOpen(!0,Et(St,e,i))},n=se();n===0?(ae.clear(),t()):ae.start(n,t)}},pe=m.useState(`triggerProps`,S);return ze(`button`,e,{state:{open:_},ref:[t,x,y],props:[ue,de,S||ne!==`none`?pe:void 0,{onMouseOver(e){fe(e.nativeEvent)},onFocus(e){ce(rl(e.nativeEvent))&&e.preventBaseUIHandler()},onMouseLeave(){ie.current=!1,ae.clear(),oe.current=void 0},onPointerEnter(e){oe.current=e.pointerType},onPointerDown(e){oe.current=e.pointerType,m.set(`closeOnClick`,l),l&&!m.select(`open`)&&m.cancelPendingOpen(e.nativeEvent)},onClick(e){l&&!m.select(`open`)&&m.cancelPendingOpen(e.nativeEvent)},id:h,[Zt]:ee?``:void 0,[nl]:ee?void 0:``},f],stateAttributesMapping:tn})}),ol=B.createContext(void 0);function sl(){let e=B.useContext(ol);if(e===void 0)throw Error(He(70));return e}var cl=B.forwardRef(function(e,t){let{children:n,container:r,className:i,render:a,style:o,...s}=e,{node:c,subtree:l}=Rt({container:r,ref:t,componentProps:e,elementProps:s});return!l&&!c?null:(0,V.jsxs)(B.Fragment,{children:[l,c&&Dc.createPortal(n,c)]})}),ll=B.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return qc().useState(`mounted`)||n?(0,V.jsx)(ol.Provider,{value:n,children:(0,V.jsx)(cl,{ref:t,...r})}):null}),ul=B.createContext(void 0);function dl(){let e=B.useContext(ul);if(e===void 0)throw Error(He(71));return e}var fl=B.forwardRef(function(e,t){let{render:n,className:r,anchor:i,positionMethod:a=`absolute`,side:o=`top`,align:s=`center`,sideOffset:c=0,alignOffset:l=0,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,disableAnchorTracking:m=!1,collisionAvoidance:h=Ft,style:g,..._}=e,v=qc(),y=sl(),b=v.useState(`open`),x=v.useState(`mounted`),S=v.useState(`trackCursorAxis`),C=v.useState(`disableHoverablePopup`),w=v.useState(`floatingRootContext`),T=v.useState(`instantType`),E=v.useState(`transitionStatus`),D=v.useState(`adaptiveOrigin`),O=ln({anchor:i,positionMethod:a,floatingRootContext:w,mounted:x,side:o,sideOffset:c,align:s,alignOffset:l,collisionBoundary:u,collisionPadding:d,sticky:p,arrowPadding:f,disableAnchorTracking:m,keepMounted:y,collisionAvoidance:h,adaptiveOrigin:D}),k=B.useMemo(()=>({open:b,side:O.side,align:O.align,anchorHidden:O.anchorHidden,instant:S===`none`?T:`tracking-cursor`}),[b,O.side,O.align,O.anchorHidden,S,T]),ee=un(e,k,{styles:O.positionerStyles,transitionStatus:E,props:_,refs:[t,v.useStateSetter(`positionerElement`)],hidden:!x,inert:!b||S===`both`||C});return(0,V.jsx)(ul.Provider,{value:O,children:ee})}),pl=B.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=qc(),{side:s,align:c}=dl(),l=o.useState(`open`),u=o.useState(`instantType`),d=o.useState(`transitionStatus`),f=o.useState(`popupProps`),p=o.useState(`floatingRootContext`),m=o.useState(`disabled`),h=o.useState(`closeDelay`);Ne({open:l,ref:o.context.popupRef,onComplete(){l&&o.context.onOpenChangeComplete?.(!0)}}),Ec(p,{enabled:!m,closeDelay:h});let g=o.useStateSetter(`popupElement`);return ze(`div`,e,{state:{open:l,side:s,align:c,instant:u,transitionStatus:d},ref:[t,o.context.popupRef,g],props:[Yt,f,cn(d),a],stateAttributesMapping:Wt})}),ml=B.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=qc(),{arrowRef:s,side:c,align:l,arrowUncentered:u,arrowStyles:d}=dl(),f={open:o.useState(`open`),side:c,align:l,uncentered:u,instant:o.useState(`instantType`)};return ze(`div`,e,{state:f,ref:[t,s],props:[{style:d,"aria-hidden":!0},a],stateAttributesMapping:$t})}),hl=function(e){let{delay:t,closeDelay:n,timeout:r=400}=e,i=B.useMemo(()=>({open:t,close:n}),[t,n]);return(0,V.jsx)(el.Provider,{value:t,children:(0,V.jsx)(fc,{delay:i,timeoutMs:r,children:e.children})})};function gl(e){let t=(0,U.c)(6),n,r;t[0]===e?(n=t[1],r=t[2]):({delay:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?0:r,a;return t[3]!==i||t[4]!==n?(a=(0,V.jsx)(hl,{"data-slot":`tooltip-provider`,delay:i,...n}),t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function _l(e){let t=(0,U.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,V.jsx)(gl,{children:(0,V.jsx)(Qc,{"data-slot":`tooltip`,...n})}),t[2]=n,t[3]=r),r}function vl(e){let t=(0,U.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,V.jsx)(al,{"data-slot":`tooltip-trigger`,...n}),t[2]=n,t[3]=r),r}function yl(e){let t=(0,U.c)(21),n,r,i,a,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7]):({className:r,side:a,sideOffset:o,align:s,alignOffset:c,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c);let l=a===void 0?`top`:a,u=o===void 0?4:o,d=s===void 0?`center`:s,f=c===void 0?0:c,p;t[8]===r?p=t[9]:(p=P(`data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-xs text-background **:data-[slot=kbd]:rounded-md`,r),t[8]=r,t[9]=p);let m;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,V.jsx)(ml,{className:`z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5`}),t[10]=m):m=t[10];let h;t[11]!==n||t[12]!==i||t[13]!==p?(h=(0,V.jsxs)(pl,{className:p,"data-slot":`tooltip-content`,...i,children:[n,m]}),t[11]=n,t[12]=i,t[13]=p,t[14]=h):h=t[14];let g;return t[15]!==d||t[16]!==f||t[17]!==l||t[18]!==u||t[19]!==h?(g=(0,V.jsx)(ll,{children:(0,V.jsx)(fl,{align:d,alignOffset:f,className:`isolate z-50`,side:l,sideOffset:u,children:h})}),t[15]=d,t[16]=f,t[17]=l,t[18]=u,t[19]=h,t[20]=g):g=t[20],g}var bl=window.matchMedia(`(max-width: 767px)`);function xl(e){return bl.addEventListener(`change`,e),()=>{bl.removeEventListener(`change`,e)}}function Sl(){return bl.matches}function Cl(){return(0,B.useSyncExternalStore)(xl,Sl)}var wl=`sidebar_state`,Tl=604800,El=`12rem`,Dl=`16rem`,Ol=`3rem`,kl=`b`,Al=B.createContext(null);function jl(){let e=B.useContext(Al);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function Ml(e){let t=(0,U.c)(36),n,r,i,a,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7]):({defaultOpen:c,open:i,onOpenChange:o,className:r,style:s,children:n,...a}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c);let l=c===void 0||c,u=Cl(),[d,f]=B.useState(!1),[p,m]=B.useState(l),h=i??p,g;t[8]!==h||t[9]!==o?(g=e=>{let t=typeof e==`function`?e(h):e;o?o(t):m(t),document.cookie=`${wl}=${t}; path=/; max-age=${Tl}`},t[8]=h,t[9]=o,t[10]=g):g=t[10];let _=g,v;t[11]!==u||t[12]!==_?(v=()=>{u?f(Pl):_(Nl)},t[11]=u,t[12]=_,t[13]=v):v=t[13];let y=v,b,x;t[14]===y?(b=t[15],x=t[16]):(b=()=>{let e=e=>{e.key===kl&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`keydown`,e)}},x=[y],t[14]=y,t[15]=b,t[16]=x),B.useEffect(b,x);let S=h?`expanded`:`collapsed`,C;t[17]!==u||t[18]!==h||t[19]!==d||t[20]!==_||t[21]!==S||t[22]!==y?(C={state:S,open:h,setOpen:_,isMobile:u,openMobile:d,setOpenMobile:f,toggleSidebar:y},t[17]=u,t[18]=h,t[19]=d,t[20]=_,t[21]=S,t[22]=y,t[23]=C):C=t[23];let w=C,T;t[24]===s?T=t[25]:(T={"--sidebar-width":El,"--sidebar-width-icon":Ol,...s},t[24]=s,t[25]=T);let E=T,D;t[26]===r?D=t[27]:(D=P(`group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar`,r),t[26]=r,t[27]=D);let O;t[28]!==n||t[29]!==a||t[30]!==D||t[31]!==E?(O=(0,V.jsx)(`div`,{className:D,"data-slot":`sidebar-wrapper`,style:E,...a,children:n}),t[28]=n,t[29]=a,t[30]=D,t[31]=E,t[32]=O):O=t[32];let k;return t[33]!==w||t[34]!==O?(k=(0,V.jsx)(Al.Provider,{value:w,children:O}),t[33]=w,t[34]=O,t[35]=k):k=t[35],k}function Nl(e){return!e}function Pl(e){return!e}function Fl(e){let t=(0,U.c)(46),n,r,i,a,o,s;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6]):({side:a,variant:o,collapsible:s,className:r,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s);let c=a===void 0?`left`:a,l=o===void 0?`sidebar`:o,u=s===void 0?`offExamples`:s,{isMobile:d,state:f,openMobile:p,setOpenMobile:m}=jl();if(u===`none`){let e;t[7]===r?e=t[8]:(e=P(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,r),t[7]=r,t[8]=e);let a;return t[9]!==n||t[10]!==i||t[11]!==e?(a=(0,V.jsx)(`div`,{className:e,"data-slot":`sidebar`,...i,children:n}),t[9]=n,t[10]=i,t[11]=e,t[12]=a):a=t[12],a}if(d){let e;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(e={"--sidebar-width":Dl},t[13]=e):e=t[13];let r=e,a;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,V.jsxs)(Uc,{className:`sr-only`,children:[(0,V.jsx)(Wc,{children:`Sidebar`}),(0,V.jsx)(Gc,{children:`Displays the mobile sidebar.`})]}),t[14]=a):a=t[14];let o;t[15]===n?o=t[16]:(o=(0,V.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:n}),t[15]=n,t[16]=o);let s;t[17]!==c||t[18]!==o?(s=(0,V.jsxs)(Hc,{className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden`,"data-mobile":`true`,"data-sidebar":`sidebar`,"data-slot":`sidebar`,side:c,style:r,children:[a,o]}),t[17]=c,t[18]=o,t[19]=s):s=t[19];let l;return t[20]!==p||t[21]!==i||t[22]!==m||t[23]!==s?(l=(0,V.jsx)(zc,{onOpenChange:m,open:p,...i,children:s}),t[20]=p,t[21]=i,t[22]=m,t[23]=s,t[24]=l):l=t[24],l}let h=f===`collapsed`?u:``,g=l===`floating`||l===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`,_;t[25]===g?_=t[26]:(_=P(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offExamples]:w-0`,`group-data-[side=right]:rotate-180`,g),t[25]=g,t[26]=_);let v;t[27]===_?v=t[28]:(v=(0,V.jsx)(`div`,{className:_,"data-slot":`sidebar-gap`}),t[27]=_,t[28]=v);let y=c===`left`?`left-0 group-data-[collapsible=offExamples]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offExamples]:right-[calc(var(--sidebar-width)*-1)]`,b=l===`floating`||l===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,x;t[29]!==r||t[30]!==y||t[31]!==b?(x=P(`fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex`,y,b,r),t[29]=r,t[30]=y,t[31]=b,t[32]=x):x=t[32];let S;t[33]===n?S=t[34]:(S=(0,V.jsx)(`div`,{className:`flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border`,"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,children:n}),t[33]=n,t[34]=S);let C;t[35]!==i||t[36]!==x||t[37]!==S?(C=(0,V.jsx)(`div`,{className:x,"data-slot":`sidebar-container`,...i,children:S}),t[35]=i,t[36]=x,t[37]=S,t[38]=C):C=t[38];let w;return t[39]!==c||t[40]!==f||t[41]!==C||t[42]!==h||t[43]!==v||t[44]!==l?(w=(0,V.jsxs)(`div`,{className:`group peer hidden text-sidebar-foreground md:block`,"data-collapsible":h,"data-side":c,"data-slot":`sidebar`,"data-state":f,"data-variant":l,children:[v,C]}),t[39]=c,t[40]=f,t[41]=C,t[42]=h,t[43]=v,t[44]=l,t[45]=w):w=t[45],w}function Il(e){let t=(0,U.c)(15),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,onClick:r,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let{toggleSidebar:a}=jl(),o;t[4]===n?o=t[5]:(o=P(n),t[4]=n,t[5]=o);let s;t[6]!==r||t[7]!==a?(s=e=>{r?.(e),a()},t[6]=r,t[7]=a,t[8]=s):s=t[8];let c,l;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,V.jsx)(Ks,{}),l=(0,V.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`}),t[9]=c,t[10]=l):(c=t[9],l=t[10]);let u;return t[11]!==i||t[12]!==o||t[13]!==s?(u=(0,V.jsxs)(mt,{className:o,"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,onClick:s,size:`icon-lg`,variant:`ghost`,...i,children:[c,l]}),t[11]=i,t[12]=o,t[13]=s,t[14]=u):u=t[14],u}function Ll(e){let t=(0,U.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let{toggleSidebar:i}=jl(),a;t[3]===n?a=t[4]:(a=P(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex`,`in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`group-data-[collapsible=offExamples]:translate-x-0 group-data-[collapsible=offExamples]:after:left-full hover:group-data-[collapsible=offExamples]:bg-sidebar`,`[[data-side=left][data-collapsible=offExamples]_&]:-right-2`,`[[data-side=right][data-collapsible=offExamples]_&]:-left-2`,n),t[3]=n,t[4]=a);let o;return t[5]!==r||t[6]!==a||t[7]!==i?(o=(0,V.jsx)(`button`,{"aria-label":`Toggle Sidebar`,className:a,"data-sidebar":`rail`,"data-slot":`sidebar-rail`,onClick:i,tabIndex:-1,title:`Toggle Sidebar`,type:`button`,...r}),t[5]=r,t[6]=a,t[7]=i,t[8]=o):o=t[8],o}function Rl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`flex flex-col gap-2 p-2`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`div`,{className:i,"data-sidebar":`header`,"data-slot":`sidebar-header`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function zl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`flex flex-col gap-2 p-2`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`div`,{className:i,"data-sidebar":`footer`,"data-slot":`sidebar-footer`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Bl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`mx-2 w-auto bg-sidebar-border`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(dn,{className:i,"data-sidebar":`separator`,"data-slot":`sidebar-separator`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Vl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-x-hidden overflow-y-auto`,`group-data-[collapsible=icon]:[scrollbar-width:none] group-data-[collapsible=icon]:[&::-webkit-scrollbar]:hidden`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`div`,{className:i,"data-sidebar":`content`,"data-slot":`sidebar-content`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Hl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`relative flex w-full min-w-0 flex-col px-2 py-1`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`div`,{className:i,"data-sidebar":`group`,"data-slot":`sidebar-group`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Ul(e){let t=(0,U.c)(10),n,r,i,a;if(t[0]!==e){let{className:o,render:s,...c}=e;n=s,a=Ue,r=`div`,i=Le({className:P(`flex h-8 shrink-0 items-center rounded-md px-2 text-xs text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,o)},c),t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a}else n=t[1],r=t[2],i=t[3],a=t[4];let o;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(o={slot:`sidebar-group-label`,sidebar:`group-label`},t[5]=o):o=t[5];let s;return t[6]!==n||t[7]!==r||t[8]!==i?(s={defaultTagName:r,props:i,render:n,state:o},t[6]=n,t[7]=r,t[8]=i,t[9]=s):s=t[9],a(s)}function Wl(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`flex w-full min-w-0 flex-col gap-px`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`ul`,{className:i,"data-sidebar":`menu`,"data-slot":`sidebar-menu`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function W(e){let t=(0,U.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=P(`group/menu-item relative`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,V.jsx)(`li`,{className:i,"data-sidebar":`menu-item`,"data-slot":`sidebar-menu-item`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var Gl=Ve(`peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-[calc(var(--radius-sm)+2px)] p-2 text-left text-xs ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate`,{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-xs`,sm:`h-7 text-xs`,lg:`h-12 text-xs group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function G(e){let t=(0,U.c)(18),{render:n,isActive:r,variant:i,size:a,tooltip:o,className:s,...c}=e,l=r!==void 0&&r,u=i===void 0?`default`:i,d=a===void 0?`default`:a,{isMobile:f,state:p}=jl(),m=Le({className:P(Gl({variant:u,size:d}),s)},c),h;t[0]!==n||t[1]!==o?(h=o?(0,V.jsx)(vl,{}):n,t[0]=n,t[1]=o,t[2]=h):h=t[2];let g;t[3]!==l||t[4]!==d?(g={slot:`sidebar-menu-button`,sidebar:`menu-button`,size:d,active:l},t[3]=l,t[4]=d,t[5]=g):g=t[5];let _;t[6]!==m||t[7]!==h||t[8]!==g?(_={defaultTagName:`button`,props:m,render:h,state:g},t[6]=m,t[7]=h,t[8]=g,t[9]=_):_=t[9];let v=Ue(_);if(!o)return v;let y;t[10]===o?y=t[11]:(y=typeof o==`string`?{children:o}:o,t[10]=o,t[11]=y);let b=y,x=p!==`collapsed`||f,S;t[12]!==x||t[13]!==b?(S=(0,V.jsx)(yl,{align:`center`,hidden:x,side:`right`,...b}),t[12]=x,t[13]=b,t[14]=S):S=t[14];let C;return t[15]!==v||t[16]!==S?(C=(0,V.jsxs)(_l,{children:[v,S]}),t[15]=v,t[16]=S,t[17]=C):C=t[17],C}var Kl=new Set([`InvalidClientTokenId`,`SignatureDoesNotMatch`,`AuthFailure`,`MissingAuthenticationToken`,`IncompleteSignature`,`UnrecognizedClientException`,`ExpiredToken`,`ExpiredTokenException`,`InvalidAccessKeyId`]);function ql(e){return typeof e==`object`&&!!e&&`name`in e&&typeof e.name==`string`}function Jl(e){return ql(e)&&Kl.has(e.name)}var Yl=!1;function Xl(e,t){!Yl&&Jl(e)&&(Yl=!0,Ge(),xn(),t.clear(),window.location.pathname!==`/login`&&(window.location.href=`/login?reason=expired`))}function Zl(){let e=new Zr({queryCache:new Xr({onError:t=>{Xl(t,e)}}),mutationCache:new Jr({onError:t=>{Xl(t,e)}}),defaultOptions:{queries:{staleTime:5e3,refetchIntervalInBackground:!1}}});return e}function Ql(){let e=(0,U.c)(8),{theme:t,setTheme:n}=is(),r;e[0]!==n||e[1]!==t?(r=()=>{n(t===`light`?`dark`:t===`dark`?`light`:`dark`)},e[0]=n,e[1]=t,e[2]=r):r=e[2];let i=r,a,o,s;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,V.jsx)(Qs,{className:`size-[1.2rem] scale-100 rotate-0 transition-transform dark:scale-0 dark:-rotate-90`}),o=(0,V.jsx)(Hs,{className:`absolute size-[1.2rem] scale-0 rotate-90 transition-transform dark:scale-100 dark:rotate-0`}),s=(0,V.jsx)(`span`,{className:`sr-only`,children:`Toggle theme`}),e[3]=a,e[4]=o,e[5]=s):(a=e[3],o=e[4],s=e[5]);let c;return e[6]===i?c=e[7]:(c=(0,V.jsxs)(mt,{className:`rounded-full transition-none hover:bg-transparent dark:hover:bg-transparent`,onClick:i,size:`icon-sm`,variant:`ghost`,children:[a,o,s]}),e[6]=i,e[7]=c),c}function $l(){let e=(0,U.c)(7),{isAdmin:t,license:n}=Sn(),r=t&&n===`open-source`,i,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=P(`z-50 flex h-10 shrink-0 items-center gap-2 border-b border-sidebar-border bg-sidebar px-4 text-sidebar-foreground`,`sticky top-0`),a=(0,V.jsx)(Il,{className:`-ml-1`}),e[0]=i,e[1]=a):(i=e[0],a=e[1]);let o;e[2]===r?o=e[3]:(o=r&&(0,V.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:P(dt({variant:`outline`,size:`sm`})),children:`Upgrade`}),e[2]=r,e[3]=o);let s;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,V.jsx)(Ql,{}),e[4]=s):s=e[4];let c;return e[5]===o?c=e[6]:(c=(0,V.jsxs)(`header`,{className:i,children:[a,(0,V.jsxs)(`div`,{className:`flex w-full items-center justify-end gap-2`,children:[o,s]})]}),e[5]=o,e[6]=c),c}function eu(){let e=(0,U.c)(3),t,n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsx)(`h1`,{className:`text-4xl font-bold`,children:`404`}),n=(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:`Page not found`}),e[0]=t,e[1]=n):(t=e[0],n=e[1]);let r;return e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,V.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-4`,children:[t,n,(0,V.jsx)(A,{to:`/`,children:(0,V.jsx)(mt,{variant:`outline`,children:`Go back home`})})]}),e[2]=r):r=e[2],r}function tu(){let e=(0,U.c)(259),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={select:nu},e[0]=t):t=e[0];let n=Wo(t),r=je(),i=a(),{isAdmin:o}=Sn(),s;e[1]!==r||e[2]!==i?(s=function(){Ge(),xn(),i.clear(),r({to:`/login`})},e[1]=r,e[2]=i,e[3]=s):s=e[3];let c=s,l;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,V.jsxs)(Rl,{className:`flex flex-row items-center gap-2 px-4 py-3`,children:[(0,V.jsx)(`img`,{src:`/mulga-logo.svg`,alt:`Mulga`,className:`size-6 shrink-0 dark:invert`}),(0,V.jsx)(`span`,{className:`truncate text-sm font-semibold group-data-[collapsible=icon]:hidden`,children:`Spinifex`})]}),e[4]=l):l=e[4];let u;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,V.jsx)(Ul,{children:`General`}),e[5]=u):u=e[5];let d=n===`/`,f,p;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,V.jsx)(ws,{className:`size-4`}),p=(0,V.jsx)(`span`,{children:`Dashboard`}),e[6]=f,e[7]=p):(f=e[6],p=e[7]);let m;e[8]===d?m=e[9]:(m=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/`,children:(0,V.jsxs)(G,{isActive:d,tooltip:`Dashboard`,children:[f,p]})})}),e[8]=d,e[9]=m);let h;e[10]!==o||e[11]!==n?(h=o&&(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/nodes`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/nodes`),tooltip:`Nodes`,children:[(0,V.jsx)($e,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Nodes`})]})})}),e[10]=o,e[11]=n,e[12]=h):h=e[12];let g;e[13]!==m||e[14]!==h?(g=(0,V.jsxs)(Hl,{children:[u,(0,V.jsxs)(Wl,{children:[m,h]})]}),e[13]=m,e[14]=h,e[15]=g):g=e[15];let _;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,V.jsx)(Ul,{children:`EC2`}),e[16]=_):_=e[16];let v;e[17]===n?v=e[18]:(v=n.startsWith(`/ec2/describe-instances`)||n.startsWith(`/ec2/run-instances`),e[17]=n,e[18]=v);let y,b;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,V.jsx)($e,{className:`size-4`}),b=(0,V.jsx)(`span`,{children:`Instances`}),e[19]=y,e[20]=b):(y=e[19],b=e[20]);let x;e[21]===v?x=e[22]:(x=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-instances`,children:(0,V.jsxs)(G,{isActive:v,tooltip:`Instances`,children:[y,b]})})}),e[21]=v,e[22]=x);let S;e[23]===n?S=e[24]:(S=n.startsWith(`/ec2/describe-launch-templates`)||n.startsWith(`/ec2/create-launch-template`),e[23]=n,e[24]=S);let C,w;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,V.jsx)(Ss,{className:`size-4`}),w=(0,V.jsx)(`span`,{children:`Launch Templates`}),e[25]=C,e[26]=w):(C=e[25],w=e[26]);let T;e[27]===S?T=e[28]:(T=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-launch-templates`,children:(0,V.jsxs)(G,{isActive:S,tooltip:`Launch Templates`,children:[C,w]})})}),e[27]=S,e[28]=T);let E;e[29]===n?E=e[30]:(E=n.startsWith(`/ec2/describe-images`),e[29]=n,e[30]=E);let D,O;e[31]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,V.jsx)(nt,{className:`size-4`}),O=(0,V.jsx)(`span`,{children:`Images`}),e[31]=D,e[32]=O):(D=e[31],O=e[32]);let k;e[33]===E?k=e[34]:(k=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-images`,children:(0,V.jsxs)(G,{isActive:E,tooltip:`Images`,children:[D,O]})})}),e[33]=E,e[34]=k);let ee;e[35]===n?ee=e[36]:(ee=n.startsWith(`/ec2/describe-key-pairs`),e[35]=n,e[36]=ee);let te,ne;e[37]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,V.jsx)(Ye,{className:`size-4`}),ne=(0,V.jsx)(`span`,{children:`Key Pairs`}),e[37]=te,e[38]=ne):(te=e[37],ne=e[38]);let re;e[39]===ee?re=e[40]:(re=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-key-pairs`,children:(0,V.jsxs)(G,{isActive:ee,tooltip:`Key Pairs`,children:[te,ne]})})}),e[39]=ee,e[40]=re);let ie;e[41]===n?ie=e[42]:(ie=n.startsWith(`/ec2/describe-addresses`)||n.startsWith(`/ec2/allocate-address`),e[41]=n,e[42]=ie);let ae,oe;e[43]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,V.jsx)(Rs,{className:`size-4`}),oe=(0,V.jsx)(`span`,{children:`Elastic IPs`}),e[43]=ae,e[44]=oe):(ae=e[43],oe=e[44]);let se;e[45]===ie?se=e[46]:(se=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-addresses`,children:(0,V.jsxs)(G,{isActive:ie,tooltip:`Elastic IPs`,children:[ae,oe]})})}),e[45]=ie,e[46]=se);let ce;e[47]===n?ce=e[48]:(ce=n.startsWith(`/ec2/describe-volumes`)||n.startsWith(`/ec2/create-volume`)||n.startsWith(`/ec2/modify-volume`),e[47]=n,e[48]=ce);let le,ue;e[49]===Symbol.for(`react.memo_cache_sentinel`)?(le=(0,V.jsx)(Qe,{className:`size-4`}),ue=(0,V.jsx)(`span`,{children:`Volumes`}),e[49]=le,e[50]=ue):(le=e[49],ue=e[50]);let de;e[51]===ce?de=e[52]:(de=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-volumes`,children:(0,V.jsxs)(G,{isActive:ce,tooltip:`Volumes`,children:[le,ue]})})}),e[51]=ce,e[52]=de);let fe;e[53]===n?fe=e[54]:(fe=n.startsWith(`/ec2/describe-snapshots`)||n.startsWith(`/ec2/create-snapshot`),e[53]=n,e[54]=fe);let pe,me;e[55]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,V.jsx)(Je,{className:`size-4`}),me=(0,V.jsx)(`span`,{children:`Snapshots`}),e[55]=pe,e[56]=me):(pe=e[55],me=e[56]);let he;e[57]===fe?he=e[58]:(he=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-snapshots`,children:(0,V.jsxs)(G,{isActive:fe,tooltip:`Snapshots`,children:[pe,me]})})}),e[57]=fe,e[58]=he);let ge;e[59]===n?ge=e[60]:(ge=n.startsWith(`/ec2/describe-placement-groups`)||n.startsWith(`/ec2/create-placement-group`),e[59]=n,e[60]=ge);let _e,j;e[61]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,V.jsx)(As,{className:`size-4`}),j=(0,V.jsx)(`span`,{children:`Placement Groups`}),e[61]=_e,e[62]=j):(_e=e[61],j=e[62]);let M;e[63]===ge?M=e[64]:(M=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-placement-groups`,children:(0,V.jsxs)(G,{isActive:ge,tooltip:`Placement Groups`,children:[_e,j]})})}),e[63]=ge,e[64]=M);let ve;e[65]===n?ve=e[66]:(ve=n.startsWith(`/ec2/describe-load-balancers`)||n.startsWith(`/ec2/create-load-balancer`),e[65]=n,e[66]=ve);let ye,be;e[67]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,V.jsx)(tt,{className:`size-4`}),be=(0,V.jsx)(`span`,{children:`Load Balancers`}),e[67]=ye,e[68]=be):(ye=e[67],be=e[68]);let xe;e[69]===ve?xe=e[70]:(xe=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-load-balancers`,children:(0,V.jsxs)(G,{isActive:ve,tooltip:`Load Balancers`,children:[ye,be]})})}),e[69]=ve,e[70]=xe);let Se;e[71]===n?Se=e[72]:(Se=n.startsWith(`/ec2/describe-target-groups`)||n.startsWith(`/ec2/create-target-group`),e[71]=n,e[72]=Se);let N,Ce;e[73]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,V.jsx)(vs,{className:`size-4`}),Ce=(0,V.jsx)(`span`,{children:`Target Groups`}),e[73]=N,e[74]=Ce):(N=e[73],Ce=e[74]);let we;e[75]===Se?we=e[76]:(we=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-target-groups`,children:(0,V.jsxs)(G,{isActive:Se,tooltip:`Target Groups`,children:[N,Ce]})})}),e[75]=Se,e[76]=we);let Te;e[77]!==x||e[78]!==T||e[79]!==k||e[80]!==re||e[81]!==se||e[82]!==de||e[83]!==he||e[84]!==M||e[85]!==xe||e[86]!==we?(Te=(0,V.jsxs)(Hl,{children:[_,(0,V.jsxs)(Wl,{children:[x,T,k,re,se,de,he,M,xe,we]})]}),e[77]=x,e[78]=T,e[79]=k,e[80]=re,e[81]=se,e[82]=de,e[83]=he,e[84]=M,e[85]=xe,e[86]=we,e[87]=Te):Te=e[87];let Ee;e[88]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,V.jsx)(Ul,{children:`Networking`}),e[88]=Ee):Ee=e[88];let De;e[89]===n?De=e[90]:(De=n.startsWith(`/ec2/describe-vpcs`)||n.startsWith(`/ec2/create-vpc`),e[89]=n,e[90]=De);let Oe,ke;e[91]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,V.jsx)(it,{className:`size-4`}),ke=(0,V.jsx)(`span`,{children:`VPCs`}),e[91]=Oe,e[92]=ke):(Oe=e[91],ke=e[92]);let Ae;e[93]===De?Ae=e[94]:(Ae=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-vpcs`,children:(0,V.jsxs)(G,{isActive:De,tooltip:`VPCs`,children:[Oe,ke]})})}),e[93]=De,e[94]=Ae);let Me;e[95]===n?Me=e[96]:(Me=n.startsWith(`/ec2/describe-subnets`)||n.startsWith(`/ec2/create-subnet`),e[95]=n,e[96]=Me);let Ne,Pe;e[97]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,V.jsx)(Ms,{className:`size-4`}),Pe=(0,V.jsx)(`span`,{children:`Subnets`}),e[97]=Ne,e[98]=Pe):(Ne=e[97],Pe=e[98]);let Fe;e[99]===Me?Fe=e[100]:(Fe=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-subnets`,children:(0,V.jsxs)(G,{isActive:Me,tooltip:`Subnets`,children:[Ne,Pe]})})}),e[99]=Me,e[100]=Fe);let Ie;e[101]===n?Ie=e[102]:(Ie=n.startsWith(`/ec2/describe-security-groups`)||n.startsWith(`/ec2/create-security-group`),e[101]=n,e[102]=Ie);let Le,Re;e[103]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,V.jsx)(Xs,{className:`size-4`}),Re=(0,V.jsx)(`span`,{children:`Security Groups`}),e[103]=Le,e[104]=Re):(Le=e[103],Re=e[104]);let ze;e[105]===Ie?ze=e[106]:(ze=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-security-groups`,children:(0,V.jsxs)(G,{isActive:Ie,tooltip:`Security Groups`,children:[Le,Re]})})}),e[105]=Ie,e[106]=ze);let Be;e[107]===n?Be=e[108]:(Be=n.startsWith(`/ec2/describe-route-tables`)||n.startsWith(`/ec2/create-route-table`),e[107]=n,e[108]=Be);let Ve,He;e[109]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,V.jsx)(Js,{className:`size-4`}),He=(0,V.jsx)(`span`,{children:`Route Tables`}),e[109]=Ve,e[110]=He):(Ve=e[109],He=e[110]);let Ue;e[111]===Be?Ue=e[112]:(Ue=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-route-tables`,children:(0,V.jsxs)(G,{isActive:Be,tooltip:`Route Tables`,children:[Ve,He]})})}),e[111]=Be,e[112]=Ue);let P;e[113]===n?P=e[114]:(P=n.startsWith(`/ec2/describe-internet-gateways`),e[113]=n,e[114]=P);let Ke,qe;e[115]===Symbol.for(`react.memo_cache_sentinel`)?(Ke=(0,V.jsx)(et,{className:`size-4`}),qe=(0,V.jsx)(`span`,{children:`Internet Gateways`}),e[115]=Ke,e[116]=qe):(Ke=e[115],qe=e[116]);let F;e[117]===P?F=e[118]:(F=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-internet-gateways`,children:(0,V.jsxs)(G,{isActive:P,tooltip:`Internet Gateways`,children:[Ke,qe]})})}),e[117]=P,e[118]=F);let I;e[119]===n?I=e[120]:(I=n.startsWith(`/ec2/describe-nat-gateways`)||n.startsWith(`/ec2/create-nat-gateway`),e[119]=n,e[120]=I);let rt,ot;e[121]===Symbol.for(`react.memo_cache_sentinel`)?(rt=(0,V.jsx)(Xe,{className:`size-4`}),ot=(0,V.jsx)(`span`,{children:`NAT Gateways`}),e[121]=rt,e[122]=ot):(rt=e[121],ot=e[122]);let st;e[123]===I?st=e[124]:(st=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ec2/describe-nat-gateways`,children:(0,V.jsxs)(G,{isActive:I,tooltip:`NAT Gateways`,children:[rt,ot]})})}),e[123]=I,e[124]=st);let ct;e[125]!==Ae||e[126]!==Fe||e[127]!==ze||e[128]!==Ue||e[129]!==F||e[130]!==st?(ct=(0,V.jsxs)(Hl,{children:[Ee,(0,V.jsxs)(Wl,{children:[Ae,Fe,ze,Ue,F,st]})]}),e[125]=Ae,e[126]=Fe,e[127]=ze,e[128]=Ue,e[129]=F,e[130]=st,e[131]=ct):ct=e[131];let lt;e[132]===Symbol.for(`react.memo_cache_sentinel`)?(lt=(0,V.jsx)(Ul,{children:`Containers`}),e[132]=lt):lt=e[132];let ut;e[133]===n?ut=e[134]:(ut=n.startsWith(`/eks/list-clusters`)||n.startsWith(`/eks/create-cluster`),e[133]=n,e[134]=ut);let dt,ft;e[135]===Symbol.for(`react.memo_cache_sentinel`)?(dt=(0,V.jsx)(us,{className:`size-4`}),ft=(0,V.jsx)(`span`,{children:`EKS`}),e[135]=dt,e[136]=ft):(dt=e[135],ft=e[136]);let pt;e[137]===ut?pt=e[138]:(pt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/eks/list-clusters`,children:(0,V.jsxs)(G,{isActive:ut,tooltip:`EKS clusters`,children:[dt,ft]})})}),e[137]=ut,e[138]=pt);let mt;e[139]===n?mt=e[140]:(mt=n.startsWith(`/ecr/list-repositories`),e[139]=n,e[140]=mt);let ht,gt;e[141]===Symbol.for(`react.memo_cache_sentinel`)?(ht=(0,V.jsx)(Ws,{className:`size-4`}),gt=(0,V.jsx)(`span`,{children:`ECR`}),e[141]=ht,e[142]=gt):(ht=e[141],gt=e[142]);let _t;e[143]===mt?_t=e[144]:(_t=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ecr/list-repositories`,children:(0,V.jsxs)(G,{isActive:mt,tooltip:`ECR repositories`,children:[ht,gt]})})}),e[143]=mt,e[144]=_t);let vt;e[145]===n?vt=e[146]:(vt=n.startsWith(`/ecs/`),e[145]=n,e[146]=vt);let yt,bt;e[147]===Symbol.for(`react.memo_cache_sentinel`)?(yt=(0,V.jsx)(gs,{className:`size-4`}),bt=(0,V.jsx)(`span`,{children:`ECS`}),e[147]=yt,e[148]=bt):(yt=e[147],bt=e[148]);let xt;e[149]===vt?xt=e[150]:(xt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/ecs/list-clusters`,children:(0,V.jsxs)(G,{isActive:vt,tooltip:`ECS clusters`,children:[yt,bt]})})}),e[149]=vt,e[150]=xt);let St;e[151]!==pt||e[152]!==_t||e[153]!==xt?(St=(0,V.jsxs)(Hl,{children:[lt,(0,V.jsxs)(Wl,{children:[pt,_t,xt]})]}),e[151]=pt,e[152]=_t,e[153]=xt,e[154]=St):St=e[154];let Ct;e[155]===Symbol.for(`react.memo_cache_sentinel`)?(Ct=(0,V.jsx)(Ul,{children:`RDS`}),e[155]=Ct):Ct=e[155];let wt;e[156]===n?wt=e[157]:(wt=n.startsWith(`/rds/describe-db-instances`)||n.startsWith(`/rds/create-db-instance`),e[156]=n,e[157]=wt);let Tt,Et;e[158]===Symbol.for(`react.memo_cache_sentinel`)?(Tt=(0,V.jsx)(bs,{className:`size-4`}),Et=(0,V.jsx)(`span`,{children:`Databases`}),e[158]=Tt,e[159]=Et):(Tt=e[158],Et=e[159]);let Dt;e[160]===wt?Dt=e[161]:(Dt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/rds/describe-db-instances`,children:(0,V.jsxs)(G,{isActive:wt,tooltip:`Databases`,children:[Tt,Et]})})}),e[160]=wt,e[161]=Dt);let Ot;e[162]===n?Ot=e[163]:(Ot=n.startsWith(`/rds/describe-db-snapshots`)||n.startsWith(`/rds/restore-db-instance-from-db-snapshot`),e[162]=n,e[163]=Ot);let kt,At;e[164]===Symbol.for(`react.memo_cache_sentinel`)?(kt=(0,V.jsx)(Je,{className:`size-4`}),At=(0,V.jsx)(`span`,{children:`Snapshots`}),e[164]=kt,e[165]=At):(kt=e[164],At=e[165]);let jt;e[166]===Ot?jt=e[167]:(jt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/rds/describe-db-snapshots`,children:(0,V.jsxs)(G,{isActive:Ot,tooltip:`DB Snapshots`,children:[kt,At]})})}),e[166]=Ot,e[167]=jt);let Mt;e[168]===n?Mt=e[169]:(Mt=n.startsWith(`/rds/describe-db-subnet-groups`)||n.startsWith(`/rds/create-db-subnet-group`),e[168]=n,e[169]=Mt);let Nt,Pt;e[170]===Symbol.for(`react.memo_cache_sentinel`)?(Nt=(0,V.jsx)(Ms,{className:`size-4`}),Pt=(0,V.jsx)(`span`,{children:`Subnet Groups`}),e[170]=Nt,e[171]=Pt):(Nt=e[170],Pt=e[171]);let Ft;e[172]===Mt?Ft=e[173]:(Ft=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/rds/describe-db-subnet-groups`,children:(0,V.jsxs)(G,{isActive:Mt,tooltip:`DB Subnet Groups`,children:[Nt,Pt]})})}),e[172]=Mt,e[173]=Ft);let It;e[174]===n?It=e[175]:(It=n.startsWith(`/rds/describe-db-parameter-groups`)||n.startsWith(`/rds/create-db-parameter-group`),e[174]=n,e[175]=It);let Lt,Rt;e[176]===Symbol.for(`react.memo_cache_sentinel`)?(Lt=(0,V.jsx)(at,{className:`size-4`}),Rt=(0,V.jsx)(`span`,{children:`Parameter Groups`}),e[176]=Lt,e[177]=Rt):(Lt=e[176],Rt=e[177]);let zt;e[178]===It?zt=e[179]:(zt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/rds/describe-db-parameter-groups`,children:(0,V.jsxs)(G,{isActive:It,tooltip:`DB Parameter Groups`,children:[Lt,Rt]})})}),e[178]=It,e[179]=zt);let Bt;e[180]!==jt||e[181]!==Ft||e[182]!==zt||e[183]!==Dt?(Bt=(0,V.jsxs)(Hl,{children:[Ct,(0,V.jsxs)(Wl,{children:[Dt,jt,Ft,zt]})]}),e[180]=jt,e[181]=Ft,e[182]=zt,e[183]=Dt,e[184]=Bt):Bt=e[184];let Vt;e[185]===Symbol.for(`react.memo_cache_sentinel`)?(Vt=(0,V.jsx)(Ul,{children:`IAM`}),e[185]=Vt):Vt=e[185];let Ht;e[186]===n?Ht=e[187]:(Ht=n.startsWith(`/iam/list-users`)||n.startsWith(`/iam/create-user`),e[186]=n,e[187]=Ht);let Ut,Wt;e[188]===Symbol.for(`react.memo_cache_sentinel`)?(Ut=(0,V.jsx)(ic,{className:`size-4`}),Wt=(0,V.jsx)(`span`,{children:`Users`}),e[188]=Ut,e[189]=Wt):(Ut=e[188],Wt=e[189]);let Gt;e[190]===Ht?Gt=e[191]:(Gt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/iam/list-users`,children:(0,V.jsxs)(G,{isActive:Ht,tooltip:`Users`,children:[Ut,Wt]})})}),e[190]=Ht,e[191]=Gt);let Kt;e[192]===n?Kt=e[193]:(Kt=n.startsWith(`/iam/list-groups`)||n.startsWith(`/iam/create-group`),e[192]=n,e[193]=Kt);let L,qt;e[194]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,V.jsx)(nc,{className:`size-4`}),qt=(0,V.jsx)(`span`,{children:`Groups`}),e[194]=L,e[195]=qt):(L=e[194],qt=e[195]);let Jt;e[196]===Kt?Jt=e[197]:(Jt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/iam/list-groups`,children:(0,V.jsxs)(G,{isActive:Kt,tooltip:`Groups`,children:[L,qt]})})}),e[196]=Kt,e[197]=Jt);let Yt;e[198]===n?Yt=e[199]:(Yt=n.startsWith(`/iam/list-policies`)||n.startsWith(`/iam/create-policy`),e[198]=n,e[199]=Yt);let Xt,Zt;e[200]===Symbol.for(`react.memo_cache_sentinel`)?(Xt=(0,V.jsx)(Ze,{className:`size-4`}),Zt=(0,V.jsx)(`span`,{children:`Policies`}),e[200]=Xt,e[201]=Zt):(Xt=e[200],Zt=e[201]);let Qt;e[202]===Yt?Qt=e[203]:(Qt=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/iam/list-policies`,children:(0,V.jsxs)(G,{isActive:Yt,tooltip:`Policies`,children:[Xt,Zt]})})}),e[202]=Yt,e[203]=Qt);let $t;e[204]===n?$t=e[205]:($t=n.startsWith(`/iam/list-roles`)||n.startsWith(`/iam/create-role`),e[204]=n,e[205]=$t);let en,tn;e[206]===Symbol.for(`react.memo_cache_sentinel`)?(en=(0,V.jsx)(ec,{className:`size-4`}),tn=(0,V.jsx)(`span`,{children:`Roles`}),e[206]=en,e[207]=tn):(en=e[206],tn=e[207]);let nn;e[208]===$t?nn=e[209]:(nn=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/iam/list-roles`,children:(0,V.jsxs)(G,{isActive:$t,tooltip:`Roles`,children:[en,tn]})})}),e[208]=$t,e[209]=nn);let rn;e[210]===n?rn=e[211]:(rn=n.startsWith(`/iam/list-instance-profiles`)||n.startsWith(`/iam/create-instance-profile`),e[210]=n,e[211]=rn);let an,on;e[212]===Symbol.for(`react.memo_cache_sentinel`)?(an=(0,V.jsx)(Es,{className:`size-4`}),on=(0,V.jsx)(`span`,{children:`Instance Profiles`}),e[212]=an,e[213]=on):(an=e[212],on=e[213]);let sn;e[214]===rn?sn=e[215]:(sn=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/iam/list-instance-profiles`,children:(0,V.jsxs)(G,{isActive:rn,tooltip:`Instance Profiles`,children:[an,on]})})}),e[214]=rn,e[215]=sn);let cn;e[216]!==Gt||e[217]!==Jt||e[218]!==Qt||e[219]!==nn||e[220]!==sn?(cn=(0,V.jsxs)(Hl,{children:[Vt,(0,V.jsxs)(Wl,{children:[Gt,Jt,Qt,nn,sn]})]}),e[216]=Gt,e[217]=Jt,e[218]=Qt,e[219]=nn,e[220]=sn,e[221]=cn):cn=e[221];let ln;e[222]===Symbol.for(`react.memo_cache_sentinel`)?(ln=(0,V.jsx)(Ul,{children:`S3`}),e[222]=ln):ln=e[222];let un;e[223]===n?un=e[224]:(un=n.startsWith(`/s3/ls`),e[223]=n,e[224]=un);let dn,fn;e[225]===Symbol.for(`react.memo_cache_sentinel`)?(dn=(0,V.jsx)($e,{className:`size-4`}),fn=(0,V.jsx)(`span`,{children:`Buckets`}),e[225]=dn,e[226]=fn):(dn=e[225],fn=e[226]);let pn;e[227]===un?pn=e[228]:(pn=(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/s3/ls`,children:(0,V.jsxs)(G,{isActive:un,tooltip:`Buckets`,children:[dn,fn]})})}),e[227]=un,e[228]=pn);let mn;e[229]!==o||e[230]!==n?(mn=o&&(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/s3/service-metrics`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/s3/service-metrics`),tooltip:`Service Metrics`,children:[(0,V.jsx)(os,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Service Metrics`})]})})}),e[229]=o,e[230]=n,e[231]=mn):mn=e[231];let hn;e[232]!==pn||e[233]!==mn?(hn=(0,V.jsxs)(Hl,{children:[ln,(0,V.jsxs)(Wl,{children:[pn,mn]})]}),e[232]=pn,e[233]=mn,e[234]=hn):hn=e[234];let gn;e[235]!==o||e[236]!==n?(gn=We()&&(0,V.jsxs)(Hl,{children:[(0,V.jsx)(Ul,{children:`Ochre`}),(0,V.jsxs)(Wl,{children:[(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/bedrock/list-knowledge-bases`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/bedrock/list-knowledge-bases`),tooltip:`Knowledge Bases`,children:[(0,V.jsx)(fs,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Knowledge Bases`})]})})}),(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/bedrock/list-guardrails`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/bedrock/list-guardrails`),tooltip:`Guardrails`,children:[(0,V.jsx)(Ze,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Guardrails`})]})})}),(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/bedrock/playground`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/bedrock/playground`),tooltip:`Playground`,children:[(0,V.jsx)(Bs,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Playground`})]})})}),o&&(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/bedrock/list-model-catalog`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/bedrock/list-model-catalog`),tooltip:`Model Catalog`,children:[(0,V.jsx)(Ps,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Model Catalog`})]})})}),o&&(0,V.jsx)(W,{children:(0,V.jsx)(A,{to:`/bedrock/list-model-access`,children:(0,V.jsxs)(G,{isActive:n.startsWith(`/bedrock/list-model-access`),tooltip:`Model Access`,children:[(0,V.jsx)(Os,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Model Access`})]})})})]})]}),e[235]=o,e[236]=n,e[237]=gn):gn=e[237];let _n;e[238]===o?_n=e[239]:(_n=o&&(0,V.jsxs)(Hl,{children:[(0,V.jsx)(Ul,{children:`Documentation`}),(0,V.jsx)(Wl,{children:(0,V.jsx)(W,{children:(0,V.jsx)(`a`,{href:`https://docs.mulgadc.com`,target:`_blank`,rel:`noopener noreferrer`,children:(0,V.jsxs)(G,{tooltip:`Documentation`,children:[(0,V.jsx)(cs,{className:`size-4`}),(0,V.jsx)(`span`,{children:`Docs`})]})})})})]}),e[238]=o,e[239]=_n);let vn;e[240]!==Bt||e[241]!==cn||e[242]!==hn||e[243]!==gn||e[244]!==_n||e[245]!==Te||e[246]!==ct||e[247]!==g||e[248]!==St?(vn=(0,V.jsxs)(Vl,{children:[g,Te,ct,St,Bt,cn,hn,gn,_n]}),e[240]=Bt,e[241]=cn,e[242]=hn,e[243]=gn,e[244]=_n,e[245]=Te,e[246]=ct,e[247]=g,e[248]=St,e[249]=vn):vn=e[249];let yn;e[250]===Symbol.for(`react.memo_cache_sentinel`)?(yn=(0,V.jsx)(Bl,{className:`mx-0 w-full`}),e[250]=yn):yn=e[250];let bn,Cn;e[251]===Symbol.for(`react.memo_cache_sentinel`)?(bn=(0,V.jsx)(Is,{className:`size-4`}),Cn=(0,V.jsx)(`span`,{children:`Sign out`}),e[251]=bn,e[252]=Cn):(bn=e[251],Cn=e[252]);let wn;e[253]===c?wn=e[254]:(wn=(0,V.jsxs)(zl,{children:[yn,(0,V.jsx)(Wl,{children:(0,V.jsx)(W,{children:(0,V.jsxs)(G,{onClick:c,tooltip:`Sign out`,children:[bn,Cn]})})})]}),e[253]=c,e[254]=wn);let Tn;e[255]===Symbol.for(`react.memo_cache_sentinel`)?(Tn=(0,V.jsx)(Ll,{}),e[255]=Tn):Tn=e[255];let En;return e[256]!==vn||e[257]!==wn?(En=(0,V.jsxs)(Fl,{collapsible:`icon`,children:[l,vn,wn,Tn]}),e[256]=vn,e[257]=wn,e[258]=En):En=e[258],En}function nu(e){return e.pathname}function ru(e){let t=(0,U.c)(18),{error:n,reset:r}=e,i=De(),o=a(),s;t[0]!==o||t[1]!==r||t[2]!==i?(s=function(){o.invalidateQueries(),r(),i.invalidate()},t[0]=o,t[1]=r,t[2]=i,t[3]=s):s=t[3];let c=s,l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,V.jsx)(tu,{}),t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,V.jsx)($l,{}),t[5]=u):u=t[5];let d,f;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,V.jsx)(`div`,{className:`flex justify-center`,children:(0,V.jsx)(ms,{className:`size-12 text-destructive`})}),f=(0,V.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Something went wrong`}),t[6]=d,t[7]=f):(d=t[6],f=t[7]);let p=(n instanceof Error?n.message:String(n))||`An unexpected error occurred`,m;t[8]===p?m=t[9]:(m=(0,V.jsx)(`p`,{className:`text-muted-foreground`,children:p}),t[8]=p,t[9]=m);let h;t[10]===c?h=t[11]:(h=(0,V.jsx)(mt,{onClick:c,variant:`default`,children:`Try Again`}),t[10]=c,t[11]=h);let g;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,V.jsx)(A,{to:`/`,children:(0,V.jsx)(mt,{variant:`outline`,children:`Go Home`})}),t[12]=g):g=t[12];let _;t[13]===h?_=t[14]:(_=(0,V.jsxs)(`div`,{className:`flex justify-center gap-2`,children:[h,g]}),t[13]=h,t[14]=_);let v;return t[15]!==_||t[16]!==m?(v=(0,V.jsxs)(V.Fragment,{children:[l,(0,V.jsxs)(`main`,{className:`flex flex-1 flex-col`,children:[u,(0,V.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-6 pt-0`,children:(0,V.jsxs)(`div`,{className:`max-w-md space-y-4 text-center`,children:[d,f,m,_]})})]})]}),t[15]=_,t[16]=m,t[17]=v):v=t[17],v}var K=E()({head:()=>({meta:[{title:`Mulga`}]}),component:()=>(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Xo,{}),(0,V.jsx)(tu,{}),(0,V.jsxs)(`main`,{className:`flex flex-1 flex-col`,children:[(0,V.jsx)($l,{}),(0,V.jsx)(`div`,{className:`flex flex-1 flex-col p-8`,children:(0,V.jsx)(be,{})})]})]}),errorComponent:ru,notFoundComponent:eu}),iu=w(`/_auth`)({beforeLoad:()=>{if(!qe())throw we({to:`/login`})},component:D(()=>F(()=>import(`./route-ri79I-mW.js`),__vite__mapDeps([0,1,2,3,4,5])),`component`)}),au=w(`/_auth/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Ln,staleTime:`static`}),e.queryClient.query({...On,staleTime:`static`}),e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...Bn,staleTime:`static`}),e.queryClient.query({...sr,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`}),e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...Rn,staleTime:`static`}),e.queryClient.query({...Fn,staleTime:`static`})])},head:()=>({meta:[{title:`Dashboard | Mulga`}]}),component:D(()=>F(()=>import(`./_auth-Cg3v0g0g.js`),__vite__mapDeps([6,1,7,8,9,10,11,4,5,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])),`component`)}),ou=w(`/_auth/bedrock`)({beforeLoad:()=>{We()||xe({throw:!0})},component:D(()=>F(()=>import(`./route-CAwLPdN1.js`),__vite__mapDeps([40,1,2,3,4,5])),`component`)}),su=w(`/_auth/nodes`)({head:()=>({meta:[{title:`Nodes | Mulga`}]}),component:D(()=>F(()=>import(`./nodes-D2CP1Pn7.js`),__vite__mapDeps([41,1,7,8,9,10,11,4,5,42,12,13,15,14,16,19,20,21,27,28,29,30,31,32,23])),`component`)}),cu=w(`/_auth/s3/service-metrics`)({head:()=>({meta:[{title:`Service Metrics | S3 | Mulga`}]}),component:D(()=>F(()=>import(`./service-metrics-BTAb6rAK.js`),__vite__mapDeps([43,1,7,8,9,10,42,19,12,13,20,21,27,28,29,30,31,32,23])),`component`)}),lu=w(`/_auth/ec2/(elastic-ips)/allocate-address`)({head:()=>({meta:[{title:`Allocate Elastic IP | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./allocate-address-BqJUGAgz.js`),__vite__mapDeps([44,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),uu=w(`/_auth/ec2/(internet-gateways)/create-internet-gateway`)({head:()=>({meta:[{title:`Create Internet Gateway | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-internet-gateway-Dwj_-BW9.js`),__vite__mapDeps([64,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),du=w(`/_auth/ec2/(key)/create-key-pair`)({head:()=>({meta:[{title:`Create Key Pair | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-key-pair-C7YX-AO2.js`),__vite__mapDeps([65,1,45,4,5,46,11,14,48,66,36,29,12,13,34,37,15,52,38,67,68,53,69,70,47,49,50,71,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,33,35,63])),`component`)}),fu=w(`/_auth/ec2/(key)/import-key-pair`)({head:()=>({meta:[{title:`Import Key Pair | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./import-key-pair-x6cy9gMM.js`),__vite__mapDeps([72,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,73,63])),`component`)}),pu=w(`/_auth/ec2/(launch-templates)/create-launch-template`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...zn,staleTime:`static`}),e.queryClient.query({...Pn,staleTime:`static`}),e.queryClient.query({...Bn,staleTime:`static`}),e.queryClient.query({...jn,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Launch Template | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-launch-template-VIoUeN7g.js`),__vite__mapDeps([74,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63,75,76,8,10,66,36,38,67,68,69,73,77])),`component`)}),mu=w(`/_auth/ec2/(load-balancers)/create-load-balancer`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...jn,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`}),e.queryClient.query({...Xn,staleTime:`static`}),e.queryClient.query({...wn,staleTime:`static`}),e.queryClient.query({...Yn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Load Balancer | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-load-balancer-BPY5X6lX.js`),__vite__mapDeps([78,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,79,23,24,25,80,55,56,59,61,62,73,33,35,22,81,82,83,27,58,60,84,85,86,87,77,88])),`component`)}),hu=w(`/_auth/ec2/(nat-gateways)/create-nat-gateway`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...jn,staleTime:`static`}),e.queryClient.query({...Rn,staleTime:`static`})])},head:()=>({meta:[{title:`Create NAT Gateway | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-nat-gateway-BF-3LK_W.js`),__vite__mapDeps([89,1,76,8,9,10,11,4,5,45,12,13,46,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),gu=w(`/_auth/ec2/(placement-groups)/create-placement-group`)({head:()=>({meta:[{title:`Create Placement Group | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-placement-group-C_JJp8Dt.js`),__vite__mapDeps([90,1,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),_u=w(`/_auth/ec2/(route-tables)/create-route-table`)({loader:async({context:e})=>{await e.queryClient.query({...An,staleTime:`static`})},head:()=>({meta:[{title:`Create Route Table | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-route-table-BjZ3QG0v.js`),__vite__mapDeps([91,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),vu=w(`/_auth/ec2/(security-groups)/create-security-group`)({loader:async({context:e})=>{await e.queryClient.query({...An,staleTime:`static`})},head:()=>({meta:[{title:`Create Security Group | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-security-group-B0XC1OvX.js`),__vite__mapDeps([92,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),yu=w(`/_auth/ec2/(subnet)/create-subnet`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...Vn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Subnet | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-subnet-BbA2kLfW.js`),__vite__mapDeps([93,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),bu=w(`/_auth/ec2/(target-groups)/create-target-group`)({loader:async({context:e})=>{await e.queryClient.query({...An,staleTime:`static`})},head:()=>({meta:[{title:`Create Target Group | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-target-group-BGShIRhO.js`),__vite__mapDeps([94,1,76,8,9,10,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,22,23,24,25,81,55,56,82,27,58,59,60,87,66,36,37,52,38,67,68,53,69,51,61,62,84,85,86,77,88])),`component`)}),xu=w(`/_auth/ec2/(volumes)/create-volume`)({loader:async({context:e})=>{await e.queryClient.query({...Vn,staleTime:`static`})},head:()=>({meta:[{title:`Create Volume | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-volume-_mFhkjRH.js`),__vite__mapDeps([95,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),Su=w(`/_auth/ec2/(vpc)/create-vpc`)({head:()=>({meta:[{title:`Create VPC | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./create-vpc-D5-RWY8E.js`),__vite__mapDeps([96,1,45,4,5,46,11,14,15,16,66,36,29,12,13,34,37,48,52,38,67,68,53,69,47,49,50,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),Cu=w(`/_auth/ecs/(clusters)/task-definitions`)({loader:async({context:e})=>{await e.queryClient.query({...Kn,staleTime:`static`})},head:()=>({meta:[{title:`Task Definitions | ECS | Mulga`}]}),component:D(()=>F(()=>import(`./task-definitions-CUmhuZtU.js`),__vite__mapDeps([97,1,76,8,9,10,11,4,5,34,29,12,13,98,23,24,25,99,55,56,21,27,59,100,33,35,36,37,38,101])),`component`)}),wu=w(`/_auth/eks/(clusters)/create-cluster`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...jn,staleTime:`static`}),e.queryClient.query({...tr,staleTime:`static`}),e.queryClient.query({...zn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Cluster | EKS | Mulga`}]}),component:D(()=>F(()=>import(`./create-cluster-Cy3fUa1r.js`),__vite__mapDeps([102,1,9,76,8,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,51,22,23,24,25,103,55,56,104,105,57,106,107,108,27,58,59,60,61,62,33,35,109,110,49,111,71,50,112])),`component`)}),Tu=w(`/_auth/iam/(groups)/create-group`)({head:()=>({meta:[{title:`Create Group | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./create-group-D0NYn8W8.js`),__vite__mapDeps([113,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),Eu=w(`/_auth/iam/(instance-profiles)/create-instance-profile`)({head:()=>({meta:[{title:`Create Instance Profile | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./create-instance-profile-Cb5zGMcm.js`),__vite__mapDeps([115,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),Du=w(`/_auth/iam/(policies)/create-policy`)({head:()=>({meta:[{title:`Create Policy | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./create-policy-DlJ9bZT3.js`),__vite__mapDeps([116,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,117,105,73,114])),`component`)}),Ou=w(`/_auth/iam/(roles)/create-role`)({head:()=>({meta:[{title:`Create Role | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./create-role-BaGfB4lO.js`),__vite__mapDeps([118,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,117,105,73,114])),`component`)}),ku=w(`/_auth/iam/(users)/create-user`)({head:()=>({meta:[{title:`Create User | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./create-user-vDT-lrk7.js`),__vite__mapDeps([119,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),Au=w(`/_auth/rds/(db-instances)/create-db-instance`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...ar,staleTime:`static`}),e.queryClient.query({...ir,staleTime:`static`}),e.queryClient.query({...rr,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`}),e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...zn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Database | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./create-db-instance-Q5Pdr85P.js`),__vite__mapDeps([120,1,9,7,8,10,76,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,121,122,55,56,123,27,58,59,60,61,62,84,85,86,109,110,111,71,124,125])),`component`)}),ju=w(`/_auth/rds/(parameter-groups)/create-db-parameter-group`)({loader:async({context:e})=>{await e.queryClient.query({...ar,staleTime:`static`})},head:()=>({meta:[{title:`Create Parameter Group | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./create-db-parameter-group-BvJjm9oV.js`),__vite__mapDeps([126,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,121,24,25,122,55,56,123,23,27,58,59,60,61,62,84,85,86])),`component`)}),Mu=w(`/_auth/rds/(subnet-groups)/create-db-subnet-group`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...jn,staleTime:`static`}),e.queryClient.query({...An,staleTime:`static`})])},head:()=>({meta:[{title:`Create Subnet Group | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./create-db-subnet-group-D2PX3uoX.js`),__vite__mapDeps([127,1,76,8,9,10,45,4,5,12,13,46,11,14,47,48,15,49,34,29,50,51,37,52,53,22,23,24,25,121,122,55,56,27,58,59,60,61,62,84,85,86])),`component`)}),Nu=w(`/_auth/s3/(buckets)/create-bucket`)({head:()=>({meta:[{title:`Create Bucket | S3 | Mulga`}]}),component:D(()=>F(()=>import(`./create-bucket-DxusrabG.js`),__vite__mapDeps([128,1,45,4,5,12,13,46,11,14,47,48,15,49,34,29,50,51,37,52,53,129,9,55,56,24,25,27,58,59,60,61,62])),`component`)}),Pu=w(`/_auth/s3/ls/`)({loader:async({context:e})=>{await e.queryClient.query({...sr,staleTime:`static`})},head:()=>({meta:[{title:`Buckets | S3 | Mulga`}]}),component:D(()=>F(()=>import(`./ls-TM8kmIJ2.js`),__vite__mapDeps([130,1,76,8,9,10,11,4,5,12,13,34,29,26,23,24,25,27,131])),`component`)}),Fu=w(`/_auth/s3/ls/$bucket`)({component:D(()=>F(()=>import(`./route-MJhrpG5n.js`),__vite__mapDeps([132,1,2,3,4,5])),`component`)}),Iu=w(`/_auth/bedrock/(catalog)/list-model-catalog/`)({head:()=>({meta:[{title:`Model Catalog | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./list-model-catalog-CoTQPvKo.js`),__vite__mapDeps([133,1,7,8,9,10,42,12,13,19,20,21,27,28,29,30,31,32,23])),`component`)}),Lu=w(`/_auth/bedrock/(guardrails)/list-guardrails/`)({loader:async({context:e})=>{await e.queryClient.query({...Tn,staleTime:`static`})},head:()=>({meta:[{title:`Guardrails | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./list-guardrails-DNrvWtXR.js`),__vite__mapDeps([134,1,76,8,9,10,11,4,5,34,29,12,13,135,23,24,25,136,27,39,131])),`component`)}),Ru=w(`/_auth/bedrock/(guardrails)/list-guardrails/create`)({head:()=>({meta:[{title:`Create Guardrail | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./create-DP60zgai.js`),__vite__mapDeps([137,1,138,9,55,56,12,13,24,25,136,139,45,4,5,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,85,86,51,27,58,59,60,61,62,84,73])),`component`)}),zu=w(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/`)({loader:async({context:e})=>{await e.queryClient.query({...Dn,staleTime:`static`})},head:()=>({meta:[{title:`Knowledge Bases | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./list-knowledge-bases-FRi1Cu0q.js`),__vite__mapDeps([140,1,76,8,9,10,11,4,5,34,29,12,13,141,23,24,25,142,27,39,131])),`component`)}),Bu=w(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/create`)({loader:async({context:e})=>{await e.queryClient.query({...En,staleTime:`static`})},head:()=>({meta:[{title:`Create Knowledge Base | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./create-b5D-gsjR.js`),__vite__mapDeps([143,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,51,135,23,24,25,136,144,55,56,142,27,58,59,60,61,62,73])),`component`)}),Vu=w(`/_auth/bedrock/(model-access)/list-model-access/`)({head:()=>({meta:[{title:`Model Access | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./list-model-access-COS9MQ20.js`),__vite__mapDeps([145,1,9,55,56,7,8,10,42,66,36,29,12,13,34,37,14,48,15,52,38,5,67,68,53,69,51,19,20,21,27,28,30,31,32,23,61,62])),`component`)}),Hu=w(`/_auth/bedrock/(playground)/playground/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...En,staleTime:`static`}),e.queryClient.query({...Tn,staleTime:`static`})])},head:()=>({meta:[{title:`Playground | Ochre | Mulga`}]}),component:D(()=>F(()=>import(`./playground-DhTOBnjO.js`),__vite__mapDeps([146,1,55,9,56,76,8,10,12,13,15,14,66,36,29,34,37,48,52,38,5,67,68,53,69,47,49,50,51,24,25,135,23,136,147,27,28,30,61,62,73])),`component`)}),Uu=w(`/_auth/ec2/(elastic-ips)/describe-addresses/`)({loader:async({context:e})=>{await e.queryClient.query({...Rn,staleTime:`static`})},head:()=>({meta:[{title:`Elastic IPs | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-addresses-BvGejO0s.js`),__vite__mapDeps([148,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,131])),`component`)}),Wu=w(`/_auth/ec2/(images)/describe-images/`)({loader:async({context:e})=>{await e.queryClient.query({...zn,staleTime:`static`})},head:()=>({meta:[{title:`Images | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-images-D95mop7O.js`),__vite__mapDeps([149,1,76,8,9,10,22,23,12,13,24,25,27,39,131,11,4,5,109])),`component`)}),Gu=w(`/_auth/ec2/(instances)/describe-instances/`)({loader:async({context:e})=>{await e.queryClient.query({...Ln,staleTime:`static`})},head:()=>({meta:[{title:`Instances | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-instances-C7L5X-xg.js`),__vite__mapDeps([150,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),Ku=w(`/_auth/ec2/(internet-gateways)/describe-internet-gateways/`)({loader:async({context:e})=>{await e.queryClient.query({...Fn,staleTime:`static`})},head:()=>({meta:[{title:`Internet Gateways | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-internet-gateways-Dh9zgncU.js`),__vite__mapDeps([151,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,131])),`component`)}),qu=w(`/_auth/ec2/(key)/describe-key-pairs/`)({loader:async({context:e})=>{await e.queryClient.query({...Bn,staleTime:`static`})},head:()=>({meta:[{title:`Key Pairs | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-key-pairs-CIcalo7_.js`),__vite__mapDeps([152,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,131])),`component`)}),Ju=w(`/_auth/ec2/(launch-templates)/describe-launch-templates/`)({loader:async({context:e})=>{await e.queryClient.query({...In,staleTime:`static`})},head:()=>({meta:[{title:`Launch Templates | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-launch-templates-16l2HSO9.js`),__vite__mapDeps([153,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,28,30,131])),`component`)}),Yu=w(`/_auth/ec2/(load-balancers)/describe-load-balancers/`)({loader:async({context:e})=>{await e.queryClient.query({...Jn,staleTime:`static`})},head:()=>({meta:[{title:`Load Balancers | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-load-balancers-CvSYkE1t.js`),__vite__mapDeps([154,1,76,8,9,10,11,4,5,45,12,13,34,29,83,23,24,25,82,27,39])),`component`)}),Xu=w(`/_auth/ec2/(nat-gateways)/describe-nat-gateways/`)({loader:async({context:e})=>{await e.queryClient.query({...Nn,staleTime:`static`})},head:()=>({meta:[{title:`NAT Gateways | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-nat-gateways-BeyzhmC1.js`),__vite__mapDeps([155,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),Zu=w(`/_auth/ec2/(placement-groups)/describe-placement-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Un,staleTime:`static`})},head:()=>({meta:[{title:`Placement Groups | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-placement-groups-DO9--Khm.js`),__vite__mapDeps([156,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),Qu=w(`/_auth/ec2/(route-tables)/describe-route-tables/`)({loader:async({context:e})=>{await e.queryClient.query({...Mn,staleTime:`static`})},head:()=>({meta:[{title:`Route Tables | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-route-tables-B3zHyrvm.js`),__vite__mapDeps([157,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,28,30,131])),`component`)}),q=w(`/_auth/ec2/(security-groups)/describe-security-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Hn,staleTime:`static`})},head:()=>({meta:[{title:`Security Groups | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-security-groups-05FUEYLk.js`),__vite__mapDeps([158,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,131])),`component`)}),$u=w(`/_auth/ec2/(snapshots)/describe-snapshots/`)({loader:async({context:e})=>{await e.queryClient.query({...kn,staleTime:`static`})},head:()=>({meta:[{title:`Snapshots | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-snapshots-DJhUVUCi.js`),__vite__mapDeps([159,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),J=w(`/_auth/ec2/(subnet)/describe-subnets/`)({loader:async({context:e})=>{await e.queryClient.query({...jn,staleTime:`static`})},head:()=>({meta:[{title:`Subnets | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-subnets-Rh3w0AKG.js`),__vite__mapDeps([160,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),Y=w(`/_auth/ec2/(target-groups)/describe-target-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Xn,staleTime:`static`})},head:()=>({meta:[{title:`Target Groups | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-target-groups--rLbL4B_.js`),__vite__mapDeps([161,1,7,8,9,10,76,11,4,5,45,34,29,12,13,83,23,24,25,82,27])),`component`)}),X=w(`/_auth/ec2/(volumes)/describe-volumes/`)({loader:async({context:e})=>{await e.queryClient.query({...On,staleTime:`static`})},head:()=>({meta:[{title:`Volumes | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-volumes-BOLvkqX1.js`),__vite__mapDeps([162,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),ed=w(`/_auth/ec2/(vpc)/describe-vpcs/`)({loader:async({context:e})=>{await e.queryClient.query({...An,staleTime:`static`})},head:()=>({meta:[{title:`VPCs | EC2 | Mulga`}]}),component:D(()=>F(()=>import(`./describe-vpcs-BfQ6LNv4.js`),__vite__mapDeps([163,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),td=w(`/_auth/ecr/(repositories)/list-repositories/`)({loader:async({context:e})=>{await e.queryClient.query({...Wn,staleTime:`static`})},head:()=>({meta:[{title:`Repositories | ECR | Mulga`}]}),component:D(()=>F(()=>import(`./list-repositories-DHOyauAo.js`),__vite__mapDeps([164,1,76,8,9,10,11,4,5,45,12,13,34,29,51,37,52,53,165,23,24,25,166,55,56,27,61,62,33,35,36,38])),`component`)}),nd=w(`/_auth/ecs/(clusters)/list-clusters/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Gn,staleTime:`static`}),e.queryClient.query({...zn,staleTime:`static`})])},head:()=>({meta:[{title:`Clusters | ECS | Mulga`}]}),component:D(()=>F(()=>import(`./list-clusters-X6G1LD1-.js`),__vite__mapDeps([167,1,9,76,8,10,11,4,5,45,34,29,12,13,51,37,52,53,22,23,24,25,98,99,55,56,21,27,59,61,62,33,35,36,38,100,39,109,110,48,14,49,111,71,50,101])),`component`)}),rd=w(`/_auth/eks/(clusters)/list-clusters/`)({loader:async({context:e})=>{await e.queryClient.query({...qn,staleTime:`static`})},head:()=>({meta:[{title:`Clusters | EKS | Mulga`}]}),component:D(()=>F(()=>import(`./list-clusters-xA7fv2I4.js`),__vite__mapDeps([168,1,76,8,9,10,11,4,5,34,29,12,13,169,23,24,25,104,27,131])),`component`)}),id=w(`/_auth/iam/(groups)/list-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...$n,staleTime:`static`})},head:()=>({meta:[{title:`Groups | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./list-groups-86WQHO2k.js`),__vite__mapDeps([170,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),ad=w(`/_auth/iam/(instance-profiles)/list-instance-profiles/`)({loader:async({context:e})=>{await e.queryClient.query({...Qn,staleTime:`static`})},head:()=>({meta:[{title:`Instance Profiles | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./list-instance-profiles-EE5QowIu.js`),__vite__mapDeps([171,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),od=w(`/_auth/iam/(policies)/list-policies/`)({loader:async({context:e})=>{await e.queryClient.query({...er,staleTime:`static`})},head:()=>({meta:[{title:`Policies | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./list-policies-BO0BzScg.js`),__vite__mapDeps([172,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),sd=w(`/_auth/iam/(roles)/list-roles/`)({loader:async({context:e})=>{await e.queryClient.query({...tr,staleTime:`static`})},head:()=>({meta:[{title:`Roles | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./list-roles-35tCJiv-.js`),__vite__mapDeps([173,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),cd=w(`/_auth/iam/(users)/list-users/`)({loader:async({context:e})=>{await e.queryClient.query({...Zn,staleTime:`static`})},head:()=>({meta:[{title:`Users | IAM | Mulga`}]}),component:D(()=>F(()=>import(`./list-users-Bt1RrNuk.js`),__vite__mapDeps([174,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),ld=w(`/_auth/rds/(db-instances)/describe-db-instances/`)({loader:async({context:e})=>{await e.queryClient.query({...or,staleTime:`static`})},head:()=>({meta:[{title:`Databases | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./describe-db-instances-fwSV1dE8.js`),__vite__mapDeps([175,1,76,8,9,10,11,4,5,45,34,29,12,13,121,24,25,122,55,56,123,23,27,59,39,176,51,37,52,53,61,62,33,35,36,38])),`component`)}),ud=w(`/_auth/rds/(parameter-groups)/describe-db-parameter-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...rr,staleTime:`static`})},head:()=>({meta:[{title:`Parameter Groups | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./describe-db-parameter-groups-DGI1_IDI.js`),__vite__mapDeps([177,1,76,8,9,10,11,4,5,45,34,29,12,13,121,24,25,123,23,27,178,122,55,56,179,100,33,35,36,37,38])),`component`)}),dd=w(`/_auth/rds/(snapshots)/describe-db-snapshots/`)({loader:async({context:e})=>{await e.queryClient.query({...nr,staleTime:`static`})},head:()=>({meta:[{title:`Snapshots | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./describe-db-snapshots-Dueg64Bg.js`),__vite__mapDeps([180,1,76,8,9,10,11,4,5,45,12,13,34,29,121,24,25,123,23,27,39,181,7,66,36,37,14,48,15,52,38,67,68,53,69,51,122,55,56,58,61,62,84,85,86,33,35,124,182,179,100])),`component`)}),fd=w(`/_auth/rds/(subnet-groups)/describe-db-subnet-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...ir,staleTime:`static`})},head:()=>({meta:[{title:`Subnet Groups | RDS | Mulga`}]}),component:D(()=>F(()=>import(`./describe-db-subnet-groups-CUjsw06h.js`),__vite__mapDeps([183,1,76,8,9,10,11,4,5,45,34,29,12,13,123,23,24,25,121,27,39,184,122,55,56,179,100,33,35,36,37,38])),`component`)}),Z=iu.update({id:`/_auth`,getParentRoute:()=>K}),pd=cr.update({id:`/login`,path:`/login`,getParentRoute:()=>K}),md=au.update({id:`/`,path:`/`,getParentRoute:()=>Z}),hd=ou.update({id:`/bedrock`,path:`/bedrock`,getParentRoute:()=>Z}),gd=su.update({id:`/nodes`,path:`/nodes`,getParentRoute:()=>Z}),_d=cu.update({id:`/s3/service-metrics`,path:`/s3/service-metrics`,getParentRoute:()=>Z}),vd=lu.update({id:`/ec2/(elastic-ips)/allocate-address`,path:`/ec2/allocate-address`,getParentRoute:()=>Z}),yd=lr.update({id:`/ec2/(instances)/run-instances`,path:`/ec2/run-instances`,getParentRoute:()=>Z}),bd=uu.update({id:`/ec2/(internet-gateways)/create-internet-gateway`,path:`/ec2/create-internet-gateway`,getParentRoute:()=>Z}),xd=du.update({id:`/ec2/(key)/create-key-pair`,path:`/ec2/create-key-pair`,getParentRoute:()=>Z}),Sd=fu.update({id:`/ec2/(key)/import-key-pair`,path:`/ec2/import-key-pair`,getParentRoute:()=>Z}),Cd=pu.update({id:`/ec2/(launch-templates)/create-launch-template`,path:`/ec2/create-launch-template`,getParentRoute:()=>Z}),wd=mu.update({id:`/ec2/(load-balancers)/create-load-balancer`,path:`/ec2/create-load-balancer`,getParentRoute:()=>Z}),Td=hu.update({id:`/ec2/(nat-gateways)/create-nat-gateway`,path:`/ec2/create-nat-gateway`,getParentRoute:()=>Z}),Ed=gu.update({id:`/ec2/(placement-groups)/create-placement-group`,path:`/ec2/create-placement-group`,getParentRoute:()=>Z}),Dd=_u.update({id:`/ec2/(route-tables)/create-route-table`,path:`/ec2/create-route-table`,getParentRoute:()=>Z}),Od=vu.update({id:`/ec2/(security-groups)/create-security-group`,path:`/ec2/create-security-group`,getParentRoute:()=>Z}),kd=ur.update({id:`/ec2/(snapshots)/create-snapshot`,path:`/ec2/create-snapshot`,getParentRoute:()=>Z}),Ad=yu.update({id:`/ec2/(subnet)/create-subnet`,path:`/ec2/create-subnet`,getParentRoute:()=>Z}),jd=bu.update({id:`/ec2/(target-groups)/create-target-group`,path:`/ec2/create-target-group`,getParentRoute:()=>Z}),Md=xu.update({id:`/ec2/(volumes)/create-volume`,path:`/ec2/create-volume`,getParentRoute:()=>Z}),Nd=Su.update({id:`/ec2/(vpc)/create-vpc`,path:`/ec2/create-vpc`,getParentRoute:()=>Z}),Pd=dr.update({id:`/ecs/(clusters)/create-service`,path:`/ecs/create-service`,getParentRoute:()=>Z}),Fd=fr.update({id:`/ecs/(clusters)/register-task-definition`,path:`/ecs/register-task-definition`,getParentRoute:()=>Z}),Id=pr.update({id:`/ecs/(clusters)/run-task`,path:`/ecs/run-task`,getParentRoute:()=>Z}),Ld=Cu.update({id:`/ecs/(clusters)/task-definitions`,path:`/ecs/task-definitions`,getParentRoute:()=>Z}),Rd=wu.update({id:`/eks/(clusters)/create-cluster`,path:`/eks/create-cluster`,getParentRoute:()=>Z}),zd=Tu.update({id:`/iam/(groups)/create-group`,path:`/iam/create-group`,getParentRoute:()=>Z}),Bd=Eu.update({id:`/iam/(instance-profiles)/create-instance-profile`,path:`/iam/create-instance-profile`,getParentRoute:()=>Z}),Vd=Du.update({id:`/iam/(policies)/create-policy`,path:`/iam/create-policy`,getParentRoute:()=>Z}),Hd=Ou.update({id:`/iam/(roles)/create-role`,path:`/iam/create-role`,getParentRoute:()=>Z}),Ud=ku.update({id:`/iam/(users)/create-user`,path:`/iam/create-user`,getParentRoute:()=>Z}),Wd=Au.update({id:`/rds/(db-instances)/create-db-instance`,path:`/rds/create-db-instance`,getParentRoute:()=>Z}),Gd=ju.update({id:`/rds/(parameter-groups)/create-db-parameter-group`,path:`/rds/create-db-parameter-group`,getParentRoute:()=>Z}),Kd=Mu.update({id:`/rds/(subnet-groups)/create-db-subnet-group`,path:`/rds/create-db-subnet-group`,getParentRoute:()=>Z}),qd=Nu.update({id:`/s3/(buckets)/create-bucket`,path:`/s3/create-bucket`,getParentRoute:()=>Z}),Jd=Pu.update({id:`/s3/ls/`,path:`/s3/ls/`,getParentRoute:()=>Z}),Yd=Fu.update({id:`/s3/ls/$bucket`,path:`/s3/ls/$bucket`,getParentRoute:()=>Z}),Xd=Iu.update({id:`/(catalog)/list-model-catalog/`,path:`/list-model-catalog/`,getParentRoute:()=>hd}),Zd=Lu.update({id:`/(guardrails)/list-guardrails/`,path:`/list-guardrails/`,getParentRoute:()=>hd}),Qd=Ru.update({id:`/(guardrails)/list-guardrails/create`,path:`/list-guardrails/create`,getParentRoute:()=>hd}),$d=zu.update({id:`/(knowledge-bases)/list-knowledge-bases/`,path:`/list-knowledge-bases/`,getParentRoute:()=>hd}),ef=mr.update({id:`/(knowledge-bases)/list-knowledge-bases/$knowledgeBaseId`,path:`/list-knowledge-bases/$knowledgeBaseId`,getParentRoute:()=>hd}),tf=Bu.update({id:`/(knowledge-bases)/list-knowledge-bases/create`,path:`/list-knowledge-bases/create`,getParentRoute:()=>hd}),nf=Vu.update({id:`/(model-access)/list-model-access/`,path:`/list-model-access/`,getParentRoute:()=>hd}),rf=Hu.update({id:`/(playground)/playground/`,path:`/playground/`,getParentRoute:()=>hd}),af=Uu.update({id:`/ec2/(elastic-ips)/describe-addresses/`,path:`/ec2/describe-addresses/`,getParentRoute:()=>Z}),of=hr.update({id:`/ec2/(elastic-ips)/describe-addresses/$id`,path:`/ec2/describe-addresses/$id`,getParentRoute:()=>Z}),sf=Wu.update({id:`/ec2/(images)/describe-images/`,path:`/ec2/describe-images/`,getParentRoute:()=>Z}),cf=gr.update({id:`/ec2/(images)/describe-images/$id`,path:`/ec2/describe-images/$id`,getParentRoute:()=>Z}),lf=Gu.update({id:`/ec2/(instances)/describe-instances/`,path:`/ec2/describe-instances/`,getParentRoute:()=>Z}),uf=_r.update({id:`/ec2/(instances)/describe-instances/$id`,path:`/ec2/describe-instances/$id`,getParentRoute:()=>Z}),df=Ku.update({id:`/ec2/(internet-gateways)/describe-internet-gateways/`,path:`/ec2/describe-internet-gateways/`,getParentRoute:()=>Z}),ff=vr.update({id:`/ec2/(internet-gateways)/describe-internet-gateways/$id`,path:`/ec2/describe-internet-gateways/$id`,getParentRoute:()=>Z}),Q=qu.update({id:`/ec2/(key)/describe-key-pairs/`,path:`/ec2/describe-key-pairs/`,getParentRoute:()=>Z}),pf=yr.update({id:`/ec2/(key)/describe-key-pairs/$id`,path:`/ec2/describe-key-pairs/$id`,getParentRoute:()=>Z}),mf=Ju.update({id:`/ec2/(launch-templates)/describe-launch-templates/`,path:`/ec2/describe-launch-templates/`,getParentRoute:()=>Z}),hf=br.update({id:`/ec2/(launch-templates)/describe-launch-templates/$id`,path:`/ec2/describe-launch-templates/$id`,getParentRoute:()=>Z}),gf=Yu.update({id:`/ec2/(load-balancers)/describe-load-balancers/`,path:`/ec2/describe-load-balancers/`,getParentRoute:()=>Z}),_f=xr.update({id:`/ec2/(load-balancers)/describe-load-balancers/$id`,path:`/ec2/describe-load-balancers/$id`,getParentRoute:()=>Z}),vf=Xu.update({id:`/ec2/(nat-gateways)/describe-nat-gateways/`,path:`/ec2/describe-nat-gateways/`,getParentRoute:()=>Z}),yf=Sr.update({id:`/ec2/(nat-gateways)/describe-nat-gateways/$id`,path:`/ec2/describe-nat-gateways/$id`,getParentRoute:()=>Z}),bf=Zu.update({id:`/ec2/(placement-groups)/describe-placement-groups/`,path:`/ec2/describe-placement-groups/`,getParentRoute:()=>Z}),xf=Cr.update({id:`/ec2/(placement-groups)/describe-placement-groups/$id`,path:`/ec2/describe-placement-groups/$id`,getParentRoute:()=>Z}),Sf=Qu.update({id:`/ec2/(route-tables)/describe-route-tables/`,path:`/ec2/describe-route-tables/`,getParentRoute:()=>Z}),Cf=wr.update({id:`/ec2/(route-tables)/describe-route-tables/$id`,path:`/ec2/describe-route-tables/$id`,getParentRoute:()=>Z}),wf=q.update({id:`/ec2/(security-groups)/describe-security-groups/`,path:`/ec2/describe-security-groups/`,getParentRoute:()=>Z}),Tf=ct.update({id:`/ec2/(security-groups)/describe-security-groups/$id`,path:`/ec2/describe-security-groups/$id`,getParentRoute:()=>Z}),Ef=$u.update({id:`/ec2/(snapshots)/describe-snapshots/`,path:`/ec2/describe-snapshots/`,getParentRoute:()=>Z}),Df=rt.update({id:`/ec2/(snapshots)/describe-snapshots/$id`,path:`/ec2/describe-snapshots/$id`,getParentRoute:()=>Z}),Of=J.update({id:`/ec2/(subnet)/describe-subnets/`,path:`/ec2/describe-subnets/`,getParentRoute:()=>Z}),kf=Tr.update({id:`/ec2/(subnet)/describe-subnets/$id`,path:`/ec2/describe-subnets/$id`,getParentRoute:()=>Z}),Af=Y.update({id:`/ec2/(target-groups)/describe-target-groups/`,path:`/ec2/describe-target-groups/`,getParentRoute:()=>Z}),jf=Er.update({id:`/ec2/(target-groups)/describe-target-groups/$id`,path:`/ec2/describe-target-groups/$id`,getParentRoute:()=>Z}),Mf=X.update({id:`/ec2/(volumes)/describe-volumes/`,path:`/ec2/describe-volumes/`,getParentRoute:()=>Z}),Nf=Dr.update({id:`/ec2/(volumes)/describe-volumes/$id`,path:`/ec2/describe-volumes/$id`,getParentRoute:()=>Z}),Pf=Or.update({id:`/ec2/(volumes)/modify-volume/$id`,path:`/ec2/modify-volume/$id`,getParentRoute:()=>Z}),Ff=ed.update({id:`/ec2/(vpc)/describe-vpcs/`,path:`/ec2/describe-vpcs/`,getParentRoute:()=>Z}),If=kr.update({id:`/ec2/(vpc)/describe-vpcs/$id`,path:`/ec2/describe-vpcs/$id`,getParentRoute:()=>Z}),Lf=td.update({id:`/ecr/(repositories)/list-repositories/`,path:`/ecr/list-repositories/`,getParentRoute:()=>Z}),Rf=Ar.update({id:`/ecr/(repositories)/list-repositories/$id`,path:`/ecr/list-repositories/$id`,getParentRoute:()=>Z}),zf=nd.update({id:`/ecs/(clusters)/list-clusters/`,path:`/ecs/list-clusters/`,getParentRoute:()=>Z}),Bf=jr.update({id:`/ecs/(clusters)/list-clusters/$clusterName`,path:`/ecs/list-clusters/$clusterName`,getParentRoute:()=>Z}),$=rd.update({id:`/eks/(clusters)/list-clusters/`,path:`/eks/list-clusters/`,getParentRoute:()=>Z}),Vf=ot.update({id:`/eks/(clusters)/list-clusters/$clusterName`,path:`/eks/list-clusters/$clusterName`,getParentRoute:()=>Z}),Hf=id.update({id:`/iam/(groups)/list-groups/`,path:`/iam/list-groups/`,getParentRoute:()=>Z}),Uf=Mr.update({id:`/iam/(groups)/list-groups/$groupName`,path:`/iam/list-groups/$groupName`,getParentRoute:()=>Z}),Wf=ad.update({id:`/iam/(instance-profiles)/list-instance-profiles/`,path:`/iam/list-instance-profiles/`,getParentRoute:()=>Z}),Gf=Nr.update({id:`/iam/(instance-profiles)/list-instance-profiles/$instanceProfileName`,path:`/iam/list-instance-profiles/$instanceProfileName`,getParentRoute:()=>Z}),Kf=od.update({id:`/iam/(policies)/list-policies/`,path:`/iam/list-policies/`,getParentRoute:()=>Z}),qf=Pr.update({id:`/iam/(policies)/list-policies/$policyArn`,path:`/iam/list-policies/$policyArn`,getParentRoute:()=>Z}),Jf=sd.update({id:`/iam/(roles)/list-roles/`,path:`/iam/list-roles/`,getParentRoute:()=>Z}),Yf=Fr.update({id:`/iam/(roles)/list-roles/$roleName`,path:`/iam/list-roles/$roleName`,getParentRoute:()=>Z}),Xf=cd.update({id:`/iam/(users)/list-users/`,path:`/iam/list-users/`,getParentRoute:()=>Z}),Zf=Ir.update({id:`/iam/(users)/list-users/$userName`,path:`/iam/list-users/$userName`,getParentRoute:()=>Z}),Qf=ld.update({id:`/rds/(db-instances)/describe-db-instances/`,path:`/rds/describe-db-instances/`,getParentRoute:()=>Z}),$f=Lr.update({id:`/rds/(db-instances)/describe-db-instances/$id`,path:`/rds/describe-db-instances/$id`,getParentRoute:()=>Z}),ep=ud.update({id:`/rds/(parameter-groups)/describe-db-parameter-groups/`,path:`/rds/describe-db-parameter-groups/`,getParentRoute:()=>Z}),tp=Rr.update({id:`/rds/(parameter-groups)/describe-db-parameter-groups/$name`,path:`/rds/describe-db-parameter-groups/$name`,getParentRoute:()=>Z}),np=dd.update({id:`/rds/(snapshots)/describe-db-snapshots/`,path:`/rds/describe-db-snapshots/`,getParentRoute:()=>Z}),rp=zr.update({id:`/rds/(snapshots)/describe-db-snapshots/$id`,path:`/rds/describe-db-snapshots/$id`,getParentRoute:()=>Z}),ip=Br.update({id:`/rds/(snapshots)/restore-db-instance-from-db-snapshot/$id`,path:`/rds/restore-db-instance-from-db-snapshot/$id`,getParentRoute:()=>Z}),ap=fd.update({id:`/rds/(subnet-groups)/describe-db-subnet-groups/`,path:`/rds/describe-db-subnet-groups/`,getParentRoute:()=>Z}),op=Vr.update({id:`/rds/(subnet-groups)/describe-db-subnet-groups/$name`,path:`/rds/describe-db-subnet-groups/$name`,getParentRoute:()=>Z}),sp=Hr.update({id:`/`,path:`/`,getParentRoute:()=>Yd}),cp=Ur.update({id:`/$`,path:`/$`,getParentRoute:()=>Yd}),lp=Wr.update({id:`/(guardrails)/list-guardrails/$guardrailId/`,path:`/list-guardrails/$guardrailId/`,getParentRoute:()=>hd}),up=Gr.update({id:`/(guardrails)/list-guardrails/$guardrailId/edit`,path:`/list-guardrails/$guardrailId/edit`,getParentRoute:()=>hd}),dp=Kr.update({id:`/ecs/(clusters)/list-clusters/$clusterName_/services/$serviceName`,path:`/ecs/list-clusters/$clusterName/services/$serviceName`,getParentRoute:()=>Z}),fp=qr.update({id:`/ecs/(clusters)/list-clusters/$clusterName_/tasks/$taskId`,path:`/ecs/list-clusters/$clusterName/tasks/$taskId`,getParentRoute:()=>Z}),pp={AuthBedrockguardrailsListGuardrailsCreateRoute:Qd,AuthBedrockknowledgeBasesListKnowledgeBasesKnowledgeBaseIdRoute:ef,AuthBedrockknowledgeBasesListKnowledgeBasesCreateRoute:tf,AuthBedrockcatalogListModelCatalogIndexRoute:Xd,AuthBedrockguardrailsListGuardrailsIndexRoute:Zd,AuthBedrockknowledgeBasesListKnowledgeBasesIndexRoute:$d,AuthBedrockmodelAccessListModelAccessIndexRoute:nf,AuthBedrockplaygroundPlaygroundIndexRoute:rf,AuthBedrockguardrailsListGuardrailsGuardrailIdEditRoute:up,AuthBedrockguardrailsListGuardrailsGuardrailIdIndexRoute:lp},mp=hd._addFileChildren(pp),hp={AuthS3LsBucketSplatRoute:cp,AuthS3LsBucketIndexRoute:sp},gp={AuthBedrockRouteRoute:mp,AuthNodesRoute:gd,AuthIndexRoute:md,AuthS3ServiceMetricsRoute:_d,AuthS3LsBucketRouteRoute:Yd._addFileChildren(hp),AuthEc2elasticIpsAllocateAddressRoute:vd,AuthEc2instancesRunInstancesRoute:yd,AuthEc2internetGatewaysCreateInternetGatewayRoute:bd,AuthEc2keyCreateKeyPairRoute:xd,AuthEc2keyImportKeyPairRoute:Sd,AuthEc2launchTemplatesCreateLaunchTemplateRoute:Cd,AuthEc2loadBalancersCreateLoadBalancerRoute:wd,AuthEc2natGatewaysCreateNatGatewayRoute:Td,AuthEc2placementGroupsCreatePlacementGroupRoute:Ed,AuthEc2routeTablesCreateRouteTableRoute:Dd,AuthEc2securityGroupsCreateSecurityGroupRoute:Od,AuthEc2snapshotsCreateSnapshotRoute:kd,AuthEc2subnetCreateSubnetRoute:Ad,AuthEc2targetGroupsCreateTargetGroupRoute:jd,AuthEc2volumesCreateVolumeRoute:Md,AuthEc2vpcCreateVpcRoute:Nd,AuthEcsclustersCreateServiceRoute:Pd,AuthEcsclustersRegisterTaskDefinitionRoute:Fd,AuthEcsclustersRunTaskRoute:Id,AuthEcsclustersTaskDefinitionsRoute:Ld,AuthEksclustersCreateClusterRoute:Rd,AuthIamgroupsCreateGroupRoute:zd,AuthIaminstanceProfilesCreateInstanceProfileRoute:Bd,AuthIampoliciesCreatePolicyRoute:Vd,AuthIamrolesCreateRoleRoute:Hd,AuthIamusersCreateUserRoute:Ud,AuthRdsdbInstancesCreateDbInstanceRoute:Wd,AuthRdsparameterGroupsCreateDbParameterGroupRoute:Gd,AuthRdssubnetGroupsCreateDbSubnetGroupRoute:Kd,AuthS3bucketsCreateBucketRoute:qd,AuthS3LsIndexRoute:Jd,AuthEc2elasticIpsDescribeAddressesIdRoute:of,AuthEc2imagesDescribeImagesIdRoute:cf,AuthEc2instancesDescribeInstancesIdRoute:uf,AuthEc2internetGatewaysDescribeInternetGatewaysIdRoute:ff,AuthEc2keyDescribeKeyPairsIdRoute:pf,AuthEc2launchTemplatesDescribeLaunchTemplatesIdRoute:hf,AuthEc2loadBalancersDescribeLoadBalancersIdRoute:_f,AuthEc2natGatewaysDescribeNatGatewaysIdRoute:yf,AuthEc2placementGroupsDescribePlacementGroupsIdRoute:xf,AuthEc2routeTablesDescribeRouteTablesIdRoute:Cf,AuthEc2securityGroupsDescribeSecurityGroupsIdRoute:Tf,AuthEc2snapshotsDescribeSnapshotsIdRoute:Df,AuthEc2subnetDescribeSubnetsIdRoute:kf,AuthEc2targetGroupsDescribeTargetGroupsIdRoute:jf,AuthEc2volumesDescribeVolumesIdRoute:Nf,AuthEc2volumesModifyVolumeIdRoute:Pf,AuthEc2vpcDescribeVpcsIdRoute:If,AuthEcrrepositoriesListRepositoriesIdRoute:Rf,AuthEcsclustersListClustersClusterNameRoute:Bf,AuthEksclustersListClustersClusterNameRoute:Vf,AuthIamgroupsListGroupsGroupNameRoute:Uf,AuthIaminstanceProfilesListInstanceProfilesInstanceProfileNameRoute:Gf,AuthIampoliciesListPoliciesPolicyArnRoute:qf,AuthIamrolesListRolesRoleNameRoute:Yf,AuthIamusersListUsersUserNameRoute:Zf,AuthRdsdbInstancesDescribeDbInstancesIdRoute:$f,AuthRdsparameterGroupsDescribeDbParameterGroupsNameRoute:tp,AuthRdssnapshotsDescribeDbSnapshotsIdRoute:rp,AuthRdssnapshotsRestoreDbInstanceFromDbSnapshotIdRoute:ip,AuthRdssubnetGroupsDescribeDbSubnetGroupsNameRoute:op,AuthEc2elasticIpsDescribeAddressesIndexRoute:af,AuthEc2imagesDescribeImagesIndexRoute:sf,AuthEc2instancesDescribeInstancesIndexRoute:lf,AuthEc2internetGatewaysDescribeInternetGatewaysIndexRoute:df,AuthEc2keyDescribeKeyPairsIndexRoute:Q,AuthEc2launchTemplatesDescribeLaunchTemplatesIndexRoute:mf,AuthEc2loadBalancersDescribeLoadBalancersIndexRoute:gf,AuthEc2natGatewaysDescribeNatGatewaysIndexRoute:vf,AuthEc2placementGroupsDescribePlacementGroupsIndexRoute:bf,AuthEc2routeTablesDescribeRouteTablesIndexRoute:Sf,AuthEc2securityGroupsDescribeSecurityGroupsIndexRoute:wf,AuthEc2snapshotsDescribeSnapshotsIndexRoute:Ef,AuthEc2subnetDescribeSubnetsIndexRoute:Of,AuthEc2targetGroupsDescribeTargetGroupsIndexRoute:Af,AuthEc2volumesDescribeVolumesIndexRoute:Mf,AuthEc2vpcDescribeVpcsIndexRoute:Ff,AuthEcrrepositoriesListRepositoriesIndexRoute:Lf,AuthEcsclustersListClustersIndexRoute:zf,AuthEksclustersListClustersIndexRoute:$,AuthIamgroupsListGroupsIndexRoute:Hf,AuthIaminstanceProfilesListInstanceProfilesIndexRoute:Wf,AuthIampoliciesListPoliciesIndexRoute:Kf,AuthIamrolesListRolesIndexRoute:Jf,AuthIamusersListUsersIndexRoute:Xf,AuthRdsdbInstancesDescribeDbInstancesIndexRoute:Qf,AuthRdsparameterGroupsDescribeDbParameterGroupsIndexRoute:ep,AuthRdssnapshotsDescribeDbSnapshotsIndexRoute:np,AuthRdssubnetGroupsDescribeDbSubnetGroupsIndexRoute:ap,AuthEcsclustersListClustersClusterNameServicesServiceNameRoute:dp,AuthEcsclustersListClustersClusterNameTasksTaskIdRoute:fp},_p={AuthRouteRoute:Z._addFileChildren(gp),LoginRoute:pd},vp=K._addFileChildren(_p)._addFileTypes(),yp=Zl(),bp=H({routeTree:vp,context:{queryClient:yp},defaultPreload:`intent`,scrollRestoration:!0,defaultStructuralSharing:!0,defaultPreloadStaleTime:0});async function xp(e){try{await Ke()}catch(t){e.render((0,V.jsxs)(`div`,{style:{fontFamily:`sans-serif`,margin:`4rem auto`,maxWidth:`40rem`},children:[(0,V.jsx)(`h1`,{children:`Console unavailable`}),(0,V.jsx)(`p`,{children:`This cluster did not report its region, so the console cannot sign requests. Check that the serving node has a region set in its configuration.`}),(0,V.jsx)(`pre`,{children:t instanceof Error?t.message:String(t)})]}));return}e.render((0,V.jsx)(B.StrictMode,{children:(0,V.jsx)(rs,{defaultTheme:`dark`,storageKey:`spinifex-ui-theme`,children:(0,V.jsx)(p,{client:yp,children:(0,V.jsx)(Cn,{children:(0,V.jsx)(Ml,{children:(0,V.jsx)(Uo,{router:bp})})})})})}))}var Sp=document.querySelector(`#app`);Sp&&!Sp.innerHTML&&await xp(es.createRoot(Sp)); \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-D7dQJPHv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-D7dQJPHv.js deleted file mode 100644 index c3c01c17e..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index-D7dQJPHv.js +++ /dev/null @@ -1,11 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/route-DPFKZkGs.js","assets/compiler-runtime-D_vZfn79.js","assets/Match-Q4m9gh_H.js","assets/matchContext-DjfNTEDZ.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/_auth-Cg86DRhs.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/link-Dhy4xOXd.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/createLucideIcon-BQgzNCBR.js","assets/chevron-down-Dt4q6d24.js","assets/chevron-right-c57whaks.js","assets/waypoints-DE7eIn9V.js","assets/network-RAx0KOlf.js","assets/admin-context-CXmiyIcc.js","assets/sts-B5ZEON3v.js","assets/signed-fetch-B-FFW93q.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/s3-DFfxBBj-.js","assets/page-heading-vksh_67w.js","assets/badge-B_ExXcw2.js","assets/dist-BKgR2qk6.js","assets/useRender-2pqPQOAE.js","assets/card-BXl0Qff8.js","assets/admin-BUkrFIlI.js","assets/alert-dialog-kCQ1W4Rz.js","assets/button-BarTr35m.js","assets/DialogTitle-DiInIGjk.js","assets/useValueAsRef-F56m8WbP.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useScrollLock-NX6x9Pv8.js","assets/state-badge-D1Z6q_OA.js","assets/route-n5jLl8qw.js","assets/nodes-DExo87Po.js","assets/redirect-B4OxYbs2.js","assets/service-metrics-C6gBIZci.js","assets/allocate-address-CDvylWBR.js","assets/useNavigate-BH3pQKLF.js","assets/back-link-CjKy1JE5.js","assets/cli-command-panel-CLiFy1rG.js","assets/check-BO7W8OSs.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-6kdUb_DH.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ec2-DhWukC79.js","assets/create-internet-gateway-CGStzV_5.js","assets/create-key-pair-CKL_t5ui.js","assets/select-B01jpDaX.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useCompositeListItem-CEsaEeXb.js","assets/download-B-6MA128.js","assets/triangle-alert-DcjzeKLg.js","assets/import-key-pair-kETKjfrj.js","assets/textarea-n04EavUm.js","assets/create-launch-template-vwPKoZ8a.js","assets/launch-template-data-fields-BXmKXe0L.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/collapsible-k5LqEmTn.js","assets/create-load-balancer-BBKiIxj3.js","assets/acm-BYWQapOv.js","assets/certificate-import-dialog-UyecRuny.js","assets/elbv2-K4aD09h6.js","assets/commandBuilder-DzFUl2wS.js","assets/elbv2-DSjTzB2q.js","assets/tags-field-array-Dk9nPDzt.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/target-group-form-DvZOw-26.js","assets/elbv2-CtsfBUSG.js","assets/create-nat-gateway-C0zhuUio.js","assets/create-placement-group-D_3YKZZQ.js","assets/create-route-table-q3_xIq0T.js","assets/create-security-group-BD7bwg9p.js","assets/create-subnet-BXdYKpy-.js","assets/create-target-group-CSrYTK6r.js","assets/create-volume-BamGr8Qm.js","assets/create-vpc-CyDH_vpB.js","assets/task-definitions-qkfdMMhk.js","assets/ecs-gqt7DXoF.js","assets/ecs-8RzYyUs4.js","assets/delete-confirmation-dialog-SdDN4LiF.js","assets/ecs-section-nav-CU0acTSl.js","assets/create-cluster-eQiUzhUk.js","assets/eks-C1P60riG.js","assets/commandBuilder-DOzu_YCE.js","assets/json-DsgWHaZY.js","assets/iam-CKOkzDco.js","assets/commandBuilder-CoLHZwsC.js","assets/iam-CVg27y22.js","assets/system-managed-Dk7ySh_E.js","assets/system-image-required-PXuPdEKF.js","assets/rotate-cw-FTUcK_f-.js","assets/policy-document-viewer-DAhLJAGU.js","assets/create-group-6mVlm4h5.js","assets/iam-Cgrr-Iit.js","assets/create-instance-profile-CgetPfkP.js","assets/create-policy-BJFldcK3.js","assets/json-editor-Bwbz8mfn.js","assets/create-role-DvSx0q-L.js","assets/create-user-Bv8sj586.js","assets/create-db-instance-CY_ivPtb.js","assets/rds-CE3126Ga.js","assets/rds-BkKLEWPo.js","assets/rds-CyiqRExv.js","assets/picker-notice-tK9XfUSR.js","assets/security-group-checkboxes-BkxIRro9.js","assets/create-db-parameter-group-CkK-hDRM.js","assets/create-db-subnet-group-BV65rf5O.js","assets/create-bucket-B5kEkFpz.js","assets/s3-DaPUyf7s.js","assets/ls-XgxEPnDq.js","assets/list-card-DFj_XTL4.js","assets/route-DtXjPAiX.js","assets/list-model-catalog-CPZ8xUbd.js","assets/list-guardrails-DYYlNj8n.js","assets/bedrock-Ct-f5HCJ.js","assets/commandBuilder-CyJu3wq4.js","assets/create-CoZioQAG.js","assets/bedrock-7XDhMm-7.js","assets/guardrail-form-page-C6v-izo3.js","assets/list-knowledge-bases-CH_zlnnr.js","assets/bedrockAgent-D9Za8qAi.js","assets/commandBuilder-BH-JcvCM.js","assets/create-uNWIyxX8.js","assets/bedrockAgent-BL6fVxPp.js","assets/list-model-access-Ds5MpzNH.js","assets/playground-zdI5o66q.js","assets/commandBuilder-BLgOdGhm.js","assets/describe-addresses-DKlK9Anw.js","assets/describe-images-Zp7giKqa.js","assets/describe-instances-BK0FW0LB.js","assets/describe-internet-gateways-CiiBScpk.js","assets/describe-key-pairs-BRKxsJWn.js","assets/describe-launch-templates-BuaCkV_y.js","assets/describe-load-balancers-ayJnDdyt.js","assets/describe-nat-gateways-B8p3GKN1.js","assets/describe-placement-groups-XiQbPRZ5.js","assets/describe-route-tables-Cz9uMOpx.js","assets/describe-security-groups-uryLUVIn.js","assets/describe-snapshots-63g9NU9g.js","assets/describe-subnets-lWLraP1d.js","assets/describe-target-groups-5RCbjKmg.js","assets/describe-volumes-Dj4fTW0o.js","assets/describe-vpcs-cdkXn9V9.js","assets/list-repositories-B-9oI4MN.js","assets/ecr-BFtKzkrF.js","assets/ecr-F-ANqxrm.js","assets/list-clusters-UynY0efZ.js","assets/list-clusters-CIHqWLhW.js","assets/eks-CC8GhK3R.js","assets/list-groups-B-aCbhJM.js","assets/list-instance-profiles-BSt7PimM.js","assets/list-policies-DeMAXGlh.js","assets/list-roles-DKJKr-De.js","assets/list-users-B87cjyLt.js","assets/describe-db-instances-ririu0gg.js","assets/delete-db-instance-dialog-BdhZGMA5.js","assets/describe-db-parameter-groups-Vj5U5CsP.js","assets/delete-db-parameter-group-dialog-DHJeV95z.js","assets/rds-delete-dialog-BtEPTeBR.js","assets/describe-db-snapshots-DXVrzU4j.js","assets/create-db-snapshot-dialog-CiBeyQ69.js","assets/delete-db-snapshot-dialog-D3b3mehr.js","assets/describe-db-subnet-groups-B9VO6RnW.js","assets/delete-db-subnet-group-dialog-BgemfFMN.js"])))=>i.map(i=>d[i]); -import{i as e,n as t,o as n,r,t as i}from"./compiler-runtime-D_vZfn79.js";import{A as a,C as o,E as s,a as c,b as l,c as u,g as d,h as f,k as p,m,o as h,s as g,v as _,x as v,y}from"./removable-Dwr9otKB.js";import{t as b}from"./query-BPr_oSEg.js";import{t as x}from"./mutation-BziiWz5u.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./lazyRouteComponent-CiZDS8hZ.js";import{C as O,S as k,T as ee,_ as te,a as ne,b as re,c as ie,d as ae,f as oe,g as se,h as ce,i as le,l as ue,m as de,n as fe,o as pe,p as me,r as he,t as A,u as ge,v as _e,w as j,y as M}from"./link-Dhy4xOXd.js";import{a as ve,i as ye,n as be,o as xe,r as Se,s as N,t as Ce}from"./Match-Q4m9gh_H.js";import{n as we,r as Te}from"./matchContext-DjfNTEDZ.js";import{n as Ee,t as De}from"./redirect-B4OxYbs2.js";import{a as Oe,n as ke,r as Ae,t as je}from"./useSelector-CRh8wCTv.js";import{n as Me}from"./with-selector-DrM041uv.js";import{t as Ne}from"./useNavigate-BH3pQKLF.js";import{f as Pe,i as Fe,n as Ie,t as Le}from"./useValueAsRef-F56m8WbP.js";import{a as Re,f as ze,l as Be,n as Ve,o as He,t as Ue,u as We}from"./dist-BKgR2qk6.js";import{t as Ge}from"./useRender-2pqPQOAE.js";import{a as Ke,lt as P,n as qe,o as Je,r as Ye,tn as Xe}from"./cluster-config-xw_Q7X1e.js";import{t as F}from"./createLucideIcon-BQgzNCBR.js";import{t as Ze}from"./camera-bmANKZ8M.js";import{a as Qe,i as $e,n as et,o as tt,r as nt,s as rt,t as it}from"./waypoints-DE7eIn9V.js";import{n as at,t as ot}from"./_id-njlqJfO-.js";import{t as st}from"./network-RAx0KOlf.js";import{n as ct,t as lt}from"./_clusterName-CoDfUrWf.js";import{n as ut,t as dt}from"./_id--x_QHBJa.js";import{_ as ft,b as pt,n as mt,o as ht,s as gt,t as _t,y as vt}from"./button-BarTr35m.js";import{C as yt,E as bt,S as xt,b as St,f as Ct,g as wt,h as I,i as Tt,m as Et,s as Dt,t as Ot,v as kt,w as At,x as jt,y as Mt}from"./createBaseUIEventDetails-DL-8egB9.js";import{$ as Nt,D as Pt,E as Ft,H as It,L as Lt,M as Rt,O as zt,P as Bt,S as Vt,St as Ht,Y as Ut,at as Wt,b as Gt,ct as Kt,g as L,h as qt,it as Jt,j as Yt,k as Xt,m as Zt,nt as Qt,ot as $t,p as en,st as tn,tt as nn,ut as rn,w as an,wt as on,x as sn,y as cn,z as ln}from"./useScrollLock-NX6x9Pv8.js";import{n as un,r as dn,t as fn}from"./usePositioner-DUsvphCt.js";import"./input-6kdUb_DH.js";import{t as pn}from"./separator-B3CHPrlt.js";import{a as mn,c as hn,i as gn,l as _n,n as vn,o as yn,r as bn,s as xn,t as Sn}from"./DialogTitle-DiInIGjk.js";import{t as Cn}from"./awsClient-b0hcP1Iz.js";import{n as wn,t as Tn}from"./admin-context-CXmiyIcc.js";import{t as En}from"./acm-BYWQapOv.js";import{i as Dn,t as On}from"./bedrock-Ct-f5HCJ.js";import{i as kn}from"./bedrockAgent-D9Za8qAi.js";import{A as An,E as jn,M as Mn,O as Nn,S as Pn,_ as Fn,c as In,d as Ln,h as Rn,l as zn,n as Bn,o as Vn,p as Hn,r as Un,w as Wn,y as Gn}from"./ec2-CWEplLq4.js";import{n as Kn}from"./ecr-BFtKzkrF.js";import{n as qn,o as Jn}from"./ecs-gqt7DXoF.js";import{c as Yn}from"./eks-CC8GhK3R.js";import{a as Xn,o as Zn,u as Qn}from"./elbv2-DSjTzB2q.js";import{C as $n,f as er,l as tr,p as nr,y as rr}from"./iam-CVg27y22.js";import{a as ir,d as ar,h as or,o as sr,r as cr}from"./rds-CyiqRExv.js";import{n as lr}from"./s3-DFfxBBj-.js";import{t as ur}from"./login-Zz7MnUTC.js";import{t as dr}from"./run-instances-CCY2HdNd.js";import{t as fr}from"./create-snapshot-wXcq0RWi.js";import{t as pr}from"./create-service-DExIeTQv.js";import{t as mr}from"./register-task-definition-9gqzIyeT.js";import{t as hr}from"./run-task-Dkc0UyHr.js";import{t as gr}from"./_knowledgeBaseId-7saNV50A.js";import{t as _r}from"./_id-FFfcJrCW.js";import{t as vr}from"./_id-Df06xbgH.js";import{t as yr}from"./_id-Czat7SAc.js";import{t as br}from"./_id-DpCiHWsF.js";import{t as xr}from"./_id-CXZivkIZ.js";import{t as Sr}from"./_id-UPy9yakk.js";import{t as Cr}from"./_id-jxfo70ry.js";import{t as wr}from"./_id-1XMcJG7p.js";import{t as Tr}from"./_id-BnnKVvOl.js";import{t as Er}from"./_id-CjFrz8tY.js";import{t as Dr}from"./_id-DVMhXCwR.js";import{t as Or}from"./_id-CjZcD-rB.js";import{t as kr}from"./_id-NWQukwhC.js";import{t as Ar}from"./_id-CbghuErm.js";import{t as jr}from"./_id-Cssn1mnV.js";import{t as Mr}from"./_id-v23tv1cK.js";import{t as Nr}from"./_clusterName-Dsur-gaB.js";import{t as Pr}from"./_groupName-ybM6rgP-.js";import{t as Fr}from"./_instanceProfileName-DIUtYtG8.js";import{t as Ir}from"./_policyArn-CxrcnaS5.js";import{t as Lr}from"./_roleName-Cb_y_odC.js";import{t as Rr}from"./_userName-O8ujEE0v.js";import{t as zr}from"./_id-BY8BuAtk.js";import{t as Br}from"./_name-BAZWFAbg.js";import{t as Vr}from"./_id-Oh4JEFTn.js";import{t as Hr}from"./_id-CHu8CrA0.js";import{t as Ur}from"./_name-0Lr5w_9G.js";import{t as Wr}from"./_bucket-CkOBR5mi.js";import{t as Gr}from"./_-DN9VaV2B.js";import{t as Kr}from"./_guardrailId.index-D-j5LmDO.js";import{t as qr}from"./_guardrailId.edit-B0KNJrXP.js";import{t as Jr}from"./_serviceName-BtG8OFfw.js";import{t as Yr}from"./_taskId-sla3KnqA.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Xr=class extends u{#e;#t;#n;constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}build(e,t,n){let r=new x({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Zr(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Zr(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Zr(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=Zr(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){h.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>_(t,e))}findAll(e={}){return this.getAll().filter(t=>_(e,t))}notify(e){h.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return h.batch(()=>Promise.all(e.map(e=>e.continue().catch(l))))}};function Zr(e){return e.options.scope?.id}var Qr=class extends u{#e;constructor(e={}){super(),this.config=e,this.#e=new Map}build(e,t,n){let r=t.queryKey,i=t.queryHash??d(r,t),a=this.get(i);return a||(a=new b({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){h.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>y(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>y(e,t)):t}notify(e){h.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){h.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){h.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},$r=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Qr,this.#t=e.mutationCache||new Xr,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=g.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=c.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(o(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=m(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return h.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;h.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return h.batch(()=>{let r=n.findAll(e),i=new Set(r);return r.forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,predicate:e=>i.has(e)},t)})}cancelQueries(e,t={}){let n={revert:!0,...t},r=h.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(l).catch(l)}invalidateQueries(e,t={}){return h.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=h.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(l)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(l)}async query(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t),r=n.isStaleByTime(o(t.staleTime,n))?await n.fetch(t):n.state.data,i=t.select;return i?i(r):r}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(o(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(l).catch(l)}infiniteQuery(e){return e._type=`infinite`,this.query(e)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(l).catch(l)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return c.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(f(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{v(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(f(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{v(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=d(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===s&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};function ei(){try{return sessionStorage}catch{return}}var ti=`tsr-scroll-restoration-v1_3`,ni=ei();function ri(){try{return JSON.parse(ni?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function ii(){try{ni?.setItem(ti,JSON.stringify(ai))}catch{}}var ai=ri(),oi=`data-scroll-restoration-id`,si=e=>e.state.__TSR_key||e.href;function ci(e){let t=e.getAttribute(oi);if(t)return`[${oi}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var li=!1,ui=`window`;function di(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function fi(e){let t=new Set;for(let n of e){if(n===ui)continue;let e=di(n);e&&t.add(e)}return t}function pi(e,t){let n=t??e.options.scrollRestoration,r=e._scroll;n&&(r.restoring=!0);let i=e.options.getScrollRestorationKey||si,a=new Set,o=e=>{let t=ai[e]||={};for(let e of a)e===document?t[ui]={scrollX,scrollY}:e.isConnected&&(t[ci(e)]={scrollX:e.scrollLeft,scrollY:e.scrollTop})};n&&!r.restoration&&(r.restoration=!0,li=!1,history.scrollRestoration=`manual`,document.addEventListener(`scroll`,e=>{li||a.add(e.target)},!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(i(e.fromLocation)),a.clear()}),addEventListener(`pagehide`,()=>{o(i(e.stores.resolvedLocation.get()??e.stores.location.get())),ii()})),!r.reset&&(r.reset=!0,e.subscribe(`onRendered`,t=>{let n=e.options.scrollRestorationBehavior,o=e.options.scrollToTopSelectors,s=r.next,c=r.hash,l;if(a.clear(),r.next=!0,r.hash=!1,typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let u=i(t.toLocation),d=t.fromLocation&&i(t.fromLocation);if(r.restoring&&d&&d!==u){let e=ai[d];if(e){let t=ai[u];for(let n in e){if(n===ui){if(s)continue}else{let e=di(n);if(!e||s&&o&&(l??=fi(o),l.has(e)))continue}t||=ai[u]={},t[n]??=e[n]}}}li=!0;try{let e=t.toLocation.hash,i=t.toLocation.state.__hashScrollIntoViewOptions??!0,a=!1;if(s){!e&&o&&(l??=fi(o));let t=e&&i&&c,s=r.restoring?ai[u]:void 0;if(s)for(let e in s){let{scrollX:r,scrollY:i}=s[e];if(e===ui){if(t)continue;scrollTo({top:i,left:r,behavior:n}),a=!0}else{let t=di(e);t&&(t.scrollLeft=r,t.scrollTop=i,l?.delete(t))}}if(!e){let e={top:0,left:0,behavior:n};if(a||scrollTo(e),l)for(let t of l)t.scrollTo(e)}}!a&&e&&i&&document.getElementById(e)?.scrollIntoView(i)}finally{li=!1}}))}function mi(e,t=String){let n;for(let r in e){let i=e[r];i!==void 0&&(n||=new URLSearchParams).set(r,t(i))}return n?n.toString():``}function hi(e){return e?e===`false`?!1:e===`true`?!0:e*0==0&&+e+``===e?+e:e:``}function gi(e){let t=new URLSearchParams(e),n=Object.create(null);for(let[e,r]of t.entries()){let t=n[e];t==null?n[e]=hi(r):Array.isArray(t)?t.push(hi(r)):n[e]=[t,hi(r)]}return n}var _i=/^(?:\s|["[{\d-]|fa|nu|tr)/,vi=bi(JSON.parse),yi=xi(JSON.stringify,JSON.parse);function bi(e){let t=e===JSON.parse;return n=>{n[0]===`?`&&(n=n.substring(1));let r=gi(n);for(let n in r){let i=r[n];if(typeof i==`string`){if(t&&!_i.test(i))continue;try{r[n]=e(i)}catch{}}}return r}}function xi(e,t){let n=t===JSON.parse;function r(r){if(r&&typeof r==`object`)try{return e(r)}catch{}else if(t&&typeof r==`string`){if(n&&!_i.test(r))return r;try{return t(r),e(r)}catch{}}return r}return e=>{let t=mi(e,r);return t?`?${t}`:``}}function Si(e){let t=new Map,n,r;return{get(e){let n=t.get(e);if(n)return n.visited=!0,n.value},set(i,a){let o=t.get(i);if(o){o.value=a;return}if(t.size>=e){let e=n?.next().value;for(;!e||e.visited;)e?e.visited=!1:n=t.values(),e=n.next().value;e===r&&(n=void 0),t.delete(e.key)}let s={key:i,value:a,visited:!1};r=s,t.set(i,s)},clear(){t.clear(),n=void 0,r=void 0}}}var Ci=4,wi=5;function Ti(e){let t=e.names;if(t)return t;let n=[];for(let t of e)typeof t!=`string`&&n.push(t[1]);return e.names=n}function Ei(e,t,n){let r=e.substring(t,n);if(r.charCodeAt(0)===36)return r.length===1?[2,`_splat`,``,void 0]:[1,r.substring(1),``,``];let i=r.indexOf(`{`);if(i>=0){let a=r.indexOf(`}`,i),o=r.charCodeAt(i+1)===45,s=i+(o?3:2);if(a>=0&&r.charCodeAt(s-1)===36&&(!o||s!e.parse&&e.caseSensitive===_&&e.prefix===h&&e.suffix===g);if(y)c=y;else{let e=ki(r,t,_,h,g);c=e,v.push(e),v.length===2&&i?.push(v)}}r=c}p&&m=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!r||!_&&(n.caseSensitive?v:y??=v.toLowerCase()).startsWith(r)){if(a){if(_)continue;let e=t.slice(u).join(`/`),i=e.slice(-a.length);if((n.caseSensitive?i:i.toLowerCase())!==a||e.length-a.length=0;t--){let n=i.optional[t];s.push({node:n,index:u,skipped:e,statics:f,dynamics:p,optionals:m,extract:h,rawParams:g})}if(!_)for(let e=i.optional.length-1;e>=0;e--){let t=i.optional[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?v:y??=v.toLowerCase();if(n&&!e.startsWith(n)||r&&e.indexOf(r,e.length-r.length)=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?v:y??=v.toLowerCase();if(n&&!e.startsWith(n)||r&&e.indexOf(r,e.length-r.length)=0;e--){let t=i.pathless[e];s.push({node:t,index:u,skipped:d,statics:f,dynamics:p,optionals:m,extract:h,rawParams:g})}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===Ci)>(e.node.kind===Ci)||t.node.kind===Ci==(e.node.kind===Ci)&&t.node.depth>e.node.depth)))}function Wi(e,t,n){let r=pe(e),i=`/${r}`,a=t?i:i.toLowerCase(),o=`${a}/`,s={input:({url:e})=>{let n=t?e.pathname:e.pathname.toLowerCase();return n===a?e.pathname=`/`:n.startsWith(o)&&(e.pathname=e.pathname.slice(i.length)),e},output:({url:e})=>(e.pathname=fe(`/${r}${e.pathname}`),e)};return n?{input:({url:e})=>Gi(n,s.input({url:e})),output:({url:e})=>s.output({url:Ki(n,e)})}:s}function Gi(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function Ki(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function qi(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i}=t,a=new Map,o=n(`idle`),s=n(e),c=n(void 0),l=n([]),u=r(()=>l.get().map(e=>a.get(e).get())),d=r(()=>({status:o.get(),isLoading:o.get()===`pending`,matches:u.get(),location:s.get(),resolvedLocation:c.get()}));function f(e){let t=a.get(e);return t||(t=n(void 0),a.set(e,t)),t}let p={status:o,location:s,resolvedLocation:c,ids:l,matches:u,byRoute:a,__store:d,getMatchStore:f,setMatches:m};function m(e){let t=l.get(),n=e.map(e=>e.routeId);i(()=>{ge(t,n)||l.set(n);for(let e of t)n.includes(e)||a.get(e).set(()=>void 0);for(let t of e){let e=f(t.routeId);e.get()!==t&&e.set(t)}})}return p}var Ji=`__TSR_index`,Yi=`popstate`,Xi=`beforeunload`,Zi=/^[\x00-\x20]*(?:[\\/][\t\n\r]*){2,}/;function Qi(e){let t=Zi.exec(e);return t?`/`+e.slice(t[0].length):e}function $i(e){return/[\x00-\x1f\x7f]/.test(e)&&(e=e.replace(/[\x00-\x1f\x7f]/g,e=>` -\r`.includes(e)?``:encodeURIComponent(e))),Qi(e)}function ea(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=ra(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Ji];i=ta(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Ji];i=ta(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t,n?.ignoreBlocker??!1),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Ji]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r,_getBlockers:()=>e.getBlockers?.()??[]}}function ta(e,t){let n=ia();return{...t,key:n,__TSR_key:n,[Ji]:e}}function na(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=t=>$i(e?.createHref?e.createHref(t):t),c=e?.parseLocation??(()=>ra(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=ia();t.history.replaceState({[Ji]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_=()=>{g&&(S._ignoreSubscribers=!0,(g[2]?t.history.pushState:t.history.replaceState)(g[1],``,g[0]),S._ignoreSubscribers=!1,g=void 0,u=void 0)},v=(t,n,r)=>{let i=e?.createHref?s(n):void 0,a=!!g;a||(u=l),l=ra(n,r),g=[i??l.href,r,g?.[2]||t],a||queueMicrotask(()=>_())},y=e=>{l=c(),S.notify({type:e})},b=async()=>{if(m=!1,f){f=!1;return}let e=c(),n=e.state[Ji]-l.state[Ji],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let r=a();if(typeof document<`u`&&r.length){for(let i of r)if(await i.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(-n),S.notify(u);return}}}l=c(),S.notify(u)},x=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},S=ea({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>v(!0,e,t),replaceState:(e,t)=>v(!1,e,t),back:e=>(e&&(p=!0,m=!0),t.history.back()),forward:e=>{e&&(p=!0,m=!0),t.history.forward()},go:(e,n)=>{d=!0,n&&(p=!0,m=!0),t.history.go(e)},createHref:e=>s(e),flush:_,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Xi,x,{capture:!0}),t.removeEventListener(Yi,b)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return S._ignoreNextBeforeUnload=e=>{m=!1;try{e=new URL(e,t.document.baseURI).href,m=/^https?:/.test(e)&&(!e.includes(`#`)||e.split(`#`)[0]!==t.location.href.split(`#`)[0])}catch{}},t.addEventListener(Xi,x,{capture:!0}),t.addEventListener(Yi,b),t.history.pushState=function(...e){let r=n.apply(t.history,e);return S._ignoreSubscribers||y(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return S._ignoreSubscribers||y(`REPLACE`),n},S}function ra(e,t){let n=$i(e),r=n.indexOf(`#`),i=n.indexOf(`?`);if(!t){let e=ia();t={[Ji]:0,key:e,__TSR_key:e}}return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t}}function ia(){return(Math.random()+1).toString(36).substring(7)}function aa(e,t){return e.protocol!==`http:`&&e.protocol!==`https:`||e.origin!==t||!!e.username||!!e.password}function R(e){return e.pathname+e.search+e.hash}function oa(e){return e.options.loader||e.options.beforeLoad||e.lazyFn||e.options.component?.preload||e.options.pendingComponent?.preload}function sa(e,t){return{fromLocation:t,toLocation:e,pathChanged:t?.pathname!==e.pathname,hrefChanged:t?.href!==e.href,hashChanged:t?.hash!==e.hash}}function ca({key:e,__TSR_key:t,__TSR_index:n,__hashScrollIntoViewOptions:r,...i}){return i}function la(e){return e.findIndex(e=>e.status===`error`||e.status===`notFound`||e._notFound)+1}function ua(e,t,n,r,i,a){r&&(t=t.slice(0,r)),i&&(n=n.slice(0,i));for(let r of t){if(a&&e._tx!==a)return;n.some(e=>e.routeId===r.routeId)||e.routesById[r.routeId].options.onLeave?.(r)}for(let r of n){if(a&&e._tx!==a)return;e.routesById[r.routeId].options[t.some(e=>e.routeId===r.routeId)?`onStay`:`onEnter`]?.(r)}}var da=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={next:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.startTransition=async e=>(e(),!1),this.update=e=>{let t=this.options;this.options={...t,...e},this.isServer=this.options.isServer??!1??typeof document>`u`,this.staticLocations=new WeakMap,this.protocolAllowlist=new Set(this.options.protocolAllowlist),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:na()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`;let n=this.options.basepath??`/`,r=this.options.rewrite,i=this.basepath!==n||t?.rewrite!==r||t?.caseSensitive!==this.options.caseSensitive;if(i&&(this.basepath=n,this.rewrite=n!==`/`&&pe(n)?Wi(n,this.options.caseSensitive,r):r),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;e=this.buildRouteTree(),this.setRoutes(e)}if(this.stores)i&&this.stores.location.set(this.latestLocation);else if(this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=qi(this.latestLocation,e),pi(this)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Pi(this.routeTree,this.options.caseSensitive);return this.options.routeMasks&&Ai(this.options.routeMasks,e.processedTree),{...e,resolvePathCache:Si(1e3)}},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{for(let t of this.subscribers)if(t.eventType===e.type)try{t.fn(e)}catch(e){console.error(e)}},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i},a)=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:oe(e),external:!1,searchStr:o,search:O(t?.search,i),hash:oe(r.slice(1)),state:ee(t?.state,a)}}let o=Gi(this.rewrite,new URL(i,this.origin)),s=this.options.parseSearch(o.search),c=this.options.stringifySearch(s);return o.search=c,{href:o.href.replace(o.origin,``),publicHref:i,pathname:oe(Qi(o.pathname)),external:!!this.rewrite&&aa(o,this.origin),searchStr:c,search:O(t?.search,s),hash:oe(o.hash.slice(1)),state:ee(t?.state,a)}},r=n(e,e.state),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i,{...i.state,__tempLocation:void 0,key:r.state.key,__TSR_key:r.state.__TSR_key});return e.maskedLocation=r,e}return r},this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>{let t=Object.create(null),n=Ni(ie(e),this.processedTree,!0);return n&&Object.assign(t,n.rawParams),[n?.branch||[this.routesById.__root__],t,n?.route]},this.buildLocation=e=>{{let t=this.staticLocations.get(e);if(t)return t}let t=!1,n=(n={})=>{if(n.href){let e=ra(n.href,{});n={...n,to:Gi(this.rewrite,new URL(e.pathname,this.origin)).pathname,search:this.options.parseSearch(e.search),hash:e.hash.slice(1)}}let r=n._fromLocation||this._pendingLocation||this.latestLocation,i,a=()=>(t=!0,r),o=()=>(t=!0,i??=this.matchRoutesLightweight(r)),s=n.to?`${n.to}`:`.`,c=ne(s[0]===`/`?``:n.unsafeRelative===`path`?a().pathname:n.from??o()[1],s,this.options.trailingSlash,this.resolvePathCache),l=this.routesByPath[ie(c)],u=c.includes(`$`),d;if(l)d=l._branch??=Li(l);else if(u)d=[];else{let[e,t,n]=this.getMatchedRoutes(c);d=e,this.options.notFoundRoute&&(!n||n.path!==`/`&&t[`**`])&&(d=[...d,this.options.notFoundRoute])}let f=u?l?._interpolation??Di(!1,{fullPath:c},0):void 0,p;for(let e of d){let t=e.options.params?.stringify??e.options.stringifyParams;if(t){let e=o()[3];if(p??=ga(n.params,e),!_e(p))break;p===e&&(p=Object.assign(ae(),p));try{Object.assign(p,t(p))}catch{}}}p??=ga(n.params,_a(n.params,f)?o()[3]:va);let m=e.leaveParams?c:Qi(oe(f?le(c,f,p,this.pathParamsDecoder):c)),h=ya(d,e._includeValidateSearch),g=()=>{let t=o()[2];if(e._includeValidateSearch&&this.options.search?.strict){let e={};d.forEach(n=>{if(n.options.validateSearch)try{Object.assign(e,ha(n.options.validateSearch,{...e,...t}))}catch{}}),t=e}return t},_=h.length?ba(h,g(),n):n.search===!0?g():typeof n.search==`function`?n.search(g()):n.search||va,v=this.options.stringifySearch(_),y=n.hash===!0?a().hash:typeof n.hash==`function`?n.hash(a().hash):n.hash||void 0,b=y?`#${y}`:``,x=n.state?n.state===!0?a().state:typeof n.state==`function`?n.state(a().state):n.state:va,S=`${m}${v}${b}`,C,w,T=!1;if(this.rewrite){let e=new URL(S,this.origin),t=e.origin,n=Ki(this.rewrite,e);C=R(e),aa(n,t)?(w=n.href,T=!0):w=Qi(R(n))}else C=de(S),w=C;return{publicHref:w,href:C,pathname:m,search:_,searchStr:v,state:x,hash:y??``,external:T,unmaskOnReload:n.unmaskOnReload}},r=n(e);if(e.mask)r.maskedLocation=n({from:e.from,...e.mask});else if(this.options.routeMasks){let t=ji(r.pathname,this.processedTree);if(t){let i=Object.assign(ae(),t.rawParams),{from:a,params:o,...s}=t.route,c=ga(o,i);r.maskedLocation=n({from:e.from,...s,params:c})}}return!t&&e._fromLocation&&!r.maskedLocation&&this.staticLocations.set(e,r),r},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r=n.maskedLocation??n;if(r.external)return fa(this,r.publicHref,{replace:n.replace,ignoreBlocker:t});let i,a=ie(this.latestLocation.href)===ie(n.href)&&me(ca(n.state),ca(this.latestLocation.state)),o=this._commitPromise,s,c=new Promise(e=>{s=e});if(c.resolve=()=>{s(),o?.resolve()},this._commitPromise=c,a)this.load();else{let{maskedLocation:r,hashScrollIntoView:a,...o}=n;r&&(o={...r,state:{...r.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state={...o.state,__hashScrollIntoViewOptions:a??this.options.defaultHashScrollIntoView??!0},this.shouldViewTransition=e,i=n.replace?`REPLACE`:`PUSH`,this.history[i===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t}),this.history.subscribers.size||this.load({action:{type:i}})}return this._scroll.next=n.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,...a}={})=>{let o=this.buildLocation({...a,_includeValidateSearch:!0});this._pendingLocation=o;let s=this.commitLocation({...o,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return queueMicrotask(()=>{this._pendingLocation===o&&(this._pendingLocation=void 0)}),s},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=n?te(n):void 0;if(a||t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i}),a=t.maskedLocation??t;n??=a.publicHref,r??=a.publicHref}let t=!a&&r?r:n;return fa(this,t,i)}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.load=async e=>{this.updateLatestLocation(),e?.action&&(this._scroll.hash=e.action.type===`PUSH`||e.action.type===`REPLACE`),await mo(this,e)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&window.CSS?.supports?.(`selector(:active-view-transition-type(a))`)){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(sa(r,i)):t.types;if(a===!1)return e();n={update:e,types:a}}else n=e;return document.startViewTransition(n).updateCallbackDone}return e()},this.invalidate=e=>{let t=this._committed,n=e?.filter,r=this._preloads,i=new Set,a=e=>{(!n||n(e))&&i.add(e.id)};t.forEach(a),this._cache.forEach(a),r?.forEach(e=>e.forEach(a)),this._tx?.[3].forEach(a);let o=[];for(let[e,t]of r??[])t.some(e=>i.has(e.id))&&(r.delete(e),o.push(e));let s=t=>{if(i.has(t.id)){let n=this.routesById[t.routeId],r={...t,invalid:!0,...(e?.forcePending||t.status===`error`||t.status===`notFound`)&&oa(n)?{status:`pending`,error:void 0}:void 0};return t._flight=void 0,r}return t};this._committed=t.map(s);for(let[t,n]of this._cache)i.has(t)&&(n.invalid=!0,e?.forcePending&&(n.status=`pending`));for(let e of i)this._flights?.delete(e);for(let e of o)e.abort();return this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.resolveRedirect=e=>{let t=e.options,n=e.headers.get(`Location`)||t.href;if(!n){let e=this.buildLocation(t);n=(e.maskedLocation??e).publicHref||`/`}let r;if(j.test(n)||(r=te(n))&&!this.protocolAllowlist.has(r))throw Error(`Redirect blocked: unsafe protocol`);if(r===`http:`||r===`https:`){let e=new URL(n);e.pathname.startsWith(`//`)?n=e.href:aa(e,this.origin)||(n=R(e),r=void 0)}return r&&(t.reloadDocument=!0),t.href=n,e.headers.set(`Location`,n),e},this.clearCache=e=>{let t=this._cache,n=this._preloads,r=e?.filter,i=[],a=[];for(let[e,n]of t)(!r||r(n))&&(a.push(e),i.push(n));let o=[];for(let[e,t]of n??[])(!r||t.some(r))&&(o.push(e),i.push(...t));for(let e of a)t.delete(e);for(let e of o)n.delete(e);for(let e of i){let t=e._flight;e._flight=void 0,t&&!--t[2]&&(this._flights?.get(e.id)===t&&this._flights.delete(e.id),o.push(t[1]))}for(let e of o)e.abort()},this.loadRouteChunk=Ta,this.preloadRoute=e=>ho(this,e),this.matchRoute=(e,t)=>{let n={...e,to:e.to?ne(e.from||``,e.to,this.options.trailingSlash,this.resolvePathCache):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n),i=this.stores.status.get()===`pending`;if(t?.pending&&!i)return!1;let a=t?.pending??!i?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),o=Mi(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,a.pathname,this.processedTree);return!o||e.params&&!me(o.rawParams,e.params,!0)?!1:t?.includeSearch??!0?me(a.search,r.search,!0)?o.rawParams:!1:o.rawParams},this.getStoreConfig=t,e.pathParamsAllowedCharacters?.length&&(this.pathParamsDecoder=he(e.pathParamsAllowedCharacters)),this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??yi,parseSearch:e.parseSearch??vi,protocolAllowlist:e.protocolAllowlist??ue}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes(e){Object.assign(this,e),this.lightweightCache=new WeakMap,this.staticLocations=new WeakMap;let t=this.options.notFoundRoute;t&&(t.init(99999999999),this.routesById[t.id]!==t&&(t._interpolation=Di(!1,t,0)),this.routesById[t.id]=t)}matchRoutesInternal(e,t){let[n,r,i]=this.getMatchedRoutes(e.pathname),a=n,o=!1;(i?i.path!==`/`&&r[`**`]:ie(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?xa(this.options.notFoundMode,a):void 0,c=Array(a.length),l=this._committed,u=(e,t)=>{let n=l[t];return n?.routeId===e.id?n:e===this.options.notFoundRoute?l.find(t=>t.routeId===e.id):void 0},d;for(let n=0;ntypeof t!=`string`&&!M.call(e,t[1]))}var va=Object.freeze({});function ya(e,t){let n=[];for(let r=0;r{let n=t(i.preSearchFilters?i.preSearchFilters.reduce((e,t)=>t(e),e):e);return i.postSearchFilters?i.postSearchFilters.reduce((e,t)=>t(e),n):n});let a=i.validateSearch;t&&a&&n.push(({search:e,next:t,meta:n})=>{let r=t(e);try{let e=ha(a,r);if(n&&e)for(let t in e)t in r||(n.defaulted||=new Map).set(t,e[t]);return{...r,...e}}catch{}return r})}return n}function ba(e,t,n){let r=(t,i,a)=>{if(t>=e.length){if(!n.search)return{};if(n.search===!0)return i;let e=se(n.search,i);return a&&(a.explicit=e),e}return e[t]({search:i,next:(e,n)=>{if(n){let n=a||{};return{search:r(t+1,e,n),meta:n}}return r(t+1,e,a)},meta:a})};return r(0,t)}function xa(e,t){if(e!==`root`){let e;for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.options.notFoundComponent)return r.id;e||=r.children&&r.id}if(e)return e}return Te}function Sa(e,t){let n=e.options.params?.parse??e.options.parseParams;n&&Object.assign(t,n(t))}function Ca(e,t){return e.options[t]?.preload?.()}function wa(e,t){let n=Ca(e,`component`),r=Ca(e,`pendingComponent`);return t&&(r?r=r.then(t):t()),n&&r?Promise.all([n,r]).then(()=>{}):n??r}function Ta(e,t,n){let r=()=>t===!1?void 0:t?Ca(e,t):wa(e,n),i=e._lazy;if(i)return i===!0?r():i.then(r);if(!e.lazyFn)return r();let a=e.lazyFn().then(t=>{{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazy=!0}},t=>{throw e._lazy=void 0,t});return e._lazy=a,a.then(r)}function Ea(e){let t=e.findIndex(e=>e.status!==`success`||e._notFound)+1;return t&&t{let i=()=>r(t);t.addEventListener(`abort`,i,{once:!0}),Promise.resolve(e).then(n,r).then(()=>t.removeEventListener(`abort`,i))})}function Fa(e,t){return e.routesById[t.routeId]}function Ia(e,t,n){return De(e)?[ja,e]:xe(e)?(e.routeId||=n,[Aa,e]):t?(typeof e?.then==`function`&&(e=Error(`A Promise was thrown`,{cause:e})),[ka,e]):[Oa,e]}function La(e,t){let n=Ia(t,!0,e.id);if(n[0]!==ka)return n;try{e.options.onError?.(n[1])}catch(t){n=Ia(t,!0,e.id)}return n}function Ra(e,t,n,r,i){return i[0].signal.aborted?Ma:eo(e,t,n,La(n,r),i)}async function za(e,t,n,r,i,a){let[o,s]=t,c=n[0].signal,l=!!n[3];for(let i=n[6]??0;ie.navigate({...t,_fromLocation:o}),buildLocation:e.buildLocation,cause:l?`preload`:r.cause,abortController:n[0],preload:l,matches:s,routeId:u.id};try{let e=r._ctx||=u.options.context?u.options.context({...f,deps:r.loaderDeps,context:d})||{}:void 0;r.context={...d,...e}}catch(a){return Va(e,r),[i,Ra(e,t,u,a,n)]}if(c.aborted)return[i,Ma];let p=r.paramsError??r.searchError;if(p!==void 0)return Va(e,r),[i,Ra(e,t,u,p,n)];let m=u.options.beforeLoad;if(!m)continue;let h=r.status;i>=a&&(r.status=`pending`,n[7]?.());try{Wa(e,r,`beforeLoad`,n[0]);let a=m({...f,search:r.search,context:r.context,...e.options.additionalContext}),o=await(typeof a?.then==`function`?Pa(a,c):a);if(c.aborted)return[i,Ma];let s=eo(e,t,u,Ia(o,!1,u.id),n);if(s[0]!==Oa)return Va(e,r),[i,s];r.context={...r.context,...o}}catch(a){return Va(e,r),[i,Ra(e,t,u,a,n)]}finally{r.status=h,Wa(e,r,!1,n[0])}}i()}function Ba(e,t,n){if(!(!n||--n[2])){if(e._flights?.get(t.id)===n){let n=e._tx;if(n&&!n[0].signal.aborted&&!n[3].includes(t)&&n[3].some(e=>e.id===t.id)&&n[3].some(e=>e.isFetching===`beforeLoad`))return;e._flights.delete(t.id)}return n[1]}}function Va(e,t){let n=t._flight;t._flight=void 0,Ba(e,t,n)?.abort()}function Ha(e,t,n,r){let i=[];for(let a of t)if(!n?.includes(a)){let t=a._flight;if(a._flight=void 0,r&&t?.[2]===1&&e._flights?.get(a.id)===t&&n?.some(e=>e.id===a.id))t[2]=0;else{let n=Ba(e,a,t);n&&i.push(n)}}for(let e of i)e.abort()}function Ua(e){for(let t of e){let e=t._flight;e&&e[2]++}}function Wa(e,t,n,r){if(t.isFetching=n,r&&e._tx?.[0]!==r)return;let i=e.stores.byRoute.get(t.routeId),a=i?.get();a?.id===t.id&&i.set({...a,isFetching:n})}function Ga(e,t,n,r,i,a,o){let s=t[0];return{params:n.params,location:s,navigate:t=>e.navigate({...t,_fromLocation:s}),cause:o?`preload`:n.cause,abortController:i,preload:o,deps:n.loaderDeps,parentMatchPromise:a,context:n.context,route:r,...e.options.additionalContext}}async function Ka(e,t,n,r,i,a,o){let s=o[0],c=s.signal;if(c.aborted)return Ma;if(!i)return[Oa,void 0];let l=n._flight;Wa(e,n,`loader`,s);try{if(!l){let s=new AbortController;l=[Promise.resolve().then(()=>i(Ga(e,t,n,r,s,a,!!o[3]))).then(e=>Ia(e,!1,r.id),e=>Ia(e,!0,r.id)).then(t=>(t[0]!==Oa&&e._flights?.get(n.id)===l&&(e._flights.delete(n.id),l[2]||s.abort()),t[0]===ka&&l[2]?La(r,t[1]):t)),s,1],(e._flights??=new Map).set(n.id,l)}return n._flight=l,n.abortController=l[1],eo(e,t,r,await Pa(l[0],c),o)}catch(t){if(t!==c||!c.aborted)throw t;return Va(e,n),Ma}finally{Wa(e,n,!1,s)}}function qa(e,t,n){t[0]!==ja&&(e.status=`success`,e.error=void 0,t[0]===Oa?(e.loaderData=t[1],e.invalid=!1,e.updatedAt=Date.now(),e.preload=n):e.invalid=!0)}function Ja(e,t,n){let r=e._cache.get(t.id);if(r!==n||e._committed.some(e=>e.id===t.id&&e._flight===t._flight))return;let i={...t,_notFound:void 0,context:{}};i._flight&&i._flight[2]++,e._cache.set(t.id,i),r&&Va(e,r)}function Ya(e,t){return t[0]===ka||t[0]===Aa?{...e,status:t[0]===ka?`error`:`notFound`,error:t[1],_flight:void 0}:e}function Xa(e,t,n,r,i,a,o){let s=t[1][n],c=Fa(e,s),l=!!a[3],u=e._cache.get(s.id),d,f=!1,p;try{if(s.status===`success`&&(d=c.options.shouldReload,typeof d==`function`&&(d=d(Ga(e,t,s,c,a[0],i,l))),a[0].signal.aborted&&(p=Ma)),!p){if(s.status!==`success`)f=!0;else{let t=l||s.preload?c.options.preloadStaleTime??e.options.defaultPreloadStaleTime??3e4:c.options.staleTime??e.options.defaultStaleTime??0;f=!!(s.invalid||d||d===void 0&&Date.now()-s.updatedAt>=t&&(a[5]||s.cause===`enter`||a[2].some(e=>e.routeId===s.routeId&&e.id!==s.id)))}}}catch(n){s.invalid=!0,Va(e,s),p=Ra(e,t,c,n,a)}let m=c.options.loader,h=typeof m==`function`,g=h?m:m?.handler,_=!l||c.options.preload!==!1,v=_&&m?e._flights?.get(s.id):void 0;v===s._flight||p?v=void 0:v&&!f&&!l&&d===void 0?f=!0:f||(v=void 0);let y=!(!m||!f||s.status!==`success`||l||a[4]||((h?void 0:m.staleReloadMode)??e.options.defaultStaleReloadMode)===`blocking`),b=f&&_,x=b&&!y&&(s.status!==`success`||!!m),S=n>=o?a[7]:void 0,C=c.lazyFn&&c._lazy!==!0?S:void 0;if(b&&!m&&(s.invalid=!1,s.updatedAt=Date.now()),v&&v[2]++,x){let t=s._flight;s._flight=v,Ba(e,s,t)?.abort(),n>=o&&(s.status=`pending`),S?.()}b||(s.isFetching=!1);let w=!p&&x?Ka(e,t,s,c,g,i,a).then(t=>(qa(s,t,l),t[0]===Oa&&(m&&!a[0].signal.aborted&&Ja(e,s,u),n>=o&&(s.status=`pending`)),t)):Promise.resolve(p??[Oa,s.loaderData]),T=(async()=>{try{let e=Ta(c,void 0,C);e&&await Pa(e,a[0].signal)}catch(r){if(!t[1].some((e,t)=>t<=n&&(e.status===`error`||e.status===`notFound`||e._notFound)))return[n,Ra(e,t,c,r,a)]}let r=await w;x&&r[0]===Oa&&s.status===`pending`&&!a[0].signal.aborted&&(s.status=`success`,S?.())})();if(r.push([n,w,T]),!y)return w.then(e=>Ya(s,e));let E={...s,status:`pending`,preload:!1,_flight:v};s.invalid=!1,s.isFetching=`loader`;let D=Ka(e,t,E,c,g,i,a).then(e=>(s.isFetching=!1,qa(E,e,!1),e));return(t[2]??=[]).push([n,D,T,E]),D.then(e=>Ya(E,e))}async function Za(e,t,n,r,i=0){let a=n?.[1][1],o=a?.routeId?t.findIndex(e=>e.routeId===a.routeId):n?.[0]??t.length-1;o<0&&(o=0);for(let n=o;n>=0;n--){let i=Fa(e,t[n]);try{let e=Ta(i,!1);e&&await Pa(e,r)}catch(e){if(e===r&&r.aborted)throw e}if(i.options.notFoundComponent)return n}return a?.routeId?o:i}function Qa(e,t){t[2]&&=(Ha(e,t[2].map(e=>e[3])),void 0)}async function $a(e,t,n,r){let i;try{await Promise.all(e.map(e=>e[1].then(async t=>{let a=e[0];if(!(r&&a>=await r)){if(t[0]>=ja)throw[a,t];!i&&t[0]!==Oa&&(i=[a,t],await Promise.all((n??[]).map(e=>{if(!(e[0]<=a))return e[1].then(t=>{if(t[0]===ja)throw[e[0],t]})})))}})))}catch(e){return e}return t??i}function eo(e,t,n,r,i,a){for(;r[0]===ja;){let o=r[1],s=o.options;try{if((s.href||o.headers.has(`Location`))&&(e.resolveRedirect(o),s.reloadDocument)||(s.reloadDocument?i[3]:i[1]>=20))return r;let n=e.buildLocation({...s,_fromLocation:t[0],_includeValidateSearch:!0}),a=n.maskedLocation??n;if(a.external){let t=o.clone();return t.options={...s},t.headers.set(`Location`,a.publicHref),e.resolveRedirect(t),i[3]?[ja,t]:[ja,t,a]}return[ja,o,n]}catch(e){r=a?[ka,e]:La(n,e),a=!0}}return r}async function to(e,t,n,r,i,a){let o=t[1],s=await i,c=!1,l=o.findIndex(e=>e._notFound),u=t=>t[1][0]===Aa?Za(e,o,t,r.signal):t[0],d=l<0?o.length:l;if((s?.[1][0]??0)>=ja)d=0;else if(s){d=s[2]??=await u(s);for(let e of n){if(e[0]>=d)break;let t=await e[1];if(t[0]!==Oa&&t[0]=d)break;let t=await e[2];if(t){s=t;break}}if((s?.[1][0]??0)>=ja){let n=s[1];if(n[0]!==ja||n[1].options.reloadDocument||n[2])return Qa(e,t),n;c=!0,s=[0,[ka,Error(`Too many redirects`)]]}let f=s?s[2]??await u(s):l;if(f>=0){let i=s?.[1],l=i?.[0],u=o[f],d=i?.[1],p=()=>{i&&(u._notFound=void 0,l===ka?u.status=`error`:(d.routeId=u.routeId,u.routeId===e.routeTree.id?(u.status=`success`,u._notFound=!0):u.status=`notFound`),u.error=d,u.isFetching=!1)};p(),i||a?.();let m=Fa(e,u);try{await Pa(i?Promise.resolve().then(()=>Ta(m,l===ka?`errorComponent`:`notFoundComponent`)):Promise.all([Ta(m),Ta(m,`notFoundComponent`)]),r.signal)}catch(n){if(n===r.signal&&r.signal.aborted)return Qa(e,t),Ma}i?c&&(r.abort(),await Promise.all([...n.map(e=>e[1]),...n.map(e=>e[2]),...(t[2]??[]).map(e=>e[1])]),Qa(e,t),Ha(e,o),p()):u.status=`success`}return t}async function no(e,t,n,r=0,i=t[1].length){let a=t[1];for(let t=r;te._notFound);if(e.options.notFoundMode!==`root`&&s>=0){let t=await Za(e,n,void 0,a,s);n[s]._notFound=void 0,n[t]._notFound=!0,s=t}let c=s<0?n.length:s+1,l=0;for(;l{for(let t=d;t=ja&&(c=0);p()}if(!a.aborted&&!r[3]){let t=[];for(let[n,r]of e._flights??[])r[2]||(e._flights.delete(n),t.push(r[1]));for(let e of t)e.abort()}let h=to(e,i,u,r[0],$a(u,m,i[2]),r[7]);i[2]?.length&&(i[3]=$a(i[2],void 0,void 0,h.then(e=>Na(e)?0:Ea(n).length,()=>0))),o=await h}catch(t){if(Qa(e,i),t===a&&a.aborted)return Ma;throw t}return Na(o)?o:no(e,o,a,r[6]===n.length?r[6]:0)}function io(e,t){if(e._tx!==t)return;let n=t[3],r=e.stores.matches.get(),i=e._pending;for(let a=0;a0){i[3]=setTimeout(()=>io(e,t),n);return}i[2]=0}let m=n.map(e=>({...e,_flight:void 0}));m[a].status=`pending`;let h=i[4]=e.startTransition(()=>e.stores.setMatches(m),m).then(t=>(t&&e._pending===i&&i[4]===h&&!i[2]&&(i[2]=Date.now()+f),t));return}}function ao(e,t){let n=e._pending;(e._tx===t||!e._tx?.[3].some(e=>e.id===n?.[1]))&&(clearTimeout(n?.[3]),e._pending=void 0)}async function oo(e,t){let n=e._pending;if(!n)return;clearTimeout(n[3]);let r=n[2]-Date.now();if(!n[4]||r<=0||!Ea(t[3]).some(e=>e.id===n[1]))return;let i;try{await Pa(new Promise(e=>{i=setTimeout(e,r)}),t[0].signal)}catch{}clearTimeout(i)}function so(e,t){e._committed=t,e.stores.setMatches(t)}function co(e,t,n,r){let i=e._committed,a=e._lifecycleEnd,o=e._cache;for(let e of n)e.preload=!1,r&&(e._assetEnd=void 0);let s=Ea(n).length,c=new Map;{let t=Date.now(),r=new Set;for(let e=0;e=(n.preload?i.options.preloadGcTime??e.options.defaultPreloadGcTime??3e5:i.options.gcTime??e.options.defaultGcTime??3e5)||c.set(n.id,o.get(n.id)===n?n:{...n,_flight:void 0,isFetching:!1,context:{}})}}t[3]=[],e._cache=c;let l=e._lifecycleEnd=la(n);so(e,n),Ha(e,[...o.values(),...i].filter(e=>e._flight&&c.get(e.id)!==e),n),ua(e,i,n,a,l,t)}async function lo(e,t){let n=e._tx;for(;n&&n!==t;)t=n,await n[5],n=e._tx}function uo(e,t,n){let r=n[1].options,i=n[2];if(!i)return e.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return e.navigate({href:(i.maskedLocation??i).publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});i._redirects=t[1]+1,e._pendingLocation=i;let a=e.commitLocation({...i,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{e._pendingLocation===i&&(e._pendingLocation=void 0)}),a}async function fo(e,t,n,r,i){let a=n.map(e=>({...e}));Ua(a);for(let t of r)Va(e,a[t[0]]),a[t[0]]=t[3];let o=[t[2],a],s;try{s=await to(e,o,r,t[0],i)}catch(t){throw Ha(e,a),t}if(Na(s)){Ha(e,a),s[0]===ja&&e._tx===t&&e._committed===n&&await uo(e,t,s);return}if(await no(e,s,t[0].signal),e._tx!==t||e._committed!==n){Ha(e,a);return}for(let t of a){let n=e._cache.get(t.id);n?._flight&&n._flight===t._flight&&(e._cache.delete(t.id),Va(e,n))}so(e,a),Ha(e,n,a)}async function po(e,t,n,r,i,a){let o=await ro(e,t[2],t[3],[t[0],t[1],e._committed,void 0,i,n,a,r]);if(Na(o)){let n=o[0]===ja&&e._tx===t;if((!n||o[1].options.reloadDocument)&&ao(e,t),Ha(e,t[3]),t[3]=[],!n)return;if(e._tx!==t){ao(e,t);return}await uo(e,t,o);return}let s=o[1];if(e._tx===t&&await oo(e,t),e._tx!==t){ao(e,t),Ha(e,s),Qa(e,o);return}let c=t[2],l=sa(c,e.stores.resolvedLocation.get()),u=o[2];await e.startViewTransition(async()=>{if(e._tx===t&&await oo(e,t),e._tx!==t){ao(e,t),Ha(e,s),Qa(e,o);return}let n=await e.startTransition(()=>{ao(e,t),co(e,t,s,a),e._tx===t&&(e.emit({type:`onLoad`,...l}),e._tx===t&&e.emit({type:`onBeforeRouteMount`,...l}))},s);if(e._tx!==t){Qa(e,o);return}u?.length&&fo(e,t,s,u,o[3]).catch(console.error),e.batch(()=>{e.stores.resolvedLocation.set(c),e.stores.status.set(`idle`),e._tx===t&&e.emit({type:`onResolved`,...l}),n&&e._tx===t&&e.emit({type:`onRendered`,...l})}),e._tx===t&&(e._commitPromise?.resolve(),e._commitPromise=void 0)})}async function mo(e,t){let n=e._tx,r=e.stores.resolvedLocation.get(),i=r??e.stores.location.get(),a=e.latestLocation,o=e._pendingLocation,s=o?.href===a.href?o._redirects??0:0,c=e._handoff,l=c?.[0](),u=new AbortController,d=e._preflight;if(e._preflight=u,l||c?.[1](),d?.abort(),!u.signal.aborted){let t=sa(a,r);e.emit({type:`onBeforeNavigate`,...t}),u.signal.aborted||e.emit({type:`onBeforeLoad`,...t})}if(u.signal.aborted){await lo(e,n);return}let f=i.href===a.href,p=u,m=e.matchRoutes(a,{_controller:u});Ua(m);let h=l?c[1](m):void 0;if(h?p=l:l?.abort(),u.signal.aborted){Ha(e,m),await lo(e,n);return}e._preflight=void 0;let g,_=()=>po(e,y,f,()=>io(e,y),t?.sync,h),v=t?.sync?new Promise(e=>g=e):Promise.resolve().then(_),y=[p,s,a,m,Date.now(),v.then(()=>lo(e,y))];if(e._tx=y,n){for(let t of e.stores.matches.get()){if(e._tx!==y)break;t.isFetching&&Wa(e,t,!1)}n[0].abort(),Ha(e,n[3],y[3],!0)}if(e._tx!==y){Ha(e,y[3]),y[3]=[],g?.(),await lo(e,y);return}e.batch(()=>{e.stores.status.set(`pending`),e.stores.location.set(a)}),(h||!e._committed.length&&m[0]?.status!==`success`&&!m.some(e=>e._notFound))&&io(e,y),g?.(_()),await y[5]}async function ho(e,t){let n=e.buildLocation(t);for(let t=0;;t++){let r=e._committed,i=new AbortController,a,o,s;try{try{a=e.matchRoutes(n,{_controller:i}),Ua(a),o=(e._preloads??=new Map).set(i,a),s=await ro(e,n,a,[i,t,r,!0])}finally{o&&(o=o.delete(i),Ha(e,a)),i.abort()}if(!Na(s))return s[1];if(!o||s.length<3)return;n=s[2]}catch(e){xe(e)||console.error(e);return}}}function go(e,t){if(e)return typeof e==`string`?e:e[t]}function _o(e){return e?.scriptFormat??`module`}function vo(e,t,n){let r=yo(t),i=go(n,`script`)??r.crossOrigin;return{..._o(e)===`iife`?{rel:`preload`,as:`script`}:{rel:`modulepreload`},href:r.href,...i?{crossOrigin:i}:{}}}function yo(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}function bo(e,t){if(t.length===0)return;if(t.length===1){e.push(t[0]);return}let n=new Set;for(let r of t){let t=JSON.stringify(r);n.has(t)||(n.add(t),e.push(r))}}function xo(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}function So({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(1)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(1)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Co(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var wo=[],To=0,{link:Eo,unlink:Do,propagate:Oo,checkDirty:ko,shallowPropagate:Ao}=So({update(e){return e._update()},notify(e){wo[Mo++]=e,e.flags&=-3},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,Io(e))}}),jo=0,Mo=0,No,Po=0;function Fo(e){try{++Po,e()}finally{--Po||Lo()}}function Io(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Do(n,e)}function Lo(){if(!(Po>0)){for(;jo{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=No,o=t?.compare??Object.is;if(n)No=i,++To,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=5);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{No=a,n&&(i.flags&=-5),Io(i)}}};return n?(i.flags=17,i.get=function(){let e=i.flags;if(e&16||e&32&&ko(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Ao(e)}}else e&32&&(i.flags=e&-33);return No!==void 0&&Eo(i,No,To),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Oo(e),Ao(e),Lo())}},i}function zo(e){let t=()=>{let t=No;No=n,++To,n.depsTail=void 0,n.flags=6;try{return e()}finally{No=t,n.flags&=-5,Io(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){let e=this.flags;e&16||e&32&&ko(this.deps,this)?t():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,Io(this)}};return t(),n}var z=n(r(),1);function Bo(e,t){let n=e[1];e.length=0,n?.(t)}function Vo({t:e}){let t=ke(),n=t._rendered??=[];return t.startTransition=(r,i)=>new Promise(a=>{Bo(n,!1),n.push(i,a),e(t),z.startTransition(r)}),T(()=>{let e=t.history.subscribe(t.load);t.updateLatestLocation();let r=t.latestLocation,i=t.buildLocation({to:r.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(ie(r.publicHref)!==ie(i.publicHref))return t.commitLocation({...i,replace:!0,ignoreBlocker:!0}),e;let a=t.stores.resolvedLocation.get();return a?.href===r.href&&a.state.__TSR_key===r.state.__TSR_key?n.push(t.stores.matches.get(),e=>{e&&t.emit({type:`onRendered`,...sa(a,a)})}):t._tx||t.load({sync:!0}).catch(console.error),e},[t,t.history]),null}var B=t();function V(){let e=ke(),t=e.routesById[Te],n=Se(e,t),r=e.ssr?ye:z.Suspense,i=(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Vo,{t:z.useState()[1]}),(0,B.jsx)(r,{fallback:n,children:(0,B.jsx)(Ho,{})})]});return e.options.InnerWrap?(0,B.jsx)(e.options.InnerWrap,{children:i}):i}function Ho(){let e=ke(),t=e._rendered,n=je(e.stores.matches,e=>t[0]??e),r=n[0],i=r?.routeId;T(()=>{t[0]===n&&Bo(t,!0)},[t,n]);let a=i?(0,B.jsx)(Ce,{routeId:i}):null;return(0,B.jsx)(we.Provider,{value:i,children:e.options.disableGlobalCatchBoundary?a:(0,B.jsx)(ve,{getResetKey:()=>r,onCatch:void 0,children:a})})}var Uo=e=>({createMutableStore:Ro,createReadonlyStore:Ro,batch:Fo}),Wo=e=>new Go(e),Go=class extends da{constructor(e){super(e,Uo)}};function Ko({router:e,children:t,...n}){_e(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,B.jsx)(Ae.Provider,{value:e,children:t});return e.options.Wrap?(0,B.jsx)(e.options.Wrap,{children:r}):r}function qo({router:e,...t}){return(0,B.jsx)(Ko,{router:e,...t,children:(0,B.jsx)(V,{})})}function Jo(e){let t=ke();return je(t.stores.location,C(e,t))}function Yo(e,t){if(t)for(let[n,r]of Object.entries(t))n!==`suppressHydrationWarning`&&r!==void 0&&r!==!1&&e.setAttribute(n,typeof r==`boolean`?``:String(r))}function Xo(e){let{attrs:t,children:n,nonce:r,preventScriptHoist:i}=e,a=z.useMemo(()=>n===void 0?void 0:{__html:n},[n]);switch(e.tag){case`title`:return(0,B.jsx)(`title`,{...t,suppressHydrationWarning:!0,children:n});case`meta`:return(0,B.jsx)(`meta`,{...t,suppressHydrationWarning:!0});case`link`:return(0,B.jsx)(`link`,{...t,precedence:t?.precedence??(t?.rel===`stylesheet`?`default`:void 0),nonce:r,suppressHydrationWarning:!0});case`style`:return e.inlineCss,(0,B.jsx)(`style`,{...t,dangerouslySetInnerHTML:a,nonce:r});case`script`:return(0,B.jsx)(Zo,{attrs:t,preventScriptHoist:i,children:n});default:return null}}function Zo({attrs:e,children:t,preventScriptHoist:n}){ke();let r=Oe(),i=z.useMemo(()=>t===void 0?void 0:{__html:t},[t]),a=typeof e?.type==`string`&&e.type!==``&&e.type!==`text/javascript`&&e.type!==`module`;if(z.useEffect(()=>{if(!a){if(e?.src){let t=document.createElement(`a`);t.href=e.src;let n=t.href;for(let e of document.scripts)if(e.src===n)return;let r=document.createElement(`script`);return Yo(r,e),document.head.appendChild(r),()=>r.remove()}if(typeof t==`string`){let n=typeof e?.type==`string`?e.type:`text/javascript`,r=typeof e?.nonce==`string`?e.nonce:void 0;for(let e of document.scripts){if(e.hasAttribute(`src`))continue;let i=e.getAttribute(`type`)??`text/javascript`,a=e.getAttribute(`nonce`)??void 0;if(e.textContent===t&&i===n&&a===r)return}let i=document.createElement(`script`);return i.textContent=t,Yo(i,e),document.head.appendChild(i),()=>i.remove()}}},[e,t,a]),a&&typeof t==`string`)return(0,B.jsx)(`script`,{...e,suppressHydrationWarning:!0,dangerouslySetInnerHTML:i});if(!r){if(e?.src)return(0,B.jsx)(`script`,{...e,suppressHydrationWarning:!0});if(typeof t==`string`)return(0,B.jsx)(`script`,{...e,dangerouslySetInnerHTML:i,suppressHydrationWarning:!0})}return null}function Qo(e,t,n,r){n=Da(n);let i=n.map(e=>e.meta).filter(e=>e!==void 0),a=[],o={},s;for(let e=i.length-1;e>=0;e--){let n=i[e];for(let e=n.length-1;e>=0;e--){let r=n[e];if(r){if(r.title)s||={tag:`title`,children:r.title};else if(`script:ld+json`in r)try{let e=JSON.stringify(r[`script:ld+json`]);a.push({tag:`script`,attrs:{type:`application/ld+json`},children:ce(e)})}catch{}else{let e=r.name??r.property;if(e){if(o[e])continue;o[e]=!0}a.push({tag:`meta`,attrs:{...r,nonce:t}})}}}}s&&a.push(s),t&&a.push({tag:`meta`,attrs:{property:`csp-nonce`,content:t}}),a.reverse();let c=n.flatMap(e=>e.links??[]).filter(e=>e!==void 0).map(e=>({tag:`link`,attrs:{...e,nonce:t}})),l=e.ssr?.manifest,u=[];l&&(n.forEach(e=>{(l.routes[e.routeId]?.css)?.forEach(e=>{let n=xo(e);u.push({tag:`link`,attrs:{rel:`stylesheet`,...n,crossOrigin:go(r,`stylesheet`)??n.crossOrigin,suppressHydrationWarning:!0,nonce:t}})})}),l.inlineStyle&&u.push({tag:`style`,attrs:{...l.inlineStyle.attrs,nonce:t},children:l.inlineStyle.children,inlineCss:!0}));let d=[];l&&n.forEach(e=>{l.routes[e.routeId]?.preloads?.forEach(e=>{d.push({tag:`link`,attrs:{...vo(l,e,r),nonce:t}})})});let f=n.flatMap(e=>e.styles??[]).filter(e=>e!==void 0).map(({children:e,...n})=>({tag:`style`,attrs:{...n,nonce:t},children:e})),p=n.flatMap(e=>e.headScripts??[]).filter(e=>e!==void 0).map(({children:e,...n})=>({tag:`script`,attrs:{...n,nonce:t},children:e})),m=[];return bo(m,a),m.push(...d),bo(m,c),m.push(...u),bo(m,f),bo(m,p),m}var $o=e=>{let t=ke(),n=t.options.ssr?.nonce,r=z.useCallback(r=>Qo(t,n,r,e),[e,n,t]);return je(t.stores.matches,r,{compare:me})};function es(e){let t=$o(e.assetCrossOrigin),n=ke().options.ssr?.nonce;return(0,B.jsx)(B.Fragment,{children:t.map(e=>(0,z.createElement)(Xo,{...e,key:`tsr-meta-${JSON.stringify(e)}`,nonce:n}))})}var ts=e((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&te(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&te(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function te(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,te(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ns=e(((e,t)=>{t.exports=ts()})),rs=e((e=>{var t=ns(),n=r(),i=Pe();function a(e){var t=`https://react.dev/errors/`+e;if(1be||(e.current=ye[be],ye[be]=null,be--)}function N(e,t){be++,ye[be]=e.current,e.current=t}var Ce=xe(null),we=xe(null),Te=xe(null),Ee=xe(null);function De(e,t){switch(N(Te,t),N(we,e),N(Ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}Se(Ce),N(Ce,e)}function Oe(){Se(Ce),Se(we),Se(Te)}function ke(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,N(Ee,e)),t=Ce.current;var n=dp(t,e.type);t!==n&&(N(we,e),N(Ce,n))}function Ae(e){we.current===e&&(Se(Ce),Se(we)),Ee.current===e&&(Se(Ee),sh._currentValue=ve)}var je,Me;function Ne(e){if(je===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);je=t&&t[1]||``,Me=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Fe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ne(n):``}function Le(e,t){switch(e.tag){case 26:case 27:case 5:return Ne(e.type);case 16:return Ne(`Lazy`);case 13:return e.child!==t&&t!==null?Ne(`Suspense Fallback`):Ne(`Suspense`);case 19:return Ne(`SuspenseList`);case 0:case 15:return Ie(e.type,!1);case 11:return Ie(e.type.render,!1);case 1:return Ie(e.type,!0);case 31:return Ne(`Activity`);case 30:return Ne(`ViewTransition`);default:return``}}function Re(e){try{var t=``,n=null;do t+=Le(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var ze=Object.prototype.hasOwnProperty,Be=t.unstable_scheduleCallback,Ve=t.unstable_cancelCallback,He=t.unstable_shouldYield,Ue=t.unstable_requestPaint,We=t.unstable_now,Ge=t.unstable_getCurrentPriorityLevel,Ke=t.unstable_ImmediatePriority,P=t.unstable_UserBlockingPriority,qe=t.unstable_NormalPriority,Je=t.unstable_LowPriority,Ye=t.unstable_IdlePriority,Xe=t.log,F=t.unstable_setDisableYieldValue,Ze=null,Qe=null;function $e(e){if(typeof Xe==`function`&&F(e),Qe&&typeof Qe.setStrictMode==`function`)try{Qe.setStrictMode(Ze,e)}catch{}}var et=Math.clz32?Math.clz32:rt,tt=Math.log,nt=Math.LN2;function rt(e){return e>>>=0,e===0?32:31-(tt(e)/nt|0)|0}var it=256,at=262144,ot=4194304;function st(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ct(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=st(n))):i=st(o):i=st(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=st(n))):i=st(o)):i=st(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function lt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ut(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function mt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ht(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),kn=!1;if(On)try{var An={};Object.defineProperty(An,"passive",{get:function(){kn=!0}}),window.addEventListener(`test`,An,An),window.removeEventListener(`test`,An,An)}catch{kn=!1}var jn=null,Mn=null,Nn=null;function Pn(){if(Nn)return Nn;var e,t=Mn,n=t.length,r,i=`value`in jn?jn.value:jn.textContent,a=i.length;for(e=0;e=pr),gr=` `,_r=!1;function vr(e,t){switch(e){case`keyup`:return dr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function yr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var br=!1;function xr(e,t){switch(e){case`compositionend`:return yr(t);case`keypress`:return t.which===32?(_r=!0,gr):null;case`textInput`:return e=t.data,e===gr&&_r?null:e;default:return null}}function Sr(e,t){if(br)return e===`compositionend`||!fr&&vr(e,t)?(e=Pn(),Nn=Mn=jn=null,br=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Gr(n)}}function qr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?qr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Wr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Wr(e.document)}return t}function Yr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Xr=On&&`documentMode`in document&&11>=document.documentMode,Zr=null,Qr=null,$r=null,ei=!1;function ti(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ei||Zr==null||Zr!==Wr(r)||(r=Zr,`selectionStart`in r&&Yr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$r&&Ur($r,r)||($r=r,r=qf(Qr,`onSelect`),0>=o,i-=o,Zi=1<<32-et(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),R&&$i(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),R&&$i(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return R&&$i(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),R&&$i(i,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===k&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case D:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===k){if(r.tag===7){n(e,r.sibling),c=i(r,o.props.children),lo(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ce&&no(l)===r.type){n(e,r.sibling),c=i(r,o.props),lo(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===k?(c=Ri(o.props.children,e.mode,c,o.key),lo(c,o),c.return=e,e=c):(c=Li(o.type,o.key,o.props,null,e.mode,c),lo(c,o),c.return=e,e=c)}return s(e);case O:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=i(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Vi(o,e.mode,c),c.return=e,e=c}return s(e);case ce:return o=no(o),_(e,r,o,c)}if(_e(o))return h(e,r,o,c);if(he(o)){if(l=he(o),typeof l!=`function`)throw Error(a(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,co(o),c);if(o.$$typeof===re)return _(e,r,Da(e,o),c);uo(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,o),c.return=e,e=c):(n(e,r),c=zi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{so=0;var i=_(e,t,n,r);return oo=null,i}catch(t){if(t===Xa||t===Qa)throw t;var a=Ni(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var po=fo(!0),mo=fo(!1),ho=!1;function go(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function _o(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function vo(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function yo(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,K&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Ai(e),ki(e,null,n),t}return Ei(e,r,t,n),Ai(e)}function bo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,_t(e,n)}}function xo(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var So=!1;function Co(){if(So){var e=Va;if(e!==null)throw e}}function wo(e,t,n,r){So=!1;var i=e.updateQueue;ho=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===Ba&&(So=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=T({},d,f);break a;case 2:ho=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),sd|=o,e.lanes=o,e.memoizedState=d}}function To(e,t){if(typeof e!=`function`)throw Error(a(191,e));e.call(t)}function Eo(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=j.T,s={};s.types=o===null?null:o.types,j.T=s,dc(e,!1,t,n);try{var c=i(),l=j.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?uc(e,t,Wa(c,r),Ad(e)):uc(e,t,r,Ad(e))}catch(n){uc(e,t,{then:function(){},status:`rejected`,reason:n},Ad())}finally{M.p=a,o!==null&&s.types!==null&&(o.types=s.types),j.T=o}}function ec(){}function tc(e,t,n,r){if(e.tag!==5)throw Error(a(476));var i=nc(e).queue;$s(e,i,t,ve,n===null?ec:function(){return rc(e),n(r)})}function nc(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ve,baseState:ve,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:fs,lastRenderedState:ve},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:fs,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function rc(e){var t=nc(e);t.next===null&&(t=e.alternate.memoizedState),uc(e,t.next.queue,{},Ad())}function ic(){return Ea(sh)}function ac(){return ss().memoizedState}function oc(){return ss().memoizedState}function sc(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Ad();e=vo(n);var r=yo(t,e,n);r!==null&&(Nd(r,t,n),bo(r,t,n)),t={cache:Na()},e.payload=t;return}t=t.return}}function cc(e,t,n){var r=Ad();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},fc(e)?pc(t,n):(n=Di(e,t,n,r),n!==null&&(Nd(n,e,r),mc(n,t,r)))}function lc(e,t,n){uc(e,t,n,Ad())}function uc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(fc(e))pc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Hr(s,o))return Ei(e,t,i,0),ed===null&&Ti(),!1}catch{}if(n=Di(e,t,i,r),n!==null)return Nd(n,e,r),mc(n,t,r),!0}return!1}function dc(e,t,n,r){if(r={lane:2,revertLane:Nf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},fc(e)){if(t)throw Error(a(479))}else t=Di(e,n,r,2),t!==null&&Nd(t,e,2)}function fc(e){var t=e.alternate;return e===V||t!==null&&t===V}function pc(e,t){Go=Wo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function mc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,_t(e,n)}}var hc={readContext:Ea,use:us,useCallback:Zo,useContext:Zo,useEffect:Zo,useImperativeHandle:Zo,useLayoutEffect:Zo,useInsertionEffect:Zo,useMemo:Zo,useReducer:Zo,useRef:Zo,useState:Zo,useDebugValue:Zo,useDeferredValue:Zo,useTransition:Zo,useSyncExternalStore:Zo,useId:Zo,useHostTransitionStatus:Zo,useFormState:Zo,useActionState:Zo,useOptimistic:Zo,useMemoCache:Zo,useCacheRefresh:Zo,useEffectEvent:Zo},gc={readContext:Ea,use:us,useCallback:function(e,t){return os().memoizedState=[e,t===void 0?null:t],e},useContext:Ea,useEffect:Bs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),Rs(4194308,4,Ks.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Rs(4194308,4,e,t)},useInsertionEffect:function(e,t){Rs(4,2,e,t)},useMemo:function(e,t){var n=os();t=t===void 0?null:t;var r=e();if(Ko){$e(!0);try{e()}finally{$e(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=os();if(n!==void 0){var i=n(t);if(Ko){$e(!0);try{n(t)}finally{$e(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=cc.bind(null,V,e),[r.memoizedState,e]},useRef:function(e){var t=os();return e={current:e},t.memoizedState=e},useState:function(e){e=Ss(e);var t=e.queue,n=lc.bind(null,V,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Js,useDeferredValue:function(e,t){return Zs(os(),e,t)},useTransition:function(){var e=Ss(!1);return e=$s.bind(null,V,e.queue,!0,!1),os().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=V,i=os();if(R){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),ed===null)throw Error(a(349));J&127||_s(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Bs(ys.bind(null,r,o,e),[e]),r.flags|=2048,Is(9,{destroy:void 0},vs.bind(null,r,o,n,t),null),n},useId:function(){var e=os(),t=ed.identifierPrefix;if(R){var n=Qi,r=Zi;n=(r&~(1<<32-et(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=qo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(i,{is:r.is}):s.createElement(i)}}o[wt]=t,o[I]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&ml(t)}}return yl(t),t.subtreeFlags&=-33554433,hl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&ml(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(a(166));if(e=Te.current,fa(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=ia,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[wt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||$f(e.nodeValue,n)),e||la(t,!0)}else e=lp(e).createTextNode(r),e[wt]=t,t.stateNode=e}return yl(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=fa(t),n!==null){if(e===null){if(!r)throw Error(a(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(a(557));e[wt]=t}else pa(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;yl(t),e=!1}else n=ma(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Ro(t),t):(Ro(t),null);if(t.flags&128)throw Error(a(558))}return yl(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=fa(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(a(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(a(317));i[wt]=t}else pa(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;yl(t),i=!1}else i=ma(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Ro(t),t):(Ro(t),null)}return Ro(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),_l(t,t.updateQueue),yl(t),null);case 4:return Oe(),e===null&&Uf(t.stateNode.containerInfo),t.flags|=67108864,yl(t),null;case 10:return ba(t.type),yl(t),null;case 19:if(Bo(t),r=t.memoizedState,r===null)return yl(t),null;if(i=!!(t.flags&128),o=r.rendering,o===null){if(i)vl(r,!1);else{if(od!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Vo(e),o!==null){for(t.flags|=128,vl(r,!1),e=o.updateQueue,t.updateQueue=e,_l(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Ii(n,e),n=n.sibling;return z(t,zo.current&1|2),R&&$i(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&We()>X&&(t.flags|=128,i=!0,vl(r,!1),t.lanes=4194304)}}else{if(!i){if(e=Vo(o),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,_l(t,e),vl(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!R)return yl(t),null}else 2*We()-r.renderingStartTime>X&&n!==536870912&&(t.flags|=128,i=!0,vl(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=We(),e.sibling=null,o=zo.current,o=i?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||R?z(t,o):(n=o,N(Mo,t),N(zo,n),No===null&&(No=t)),R&&$i(t,r.treeForkCount),e}return yl(t),null;case 22:case 23:return Ro(t),jo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(yl(t),t.subtreeFlags&6&&(t.flags|=8192)):yl(t),n=t.updateQueue,n!==null&&_l(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&Se(Ka),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ba(Ma),yl(t),null;case 25:return null;case 30:return t.flags|=33554432,yl(t),null}throw Error(a(156,t.tag))}function xl(e,t){switch(na(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ba(Ma),Oe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ae(t),null;case 31:if(t.memoizedState!==null){if(Ro(t),t.alternate===null)throw Error(a(340));pa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Ro(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));pa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Bo(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Oe(),null;case 10:return ba(t.type),null;case 22:case 23:return Ro(t),jo(),e!==null&&Se(Ka),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ba(Ma),null;case 25:return null;default:return null}}function Sl(e,t){switch(na(t),t.tag){case 3:ba(Ma),Oe();break;case 26:case 27:case 5:Ae(t);break;case 4:Oe();break;case 31:t.memoizedState!==null&&Ro(t);break;case 13:Ro(t);break;case 19:Bo(t);break;case 10:ba(t.type);break;case 22:case 23:Ro(t),jo(),e!==null&&Se(Ka);break;case 24:ba(Ma)}}function Cl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Q(t,t.return,e)}}function wl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Q(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Q(t,t.return,e)}}function Tl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Eo(t,n)}catch(t){Q(e,e.return,t)}}}function El(e,t,n){n.props=Cc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Q(e,t,n)}}function Dl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=vi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);p(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Q(e,t,n)}}function Ol(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Q(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Q(e,t,n)}else n.current=null}}function kl(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[wt]=e,Lt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,i).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Kr(s,h),v=Kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,j.T=null,n=Cd,Cd=null;var o=yd,s=xd;if(Z=0,bd=yd=null,xd=0,K&6)throw Error(a(331));var c=K;if(K|=4,Yu(o.current),Vu(o,o.current,s,n),K=c,Ef(0,!1),Qe&&typeof Qe.onPostCommitFiberRoot==`function`)try{Qe.onPostCommitFiberRoot(Ze,o)}catch{}return!0}finally{M.p=i,j.T=r,lf(e,t)}}function ff(e,t,n){t=Ui(n,t),t=kc(e.stateNode,t,2),e=yo(e,t,2),e!==null&&(mt(e,2),Tf(e))}function Q(e,t,n){if(e.tag===3)ff(e,e,n);else for(;t!==null;){if(t.tag===3){ff(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(vd===null||!vd.has(r))){e=Ui(n,e),n=Ac(2),r=yo(t,n,2),r!==null&&(jc(n,r,t,e),mt(r,2),Tf(r));break}}t=t.return}}function pf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new $u;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(id=!0,i.add(n),e=mf.bind(null,e,t,n),t.then(e,e))}function mf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,ed===e&&(J&n)===n&&(od===4||od===3&&(J&62914560)===J&&300>We()-hd?K&2?ld|=n:Bd(e,0):ld|=n,dd===J&&(dd=0)),Tf(e)}function hf(e,t){t===0&&(t=ft()),e=Oi(e,t),e!==null&&(mt(e,t),Tf(e))}function gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),hf(e,n)}function _f(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(a(314))}r!==null&&r.delete(t),hf(e,n)}function vf(e,t){return Be(e,t)}var yf=null,bf=null,xf=!1,Sf=!1,Cf=!1,wf=0;function Tf(e){e!==bf&&e.next===null&&(bf===null?yf=bf=e:bf=bf.next=e),Sf=!0,xf||(xf=!0,Mf())}function Ef(e,t){if(!Cf&&Sf){Cf=!0;do for(var n=!1,r=yf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-et(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,jf(r,a))}else a=J,a=ct(r,r===ed?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||lt(r,a)||(n=!0,jf(r,a))}r=r.next}while(n);Cf=!1}}function Df(){Of()}function Of(){Sf=xf=!1;var e=0;wf!==0&&hp()&&(e=wf);for(var t=We(),n=null,r=yf;r!==null;){var i=r.next,a=kf(r,t);a===0?(r.next=null,n===null?yf=i:n.next=i,i===null&&(bf=n)):(n=r,(e!==0||a&3)&&(Sf=!0)),r=i}Z!==0&&Z!==5||Ef(e,!1),wf!==0&&(wf=0)}function kf(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=rn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),Lt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+rn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+rn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+rn(n.imageSizes)+`"]`)):i+=`[href="`+rn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=T({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[jt]=!0,o.onload=o.onerror=function(){Rt(o)}),Lt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+rn(r)+`"][href="`+rn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=T({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),Lt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=It(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=T({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);Lt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=It(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=T({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),Lt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var i=(i=Te.current)?bm(i):null;if(!i)throw Error(a(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=It(i).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=It(i).hoistableStyles,s=o.get(e);if(s||(i=i.ownerDocument||i,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=i.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(i,e,o,s.state))),t&&r===null)throw Error(a(528,``));return s}if(t&&r!==null)throw Error(a(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=It(i).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(a(444,e))}}function Pm(e){return`href="`+rn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[jt]){r.loading=1;return}}else t=e.createElement(`link`),t[jt]=!0,t.onload=t.onerror=Rt.bind(null,t),np(t,`link`,n),Lt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+rn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+rn(n.href)+`"]`);if(r)return t.instance=r,Lt(r),r;var i=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Lt(r),np(r,`style`,i),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Pm(n.href);var o=e.querySelector(Fm(i));if(o)return t.state.loading|=4,t.instance=o,Lt(o),o;r=Im(n),(i=vm.get(i))&&Hm(r,i),o=(e.ownerDocument||e).createElement(`link`),Lt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(i=e.querySelector(zm(o)))?(t.instance=i,Lt(i),i):(r=n,(i=vm.get(o))&&(r=T({},n),Um(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),Lt(i),np(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(a(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Lt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),Lt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=rs()}))(),1),H=i(),as=(0,z.createContext)(void 0);function os(e,t){try{let t=localStorage.getItem(e);if(t===`light`||t===`dark`||t===`system`)return t}catch{}return t}function ss(e){let t=(0,H.c)(14),{children:n,defaultTheme:r,storageKey:i}=e,a=r===void 0?`dark`:r,o=i===void 0?`ui-theme`:i,s;t[0]!==a||t[1]!==o?(s=()=>os(o,a),t[0]=a,t[1]=o,t[2]=s):s=t[2];let[c,l]=(0,z.useState)(s),u,d;t[3]===c?(u=t[4],d=t[5]):(u=()=>{let e=window.document.documentElement;if(e.classList.remove(`light`,`dark`),c===`system`){let t=window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`;e.classList.add(t);return}e.classList.add(c)},d=[c],t[3]=c,t[4]=u,t[5]=d),(0,z.useEffect)(u,d);let f;t[6]===o?f=t[7]:(f=e=>{try{localStorage.setItem(o,e)}catch{}l(e)},t[6]=o,t[7]=f);let p;t[8]!==f||t[9]!==c?(p={theme:c,setTheme:f},t[8]=f,t[9]=c,t[10]=p):p=t[10];let m=p,h;return t[11]!==n||t[12]!==m?(h=(0,B.jsx)(as.Provider,{value:m,children:n}),t[11]=n,t[12]=m,t[13]=h):h=t[13],h}function cs(){let e=(0,z.useContext)(as);if(e===void 0)throw Error(`useTheme must be used within a ThemeProvider`);return e}var ls={name:`activity`,size:24,node:[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]};ls.node;var us=F(ls),ds={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};ds.node;var fs=F(ds),ps={name:`boxes`,size:24,node:[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]};ps.node;var ms=F(ps),hs={name:`brain`,size:24,node:[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]};hs.node;var gs=F(hs),_s={name:`circle-alert`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]],aliases:[`alert-circle`]};_s.node;var vs=F(_s),ys={name:`container`,size:24,node:[[`path`,{d:`M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z`,key:`1t2lqe`}],[`path`,{d:`M10 21.9V14L2.1 9.1`,key:`o7czzq`}],[`path`,{d:`m10 14 11.9-6.9`,key:`zm5e20`}],[`path`,{d:`M14 19.8v-8.1`,key:`159ecu`}],[`path`,{d:`M18 17.5V9.4`,key:`11uown`}]]};ys.node;var bs=F(ys),xs={name:`crosshair`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]};xs.node;var Ss=F(xs),Cs={name:`database`,size:24,node:[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]};Cs.node;var ws=F(Cs),Ts={name:`file-stack`,size:24,node:[[`path`,{d:`M11 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1`,key:`likhh7`}],[`path`,{d:`M16 16a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1`,key:`17ky3x`}],[`path`,{d:`M21 6a2 2 0 0 0-.586-1.414l-2-2A2 2 0 0 0 17 2h-3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1z`,key:`1hyeo0`}]]};Ts.node;var Es=F(Ts),Ds={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};Ds.node;var Os=F(Ds),ks={name:`id-card`,size:24,node:[[`path`,{d:`M13 19a4 4 0 00-8 0`,key:`cugzd5`}],[`path`,{d:`M16 10h2`,key:`8sgtl7`}],[`path`,{d:`M16 14h2`,key:`epxaof`}],[`circle`,{cx:`9`,cy:`12`,r:`3`,key:`u3jwor`}],[`rect`,{x:`2`,y:`5`,width:`20`,height:`14`,rx:`2`,key:`qneu4z`}]]};ks.node;var As=F(ks),js={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};js.node;var Ms=F(js),Ns={name:`layers`,size:24,node:[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]],aliases:[`layers-3`]};Ns.node;var Ps=F(Ns),Fs={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};Fs.node;var Is=F(Fs),Ls={name:`layout-list`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}],[`path`,{d:`M14 4h7`,key:`3xa0d5`}],[`path`,{d:`M14 9h7`,key:`1icrd9`}],[`path`,{d:`M14 15h7`,key:`1mj8o2`}],[`path`,{d:`M14 20h7`,key:`11slyb`}]]};Ls.node;var Rs=F(Ls),zs={name:`log-out`,size:24,node:[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]};zs.node;var Bs=F(zs),Vs={name:`map-pin`,size:24,node:[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]};Vs.node;var Hs=F(Vs),Us={name:`message-square`,size:24,node:[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]};Us.node;var Ws=F(Us),Gs={name:`moon`,size:24,node:[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]};Gs.node;var Ks=F(Gs),qs={name:`package`,size:24,node:[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]};qs.node;var Js=F(qs),Ys={name:`panel-left`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]],aliases:[`sidebar`]};Ys.node;var Xs=F(Ys),Zs={name:`route`,size:24,node:[[`circle`,{cx:`6`,cy:`19`,r:`3`,key:`1kj8tv`}],[`path`,{d:`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`,key:`1d8sl`}],[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}]]};Zs.node;var Qs=F(Zs),$s={name:`shield-check`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]};$s.node;var ec=F($s),tc={name:`sun`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]};tc.node;var nc=F(tc),rc={name:`user-cog`,size:24,node:[[`path`,{d:`M10 15H6a4 4 0 0 0-4 4v2`,key:`1nfge6`}],[`path`,{d:`m14.305 16.53.923-.382`,key:`1itpsq`}],[`path`,{d:`m15.228 13.852-.923-.383`,key:`eplpkm`}],[`path`,{d:`m16.852 12.228-.383-.923`,key:`13v3q0`}],[`path`,{d:`m16.852 17.772-.383.924`,key:`1i8mnm`}],[`path`,{d:`m19.148 12.228.383-.923`,key:`1q8j1v`}],[`path`,{d:`m19.53 18.696-.382-.924`,key:`vk1qj3`}],[`path`,{d:`m20.772 13.852.924-.383`,key:`n880s0`}],[`path`,{d:`m20.772 16.148.924.383`,key:`1g6xey`}],[`circle`,{cx:`18`,cy:`15`,r:`3`,key:`gjjjvw`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};rc.node;var ic=F(rc),ac={name:`users-round`,size:24,node:[[`path`,{d:`M18 21a8 8 0 0 0-16 0`,key:`3ypg7q`}],[`circle`,{cx:`10`,cy:`8`,r:`5`,key:`o932ke`}],[`path`,{d:`M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3`,key:`10s06x`}]],aliases:[`users-2`]};ac.node;var oc=F(ac),sc={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};sc.node;var cc=F(sc);function lc(e,t){return t!=null&&!Ut(t)?0:typeof e==`function`?e():e}function uc(e,t,n){let r=lc(e,n);return typeof r==`number`?r:r?.[t]}function dc(e){return typeof e==`function`?e():e}function fc(e,t){return t||e===`click`||e===`mousedown`}function pc(e){return e?.includes(`mouse`)&&e!==`mousedown`}var mc=z.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new kt,currentIdRef:{current:null},currentContextRef:{current:null}});function hc(e,t){e.current=t.current}function gc(e){let{children:t,delay:n,timeoutMs:r=0}=e,i=z.useRef(n),a=z.useRef(n),o=z.useRef(null),s=z.useRef(null),c=Mt();return ht(()=>{if(a.current=n,!o.current){i.current=n;return}i.current={open:uc(i.current,`open`),close:uc(n,`close`)}},[n,o,i,a]),(0,B.jsx)(mc.Provider,{value:z.useMemo(()=>({hasProvider:!0,delayRef:i,initialDelayRef:a,currentIdRef:o,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:t})}function _c(e,t={open:!1}){let{open:n}=t,r=`rootStore`in e?e.rootStore:e,i=r.useState(`floatingId`),{currentIdRef:a,delayRef:o,timeoutMs:s,initialDelayRef:c,currentContextRef:l,hasProvider:u,timeout:d}=z.useContext(mc),[f,p]=z.useState(!1),m=z.useRef(n);return ht(()=>{m.current=n},[n]),ht(()=>{function e(){l.current?.setIsInstantPhase(!1),a.current=null,l.current=null,o.current=c.current,d.clear()}if(a.current&&!n&&a.current===i){if(p(!1),s){let t=i;return d.start(s,()=>{r.select(`open`)||a.current&&a.current!==t||e()}),()=>{(m.current||a.current!==t)&&d.clear()}}e()}},[n,i,a,o,s,c,l,d,r]),ht(()=>{if(!n)return;let e=l.current,t=a.current;d.clear(),l.current={onOpenChange:r.setOpen,setIsInstantPhase:p},a.current=i,o.current={open:0,close:uc(c.current,`close`)},t!==null&&t!==i?(p(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1,Ot(Ct))):(p(!1),e?.setIsInstantPhase(!1))},[n,i,r,a,o,c,l,d]),ht(()=>()=>{if(a.current===i){if(l.current=null,!m.current)return;a.current=null,hc(o,c),d.clear()}},[l,a,o,i,c,d]),z.useMemo(()=>({activeIdRef:a,hasProvider:u,delayRef:o,isInstantPhase:f}),[a,u,o,f])}function vc(e,t){let n=null,r=null,i=!1;return{contextElement:e||void 0,getBoundingClientRect(){let a=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},o=t.axis===`x`||t.axis===`both`,s=t.axis===`y`||t.axis===`both`,c=[`mouseenter`,`mousemove`].includes(t.dataRef.current.openEvent?.type||``)&&t.pointerType!==`touch`,l=a.width,u=a.height,d=a.x,f=a.y;return n==null&&t.x&&o&&(n=a.x-t.x),r==null&&t.y&&s&&(r=a.y-t.y),d-=n||0,f-=r||0,l=0,u=0,!i||c?(l=t.axis===`y`?a.width:0,u=t.axis===`x`?a.height:0,d=o&&t.x!=null?t.x:d,f=s&&t.y!=null?t.y:f):i&&!c&&(u=t.axis===`x`?a.height:u,l=t.axis===`y`?a.width:l),i=!0,{width:l,height:u,x:d,y:f,top:f,right:d+l,bottom:f+u,left:d}}}}function yc(e){return e!=null&&e.clientX!=null}function bc(e,t={}){let{enabled:n=!0,axis:r=`both`}=t,i=`rootStore`in e?e.rootStore:e,a=i.useState(`open`),o=i.useState(`floatingElement`),s=i.useState(`domReferenceElement`),c=i.context.dataRef,l=z.useRef(!1),u=z.useRef(null),[d,f]=z.useState(),[p,m]=z.useState([]),h=gt(e=>{i.set(`positionReference`,e)}),g=gt((e,t,n)=>{l.current||(!c.current.openEvent||yc(c.current.openEvent))&&i.set(`positionReference`,vc(n??s,{x:e,y:t,axis:r,dataRef:c,pointerType:d}))}),_=gt(e=>{a?u.current||(g(e.clientX,e.clientY,e.currentTarget),m([])):g(e.clientX,e.clientY,e.currentTarget)}),v=Ut(d)?o:a;z.useEffect(()=>{if(!n){h(s);return}if(!v)return;function e(){u.current?.(),u.current=null}let t=ft(o);function r(t){let n=yt(t);xt(o,n)?e():g(t.clientX,t.clientY)}return!c.current.openEvent||yc(c.current.openEvent)?u.current=Ie(t,`mousemove`,r):h(s),e},[v,n,o,c,s,i,g,h,p]),z.useEffect(()=>()=>{i.set(`positionReference`,null)},[i]),z.useEffect(()=>{n&&!o&&(l.current=!1)},[n,o]),z.useEffect(()=>{!n&&a&&(l.current=!0)},[n,a]);let y=z.useMemo(()=>{function e(e){f(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:_,onMouseEnter:_}},[_]);return z.useMemo(()=>n?{reference:y,trigger:y}:{},[n,y])}var xc=Me();function Sc(e){let t=z.useCallback(t=>e===void 0?He:e.subscribeStore(t),[e]),n=z.useCallback(()=>e===void 0?void 0:e.store,[e]);return(0,xc.useSyncExternalStore)(t,n,()=>e?.serverStore)}var Cc=on&&Ht;function wc(e,t={}){let{enabled:n=!0,delay:r}=t,i=`rootStore`in e?e.rootStore:e,{events:a,dataRef:o}=i.context,s=z.useRef(!1),c=z.useRef(null),l=z.useRef(!0),u=Mt();z.useEffect(()=>{let e=i.select(`domReferenceElement`);if(!n)return;let t=ft(e);function r(){let e=i.select(`domReferenceElement`);!i.select(`open`)&&pt(e)&&e===jt(bt(e))&&(s.current=!0,c.current=e)}function a(){l.current=!0}function o(){l.current=!1}return It(Ie(t,`blur`,r),Cc&&Ie(t,`keydown`,a,!0),Cc&&Ie(t,`pointerdown`,o,!0))},[i,n]),z.useEffect(()=>{if(!n)return;function e(e){if(e.reason===`trigger-press`||e.reason===`escape-key`){let e=i.select(`domReferenceElement`);vt(e)&&(c.current=e,s.current=!0)}}return a.on(`openchange`,e),()=>{a.off(`openchange`,e)}},[a,n,i]);let d=z.useMemo(()=>{function e(){s.current=!1,c.current=null}return{onMouseLeave(){e()},onFocus(t){let n=t.currentTarget;if(s.current){if(c.current===n)return;e()}let a=yt(t.nativeEvent);if(vt(a)){if(Cc&&!t.relatedTarget){if(!l.current&&!Jt(a))return}else if(!Wt(a))return}let o=Qt(t.relatedTarget,i.context.triggerElements),{nativeEvent:d,currentTarget:f}=t,p=typeof r==`function`?r():r;if(i.select(`open`)&&o||p===0||p===void 0){i.setOpen(!0,Ot(Et,d,f));return}u.start(p,()=>{s.current||i.setOpen(!0,Ot(Et,d,f))})},onBlur(t){e();let n=t.relatedTarget,r=t.nativeEvent,a=vt(n)&&n.hasAttribute(ln(`focus-guard`))&&n.getAttribute(`data-type`)===`outside`;u.start(0,()=>{let e=i.select(`domReferenceElement`),t=jt(bt(e));(n||t!==e)&&(xt(o.current.floatingContext?.refs.floating.current,t)||xt(e,t)||a||Qt(n??t,i.context.triggerElements)||i.setOpen(!1,Ot(Et,r)))})}}},[o,r,i,u]);return z.useMemo(()=>n?{reference:d,trigger:d}:{},[n,d])}var Tc=class e{constructor(){this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new kt,this.restTimeout=new kt,this.handleCloseOptions=void 0}static create(){return new e}dispose=()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()};disposeEffect=()=>this.dispose},Ec=new WeakMap;function Dc(e){if(!e.performedPointerEventsMutation)return;let t=e.pointerEventsScopeElement;t&&Ec.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty(`pointer-events`),e.pointerEventsReferenceElement?.style.removeProperty(`pointer-events`),e.pointerEventsFloatingElement?.style.removeProperty(`pointer-events`),Ec.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function Oc(e,t){let{scopeElement:n,referenceElement:r,floatingElement:i}=t,a=Ec.get(n);a&&a!==e&&Dc(a),Dc(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=n,e.pointerEventsReferenceElement=r,e.pointerEventsFloatingElement=i,Ec.set(n,e),n.style.pointerEvents=`none`,r.style.pointerEvents=`auto`,i.style.pointerEvents=`auto`}function kc(e){let t=e.context.dataRef.current,n=Be(()=>t.hoverInteractionState??Tc.create()).current;return t.hoverInteractionState||=n,St(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function Ac(e,t={}){let{enabled:n=!0,closeDelay:r=0,nodeId:i}=t,a=`rootStore`in e?e.rootStore:e,o=a.useState(`open`),s=a.useState(`floatingElement`),c=a.useState(`domReferenceElement`),{dataRef:l}=a.context,u=Rt(),d=Yt(),f=kc(a),p=Mt(),m=gt(()=>fc(l.current.openEvent?.type,f.interactedInside)),h=gt(()=>pc(l.current.openEvent?.type)),g=gt(()=>{Dc(f)});ht(()=>{o||(f.pointerType=void 0,f.restTimeoutPending=!1,f.interactedInside=!1,g())},[o,f,g]),z.useEffect(()=>g,[g]),ht(()=>{if(n&&o&&f.handleCloseOptions?.blockPointerEvents&&h()&&vt(c)&&s){let e=c,t=s,n=bt(s),r=u?.nodesRef.current.find(e=>e.id===d)?.context?.elements.floating;r&&(r.style.pointerEvents=``);let i=f.pointerEventsScopeElement===t?null:f.pointerEventsScopeElement,a=r===t?null:r,o=f.handleCloseOptions?.getScope?.()??i??a??e.closest(`[data-rootownerid]`)??n.body;return Oc(f,{scopeElement:o,referenceElement:e,floatingElement:t}),()=>{g()}}},[n,o,c,s,f,h,u,d,g]),z.useEffect(()=>{if(!n)return;function e(){return!!(u&&d&&Nt(u.nodesRef.current,d).length>0)}function t(e){let t=uc(r,`close`,f.pointerType),n=()=>{a.setOpen(!1,Ot(I,e)),u?.events.emit(`floating.closed`,e)};t?f.openChangeTimeout.start(t,n):(f.openChangeTimeout.clear(),n())}function o(e){let t=yt(e);if(!nn(t)){f.interactedInside=!1;return}f.interactedInside=t?.closest(`[aria-haspopup]`)!=null}function c(){f.openChangeTimeout.clear(),p.clear(),u?.events.off(`floating.closed`,v),g()}function _(n){if(e()&&u){u.events.on(`floating.closed`,v);return}if(Qt(n.relatedTarget,a.context.triggerElements))return;let r=l.current.floatingContext?.nodeId??i,o=n.relatedTarget;if(!(u&&r&&vt(o)&&Nt(u.nodesRef.current,r,!1).some(e=>xt(e.context?.elements.floating,o)))){if(f.handler){f.handler(n);return}g(),h()&&!m()&&t(n)}}function v(t){u&&d&&!e()&&p.start(0,()=>{u.events.off(`floating.closed`,v),a.setOpen(!1,Ot(I,t)),u.events.emit(`floating.closed`,t)})}let y=s;return It(y&&Ie(y,`mouseenter`,c),y&&Ie(y,`mouseleave`,_),y&&Ie(y,`pointerdown`,o,!0),()=>{u?.events.off(`floating.closed`,v)})},[n,s,a,l,r,i,h,m,g,f,u,d,p])}var jc=n(Pe(),1),Mc={current:null};function Nc(e,t={}){let{enabled:n=!0,delay:r=0,handleClose:i=null,mouseOnly:a=!1,restMs:o=0,move:s=!0,triggerElementRef:c=Mc,externalTree:l,isActiveTrigger:u=!0,getHandleCloseContext:d,isClosing:f,shouldOpen:p,guardStaleOpen:m=!1}=t,h=`rootStore`in e?e.rootStore:e,{dataRef:g,events:_}=h.context,v=Rt(l),y=kc(h),b=z.useRef(!1),x=Le(i),S=Le(r),C=Le(o),w=Le(n),T=Le(p),E=Le(f),D=gt(()=>fc(g.current.openEvent?.type,y.interactedInside)),O=gt(()=>T.current?.()!==!1),k=gt((e,t,n)=>{let r=h.context.triggerElements;if(r.hasElement(t))return!e||!xt(e,t);if(!vt(n))return!1;let i=n;return r.hasMatchingElement(e=>xt(e,i))&&(!e||!xt(e,i))}),ee=gt(()=>{y.handler&&=(bt(h.select(`domReferenceElement`)).removeEventListener(`mousemove`,y.handler),void 0)}),te=gt(()=>{Dc(y)});return u&&(y.handleCloseOptions=i?.__options),z.useEffect(()=>ee,[ee]),z.useEffect(()=>{if(!n)return;function e(e){e.open?b.current=!1:(b.current=e.reason===I,ee(),y.openChangeTimeout.clear(),y.restTimeout.clear(),y.blockMouseMove=!0,y.restTimeoutPending=!1)}return _.on(`openchange`,e),()=>{_.off(`openchange`,e)}},[n,_,y,ee]),z.useEffect(()=>{if(!n)return;function e(e,t=!0){let n=uc(S.current,`close`,y.pointerType);n?y.openChangeTimeout.start(n,()=>{h.setOpen(!1,Ot(I,e)),v?.events.emit(`floating.closed`,e)}):t&&(y.openChangeTimeout.clear(),h.setOpen(!1,Ot(I,e)),v?.events.emit(`floating.closed`,e))}let t=c.current??(u?h.select(`domReferenceElement`):null);if(!vt(t))return;function r(e){if(y.openChangeTimeout.clear(),y.blockMouseMove=!1,a&&!Ut(y.pointerType))return;let t=dc(C.current),n=uc(S.current,`open`,y.pointerType),r=yt(e),i=e.currentTarget??null,o=h.select(`domReferenceElement`),s=i;if(vt(r)&&!h.context.triggerElements.hasElement(r)){for(let e of h.context.triggerElements.elements())if(xt(e,r)){s=e;break}}vt(i)&&vt(o)&&!h.context.triggerElements.hasElement(i)&&xt(i,o)&&(s=o);let c=s!=null&&k(o,s,r),l=h.select(`open`),u=E.current?.()??h.select(`transitionStatus`)===`ending`,d=!l&&u&&b.current,f=!c&&vt(s)&&vt(o)&&xt(o,s)&&d,p=t>0&&!n,m=c&&(l||d)||f,g=!l||c;if(m){O()&&h.setOpen(!0,Ot(I,e,s));return}p||(n?y.openChangeTimeout.start(n,()=>{g&&O()&&h.setOpen(!0,Ot(I,e,s))}):g&&O()&&h.setOpen(!0,Ot(I,e,s)))}function i(t){if(D()){te();return}ee();let n=h.select(`domReferenceElement`),r=bt(n);y.restTimeout.clear(),y.restTimeoutPending=!1;let i=g.current.floatingContext??d?.();if(!Qt(t.relatedTarget,h.context.triggerElements)){if(x.current&&i){h.select(`open`)||y.openChangeTimeout.clear();let n=c.current;y.handler=x.current({...i,tree:v,x:t.clientX,y:t.clientY,onClose(){te(),ee(),w.current&&!D()&&n===h.select(`domReferenceElement`)&&e(t,!0)}}),r.addEventListener(`mousemove`,y.handler),y.handler(t);return}(y.pointerType!==`touch`||!xt(h.select(`floatingElement`),t.relatedTarget))&&e(t)}}function o(e){xt(t,e.relatedTarget)||(y.openChangeTimeout.clear(),y.restTimeout.clear(),y.restTimeoutPending=!1)}let l=m?Ie(t,`mouseout`,o):void 0;return s?It(Ie(t,`mousemove`,r,{once:!0}),Ie(t,`mouseenter`,r),Ie(t,`mouseleave`,i),l):It(Ie(t,`mouseenter`,r),Ie(t,`mouseleave`,i),l)},[ee,te,g,S,h,n,x,y,u,k,D,a,s,C,c,v,w,d,E,O,m]),z.useMemo(()=>{if(!n)return;function e(e){y.pointerType=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:t}=e,n=e.currentTarget,r=h.select(`domReferenceElement`),i=h.select(`open`),o=k(r,n,e.target);if(a&&!Ut(y.pointerType))return;if(i&&o&&y.handleCloseOptions?.blockPointerEvents){let e=h.select(`floatingElement`);if(e){let t=y.handleCloseOptions?.getScope?.()??n.ownerDocument.body;Oc(y,{scopeElement:t,referenceElement:n,floatingElement:e})}}let s=dc(C.current);if(i&&!o||s===0||!o&&y.restTimeoutPending&&e.movementX**2+e.movementY**2<2)return;y.restTimeout.clear();function c(){if(y.restTimeoutPending=!1,D())return;let e=h.select(`open`);!y.blockMouseMove&&(!e||o)&&O()&&h.setOpen(!0,Ot(I,t,n))}y.pointerType===`touch`?jc.flushSync(()=>{c()}):o&&i?c():(y.restTimeoutPending=!0,y.restTimeout.start(s,c))}}},[n,y,D,k,a,h,C,O])}var Pc=.1,Fc=Pc*Pc,Ic=.5;function Lc(e,t,n,r,i,a){return r>=t!=a>=t&&e<=(i-n)*(t-r)/(a-r)+n}function Rc(e,t,n,r,i,a,o,s,c,l){let u=!1;return Lc(e,t,n,r,i,a)&&(u=!u),Lc(e,t,i,a,o,s)&&(u=!u),Lc(e,t,o,s,c,l)&&(u=!u),Lc(e,t,c,l,n,r)&&(u=!u),u}function zc(e,t,n){return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height}function Bc(e,t,n,r,i,a){return e>=Math.min(n,i)&&e<=Math.max(n,i)&&t>=Math.min(r,a)&&t<=Math.max(r,a)}function Vc(e={}){let{blockPointerEvents:t=!1}=e,n=new kt,r=({x:e,y:t,placement:r,elements:i,onClose:a,nodeId:o,tree:s})=>{let c=r?.split(`-`)[0],l=!1,u=null,d=null,f=typeof performance<`u`?performance.now():0;function p(e,t){let n=performance.now(),r=n-f;if(u===null||d===null||r===0)return u=e,d=t,f=n,!1;let i=e-u,a=t-d,o=i*i+a*a,s=r*r*Fc;return u=e,d=t,f=n,o0)}function b(){y()||m()}if(y())return;let x=a.getBoundingClientRect(),S=u.getBoundingClientRect(),C=e>S.right-S.width/2,w=t>S.bottom-S.height/2,T=S.width>x.width,E=S.height>x.height,D=(T?x:S).left,O=(T?x:S).right,k=(E?x:S).top,ee=(E?x:S).bottom;if(c===`top`&&t>=x.bottom-1||c===`bottom`&&t<=x.top+1||c===`left`&&e>=x.right-1||c===`right`&&e<=x.left+1){b();return}let te=!1;switch(c){case`top`:te=Bc(d,f,D,x.top+1,O,S.bottom-1);break;case`bottom`:te=Bc(d,f,D,S.top+1,O,x.bottom-1);break;case`left`:te=Bc(d,f,S.right-1,ee,x.left+1,k);break;case`right`:te=Bc(d,f,x.right-1,ee,S.left+1,k)}if(te)return;if(l&&!zc(d,f,x)){b();return}if(!g&&p(d,f)){b();return}let ne=!1;switch(c){case`top`:{let n=T?Ic/2:Ic*4,r=T||C?e+n:e-n,i=T?e-n:C?e+n:e-n,a=t+Ic+1,o=C||T?S.bottom-Ic:S.top,s=C?T?S.bottom-Ic:S.top:S.bottom-Ic;ne=Rc(d,f,r,a,i,a,S.left,o,S.right,s);break}case`bottom`:{let n=T?Ic/2:Ic*4,r=T||C?e+n:e-n,i=T?e-n:C?e+n:e-n,a=t-Ic,o=C||T?S.top+Ic:S.bottom,s=C?T?S.top+Ic:S.bottom:S.top+Ic;ne=Rc(d,f,r,a,i,a,S.left,o,S.right,s);break}case`left`:{let n=E?Ic/2:Ic*4,r=E||w?t+n:t-n,i=E?t-n:w?t+n:t-n,a=e+Ic+1,o=w||E?S.right-Ic:S.left,s=w?E?S.right-Ic:S.left:S.right-Ic;ne=Rc(d,f,o,S.top,s,S.bottom,a,r,a,i);break}case`right`:{let n=E?Ic/2:Ic*4,r=E||w?t+n:t-n,i=E?t-n:w?t+n:t-n,a=e-Ic,o=w||E?S.left+Ic:S.right,s=w?E?S.left+Ic:S.right:S.left+Ic;ne=Rc(d,f,a,r,a,i,o,S.top,s,S.bottom);break}}ne?l||n.start(40,b):b()}};return r.__options={...e,blockPointerEvents:t},r}var Hc=Pt(function(e){return vn(`dialog`,e)});function Uc(e){let t=(0,H.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,B.jsx)(Hc,{"data-slot":`sheet`,...n}),t[2]=n,t[3]=r),r}function Wc(e){let t=(0,H.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,B.jsx)(bn,{"data-slot":`sheet-portal`,...n}),t[2]=n,t[3]=r),r}function Gc(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:animate-out data-open:animate-in fixed inset-0 z-50 bg-black/80 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(_n,{className:i,"data-slot":`sheet-overlay`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Kc(e){let t=(0,H.c)(17),n,r,i,a,o;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5]):({className:r,children:n,side:a,showCloseButton:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o);let s=a===void 0?`right`:a,c=o===void 0||o,l;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,B.jsx)(Gc,{}),t[6]=l):l=t[6];let u;t[7]===r?u=t[8]:(u=Xe(`data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-closed:animate-out data-open:animate-in fixed z-50 flex flex-col bg-background bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm`,r),t[7]=r,t[8]=u);let d;t[9]===c?d=t[10]:(d=c&&(0,B.jsxs)(hn,{"data-slot":`sheet-close`,render:(0,B.jsx)(_t,{className:`absolute top-4 right-4`,size:`icon-sm`,variant:`ghost`}),children:[(0,B.jsx)(ut,{}),(0,B.jsx)(`span`,{className:`sr-only`,children:`Close`})]}),t[9]=c,t[10]=d);let f;return t[11]!==n||t[12]!==i||t[13]!==s||t[14]!==u||t[15]!==d?(f=(0,B.jsxs)(Wc,{children:[l,(0,B.jsxs)(gn,{className:u,"data-side":s,"data-slot":`sheet-content`,...i,children:[n,d]})]}),t[11]=n,t[12]=i,t[13]=s,t[14]=u,t[15]=d,t[16]=f):f=t[16],f}function qc(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`flex flex-col gap-1.5 p-6`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`div`,{className:i,"data-slot":`sheet-header`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Jc(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`text-sm font-medium text-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(Sn,{className:i,"data-slot":`sheet-title`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Yc(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`text-xs/relaxed text-muted-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(xn,{className:i,"data-slot":`sheet-description`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var Xc=z.createContext(void 0);function Zc(e){let t=z.useContext(Xc);if(t===void 0&&!e)throw Error(We(72));return t}var Qc={...yn,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},$c=class extends Ft{constructor(e,t,n){let r=new en;super(el(e,r,t,n),tl(r),Qc)}setOpen=(e,t)=>{L(this,e,t,{extraState:{openChangeReason:t.reason}})};cancelPendingOpen(e){this.state.floatingRootContext.dispatchOpenChange(!1,Ot(wt,e))}};function el(e,t,n,r=!1){return{...mn(t,n,r),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:`none`,disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function tl(e){return{popupRef:z.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}var nl=Pt(function(e){let{disabled:t=!1,defaultOpen:n=!1,open:r,disableHoverablePopup:i=!1,trackCursorAxis:a=`none`,actionsRef:o,onOpenChange:s,onOpenChangeComplete:c,handle:l,triggerId:u,defaultTriggerId:d=null,children:f}=e,p=Vt((e,t)=>new $c({open:n,openProp:r,activeTriggerId:d,triggerIdProp:u},e,t));p.useControlledProp(`openProp`,r),p.useControlledProp(`triggerIdProp`,u),p.useContextCallback(`onOpenChange`,s),p.useContextCallback(`onOpenChangeComplete`,c);let m=p.useState(`open`),h=!t&&m,g=p.useState(`activeTriggerId`),_=p.useState(`mounted`),v=p.useState(`payload`);p.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:i,disabled:t}),cn(p,{closeOnActiveTriggerUnmount:!0});let{forceUnmount:y,transitionStatus:b}=Gt(h,p),x=p.useState(`isInstantPhase`),S=p.useState(`instantType`),C=p.useState(`lastOpenChangeReason`),w=z.useRef(null);ht(()=>{m&&t&&p.setOpen(!1,Ot(Tt))},[m,t,p]),ht(()=>{b===`ending`&&C===`none`||b!==`ending`&&x?(S!==`delay`&&(w.current=S),p.set(`instantType`,`delay`)):w.current!==null&&(p.set(`instantType`,w.current),w.current=null)},[b,x,C,S,p]),ht(()=>{h&&(g??p.set(`payload`,void 0))},[p,g,h]),z.useImperativeHandle(o,()=>({unmount:y,close:()=>p.setOpen(!1,Ot(Dt))}),[y,p]);let T=h||_||!t&&a!==`none`;return(0,B.jsxs)(Xc.Provider,{value:p,children:[l&&(0,B.jsx)(qt,{handle:l,store:p}),T&&(0,B.jsx)(rl,{store:p,disabled:t,trackCursorAxis:a}),typeof f==`function`?f({payload:v}):f]})});function rl({store:e,disabled:t,trackCursorAxis:n}){let r=e.useState(`floatingRootContext`),i=Xt(r,{enabled:!t,referencePress:()=>e.select(`closeOnClick`)}),a=bc(r,{enabled:!t&&n!==`none`,axis:n===`none`?void 0:n}),o=z.useMemo(()=>ze(a.reference,i.reference),[a.reference,i.reference]);return sn(e,{activeTriggerProps:o,inactiveTriggerProps:o,popupProps:i.floating??Re}),null}var il=z.createContext(void 0);function al(){return z.useContext(il)}var ol=`data-base-ui-tooltip-trigger`;function sl(e){if(`composedPath`in e){let t=e.composedPath();for(let e=0;em.select(`transitionStatus`)===`ending`,shouldOpen(){return!ie.current}}),de=wc(v,{enabled:!ee}).reference,fe=e=>{let t=ie.current,n=sl(e),r=le(n),i=y.current,a=i&&n&&xt(i,n);if(r&&m.select(`open`)&&m.select(`lastOpenChangeReason`)===`trigger-hover`){m.setOpen(!1,Ot(I,e));return}if(t&&!r&&a&&!te.current&&!m.select(`open`)&&i&&Ut(oe.current)){let t=()=>{!ie.current&&!te.current&&!m.select(`open`)&&m.setOpen(!0,Ot(I,e,i))},n=se();n===0?(ae.clear(),t()):ae.start(n,t)}},pe=m.useState(`triggerProps`,S);return Ve(`button`,e,{state:{open:_},ref:[t,x,y],props:[ue,de,S||ne!==`none`?pe:void 0,{onMouseOver(e){fe(e.nativeEvent)},onFocus(e){ce(sl(e.nativeEvent))&&e.preventBaseUIHandler()},onMouseLeave(){ie.current=!1,ae.clear(),oe.current=void 0},onPointerEnter(e){oe.current=e.pointerType},onPointerDown(e){oe.current=e.pointerType,m.set(`closeOnClick`,l),l&&!m.select(`open`)&&m.cancelPendingOpen(e.nativeEvent)},onClick(e){l&&!m.select(`open`)&&m.cancelPendingOpen(e.nativeEvent)},id:h,[$t]:ee?``:void 0,[ol]:ee?void 0:``},f],stateAttributesMapping:rn})}),ul=z.createContext(void 0);function dl(){let e=z.useContext(ul);if(e===void 0)throw Error(We(70));return e}var fl=z.forwardRef(function(e,t){let{children:n,container:r,className:i,render:a,style:o,...s}=e,{node:c,subtree:l}=Bt({container:r,ref:t,componentProps:e,elementProps:s});return!l&&!c?null:(0,B.jsxs)(z.Fragment,{children:[l,c&&jc.createPortal(n,c)]})}),pl=z.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Zc().useState(`mounted`)||n?(0,B.jsx)(ul.Provider,{value:n,children:(0,B.jsx)(fl,{ref:t,...r})}):null}),ml=z.createContext(void 0);function hl(){let e=z.useContext(ml);if(e===void 0)throw Error(We(71));return e}var gl=z.forwardRef(function(e,t){let{render:n,className:r,anchor:i,positionMethod:a=`absolute`,side:o=`top`,align:s=`center`,sideOffset:c=0,alignOffset:l=0,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d=5,arrowPadding:f=5,sticky:p=!1,disableAnchorTracking:m=!1,collisionAvoidance:h=Lt,style:g,..._}=e,v=Zc(),y=dl(),b=v.useState(`open`),x=v.useState(`mounted`),S=v.useState(`trackCursorAxis`),C=v.useState(`disableHoverablePopup`),w=v.useState(`floatingRootContext`),T=v.useState(`instantType`),E=v.useState(`transitionStatus`),D=v.useState(`adaptiveOrigin`),O=dn({anchor:i,positionMethod:a,floatingRootContext:w,mounted:x,side:o,sideOffset:c,align:s,alignOffset:l,collisionBoundary:u,collisionPadding:d,sticky:p,arrowPadding:f,disableAnchorTracking:m,keepMounted:y,collisionAvoidance:h,adaptiveOrigin:D}),k=z.useMemo(()=>({open:b,side:O.side,align:O.align,anchorHidden:O.anchorHidden,instant:S===`none`?T:`tracking-cursor`}),[b,O.side,O.align,O.anchorHidden,S,T]),ee=fn(e,k,{styles:O.positionerStyles,transitionStatus:E,props:_,refs:[t,v.useStateSetter(`positionerElement`)],hidden:!x,inert:!b||S===`both`||C});return(0,B.jsx)(ml.Provider,{value:O,children:ee})}),_l=z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=Zc(),{side:s,align:c}=hl(),l=o.useState(`open`),u=o.useState(`instantType`),d=o.useState(`transitionStatus`),f=o.useState(`popupProps`),p=o.useState(`floatingRootContext`),m=o.useState(`disabled`),h=o.useState(`closeDelay`);Fe({open:l,ref:o.context.popupRef,onComplete(){l&&o.context.onOpenChangeComplete?.(!0)}}),Ac(p,{enabled:!m,closeDelay:h});let g=o.useStateSetter(`popupElement`);return Ve(`div`,e,{state:{open:l,side:s,align:c,instant:u,transitionStatus:d},ref:[t,o.context.popupRef,g],props:[Zt,f,un(d),a],stateAttributesMapping:Kt})}),vl=z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=Zc(),{arrowRef:s,side:c,align:l,arrowUncentered:u,arrowStyles:d}=hl(),f={open:o.useState(`open`),side:c,align:l,uncentered:u,instant:o.useState(`instantType`)};return Ve(`div`,e,{state:f,ref:[t,s],props:[{style:d,"aria-hidden":!0},a],stateAttributesMapping:tn})}),yl=function(e){let{delay:t,closeDelay:n,timeout:r=400}=e,i=z.useMemo(()=>({open:t,close:n}),[t,n]);return(0,B.jsx)(il.Provider,{value:t,children:(0,B.jsx)(gc,{delay:i,timeoutMs:r,children:e.children})})};function bl(e){let t=(0,H.c)(6),n,r;t[0]===e?(n=t[1],r=t[2]):({delay:r,...n}=e,t[0]=e,t[1]=n,t[2]=r);let i=r===void 0?0:r,a;return t[3]!==i||t[4]!==n?(a=(0,B.jsx)(yl,{"data-slot":`tooltip-provider`,delay:i,...n}),t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function xl(e){let t=(0,H.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,B.jsx)(bl,{children:(0,B.jsx)(nl,{"data-slot":`tooltip`,...n})}),t[2]=n,t[3]=r),r}function Sl(e){let t=(0,H.c)(4),n;t[0]===e?n=t[1]:({...n}=e,t[0]=e,t[1]=n);let r;return t[2]===n?r=t[3]:(r=(0,B.jsx)(ll,{"data-slot":`tooltip-trigger`,...n}),t[2]=n,t[3]=r),r}function Cl(e){let t=(0,H.c)(21),n,r,i,a,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7]):({className:r,side:a,sideOffset:o,align:s,alignOffset:c,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c);let l=a===void 0?`top`:a,u=o===void 0?4:o,d=s===void 0?`center`:s,f=c===void 0?0:c,p;t[8]===r?p=t[9]:(p=Xe(`data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in z-50 w-fit max-w-xs origin-(--transform-origin) rounded-md bg-foreground px-3 py-1.5 text-xs text-background **:data-[slot=kbd]:rounded-md`,r),t[8]=r,t[9]=p);let m;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,B.jsx)(vl,{className:`z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5`}),t[10]=m):m=t[10];let h;t[11]!==n||t[12]!==i||t[13]!==p?(h=(0,B.jsxs)(_l,{className:p,"data-slot":`tooltip-content`,...i,children:[n,m]}),t[11]=n,t[12]=i,t[13]=p,t[14]=h):h=t[14];let g;return t[15]!==d||t[16]!==f||t[17]!==l||t[18]!==u||t[19]!==h?(g=(0,B.jsx)(pl,{children:(0,B.jsx)(gl,{align:d,alignOffset:f,className:`isolate z-50`,side:l,sideOffset:u,children:h})}),t[15]=d,t[16]=f,t[17]=l,t[18]=u,t[19]=h,t[20]=g):g=t[20],g}var wl=window.matchMedia(`(max-width: 767px)`);function Tl(e){return wl.addEventListener(`change`,e),()=>{wl.removeEventListener(`change`,e)}}function El(){return wl.matches}function Dl(){return(0,z.useSyncExternalStore)(Tl,El)}var Ol=`sidebar_state`,kl=604800,Al=`12rem`,jl=`16rem`,Ml=`3rem`,Nl=`b`,Pl=z.createContext(null);function Fl(){let e=z.useContext(Pl);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function Il(e){let t=(0,H.c)(36),n,r,i,a,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7]):({defaultOpen:c,open:i,onOpenChange:o,className:r,style:s,children:n,...a}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c);let l=c===void 0||c,u=Dl(),[d,f]=z.useState(!1),[p,m]=z.useState(l),h=i??p,g;t[8]!==h||t[9]!==o?(g=e=>{let t=typeof e==`function`?e(h):e;o?o(t):m(t),document.cookie=`${Ol}=${t}; path=/; max-age=${kl}`},t[8]=h,t[9]=o,t[10]=g):g=t[10];let _=g,v;t[11]!==u||t[12]!==_?(v=()=>{u?f(Rl):_(Ll)},t[11]=u,t[12]=_,t[13]=v):v=t[13];let y=v,b,x;t[14]===y?(b=t[15],x=t[16]):(b=()=>{let e=e=>{e.key===Nl&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`keydown`,e)}},x=[y],t[14]=y,t[15]=b,t[16]=x),z.useEffect(b,x);let S=h?`expanded`:`collapsed`,C;t[17]!==u||t[18]!==h||t[19]!==d||t[20]!==_||t[21]!==S||t[22]!==y?(C={state:S,open:h,setOpen:_,isMobile:u,openMobile:d,setOpenMobile:f,toggleSidebar:y},t[17]=u,t[18]=h,t[19]=d,t[20]=_,t[21]=S,t[22]=y,t[23]=C):C=t[23];let w=C,T;t[24]===s?T=t[25]:(T={"--sidebar-width":Al,"--sidebar-width-icon":Ml,...s},t[24]=s,t[25]=T);let E=T,D;t[26]===r?D=t[27]:(D=Xe(`group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar`,r),t[26]=r,t[27]=D);let O;t[28]!==n||t[29]!==a||t[30]!==D||t[31]!==E?(O=(0,B.jsx)(`div`,{className:D,"data-slot":`sidebar-wrapper`,style:E,...a,children:n}),t[28]=n,t[29]=a,t[30]=D,t[31]=E,t[32]=O):O=t[32];let k;return t[33]!==w||t[34]!==O?(k=(0,B.jsx)(Pl.Provider,{value:w,children:O}),t[33]=w,t[34]=O,t[35]=k):k=t[35],k}function Ll(e){return!e}function Rl(e){return!e}function zl(e){let t=(0,H.c)(46),n,r,i,a,o,s;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6]):({side:a,variant:o,collapsible:s,className:r,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s);let c=a===void 0?`left`:a,l=o===void 0?`sidebar`:o,u=s===void 0?`offExamples`:s,{isMobile:d,state:f,openMobile:p,setOpenMobile:m}=Fl();if(u===`none`){let e;t[7]===r?e=t[8]:(e=Xe(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,r),t[7]=r,t[8]=e);let a;return t[9]!==n||t[10]!==i||t[11]!==e?(a=(0,B.jsx)(`div`,{className:e,"data-slot":`sidebar`,...i,children:n}),t[9]=n,t[10]=i,t[11]=e,t[12]=a):a=t[12],a}if(d){let e;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(e={"--sidebar-width":jl},t[13]=e):e=t[13];let r=e,a;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,B.jsxs)(qc,{className:`sr-only`,children:[(0,B.jsx)(Jc,{children:`Sidebar`}),(0,B.jsx)(Yc,{children:`Displays the mobile sidebar.`})]}),t[14]=a):a=t[14];let o;t[15]===n?o=t[16]:(o=(0,B.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:n}),t[15]=n,t[16]=o);let s;t[17]!==c||t[18]!==o?(s=(0,B.jsxs)(Kc,{className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden`,"data-mobile":`true`,"data-sidebar":`sidebar`,"data-slot":`sidebar`,side:c,style:r,children:[a,o]}),t[17]=c,t[18]=o,t[19]=s):s=t[19];let l;return t[20]!==p||t[21]!==i||t[22]!==m||t[23]!==s?(l=(0,B.jsx)(Uc,{onOpenChange:m,open:p,...i,children:s}),t[20]=p,t[21]=i,t[22]=m,t[23]=s,t[24]=l):l=t[24],l}let h=f===`collapsed`?u:``,g=l===`floating`||l===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`,_;t[25]===g?_=t[26]:(_=Xe(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offExamples]:w-0`,`group-data-[side=right]:rotate-180`,g),t[25]=g,t[26]=_);let v;t[27]===_?v=t[28]:(v=(0,B.jsx)(`div`,{className:_,"data-slot":`sidebar-gap`}),t[27]=_,t[28]=v);let y=c===`left`?`left-0 group-data-[collapsible=offExamples]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offExamples]:right-[calc(var(--sidebar-width)*-1)]`,b=l===`floating`||l===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,x;t[29]!==r||t[30]!==y||t[31]!==b?(x=Xe(`fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex`,y,b,r),t[29]=r,t[30]=y,t[31]=b,t[32]=x):x=t[32];let S;t[33]===n?S=t[34]:(S=(0,B.jsx)(`div`,{className:`flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border`,"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,children:n}),t[33]=n,t[34]=S);let C;t[35]!==i||t[36]!==x||t[37]!==S?(C=(0,B.jsx)(`div`,{className:x,"data-slot":`sidebar-container`,...i,children:S}),t[35]=i,t[36]=x,t[37]=S,t[38]=C):C=t[38];let w;return t[39]!==c||t[40]!==f||t[41]!==C||t[42]!==h||t[43]!==v||t[44]!==l?(w=(0,B.jsxs)(`div`,{className:`group peer hidden text-sidebar-foreground md:block`,"data-collapsible":h,"data-side":c,"data-slot":`sidebar`,"data-state":f,"data-variant":l,children:[v,C]}),t[39]=c,t[40]=f,t[41]=C,t[42]=h,t[43]=v,t[44]=l,t[45]=w):w=t[45],w}function Bl(e){let t=(0,H.c)(15),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,onClick:r,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let{toggleSidebar:a}=Fl(),o;t[4]===n?o=t[5]:(o=Xe(n),t[4]=n,t[5]=o);let s;t[6]!==r||t[7]!==a?(s=e=>{r?.(e),a()},t[6]=r,t[7]=a,t[8]=s):s=t[8];let c,l;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,B.jsx)(Xs,{}),l=(0,B.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`}),t[9]=c,t[10]=l):(c=t[9],l=t[10]);let u;return t[11]!==i||t[12]!==o||t[13]!==s?(u=(0,B.jsxs)(_t,{className:o,"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,onClick:s,size:`icon-lg`,variant:`ghost`,...i,children:[c,l]}),t[11]=i,t[12]=o,t[13]=s,t[14]=u):u=t[14],u}function Vl(e){let t=(0,H.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let{toggleSidebar:i}=Fl(),a;t[3]===n?a=t[4]:(a=Xe(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex`,`in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`group-data-[collapsible=offExamples]:translate-x-0 group-data-[collapsible=offExamples]:after:left-full hover:group-data-[collapsible=offExamples]:bg-sidebar`,`[[data-side=left][data-collapsible=offExamples]_&]:-right-2`,`[[data-side=right][data-collapsible=offExamples]_&]:-left-2`,n),t[3]=n,t[4]=a);let o;return t[5]!==r||t[6]!==a||t[7]!==i?(o=(0,B.jsx)(`button`,{"aria-label":`Toggle Sidebar`,className:a,"data-sidebar":`rail`,"data-slot":`sidebar-rail`,onClick:i,tabIndex:-1,title:`Toggle Sidebar`,type:`button`,...r}),t[5]=r,t[6]=a,t[7]=i,t[8]=o):o=t[8],o}function Hl(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`flex flex-col gap-2 p-2`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`div`,{className:i,"data-sidebar":`header`,"data-slot":`sidebar-header`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Ul(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`flex flex-col gap-2 p-2`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`div`,{className:i,"data-sidebar":`footer`,"data-slot":`sidebar-footer`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Wl(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`mx-2 w-auto bg-sidebar-border`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(pn,{className:i,"data-sidebar":`separator`,"data-slot":`sidebar-separator`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Gl(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-x-hidden overflow-y-auto`,`group-data-[collapsible=icon]:[scrollbar-width:none] group-data-[collapsible=icon]:[&::-webkit-scrollbar]:hidden`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`div`,{className:i,"data-sidebar":`content`,"data-slot":`sidebar-content`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Kl(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`relative flex w-full min-w-0 flex-col px-2 py-1`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`div`,{className:i,"data-sidebar":`group`,"data-slot":`sidebar-group`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ql(e){let t=(0,H.c)(10),n,r,i,a;if(t[0]!==e){let{className:o,render:s,...c}=e;n=s,a=Ge,r=`div`,i=ze({className:Xe(`flex h-8 shrink-0 items-center rounded-md px-2 text-xs text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,o)},c),t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a}else n=t[1],r=t[2],i=t[3],a=t[4];let o;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(o={slot:`sidebar-group-label`,sidebar:`group-label`},t[5]=o):o=t[5];let s;return t[6]!==n||t[7]!==r||t[8]!==i?(s={defaultTagName:r,props:i,render:n,state:o},t[6]=n,t[7]=r,t[8]=i,t[9]=s):s=t[9],a(s)}function Jl(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`flex w-full min-w-0 flex-col gap-px`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`ul`,{className:i,"data-sidebar":`menu`,"data-slot":`sidebar-menu`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function U(e){let t=(0,H.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=Xe(`group/menu-item relative`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,B.jsx)(`li`,{className:i,"data-sidebar":`menu-item`,"data-slot":`sidebar-menu-item`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var Yl=Ue(`peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-[calc(var(--radius-sm)+2px)] p-2 text-left text-xs ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate`,{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-xs`,sm:`h-7 text-xs`,lg:`h-12 text-xs group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function W(e){let t=(0,H.c)(18),{render:n,isActive:r,variant:i,size:a,tooltip:o,className:s,...c}=e,l=r!==void 0&&r,u=i===void 0?`default`:i,d=a===void 0?`default`:a,{isMobile:f,state:p}=Fl(),m=ze({className:Xe(Yl({variant:u,size:d}),s)},c),h;t[0]!==n||t[1]!==o?(h=o?(0,B.jsx)(Sl,{}):n,t[0]=n,t[1]=o,t[2]=h):h=t[2];let g;t[3]!==l||t[4]!==d?(g={slot:`sidebar-menu-button`,sidebar:`menu-button`,size:d,active:l},t[3]=l,t[4]=d,t[5]=g):g=t[5];let _;t[6]!==m||t[7]!==h||t[8]!==g?(_={defaultTagName:`button`,props:m,render:h,state:g},t[6]=m,t[7]=h,t[8]=g,t[9]=_):_=t[9];let v=Ge(_);if(!o)return v;let y;t[10]===o?y=t[11]:(y=typeof o==`string`?{children:o}:o,t[10]=o,t[11]=y);let b=y,x=p!==`collapsed`||f,S;t[12]!==x||t[13]!==b?(S=(0,B.jsx)(Cl,{align:`center`,hidden:x,side:`right`,...b}),t[12]=x,t[13]=b,t[14]=S):S=t[14];let C;return t[15]!==v||t[16]!==S?(C=(0,B.jsxs)(xl,{children:[v,S]}),t[15]=v,t[16]=S,t[17]=C):C=t[17],C}var Xl=new Set([`InvalidClientTokenId`,`SignatureDoesNotMatch`,`AuthFailure`,`MissingAuthenticationToken`,`IncompleteSignature`,`UnrecognizedClientException`,`ExpiredToken`,`ExpiredTokenException`,`InvalidAccessKeyId`]);function Zl(e){return typeof e==`object`&&!!e&&`name`in e&&typeof e.name==`string`}function Ql(e){return Zl(e)&&Xl.has(e.name)}var $l=!1;function eu(e,t){!$l&&Ql(e)&&($l=!0,Ke(),Cn(),t.clear(),window.location.pathname!==`/login`&&(window.location.href=`/login?reason=expired`))}function tu(){let e=new $r({queryCache:new Qr({onError:t=>{eu(t,e)}}),mutationCache:new Xr({onError:t=>{eu(t,e)}}),defaultOptions:{queries:{staleTime:5e3,refetchIntervalInBackground:!1}}});return e}function nu(){let e=(0,H.c)(8),{theme:t,setTheme:n}=cs(),r;e[0]!==n||e[1]!==t?(r=()=>{n(t===`light`?`dark`:t===`dark`?`light`:`dark`)},e[0]=n,e[1]=t,e[2]=r):r=e[2];let i=r,a,o,s;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,B.jsx)(nc,{className:`size-[1.2rem] scale-100 rotate-0 transition-transform dark:scale-0 dark:-rotate-90`}),o=(0,B.jsx)(Ks,{className:`absolute size-[1.2rem] scale-0 rotate-90 transition-transform dark:scale-100 dark:rotate-0`}),s=(0,B.jsx)(`span`,{className:`sr-only`,children:`Toggle theme`}),e[3]=a,e[4]=o,e[5]=s):(a=e[3],o=e[4],s=e[5]);let c;return e[6]===i?c=e[7]:(c=(0,B.jsxs)(_t,{className:`rounded-full transition-none hover:bg-transparent dark:hover:bg-transparent`,onClick:i,size:`icon-sm`,variant:`ghost`,children:[a,o,s]}),e[6]=i,e[7]=c),c}function ru(){let e=(0,H.c)(7),{isAdmin:t,license:n}=wn(),r=t&&n===`open-source`,i,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=Xe(`z-50 flex h-10 shrink-0 items-center gap-2 border-b border-sidebar-border bg-sidebar px-4 text-sidebar-foreground`,`sticky top-0`),a=(0,B.jsx)(Bl,{className:`-ml-1`}),e[0]=i,e[1]=a):(i=e[0],a=e[1]);let o;e[2]===r?o=e[3]:(o=r&&(0,B.jsx)(`a`,{href:`https://mulgadc.com/purchase`,target:`_blank`,rel:`noopener noreferrer`,className:Xe(mt({variant:`outline`,size:`sm`})),children:`Upgrade`}),e[2]=r,e[3]=o);let s;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,B.jsx)(nu,{}),e[4]=s):s=e[4];let c;return e[5]===o?c=e[6]:(c=(0,B.jsxs)(`header`,{className:i,children:[a,(0,B.jsxs)(`div`,{className:`flex w-full items-center justify-end gap-2`,children:[o,s]})]}),e[5]=o,e[6]=c),c}function iu(){let e=(0,H.c)(3),t,n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,B.jsx)(`h1`,{className:`text-4xl font-bold`,children:`404`}),n=(0,B.jsx)(`p`,{className:`text-muted-foreground`,children:`Page not found`}),e[0]=t,e[1]=n):(t=e[0],n=e[1]);let r;return e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,B.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-4`,children:[t,n,(0,B.jsx)(A,{to:`/`,children:(0,B.jsx)(_t,{variant:`outline`,children:`Go back home`})})]}),e[2]=r):r=e[2],r}function G(){let e=(0,H.c)(259),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={select:au},e[0]=t):t=e[0];let n=Jo(t),r=Ne(),i=a(),{isAdmin:o}=wn(),s;e[1]!==r||e[2]!==i?(s=function(){Ke(),Cn(),i.clear(),r({to:`/login`})},e[1]=r,e[2]=i,e[3]=s):s=e[3];let c=s,l;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,B.jsxs)(Hl,{className:`flex flex-row items-center gap-2 px-4 py-3`,children:[(0,B.jsx)(`img`,{src:`/mulga-logo.svg`,alt:`Mulga`,className:`size-6 shrink-0 dark:invert`}),(0,B.jsx)(`span`,{className:`truncate text-sm font-semibold group-data-[collapsible=icon]:hidden`,children:`Spinifex`})]}),e[4]=l):l=e[4];let u;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,B.jsx)(ql,{children:`General`}),e[5]=u):u=e[5];let d=n===`/`,f,p;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,B.jsx)(Os,{className:`size-4`}),p=(0,B.jsx)(`span`,{children:`Dashboard`}),e[6]=f,e[7]=p):(f=e[6],p=e[7]);let m;e[8]===d?m=e[9]:(m=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/`,children:(0,B.jsxs)(W,{isActive:d,tooltip:`Dashboard`,children:[f,p]})})}),e[8]=d,e[9]=m);let h;e[10]!==o||e[11]!==n?(h=o&&(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/nodes`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/nodes`),tooltip:`Nodes`,children:[(0,B.jsx)(nt,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Nodes`})]})})}),e[10]=o,e[11]=n,e[12]=h):h=e[12];let g;e[13]!==m||e[14]!==h?(g=(0,B.jsxs)(Kl,{children:[u,(0,B.jsxs)(Jl,{children:[m,h]})]}),e[13]=m,e[14]=h,e[15]=g):g=e[15];let _;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,B.jsx)(ql,{children:`EC2`}),e[16]=_):_=e[16];let v;e[17]===n?v=e[18]:(v=n.startsWith(`/ec2/describe-instances`)||n.startsWith(`/ec2/run-instances`),e[17]=n,e[18]=v);let y,b;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,B.jsx)(nt,{className:`size-4`}),b=(0,B.jsx)(`span`,{children:`Instances`}),e[19]=y,e[20]=b):(y=e[19],b=e[20]);let x;e[21]===v?x=e[22]:(x=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-instances`,children:(0,B.jsxs)(W,{isActive:v,tooltip:`Instances`,children:[y,b]})})}),e[21]=v,e[22]=x);let S;e[23]===n?S=e[24]:(S=n.startsWith(`/ec2/describe-launch-templates`)||n.startsWith(`/ec2/create-launch-template`),e[23]=n,e[24]=S);let C,w;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,B.jsx)(Es,{className:`size-4`}),w=(0,B.jsx)(`span`,{children:`Launch Templates`}),e[25]=C,e[26]=w):(C=e[25],w=e[26]);let T;e[27]===S?T=e[28]:(T=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-launch-templates`,children:(0,B.jsxs)(W,{isActive:S,tooltip:`Launch Templates`,children:[C,w]})})}),e[27]=S,e[28]=T);let E;e[29]===n?E=e[30]:(E=n.startsWith(`/ec2/describe-images`),e[29]=n,e[30]=E);let D,O;e[31]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,B.jsx)(at,{className:`size-4`}),O=(0,B.jsx)(`span`,{children:`Images`}),e[31]=D,e[32]=O):(D=e[31],O=e[32]);let k;e[33]===E?k=e[34]:(k=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-images`,children:(0,B.jsxs)(W,{isActive:E,tooltip:`Images`,children:[D,O]})})}),e[33]=E,e[34]=k);let ee;e[35]===n?ee=e[36]:(ee=n.startsWith(`/ec2/describe-key-pairs`),e[35]=n,e[36]=ee);let te,ne;e[37]===Symbol.for(`react.memo_cache_sentinel`)?(te=(0,B.jsx)(Qe,{className:`size-4`}),ne=(0,B.jsx)(`span`,{children:`Key Pairs`}),e[37]=te,e[38]=ne):(te=e[37],ne=e[38]);let re;e[39]===ee?re=e[40]:(re=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-key-pairs`,children:(0,B.jsxs)(W,{isActive:ee,tooltip:`Key Pairs`,children:[te,ne]})})}),e[39]=ee,e[40]=re);let ie;e[41]===n?ie=e[42]:(ie=n.startsWith(`/ec2/describe-addresses`)||n.startsWith(`/ec2/allocate-address`),e[41]=n,e[42]=ie);let ae,oe;e[43]===Symbol.for(`react.memo_cache_sentinel`)?(ae=(0,B.jsx)(Hs,{className:`size-4`}),oe=(0,B.jsx)(`span`,{children:`Elastic IPs`}),e[43]=ae,e[44]=oe):(ae=e[43],oe=e[44]);let se;e[45]===ie?se=e[46]:(se=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-addresses`,children:(0,B.jsxs)(W,{isActive:ie,tooltip:`Elastic IPs`,children:[ae,oe]})})}),e[45]=ie,e[46]=se);let ce;e[47]===n?ce=e[48]:(ce=n.startsWith(`/ec2/describe-volumes`)||n.startsWith(`/ec2/create-volume`)||n.startsWith(`/ec2/modify-volume`),e[47]=n,e[48]=ce);let le,ue;e[49]===Symbol.for(`react.memo_cache_sentinel`)?(le=(0,B.jsx)(tt,{className:`size-4`}),ue=(0,B.jsx)(`span`,{children:`Volumes`}),e[49]=le,e[50]=ue):(le=e[49],ue=e[50]);let de;e[51]===ce?de=e[52]:(de=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-volumes`,children:(0,B.jsxs)(W,{isActive:ce,tooltip:`Volumes`,children:[le,ue]})})}),e[51]=ce,e[52]=de);let fe;e[53]===n?fe=e[54]:(fe=n.startsWith(`/ec2/describe-snapshots`)||n.startsWith(`/ec2/create-snapshot`),e[53]=n,e[54]=fe);let pe,me;e[55]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,B.jsx)(Ze,{className:`size-4`}),me=(0,B.jsx)(`span`,{children:`Snapshots`}),e[55]=pe,e[56]=me):(pe=e[55],me=e[56]);let he;e[57]===fe?he=e[58]:(he=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-snapshots`,children:(0,B.jsxs)(W,{isActive:fe,tooltip:`Snapshots`,children:[pe,me]})})}),e[57]=fe,e[58]=he);let ge;e[59]===n?ge=e[60]:(ge=n.startsWith(`/ec2/describe-placement-groups`)||n.startsWith(`/ec2/create-placement-group`),e[59]=n,e[60]=ge);let _e,j;e[61]===Symbol.for(`react.memo_cache_sentinel`)?(_e=(0,B.jsx)(Ps,{className:`size-4`}),j=(0,B.jsx)(`span`,{children:`Placement Groups`}),e[61]=_e,e[62]=j):(_e=e[61],j=e[62]);let M;e[63]===ge?M=e[64]:(M=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-placement-groups`,children:(0,B.jsxs)(W,{isActive:ge,tooltip:`Placement Groups`,children:[_e,j]})})}),e[63]=ge,e[64]=M);let ve;e[65]===n?ve=e[66]:(ve=n.startsWith(`/ec2/describe-load-balancers`)||n.startsWith(`/ec2/create-load-balancer`),e[65]=n,e[66]=ve);let ye,be;e[67]===Symbol.for(`react.memo_cache_sentinel`)?(ye=(0,B.jsx)(it,{className:`size-4`}),be=(0,B.jsx)(`span`,{children:`Load Balancers`}),e[67]=ye,e[68]=be):(ye=e[67],be=e[68]);let xe;e[69]===ve?xe=e[70]:(xe=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-load-balancers`,children:(0,B.jsxs)(W,{isActive:ve,tooltip:`Load Balancers`,children:[ye,be]})})}),e[69]=ve,e[70]=xe);let Se;e[71]===n?Se=e[72]:(Se=n.startsWith(`/ec2/describe-target-groups`)||n.startsWith(`/ec2/create-target-group`),e[71]=n,e[72]=Se);let N,Ce;e[73]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,B.jsx)(Ss,{className:`size-4`}),Ce=(0,B.jsx)(`span`,{children:`Target Groups`}),e[73]=N,e[74]=Ce):(N=e[73],Ce=e[74]);let we;e[75]===Se?we=e[76]:(we=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-target-groups`,children:(0,B.jsxs)(W,{isActive:Se,tooltip:`Target Groups`,children:[N,Ce]})})}),e[75]=Se,e[76]=we);let Te;e[77]!==x||e[78]!==T||e[79]!==k||e[80]!==re||e[81]!==se||e[82]!==de||e[83]!==he||e[84]!==M||e[85]!==xe||e[86]!==we?(Te=(0,B.jsxs)(Kl,{children:[_,(0,B.jsxs)(Jl,{children:[x,T,k,re,se,de,he,M,xe,we]})]}),e[77]=x,e[78]=T,e[79]=k,e[80]=re,e[81]=se,e[82]=de,e[83]=he,e[84]=M,e[85]=xe,e[86]=we,e[87]=Te):Te=e[87];let Ee;e[88]===Symbol.for(`react.memo_cache_sentinel`)?(Ee=(0,B.jsx)(ql,{children:`Networking`}),e[88]=Ee):Ee=e[88];let De;e[89]===n?De=e[90]:(De=n.startsWith(`/ec2/describe-vpcs`)||n.startsWith(`/ec2/create-vpc`),e[89]=n,e[90]=De);let Oe,ke;e[91]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,B.jsx)(st,{className:`size-4`}),ke=(0,B.jsx)(`span`,{children:`VPCs`}),e[91]=Oe,e[92]=ke):(Oe=e[91],ke=e[92]);let Ae;e[93]===De?Ae=e[94]:(Ae=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-vpcs`,children:(0,B.jsxs)(W,{isActive:De,tooltip:`VPCs`,children:[Oe,ke]})})}),e[93]=De,e[94]=Ae);let je;e[95]===n?je=e[96]:(je=n.startsWith(`/ec2/describe-subnets`)||n.startsWith(`/ec2/create-subnet`),e[95]=n,e[96]=je);let Me,Pe;e[97]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,B.jsx)(Is,{className:`size-4`}),Pe=(0,B.jsx)(`span`,{children:`Subnets`}),e[97]=Me,e[98]=Pe):(Me=e[97],Pe=e[98]);let Fe;e[99]===je?Fe=e[100]:(Fe=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-subnets`,children:(0,B.jsxs)(W,{isActive:je,tooltip:`Subnets`,children:[Me,Pe]})})}),e[99]=je,e[100]=Fe);let Ie;e[101]===n?Ie=e[102]:(Ie=n.startsWith(`/ec2/describe-security-groups`)||n.startsWith(`/ec2/create-security-group`),e[101]=n,e[102]=Ie);let Le,Re;e[103]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,B.jsx)(ec,{className:`size-4`}),Re=(0,B.jsx)(`span`,{children:`Security Groups`}),e[103]=Le,e[104]=Re):(Le=e[103],Re=e[104]);let ze;e[105]===Ie?ze=e[106]:(ze=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-security-groups`,children:(0,B.jsxs)(W,{isActive:Ie,tooltip:`Security Groups`,children:[Le,Re]})})}),e[105]=Ie,e[106]=ze);let Be;e[107]===n?Be=e[108]:(Be=n.startsWith(`/ec2/describe-route-tables`)||n.startsWith(`/ec2/create-route-table`),e[107]=n,e[108]=Be);let Ve,He;e[109]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,B.jsx)(Qs,{className:`size-4`}),He=(0,B.jsx)(`span`,{children:`Route Tables`}),e[109]=Ve,e[110]=He):(Ve=e[109],He=e[110]);let Ue;e[111]===Be?Ue=e[112]:(Ue=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-route-tables`,children:(0,B.jsxs)(W,{isActive:Be,tooltip:`Route Tables`,children:[Ve,He]})})}),e[111]=Be,e[112]=Ue);let We;e[113]===n?We=e[114]:(We=n.startsWith(`/ec2/describe-internet-gateways`),e[113]=n,e[114]=We);let Ge,P;e[115]===Symbol.for(`react.memo_cache_sentinel`)?(Ge=(0,B.jsx)(rt,{className:`size-4`}),P=(0,B.jsx)(`span`,{children:`Internet Gateways`}),e[115]=Ge,e[116]=P):(Ge=e[115],P=e[116]);let Je;e[117]===We?Je=e[118]:(Je=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-internet-gateways`,children:(0,B.jsxs)(W,{isActive:We,tooltip:`Internet Gateways`,children:[Ge,P]})})}),e[117]=We,e[118]=Je);let Ye;e[119]===n?Ye=e[120]:(Ye=n.startsWith(`/ec2/describe-nat-gateways`)||n.startsWith(`/ec2/create-nat-gateway`),e[119]=n,e[120]=Ye);let Xe,F;e[121]===Symbol.for(`react.memo_cache_sentinel`)?(Xe=(0,B.jsx)($e,{className:`size-4`}),F=(0,B.jsx)(`span`,{children:`NAT Gateways`}),e[121]=Xe,e[122]=F):(Xe=e[121],F=e[122]);let ot;e[123]===Ye?ot=e[124]:(ot=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ec2/describe-nat-gateways`,children:(0,B.jsxs)(W,{isActive:Ye,tooltip:`NAT Gateways`,children:[Xe,F]})})}),e[123]=Ye,e[124]=ot);let lt;e[125]!==Ae||e[126]!==Fe||e[127]!==ze||e[128]!==Ue||e[129]!==Je||e[130]!==ot?(lt=(0,B.jsxs)(Kl,{children:[Ee,(0,B.jsxs)(Jl,{children:[Ae,Fe,ze,Ue,Je,ot]})]}),e[125]=Ae,e[126]=Fe,e[127]=ze,e[128]=Ue,e[129]=Je,e[130]=ot,e[131]=lt):lt=e[131];let ut;e[132]===Symbol.for(`react.memo_cache_sentinel`)?(ut=(0,B.jsx)(ql,{children:`Containers`}),e[132]=ut):ut=e[132];let dt;e[133]===n?dt=e[134]:(dt=n.startsWith(`/eks/list-clusters`)||n.startsWith(`/eks/create-cluster`),e[133]=n,e[134]=dt);let ft,pt;e[135]===Symbol.for(`react.memo_cache_sentinel`)?(ft=(0,B.jsx)(ms,{className:`size-4`}),pt=(0,B.jsx)(`span`,{children:`EKS`}),e[135]=ft,e[136]=pt):(ft=e[135],pt=e[136]);let mt;e[137]===dt?mt=e[138]:(mt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/eks/list-clusters`,children:(0,B.jsxs)(W,{isActive:dt,tooltip:`EKS clusters`,children:[ft,pt]})})}),e[137]=dt,e[138]=mt);let ht;e[139]===n?ht=e[140]:(ht=n.startsWith(`/ecr/list-repositories`),e[139]=n,e[140]=ht);let gt,_t;e[141]===Symbol.for(`react.memo_cache_sentinel`)?(gt=(0,B.jsx)(Js,{className:`size-4`}),_t=(0,B.jsx)(`span`,{children:`ECR`}),e[141]=gt,e[142]=_t):(gt=e[141],_t=e[142]);let vt;e[143]===ht?vt=e[144]:(vt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ecr/list-repositories`,children:(0,B.jsxs)(W,{isActive:ht,tooltip:`ECR repositories`,children:[gt,_t]})})}),e[143]=ht,e[144]=vt);let yt;e[145]===n?yt=e[146]:(yt=n.startsWith(`/ecs/`),e[145]=n,e[146]=yt);let bt,xt;e[147]===Symbol.for(`react.memo_cache_sentinel`)?(bt=(0,B.jsx)(bs,{className:`size-4`}),xt=(0,B.jsx)(`span`,{children:`ECS`}),e[147]=bt,e[148]=xt):(bt=e[147],xt=e[148]);let St;e[149]===yt?St=e[150]:(St=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/ecs/list-clusters`,children:(0,B.jsxs)(W,{isActive:yt,tooltip:`ECS clusters`,children:[bt,xt]})})}),e[149]=yt,e[150]=St);let Ct;e[151]!==mt||e[152]!==vt||e[153]!==St?(Ct=(0,B.jsxs)(Kl,{children:[ut,(0,B.jsxs)(Jl,{children:[mt,vt,St]})]}),e[151]=mt,e[152]=vt,e[153]=St,e[154]=Ct):Ct=e[154];let wt;e[155]===Symbol.for(`react.memo_cache_sentinel`)?(wt=(0,B.jsx)(ql,{children:`RDS`}),e[155]=wt):wt=e[155];let I;e[156]===n?I=e[157]:(I=n.startsWith(`/rds/describe-db-instances`)||n.startsWith(`/rds/create-db-instance`),e[156]=n,e[157]=I);let Tt,Et;e[158]===Symbol.for(`react.memo_cache_sentinel`)?(Tt=(0,B.jsx)(ws,{className:`size-4`}),Et=(0,B.jsx)(`span`,{children:`Databases`}),e[158]=Tt,e[159]=Et):(Tt=e[158],Et=e[159]);let Dt;e[160]===I?Dt=e[161]:(Dt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/rds/describe-db-instances`,children:(0,B.jsxs)(W,{isActive:I,tooltip:`Databases`,children:[Tt,Et]})})}),e[160]=I,e[161]=Dt);let Ot;e[162]===n?Ot=e[163]:(Ot=n.startsWith(`/rds/describe-db-snapshots`)||n.startsWith(`/rds/restore-db-instance-from-db-snapshot`),e[162]=n,e[163]=Ot);let kt,At;e[164]===Symbol.for(`react.memo_cache_sentinel`)?(kt=(0,B.jsx)(Ze,{className:`size-4`}),At=(0,B.jsx)(`span`,{children:`Snapshots`}),e[164]=kt,e[165]=At):(kt=e[164],At=e[165]);let jt;e[166]===Ot?jt=e[167]:(jt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/rds/describe-db-snapshots`,children:(0,B.jsxs)(W,{isActive:Ot,tooltip:`DB Snapshots`,children:[kt,At]})})}),e[166]=Ot,e[167]=jt);let Mt;e[168]===n?Mt=e[169]:(Mt=n.startsWith(`/rds/describe-db-subnet-groups`)||n.startsWith(`/rds/create-db-subnet-group`),e[168]=n,e[169]=Mt);let Nt,Pt;e[170]===Symbol.for(`react.memo_cache_sentinel`)?(Nt=(0,B.jsx)(Is,{className:`size-4`}),Pt=(0,B.jsx)(`span`,{children:`Subnet Groups`}),e[170]=Nt,e[171]=Pt):(Nt=e[170],Pt=e[171]);let Ft;e[172]===Mt?Ft=e[173]:(Ft=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/rds/describe-db-subnet-groups`,children:(0,B.jsxs)(W,{isActive:Mt,tooltip:`DB Subnet Groups`,children:[Nt,Pt]})})}),e[172]=Mt,e[173]=Ft);let It;e[174]===n?It=e[175]:(It=n.startsWith(`/rds/describe-db-parameter-groups`)||n.startsWith(`/rds/create-db-parameter-group`),e[174]=n,e[175]=It);let Lt,Rt;e[176]===Symbol.for(`react.memo_cache_sentinel`)?(Lt=(0,B.jsx)(ct,{className:`size-4`}),Rt=(0,B.jsx)(`span`,{children:`Parameter Groups`}),e[176]=Lt,e[177]=Rt):(Lt=e[176],Rt=e[177]);let zt;e[178]===It?zt=e[179]:(zt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/rds/describe-db-parameter-groups`,children:(0,B.jsxs)(W,{isActive:It,tooltip:`DB Parameter Groups`,children:[Lt,Rt]})})}),e[178]=It,e[179]=zt);let Bt;e[180]!==jt||e[181]!==Ft||e[182]!==zt||e[183]!==Dt?(Bt=(0,B.jsxs)(Kl,{children:[wt,(0,B.jsxs)(Jl,{children:[Dt,jt,Ft,zt]})]}),e[180]=jt,e[181]=Ft,e[182]=zt,e[183]=Dt,e[184]=Bt):Bt=e[184];let Vt;e[185]===Symbol.for(`react.memo_cache_sentinel`)?(Vt=(0,B.jsx)(ql,{children:`IAM`}),e[185]=Vt):Vt=e[185];let Ht;e[186]===n?Ht=e[187]:(Ht=n.startsWith(`/iam/list-users`)||n.startsWith(`/iam/create-user`),e[186]=n,e[187]=Ht);let Ut,Wt;e[188]===Symbol.for(`react.memo_cache_sentinel`)?(Ut=(0,B.jsx)(cc,{className:`size-4`}),Wt=(0,B.jsx)(`span`,{children:`Users`}),e[188]=Ut,e[189]=Wt):(Ut=e[188],Wt=e[189]);let Gt;e[190]===Ht?Gt=e[191]:(Gt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/iam/list-users`,children:(0,B.jsxs)(W,{isActive:Ht,tooltip:`Users`,children:[Ut,Wt]})})}),e[190]=Ht,e[191]=Gt);let Kt;e[192]===n?Kt=e[193]:(Kt=n.startsWith(`/iam/list-groups`)||n.startsWith(`/iam/create-group`),e[192]=n,e[193]=Kt);let L,qt;e[194]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,B.jsx)(oc,{className:`size-4`}),qt=(0,B.jsx)(`span`,{children:`Groups`}),e[194]=L,e[195]=qt):(L=e[194],qt=e[195]);let Jt;e[196]===Kt?Jt=e[197]:(Jt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/iam/list-groups`,children:(0,B.jsxs)(W,{isActive:Kt,tooltip:`Groups`,children:[L,qt]})})}),e[196]=Kt,e[197]=Jt);let Yt;e[198]===n?Yt=e[199]:(Yt=n.startsWith(`/iam/list-policies`)||n.startsWith(`/iam/create-policy`),e[198]=n,e[199]=Yt);let Xt,Zt;e[200]===Symbol.for(`react.memo_cache_sentinel`)?(Xt=(0,B.jsx)(et,{className:`size-4`}),Zt=(0,B.jsx)(`span`,{children:`Policies`}),e[200]=Xt,e[201]=Zt):(Xt=e[200],Zt=e[201]);let Qt;e[202]===Yt?Qt=e[203]:(Qt=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/iam/list-policies`,children:(0,B.jsxs)(W,{isActive:Yt,tooltip:`Policies`,children:[Xt,Zt]})})}),e[202]=Yt,e[203]=Qt);let $t;e[204]===n?$t=e[205]:($t=n.startsWith(`/iam/list-roles`)||n.startsWith(`/iam/create-role`),e[204]=n,e[205]=$t);let en,tn;e[206]===Symbol.for(`react.memo_cache_sentinel`)?(en=(0,B.jsx)(ic,{className:`size-4`}),tn=(0,B.jsx)(`span`,{children:`Roles`}),e[206]=en,e[207]=tn):(en=e[206],tn=e[207]);let nn;e[208]===$t?nn=e[209]:(nn=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/iam/list-roles`,children:(0,B.jsxs)(W,{isActive:$t,tooltip:`Roles`,children:[en,tn]})})}),e[208]=$t,e[209]=nn);let rn;e[210]===n?rn=e[211]:(rn=n.startsWith(`/iam/list-instance-profiles`)||n.startsWith(`/iam/create-instance-profile`),e[210]=n,e[211]=rn);let an,on;e[212]===Symbol.for(`react.memo_cache_sentinel`)?(an=(0,B.jsx)(As,{className:`size-4`}),on=(0,B.jsx)(`span`,{children:`Instance Profiles`}),e[212]=an,e[213]=on):(an=e[212],on=e[213]);let sn;e[214]===rn?sn=e[215]:(sn=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/iam/list-instance-profiles`,children:(0,B.jsxs)(W,{isActive:rn,tooltip:`Instance Profiles`,children:[an,on]})})}),e[214]=rn,e[215]=sn);let cn;e[216]!==Gt||e[217]!==Jt||e[218]!==Qt||e[219]!==nn||e[220]!==sn?(cn=(0,B.jsxs)(Kl,{children:[Vt,(0,B.jsxs)(Jl,{children:[Gt,Jt,Qt,nn,sn]})]}),e[216]=Gt,e[217]=Jt,e[218]=Qt,e[219]=nn,e[220]=sn,e[221]=cn):cn=e[221];let ln;e[222]===Symbol.for(`react.memo_cache_sentinel`)?(ln=(0,B.jsx)(ql,{children:`S3`}),e[222]=ln):ln=e[222];let un;e[223]===n?un=e[224]:(un=n.startsWith(`/s3/ls`),e[223]=n,e[224]=un);let dn,fn;e[225]===Symbol.for(`react.memo_cache_sentinel`)?(dn=(0,B.jsx)(nt,{className:`size-4`}),fn=(0,B.jsx)(`span`,{children:`Buckets`}),e[225]=dn,e[226]=fn):(dn=e[225],fn=e[226]);let pn;e[227]===un?pn=e[228]:(pn=(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/s3/ls`,children:(0,B.jsxs)(W,{isActive:un,tooltip:`Buckets`,children:[dn,fn]})})}),e[227]=un,e[228]=pn);let mn;e[229]!==o||e[230]!==n?(mn=o&&(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/s3/service-metrics`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/s3/service-metrics`),tooltip:`Service Metrics`,children:[(0,B.jsx)(us,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Service Metrics`})]})})}),e[229]=o,e[230]=n,e[231]=mn):mn=e[231];let hn;e[232]!==pn||e[233]!==mn?(hn=(0,B.jsxs)(Kl,{children:[ln,(0,B.jsxs)(Jl,{children:[pn,mn]})]}),e[232]=pn,e[233]=mn,e[234]=hn):hn=e[234];let gn;e[235]!==o||e[236]!==n?(gn=qe()&&(0,B.jsxs)(Kl,{children:[(0,B.jsx)(ql,{children:`Ochre`}),(0,B.jsxs)(Jl,{children:[(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/bedrock/list-knowledge-bases`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/bedrock/list-knowledge-bases`),tooltip:`Knowledge Bases`,children:[(0,B.jsx)(gs,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Knowledge Bases`})]})})}),(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/bedrock/list-guardrails`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/bedrock/list-guardrails`),tooltip:`Guardrails`,children:[(0,B.jsx)(et,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Guardrails`})]})})}),(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/bedrock/playground`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/bedrock/playground`),tooltip:`Playground`,children:[(0,B.jsx)(Ws,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Playground`})]})})}),o&&(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/bedrock/list-model-catalog`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/bedrock/list-model-catalog`),tooltip:`Model Catalog`,children:[(0,B.jsx)(Rs,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Model Catalog`})]})})}),o&&(0,B.jsx)(U,{children:(0,B.jsx)(A,{to:`/bedrock/list-model-access`,children:(0,B.jsxs)(W,{isActive:n.startsWith(`/bedrock/list-model-access`),tooltip:`Model Access`,children:[(0,B.jsx)(Ms,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Model Access`})]})})})]})]}),e[235]=o,e[236]=n,e[237]=gn):gn=e[237];let _n;e[238]===o?_n=e[239]:(_n=o&&(0,B.jsxs)(Kl,{children:[(0,B.jsx)(ql,{children:`Documentation`}),(0,B.jsx)(Jl,{children:(0,B.jsx)(U,{children:(0,B.jsx)(`a`,{href:`https://docs.mulgadc.com`,target:`_blank`,rel:`noopener noreferrer`,children:(0,B.jsxs)(W,{tooltip:`Documentation`,children:[(0,B.jsx)(fs,{className:`size-4`}),(0,B.jsx)(`span`,{children:`Docs`})]})})})})]}),e[238]=o,e[239]=_n);let vn;e[240]!==Bt||e[241]!==cn||e[242]!==hn||e[243]!==gn||e[244]!==_n||e[245]!==Te||e[246]!==lt||e[247]!==g||e[248]!==Ct?(vn=(0,B.jsxs)(Gl,{children:[g,Te,lt,Ct,Bt,cn,hn,gn,_n]}),e[240]=Bt,e[241]=cn,e[242]=hn,e[243]=gn,e[244]=_n,e[245]=Te,e[246]=lt,e[247]=g,e[248]=Ct,e[249]=vn):vn=e[249];let yn;e[250]===Symbol.for(`react.memo_cache_sentinel`)?(yn=(0,B.jsx)(Wl,{className:`mx-0 w-full`}),e[250]=yn):yn=e[250];let bn,xn;e[251]===Symbol.for(`react.memo_cache_sentinel`)?(bn=(0,B.jsx)(Bs,{className:`size-4`}),xn=(0,B.jsx)(`span`,{children:`Sign out`}),e[251]=bn,e[252]=xn):(bn=e[251],xn=e[252]);let Sn;e[253]===c?Sn=e[254]:(Sn=(0,B.jsxs)(Ul,{children:[yn,(0,B.jsx)(Jl,{children:(0,B.jsx)(U,{children:(0,B.jsxs)(W,{onClick:c,tooltip:`Sign out`,children:[bn,xn]})})})]}),e[253]=c,e[254]=Sn);let Tn;e[255]===Symbol.for(`react.memo_cache_sentinel`)?(Tn=(0,B.jsx)(Vl,{}),e[255]=Tn):Tn=e[255];let En;return e[256]!==vn||e[257]!==Sn?(En=(0,B.jsxs)(zl,{collapsible:`icon`,children:[l,vn,Sn,Tn]}),e[256]=vn,e[257]=Sn,e[258]=En):En=e[258],En}function au(e){return e.pathname}function ou(e){let t=(0,H.c)(18),{error:n,reset:r}=e,i=ke(),o=a(),s;t[0]!==o||t[1]!==r||t[2]!==i?(s=function(){o.invalidateQueries(),r(),i.invalidate()},t[0]=o,t[1]=r,t[2]=i,t[3]=s):s=t[3];let c=s,l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,B.jsx)(G,{}),t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,B.jsx)(ru,{}),t[5]=u):u=t[5];let d,f;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,B.jsx)(`div`,{className:`flex justify-center`,children:(0,B.jsx)(vs,{className:`size-12 text-destructive`})}),f=(0,B.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Something went wrong`}),t[6]=d,t[7]=f):(d=t[6],f=t[7]);let p=(n instanceof Error?n.message:String(n))||`An unexpected error occurred`,m;t[8]===p?m=t[9]:(m=(0,B.jsx)(`p`,{className:`text-muted-foreground`,children:p}),t[8]=p,t[9]=m);let h;t[10]===c?h=t[11]:(h=(0,B.jsx)(_t,{onClick:c,variant:`default`,children:`Try Again`}),t[10]=c,t[11]=h);let g;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,B.jsx)(A,{to:`/`,children:(0,B.jsx)(_t,{variant:`outline`,children:`Go Home`})}),t[12]=g):g=t[12];let _;t[13]===h?_=t[14]:(_=(0,B.jsxs)(`div`,{className:`flex justify-center gap-2`,children:[h,g]}),t[13]=h,t[14]=_);let v;return t[15]!==_||t[16]!==m?(v=(0,B.jsxs)(B.Fragment,{children:[l,(0,B.jsxs)(`main`,{className:`flex flex-1 flex-col`,children:[u,(0,B.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-6 pt-0`,children:(0,B.jsxs)(`div`,{className:`max-w-md space-y-4 text-center`,children:[d,f,m,_]})})]})]}),t[15]=_,t[16]=m,t[17]=v):v=t[17],v}var su=E()({head:()=>({meta:[{title:`Mulga`}]}),component:()=>(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(es,{}),(0,B.jsx)(G,{}),(0,B.jsxs)(`main`,{className:`flex flex-1 flex-col`,children:[(0,B.jsx)(ru,{}),(0,B.jsx)(`div`,{className:`flex flex-1 flex-col p-8`,children:(0,B.jsx)(be,{})})]})]}),errorComponent:ou,notFoundComponent:iu}),cu=w(`/_auth`)({beforeLoad:()=>{if(!Je())throw Ee({to:`/login`})},component:D(()=>P(()=>import(`./route-DPFKZkGs.js`),__vite__mapDeps([0,1,2,3,4,5])),`component`)}),lu=w(`/_auth/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...zn,staleTime:`static`}),e.queryClient.query({...An,staleTime:`static`}),e.queryClient.query({...Mn,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`}),e.queryClient.query({...lr,staleTime:`static`}),e.queryClient.query({...Wn,staleTime:`static`}),e.queryClient.query({...Fn,staleTime:`static`}),e.queryClient.query({...Bn,staleTime:`static`}),e.queryClient.query({...Ln,staleTime:`static`})])},head:()=>({meta:[{title:`Dashboard | Mulga`}]}),component:D(()=>P(()=>import(`./_auth-Cg86DRhs.js`),__vite__mapDeps([6,1,7,8,9,10,11,4,5,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])),`component`)}),uu=w(`/_auth/bedrock`)({beforeLoad:()=>{qe()||N({throw:!0})},component:D(()=>P(()=>import(`./route-n5jLl8qw.js`),__vite__mapDeps([40,1,2,3,4,5])),`component`)}),du=w(`/_auth/nodes`)({head:()=>({meta:[{title:`Nodes | Mulga`}]}),component:D(()=>P(()=>import(`./nodes-DExo87Po.js`),__vite__mapDeps([41,1,7,8,9,10,11,4,5,42,12,13,15,14,16,19,20,21,27,28,29,30,31,32,23])),`component`)}),fu=w(`/_auth/s3/service-metrics`)({head:()=>({meta:[{title:`Service Metrics | S3 | Mulga`}]}),component:D(()=>P(()=>import(`./service-metrics-C6gBIZci.js`),__vite__mapDeps([43,1,7,8,9,10,42,19,12,13,20,21,27,28,29,30,31,32,23])),`component`)}),pu=w(`/_auth/ec2/(elastic-ips)/allocate-address`)({head:()=>({meta:[{title:`Allocate Elastic IP | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./allocate-address-CDvylWBR.js`),__vite__mapDeps([44,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),mu=w(`/_auth/ec2/(internet-gateways)/create-internet-gateway`)({head:()=>({meta:[{title:`Create Internet Gateway | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-internet-gateway-CGStzV_5.js`),__vite__mapDeps([64,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),hu=w(`/_auth/ec2/(key)/create-key-pair`)({head:()=>({meta:[{title:`Create Key Pair | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-key-pair-CKL_t5ui.js`),__vite__mapDeps([65,1,45,4,5,46,11,14,48,66,36,29,12,13,34,37,15,52,38,67,68,53,69,70,47,49,50,71,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,33,35,63])),`component`)}),gu=w(`/_auth/ec2/(key)/import-key-pair`)({head:()=>({meta:[{title:`Import Key Pair | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./import-key-pair-kETKjfrj.js`),__vite__mapDeps([72,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,73,63])),`component`)}),_u=w(`/_auth/ec2/(launch-templates)/create-launch-template`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Vn,staleTime:`static`}),e.queryClient.query({...In,staleTime:`static`}),e.queryClient.query({...Hn,staleTime:`static`}),e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...Wn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Launch Template | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-launch-template-vwPKoZ8a.js`),__vite__mapDeps([74,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63,75,76,8,10,66,36,38,67,68,69,73,77])),`component`)}),vu=w(`/_auth/ec2/(load-balancers)/create-load-balancer`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Mn,staleTime:`static`}),e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...Wn,staleTime:`static`}),e.queryClient.query({...Qn,staleTime:`static`}),e.queryClient.query({...En,staleTime:`static`}),e.queryClient.query({...Zn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Load Balancer | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-load-balancer-BBKiIxj3.js`),__vite__mapDeps([78,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,79,23,24,25,80,55,56,59,61,62,73,33,35,22,81,82,83,27,58,60,84,85,86,87,77,88])),`component`)}),yu=w(`/_auth/ec2/(nat-gateways)/create-nat-gateway`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...Bn,staleTime:`static`})])},head:()=>({meta:[{title:`Create NAT Gateway | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-nat-gateway-C0zhuUio.js`),__vite__mapDeps([89,1,76,8,9,10,11,4,5,45,12,13,46,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),bu=w(`/_auth/ec2/(placement-groups)/create-placement-group`)({head:()=>({meta:[{title:`Create Placement Group | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-placement-group-D_3YKZZQ.js`),__vite__mapDeps([90,1,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),xu=w(`/_auth/ec2/(route-tables)/create-route-table`)({loader:async({context:e})=>{await e.queryClient.query({...Mn,staleTime:`static`})},head:()=>({meta:[{title:`Create Route Table | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-route-table-q3_xIq0T.js`),__vite__mapDeps([91,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),Su=w(`/_auth/ec2/(security-groups)/create-security-group`)({loader:async({context:e})=>{await e.queryClient.query({...Mn,staleTime:`static`})},head:()=>({meta:[{title:`Create Security Group | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-security-group-BD7bwg9p.js`),__vite__mapDeps([92,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),Cu=w(`/_auth/ec2/(subnet)/create-subnet`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Mn,staleTime:`static`}),e.queryClient.query({...Un,staleTime:`static`})])},head:()=>({meta:[{title:`Create Subnet | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-subnet-BXdYKpy-.js`),__vite__mapDeps([93,1,76,8,9,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),wu=w(`/_auth/ec2/(target-groups)/create-target-group`)({loader:async({context:e})=>{await e.queryClient.query({...Mn,staleTime:`static`})},head:()=>({meta:[{title:`Create Target Group | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-target-group-CSrYTK6r.js`),__vite__mapDeps([94,1,76,8,9,10,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,22,23,24,25,81,55,56,82,27,58,59,60,87,66,36,37,52,38,67,68,53,69,51,61,62,84,85,86,77,88])),`component`)}),Tu=w(`/_auth/ec2/(volumes)/create-volume`)({loader:async({context:e})=>{await e.queryClient.query({...Un,staleTime:`static`})},head:()=>({meta:[{title:`Create Volume | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-volume-BamGr8Qm.js`),__vite__mapDeps([95,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,54,55,56,57,27,58,59,60,61,62,63])),`component`)}),Eu=w(`/_auth/ec2/(vpc)/create-vpc`)({head:()=>({meta:[{title:`Create VPC | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./create-vpc-CyDH_vpB.js`),__vite__mapDeps([96,1,45,4,5,46,11,14,15,16,66,36,29,12,13,34,37,48,52,38,67,68,53,69,47,49,50,51,54,9,55,56,24,25,22,23,57,27,58,59,60,61,62,63])),`component`)}),Du=w(`/_auth/ecs/(clusters)/task-definitions`)({loader:async({context:e})=>{await e.queryClient.query({...Jn,staleTime:`static`})},head:()=>({meta:[{title:`Task Definitions | ECS | Mulga`}]}),component:D(()=>P(()=>import(`./task-definitions-qkfdMMhk.js`),__vite__mapDeps([97,1,76,8,9,10,11,4,5,34,29,12,13,98,23,24,25,99,55,56,21,27,59,100,33,35,36,37,38,101])),`component`)}),Ou=w(`/_auth/eks/(clusters)/create-cluster`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Mn,staleTime:`static`}),e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...rr,staleTime:`static`}),e.queryClient.query({...Vn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Cluster | EKS | Mulga`}]}),component:D(()=>P(()=>import(`./create-cluster-eQiUzhUk.js`),__vite__mapDeps([102,1,9,76,8,10,45,4,5,12,13,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,51,22,23,24,25,103,55,56,104,105,57,106,107,108,27,58,59,60,61,62,33,35,109,110,49,111,71,50,112])),`component`)}),ku=w(`/_auth/iam/(groups)/create-group`)({head:()=>({meta:[{title:`Create Group | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./create-group-6mVlm4h5.js`),__vite__mapDeps([113,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),Au=w(`/_auth/iam/(instance-profiles)/create-instance-profile`)({head:()=>({meta:[{title:`Create Instance Profile | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./create-instance-profile-CgetPfkP.js`),__vite__mapDeps([115,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),ju=w(`/_auth/iam/(policies)/create-policy`)({head:()=>({meta:[{title:`Create Policy | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./create-policy-BJFldcK3.js`),__vite__mapDeps([116,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,117,105,73,114])),`component`)}),Mu=w(`/_auth/iam/(roles)/create-role`)({head:()=>({meta:[{title:`Create Role | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./create-role-DvSx0q-L.js`),__vite__mapDeps([118,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,117,105,73,114])),`component`)}),Nu=w(`/_auth/iam/(users)/create-user`)({head:()=>({meta:[{title:`Create User | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./create-user-Bv8sj586.js`),__vite__mapDeps([119,1,45,4,5,46,11,14,47,12,13,48,15,49,34,29,50,51,37,52,53,106,9,55,56,24,25,107,27,58,59,60,61,62,114,105])),`component`)}),Pu=w(`/_auth/rds/(db-instances)/create-db-instance`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...sr,staleTime:`static`}),e.queryClient.query({...or,staleTime:`static`}),e.queryClient.query({...ar,staleTime:`static`}),e.queryClient.query({...Wn,staleTime:`static`}),e.queryClient.query({...Mn,staleTime:`static`}),e.queryClient.query({...Vn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Database | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./create-db-instance-CY_ivPtb.js`),__vite__mapDeps([120,1,9,7,8,10,76,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,22,23,24,25,121,122,55,56,123,27,58,59,60,61,62,84,85,86,109,110,111,71,124,125])),`component`)}),Fu=w(`/_auth/rds/(parameter-groups)/create-db-parameter-group`)({loader:async({context:e})=>{await e.queryClient.query({...sr,staleTime:`static`})},head:()=>({meta:[{title:`Create Parameter Group | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./create-db-parameter-group-CkK-hDRM.js`),__vite__mapDeps([126,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,47,49,50,51,121,24,25,122,55,56,123,23,27,58,59,60,61,62,84,85,86])),`component`)}),Iu=w(`/_auth/rds/(subnet-groups)/create-db-subnet-group`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...Nn,staleTime:`static`}),e.queryClient.query({...Mn,staleTime:`static`})])},head:()=>({meta:[{title:`Create Subnet Group | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./create-db-subnet-group-BV65rf5O.js`),__vite__mapDeps([127,1,76,8,9,10,45,4,5,12,13,46,11,14,47,48,15,49,34,29,50,51,37,52,53,22,23,24,25,121,122,55,56,27,58,59,60,61,62,84,85,86])),`component`)}),Lu=w(`/_auth/s3/(buckets)/create-bucket`)({head:()=>({meta:[{title:`Create Bucket | S3 | Mulga`}]}),component:D(()=>P(()=>import(`./create-bucket-B5kEkFpz.js`),__vite__mapDeps([128,1,45,4,5,12,13,46,11,14,47,48,15,49,34,29,50,51,37,52,53,129,9,55,56,24,25,27,58,59,60,61,62])),`component`)}),Ru=w(`/_auth/s3/ls/`)({loader:async({context:e})=>{await e.queryClient.query({...lr,staleTime:`static`})},head:()=>({meta:[{title:`Buckets | S3 | Mulga`}]}),component:D(()=>P(()=>import(`./ls-XgxEPnDq.js`),__vite__mapDeps([130,1,76,8,9,10,11,4,5,12,13,34,29,26,23,24,25,27,131])),`component`)}),zu=w(`/_auth/s3/ls/$bucket`)({component:D(()=>P(()=>import(`./route-DtXjPAiX.js`),__vite__mapDeps([132,1,2,3,4,5])),`component`)}),Bu=w(`/_auth/bedrock/(catalog)/list-model-catalog/`)({head:()=>({meta:[{title:`Model Catalog | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./list-model-catalog-CPZ8xUbd.js`),__vite__mapDeps([133,1,7,8,9,10,42,12,13,19,20,21,27,28,29,30,31,32,23])),`component`)}),Vu=w(`/_auth/bedrock/(guardrails)/list-guardrails/`)({loader:async({context:e})=>{await e.queryClient.query({...Dn,staleTime:`static`})},head:()=>({meta:[{title:`Guardrails | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./list-guardrails-DYYlNj8n.js`),__vite__mapDeps([134,1,76,8,9,10,11,4,5,34,29,12,13,135,23,24,25,136,27,39,131])),`component`)}),Hu=w(`/_auth/bedrock/(guardrails)/list-guardrails/create`)({head:()=>({meta:[{title:`Create Guardrail | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./create-CoZioQAG.js`),__vite__mapDeps([137,1,138,9,55,56,12,13,24,25,136,139,45,4,5,46,11,14,66,36,29,34,37,48,15,52,38,67,68,53,69,85,86,51,27,58,59,60,61,62,84,73])),`component`)}),Uu=w(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/`)({loader:async({context:e})=>{await e.queryClient.query({...kn,staleTime:`static`})},head:()=>({meta:[{title:`Knowledge Bases | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./list-knowledge-bases-CH_zlnnr.js`),__vite__mapDeps([140,1,76,8,9,10,11,4,5,34,29,12,13,141,23,24,25,142,27,39,131])),`component`)}),Wu=w(`/_auth/bedrock/(knowledge-bases)/list-knowledge-bases/create`)({loader:async({context:e})=>{await e.queryClient.query({...On,staleTime:`static`})},head:()=>({meta:[{title:`Create Knowledge Base | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./create-uNWIyxX8.js`),__vite__mapDeps([143,1,76,8,9,10,45,4,5,46,11,14,66,36,29,12,13,34,37,48,15,52,38,67,68,53,69,51,135,23,24,25,136,144,55,56,142,27,58,59,60,61,62,73])),`component`)}),Gu=w(`/_auth/bedrock/(model-access)/list-model-access/`)({head:()=>({meta:[{title:`Model Access | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./list-model-access-Ds5MpzNH.js`),__vite__mapDeps([145,1,9,55,56,7,8,10,42,66,36,29,12,13,34,37,14,48,15,52,38,5,67,68,53,69,51,19,20,21,27,28,30,31,32,23,61,62])),`component`)}),Ku=w(`/_auth/bedrock/(playground)/playground/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...On,staleTime:`static`}),e.queryClient.query({...Dn,staleTime:`static`})])},head:()=>({meta:[{title:`Playground | Ochre | Mulga`}]}),component:D(()=>P(()=>import(`./playground-zdI5o66q.js`),__vite__mapDeps([146,1,55,9,56,76,8,10,12,13,15,14,66,36,29,34,37,48,52,38,5,67,68,53,69,47,49,50,51,24,25,135,23,136,147,27,28,30,61,62,73])),`component`)}),qu=w(`/_auth/ec2/(elastic-ips)/describe-addresses/`)({loader:async({context:e})=>{await e.queryClient.query({...Bn,staleTime:`static`})},head:()=>({meta:[{title:`Elastic IPs | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-addresses-DKlK9Anw.js`),__vite__mapDeps([148,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,131])),`component`)}),Ju=w(`/_auth/ec2/(images)/describe-images/`)({loader:async({context:e})=>{await e.queryClient.query({...Vn,staleTime:`static`})},head:()=>({meta:[{title:`Images | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-images-Zp7giKqa.js`),__vite__mapDeps([149,1,76,8,9,10,22,23,12,13,24,25,27,39,131,11,4,5,109])),`component`)}),Yu=w(`/_auth/ec2/(instances)/describe-instances/`)({loader:async({context:e})=>{await e.queryClient.query({...zn,staleTime:`static`})},head:()=>({meta:[{title:`Instances | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-instances-BK0FW0LB.js`),__vite__mapDeps([150,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),Xu=w(`/_auth/ec2/(internet-gateways)/describe-internet-gateways/`)({loader:async({context:e})=>{await e.queryClient.query({...Ln,staleTime:`static`})},head:()=>({meta:[{title:`Internet Gateways | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-internet-gateways-CiiBScpk.js`),__vite__mapDeps([151,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,131])),`component`)}),Zu=w(`/_auth/ec2/(key)/describe-key-pairs/`)({loader:async({context:e})=>{await e.queryClient.query({...Hn,staleTime:`static`})},head:()=>({meta:[{title:`Key Pairs | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-key-pairs-BRKxsJWn.js`),__vite__mapDeps([152,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,131])),`component`)}),Qu=w(`/_auth/ec2/(launch-templates)/describe-launch-templates/`)({loader:async({context:e})=>{await e.queryClient.query({...Rn,staleTime:`static`})},head:()=>({meta:[{title:`Launch Templates | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-launch-templates-BuaCkV_y.js`),__vite__mapDeps([153,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,28,30,131])),`component`)}),$u=w(`/_auth/ec2/(load-balancers)/describe-load-balancers/`)({loader:async({context:e})=>{await e.queryClient.query({...Xn,staleTime:`static`})},head:()=>({meta:[{title:`Load Balancers | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-load-balancers-ayJnDdyt.js`),__vite__mapDeps([154,1,76,8,9,10,11,4,5,45,12,13,34,29,83,23,24,25,82,27,39])),`component`)}),K=w(`/_auth/ec2/(nat-gateways)/describe-nat-gateways/`)({loader:async({context:e})=>{await e.queryClient.query({...Fn,staleTime:`static`})},head:()=>({meta:[{title:`NAT Gateways | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-nat-gateways-B8p3GKN1.js`),__vite__mapDeps([155,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),ed=w(`/_auth/ec2/(placement-groups)/describe-placement-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Gn,staleTime:`static`})},head:()=>({meta:[{title:`Placement Groups | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-placement-groups-XiQbPRZ5.js`),__vite__mapDeps([156,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),q=w(`/_auth/ec2/(route-tables)/describe-route-tables/`)({loader:async({context:e})=>{await e.queryClient.query({...Pn,staleTime:`static`})},head:()=>({meta:[{title:`Route Tables | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-route-tables-Cz9uMOpx.js`),__vite__mapDeps([157,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,28,30,131])),`component`)}),J=w(`/_auth/ec2/(security-groups)/describe-security-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Wn,staleTime:`static`})},head:()=>({meta:[{title:`Security Groups | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-security-groups-uryLUVIn.js`),__vite__mapDeps([158,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,131])),`component`)}),Y=w(`/_auth/ec2/(snapshots)/describe-snapshots/`)({loader:async({context:e})=>{await e.queryClient.query({...jn,staleTime:`static`})},head:()=>({meta:[{title:`Snapshots | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-snapshots-63g9NU9g.js`),__vite__mapDeps([159,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),td=w(`/_auth/ec2/(subnet)/describe-subnets/`)({loader:async({context:e})=>{await e.queryClient.query({...Nn,staleTime:`static`})},head:()=>({meta:[{title:`Subnets | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-subnets-lWLraP1d.js`),__vite__mapDeps([160,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),nd=w(`/_auth/ec2/(target-groups)/describe-target-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...Qn,staleTime:`static`})},head:()=>({meta:[{title:`Target Groups | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-target-groups-5RCbjKmg.js`),__vite__mapDeps([161,1,7,8,9,10,76,11,4,5,45,34,29,12,13,83,23,24,25,82,27])),`component`)}),rd=w(`/_auth/ec2/(volumes)/describe-volumes/`)({loader:async({context:e})=>{await e.queryClient.query({...An,staleTime:`static`})},head:()=>({meta:[{title:`Volumes | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-volumes-Dj4fTW0o.js`),__vite__mapDeps([162,1,76,8,9,10,11,4,5,34,29,12,13,22,23,24,25,27,39,131])),`component`)}),id=w(`/_auth/ec2/(vpc)/describe-vpcs/`)({loader:async({context:e})=>{await e.queryClient.query({...Mn,staleTime:`static`})},head:()=>({meta:[{title:`VPCs | EC2 | Mulga`}]}),component:D(()=>P(()=>import(`./describe-vpcs-cdkXn9V9.js`),__vite__mapDeps([163,1,76,8,9,10,11,4,5,12,13,34,29,22,23,24,25,27,39,131])),`component`)}),ad=w(`/_auth/ecr/(repositories)/list-repositories/`)({loader:async({context:e})=>{await e.queryClient.query({...Kn,staleTime:`static`})},head:()=>({meta:[{title:`Repositories | ECR | Mulga`}]}),component:D(()=>P(()=>import(`./list-repositories-B-9oI4MN.js`),__vite__mapDeps([164,1,76,8,9,10,11,4,5,45,12,13,34,29,51,37,52,53,165,23,24,25,166,55,56,27,61,62,33,35,36,38])),`component`)}),od=w(`/_auth/ecs/(clusters)/list-clusters/`)({loader:async({context:e})=>{await Promise.all([e.queryClient.query({...qn,staleTime:`static`}),e.queryClient.query({...Vn,staleTime:`static`})])},head:()=>({meta:[{title:`Clusters | ECS | Mulga`}]}),component:D(()=>P(()=>import(`./list-clusters-UynY0efZ.js`),__vite__mapDeps([167,1,9,76,8,10,11,4,5,45,34,29,12,13,51,37,52,53,22,23,24,25,98,99,55,56,21,27,59,61,62,33,35,36,38,100,39,109,110,48,14,49,111,71,50,101])),`component`)}),sd=w(`/_auth/eks/(clusters)/list-clusters/`)({loader:async({context:e})=>{await e.queryClient.query({...Yn,staleTime:`static`})},head:()=>({meta:[{title:`Clusters | EKS | Mulga`}]}),component:D(()=>P(()=>import(`./list-clusters-CIHqWLhW.js`),__vite__mapDeps([168,1,76,8,9,10,11,4,5,34,29,12,13,169,23,24,25,104,27,131])),`component`)}),cd=w(`/_auth/iam/(groups)/list-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...tr,staleTime:`static`})},head:()=>({meta:[{title:`Groups | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./list-groups-B-aCbhJM.js`),__vite__mapDeps([170,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),ld=w(`/_auth/iam/(instance-profiles)/list-instance-profiles/`)({loader:async({context:e})=>{await e.queryClient.query({...er,staleTime:`static`})},head:()=>({meta:[{title:`Instance Profiles | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./list-instance-profiles-BSt7PimM.js`),__vite__mapDeps([171,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),ud=w(`/_auth/iam/(policies)/list-policies/`)({loader:async({context:e})=>{await e.queryClient.query({...nr,staleTime:`static`})},head:()=>({meta:[{title:`Policies | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./list-policies-DeMAXGlh.js`),__vite__mapDeps([172,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),dd=w(`/_auth/iam/(roles)/list-roles/`)({loader:async({context:e})=>{await e.queryClient.query({...rr,staleTime:`static`})},head:()=>({meta:[{title:`Roles | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./list-roles-DKJKr-De.js`),__vite__mapDeps([173,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),fd=w(`/_auth/iam/(users)/list-users/`)({loader:async({context:e})=>{await e.queryClient.query({...$n,staleTime:`static`})},head:()=>({meta:[{title:`Users | IAM | Mulga`}]}),component:D(()=>P(()=>import(`./list-users-B87cjyLt.js`),__vite__mapDeps([174,1,76,8,9,10,11,4,5,34,29,12,13,108,23,24,25,107,105,27,131])),`component`)}),pd=w(`/_auth/rds/(db-instances)/describe-db-instances/`)({loader:async({context:e})=>{await e.queryClient.query({...cr,staleTime:`static`})},head:()=>({meta:[{title:`Databases | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./describe-db-instances-ririu0gg.js`),__vite__mapDeps([175,1,76,8,9,10,11,4,5,45,34,29,12,13,121,24,25,122,55,56,123,23,27,59,39,176,51,37,52,53,61,62,33,35,36,38])),`component`)}),md=w(`/_auth/rds/(parameter-groups)/describe-db-parameter-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...ar,staleTime:`static`})},head:()=>({meta:[{title:`Parameter Groups | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./describe-db-parameter-groups-Vj5U5CsP.js`),__vite__mapDeps([177,1,76,8,9,10,11,4,5,45,34,29,12,13,121,24,25,123,23,27,178,122,55,56,179,100,33,35,36,37,38])),`component`)}),hd=w(`/_auth/rds/(snapshots)/describe-db-snapshots/`)({loader:async({context:e})=>{await e.queryClient.query({...ir,staleTime:`static`})},head:()=>({meta:[{title:`Snapshots | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./describe-db-snapshots-DXVrzU4j.js`),__vite__mapDeps([180,1,76,8,9,10,11,4,5,45,12,13,34,29,121,24,25,123,23,27,39,181,7,66,36,37,14,48,15,52,38,67,68,53,69,51,122,55,56,58,61,62,84,85,86,33,35,124,182,179,100])),`component`)}),gd=w(`/_auth/rds/(subnet-groups)/describe-db-subnet-groups/`)({loader:async({context:e})=>{await e.queryClient.query({...or,staleTime:`static`})},head:()=>({meta:[{title:`Subnet Groups | RDS | Mulga`}]}),component:D(()=>P(()=>import(`./describe-db-subnet-groups-B9VO6RnW.js`),__vite__mapDeps([183,1,76,8,9,10,11,4,5,45,34,29,12,13,123,23,24,25,121,27,39,184,122,55,56,179,100,33,35,36,37,38])),`component`)}),X=cu.update({id:`/_auth`,getParentRoute:()=>su}),_d=ur.update({id:`/login`,path:`/login`,getParentRoute:()=>su}),vd=lu.update({id:`/`,path:`/`,getParentRoute:()=>X}),Z=uu.update({id:`/bedrock`,path:`/bedrock`,getParentRoute:()=>X}),yd=du.update({id:`/nodes`,path:`/nodes`,getParentRoute:()=>X}),bd=fu.update({id:`/s3/service-metrics`,path:`/s3/service-metrics`,getParentRoute:()=>X}),xd=pu.update({id:`/ec2/(elastic-ips)/allocate-address`,path:`/ec2/allocate-address`,getParentRoute:()=>X}),Sd=dr.update({id:`/ec2/(instances)/run-instances`,path:`/ec2/run-instances`,getParentRoute:()=>X}),Cd=mu.update({id:`/ec2/(internet-gateways)/create-internet-gateway`,path:`/ec2/create-internet-gateway`,getParentRoute:()=>X}),wd=hu.update({id:`/ec2/(key)/create-key-pair`,path:`/ec2/create-key-pair`,getParentRoute:()=>X}),Td=gu.update({id:`/ec2/(key)/import-key-pair`,path:`/ec2/import-key-pair`,getParentRoute:()=>X}),Ed=_u.update({id:`/ec2/(launch-templates)/create-launch-template`,path:`/ec2/create-launch-template`,getParentRoute:()=>X}),Dd=vu.update({id:`/ec2/(load-balancers)/create-load-balancer`,path:`/ec2/create-load-balancer`,getParentRoute:()=>X}),Od=yu.update({id:`/ec2/(nat-gateways)/create-nat-gateway`,path:`/ec2/create-nat-gateway`,getParentRoute:()=>X}),kd=bu.update({id:`/ec2/(placement-groups)/create-placement-group`,path:`/ec2/create-placement-group`,getParentRoute:()=>X}),Ad=xu.update({id:`/ec2/(route-tables)/create-route-table`,path:`/ec2/create-route-table`,getParentRoute:()=>X}),jd=Su.update({id:`/ec2/(security-groups)/create-security-group`,path:`/ec2/create-security-group`,getParentRoute:()=>X}),Md=fr.update({id:`/ec2/(snapshots)/create-snapshot`,path:`/ec2/create-snapshot`,getParentRoute:()=>X}),Nd=Cu.update({id:`/ec2/(subnet)/create-subnet`,path:`/ec2/create-subnet`,getParentRoute:()=>X}),Pd=wu.update({id:`/ec2/(target-groups)/create-target-group`,path:`/ec2/create-target-group`,getParentRoute:()=>X}),Fd=Tu.update({id:`/ec2/(volumes)/create-volume`,path:`/ec2/create-volume`,getParentRoute:()=>X}),Id=Eu.update({id:`/ec2/(vpc)/create-vpc`,path:`/ec2/create-vpc`,getParentRoute:()=>X}),Ld=pr.update({id:`/ecs/(clusters)/create-service`,path:`/ecs/create-service`,getParentRoute:()=>X}),Rd=mr.update({id:`/ecs/(clusters)/register-task-definition`,path:`/ecs/register-task-definition`,getParentRoute:()=>X}),zd=hr.update({id:`/ecs/(clusters)/run-task`,path:`/ecs/run-task`,getParentRoute:()=>X}),Bd=Du.update({id:`/ecs/(clusters)/task-definitions`,path:`/ecs/task-definitions`,getParentRoute:()=>X}),Vd=Ou.update({id:`/eks/(clusters)/create-cluster`,path:`/eks/create-cluster`,getParentRoute:()=>X}),Hd=ku.update({id:`/iam/(groups)/create-group`,path:`/iam/create-group`,getParentRoute:()=>X}),Ud=Au.update({id:`/iam/(instance-profiles)/create-instance-profile`,path:`/iam/create-instance-profile`,getParentRoute:()=>X}),Wd=ju.update({id:`/iam/(policies)/create-policy`,path:`/iam/create-policy`,getParentRoute:()=>X}),Gd=Mu.update({id:`/iam/(roles)/create-role`,path:`/iam/create-role`,getParentRoute:()=>X}),Kd=Nu.update({id:`/iam/(users)/create-user`,path:`/iam/create-user`,getParentRoute:()=>X}),qd=Pu.update({id:`/rds/(db-instances)/create-db-instance`,path:`/rds/create-db-instance`,getParentRoute:()=>X}),Jd=Fu.update({id:`/rds/(parameter-groups)/create-db-parameter-group`,path:`/rds/create-db-parameter-group`,getParentRoute:()=>X}),Yd=Iu.update({id:`/rds/(subnet-groups)/create-db-subnet-group`,path:`/rds/create-db-subnet-group`,getParentRoute:()=>X}),Xd=Lu.update({id:`/s3/(buckets)/create-bucket`,path:`/s3/create-bucket`,getParentRoute:()=>X}),Zd=Ru.update({id:`/s3/ls/`,path:`/s3/ls/`,getParentRoute:()=>X}),Qd=zu.update({id:`/s3/ls/$bucket`,path:`/s3/ls/$bucket`,getParentRoute:()=>X}),$d=Bu.update({id:`/(catalog)/list-model-catalog/`,path:`/list-model-catalog/`,getParentRoute:()=>Z}),ef=Vu.update({id:`/(guardrails)/list-guardrails/`,path:`/list-guardrails/`,getParentRoute:()=>Z}),tf=Hu.update({id:`/(guardrails)/list-guardrails/create`,path:`/list-guardrails/create`,getParentRoute:()=>Z}),nf=Uu.update({id:`/(knowledge-bases)/list-knowledge-bases/`,path:`/list-knowledge-bases/`,getParentRoute:()=>Z}),rf=gr.update({id:`/(knowledge-bases)/list-knowledge-bases/$knowledgeBaseId`,path:`/list-knowledge-bases/$knowledgeBaseId`,getParentRoute:()=>Z}),af=Wu.update({id:`/(knowledge-bases)/list-knowledge-bases/create`,path:`/list-knowledge-bases/create`,getParentRoute:()=>Z}),of=Gu.update({id:`/(model-access)/list-model-access/`,path:`/list-model-access/`,getParentRoute:()=>Z}),sf=Ku.update({id:`/(playground)/playground/`,path:`/playground/`,getParentRoute:()=>Z}),cf=qu.update({id:`/ec2/(elastic-ips)/describe-addresses/`,path:`/ec2/describe-addresses/`,getParentRoute:()=>X}),lf=_r.update({id:`/ec2/(elastic-ips)/describe-addresses/$id`,path:`/ec2/describe-addresses/$id`,getParentRoute:()=>X}),uf=Ju.update({id:`/ec2/(images)/describe-images/`,path:`/ec2/describe-images/`,getParentRoute:()=>X}),df=vr.update({id:`/ec2/(images)/describe-images/$id`,path:`/ec2/describe-images/$id`,getParentRoute:()=>X}),ff=Yu.update({id:`/ec2/(instances)/describe-instances/`,path:`/ec2/describe-instances/`,getParentRoute:()=>X}),Q=yr.update({id:`/ec2/(instances)/describe-instances/$id`,path:`/ec2/describe-instances/$id`,getParentRoute:()=>X}),pf=Xu.update({id:`/ec2/(internet-gateways)/describe-internet-gateways/`,path:`/ec2/describe-internet-gateways/`,getParentRoute:()=>X}),mf=br.update({id:`/ec2/(internet-gateways)/describe-internet-gateways/$id`,path:`/ec2/describe-internet-gateways/$id`,getParentRoute:()=>X}),hf=Zu.update({id:`/ec2/(key)/describe-key-pairs/`,path:`/ec2/describe-key-pairs/`,getParentRoute:()=>X}),gf=xr.update({id:`/ec2/(key)/describe-key-pairs/$id`,path:`/ec2/describe-key-pairs/$id`,getParentRoute:()=>X}),_f=Qu.update({id:`/ec2/(launch-templates)/describe-launch-templates/`,path:`/ec2/describe-launch-templates/`,getParentRoute:()=>X}),vf=Sr.update({id:`/ec2/(launch-templates)/describe-launch-templates/$id`,path:`/ec2/describe-launch-templates/$id`,getParentRoute:()=>X}),yf=$u.update({id:`/ec2/(load-balancers)/describe-load-balancers/`,path:`/ec2/describe-load-balancers/`,getParentRoute:()=>X}),bf=Cr.update({id:`/ec2/(load-balancers)/describe-load-balancers/$id`,path:`/ec2/describe-load-balancers/$id`,getParentRoute:()=>X}),xf=K.update({id:`/ec2/(nat-gateways)/describe-nat-gateways/`,path:`/ec2/describe-nat-gateways/`,getParentRoute:()=>X}),Sf=wr.update({id:`/ec2/(nat-gateways)/describe-nat-gateways/$id`,path:`/ec2/describe-nat-gateways/$id`,getParentRoute:()=>X}),Cf=ed.update({id:`/ec2/(placement-groups)/describe-placement-groups/`,path:`/ec2/describe-placement-groups/`,getParentRoute:()=>X}),wf=Tr.update({id:`/ec2/(placement-groups)/describe-placement-groups/$id`,path:`/ec2/describe-placement-groups/$id`,getParentRoute:()=>X}),Tf=q.update({id:`/ec2/(route-tables)/describe-route-tables/`,path:`/ec2/describe-route-tables/`,getParentRoute:()=>X}),Ef=Er.update({id:`/ec2/(route-tables)/describe-route-tables/$id`,path:`/ec2/describe-route-tables/$id`,getParentRoute:()=>X}),Df=J.update({id:`/ec2/(security-groups)/describe-security-groups/`,path:`/ec2/describe-security-groups/`,getParentRoute:()=>X}),Of=dt.update({id:`/ec2/(security-groups)/describe-security-groups/$id`,path:`/ec2/describe-security-groups/$id`,getParentRoute:()=>X}),kf=Y.update({id:`/ec2/(snapshots)/describe-snapshots/`,path:`/ec2/describe-snapshots/`,getParentRoute:()=>X}),Af=ot.update({id:`/ec2/(snapshots)/describe-snapshots/$id`,path:`/ec2/describe-snapshots/$id`,getParentRoute:()=>X}),jf=td.update({id:`/ec2/(subnet)/describe-subnets/`,path:`/ec2/describe-subnets/`,getParentRoute:()=>X}),Mf=Dr.update({id:`/ec2/(subnet)/describe-subnets/$id`,path:`/ec2/describe-subnets/$id`,getParentRoute:()=>X}),Nf=nd.update({id:`/ec2/(target-groups)/describe-target-groups/`,path:`/ec2/describe-target-groups/`,getParentRoute:()=>X}),Pf=Or.update({id:`/ec2/(target-groups)/describe-target-groups/$id`,path:`/ec2/describe-target-groups/$id`,getParentRoute:()=>X}),Ff=rd.update({id:`/ec2/(volumes)/describe-volumes/`,path:`/ec2/describe-volumes/`,getParentRoute:()=>X}),If=kr.update({id:`/ec2/(volumes)/describe-volumes/$id`,path:`/ec2/describe-volumes/$id`,getParentRoute:()=>X}),Lf=Ar.update({id:`/ec2/(volumes)/modify-volume/$id`,path:`/ec2/modify-volume/$id`,getParentRoute:()=>X}),Rf=id.update({id:`/ec2/(vpc)/describe-vpcs/`,path:`/ec2/describe-vpcs/`,getParentRoute:()=>X}),zf=jr.update({id:`/ec2/(vpc)/describe-vpcs/$id`,path:`/ec2/describe-vpcs/$id`,getParentRoute:()=>X}),Bf=ad.update({id:`/ecr/(repositories)/list-repositories/`,path:`/ecr/list-repositories/`,getParentRoute:()=>X}),$=Mr.update({id:`/ecr/(repositories)/list-repositories/$id`,path:`/ecr/list-repositories/$id`,getParentRoute:()=>X}),Vf=od.update({id:`/ecs/(clusters)/list-clusters/`,path:`/ecs/list-clusters/`,getParentRoute:()=>X}),Hf=Nr.update({id:`/ecs/(clusters)/list-clusters/$clusterName`,path:`/ecs/list-clusters/$clusterName`,getParentRoute:()=>X}),Uf=sd.update({id:`/eks/(clusters)/list-clusters/`,path:`/eks/list-clusters/`,getParentRoute:()=>X}),Wf=lt.update({id:`/eks/(clusters)/list-clusters/$clusterName`,path:`/eks/list-clusters/$clusterName`,getParentRoute:()=>X}),Gf=cd.update({id:`/iam/(groups)/list-groups/`,path:`/iam/list-groups/`,getParentRoute:()=>X}),Kf=Pr.update({id:`/iam/(groups)/list-groups/$groupName`,path:`/iam/list-groups/$groupName`,getParentRoute:()=>X}),qf=ld.update({id:`/iam/(instance-profiles)/list-instance-profiles/`,path:`/iam/list-instance-profiles/`,getParentRoute:()=>X}),Jf=Fr.update({id:`/iam/(instance-profiles)/list-instance-profiles/$instanceProfileName`,path:`/iam/list-instance-profiles/$instanceProfileName`,getParentRoute:()=>X}),Yf=ud.update({id:`/iam/(policies)/list-policies/`,path:`/iam/list-policies/`,getParentRoute:()=>X}),Xf=Ir.update({id:`/iam/(policies)/list-policies/$policyArn`,path:`/iam/list-policies/$policyArn`,getParentRoute:()=>X}),Zf=dd.update({id:`/iam/(roles)/list-roles/`,path:`/iam/list-roles/`,getParentRoute:()=>X}),Qf=Lr.update({id:`/iam/(roles)/list-roles/$roleName`,path:`/iam/list-roles/$roleName`,getParentRoute:()=>X}),$f=fd.update({id:`/iam/(users)/list-users/`,path:`/iam/list-users/`,getParentRoute:()=>X}),ep=Rr.update({id:`/iam/(users)/list-users/$userName`,path:`/iam/list-users/$userName`,getParentRoute:()=>X}),tp=pd.update({id:`/rds/(db-instances)/describe-db-instances/`,path:`/rds/describe-db-instances/`,getParentRoute:()=>X}),np=zr.update({id:`/rds/(db-instances)/describe-db-instances/$id`,path:`/rds/describe-db-instances/$id`,getParentRoute:()=>X}),rp=md.update({id:`/rds/(parameter-groups)/describe-db-parameter-groups/`,path:`/rds/describe-db-parameter-groups/`,getParentRoute:()=>X}),ip=Br.update({id:`/rds/(parameter-groups)/describe-db-parameter-groups/$name`,path:`/rds/describe-db-parameter-groups/$name`,getParentRoute:()=>X}),ap=hd.update({id:`/rds/(snapshots)/describe-db-snapshots/`,path:`/rds/describe-db-snapshots/`,getParentRoute:()=>X}),op=Vr.update({id:`/rds/(snapshots)/describe-db-snapshots/$id`,path:`/rds/describe-db-snapshots/$id`,getParentRoute:()=>X}),sp=Hr.update({id:`/rds/(snapshots)/restore-db-instance-from-db-snapshot/$id`,path:`/rds/restore-db-instance-from-db-snapshot/$id`,getParentRoute:()=>X}),cp=gd.update({id:`/rds/(subnet-groups)/describe-db-subnet-groups/`,path:`/rds/describe-db-subnet-groups/`,getParentRoute:()=>X}),lp=Ur.update({id:`/rds/(subnet-groups)/describe-db-subnet-groups/$name`,path:`/rds/describe-db-subnet-groups/$name`,getParentRoute:()=>X}),up=Wr.update({id:`/`,path:`/`,getParentRoute:()=>Qd}),dp=Gr.update({id:`/$`,path:`/$`,getParentRoute:()=>Qd}),fp=Kr.update({id:`/(guardrails)/list-guardrails/$guardrailId/`,path:`/list-guardrails/$guardrailId/`,getParentRoute:()=>Z}),pp=qr.update({id:`/(guardrails)/list-guardrails/$guardrailId/edit`,path:`/list-guardrails/$guardrailId/edit`,getParentRoute:()=>Z}),mp=Jr.update({id:`/ecs/(clusters)/list-clusters/$clusterName_/services/$serviceName`,path:`/ecs/list-clusters/$clusterName/services/$serviceName`,getParentRoute:()=>X}),hp=Yr.update({id:`/ecs/(clusters)/list-clusters/$clusterName_/tasks/$taskId`,path:`/ecs/list-clusters/$clusterName/tasks/$taskId`,getParentRoute:()=>X}),gp={AuthBedrockguardrailsListGuardrailsCreateRoute:tf,AuthBedrockknowledgeBasesListKnowledgeBasesKnowledgeBaseIdRoute:rf,AuthBedrockknowledgeBasesListKnowledgeBasesCreateRoute:af,AuthBedrockcatalogListModelCatalogIndexRoute:$d,AuthBedrockguardrailsListGuardrailsIndexRoute:ef,AuthBedrockknowledgeBasesListKnowledgeBasesIndexRoute:nf,AuthBedrockmodelAccessListModelAccessIndexRoute:of,AuthBedrockplaygroundPlaygroundIndexRoute:sf,AuthBedrockguardrailsListGuardrailsGuardrailIdEditRoute:pp,AuthBedrockguardrailsListGuardrailsGuardrailIdIndexRoute:fp},_p=Z._addFileChildren(gp),vp={AuthS3LsBucketSplatRoute:dp,AuthS3LsBucketIndexRoute:up},yp={AuthBedrockRouteRoute:_p,AuthNodesRoute:yd,AuthIndexRoute:vd,AuthS3ServiceMetricsRoute:bd,AuthS3LsBucketRouteRoute:Qd._addFileChildren(vp),AuthEc2elasticIpsAllocateAddressRoute:xd,AuthEc2instancesRunInstancesRoute:Sd,AuthEc2internetGatewaysCreateInternetGatewayRoute:Cd,AuthEc2keyCreateKeyPairRoute:wd,AuthEc2keyImportKeyPairRoute:Td,AuthEc2launchTemplatesCreateLaunchTemplateRoute:Ed,AuthEc2loadBalancersCreateLoadBalancerRoute:Dd,AuthEc2natGatewaysCreateNatGatewayRoute:Od,AuthEc2placementGroupsCreatePlacementGroupRoute:kd,AuthEc2routeTablesCreateRouteTableRoute:Ad,AuthEc2securityGroupsCreateSecurityGroupRoute:jd,AuthEc2snapshotsCreateSnapshotRoute:Md,AuthEc2subnetCreateSubnetRoute:Nd,AuthEc2targetGroupsCreateTargetGroupRoute:Pd,AuthEc2volumesCreateVolumeRoute:Fd,AuthEc2vpcCreateVpcRoute:Id,AuthEcsclustersCreateServiceRoute:Ld,AuthEcsclustersRegisterTaskDefinitionRoute:Rd,AuthEcsclustersRunTaskRoute:zd,AuthEcsclustersTaskDefinitionsRoute:Bd,AuthEksclustersCreateClusterRoute:Vd,AuthIamgroupsCreateGroupRoute:Hd,AuthIaminstanceProfilesCreateInstanceProfileRoute:Ud,AuthIampoliciesCreatePolicyRoute:Wd,AuthIamrolesCreateRoleRoute:Gd,AuthIamusersCreateUserRoute:Kd,AuthRdsdbInstancesCreateDbInstanceRoute:qd,AuthRdsparameterGroupsCreateDbParameterGroupRoute:Jd,AuthRdssubnetGroupsCreateDbSubnetGroupRoute:Yd,AuthS3bucketsCreateBucketRoute:Xd,AuthS3LsIndexRoute:Zd,AuthEc2elasticIpsDescribeAddressesIdRoute:lf,AuthEc2imagesDescribeImagesIdRoute:df,AuthEc2instancesDescribeInstancesIdRoute:Q,AuthEc2internetGatewaysDescribeInternetGatewaysIdRoute:mf,AuthEc2keyDescribeKeyPairsIdRoute:gf,AuthEc2launchTemplatesDescribeLaunchTemplatesIdRoute:vf,AuthEc2loadBalancersDescribeLoadBalancersIdRoute:bf,AuthEc2natGatewaysDescribeNatGatewaysIdRoute:Sf,AuthEc2placementGroupsDescribePlacementGroupsIdRoute:wf,AuthEc2routeTablesDescribeRouteTablesIdRoute:Ef,AuthEc2securityGroupsDescribeSecurityGroupsIdRoute:Of,AuthEc2snapshotsDescribeSnapshotsIdRoute:Af,AuthEc2subnetDescribeSubnetsIdRoute:Mf,AuthEc2targetGroupsDescribeTargetGroupsIdRoute:Pf,AuthEc2volumesDescribeVolumesIdRoute:If,AuthEc2volumesModifyVolumeIdRoute:Lf,AuthEc2vpcDescribeVpcsIdRoute:zf,AuthEcrrepositoriesListRepositoriesIdRoute:$,AuthEcsclustersListClustersClusterNameRoute:Hf,AuthEksclustersListClustersClusterNameRoute:Wf,AuthIamgroupsListGroupsGroupNameRoute:Kf,AuthIaminstanceProfilesListInstanceProfilesInstanceProfileNameRoute:Jf,AuthIampoliciesListPoliciesPolicyArnRoute:Xf,AuthIamrolesListRolesRoleNameRoute:Qf,AuthIamusersListUsersUserNameRoute:ep,AuthRdsdbInstancesDescribeDbInstancesIdRoute:np,AuthRdsparameterGroupsDescribeDbParameterGroupsNameRoute:ip,AuthRdssnapshotsDescribeDbSnapshotsIdRoute:op,AuthRdssnapshotsRestoreDbInstanceFromDbSnapshotIdRoute:sp,AuthRdssubnetGroupsDescribeDbSubnetGroupsNameRoute:lp,AuthEc2elasticIpsDescribeAddressesIndexRoute:cf,AuthEc2imagesDescribeImagesIndexRoute:uf,AuthEc2instancesDescribeInstancesIndexRoute:ff,AuthEc2internetGatewaysDescribeInternetGatewaysIndexRoute:pf,AuthEc2keyDescribeKeyPairsIndexRoute:hf,AuthEc2launchTemplatesDescribeLaunchTemplatesIndexRoute:_f,AuthEc2loadBalancersDescribeLoadBalancersIndexRoute:yf,AuthEc2natGatewaysDescribeNatGatewaysIndexRoute:xf,AuthEc2placementGroupsDescribePlacementGroupsIndexRoute:Cf,AuthEc2routeTablesDescribeRouteTablesIndexRoute:Tf,AuthEc2securityGroupsDescribeSecurityGroupsIndexRoute:Df,AuthEc2snapshotsDescribeSnapshotsIndexRoute:kf,AuthEc2subnetDescribeSubnetsIndexRoute:jf,AuthEc2targetGroupsDescribeTargetGroupsIndexRoute:Nf,AuthEc2volumesDescribeVolumesIndexRoute:Ff,AuthEc2vpcDescribeVpcsIndexRoute:Rf,AuthEcrrepositoriesListRepositoriesIndexRoute:Bf,AuthEcsclustersListClustersIndexRoute:Vf,AuthEksclustersListClustersIndexRoute:Uf,AuthIamgroupsListGroupsIndexRoute:Gf,AuthIaminstanceProfilesListInstanceProfilesIndexRoute:qf,AuthIampoliciesListPoliciesIndexRoute:Yf,AuthIamrolesListRolesIndexRoute:Zf,AuthIamusersListUsersIndexRoute:$f,AuthRdsdbInstancesDescribeDbInstancesIndexRoute:tp,AuthRdsparameterGroupsDescribeDbParameterGroupsIndexRoute:rp,AuthRdssnapshotsDescribeDbSnapshotsIndexRoute:ap,AuthRdssubnetGroupsDescribeDbSubnetGroupsIndexRoute:cp,AuthEcsclustersListClustersClusterNameServicesServiceNameRoute:mp,AuthEcsclustersListClustersClusterNameTasksTaskIdRoute:hp},bp={AuthRouteRoute:X._addFileChildren(yp),LoginRoute:_d},xp=su._addFileChildren(bp)._addFileTypes(),Sp=tu(),Cp=Wo({routeTree:xp,context:{queryClient:Sp},defaultPreload:`intent`,scrollRestoration:!0,defaultStructuralSharing:!0,defaultPreloadStaleTime:0});async function wp(e){try{await Ye()}catch(t){e.render((0,B.jsxs)(`div`,{style:{fontFamily:`sans-serif`,margin:`4rem auto`,maxWidth:`40rem`},children:[(0,B.jsx)(`h1`,{children:`Console unavailable`}),(0,B.jsx)(`p`,{children:`This cluster did not report its region, so the console cannot sign requests. Check that the serving node has a region set in its configuration.`}),(0,B.jsx)(`pre`,{children:t instanceof Error?t.message:String(t)})]}));return}e.render((0,B.jsx)(z.StrictMode,{children:(0,B.jsx)(ss,{defaultTheme:`dark`,storageKey:`spinifex-ui-theme`,children:(0,B.jsx)(p,{client:Sp,children:(0,B.jsx)(Tn,{children:(0,B.jsx)(Il,{children:(0,B.jsx)(qo,{router:Cp})})})})})}))}var Tp=document.querySelector(`#app`);Tp&&!Tp.innerHTML&&await wp(is.createRoot(Tp)); \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DrrD6hYC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DrrD6hYC.js deleted file mode 100644 index 7cf3601f4..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DrrD6hYC.js +++ /dev/null @@ -1 +0,0 @@ -import"./awsClient-b0hcP1Iz.js";import{r as e,t}from"./index.browser-C3WbWNjZ.js";export{t as EventStreamSerde,e as eventStreamSerdeProvider}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-C3WbWNjZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DuXQj3EI.js similarity index 99% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-C3WbWNjZ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DuXQj3EI.js index 8bf8ff643..3d78c1d6b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-C3WbWNjZ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DuXQj3EI.js @@ -1 +1 @@ -import{a as e,i as t,n,o as r,r as i,t as a}from"./hex-encoding-B19xAT_7.js";var o=new Uint32Array(256);for(let e=0;e<256;++e){let t=e;for(let e=0;e<8;++e)t=t&1?3988292384^t>>>1:t>>>1;o[e]=t>>>0}var s=4294967295,c=class{digestLength=4;checksum=s;update(e){for(let t=0;t>>8^o[(this.checksum^e[t])&255]}digestSync(){return(this.checksum^s)>>>0}async digest(){let e=this.digestSync(),t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!1),t}reset(){this.checksum=s}},l=class e{bytes;constructor(e){if(this.bytes=e,e.byteLength!==8)throw Error(`Int64 buffers must be exactly 8 bytes`)}static fromNumber(t){if(t>0x8000000000000000||t<-0x8000000000000000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let n=new Uint8Array(8);for(let e=7,r=Math.abs(Math.round(t));e>-1&&r>0;e--,r/=256)n[e]=r;return t<0&&u(n),new e(n)}valueOf(){let e=this.bytes.slice(0),t=e[0]&128;return t&&u(e),parseInt(n(e),16)*(t?-1:1)}toString(){return String(this.valueOf())}};function u(e){for(let t=0;t<8;t++)e[t]^=255;for(let t=7;t>-1&&(e[t]++,e[t]===0);t--);}var d=class{toUtf8;fromUtf8;constructor(e,t){this.toUtf8=e,this.fromUtf8=t}format(e){let t=[];for(let n in e){if(!r(e,n))continue;let i=this.fromUtf8(n);t.push(Uint8Array.from([i.byteLength]),i,this.formatHeaderValue(e[n]))}let n=new Uint8Array(t.reduce((e,t)=>e+t.byteLength,0)),i=0;for(let e of t)n.set(e,i),i+=e.byteLength;return n}formatHeaderValue(e){switch(e.type){case`boolean`:return Uint8Array.from([+!e.value]);case`byte`:return Uint8Array.from([2,e.value]);case`short`:let t=new DataView(new ArrayBuffer(3));return t.setUint8(0,3),t.setInt16(1,e.value,!1),new Uint8Array(t.buffer);case`integer`:let n=new DataView(new ArrayBuffer(5));return n.setUint8(0,4),n.setInt32(1,e.value,!1),new Uint8Array(n.buffer);case`long`:let r=new Uint8Array(9);return r[0]=5,r.set(e.value.bytes,1),r;case`binary`:let i=new DataView(new ArrayBuffer(3+e.value.byteLength));i.setUint8(0,6),i.setUint16(1,e.value.byteLength,!1);let o=new Uint8Array(i.buffer);return o.set(e.value,3),o;case`string`:let s=this.fromUtf8(e.value),c=new DataView(new ArrayBuffer(3+s.byteLength));c.setUint8(0,7),c.setUint16(1,s.byteLength,!1);let u=new Uint8Array(c.buffer);return u.set(s,3),u;case`timestamp`:let d=new Uint8Array(9);return d[0]=8,d.set(l.fromNumber(e.value.valueOf()).bytes,1),d;case`uuid`:if(!S.test(e.value))throw Error(`Invalid UUID received: ${e.value}`);let f=new Uint8Array(17);return f[0]=9,f.set(a(e.value.replace(/-/g,``)),1),f}}parse(e){let t={},r=0;for(;r{if(typeof e!=`number`)throw Error(`Attempted to allocate an event message where size was not a number: `+e);t=e,n=4,r=new Uint8Array(e),new DataView(r.buffer).setUint32(0,e,!1)},o=async function*(){let o=e[Symbol.asyncIterator]();for(;;){let{value:e,done:s}=await o.next();if(s){if(!t)return;if(t===n)yield r;else throw Error(`Truncated event message received.`);return}let c=e.length,l=0;for(;l({[Symbol.asyncIterator]:async function*(){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}}}),L=e=>{let t=e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let{done:n,value:r}=await t.next();if(n)return e.close();e.enqueue(r)}})},R=class{universalMarshaller;constructor({utf8Encoder:e,utf8Decoder:t}){this.universalMarshaller=new F({utf8Decoder:t,utf8Encoder:e})}deserialize(e,t){let n=z(e)?I(e):e;return this.universalMarshaller.deserialize(n,t)}serialize(e,t){let n=this.universalMarshaller.serialize(e,t);return typeof ReadableStream==`function`?L(n):n}},z=e=>typeof ReadableStream==`function`&&e instanceof ReadableStream,B=e=>new R(e),V=class{marshaller;serializer;deserializer;serdeContext;defaultContentType;compositeErrorRegistry;constructor({marshaller:e,serializer:t,deserializer:n,serdeContext:r,defaultContentType:i,compositeErrorRegistry:a}){this.marshaller=e,this.serializer=t,this.deserializer=n,this.serdeContext=r,this.defaultContentType=i,this.compositeErrorRegistry=a}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n,initialMessageType:i}){let a=this.marshaller,o=t.getEventStreamMember(),s=t.getMemberSchema(o),c=this.serializer,l=this.defaultContentType,u=Symbol(`initialRequestMarker`),d={async*[Symbol.asyncIterator](){if(n){let e={":event-type":{type:`string`,value:i??`initial-request`},":message-type":{type:`string`,value:`event`},":content-type":{type:`string`,value:l}};c.write(t,n);let r=c.flush();yield{[u]:!0,headers:e,body:r}}for await(let t of e)yield t}};return a.serialize(d,e=>{if(e[u])return{headers:e.headers,body:e.body};let t=``;for(let n in e)if(r(e,n)&&n!==`__type`){t=n;break}let{additionalHeaders:n,body:i,eventType:a,explicitPayloadContentType:o}=this.writeEventBody(t,s,e);return{headers:{":event-type":{type:`string`,value:a},":message-type":{type:`string`,value:`event`},":content-type":{type:`string`,value:o??l},...n},body:i}})}async deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n,initialMessageType:a}){let o=this.marshaller,s=t.getEventStreamMember(),c=t.getMemberSchema(s).getMemberSchemas(),l=Symbol(`initialResponseMarker`),u=o.deserialize(e.body,async e=>{let n=``;for(let t in e)if(r(e,t)&&t!==`__type`){n=t;break}let o=e[n].body;if(n===(a??`initial-response`)){let e=await this.deserializer.read(t,o);return delete e[s],{[l]:!0,...e}}if(n in c){let t=c[n];if(t.isStructSchema()){let r={},a=!1;for(let[s,c]of t.structIterator()){let{eventHeader:t,eventPayload:l}=c.getMergedTraits();if(a||=!!(t||l),l)c.isBlobSchema()?r[s]=o:c.isStringSchema()?r[s]=(this.serdeContext?.utf8Encoder??i)(o):c.isStructSchema()&&(r[s]=await this.deserializer.read(c,o));else if(t){let t=e[n].headers[s]?.value;t!=null&&(r[s]=c.isNumericSchema()?t&&typeof t==`object`&&`bytes`in t?BigInt(t.toString()):Number(t):t)}}return{[n]:await this.readEventMember(t,o,a,r)}}return{[n]:await this.deserializer.read(t,o)}}return{$unknown:e}}),d=u[Symbol.asyncIterator](),f=await d.next();if(f.done)return u;if(f.value?.[l]){if(!t)throw Error(`@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.`);for(let e in f.value)r(f.value,e)&&(n[e]=f.value[e])}return{async*[Symbol.asyncIterator](){for(f?.value?.[l]||(yield f.value);;){let{done:e,value:t}=await d.next();if(e)break;yield t}}}}async readEventMember(t,n,r,i){let a,o=t.getSchema();if(Array.isArray(o)&&o[0]===-3){let t=o[1],n=e.for(t);this.compositeErrorRegistry?.copyFrom(n),a=(this.compositeErrorRegistry??n)?.getErrorCtor(o)}let s=r?i:n.byteLength===0?{}:await this.deserializer.read(t,n);if(a){let e=s.message??s.Message??`Unknown`,n={},r=t.getMergedTraits().error;return r&&(n.$fault=r),Object.assign(new a({}),n,{message:e},s)}return s}writeEventBody(e,n,r){let i=this.serializer,a=e,o=null,s,c=n.getSchema()[4].includes(e),l={};if(c){let t=n.getMemberSchema(e);if(t.isStructSchema()){for(let[n,i]of t.structIterator()){let{eventHeader:t,eventPayload:a}=i.getMergedTraits();if(a)o=n;else if(t){let t=r[e][n],a=`binary`;i.isNumericSchema()?a=(-2)**31<=t&&t<=2**31-1?`integer`:`long`:i.isTimestampSchema()?a=`timestamp`:i.isStringSchema()?a=`string`:i.isBooleanSchema()&&(a=`boolean`),t!=null&&(l[n]={type:a,value:t},delete r[e][n])}}if(o!==null){let n=t.getMemberSchema(o);n.isBlobSchema()?s=`application/octet-stream`:n.isStringSchema()&&(s=`text/plain`),i.write(n,r[e][o])}else i.write(t,r[e])}else if(t.isUnitSchema())i.write(t,{});else throw Error(`@smithy/core/event-streams - non-struct member not supported in event stream union.`)}else{let[t,n]=r[e];a=t,i.write(15,n)}let u=i.flush()??new Uint8Array;return{body:typeof u==`string`?(this.serdeContext?.utf8Decoder??t)(u):u,eventType:a,explicitPayloadContentType:s,additionalHeaders:l}}};export{I as a,N as c,A as d,k as f,c as g,l as h,L as i,M as l,d as m,R as n,F as o,O as p,B as r,P as s,V as t,j as u}; \ No newline at end of file +import{a as e,i as t,n,o as r,r as i,t as a}from"./hex-encoding-CVnQo5PF.js";var o=new Uint32Array(256);for(let e=0;e<256;++e){let t=e;for(let e=0;e<8;++e)t=t&1?3988292384^t>>>1:t>>>1;o[e]=t>>>0}var s=4294967295,c=class{digestLength=4;checksum=s;update(e){for(let t=0;t>>8^o[(this.checksum^e[t])&255]}digestSync(){return(this.checksum^s)>>>0}async digest(){let e=this.digestSync(),t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!1),t}reset(){this.checksum=s}},l=class e{bytes;constructor(e){if(this.bytes=e,e.byteLength!==8)throw Error(`Int64 buffers must be exactly 8 bytes`)}static fromNumber(t){if(t>0x8000000000000000||t<-0x8000000000000000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let n=new Uint8Array(8);for(let e=7,r=Math.abs(Math.round(t));e>-1&&r>0;e--,r/=256)n[e]=r;return t<0&&u(n),new e(n)}valueOf(){let e=this.bytes.slice(0),t=e[0]&128;return t&&u(e),parseInt(n(e),16)*(t?-1:1)}toString(){return String(this.valueOf())}};function u(e){for(let t=0;t<8;t++)e[t]^=255;for(let t=7;t>-1&&(e[t]++,e[t]===0);t--);}var d=class{toUtf8;fromUtf8;constructor(e,t){this.toUtf8=e,this.fromUtf8=t}format(e){let t=[];for(let n in e){if(!r(e,n))continue;let i=this.fromUtf8(n);t.push(Uint8Array.from([i.byteLength]),i,this.formatHeaderValue(e[n]))}let n=new Uint8Array(t.reduce((e,t)=>e+t.byteLength,0)),i=0;for(let e of t)n.set(e,i),i+=e.byteLength;return n}formatHeaderValue(e){switch(e.type){case`boolean`:return Uint8Array.from([+!e.value]);case`byte`:return Uint8Array.from([2,e.value]);case`short`:let t=new DataView(new ArrayBuffer(3));return t.setUint8(0,3),t.setInt16(1,e.value,!1),new Uint8Array(t.buffer);case`integer`:let n=new DataView(new ArrayBuffer(5));return n.setUint8(0,4),n.setInt32(1,e.value,!1),new Uint8Array(n.buffer);case`long`:let r=new Uint8Array(9);return r[0]=5,r.set(e.value.bytes,1),r;case`binary`:let i=new DataView(new ArrayBuffer(3+e.value.byteLength));i.setUint8(0,6),i.setUint16(1,e.value.byteLength,!1);let o=new Uint8Array(i.buffer);return o.set(e.value,3),o;case`string`:let s=this.fromUtf8(e.value),c=new DataView(new ArrayBuffer(3+s.byteLength));c.setUint8(0,7),c.setUint16(1,s.byteLength,!1);let u=new Uint8Array(c.buffer);return u.set(s,3),u;case`timestamp`:let d=new Uint8Array(9);return d[0]=8,d.set(l.fromNumber(e.value.valueOf()).bytes,1),d;case`uuid`:if(!S.test(e.value))throw Error(`Invalid UUID received: ${e.value}`);let f=new Uint8Array(17);return f[0]=9,f.set(a(e.value.replace(/-/g,``)),1),f}}parse(e){let t={},r=0;for(;r{if(typeof e!=`number`)throw Error(`Attempted to allocate an event message where size was not a number: `+e);t=e,n=4,r=new Uint8Array(e),new DataView(r.buffer).setUint32(0,e,!1)},o=async function*(){let o=e[Symbol.asyncIterator]();for(;;){let{value:e,done:s}=await o.next();if(s){if(!t)return;if(t===n)yield r;else throw Error(`Truncated event message received.`);return}let c=e.length,l=0;for(;l({[Symbol.asyncIterator]:async function*(){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}}}),L=e=>{let t=e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let{done:n,value:r}=await t.next();if(n)return e.close();e.enqueue(r)}})},R=class{universalMarshaller;constructor({utf8Encoder:e,utf8Decoder:t}){this.universalMarshaller=new F({utf8Decoder:t,utf8Encoder:e})}deserialize(e,t){let n=z(e)?I(e):e;return this.universalMarshaller.deserialize(n,t)}serialize(e,t){let n=this.universalMarshaller.serialize(e,t);return typeof ReadableStream==`function`?L(n):n}},z=e=>typeof ReadableStream==`function`&&e instanceof ReadableStream,B=e=>new R(e),V=class{marshaller;serializer;deserializer;serdeContext;defaultContentType;compositeErrorRegistry;constructor({marshaller:e,serializer:t,deserializer:n,serdeContext:r,defaultContentType:i,compositeErrorRegistry:a}){this.marshaller=e,this.serializer=t,this.deserializer=n,this.serdeContext=r,this.defaultContentType=i,this.compositeErrorRegistry=a}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:n,initialMessageType:i}){let a=this.marshaller,o=t.getEventStreamMember(),s=t.getMemberSchema(o),c=this.serializer,l=this.defaultContentType,u=Symbol(`initialRequestMarker`),d={async*[Symbol.asyncIterator](){if(n){let e={":event-type":{type:`string`,value:i??`initial-request`},":message-type":{type:`string`,value:`event`},":content-type":{type:`string`,value:l}};c.write(t,n);let r=c.flush();yield{[u]:!0,headers:e,body:r}}for await(let t of e)yield t}};return a.serialize(d,e=>{if(e[u])return{headers:e.headers,body:e.body};let t=``;for(let n in e)if(r(e,n)&&n!==`__type`){t=n;break}let{additionalHeaders:n,body:i,eventType:a,explicitPayloadContentType:o}=this.writeEventBody(t,s,e);return{headers:{":event-type":{type:`string`,value:a},":message-type":{type:`string`,value:`event`},":content-type":{type:`string`,value:o??l},...n},body:i}})}async deserializeEventStream({response:e,responseSchema:t,initialResponseContainer:n,initialMessageType:a}){let o=this.marshaller,s=t.getEventStreamMember(),c=t.getMemberSchema(s).getMemberSchemas(),l=Symbol(`initialResponseMarker`),u=o.deserialize(e.body,async e=>{let n=``;for(let t in e)if(r(e,t)&&t!==`__type`){n=t;break}let o=e[n].body;if(n===(a??`initial-response`)){let e=await this.deserializer.read(t,o);return delete e[s],{[l]:!0,...e}}if(n in c){let t=c[n];if(t.isStructSchema()){let r={},a=!1;for(let[s,c]of t.structIterator()){let{eventHeader:t,eventPayload:l}=c.getMergedTraits();if(a||=!!(t||l),l)c.isBlobSchema()?r[s]=o:c.isStringSchema()?r[s]=(this.serdeContext?.utf8Encoder??i)(o):c.isStructSchema()&&(r[s]=await this.deserializer.read(c,o));else if(t){let t=e[n].headers[s]?.value;t!=null&&(r[s]=c.isNumericSchema()?t&&typeof t==`object`&&`bytes`in t?BigInt(t.toString()):Number(t):t)}}return{[n]:await this.readEventMember(t,o,a,r)}}return{[n]:await this.deserializer.read(t,o)}}return{$unknown:e}}),d=u[Symbol.asyncIterator](),f=await d.next();if(f.done)return u;if(f.value?.[l]){if(!t)throw Error(`@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.`);for(let e in f.value)r(f.value,e)&&(n[e]=f.value[e])}return{async*[Symbol.asyncIterator](){for(f?.value?.[l]||(yield f.value);;){let{done:e,value:t}=await d.next();if(e)break;yield t}}}}async readEventMember(t,n,r,i){let a,o=t.getSchema();if(Array.isArray(o)&&o[0]===-3){let t=o[1],n=e.for(t);this.compositeErrorRegistry?.copyFrom(n),a=(this.compositeErrorRegistry??n)?.getErrorCtor(o)}let s=r?i:n.byteLength===0?{}:await this.deserializer.read(t,n);if(a){let e=s.message??s.Message??`Unknown`,n={},r=t.getMergedTraits().error;return r&&(n.$fault=r),Object.assign(new a({}),n,{message:e},s)}return s}writeEventBody(e,n,r){let i=this.serializer,a=e,o=null,s,c=n.getSchema()[4].includes(e),l={};if(c){let t=n.getMemberSchema(e);if(t.isStructSchema()){for(let[n,i]of t.structIterator()){let{eventHeader:t,eventPayload:a}=i.getMergedTraits();if(a)o=n;else if(t){let t=r[e][n],a=`binary`;i.isNumericSchema()?a=(-2)**31<=t&&t<=2**31-1?`integer`:`long`:i.isTimestampSchema()?a=`timestamp`:i.isStringSchema()?a=`string`:i.isBooleanSchema()&&(a=`boolean`),t!=null&&(l[n]={type:a,value:t},delete r[e][n])}}if(o!==null){let n=t.getMemberSchema(o);n.isBlobSchema()?s=`application/octet-stream`:n.isStringSchema()&&(s=`text/plain`),i.write(n,r[e][o])}else i.write(t,r[e])}else if(t.isUnitSchema())i.write(t,{});else throw Error(`@smithy/core/event-streams - non-struct member not supported in event stream union.`)}else{let[t,n]=r[e];a=t,i.write(15,n)}let u=i.flush()??new Uint8Array;return{body:typeof u==`string`?(this.serdeContext?.utf8Decoder??t)(u):u,eventType:a,explicitPayloadContentType:s,additionalHeaders:l}}};export{I as a,N as c,A as d,k as f,c as g,l as h,L as i,M as l,d as m,R as n,F as o,O as p,B as r,P as s,V as t,j as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DulSzCmu.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DulSzCmu.js new file mode 100644 index 000000000..1624202a5 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/index.browser-DulSzCmu.js @@ -0,0 +1 @@ +import"./awsClient-Cqp6x3OY.js";import{r as e,t}from"./index.browser-DuXQj3EI.js";export{t as EventStreamSerde,e as eventStreamSerdeProvider}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-CppMS52c.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-Bd1RyDcb.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-CppMS52c.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-Bd1RyDcb.js index b8ea5eeae..bfb149cd8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-CppMS52c.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/inline-policies-panel-Bd1RyDcb.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./button-BarTr35m.js";import{t as s}from"./input-6kdUb_DH.js";import{C as c,E as l,S as u,T as d,a as f,b as p,i as m,m as h,r as g,v as _,w as v,x as y}from"./iam-CKOkzDco.js";import{_ as b,a as x,b as S,g as C,i as w,n as T,o as E,p as D,r as O,x as k}from"./iam-CVg27y22.js";import{r as A}from"./json-DsgWHaZY.js";import{t as j}from"./error-banner-DeOeVBKS.js";import{r as M,s as N,t as P}from"./field-c7GHI5st.js";import{t as F}from"./delete-confirmation-dialog-SdDN4LiF.js";import{n as I}from"./detail-row-DNBRlVeK.js";import{t as L}from"./json-editor-Bwbz8mfn.js";import{s as R}from"./iam-Cgrr-Iit.js";var z=t(n(),1),B=e();function V(e,t){return{run:async n=>await e.mutateAsync(t(n)),error:e.error}}function H({kind:e,name:t}){let n=f(),r=m(),i=g(),s=c(),l=u(),d=y(),{listQuery:p,attach:h,detach:_}={user:{listQuery:w,attach:V(n,e=>({userName:t,policyArn:e})),detach:V(s,e=>({userName:t,policyArn:e}))},role:{listQuery:O,attach:V(r,e=>({roleName:t,policyArn:e})),detach:V(l,e=>({roleName:t,policyArn:e}))},group:{listQuery:T,attach:V(i,e=>({groupName:t,policyArn:e})),detach:V(d,e=>({groupName:t,policyArn:e}))}}[e],{data:v}=a(p(t)),{data:b}=a(D),[x,S]=(0,z.useState)(!1),[C,E]=(0,z.useState)(null),k=v.AttachedPolicies??[],A=b.Policies??[],M=new Set(k.map(e=>e.PolicyArn)),N=A.filter(e=>e.Arn&&!M.has(e.Arn)),P=async e=>{E(e);try{await h.run(e),S(!1)}catch{}finally{E(null)}},F=async e=>{E(e);try{await _.run(e)}catch{}finally{E(null)}};return(0,B.jsxs)(I,{children:[(0,B.jsx)(I.Header,{children:(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{children:`Attached Policies`}),(0,B.jsx)(o,{onClick:()=>{S(!x)},size:`sm`,children:`Attach Policy`})]})}),(0,B.jsxs)(I.Content,{children:[h.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:h.error,msg:`Failed to attach policy`})}),_.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:_.error,msg:`Failed to detach policy`})}),x&&N.length>0&&(0,B.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a policy to attach:`}),(0,B.jsx)(`div`,{className:`space-y-1`,children:N.map(e=>(0,B.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:C===e.Arn,onClick:()=>{e.Arn&&P(e.Arn)},type:`button`,children:[(0,B.jsx)(`span`,{children:e.PolicyName}),(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.Arn))})]}),x&&N.length===0&&(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No policies available to attach.`}),k.length>0?(0,B.jsx)(`div`,{className:`col-span-2 space-y-3`,children:k.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:e.PolicyName}),(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.PolicyArn})]}),(0,B.jsx)(o,{disabled:C===e.PolicyArn,onClick:()=>{e.PolicyArn&&F(e.PolicyArn)},size:`sm`,variant:`outline`,children:`Detach`})]},e.PolicyArn))}):(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No attached policies.`})]})]})}var U=r(),W=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Action:`*`,Resource:`*`}]},null,2);function G({kind:e,name:t}){let n=l(),r=d(),i=v(),s=p(),c=_(),u=h(),{listQuery:f,policyQuery:m,put:g,remove:y}={user:{listQuery:S,policyQuery:k,put:n,remove:s},role:{listQuery:C,policyQuery:b,put:r,remove:c},group:{listQuery:x,policyQuery:E,put:i,remove:u}}[e],{data:w}=a(f(t)),T=w.PolicyNames??[],[D,O]=(0,z.useState)(!1),[A,M]=(0,z.useState)(null),[N,P]=(0,z.useState)(null),L=async()=>{if(!N)return;let e=N;try{await y.mutateAsync({name:t,policyName:e}),A===e&&M(null)}finally{P(null)}};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(I,{children:[(0,B.jsx)(I.Header,{children:(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{children:`Inline Policies`}),(0,B.jsx)(o,{onClick:()=>{O(e=>!e),M(null)},size:`sm`,children:`Add Inline Policy`})]})}),(0,B.jsxs)(I.Content,{children:[y.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:y.error,msg:`Failed to delete inline policy`})}),D&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(K,{name:t,onClose:()=>{O(!1)},put:g})}),T.length>0?(0,B.jsx)(`div`,{className:`col-span-2 space-y-3`,children:T.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between p-3`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:e}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(o,{onClick:()=>{M(t=>t===e?null:e)},size:`sm`,variant:`outline`,children:A===e?`Close`:`Edit`}),(0,B.jsx)(o,{onClick:()=>{P(e)},size:`sm`,variant:`destructive`,children:`Delete`})]})]}),A===e&&(0,B.jsx)(`div`,{className:`border-t p-3`,children:(0,B.jsx)(J,{name:t,onClose:()=>{M(null)},policyName:e,put:g,queryOptions:m(t,e)})})]},e))}):!D&&(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No inline policies.`})]})]}),(0,B.jsx)(F,{description:`Are you sure you want to delete the inline policy "${N??``}"? This action cannot be undone.`,isPending:y.isPending,onConfirm:()=>{L()},onOpenChange:e=>{e||P(null)},open:N!==null,title:`Delete Inline Policy`})]})}function K(e){let t=(0,U.c)(50),{name:n,put:r,onClose:i}=e,[a,c]=(0,z.useState)(``),[l,u]=(0,z.useState)(W),d,f;t[0]!==l||t[1]!==a?(d=R.safeParse({policyName:a,policyDocument:l}),f=d.success?void 0:d.error.issues.find(q),t[0]=l,t[1]=a,t[2]=d,t[3]=f):(d=t[2],f=t[3]);let p=f,m;t[4]!==p||t[5]!==a?(m=a.trim().length>0&&!!p,t[4]=p,t[5]=a,t[6]=m):m=t[6];let h=m,g;t[7]===l?g=t[8]:(g=l.trim().length>0&&!A(l),t[7]=l,t[8]=g);let _=g,v;t[9]!==l||t[10]!==n||t[11]!==i||t[12]!==a||t[13]!==r?(v=async()=>{try{await r.mutateAsync({name:n,policyName:a,policyDocument:l}),i()}catch{}},t[9]=l,t[10]=n,t[11]=i,t[12]=a,t[13]=r,t[14]=v):v=t[14];let y=v,b;t[15]===r.error?b=t[16]:(b=r.error&&(0,B.jsx)(j,{error:r.error,msg:`Failed to add inline policy`}),t[15]=r.error,t[16]=b);let x;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,B.jsx)(N,{children:(0,B.jsx)(`label`,{htmlFor:`inline-policy-name`,children:`Policy name`})}),t[17]=x):x=t[17];let S;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>{c(e.target.value)},t[18]=S):S=t[18];let C;t[19]!==a||t[20]!==h?(C=(0,B.jsx)(s,{"aria-invalid":h,id:`inline-policy-name`,onChange:S,placeholder:`my-inline-policy`,value:a}),t[19]=a,t[20]=h,t[21]=C):C=t[21];let w;t[22]!==p?.message||t[23]!==h?(w=h&&(0,B.jsx)(M,{errors:[{message:p?.message}]}),t[22]=p?.message,t[23]=h,t[24]=w):w=t[24];let T;t[25]!==C||t[26]!==w?(T=(0,B.jsxs)(P,{children:[x,C,w]}),t[25]=C,t[26]=w,t[27]=T):T=t[27];let E;t[28]!==l||t[29]!==_?(E=(0,B.jsx)(L,{className:`text-xs`,error:_,onChange:u,rows:12,value:l}),t[28]=l,t[29]=_,t[30]=E):E=t[30];let D;t[31]===_?D=t[32]:(D=_&&(0,B.jsx)(`p`,{className:`text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[31]=_,t[32]=D);let O;t[33]===i?O=t[34]:(O=(0,B.jsx)(o,{onClick:i,size:`sm`,variant:`outline`,children:`Cancel`}),t[33]=i,t[34]=O);let k=!d.success||r.isPending,F;t[35]===y?F=t[36]:(F=()=>{y()},t[35]=y,t[36]=F);let I=r.isPending?`Saving…`:`Save`,V;t[37]!==k||t[38]!==F||t[39]!==I?(V=(0,B.jsx)(o,{disabled:k,onClick:F,size:`sm`,children:I}),t[37]=k,t[38]=F,t[39]=I,t[40]=V):V=t[40];let H;t[41]!==O||t[42]!==V?(H=(0,B.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[O,V]}),t[41]=O,t[42]=V,t[43]=H):H=t[43];let G;return t[44]!==T||t[45]!==E||t[46]!==D||t[47]!==H||t[48]!==b?(G=(0,B.jsxs)(`div`,{className:`space-y-3 rounded-md border p-3`,children:[b,T,E,D,H]}),t[44]=T,t[45]=E,t[46]=D,t[47]=H,t[48]=b,t[49]=G):G=t[49],G}function q(e){return e.path[0]===`policyName`}function J(e){let t=(0,U.c)(37),{name:n,policyName:r,queryOptions:a,put:s,onClose:c}=e,{data:l,isLoading:u,error:d}=i(a),[f,p]=(0,z.useState)(l??``),[m,h]=(0,z.useState)(l);l!==m&&(h(l),p(l??``));let g;t[0]===f?g=t[1]:(g=f.trim(),t[0]=f,t[1]=g);let _=g,v;t[2]!==f||t[3]!==_.length?(v=_.length>0&&!A(f),t[2]=f,t[3]=_.length,t[4]=v):v=t[4];let y=v,b;t[5]!==f||t[6]!==n||t[7]!==c||t[8]!==r||t[9]!==s?(b=async()=>{try{await s.mutateAsync({name:n,policyName:r,policyDocument:f}),c()}catch{}},t[5]=f,t[6]=n,t[7]=c,t[8]=r,t[9]=s,t[10]=b):b=t[10];let x=b;if(u){let e;return t[11]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`}),t[11]=e):e=t[11],e}if(d){let e;return t[12]===d?e=t[13]:(e=(0,B.jsx)(j,{error:d,msg:`Failed to load inline policy`}),t[12]=d,t[13]=e),e}let S;t[14]===s.error?S=t[15]:(S=s.error&&(0,B.jsx)(j,{error:s.error,msg:`Failed to update inline policy`}),t[14]=s.error,t[15]=S);let C;t[16]!==f||t[17]!==y?(C=(0,B.jsx)(L,{className:`text-xs`,error:y,onChange:p,rows:12,value:f}),t[16]=f,t[17]=y,t[18]=C):C=t[18];let w;t[19]===y?w=t[20]:(w=y&&(0,B.jsx)(`p`,{className:`text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[19]=y,t[20]=w);let T;t[21]===c?T=t[22]:(T=(0,B.jsx)(o,{onClick:c,size:`sm`,variant:`outline`,children:`Cancel`}),t[21]=c,t[22]=T);let E=s.isPending||_.length===0||y,D;t[23]===x?D=t[24]:(D=()=>{x()},t[23]=x,t[24]=D);let O=s.isPending?`Saving…`:`Save`,k;t[25]!==O||t[26]!==E||t[27]!==D?(k=(0,B.jsx)(o,{disabled:E,onClick:D,size:`sm`,children:O}),t[25]=O,t[26]=E,t[27]=D,t[28]=k):k=t[28];let M;t[29]!==k||t[30]!==T?(M=(0,B.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[T,k]}),t[29]=k,t[30]=T,t[31]=M):M=t[31];let N;return t[32]!==M||t[33]!==S||t[34]!==C||t[35]!==w?(N=(0,B.jsxs)(`div`,{className:`space-y-3`,children:[S,C,w,M]}),t[32]=M,t[33]=S,t[34]=C,t[35]=w,t[36]=N):N=t[36],N}export{H as n,G as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./button-qf9lLJ2x.js";import{t as s}from"./input-D3aUBtS6.js";import{C as c,E as l,S as u,T as d,a as f,b as p,i as m,m as h,r as g,v as _,w as v,x as y}from"./iam-DpkrYySm.js";import{_ as b,a as x,b as S,g as C,i as w,n as T,o as E,p as D,r as O,x as k}from"./iam-DmtL7LFe.js";import{r as A}from"./json-hjud9BaA.js";import{t as j}from"./error-banner-DeOeVBKS.js";import{r as M,s as N,t as P}from"./field-CS-ql6du.js";import{t as F}from"./delete-confirmation-dialog-BYHqotoI.js";import{n as I}from"./detail-row-DNBRlVeK.js";import{t as L}from"./json-editor-02czSrbA.js";import{s as R}from"./iam-DpUWI3xh.js";var z=t(n(),1),B=e();function V(e,t){return{run:async n=>await e.mutateAsync(t(n)),error:e.error}}function H({kind:e,name:t}){let n=f(),r=m(),i=g(),s=c(),l=u(),d=y(),{listQuery:p,attach:h,detach:_}={user:{listQuery:w,attach:V(n,e=>({userName:t,policyArn:e})),detach:V(s,e=>({userName:t,policyArn:e}))},role:{listQuery:O,attach:V(r,e=>({roleName:t,policyArn:e})),detach:V(l,e=>({roleName:t,policyArn:e}))},group:{listQuery:T,attach:V(i,e=>({groupName:t,policyArn:e})),detach:V(d,e=>({groupName:t,policyArn:e}))}}[e],{data:v}=a(p(t)),{data:b}=a(D),[x,S]=(0,z.useState)(!1),[C,E]=(0,z.useState)(null),k=v.AttachedPolicies??[],A=b.Policies??[],M=new Set(k.map(e=>e.PolicyArn)),N=A.filter(e=>e.Arn&&!M.has(e.Arn)),P=async e=>{E(e);try{await h.run(e),S(!1)}catch{}finally{E(null)}},F=async e=>{E(e);try{await _.run(e)}catch{}finally{E(null)}};return(0,B.jsxs)(I,{children:[(0,B.jsx)(I.Header,{children:(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{children:`Attached Policies`}),(0,B.jsx)(o,{onClick:()=>{S(!x)},size:`sm`,children:`Attach Policy`})]})}),(0,B.jsxs)(I.Content,{children:[h.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:h.error,msg:`Failed to attach policy`})}),_.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:_.error,msg:`Failed to detach policy`})}),x&&N.length>0&&(0,B.jsxs)(`div`,{className:`col-span-2 space-y-2 rounded-md border p-3`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:`Select a policy to attach:`}),(0,B.jsx)(`div`,{className:`space-y-1`,children:N.map(e=>(0,B.jsxs)(`button`,{className:`flex w-full items-center justify-between rounded-md p-2 text-left text-sm hover:bg-accent`,disabled:C===e.Arn,onClick:()=>{e.Arn&&P(e.Arn)},type:`button`,children:[(0,B.jsx)(`span`,{children:e.PolicyName}),(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.Arn})]},e.Arn))})]}),x&&N.length===0&&(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No policies available to attach.`}),k.length>0?(0,B.jsx)(`div`,{className:`col-span-2 space-y-3`,children:k.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:e.PolicyName}),(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.PolicyArn})]}),(0,B.jsx)(o,{disabled:C===e.PolicyArn,onClick:()=>{e.PolicyArn&&F(e.PolicyArn)},size:`sm`,variant:`outline`,children:`Detach`})]},e.PolicyArn))}):(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No attached policies.`})]})]})}var U=r(),W=JSON.stringify({Version:`2012-10-17`,Statement:[{Effect:`Allow`,Action:`*`,Resource:`*`}]},null,2);function G({kind:e,name:t}){let n=l(),r=d(),i=v(),s=p(),c=_(),u=h(),{listQuery:f,policyQuery:m,put:g,remove:y}={user:{listQuery:S,policyQuery:k,put:n,remove:s},role:{listQuery:C,policyQuery:b,put:r,remove:c},group:{listQuery:x,policyQuery:E,put:i,remove:u}}[e],{data:w}=a(f(t)),T=w.PolicyNames??[],[D,O]=(0,z.useState)(!1),[A,M]=(0,z.useState)(null),[N,P]=(0,z.useState)(null),L=async()=>{if(!N)return;let e=N;try{await y.mutateAsync({name:t,policyName:e}),A===e&&M(null)}finally{P(null)}};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(I,{children:[(0,B.jsx)(I.Header,{children:(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{children:`Inline Policies`}),(0,B.jsx)(o,{onClick:()=>{O(e=>!e),M(null)},size:`sm`,children:`Add Inline Policy`})]})}),(0,B.jsxs)(I.Content,{children:[y.error&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(j,{error:y.error,msg:`Failed to delete inline policy`})}),D&&(0,B.jsx)(`div`,{className:`col-span-2`,children:(0,B.jsx)(K,{name:t,onClose:()=>{O(!1)},put:g})}),T.length>0?(0,B.jsx)(`div`,{className:`col-span-2 space-y-3`,children:T.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between p-3`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:e}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(o,{onClick:()=>{M(t=>t===e?null:e)},size:`sm`,variant:`outline`,children:A===e?`Close`:`Edit`}),(0,B.jsx)(o,{onClick:()=>{P(e)},size:`sm`,variant:`destructive`,children:`Delete`})]})]}),A===e&&(0,B.jsx)(`div`,{className:`border-t p-3`,children:(0,B.jsx)(J,{name:t,onClose:()=>{M(null)},policyName:e,put:g,queryOptions:m(t,e)})})]},e))}):!D&&(0,B.jsx)(`p`,{className:`col-span-2 text-sm text-muted-foreground`,children:`No inline policies.`})]})]}),(0,B.jsx)(F,{description:`Are you sure you want to delete the inline policy "${N??``}"? This action cannot be undone.`,isPending:y.isPending,onConfirm:()=>{L()},onOpenChange:e=>{e||P(null)},open:N!==null,title:`Delete Inline Policy`})]})}function K(e){let t=(0,U.c)(50),{name:n,put:r,onClose:i}=e,[a,c]=(0,z.useState)(``),[l,u]=(0,z.useState)(W),d,f;t[0]!==l||t[1]!==a?(d=R.safeParse({policyName:a,policyDocument:l}),f=d.success?void 0:d.error.issues.find(q),t[0]=l,t[1]=a,t[2]=d,t[3]=f):(d=t[2],f=t[3]);let p=f,m;t[4]!==p||t[5]!==a?(m=a.trim().length>0&&!!p,t[4]=p,t[5]=a,t[6]=m):m=t[6];let h=m,g;t[7]===l?g=t[8]:(g=l.trim().length>0&&!A(l),t[7]=l,t[8]=g);let _=g,v;t[9]!==l||t[10]!==n||t[11]!==i||t[12]!==a||t[13]!==r?(v=async()=>{try{await r.mutateAsync({name:n,policyName:a,policyDocument:l}),i()}catch{}},t[9]=l,t[10]=n,t[11]=i,t[12]=a,t[13]=r,t[14]=v):v=t[14];let y=v,b;t[15]===r.error?b=t[16]:(b=r.error&&(0,B.jsx)(j,{error:r.error,msg:`Failed to add inline policy`}),t[15]=r.error,t[16]=b);let x;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(x=(0,B.jsx)(N,{children:(0,B.jsx)(`label`,{htmlFor:`inline-policy-name`,children:`Policy name`})}),t[17]=x):x=t[17];let S;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>{c(e.target.value)},t[18]=S):S=t[18];let C;t[19]!==a||t[20]!==h?(C=(0,B.jsx)(s,{"aria-invalid":h,id:`inline-policy-name`,onChange:S,placeholder:`my-inline-policy`,value:a}),t[19]=a,t[20]=h,t[21]=C):C=t[21];let w;t[22]!==p?.message||t[23]!==h?(w=h&&(0,B.jsx)(M,{errors:[{message:p?.message}]}),t[22]=p?.message,t[23]=h,t[24]=w):w=t[24];let T;t[25]!==C||t[26]!==w?(T=(0,B.jsxs)(P,{children:[x,C,w]}),t[25]=C,t[26]=w,t[27]=T):T=t[27];let E;t[28]!==l||t[29]!==_?(E=(0,B.jsx)(L,{className:`text-xs`,error:_,onChange:u,rows:12,value:l}),t[28]=l,t[29]=_,t[30]=E):E=t[30];let D;t[31]===_?D=t[32]:(D=_&&(0,B.jsx)(`p`,{className:`text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[31]=_,t[32]=D);let O;t[33]===i?O=t[34]:(O=(0,B.jsx)(o,{onClick:i,size:`sm`,variant:`outline`,children:`Cancel`}),t[33]=i,t[34]=O);let k=!d.success||r.isPending,F;t[35]===y?F=t[36]:(F=()=>{y()},t[35]=y,t[36]=F);let I=r.isPending?`Saving…`:`Save`,V;t[37]!==k||t[38]!==F||t[39]!==I?(V=(0,B.jsx)(o,{disabled:k,onClick:F,size:`sm`,children:I}),t[37]=k,t[38]=F,t[39]=I,t[40]=V):V=t[40];let H;t[41]!==O||t[42]!==V?(H=(0,B.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[O,V]}),t[41]=O,t[42]=V,t[43]=H):H=t[43];let G;return t[44]!==T||t[45]!==E||t[46]!==D||t[47]!==H||t[48]!==b?(G=(0,B.jsxs)(`div`,{className:`space-y-3 rounded-md border p-3`,children:[b,T,E,D,H]}),t[44]=T,t[45]=E,t[46]=D,t[47]=H,t[48]=b,t[49]=G):G=t[49],G}function q(e){return e.path[0]===`policyName`}function J(e){let t=(0,U.c)(37),{name:n,policyName:r,queryOptions:a,put:s,onClose:c}=e,{data:l,isLoading:u,error:d}=i(a),[f,p]=(0,z.useState)(l??``),[m,h]=(0,z.useState)(l);l!==m&&(h(l),p(l??``));let g;t[0]===f?g=t[1]:(g=f.trim(),t[0]=f,t[1]=g);let _=g,v;t[2]!==f||t[3]!==_.length?(v=_.length>0&&!A(f),t[2]=f,t[3]=_.length,t[4]=v):v=t[4];let y=v,b;t[5]!==f||t[6]!==n||t[7]!==c||t[8]!==r||t[9]!==s?(b=async()=>{try{await s.mutateAsync({name:n,policyName:r,policyDocument:f}),c()}catch{}},t[5]=f,t[6]=n,t[7]=c,t[8]=r,t[9]=s,t[10]=b):b=t[10];let x=b;if(u){let e;return t[11]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`}),t[11]=e):e=t[11],e}if(d){let e;return t[12]===d?e=t[13]:(e=(0,B.jsx)(j,{error:d,msg:`Failed to load inline policy`}),t[12]=d,t[13]=e),e}let S;t[14]===s.error?S=t[15]:(S=s.error&&(0,B.jsx)(j,{error:s.error,msg:`Failed to update inline policy`}),t[14]=s.error,t[15]=S);let C;t[16]!==f||t[17]!==y?(C=(0,B.jsx)(L,{className:`text-xs`,error:y,onChange:p,rows:12,value:f}),t[16]=f,t[17]=y,t[18]=C):C=t[18];let w;t[19]===y?w=t[20]:(w=y&&(0,B.jsx)(`p`,{className:`text-sm text-destructive`,children:`Policy must be valid JSON.`}),t[19]=y,t[20]=w);let T;t[21]===c?T=t[22]:(T=(0,B.jsx)(o,{onClick:c,size:`sm`,variant:`outline`,children:`Cancel`}),t[21]=c,t[22]=T);let E=s.isPending||_.length===0||y,D;t[23]===x?D=t[24]:(D=()=>{x()},t[23]=x,t[24]=D);let O=s.isPending?`Saving…`:`Save`,k;t[25]!==O||t[26]!==E||t[27]!==D?(k=(0,B.jsx)(o,{disabled:E,onClick:D,size:`sm`,children:O}),t[25]=O,t[26]=E,t[27]=D,t[28]=k):k=t[28];let M;t[29]!==k||t[30]!==T?(M=(0,B.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[T,k]}),t[29]=k,t[30]=T,t[31]=M):M=t[31];let N;return t[32]!==M||t[33]!==S||t[34]!==C||t[35]!==w?(N=(0,B.jsxs)(`div`,{className:`space-y-3`,children:[S,C,w,M]}),t[32]=M,t[33]=S,t[34]=C,t[35]=w,t[36]=N):N=t[36],N}export{H as n,G as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-6kdUb_DH.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-D3aUBtS6.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-6kdUb_DH.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-D3aUBtS6.js index e4b6d0576..dc4fa744b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-6kdUb_DH.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/input-D3aUBtS6.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{n as i}from"./dist-BKgR2qk6.js";import{tn as a}from"./cluster-config-xw_Q7X1e.js";import{o,s}from"./button-BarTr35m.js";import{E as c,f as l,t as u,x as d,y as f}from"./createBaseUIEventDetails-DL-8egB9.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./useValueChanged-B2TUO8IO.js";import{t as b}from"./useControlled-DwxdYHYK.js";var x=t(n(),1),S=x.forwardRef(function(e,t){let{render:n,className:r,id:a,name:S,value:C,disabled:w=!1,onValueChange:T,defaultValue:E,autoFocus:D=!1,style:ee,...O}=e,{state:k,name:A,disabled:j,setTouched:M,setDirty:N,validityData:P,setFocused:F,setFilled:I,validationMode:L,validation:R}=g(),{clearErrors:z,elementRef:B,submitCountRef:V}=p(),H=j||w,U=A??S,W={...k,disabled:H},{labelId:G}=m(),K=_({id:a}),[q]=b({controlled:C,default:E,name:`FieldControl`,state:`value`}),J=C!==void 0,Y=J?q:void 0,X=Y==null?void 0:String(Y),Z=s(()=>R.inputRef.current?.value);h(R.inputRef,K,X,Z,!H,S),o(()=>{let e=X??R.inputRef.current?.value;e!==void 0&&I(e!==``)},[X,R.inputRef,I]),y(X,()=>{X!==void 0&&(z(U),N(X!==(P.initialValue??``)),R.change(X))});let Q=x.useRef(null),$=f();return o(()=>{D&&Q.current===d(c(Q.current))&&F(!0)},[D,F]),i(`input`,e,{ref:[t,Q],state:W,props:[{id:K,disabled:H,name:U,ref:R.inputRef,"aria-labelledby":G,autoFocus:D,...J?{value:Y}:{defaultValue:E},onChange(e){let t=e.currentTarget.value,n=u(l,e.nativeEvent);T?.(t,n),!J&&(N(t!==(P.initialValue??``)),I(t!==``),!e.nativeEvent.defaultPrevented&&!n.isCanceled&&(z(U),R.change(t)))},onFocus(){F(!0)},onBlur(e){if(M(!0),F(!1),L===`onBlur`){let t=e.currentTarget.value;R.commit(t),J&&queueMicrotask(()=>{let e=R.inputRef.current?.value;e!==void 0&&e!==t&&e!==(P.initialValue??``)&&R.commit(e)})}},onKeyDown(e){if(e.currentTarget.tagName===`INPUT`&&e.key===`Enter`){M(!0);let t=e.currentTarget.value,n=e.currentTarget.form;if(n&&n===B.current&&!e.defaultPrevented){let t=e.currentTarget,n=V.current;$.start(0,()=>{V.current===n&&R.commit(t.value)})}else R.commit(t)}}},O,e=>R.getValidationProps(H,e)],stateAttributesMapping:v})}),C=e(),w=x.forwardRef(function(e,t){return(0,C.jsx)(S,{ref:t,...e})}),T=r();function E(e){let t=(0,T.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,type:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let o;t[4]===n?o=t[5]:(o=a(`h-7 w-full min-w-0 rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-xs/relaxed file:font-medium file:text-foreground placeholder:text-muted-foreground autofill:[-webkit-text-fill-color:var(--color-foreground)] autofill:[transition:background-color_9999s_ease-in-out_0s] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,n),t[4]=n,t[5]=o);let s;return t[6]!==r||t[7]!==o||t[8]!==i?(s=(0,C.jsx)(w,{className:o,"data-slot":`input`,type:i,...r}),t[6]=r,t[7]=o,t[8]=i,t[9]=s):s=t[9],s}export{E as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{n as i}from"./dist-DeC3TnAR.js";import{nn as a}from"./cluster-config-DkOiY8HH.js";import{o,s}from"./button-qf9lLJ2x.js";import{E as c,f as l,t as u,x as d,y as f}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./useValueChanged-ZoIoM_Qs.js";import{t as b}from"./useControlled-DwxdYHYK.js";var x=t(n(),1),S=x.forwardRef(function(e,t){let{render:n,className:r,id:a,name:S,value:C,disabled:w=!1,onValueChange:T,defaultValue:E,autoFocus:D=!1,style:ee,...O}=e,{state:k,name:A,disabled:j,setTouched:M,setDirty:N,validityData:P,setFocused:F,setFilled:I,validationMode:L,validation:R}=g(),{clearErrors:z,elementRef:B,submitCountRef:V}=p(),H=j||w,U=A??S,W={...k,disabled:H},{labelId:G}=m(),K=_({id:a}),[q]=b({controlled:C,default:E,name:`FieldControl`,state:`value`}),J=C!==void 0,Y=J?q:void 0,X=Y==null?void 0:String(Y),Z=s(()=>R.inputRef.current?.value);h(R.inputRef,K,X,Z,!H,S),o(()=>{let e=X??R.inputRef.current?.value;e!==void 0&&I(e!==``)},[X,R.inputRef,I]),y(X,()=>{X!==void 0&&(z(U),N(X!==(P.initialValue??``)),R.change(X))});let Q=x.useRef(null),$=f();return o(()=>{D&&Q.current===d(c(Q.current))&&F(!0)},[D,F]),i(`input`,e,{ref:[t,Q],state:W,props:[{id:K,disabled:H,name:U,ref:R.inputRef,"aria-labelledby":G,autoFocus:D,...J?{value:Y}:{defaultValue:E},onChange(e){let t=e.currentTarget.value,n=u(l,e.nativeEvent);T?.(t,n),!J&&(N(t!==(P.initialValue??``)),I(t!==``),!e.nativeEvent.defaultPrevented&&!n.isCanceled&&(z(U),R.change(t)))},onFocus(){F(!0)},onBlur(e){if(M(!0),F(!1),L===`onBlur`){let t=e.currentTarget.value;R.commit(t),J&&queueMicrotask(()=>{let e=R.inputRef.current?.value;e!==void 0&&e!==t&&e!==(P.initialValue??``)&&R.commit(e)})}},onKeyDown(e){if(e.currentTarget.tagName===`INPUT`&&e.key===`Enter`){M(!0);let t=e.currentTarget.value,n=e.currentTarget.form;if(n&&n===B.current&&!e.defaultPrevented){let t=e.currentTarget,n=V.current;$.start(0,()=>{V.current===n&&R.commit(t.value)})}else R.commit(t)}}},O,e=>R.getValidationProps(H,e)],stateAttributesMapping:v})}),C=e(),w=x.forwardRef(function(e,t){return(0,C.jsx)(S,{ref:t,...e})}),T=r();function E(e){let t=(0,T.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,type:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let o;t[4]===n?o=t[5]:(o=a(`h-7 w-full min-w-0 rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-xs/relaxed file:font-medium file:text-foreground placeholder:text-muted-foreground autofill:[-webkit-text-fill-color:var(--color-foreground)] autofill:[transition:background-color_9999s_ease-in-out_0s] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,n),t[4]=n,t[5]=o);let s;return t[6]!==r||t[7]!==o||t[8]!==i?(s=(0,C.jsx)(w,{className:o,"data-slot":`input`,type:i,...r}),t[6]=r,t[7]=o,t[8]=i,t[9]=s):s=t[9],s}export{E as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-DsgWHaZY.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-DsgWHaZY.js deleted file mode 100644 index 21e2b5227..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-DsgWHaZY.js +++ /dev/null @@ -1 +0,0 @@ -import{g as e}from"./cluster-config-xw_Q7X1e.js";function t(e){try{return JSON.parse(e),!0}catch{return!1}}function n(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return null}}function r(e,t){let r=e;if(t)try{r=decodeURIComponent(e)}catch{r=e}return n(r)??r}function i(n){let{label:r,allowEmpty:i=!1}=n;return(i?e():e().min(1,`${r} is required`)).refine(e=>i&&e.trim()===``?!0:t(e),{message:`${r} must be valid JSON`})}export{i,n,t as r,r as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-Bwbz8mfn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-02czSrbA.js similarity index 78% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-Bwbz8mfn.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-02czSrbA.js index d0c27fd2b..c75fc39f9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-Bwbz8mfn.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-editor-02czSrbA.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";import{n as r}from"./json-DsgWHaZY.js";import{t as i}from"./textarea-n04EavUm.js";var a=t(),o=e();function s(e){let t=(0,a.c)(22),s,c,l,u,d,f;t[0]===e?(s=t[1],c=t[2],l=t[3],u=t[4],d=t[5],f=t[6]):({value:f,onChange:u,error:c,onBlur:l,className:s,...d}=e,t[0]=e,t[1]=s,t[2]=c,t[3]=l,t[4]=u,t[5]=d,t[6]=f);let p;t[7]!==l||t[8]!==u||t[9]!==f?(p=e=>{let t=r(f);t!==null&&t!==f&&u(t),l?.(e)},t[7]=l,t[8]=u,t[9]=f,t[10]=p):p=t[10];let m=p,h;t[11]===s?h=t[12]:(h=n(`font-mono text-sm`,s),t[11]=s,t[12]=h);let g;t[13]===u?g=t[14]:(g=e=>{u(e.target.value)},t[13]=u,t[14]=g);let _;return t[15]!==c||t[16]!==m||t[17]!==d||t[18]!==h||t[19]!==g||t[20]!==f?(_=(0,o.jsx)(i,{"aria-invalid":c,className:h,onBlur:m,onChange:g,value:f,...d}),t[15]=c,t[16]=m,t[17]=d,t[18]=h,t[19]=g,t[20]=f,t[21]=_):_=t[21],_}export{s as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";import{n as r}from"./json-hjud9BaA.js";import{t as i}from"./textarea-DV1UO8hv.js";var a=t(),o=e();function s(e){let t=(0,a.c)(22),s,c,l,u,d,f;t[0]===e?(s=t[1],c=t[2],l=t[3],u=t[4],d=t[5],f=t[6]):({value:f,onChange:u,error:c,onBlur:l,className:s,...d}=e,t[0]=e,t[1]=s,t[2]=c,t[3]=l,t[4]=u,t[5]=d,t[6]=f);let p;t[7]!==l||t[8]!==u||t[9]!==f?(p=e=>{let t=r(f);t!==null&&t!==f&&u(t),l?.(e)},t[7]=l,t[8]=u,t[9]=f,t[10]=p):p=t[10];let m=p,h;t[11]===s?h=t[12]:(h=n(`font-mono text-sm`,s),t[11]=s,t[12]=h);let g;t[13]===u?g=t[14]:(g=e=>{u(e.target.value)},t[13]=u,t[14]=g);let _;return t[15]!==c||t[16]!==m||t[17]!==d||t[18]!==h||t[19]!==g||t[20]!==f?(_=(0,o.jsx)(i,{"aria-invalid":c,className:h,onBlur:m,onChange:g,value:f,...d}),t[15]=c,t[16]=m,t[17]=d,t[18]=h,t[19]=g,t[20]=f,t[21]=_):_=t[21],_}export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-hjud9BaA.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-hjud9BaA.js new file mode 100644 index 000000000..fc368987d --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/json-hjud9BaA.js @@ -0,0 +1 @@ +import{_ as e}from"./cluster-config-DkOiY8HH.js";function t(e){try{return JSON.parse(e),!0}catch{return!1}}function n(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return null}}function r(e){let t;try{t=decodeURIComponent(e)}catch{t=e}return n(t)??t}function i(n){let{label:r,allowEmpty:i=!1}=n;return(i?e():e().min(1,`${r} is required`)).refine(e=>i&&e.trim()===``?!0:t(e),{message:`${r} must be valid JSON`})}export{i,n,t as r,r as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-BXmKXe0L.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-PZ1Q44UQ.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-BXmKXe0L.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-PZ1Q44UQ.js index 470b29a22..104bbf4bb 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-BXmKXe0L.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/launch-template-data-fields-PZ1Q44UQ.js @@ -1,2 +1,2 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./chevron-down-Dt4q6d24.js";import{c as r,i,n as a,s as o,t as s}from"./select-B01jpDaX.js";import{t as te}from"./input-6kdUb_DH.js";import{O as ne,c as re,o as ie,p as ae,w as oe}from"./ec2-CWEplLq4.js";import{a as se,n as c}from"./zod-DF_n2ejy.js";import{n as ce,r as l,s as u,t as d}from"./field-c7GHI5st.js";import{t as le}from"./textarea-n04EavUm.js";import{t as ue}from"./ec2-DhWukC79.js";import{n as de,r as fe,t as pe}from"./collapsible-k5LqEmTn.js";var me=t(),f=e(),he=`gp3`,ge=1,_e=16384;function p(e){let t=(0,me.c)(107),{control:p,register:m,errors:h}=e,{data:Ee}=n(ie),{data:De}=n(re),{data:Oe}=n(ae),{data:ke}=n(ne),{data:Ae}=n(oe),je;t[0]===Ee.Images?je=t[1]:(je=Ee.Images??[],t[0]=Ee.Images,t[1]=je);let g=je,_;t[2]===Oe.KeyPairs?_=t[3]:(_=Oe.KeyPairs??[],t[2]=Oe.KeyPairs,t[3]=_);let Me=_,v;t[4]===ke.Subnets?v=t[5]:(v=ke.Subnets??[],t[4]=ke.Subnets,t[5]=v);let y=v,b;t[6]===Ae.SecurityGroups?b=t[7]:(b=Ae.SecurityGroups??[],t[6]=Ae.SecurityGroups,t[7]=b);let x=b,S;t[8]===De.InstanceTypes?S=t[9]:(S=De.InstanceTypes??[],t[8]=De.InstanceTypes,t[9]=S);let C;t[10]===S?C=t[11]:(C=[...new Set(S.map(Te).filter(we))].toSorted(),t[10]=S,t[11]=C);let Ne=C,w;t[12]===p?w=t[13]:(w={control:p,name:`subnetId`},t[12]=p,t[13]=w);let Pe=se(w),T;t[14]!==Pe||t[15]!==y?(T=y.find(e=>e.SubnetId===Pe)?.VpcId,t[14]=Pe,t[15]=y,t[16]=T):T=t[16];let E=T,Fe;t[17]!==E||t[18]!==x?(Fe=E?x.filter(e=>e.VpcId===E):x,t[17]=E,t[18]=x,t[19]=Fe):Fe=t[19];let Ie=Fe,Le;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`imageId`,children:`Image`})}),t[20]=Le):Le=t[20];let D;t[21]!==h.imageId||t[22]!==g?(D=e=>{let{field:t}=e,n=g.find(e=>e.ImageId===t.value);return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,f.jsx)(o,{"aria-invalid":!!h.imageId,className:`w-full`,id:`imageId`,children:(0,f.jsx)(r,{children:n?`${n.Name??`Unnamed`} (${n.Architecture})`:``})}),(0,f.jsx)(a,{children:g.map(Ce)})]})},t[21]=h.imageId,t[22]=g,t[23]=D):D=t[23];let O;t[24]!==p||t[25]!==D?(O=(0,f.jsx)(c,{control:p,name:`imageId`,render:D}),t[24]=p,t[25]=D,t[26]=O):O=t[26];let k;t[27]===h.imageId?k=t[28]:(k=(0,f.jsx)(l,{errors:[h.imageId]}),t[27]=h.imageId,t[28]=k);let A;t[29]!==O||t[30]!==k?(A=(0,f.jsxs)(d,{children:[Le,O,k]}),t[29]=O,t[30]=k,t[31]=A):A=t[31];let Re;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),t[32]=Re):Re=t[32];let j;t[33]!==h.instanceType||t[34]!==Ne?(j=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e)},value:t.value||``,children:[(0,f.jsx)(o,{"aria-invalid":!!h.instanceType,className:`w-full`,id:`instanceType`,children:(0,f.jsx)(r,{})}),(0,f.jsx)(a,{children:Ne.map(Se)})]})},t[33]=h.instanceType,t[34]=Ne,t[35]=j):j=t[35];let M;t[36]!==p||t[37]!==j?(M=(0,f.jsx)(c,{control:p,name:`instanceType`,render:j}),t[36]=p,t[37]=j,t[38]=M):M=t[38];let N;t[39]===h.instanceType?N=t[40]:(N=(0,f.jsx)(l,{errors:[h.instanceType]}),t[39]=h.instanceType,t[40]=N);let P;t[41]!==M||t[42]!==N?(P=(0,f.jsxs)(d,{children:[Re,M,N]}),t[41]=M,t[42]=N,t[43]=P):P=t[43];let ze;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair`})}),t[44]=ze):ze=t[44];let F;t[45]===Me?F=t[46]:(F=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,f.jsx)(o,{className:`w-full`,id:`keyName`,children:(0,f.jsx)(r,{})}),(0,f.jsxs)(a,{children:[(0,f.jsx)(i,{value:`none`,children:`none`}),Me.map(xe)]})]})},t[45]=Me,t[46]=F);let I;t[47]!==p||t[48]!==F?(I=(0,f.jsxs)(d,{children:[ze,(0,f.jsx)(c,{control:p,name:`keyName`,render:F})]}),t[47]=p,t[48]=F,t[49]=I):I=t[49];let Be;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(Be=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`subnetId`,children:`Subnet`})}),t[50]=Be):Be=t[50];let L;t[51]===y?L=t[52]:(L=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,f.jsx)(o,{className:`w-full`,id:`subnetId`,children:(0,f.jsx)(r,{})}),(0,f.jsxs)(a,{children:[(0,f.jsx)(i,{value:`none`,children:`none`}),y.map(be)]})]})},t[51]=y,t[52]=L);let R;t[53]!==p||t[54]!==L?(R=(0,f.jsxs)(d,{children:[Be,(0,f.jsx)(c,{control:p,name:`subnetId`,render:L})]}),t[53]=p,t[54]=L,t[55]=R):R=t[55];let Ve;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,f.jsx)(u,{children:`Security Groups`}),t[56]=Ve):Ve=t[56];let He=E?`Applies to VPC ${E}`:`Showing all security groups — select a subnet to filter by VPC`,z;t[57]===He?z=t[58]:(z=(0,f.jsx)(ce,{children:He}),t[57]=He,t[58]=z);let B;t[59]===Ie?B=t[60]:(B=e=>{let{field:t}=e,n=t.value??[],ee=new Set(n),r=e=>{t.onChange(n.includes(e)?n.filter(t=>t!==e):[...n,e])};return Ie.length===0?(0,f.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups available.`}):(0,f.jsx)(`div`,{className:`space-y-1`,children:Ie.map(e=>(0,f.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,f.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:ee.has(e.GroupId??``),onChange:()=>{r(e.GroupId??``)},type:`checkbox`}),(0,f.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})},t[59]=Ie,t[60]=B);let V;t[61]!==p||t[62]!==B?(V=(0,f.jsx)(c,{control:p,name:`securityGroupIds`,render:B}),t[61]=p,t[62]=B,t[63]=V):V=t[63];let H;t[64]!==z||t[65]!==V?(H=(0,f.jsxs)(d,{children:[Ve,z,V]}),t[64]=z,t[65]=V,t[66]=H):H=t[66];let Ue,We;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`userData`,children:`User Data`})}),We=(0,f.jsx)(ce,{children:`Cloud-init or shell script run at first boot.`}),t[67]=Ue,t[68]=We):(Ue=t[67],We=t[68]);let U;t[69]===m?U=t[70]:(U=m(`userData`),t[69]=m,t[70]=U);let W;t[71]===U?W=t[72]:(W=(0,f.jsxs)(d,{children:[Ue,We,(0,f.jsx)(le,{className:`min-h-32 font-mono`,id:`userData`,placeholder:`#!/bin/bash +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./chevron-down-Dt4q6d24.js";import{c as r,i,n as a,s as o,t as s}from"./select-Cn66OoPn.js";import{t as te}from"./input-D3aUBtS6.js";import{O as ne,c as re,o as ie,p as ae,w as oe}from"./ec2-DYgBhYCJ.js";import{a as se,n as c}from"./zod-A4qtKH_p.js";import{n as ce,r as l,s as u,t as d}from"./field-CS-ql6du.js";import{t as le}from"./textarea-DV1UO8hv.js";import{t as ue}from"./ec2-DqNqPeiA.js";import{n as de,r as fe,t as pe}from"./collapsible-Sj-k2ZCd.js";var me=t(),f=e(),he=`gp3`,ge=1,_e=16384;function p(e){let t=(0,me.c)(107),{control:p,register:m,errors:h}=e,{data:Ee}=n(ie),{data:De}=n(re),{data:Oe}=n(ae),{data:ke}=n(ne),{data:Ae}=n(oe),je;t[0]===Ee.Images?je=t[1]:(je=Ee.Images??[],t[0]=Ee.Images,t[1]=je);let g=je,_;t[2]===Oe.KeyPairs?_=t[3]:(_=Oe.KeyPairs??[],t[2]=Oe.KeyPairs,t[3]=_);let Me=_,v;t[4]===ke.Subnets?v=t[5]:(v=ke.Subnets??[],t[4]=ke.Subnets,t[5]=v);let y=v,b;t[6]===Ae.SecurityGroups?b=t[7]:(b=Ae.SecurityGroups??[],t[6]=Ae.SecurityGroups,t[7]=b);let x=b,S;t[8]===De.InstanceTypes?S=t[9]:(S=De.InstanceTypes??[],t[8]=De.InstanceTypes,t[9]=S);let C;t[10]===S?C=t[11]:(C=[...new Set(S.map(Te).filter(we))].toSorted(),t[10]=S,t[11]=C);let Ne=C,w;t[12]===p?w=t[13]:(w={control:p,name:`subnetId`},t[12]=p,t[13]=w);let Pe=se(w),T;t[14]!==Pe||t[15]!==y?(T=y.find(e=>e.SubnetId===Pe)?.VpcId,t[14]=Pe,t[15]=y,t[16]=T):T=t[16];let E=T,Fe;t[17]!==E||t[18]!==x?(Fe=E?x.filter(e=>e.VpcId===E):x,t[17]=E,t[18]=x,t[19]=Fe):Fe=t[19];let Ie=Fe,Le;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`imageId`,children:`Image`})}),t[20]=Le):Le=t[20];let D;t[21]!==h.imageId||t[22]!==g?(D=e=>{let{field:t}=e,n=g.find(e=>e.ImageId===t.value);return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,f.jsx)(o,{"aria-invalid":!!h.imageId,className:`w-full`,id:`imageId`,children:(0,f.jsx)(r,{children:n?`${n.Name??`Unnamed`} (${n.Architecture})`:``})}),(0,f.jsx)(a,{children:g.map(Ce)})]})},t[21]=h.imageId,t[22]=g,t[23]=D):D=t[23];let O;t[24]!==p||t[25]!==D?(O=(0,f.jsx)(c,{control:p,name:`imageId`,render:D}),t[24]=p,t[25]=D,t[26]=O):O=t[26];let k;t[27]===h.imageId?k=t[28]:(k=(0,f.jsx)(l,{errors:[h.imageId]}),t[27]=h.imageId,t[28]=k);let A;t[29]!==O||t[30]!==k?(A=(0,f.jsxs)(d,{children:[Le,O,k]}),t[29]=O,t[30]=k,t[31]=A):A=t[31];let Re;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),t[32]=Re):Re=t[32];let j;t[33]!==h.instanceType||t[34]!==Ne?(j=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e)},value:t.value||``,children:[(0,f.jsx)(o,{"aria-invalid":!!h.instanceType,className:`w-full`,id:`instanceType`,children:(0,f.jsx)(r,{})}),(0,f.jsx)(a,{children:Ne.map(Se)})]})},t[33]=h.instanceType,t[34]=Ne,t[35]=j):j=t[35];let M;t[36]!==p||t[37]!==j?(M=(0,f.jsx)(c,{control:p,name:`instanceType`,render:j}),t[36]=p,t[37]=j,t[38]=M):M=t[38];let N;t[39]===h.instanceType?N=t[40]:(N=(0,f.jsx)(l,{errors:[h.instanceType]}),t[39]=h.instanceType,t[40]=N);let P;t[41]!==M||t[42]!==N?(P=(0,f.jsxs)(d,{children:[Re,M,N]}),t[41]=M,t[42]=N,t[43]=P):P=t[43];let ze;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair`})}),t[44]=ze):ze=t[44];let F;t[45]===Me?F=t[46]:(F=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,f.jsx)(o,{className:`w-full`,id:`keyName`,children:(0,f.jsx)(r,{})}),(0,f.jsxs)(a,{children:[(0,f.jsx)(i,{value:`none`,children:`none`}),Me.map(xe)]})]})},t[45]=Me,t[46]=F);let I;t[47]!==p||t[48]!==F?(I=(0,f.jsxs)(d,{children:[ze,(0,f.jsx)(c,{control:p,name:`keyName`,render:F})]}),t[47]=p,t[48]=F,t[49]=I):I=t[49];let Be;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(Be=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`subnetId`,children:`Subnet`})}),t[50]=Be):Be=t[50];let L;t[51]===y?L=t[52]:(L=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,f.jsx)(o,{className:`w-full`,id:`subnetId`,children:(0,f.jsx)(r,{})}),(0,f.jsxs)(a,{children:[(0,f.jsx)(i,{value:`none`,children:`none`}),y.map(be)]})]})},t[51]=y,t[52]=L);let R;t[53]!==p||t[54]!==L?(R=(0,f.jsxs)(d,{children:[Be,(0,f.jsx)(c,{control:p,name:`subnetId`,render:L})]}),t[53]=p,t[54]=L,t[55]=R):R=t[55];let Ve;t[56]===Symbol.for(`react.memo_cache_sentinel`)?(Ve=(0,f.jsx)(u,{children:`Security Groups`}),t[56]=Ve):Ve=t[56];let He=E?`Applies to VPC ${E}`:`Showing all security groups — select a subnet to filter by VPC`,z;t[57]===He?z=t[58]:(z=(0,f.jsx)(ce,{children:He}),t[57]=He,t[58]=z);let B;t[59]===Ie?B=t[60]:(B=e=>{let{field:t}=e,n=t.value??[],ee=new Set(n),r=e=>{t.onChange(n.includes(e)?n.filter(t=>t!==e):[...n,e])};return Ie.length===0?(0,f.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups available.`}):(0,f.jsx)(`div`,{className:`space-y-1`,children:Ie.map(e=>(0,f.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,f.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:ee.has(e.GroupId??``),onChange:()=>{r(e.GroupId??``)},type:`checkbox`}),(0,f.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})},t[59]=Ie,t[60]=B);let V;t[61]!==p||t[62]!==B?(V=(0,f.jsx)(c,{control:p,name:`securityGroupIds`,render:B}),t[61]=p,t[62]=B,t[63]=V):V=t[63];let H;t[64]!==z||t[65]!==V?(H=(0,f.jsxs)(d,{children:[Ve,z,V]}),t[64]=z,t[65]=V,t[66]=H):H=t[66];let Ue,We;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(Ue=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`userData`,children:`User Data`})}),We=(0,f.jsx)(ce,{children:`Cloud-init or shell script run at first boot.`}),t[67]=Ue,t[68]=We):(Ue=t[67],We=t[68]);let U;t[69]===m?U=t[70]:(U=m(`userData`),t[69]=m,t[70]=U);let W;t[71]===U?W=t[72]:(W=(0,f.jsxs)(d,{children:[Ue,We,(0,f.jsx)(le,{className:`min-h-32 font-mono`,id:`userData`,placeholder:`#!/bin/bash echo hello`,...U})]}),t[71]=U,t[72]=W);let Ge;t[73]===Symbol.for(`react.memo_cache_sentinel`)?(Ge=(0,f.jsxs)(fe,{className:`group flex h-7 w-full items-center justify-between rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none hover:bg-input/40 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 md:text-xs/relaxed dark:bg-input/30 dark:hover:bg-input/50`,render:(0,f.jsx)(`button`,{"aria-label":`Block Device Mappings (root volume)`,type:`button`}),children:[(0,f.jsx)(`span`,{children:`Block Device Mappings (root volume)`}),(0,f.jsx)(ee,{className:`size-3.5 text-muted-foreground transition-transform group-data-[panel-open]:rotate-180`})]}),t[73]=Ge):Ge=t[73];let Ke;t[74]===Symbol.for(`react.memo_cache_sentinel`)?(Ke=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`rootVolumeSize`,children:`Volume Size (GiB)`})}),t[74]=Ke):Ke=t[74];let qe=!!h.rootVolumeSize,G;t[75]===m?G=t[76]:(G=m(`rootVolumeSize`,{setValueAs:ye}),t[75]=m,t[76]=G);let K;t[77]!==qe||t[78]!==G?(K=(0,f.jsx)(te,{"aria-invalid":qe,id:`rootVolumeSize`,max:_e,min:ge,placeholder:`use AMI default`,type:`number`,...G}),t[77]=qe,t[78]=G,t[79]=K):K=t[79];let q;t[80]===h.rootVolumeSize?q=t[81]:(q=(0,f.jsx)(l,{errors:[h.rootVolumeSize]}),t[80]=h.rootVolumeSize,t[81]=q);let J;t[82]!==K||t[83]!==q?(J=(0,f.jsxs)(d,{children:[Ke,K,q]}),t[82]=K,t[83]=q,t[84]=J):J=t[84];let Je;t[85]===Symbol.for(`react.memo_cache_sentinel`)?(Je=(0,f.jsx)(u,{children:(0,f.jsx)(`label`,{htmlFor:`rootVolumeType`,children:`Volume Type`})}),t[85]=Je):Je=t[85];let Y;t[86]===h.rootVolumeType?Y=t[87]:(Y=e=>{let{field:t}=e;return(0,f.jsxs)(s,{onValueChange:e=>{t.onChange(e)},value:t.value??he,children:[(0,f.jsx)(o,{"aria-invalid":!!h.rootVolumeType,className:`w-full`,id:`rootVolumeType`,children:(0,f.jsx)(r,{})}),(0,f.jsx)(a,{children:ue.map(ve)})]})},t[86]=h.rootVolumeType,t[87]=Y);let X;t[88]!==p||t[89]!==Y?(X=(0,f.jsx)(c,{control:p,name:`rootVolumeType`,render:Y}),t[88]=p,t[89]=Y,t[90]=X):X=t[90];let Z;t[91]===h.rootVolumeType?Z=t[92]:(Z=(0,f.jsx)(l,{errors:[h.rootVolumeType]}),t[91]=h.rootVolumeType,t[92]=Z);let Q;t[93]!==X||t[94]!==Z?(Q=(0,f.jsxs)(d,{children:[Je,X,Z]}),t[93]=X,t[94]=Z,t[95]=Q):Q=t[95];let $;t[96]!==J||t[97]!==Q?($=(0,f.jsxs)(pe,{children:[Ge,(0,f.jsxs)(de,{className:`mt-3 space-y-4 rounded-md border border-border p-4`,children:[J,Q]})]}),t[96]=J,t[97]=Q,t[98]=$):$=t[98];let Ye;return t[99]!==A||t[100]!==P||t[101]!==I||t[102]!==R||t[103]!==H||t[104]!==W||t[105]!==$?(Ye=(0,f.jsxs)(f.Fragment,{children:[A,P,I,R,H,W,$]}),t[99]=A,t[100]=P,t[101]=I,t[102]=R,t[103]=H,t[104]=W,t[105]=$,t[106]=Ye):Ye=t[106],Ye}function ve(e){return(0,f.jsx)(i,{value:e,children:e},e)}function ye(e){return e===``||e==null?void 0:Number(e)}function be(e){return(0,f.jsx)(i,{value:e.SubnetId??``,children:e.SubnetId},e.SubnetId)}function xe(e){return(0,f.jsx)(i,{value:e.KeyName??``,children:e.KeyName},e.KeyPairId)}function Se(e){return(0,f.jsx)(i,{value:e,children:e},e)}function Ce(e){return(0,f.jsxs)(i,{value:e.ImageId??``,children:[e.Name??`Unnamed`,` (`,e.Architecture,`)`]},e.ImageId)}function we(e){return!!e}function Te(e){return e.InstanceType}export{p as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-CiZDS8hZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-D0nAq0Je.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-CiZDS8hZ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-D0nAq0Je.js index 366796bf0..52af0d909 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-CiZDS8hZ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/lazyRouteComponent-D0nAq0Je.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{T as r,c as i,n as a,s as o,t as s,x as c}from"./link-Dhy4xOXd.js";import{n as l,r as u,t as d}from"./matchContext-DjfNTEDZ.js";import{n as f}from"./redirect-B4OxYbs2.js";import{n as p,t as m}from"./useSelector-CRh8wCTv.js";import{t as h}from"./useNavigate-BH3pQKLF.js";var g=e(),_=t(n(),1),v=_.use,y=_.useLayoutEffect;function b(){throw Error(`Invariant failed`)}var x=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e,this._branch=void 0;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=u:this.parentRoute||b();let r=n?u:t?.path;r&&r!==`/`&&(r=o(r));let s=t?.id||r,c=n?u:a((this.parentRoute.id===`__root__`?``:this.parentRoute.id)+`/`+(s??``));r===`__root__`&&(r=`/`);let l=c===`__root__`?`/`:r===void 0?this.parentRoute.fullPath:a(this.parentRoute.fullPath+`/`+r);this._path=r,this._id=c,this._fullPath=l,this._to=i(l)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>f({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},S=class extends x{constructor(e){super(e)}},C={};function w(e,t){let n=_.useRef();return i=>{let a=e?.select?e.select(i):i;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=r(n.current,a):a}}function T(e){let t=p(),n=_.useContext(e.from?d:l),r=e.from??n,i=t.stores.getMatchStore(r),a=w(e,t),o=m(i,e=>e?a(e):C);if(o!==C)return o;(e.shouldThrow??!0)&&b()}function E(e){return T({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function D(e){let{select:t,...n}=e;return T({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function O(e){return T({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function k(e){return T({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function A(e){return T({...e,select:t=>e.select?e.select(t.context):t.context})}var j=class extends x{constructor(e){super(e),this.useMatch=e=>T({...e,from:this.id}),this.useRouteContext=e=>A({...e,from:this.id}),this.useSearch=e=>k({...e,from:this.id}),this.useParams=e=>O({...e,from:this.id}),this.useLoaderDeps=e=>D({...e,from:this.id}),this.useLoaderData=e=>E({...e,from:this.id}),this.useNavigate=()=>h({from:this.fullPath}),this.Link=_.forwardRef((e,t)=>(0,g.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function M(e){return new j(e)}function N(){return e=>F(e)}var P=class extends S{constructor(e){super(e),this.useMatch=e=>T({...e,from:this.id}),this.useRouteContext=e=>A({...e,from:this.id}),this.useSearch=e=>k({...e,from:this.id}),this.useParams=e=>O({...e,from:this.id}),this.useLoaderDeps=e=>D({...e,from:this.id}),this.useLoaderData=e=>E({...e,from:this.id}),this.useNavigate=()=>h({from:this.fullPath}),this.Link=_.forwardRef((e,t)=>(0,g.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function F(e){return new P(e)}function I(e){return e=>{let t=M(e);return t.isRoot=!1,t}}function L(e,t){let n,r,i,a=()=>(n||=(i=void 0,e().then(e=>{n=void 0,o.preload=void 0,r=e[t??`default`]}).catch(e=>{n=void 0,i=e})),n),o=function(e){if(i){if(c(i)&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;if(!sessionStorage.getItem(e))throw sessionStorage.setItem(e,`1`),window.location.reload(),new Promise(()=>{})}throw i}if(!r){if(v)v(a());else throw a()}return _.createElement(r,e)};return o.preload=a,o}export{b as a,w as i,I as n,y as o,N as r,L as t}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{T as r,c as i,n as a,s as o,t as s,x as c}from"./link-BokOReHc.js";import{n as l,r as u,t as d}from"./matchContext-DjfNTEDZ.js";import{n as f}from"./redirect-B4OxYbs2.js";import{n as p,t as m}from"./useSelector-C6_B_5v6.js";import{t as h}from"./useNavigate-CTe_-BZA.js";var g=e(),_=t(n(),1),v=_.use,y=_.useLayoutEffect;function b(){throw Error(`Invariant failed`)}var x=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e,this._branch=void 0;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=u:this.parentRoute||b();let r=n?u:t?.path;r&&r!==`/`&&(r=o(r));let s=t?.id||r,c=n?u:a((this.parentRoute.id===`__root__`?``:this.parentRoute.id)+`/`+(s??``));r===`__root__`&&(r=`/`);let l=c===`__root__`?`/`:r===void 0?this.parentRoute.fullPath:a(this.parentRoute.fullPath+`/`+r);this._path=r,this._id=c,this._fullPath=l,this._to=i(l)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>f({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},S=class extends x{constructor(e){super(e)}},C={};function w(e,t){let n=_.useRef();return i=>{let a=e?.select?e.select(i):i;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=r(n.current,a):a}}function T(e){let t=p(),n=_.useContext(e.from?d:l),r=e.from??n,i=t.stores.getMatchStore(r),a=w(e,t),o=m(i,e=>e?a(e):C);if(o!==C)return o;(e.shouldThrow??!0)&&b()}function E(e){return T({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function D(e){let{select:t,...n}=e;return T({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function O(e){return T({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function k(e){return T({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function A(e){return T({...e,select:t=>e.select?e.select(t.context):t.context})}var j=class extends x{constructor(e){super(e),this.useMatch=e=>T({...e,from:this.id}),this.useRouteContext=e=>A({...e,from:this.id}),this.useSearch=e=>k({...e,from:this.id}),this.useParams=e=>O({...e,from:this.id}),this.useLoaderDeps=e=>D({...e,from:this.id}),this.useLoaderData=e=>E({...e,from:this.id}),this.useNavigate=()=>h({from:this.fullPath}),this.Link=_.forwardRef((e,t)=>(0,g.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function M(e){return new j(e)}function N(){return e=>F(e)}var P=class extends S{constructor(e){super(e),this.useMatch=e=>T({...e,from:this.id}),this.useRouteContext=e=>A({...e,from:this.id}),this.useSearch=e=>k({...e,from:this.id}),this.useParams=e=>O({...e,from:this.id}),this.useLoaderDeps=e=>D({...e,from:this.id}),this.useLoaderData=e=>E({...e,from:this.id}),this.useNavigate=()=>h({from:this.fullPath}),this.Link=_.forwardRef((e,t)=>(0,g.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function F(e){return new P(e)}function I(e){return e=>{let t=M(e);return t.isRoot=!1,t}}function L(e,t){let n,r,i,a=()=>(n||=(i=void 0,e().then(e=>{n=void 0,o.preload=void 0,r=e[t??`default`]}).catch(e=>{n=void 0,i=e})),n),o=function(e){if(i){if(c(i)&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;if(!sessionStorage.getItem(e))throw sessionStorage.setItem(e,`1`),window.location.reload(),new Promise(()=>{})}throw i}if(!r){if(v)v(a());else throw a()}return _.createElement(r,e)};return o.preload=a,o}export{b as a,w as i,I as n,y as o,N as r,L as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-Dhy4xOXd.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-BokOReHc.js similarity index 62% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-Dhy4xOXd.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-BokOReHc.js index 06eab7fae..1c5e6a953 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-Dhy4xOXd.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/link-BokOReHc.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{a as r,n as i,t as a}from"./useSelector-CRh8wCTv.js";function o(e){return e[e.length-1]}function s(e,t){return typeof e==`function`?e(t):e}var c=Object.prototype.hasOwnProperty;function l(e){for(let t in e)if(c.call(e,t))return!0;return!1}var u=()=>Object.create(null),d=(e,t)=>f(e,t,!0);function f(e,t,n,r=0){if(e===t)return e;if(r++>500)return t;let i=Array.isArray(e)&&Array.isArray(t);if(!i&&!(p(e)&&p(t)))return t;let a=Object.keys(e),s=a.length,l=Object.keys(t),d=l.length;if(i?s!==e.length||d!==t.length||s&&o(a)!==`${s-1}`||d&&o(l)!==`${d-1}`:s!==Object.getOwnPropertyNames(e).length||d!==Object.getOwnPropertyNames(t).length||Object.getOwnPropertySymbols(t).length)return t;let m=0,h,g,_;if(i){for(;mm&&(h=t[_],h=g===h?g:typeof g==`object`?f(g,h,n,r):h),v[_]=o`{}]/g;function _(e){return e.replace(g,e=>`%`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function v(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return _(t)}var y=[`http:`,`https:`,`mailto:`,`tel:`];function b(e){if(e[0]!==`/`&&e.includes(`:`))return/^[\x00-\x20]*([a-z][a-z\d+.\t\n\r-]*:)/i.exec(e)?.[1]?.replace(/[\t\n\r]/g,``).toLowerCase()}var x=/^[\x00-\x20]*[\\/][\t\n\r]*[\\/]/;function S(e,t){if(!e)return!1;if(x.test(e))return!0;let n=b(e);return n?!t.has(n):!1}var C={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},w=/[&><\u2028\u2029]/g;function T(e){return e.replace(w,e=>C[e])}function E(e){if(!e)return e;let t=e;if(/[%\\\x00-\x1f\x7f]/.test(e)){let n=/%25|%5C/gi,r=0,i;for(t=``;(i=n.exec(e))!==null;)t+=v(e.slice(r,i.index))+i[0],r=n.lastIndex;t+=v(r?e.slice(r):e)}return t}function D(e){return/[\s\u0080-\uFFFF]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function O(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n1&&e[t-1]===`/`?e.replace(/\/+$/,``):e}function M(e){return j(A(e))}function N(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function P(e,t,n=`never`,r){if(t.includes(`//`)&&(t=k(t)),t.startsWith(`/`))return t.length===1||n===`preserve`?t:n===`always`?t.endsWith(`/`)?t:`${t}/`:t.endsWith(`/`)?t.slice(0,-1):t;let i=t===`.`,a;if(r){a=i?e:e+`\0`+t;let n=r.get(a);if(n)return n}let s;if(i)s=e.split(`/`);else{for(e.includes(`//`)&&(e=k(e)),s=e.split(`/`);s.length>1&&o(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1?s.pop():s=[``]:r===`.`||s.push(r)}}s.length>1&&(o(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=s.join(`/`),l=(i?k(c):c)||`/`;return a&&r&&r.set(a,l),l}function F(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=new RegExp([...t.keys()].join(`|`).replace(/[.*()]/g,`\\$&`),`g`);return e=>e.replace(n,e=>t.get(e)??e)}function I(e){return e==null||e===``}function L(e,t,n){if(typeof t!=`string`)return``+(t??void 0);let r=e===`_splat`;if(r&&(!t||/^[a-zA-Z0-9\-._~!/]*$/.test(t)))return t;let i=encodeURIComponent(t);return r&&(i=i.replaceAll(`%2F`,`/`)),n?n(i):i}function R(e,t,n,r,i){let a=e.endsWith(`/`)?`/`:``,o=``;for(let e of t){if(typeof e==`string`){o+=e;continue}let[t,s,c,l]=e,u=t===2,d=u&&l!==void 0?l+a:l,f=n[s];if(t!==3||f!=null){if(i&&(i[s]=f,u&&(i[`*`]=f)),u&&I(f)){if(c===`/`&&!d)continue;f=``}o+=c+L(s,f,r)+(d||``)}}return o+a||`/`}var z=`Error preloading route! ☝️`,B=t(n(),1);e();function V(...e){let t=B.useRef(e),n=t.current;return e.forEach((e,t)=>{m(n[t],e,!1,!0)||(n[t]=e)}),t.current}function H(e,t){e.preloadRoute(t).catch(e=>{console.warn(e),console.warn(z)})}var U={compare:(e,t)=>e[0]===t[0]&&e[1]===t[1]};function ee(e,t){let n=typeof e==`string`&&b(e);if(n)return t.has(n)?e:null}function te(e,t,n,r,i){let a=N(e.pathname,r),o=N(t.pathname,r);return(n?.exact?a!==o:!a.startsWith(o)||a.length!==o.length&&a[o.length]!==`/`)||(n?.includeSearch??!0)&&!m(e.search,t.search,!n?.exact,n?.explicitUndefined)?!1:!n?.includeHash||i&&e.hash===t.hash}function W(e,t,n){let o=i(),s=B.useRef(null),c=B.useCallback(e=>{if(s.current=e,typeof t==`function`)return t(e);t&&(t.current=e)},[t]),{activeOptions:l,to:u,preload:d,preloadDelay:f,hashScrollIntoView:p,replace:m,startTransition:h,resetScroll:g,viewTransition:_,ignoreBlocker:v,disabled:y,target:x,onClick:S,onBlur:C,onFocus:w,onMouseEnter:T,onMouseLeave:E,onTouchStart:D}=e,O=r(),[k,A,j]=V(e.search,e.params,l),[M,N]=B.useMemo(()=>[e,{...e}],[o,e.from,e._fromLocation,e.hash,e.to,k,A,e.state,e.mask,e.unsafeRelative]),P=B.useCallback(e=>{let t=ee(u,o.protocolAllowlist);if(t!==void 0)return[t??void 0];M._fromLocation||(N._fromLocation=e);let n=o.buildLocation(N),r=ie(n,o,y);return[r,!y&&(!r||b(r))?void 0:te(e,n,j,o.basepath,O)]},[j,y,O,M,N,o,u]),[F,I]=a(o.stores.location,P,U),L=I===void 0?F:void 0,R=y||F===void 0,z=B.useRef(!1),W=e.reloadDocument||L||R?!1:d??o.options.defaultPreload,G=f??o.options.defaultPreloadDelay??0,K=B.useCallback(e=>{let t=e?.isIntersecting;if(!(t??W===`intent`)){t===!1&&Y(s);return}if(!G){H(o,M);return}J.has(s)||J.set(s,setTimeout(()=>{J.delete(s),H(o,M)},G))},[o,M,s,W,G]);B.useEffect(()=>{W===`render`&&!z.current&&(z.current=!0,H(o,M));let e;return W===`viewport`&&s.current&&typeof IntersectionObserver==`function`&&(e=new IntersectionObserver(e=>K(e.pop()),{rootMargin:`100px`}),e.observe(s.current)),()=>{e?.disconnect(),Y(s)}},[o,M,W,K,s]);let q=ne(e,n);if(q.ref=t?c:s,L)return q.href=L,q;let Z=e=>{let t=x??e.currentTarget.getAttribute(`target`);!R&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(!t||t===`_self`)&&e.button===0&&(e.preventDefault(),o.navigate({...M,replace:m,resetScroll:g,hashScrollIntoView:p,startTransition:h,viewTransition:_,ignoreBlocker:v}))},Q=()=>{W===`intent`&&H(o,M)},$=()=>{W===`intent`&&Y(s)};return q.onClick=X(S,Z),q.onBlur=X(C,$),q.onFocus=X(w,K),q.onMouseEnter=X(T,K),q.onMouseLeave=X(E,$),q.onTouchStart=X(D,Q),re(q,e,I,F,R,n)}var G={},K={className:`active`},q=new Set([`to`,`params`,`search`,`hash`,`state`,`mask`,`from`,`unsafeRelative`,`_fromLocation`,`reloadDocument`,`preload`,`preloadDelay`,`preloadIntentProximity`,`hashScrollIntoView`,`replace`,`startTransition`,`resetScroll`,`viewTransition`,`ignoreBlocker`,`activeProps`,`inactiveProps`,`activeOptions`,`_asChild`]);function ne(e,t){let n={};for(let r in e)q.has(r)||r===`type`&&t!==void 0||r===`disabled`&&t===`a`||(n[r]=e[r]);return n}function re(e,t,n,r,i,a){let{activeProps:o,inactiveProps:c,className:l,style:u,target:d}=t,f=s(n?o:c,{})??(n?K:G);Object.assign(e,f),e.href=r,a!==`a`&&(e.disabled=i),e.target=d;let p=f.style;(u||p)&&(e.style=u&&p?{...u,...p}:u||p);let m=f.className;return(l||m)&&(e.className=l?m?`${l} ${m}`:l:m),i&&(e.role=`link`,e[`aria-disabled`]=!0),n&&(e[`data-status`]=`active`,e[`aria-current`]=`page`),e}var J=new WeakMap,Y=e=>{clearTimeout(J.get(e)),J.delete(e)},X=(e,t)=>e?n=>n.defaultPrevented||(e(n),n.defaultPrevented||t(n)):t;function ie(e,t,n){if(n)return;let r=e.maskedLocation??e,i=r.external?r.publicHref:t.history.createHref(r.publicHref)||`/`;if(!r.external&&i===r.publicHref||!S(i,t.protocolAllowlist))return i}var Z=B.memo(B.forwardRef((e,t)=>{let n=e._asChild||`a`,r=W(e,t,n),i=typeof e.children==`function`?e.children({isActive:r[`data-status`]===`active`}):e.children;return B.createElement(n,r,i)}),Q);function Q(e,t){let n=0;for(let r in t)if(n++,e[r]!==t[r]&&(!q.has(r)||!m(e[r],t[r],!1,!0)))return!1;for(let t in e)n--;return n===0}export{d as C,o as S,f as T,b as _,P as a,S as b,j as c,u as d,E as f,s as g,T as h,R as i,y as l,D as m,k as n,M as o,m as p,F as r,A as s,Z as t,O as u,l as v,x as w,h as x,c as y}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{a as r,n as i,t as a}from"./useSelector-C6_B_5v6.js";function o(e){return e[e.length-1]}function s(e,t){return typeof e==`function`?e(t):e}var c=Object.prototype.hasOwnProperty;function l(e){for(let t in e)if(c.call(e,t))return!0;return!1}var u=()=>Object.create(null),d=(e,t)=>f(e,t,!0);function f(e,t,n,r=0){if(e===t)return e;if(r++>500)return t;let i=Array.isArray(e)&&Array.isArray(t);if(!i&&!(p(e)&&p(t)))return t;let a=Object.keys(e),s=a.length,l=Object.keys(t),d=l.length;if(i?s!==e.length||d!==t.length||s&&o(a)!==`${s-1}`||d&&o(l)!==`${d-1}`:s!==Object.getOwnPropertyNames(e).length||d!==Object.getOwnPropertyNames(t).length||Object.getOwnPropertySymbols(t).length)return t;let m=0,h,g,_;if(i){for(;mm&&(h=t[_],h=g===h?g:typeof g==`object`?f(g,h,n,r):h),v[_]=o`{}]/g;function _(e){return e.replace(g,e=>`%`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function v(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return _(t)}var y=[`http:`,`https:`,`mailto:`,`tel:`];function b(e){if(e[0]!==`/`&&e.includes(`:`))return/^[\x00-\x20]*([a-z][a-z\d+.\t\n\r-]*:)/i.exec(e)?.[1]?.replace(/[\t\n\r]/g,``).toLowerCase()}var x=/^[\x00-\x20]*[\\/][\t\n\r]*[\\/]/;function S(e,t){if(!e)return!1;if(x.test(e))return!0;let n=b(e);return n?!t.has(n):!1}var C={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},w=/[&><\u2028\u2029]/g;function T(e){return e.replace(w,e=>C[e])}function E(e){if(!e)return e;let t=e;if(/[%\\\x00-\x1f\x7f]/.test(e)){let n=/%25|%5C/gi,r=0,i;for(t=``;(i=n.exec(e))!==null;)t+=v(e.slice(r,i.index))+i[0],r=n.lastIndex;t+=v(r?e.slice(r):e)}return t}function D(e){return/[\s\u0080-\uFFFF]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function O(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n1&&e[t-1]===`/`?e.replace(/\/+$/,``):e}function M(e){return j(A(e))}function N(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function P(e,t,n=`never`,r){if(t.includes(`//`)&&(t=k(t)),t.startsWith(`/`))return t.length===1||n===`preserve`?t:n===`always`?t.endsWith(`/`)?t:`${t}/`:t.endsWith(`/`)?t.slice(0,-1):t;let i=t===`.`,a;if(r){a=i?e:e+`\0`+t;let n=r.get(a);if(n)return n}let s;if(i)s=e.split(`/`);else{for(e.includes(`//`)&&(e=k(e)),s=e.split(`/`);s.length>1&&o(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1?s.pop():s=[``]:r===`.`||s.push(r)}}s.length>1&&(o(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=s.join(`/`),l=(i?k(c):c)||`/`;return a&&r&&r.set(a,l),l}function F(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=new RegExp([...t.keys()].join(`|`).replace(/[.*()]/g,`\\$&`),`g`);return e=>e.replace(n,e=>t.get(e)??e)}function I(e){return e==null||e===``}function L(e,t,n){if(typeof t!=`string`)return``+(t??void 0);let r=e===`_splat`;if(r&&(!t||/^[a-zA-Z0-9\-._~!/]*$/.test(t)))return t;let i=encodeURIComponent(t);return r&&(i=i.replaceAll(`%2F`,`/`)),n?n(i):i}function R(e,t,n,r,i){let a=e.endsWith(`/`)?`/`:``,o=``;for(let e of t){if(typeof e==`string`){o+=e;continue}let[t,s,c,l]=e,u=t===2,d=u&&l!==void 0?l+a:l,f=n[s];if(t!==3||f!=null){if(i&&(i[s]=f,u&&(i[`*`]=f)),u&&I(f)){if(c===`/`&&!d)continue;f=``}o+=c+L(s,f,r)+(d||``)}}return o+a||`/`}var z=`Error preloading route! ☝️`,B=t(n(),1);e();function V(...e){let t=B.useRef(e),n=t.current;return e.forEach((e,t)=>{m(n[t],e,!1,!0)||(n[t]=e)}),t.current}function H(e,t){e.preloadRoute(t).catch(e=>{console.warn(e),console.warn(z)})}var U={compare:(e,t)=>e[0]===t[0]&&e[1]===t[1]};function ee(e,t){let n=typeof e==`string`&&b(e);if(n)return t.has(n)?e:null}function te(e,t,n,r,i){let a=N(e.pathname,r),o=N(t.pathname,r);return(n?.exact?a!==o:!a.startsWith(o)||a.length!==o.length&&a[o.length]!==`/`)||(n?.includeSearch??!0)&&!m(e.search,t.search,!n?.exact,n?.explicitUndefined)?!1:!n?.includeHash||i&&e.hash===t.hash}function W(e,t,n){let o=i(),s=B.useRef(null),c=B.useCallback(e=>{if(s.current=e,typeof t==`function`)return t(e);t&&(t.current=e)},[t]),{activeOptions:l,to:u,preload:d,preloadDelay:f,hashScrollIntoView:p,replace:m,startTransition:h,resetScroll:g,viewTransition:_,ignoreBlocker:v,disabled:y,target:x,onClick:S,onBlur:C,onFocus:w,onMouseEnter:T,onMouseLeave:E,onTouchStart:D}=e,O=r(!!l?.includeHash),[k,A,j]=V(e.search,e.params,l),[M,N]=B.useMemo(()=>[e,{...e}],[o,e.from,e._fromLocation,e.hash,e.to,k,A,e.state,e.mask,e.unsafeRelative]),P=B.useMemo(()=>{let e=ee(u,o.protocolAllowlist);if(e!==void 0){let t=[e??void 0];return()=>t}let t,n;return e=>{M._fromLocation||(N._fromLocation=e);let r=o.buildLocation(N),i=ie(r,o,y);return(!t||t[0]!==i)&&(t=[i,!(y||i&&!b(i))&&void 0],n=[i,!0]),t[1]!==void 0&&te(e,r,j,o.basepath,O)?n:t}},[j,y,O,M,N,o,u]),[F,I]=a(o.stores.location,P,U),L=I===void 0&&F,R=y||F===void 0,z=B.useRef(!1),W=e.reloadDocument||L||R?!1:d??o.options.defaultPreload,G=f??o.options.defaultPreloadDelay??0,K=B.useCallback(e=>{let t=e?.isIntersecting;if(!(t??W===`intent`)){t===!1&&Y(s);return}if(!G){H(o,M);return}J.has(s)||J.set(s,setTimeout(()=>{J.delete(s),H(o,M)},G))},[o,M,s,W,G]);B.useEffect(()=>{if(!W)return;W===`render`&&!z.current&&(z.current=!0,H(o,M));let e=!0,t;return W===`viewport`&&s.current&&typeof IntersectionObserver==`function`&&(t=new IntersectionObserver(t=>{e&&K(t.pop())},{rootMargin:`100px`}),t.observe(s.current)),()=>{e=!1,t?.disconnect(),Y(s)}},[o,M,W,K,s]);let q=ne(e,n);if(q.ref=t?c:s,L)return q.href=L,q;let Z=e=>{let t=x??e.currentTarget.getAttribute(`target`);!R&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(!t||t===`_self`)&&e.button===0&&(e.preventDefault(),o.navigate({...M,replace:m,resetScroll:g,hashScrollIntoView:p,startTransition:h,viewTransition:_,ignoreBlocker:v}))},Q=()=>{W===`intent`&&H(o,M)},$=()=>{W===`intent`&&Y(s)};return q.onClick=X(S,Z),q.onBlur=X(C,$),q.onFocus=X(w,K),q.onMouseEnter=X(T,K),q.onMouseLeave=X(E,$),q.onTouchStart=X(D,Q),re(q,e,I,F,R,n)}var G={},K={className:`active`},q=new Set([`to`,`params`,`search`,`hash`,`state`,`mask`,`from`,`unsafeRelative`,`_fromLocation`,`reloadDocument`,`preload`,`preloadDelay`,`preloadIntentProximity`,`hashScrollIntoView`,`replace`,`startTransition`,`resetScroll`,`viewTransition`,`ignoreBlocker`,`activeProps`,`inactiveProps`,`activeOptions`,`_asChild`]);function ne(e,t){let n={};for(let r in e)q.has(r)||r===`type`&&t!==void 0||r===`disabled`&&t===`a`||(n[r]=e[r]);return n}function re(e,t,n,r,i,a){let{activeProps:o,inactiveProps:c,className:l,style:u,target:d}=t,f=s(n?o:c,{})??(n?K:G);Object.assign(e,f),e.href=r,a!==`a`&&(e.disabled=i),e.target=d;let p=f.style;(u||p)&&(e.style=u&&p?{...u,...p}:u||p);let m=f.className;return(l||m)&&(e.className=l?m?`${l} ${m}`:l:m),i&&(e.role=`link`,e[`aria-disabled`]=!0),n&&(e[`data-status`]=`active`,e[`aria-current`]=`page`),e}var J=new WeakMap,Y=e=>{clearTimeout(J.get(e)),J.delete(e)},X=(e,t)=>e?n=>n.defaultPrevented||(e(n),n.defaultPrevented||t(n)):t;function ie(e,t,n){if(n)return;let r=e.maskedLocation??e,i=r.external?r.publicHref:t.history.createHref(r.publicHref)||`/`;if(!r.external&&i===r.publicHref||!S(i,t.protocolAllowlist))return i}var Z=B.memo(B.forwardRef((e,t)=>{let n=e._asChild||`a`,r=W(e,t,n),i=typeof e.children==`function`?e.children({isActive:r[`data-status`]===`active`}):e.children;return B.createElement(n,r,i)}),Q);function Q(e,t){let n=0;for(let r in t)if(n++,e[r]!==t[r]&&(!q.has(r)||!m(e[r],t[r],!1,!0)))return!1;for(let t in e)n--;return n===0}export{d as C,o as S,f as T,b as _,P as a,S as b,j as c,u as d,E as f,s as g,T as h,R as i,y as l,D as m,k as n,M as o,m as p,F as r,A as s,Z as t,O as u,l as v,x as w,h as x,c as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-DFj_XTL4.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-PsHyk9Gp.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-DFj_XTL4.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-PsHyk9Gp.js index 2a5451ab6..ce51fbd39 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-DFj_XTL4.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-card-PsHyk9Gp.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-Dhy4xOXd.js";var r=t(),i=e();function a(e){let t=(0,r.c)(22),a,o,s,c,l;t[0]===e?(a=t[1],o=t[2],s=t[3],c=t[4],l=t[5]):({title:l,subtitle:c,badge:a,children:o,...s}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s,t[4]=c,t[5]=l);let u;t[6]===l?u=t[7]:(u=(0,i.jsx)(`h3`,{className:`font-semibold`,children:l}),t[6]=l,t[7]=u);let d;t[8]===c?d=t[9]:(d=c&&(0,i.jsx)(`p`,{className:`mt-1 text-sm font-medium text-muted-foreground`,children:c}),t[8]=c,t[9]=d);let f;t[10]!==o||t[11]!==u||t[12]!==d?(f=(0,i.jsxs)(`div`,{className:`flex-1`,children:[u,d,o]}),t[10]=o,t[11]=u,t[12]=d,t[13]=f):f=t[13];let p;t[14]===a?p=t[15]:(p=a&&(0,i.jsx)(`div`,{className:`ml-4`,children:a}),t[14]=a,t[15]=p);let m;t[16]!==f||t[17]!==p?(m=(0,i.jsxs)(`div`,{className:`flex items-start justify-between`,children:[f,p]}),t[16]=f,t[17]=p,t[18]=m):m=t[18];let h;return t[19]!==s||t[20]!==m?(h=(0,i.jsx)(n,{className:`block rounded-lg border bg-card p-4 transition-colors hover:bg-accent`,...s,children:m}),t[19]=s,t[20]=m,t[21]=h):h=t[21],h}export{a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./link-BokOReHc.js";var r=t(),i=e();function a(e){let t=(0,r.c)(22),a,o,s,c,l;t[0]===e?(a=t[1],o=t[2],s=t[3],c=t[4],l=t[5]):({title:l,subtitle:c,badge:a,children:o,...s}=e,t[0]=e,t[1]=a,t[2]=o,t[3]=s,t[4]=c,t[5]=l);let u;t[6]===l?u=t[7]:(u=(0,i.jsx)(`h3`,{className:`font-semibold`,children:l}),t[6]=l,t[7]=u);let d;t[8]===c?d=t[9]:(d=c&&(0,i.jsx)(`p`,{className:`mt-1 text-sm font-medium text-muted-foreground`,children:c}),t[8]=c,t[9]=d);let f;t[10]!==o||t[11]!==u||t[12]!==d?(f=(0,i.jsxs)(`div`,{className:`flex-1`,children:[u,d,o]}),t[10]=o,t[11]=u,t[12]=d,t[13]=f):f=t[13];let p;t[14]===a?p=t[15]:(p=a&&(0,i.jsx)(`div`,{className:`ml-4`,children:a}),t[14]=a,t[15]=p);let m;t[16]!==f||t[17]!==p?(m=(0,i.jsxs)(`div`,{className:`flex items-start justify-between`,children:[f,p]}),t[16]=f,t[17]=p,t[18]=m):m=t[18];let h;return t[19]!==s||t[20]!==m?(h=(0,i.jsx)(n,{className:`block rounded-lg border bg-card p-4 transition-colors hover:bg-accent`,...s,children:m}),t[19]=s,t[20]=m,t[21]=h):h=t[21],h}export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-UynY0efZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-X6G1LD1-.js similarity index 88% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-UynY0efZ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-X6G1LD1-.js index f4026a72d..81b32b037 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-UynY0efZ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-X6G1LD1-.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-Dhy4xOXd.js";import{t as s}from"./useNavigate-BH3pQKLF.js";import{t as c}from"./button-BarTr35m.js";import{t as l}from"./input-6kdUb_DH.js";import{o as u}from"./ec2-CWEplLq4.js";import{n as d}from"./ecs-gqt7DXoF.js";import{r as f,t as p}from"./ecs-8RzYyUs4.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{s as g,t as _}from"./field-c7GHI5st.js";import{a as v,i as y,l as b,n as x,o as S,r as C,s as w,t as T}from"./alert-dialog-kCQ1W4Rz.js";import{t as E}from"./delete-confirmation-dialog-SdDN4LiF.js";import{t as D}from"./state-badge-D1Z6q_OA.js";import{t as O}from"./system-managed-Dk7ySh_E.js";import{t as k}from"./system-image-required-PXuPdEKF.js";import{t as A}from"./ecs-section-nav-CU0acTSl.js";var j=r(),M=t(n(),1),N=e();function P(e){let t=(0,j.c)(32),{open:n,onOpenChange:r}=e,i=p(),[a,o]=(0,M.useState)(``),s;t[0]!==i||t[1]!==r?(s=function(e){e||(o(``),i.reset()),r(e)},t[0]=i,t[1]=r,t[2]=s):s=t[2];let c=s,u;t[3]!==i||t[4]!==c||t[5]!==a?(u=async function(){try{await i.mutateAsync(a.trim()),c(!1)}catch{}},t[3]=i,t[4]=c,t[5]=a,t[6]=u):u=t[6];let d=u,f;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,N.jsxs)(w,{children:[(0,N.jsx)(b,{children:`Create Cluster`}),(0,N.jsx)(v,{children:`A cluster groups the services, tasks, and container instances that run on it.`})]}),t[7]=f):f=t[7];let m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,N.jsx)(g,{children:(0,N.jsx)(`label`,{htmlFor:`clusterName`,children:`Name`})}),t[8]=m):m=t[8];let h;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(h=e=>{o(e.target.value)},t[9]=h):h=t[9];let E;t[10]===a?E=t[11]:(E=(0,N.jsxs)(_,{children:[m,(0,N.jsx)(l,{id:`clusterName`,onChange:h,placeholder:`my-cluster`,value:a})]}),t[10]=a,t[11]=E);let D;t[12]===i.error?D=t[13]:(D=i.error&&(0,N.jsx)(`p`,{className:`text-sm text-destructive`,children:i.error.message}),t[12]=i.error,t[13]=D);let O;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,N.jsx)(C,{children:`Cancel`}),t[14]=O):O=t[14];let k;t[15]!==i.isPending||t[16]!==a?(k=i.isPending||!a.trim(),t[15]=i.isPending,t[16]=a,t[17]=k):k=t[17];let A;t[18]===d?A=t[19]:(A=e=>{e.preventDefault(),d()},t[18]=d,t[19]=A);let P=i.isPending?`Creating…`:`Create Cluster`,F;t[20]!==A||t[21]!==P||t[22]!==k?(F=(0,N.jsxs)(S,{children:[O,(0,N.jsx)(x,{disabled:k,onClick:A,children:P})]}),t[20]=A,t[21]=P,t[22]=k,t[23]=F):F=t[23];let I;t[24]!==F||t[25]!==E||t[26]!==D?(I=(0,N.jsxs)(y,{children:[f,E,D,F]}),t[24]=F,t[25]=E,t[26]=D,t[27]=I):I=t[27];let L;return t[28]!==c||t[29]!==n||t[30]!==I?(L=(0,N.jsx)(T,{onOpenChange:c,open:n,children:I}),t[28]=c,t[29]=n,t[30]=I,t[31]=L):L=t[31],L}function F(){let e=s(),t=i(),{data:n}=a(d),{data:r}=a(u),l=f(),[p,g]=(0,M.useState)(!1),[_,v]=(0,M.useState)(null),[y,b]=(0,M.useState)(!1),x=(r.Images??[]).some(O);async function S(){b(!0);try{await t.invalidateQueries({queryKey:u.queryKey})}finally{b(!1)}}function C(){_&&l.mutate(_,{onSuccess:()=>{v(null)}})}return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(m,{actions:(0,N.jsx)(c,{disabled:!x,onClick:()=>{g(!0)},children:`Create Cluster`}),title:`Clusters`}),(0,N.jsx)(A,{}),!x&&(0,N.jsx)(k,{className:`mb-6`,description:`ECS clusters need a Spinifex-managed node image (containerd + ecs-agent) to launch container instances. Import it before creating a cluster.`,importCommand:`spx admin images import --name spinifex-ecs-node`,isRechecking:y,onRecheck:S,title:`ECS system image not found`}),l.isError&&(0,N.jsx)(h,{error:l.error instanceof Error?l.error:void 0,msg:`Failed to delete cluster.`}),n.length>0?(0,N.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,N.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,N.jsx)(`thead`,{children:(0,N.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Services`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running Tasks`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Instances`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,N.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,N.jsx)(`tbody`,{children:n.map(t=>{if(!t.clusterName)return null;let n=t.clusterName;return(0,N.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await e({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:n}})},children:[(0,N.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,N.jsx)(o,{className:`text-primary hover:underline`,onClick:e=>{e.stopPropagation()},params:{clusterName:n},to:`/ecs/list-clusters/$clusterName`,children:n})}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:(0,N.jsx)(D,{state:t.status})}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.activeServicesCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.runningTasksCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.registeredContainerInstancesCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,N.jsx)(c,{onClick:e=>{e.stopPropagation(),v(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`No ECS clusters found.`}),(0,N.jsx)(P,{onOpenChange:g,open:p}),(0,N.jsx)(E,{description:`This permanently deletes cluster "${_}" and force-stops every task it holds. This cannot be undone.`,isPending:l.isPending,onConfirm:C,onOpenChange:e=>{e||v(null)},open:_!==null,title:`Delete cluster`})]})}var I=F;export{I as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as o}from"./link-BokOReHc.js";import{t as s}from"./useNavigate-CTe_-BZA.js";import{t as c}from"./button-qf9lLJ2x.js";import{t as l}from"./input-D3aUBtS6.js";import{o as u}from"./ec2-DYgBhYCJ.js";import{n as d}from"./ecs-BmKTMTV2.js";import{r as f,t as p}from"./ecs-Bz1Yh-WL.js";import{t as m}from"./page-heading-vksh_67w.js";import{t as h}from"./error-banner-DeOeVBKS.js";import{s as g,t as _}from"./field-CS-ql6du.js";import{a as v,i as y,l as b,n as x,o as S,r as C,s as w,t as T}from"./alert-dialog-jxylPXwR.js";import{t as E}from"./delete-confirmation-dialog-BYHqotoI.js";import{t as D}from"./state-badge-pn00UE1d.js";import{t as O}from"./system-managed-Dk7ySh_E.js";import{t as k}from"./system-image-required-D20bojgG.js";import{t as A}from"./ecs-section-nav-CSH8MVoU.js";var j=r(),M=t(n(),1),N=e();function P(e){let t=(0,j.c)(32),{open:n,onOpenChange:r}=e,i=p(),[a,o]=(0,M.useState)(``),s;t[0]!==i||t[1]!==r?(s=function(e){e||(o(``),i.reset()),r(e)},t[0]=i,t[1]=r,t[2]=s):s=t[2];let c=s,u;t[3]!==i||t[4]!==c||t[5]!==a?(u=async function(){try{await i.mutateAsync(a.trim()),c(!1)}catch{}},t[3]=i,t[4]=c,t[5]=a,t[6]=u):u=t[6];let d=u,f;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,N.jsxs)(w,{children:[(0,N.jsx)(b,{children:`Create Cluster`}),(0,N.jsx)(v,{children:`A cluster groups the services, tasks, and container instances that run on it.`})]}),t[7]=f):f=t[7];let m;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,N.jsx)(g,{children:(0,N.jsx)(`label`,{htmlFor:`clusterName`,children:`Name`})}),t[8]=m):m=t[8];let h;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(h=e=>{o(e.target.value)},t[9]=h):h=t[9];let E;t[10]===a?E=t[11]:(E=(0,N.jsxs)(_,{children:[m,(0,N.jsx)(l,{id:`clusterName`,onChange:h,placeholder:`my-cluster`,value:a})]}),t[10]=a,t[11]=E);let D;t[12]===i.error?D=t[13]:(D=i.error&&(0,N.jsx)(`p`,{className:`text-sm text-destructive`,children:i.error.message}),t[12]=i.error,t[13]=D);let O;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,N.jsx)(C,{children:`Cancel`}),t[14]=O):O=t[14];let k;t[15]!==i.isPending||t[16]!==a?(k=i.isPending||!a.trim(),t[15]=i.isPending,t[16]=a,t[17]=k):k=t[17];let A;t[18]===d?A=t[19]:(A=e=>{e.preventDefault(),d()},t[18]=d,t[19]=A);let P=i.isPending?`Creating…`:`Create Cluster`,F;t[20]!==A||t[21]!==P||t[22]!==k?(F=(0,N.jsxs)(S,{children:[O,(0,N.jsx)(x,{disabled:k,onClick:A,children:P})]}),t[20]=A,t[21]=P,t[22]=k,t[23]=F):F=t[23];let I;t[24]!==F||t[25]!==E||t[26]!==D?(I=(0,N.jsxs)(y,{children:[f,E,D,F]}),t[24]=F,t[25]=E,t[26]=D,t[27]=I):I=t[27];let L;return t[28]!==c||t[29]!==n||t[30]!==I?(L=(0,N.jsx)(T,{onOpenChange:c,open:n,children:I}),t[28]=c,t[29]=n,t[30]=I,t[31]=L):L=t[31],L}function F(){let e=s(),t=i(),{data:n}=a(d),{data:r}=a(u),l=f(),[p,g]=(0,M.useState)(!1),[_,v]=(0,M.useState)(null),[y,b]=(0,M.useState)(!1),x=(r.Images??[]).some(O);async function S(){b(!0);try{await t.invalidateQueries({queryKey:u.queryKey})}finally{b(!1)}}function C(){_&&l.mutate(_,{onSuccess:()=>{v(null)}})}return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(m,{actions:(0,N.jsx)(c,{disabled:!x,onClick:()=>{g(!0)},children:`Create Cluster`}),title:`Clusters`}),(0,N.jsx)(A,{}),!x&&(0,N.jsx)(k,{className:`mb-6`,description:`ECS clusters need a Spinifex-managed node image (containerd + ecs-agent) to launch container instances. Import it before creating a cluster.`,importCommand:`spx admin images import --name spinifex-ecs-node`,isRechecking:y,onRecheck:S,title:`ECS system image not found`}),l.isError&&(0,N.jsx)(h,{error:l.error instanceof Error?l.error:void 0,msg:`Failed to delete cluster.`}),n.length>0?(0,N.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,N.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,N.jsx)(`thead`,{children:(0,N.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Status`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Services`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Running Tasks`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Instances`}),(0,N.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,N.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,N.jsx)(`tbody`,{children:n.map(t=>{if(!t.clusterName)return null;let n=t.clusterName;return(0,N.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await e({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:n}})},children:[(0,N.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,N.jsx)(o,{className:`text-primary hover:underline`,onClick:e=>{e.stopPropagation()},params:{clusterName:n},to:`/ecs/list-clusters/$clusterName`,children:n})}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:(0,N.jsx)(D,{state:t.status})}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.activeServicesCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.runningTasksCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2`,children:t.registeredContainerInstancesCount??0}),(0,N.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,N.jsx)(c,{onClick:e=>{e.stopPropagation(),v(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,N.jsx)(`p`,{className:`text-muted-foreground`,children:`No ECS clusters found.`}),(0,N.jsx)(P,{onOpenChange:g,open:p}),(0,N.jsx)(E,{description:`This permanently deletes cluster "${_}" and force-stops every task it holds. This cannot be undone.`,isPending:l.isPending,onConfirm:C,onOpenChange:e=>{e||v(null)},open:_!==null,title:`Delete cluster`})]})}var I=F;export{I as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-CIHqWLhW.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-xA7fv2I4.js similarity index 82% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-CIHqWLhW.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-xA7fv2I4.js index 29d2803d8..05c240527 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-CIHqWLhW.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-clusters-xA7fv2I4.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{c as a}from"./eks-CC8GhK3R.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.clusters?s=e[1]:(s=t.clusters??[],e[0]=t.clusters,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/eks/create-cluster`,children:(0,l.jsx)(i,{children:`Create Cluster`})}),title:`Clusters`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No EKS clusters found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return(0,l.jsx)(s,{params:{clusterName:e},title:e,to:`/eks/list-clusters/$clusterName`},e)}function f(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}var p=u;export{p as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{c as a}from"./eks-Ba3nNOPR.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.clusters?s=e[1]:(s=t.clusters??[],e[0]=t.clusters,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/eks/create-cluster`,children:(0,l.jsx)(i,{children:`Create Cluster`})}),title:`Clusters`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No EKS clusters found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return(0,l.jsx)(s,{params:{clusterName:e},title:e,to:`/eks/list-clusters/$clusterName`},e)}function f(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}var p=u;export{p as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-B-aCbhJM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-86WQHO2k.js similarity index 83% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-B-aCbhJM.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-86WQHO2k.js index ad7de641a..35eb60fe8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-B-aCbhJM.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-groups-86WQHO2k.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{l as a}from"./iam-CVg27y22.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Groups?s=e[1]:(s=t.Groups??[],e[0]=t.Groups,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-group`,children:(0,l.jsx)(i,{children:`Create Group`})}),title:`Groups`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM groups found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.GroupName?(0,l.jsx)(s,{params:{groupName:e.GroupName},subtitle:e.Arn??``,title:e.GroupName,to:`/iam/list-groups/$groupName`},e.GroupName):null}function f(e,t){let n=e.GroupName?.toLowerCase()??``,r=t.GroupName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{l as a}from"./iam-DmtL7LFe.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Groups?s=e[1]:(s=t.Groups??[],e[0]=t.Groups,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-group`,children:(0,l.jsx)(i,{children:`Create Group`})}),title:`Groups`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM groups found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.GroupName?(0,l.jsx)(s,{params:{groupName:e.GroupName},subtitle:e.Arn??``,title:e.GroupName,to:`/iam/list-groups/$groupName`},e.GroupName):null}function f(e,t){let n=e.GroupName?.toLowerCase()??``,r=t.GroupName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DYYlNj8n.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DNrvWtXR.js similarity index 80% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DYYlNj8n.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DNrvWtXR.js index a73bd98a1..71e65dd12 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DYYlNj8n.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-guardrails-DNrvWtXR.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{n as i}from"./button-BarTr35m.js";import{i as a}from"./bedrock-Ct-f5HCJ.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.guardrails?s=e[1]:(s=t.guardrails??[],e[0]=t.guardrails,e[1]=s);let c;if(e[2]!==s){let t=s.toSorted(p),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{className:i({size:`sm`}),to:`/bedrock/list-guardrails/create`,children:`Create guardrail`}),title:`Guardrails`}),e[4]=n):n=e[4],c=(0,u.jsxs)(u.Fragment,{children:[n,t.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:t.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No guardrails found.`})]}),e[2]=s,e[3]=c}else c=e[3];return c}function f(e){return e.id?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.status}),params:{guardrailId:e.id},subtitle:e.id,title:e.name??e.id,to:`/bedrock/list-guardrails/$guardrailId`},e.id):null}function p(e,t){let n=e.name?.toLowerCase()??``,r=t.name?.toLowerCase()??``;return n.localeCompare(r)}var m=d;export{m as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{n as i}from"./button-qf9lLJ2x.js";import{i as a}from"./bedrock-BF8FfWcf.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.guardrails?s=e[1]:(s=t.guardrails??[],e[0]=t.guardrails,e[1]=s);let c;if(e[2]!==s){let t=s.toSorted(p),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{className:i({size:`sm`}),to:`/bedrock/list-guardrails/create`,children:`Create guardrail`}),title:`Guardrails`}),e[4]=n):n=e[4],c=(0,u.jsxs)(u.Fragment,{children:[n,t.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:t.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No guardrails found.`})]}),e[2]=s,e[3]=c}else c=e[3];return c}function f(e){return e.id?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.status}),params:{guardrailId:e.id},subtitle:e.id,title:e.name??e.id,to:`/bedrock/list-guardrails/$guardrailId`},e.id):null}function p(e,t){let n=e.name?.toLowerCase()??``,r=t.name?.toLowerCase()??``;return n.localeCompare(r)}var m=d;export{m as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-BSt7PimM.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-EE5QowIu.js similarity index 85% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-BSt7PimM.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-EE5QowIu.js index d5603f30a..6e8fbefec 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-BSt7PimM.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-instance-profiles-EE5QowIu.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{f as a}from"./iam-CVg27y22.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.InstanceProfiles?s=e[1]:(s=t.InstanceProfiles??[],e[0]=t.InstanceProfiles,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-instance-profile`,children:(0,l.jsx)(i,{children:`Create Instance Profile`})}),title:`Instance Profiles`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No instance profiles found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.InstanceProfileName?(0,l.jsx)(s,{params:{instanceProfileName:e.InstanceProfileName},subtitle:e.Arn??``,title:e.InstanceProfileName,to:`/iam/list-instance-profiles/$instanceProfileName`},e.InstanceProfileName):null}function f(e,t){let n=e.InstanceProfileName?.toLowerCase()??``,r=t.InstanceProfileName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{f as a}from"./iam-DmtL7LFe.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.InstanceProfiles?s=e[1]:(s=t.InstanceProfiles??[],e[0]=t.InstanceProfiles,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-instance-profile`,children:(0,l.jsx)(i,{children:`Create Instance Profile`})}),title:`Instance Profiles`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No instance profiles found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.InstanceProfileName?(0,l.jsx)(s,{params:{instanceProfileName:e.InstanceProfileName},subtitle:e.Arn??``,title:e.InstanceProfileName,to:`/iam/list-instance-profiles/$instanceProfileName`},e.InstanceProfileName):null}function f(e,t){let n=e.InstanceProfileName?.toLowerCase()??``,r=t.InstanceProfileName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-CH_zlnnr.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-FRi1Cu0q.js similarity index 82% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-CH_zlnnr.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-FRi1Cu0q.js index 9bbd57880..402bddd82 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-CH_zlnnr.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-knowledge-bases-FRi1Cu0q.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{n as i}from"./button-BarTr35m.js";import{i as a}from"./bedrockAgent-D9Za8qAi.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-D1Z6q_OA.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.knowledgeBaseSummaries?s=e[1]:(s=t.knowledgeBaseSummaries??[],e[0]=t.knowledgeBaseSummaries,e[1]=s);let c;if(e[2]!==s){let t=s.toSorted(p),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{className:i({size:`sm`}),to:`/bedrock/list-knowledge-bases/create`,children:`Create knowledge base`}),title:`Knowledge Bases`}),e[4]=n):n=e[4],c=(0,u.jsxs)(u.Fragment,{children:[n,t.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:t.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No knowledge bases found.`})]}),e[2]=s,e[3]=c}else c=e[3];return c}function f(e){return e.knowledgeBaseId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.status}),params:{knowledgeBaseId:e.knowledgeBaseId},subtitle:e.knowledgeBaseId,title:e.name??e.knowledgeBaseId,to:`/bedrock/list-knowledge-bases/$knowledgeBaseId`},e.knowledgeBaseId):null}function p(e,t){let n=e.name?.toLowerCase()??``,r=t.name?.toLowerCase()??``;return n.localeCompare(r)}var m=d;export{m as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{n as i}from"./button-qf9lLJ2x.js";import{i as a}from"./bedrockAgent-CtELySTw.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./state-badge-pn00UE1d.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(a),s;e[0]===t.knowledgeBaseSummaries?s=e[1]:(s=t.knowledgeBaseSummaries??[],e[0]=t.knowledgeBaseSummaries,e[1]=s);let c;if(e[2]!==s){let t=s.toSorted(p),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,u.jsx)(o,{actions:(0,u.jsx)(r,{className:i({size:`sm`}),to:`/bedrock/list-knowledge-bases/create`,children:`Create knowledge base`}),title:`Knowledge Bases`}),e[4]=n):n=e[4],c=(0,u.jsxs)(u.Fragment,{children:[n,t.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:t.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No knowledge bases found.`})]}),e[2]=s,e[3]=c}else c=e[3];return c}function f(e){return e.knowledgeBaseId?(0,u.jsx)(c,{badge:(0,u.jsx)(s,{state:e.status}),params:{knowledgeBaseId:e.knowledgeBaseId},subtitle:e.knowledgeBaseId,title:e.name??e.knowledgeBaseId,to:`/bedrock/list-knowledge-bases/$knowledgeBaseId`},e.knowledgeBaseId):null}function p(e,t){let n=e.name?.toLowerCase()??``,r=t.name?.toLowerCase()??``;return n.localeCompare(r)}var m=d;export{m as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-Ds5MpzNH.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-COS9MQ20.js similarity index 95% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-Ds5MpzNH.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-COS9MQ20.js index ac542d92e..154835259 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-Ds5MpzNH.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-access-COS9MQ20.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{t as o}from"./useQuery-2EKf7AyV.js";import{n as s}from"./redirect-B4OxYbs2.js";import{c,i as l,n as u,s as d,t as f}from"./select-B01jpDaX.js";import{t as p}from"./button-BarTr35m.js";import{t as m}from"./input-6kdUb_DH.js";import{n as h}from"./admin-context-CXmiyIcc.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./badge-B_ExXcw2.js";import{r as v,t as y}from"./card-BXl0Qff8.js";import{c as b,i as x,n as S,s as C,t as w}from"./admin-BUkrFIlI.js";import{s as T,t as E}from"./field-c7GHI5st.js";var D=r(),O=t(n(),1),k=e(),A=`000000000000`,j=/^[0-9]{12}$/;function M(e){return`${e.accountName} (${e.accountId}) — ${e.status}`}function N(e){let t=(0,D.c)(30),{entry:n,accountId:r,granted:o}=e,s=i(),c;t[0]===r?c=t[1]:(c=S(r),t[0]=r,t[1]=c);let l=c.queryKey,u;t[2]!==l||t[3]!==s?(u={mutationFn:C,onSuccess:()=>{s.invalidateQueries({queryKey:l})}},t[2]=l,t[3]=s,t[4]=u):u=t[4];let d=a(u),f;t[5]!==l||t[6]!==s?(f={mutationFn:b,onSuccess:()=>{s.invalidateQueries({queryKey:l})}},t[5]=l,t[6]=s,t[7]=f):f=t[7];let m=a(f),h=d.isPending||m.isPending,g;t[8]===n.modelName?g=t[9]:(g=(0,k.jsx)(`div`,{className:`font-medium`,children:n.modelName}),t[8]=n.modelName,t[9]=g);let v;t[10]===n.modelId?v=t[11]:(v=(0,k.jsx)(`div`,{className:`font-mono text-muted-foreground`,children:n.modelId}),t[10]=n.modelId,t[11]=v);let y;t[12]!==g||t[13]!==v?(y=(0,k.jsxs)(`td`,{className:`py-1.5 pr-4`,children:[g,v]}),t[12]=g,t[13]=v,t[14]=y):y=t[14];let x=o?`default`:`secondary`,w=o?`Granted`:`Ungranted`,T;t[15]!==x||t[16]!==w?(T=(0,k.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,k.jsx)(_,{className:`text-[0.625rem]`,variant:x,children:w})}),t[15]=x,t[16]=w,t[17]=T):T=t[17];let E;t[18]!==r||t[19]!==n.modelId||t[20]!==d||t[21]!==o||t[22]!==h||t[23]!==m?(E=(0,k.jsx)(`td`,{className:`py-1.5`,children:o?(0,k.jsx)(p,{disabled:h,onClick:()=>{m.mutate({accountId:r,modelId:n.modelId})},size:`sm`,variant:`destructive`,children:`Revoke`}):(0,k.jsx)(p,{disabled:h,onClick:()=>{d.mutate({accountId:r,modelId:n.modelId})},size:`sm`,variant:`outline`,children:`Grant`})}),t[18]=r,t[19]=n.modelId,t[20]=d,t[21]=o,t[22]=h,t[23]=m,t[24]=E):E=t[24];let O;return t[25]!==n.modelId||t[26]!==E||t[27]!==y||t[28]!==T?(O=(0,k.jsxs)(`tr`,{className:`border-b last:border-0`,children:[y,T,E]},n.modelId),t[25]=n.modelId,t[26]=E,t[27]=y,t[28]=T,t[29]=O):O=t[29],O}function P(e){let t=(0,D.c)(10),{entries:n,accountId:r,grantedModelIds:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,k.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,k.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Access`}),(0,k.jsx)(`th`,{className:`pb-1 font-medium`,children:`Action`})]})}),t[0]=a):a=t[0];let o;if(t[1]!==r||t[2]!==n||t[3]!==i){let e;t[5]!==r||t[6]!==i?(e=e=>(0,k.jsx)(N,{accountId:r,entry:e,granted:i.has(e.modelId)},e.modelId),t[5]=r,t[6]=i,t[7]=e):e=t[7],o=n.map(e),t[1]=r,t[2]=n,t[3]=i,t[4]=o}else o=t[4];let s;return t[8]===o?s=t[9]:(s=(0,k.jsx)(`div`,{className:`overflow-x-auto`,children:(0,k.jsxs)(`table`,{className:`w-full text-xs`,children:[a,(0,k.jsx)(`tbody`,{children:o})]})}),t[8]=o,t[9]=s),s}function F(e){let t=(0,D.c)(29),{accounts:n,accountId:r,onAccountIdChange:i}=e,a,o,s,l,p,m,h,g;if(t[0]!==r||t[1]!==n||t[2]!==i){let e=n.toSorted(L);s=E,t[11]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,k.jsx)(T,{children:(0,k.jsx)(`label`,{htmlFor:`model-access-account`,children:`Account`})}),t[11]=g):g=t[11],o=f,t[12]===i?p=t[13]:(p=e=>{i(e??``)},t[12]=i,t[13]=p),m=r,t[14]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,k.jsx)(d,{className:`w-full`,id:`model-access-account`,children:(0,k.jsx)(c,{placeholder:`Select an account`})}),t[14]=h):h=t[14],a=u,l=e.map(I),t[0]=r,t[1]=n,t[2]=i,t[3]=a,t[4]=o,t[5]=s,t[6]=l,t[7]=p,t[8]=m,t[9]=h,t[10]=g}else a=t[3],o=t[4],s=t[5],l=t[6],p=t[7],m=t[8],h=t[9],g=t[10];let _;t[15]!==a||t[16]!==l?(_=(0,k.jsx)(a,{children:l}),t[15]=a,t[16]=l,t[17]=_):_=t[17];let v;t[18]!==o||t[19]!==p||t[20]!==m||t[21]!==h||t[22]!==_?(v=(0,k.jsxs)(o,{onValueChange:p,value:m,children:[h,_]}),t[18]=o,t[19]=p,t[20]=m,t[21]=h,t[22]=_,t[23]=v):v=t[23];let y;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,k.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:`Select an account.`}),t[24]=y):y=t[24];let b;return t[25]!==s||t[26]!==g||t[27]!==v?(b=(0,k.jsxs)(s,{children:[g,v,y]}),t[25]=s,t[26]=g,t[27]=v,t[28]=b):b=t[28],b}function I(e){return(0,k.jsx)(l,{value:e.accountId,children:M(e)},e.accountId)}function L(e,t){return e.accountName.localeCompare(t.accountName)}function R(e){let t=(0,D.c)(14),{accountId:n,onAccountIdChange:r}=e,i;t[0]===n?i=t[1]:(i=n!==``&&!j.test(n),t[0]=n,t[1]=i);let a=i,o;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,k.jsx)(T,{children:(0,k.jsx)(`label`,{htmlFor:`model-access-account`,children:`Account ID`})}),t[2]=o):o=t[2];let s;t[3]===r?s=t[4]:(s=e=>{r(e.target.value)},t[3]=r,t[4]=s);let c;t[5]!==n||t[6]!==a||t[7]!==s?(c=(0,k.jsx)(m,{"aria-invalid":a,id:`model-access-account`,onChange:s,placeholder:`123456789012`,value:n}),t[5]=n,t[6]=a,t[7]=s,t[8]=c):c=t[8];let l=a?`Enter a 12-digit numeric account ID.`:`Enter a 12-digit account ID — account list unavailable.`,u;t[9]===l?u=t[10]:(u=(0,k.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:l}),t[9]=l,t[10]=u);let d;return t[11]!==c||t[12]!==u?(d=(0,k.jsxs)(E,{children:[o,c,u]}),t[11]=c,t[12]=u,t[13]=d):d=t[13],d}function z(e){let t=(0,D.c)(6),{accountId:n,entries:r,grantedModelIds:i}=e;if(n===``){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Enter an account ID to view and manage its model access.`}),t[0]=e):e=t[0],e}if(r.length===0){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No models found.`}),t[1]=e):e=t[1],e}let a;return t[2]!==n||t[3]!==r||t[4]!==i?(a=(0,k.jsx)(P,{accountId:n,entries:r,grantedModelIds:i}),t[2]=n,t[3]=r,t[4]=i,t[5]=a):a=t[5],a}function B(){let e=(0,D.c)(24),[t,n]=(0,O.useState)(``),r=o(w),i;e[0]===r.data?.accounts?i=e[1]:(i=r.data?.accounts??[],e[0]=r.data?.accounts,e[1]=i);let a;e[2]===i?a=e[3]:(a=i.filter(H),e[2]=i,e[3]=a);let s=a,c=r.isSuccess&&s.length>0,l=(c?t!==``:j.test(t))?t:``,{data:u}=o(x),d;e[4]===l?d=e[5]:(d=S(l),e[4]=l,e[5]=d);let{data:f}=o(d),p;e[6]===u?.entries?p=e[7]:(p=u?.entries??[],e[6]=u?.entries,e[7]=p);let m;e[8]===p?m=e[9]:(m=p.toSorted(V),e[8]=p,e[9]=m);let h=m,_=f?.ModelIds,b;e[10]===_?b=e[11]:(b=new Set(_),e[10]=_,e[11]=b);let C=b,T;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,k.jsx)(g,{title:`Model Access`}),e[12]=T):T=e[12];let E;e[13]!==t||e[14]!==s||e[15]!==c?(E=(0,k.jsx)(`div`,{className:`mb-3 max-w-sm`,children:c?(0,k.jsx)(F,{accountId:t,accounts:s,onAccountIdChange:n}):(0,k.jsx)(R,{accountId:t,onAccountIdChange:n})}),e[13]=t,e[14]=s,e[15]=c,e[16]=E):E=e[16];let A;e[17]!==l||e[18]!==h||e[19]!==C?(A=(0,k.jsx)(z,{accountId:l,entries:h,grantedModelIds:C}),e[17]=l,e[18]=h,e[19]=C,e[20]=A):A=e[20];let M;return e[21]!==E||e[22]!==A?(M=(0,k.jsxs)(k.Fragment,{children:[T,(0,k.jsx)(y,{children:(0,k.jsxs)(v,{children:[E,A]})})]}),e[21]=E,e[22]=A,e[23]=M):M=e[23],M}function V(e,t){return e.modelName.localeCompare(t.modelName)}function H(e){return e.accountId!==A}function U(){let e=(0,D.c)(1),{isAdmin:t}=h();if(!t)throw s({to:`/`});let n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,k.jsx)(B,{}),e[0]=n):n=e[0],n}export{U as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{A as i}from"./removable-Dwr9otKB.js";import{t as a}from"./useMutation-6rdxVQpi.js";import{t as o}from"./useQuery-2EKf7AyV.js";import{n as s}from"./redirect-B4OxYbs2.js";import{c,i as l,n as u,s as d,t as f}from"./select-Cn66OoPn.js";import{t as p}from"./button-qf9lLJ2x.js";import{t as m}from"./input-D3aUBtS6.js";import{n as h}from"./admin-context-C7nTf-ee.js";import{t as g}from"./page-heading-vksh_67w.js";import{t as _}from"./badge-6vbuGFqk.js";import{r as v,t as y}from"./card-xPs7xSYh.js";import{c as b,i as x,n as S,s as C,t as w}from"./admin-JuLSsFKq.js";import{s as T,t as E}from"./field-CS-ql6du.js";var D=r(),O=t(n(),1),k=e(),A=`000000000000`,j=/^[0-9]{12}$/;function M(e){return`${e.accountName} (${e.accountId}) — ${e.status}`}function N(e){let t=(0,D.c)(30),{entry:n,accountId:r,granted:o}=e,s=i(),c;t[0]===r?c=t[1]:(c=S(r),t[0]=r,t[1]=c);let l=c.queryKey,u;t[2]!==l||t[3]!==s?(u={mutationFn:C,onSuccess:()=>{s.invalidateQueries({queryKey:l})}},t[2]=l,t[3]=s,t[4]=u):u=t[4];let d=a(u),f;t[5]!==l||t[6]!==s?(f={mutationFn:b,onSuccess:()=>{s.invalidateQueries({queryKey:l})}},t[5]=l,t[6]=s,t[7]=f):f=t[7];let m=a(f),h=d.isPending||m.isPending,g;t[8]===n.modelName?g=t[9]:(g=(0,k.jsx)(`div`,{className:`font-medium`,children:n.modelName}),t[8]=n.modelName,t[9]=g);let v;t[10]===n.modelId?v=t[11]:(v=(0,k.jsx)(`div`,{className:`font-mono text-muted-foreground`,children:n.modelId}),t[10]=n.modelId,t[11]=v);let y;t[12]!==g||t[13]!==v?(y=(0,k.jsxs)(`td`,{className:`py-1.5 pr-4`,children:[g,v]}),t[12]=g,t[13]=v,t[14]=y):y=t[14];let x=o?`default`:`secondary`,w=o?`Granted`:`Ungranted`,T;t[15]!==x||t[16]!==w?(T=(0,k.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,k.jsx)(_,{className:`text-[0.625rem]`,variant:x,children:w})}),t[15]=x,t[16]=w,t[17]=T):T=t[17];let E;t[18]!==r||t[19]!==n.modelId||t[20]!==d||t[21]!==o||t[22]!==h||t[23]!==m?(E=(0,k.jsx)(`td`,{className:`py-1.5`,children:o?(0,k.jsx)(p,{disabled:h,onClick:()=>{m.mutate({accountId:r,modelId:n.modelId})},size:`sm`,variant:`destructive`,children:`Revoke`}):(0,k.jsx)(p,{disabled:h,onClick:()=>{d.mutate({accountId:r,modelId:n.modelId})},size:`sm`,variant:`outline`,children:`Grant`})}),t[18]=r,t[19]=n.modelId,t[20]=d,t[21]=o,t[22]=h,t[23]=m,t[24]=E):E=t[24];let O;return t[25]!==n.modelId||t[26]!==E||t[27]!==y||t[28]!==T?(O=(0,k.jsxs)(`tr`,{className:`border-b last:border-0`,children:[y,T,E]},n.modelId),t[25]=n.modelId,t[26]=E,t[27]=y,t[28]=T,t[29]=O):O=t[29],O}function P(e){let t=(0,D.c)(10),{entries:n,accountId:r,grantedModelIds:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,k.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,k.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Access`}),(0,k.jsx)(`th`,{className:`pb-1 font-medium`,children:`Action`})]})}),t[0]=a):a=t[0];let o;if(t[1]!==r||t[2]!==n||t[3]!==i){let e;t[5]!==r||t[6]!==i?(e=e=>(0,k.jsx)(N,{accountId:r,entry:e,granted:i.has(e.modelId)},e.modelId),t[5]=r,t[6]=i,t[7]=e):e=t[7],o=n.map(e),t[1]=r,t[2]=n,t[3]=i,t[4]=o}else o=t[4];let s;return t[8]===o?s=t[9]:(s=(0,k.jsx)(`div`,{className:`overflow-x-auto`,children:(0,k.jsxs)(`table`,{className:`w-full text-xs`,children:[a,(0,k.jsx)(`tbody`,{children:o})]})}),t[8]=o,t[9]=s),s}function F(e){let t=(0,D.c)(29),{accounts:n,accountId:r,onAccountIdChange:i}=e,a,o,s,l,p,m,h,g;if(t[0]!==r||t[1]!==n||t[2]!==i){let e=n.toSorted(L);s=E,t[11]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,k.jsx)(T,{children:(0,k.jsx)(`label`,{htmlFor:`model-access-account`,children:`Account`})}),t[11]=g):g=t[11],o=f,t[12]===i?p=t[13]:(p=e=>{i(e??``)},t[12]=i,t[13]=p),m=r,t[14]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,k.jsx)(d,{className:`w-full`,id:`model-access-account`,children:(0,k.jsx)(c,{placeholder:`Select an account`})}),t[14]=h):h=t[14],a=u,l=e.map(I),t[0]=r,t[1]=n,t[2]=i,t[3]=a,t[4]=o,t[5]=s,t[6]=l,t[7]=p,t[8]=m,t[9]=h,t[10]=g}else a=t[3],o=t[4],s=t[5],l=t[6],p=t[7],m=t[8],h=t[9],g=t[10];let _;t[15]!==a||t[16]!==l?(_=(0,k.jsx)(a,{children:l}),t[15]=a,t[16]=l,t[17]=_):_=t[17];let v;t[18]!==o||t[19]!==p||t[20]!==m||t[21]!==h||t[22]!==_?(v=(0,k.jsxs)(o,{onValueChange:p,value:m,children:[h,_]}),t[18]=o,t[19]=p,t[20]=m,t[21]=h,t[22]=_,t[23]=v):v=t[23];let y;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,k.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:`Select an account.`}),t[24]=y):y=t[24];let b;return t[25]!==s||t[26]!==g||t[27]!==v?(b=(0,k.jsxs)(s,{children:[g,v,y]}),t[25]=s,t[26]=g,t[27]=v,t[28]=b):b=t[28],b}function I(e){return(0,k.jsx)(l,{value:e.accountId,children:M(e)},e.accountId)}function L(e,t){return e.accountName.localeCompare(t.accountName)}function R(e){let t=(0,D.c)(14),{accountId:n,onAccountIdChange:r}=e,i;t[0]===n?i=t[1]:(i=n!==``&&!j.test(n),t[0]=n,t[1]=i);let a=i,o;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,k.jsx)(T,{children:(0,k.jsx)(`label`,{htmlFor:`model-access-account`,children:`Account ID`})}),t[2]=o):o=t[2];let s;t[3]===r?s=t[4]:(s=e=>{r(e.target.value)},t[3]=r,t[4]=s);let c;t[5]!==n||t[6]!==a||t[7]!==s?(c=(0,k.jsx)(m,{"aria-invalid":a,id:`model-access-account`,onChange:s,placeholder:`123456789012`,value:n}),t[5]=n,t[6]=a,t[7]=s,t[8]=c):c=t[8];let l=a?`Enter a 12-digit numeric account ID.`:`Enter a 12-digit account ID — account list unavailable.`,u;t[9]===l?u=t[10]:(u=(0,k.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:l}),t[9]=l,t[10]=u);let d;return t[11]!==c||t[12]!==u?(d=(0,k.jsxs)(E,{children:[o,c,u]}),t[11]=c,t[12]=u,t[13]=d):d=t[13],d}function z(e){let t=(0,D.c)(6),{accountId:n,entries:r,grantedModelIds:i}=e;if(n===``){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Enter an account ID to view and manage its model access.`}),t[0]=e):e=t[0],e}if(r.length===0){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No models found.`}),t[1]=e):e=t[1],e}let a;return t[2]!==n||t[3]!==r||t[4]!==i?(a=(0,k.jsx)(P,{accountId:n,entries:r,grantedModelIds:i}),t[2]=n,t[3]=r,t[4]=i,t[5]=a):a=t[5],a}function B(){let e=(0,D.c)(24),[t,n]=(0,O.useState)(``),r=o(w),i;e[0]===r.data?.accounts?i=e[1]:(i=r.data?.accounts??[],e[0]=r.data?.accounts,e[1]=i);let a;e[2]===i?a=e[3]:(a=i.filter(H),e[2]=i,e[3]=a);let s=a,c=r.isSuccess&&s.length>0,l=(c?t!==``:j.test(t))?t:``,{data:u}=o(x),d;e[4]===l?d=e[5]:(d=S(l),e[4]=l,e[5]=d);let{data:f}=o(d),p;e[6]===u?.entries?p=e[7]:(p=u?.entries??[],e[6]=u?.entries,e[7]=p);let m;e[8]===p?m=e[9]:(m=p.toSorted(V),e[8]=p,e[9]=m);let h=m,_=f?.ModelIds,b;e[10]===_?b=e[11]:(b=new Set(_),e[10]=_,e[11]=b);let C=b,T;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,k.jsx)(g,{title:`Model Access`}),e[12]=T):T=e[12];let E;e[13]!==t||e[14]!==s||e[15]!==c?(E=(0,k.jsx)(`div`,{className:`mb-3 max-w-sm`,children:c?(0,k.jsx)(F,{accountId:t,accounts:s,onAccountIdChange:n}):(0,k.jsx)(R,{accountId:t,onAccountIdChange:n})}),e[13]=t,e[14]=s,e[15]=c,e[16]=E):E=e[16];let A;e[17]!==l||e[18]!==h||e[19]!==C?(A=(0,k.jsx)(z,{accountId:l,entries:h,grantedModelIds:C}),e[17]=l,e[18]=h,e[19]=C,e[20]=A):A=e[20];let M;return e[21]!==E||e[22]!==A?(M=(0,k.jsxs)(k.Fragment,{children:[T,(0,k.jsx)(y,{children:(0,k.jsxs)(v,{children:[E,A]})})]}),e[21]=E,e[22]=A,e[23]=M):M=e[23],M}function V(e,t){return e.modelName.localeCompare(t.modelName)}function H(e){return e.accountId!==A}function U(){let e=(0,D.c)(1),{isAdmin:t}=h();if(!t)throw s({to:`/`});let n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,k.jsx)(B,{}),e[0]=n):n=e[0],n}export{U as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CPZ8xUbd.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CoTQPvKo.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CPZ8xUbd.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CoTQPvKo.js index dd58f54a1..9f0e49ed6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CPZ8xUbd.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-model-catalog-CoTQPvKo.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{n as r}from"./redirect-B4OxYbs2.js";import{on as i}from"./cluster-config-xw_Q7X1e.js";import{n as a}from"./admin-context-CXmiyIcc.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./badge-B_ExXcw2.js";import{r as c,t as l}from"./card-BXl0Qff8.js";import{i as u}from"./admin-BUkrFIlI.js";var d=t(),f=e();function p(e){return e.instanceType!==``}function m(e){return[...new Set([...e.inputModalities,...e.outputModalities])].map(e=>(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`outline`,children:e},e))}function h(e){return`$${(e/1e6).toFixed(2)}`}function g(e){let t=(0,d.c)(9),{entry:n}=e;if(p(n)){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`secondary`,children:`Included`}),t[0]=e):e=t[0],e}if(!n.priceKnown){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`Price unknown`}),t[1]=e):e=t[1],e}let r;t[2]===n.inputPriceMicroUsdPerMillion?r=t[3]:(r=h(n.inputPriceMicroUsdPerMillion),t[2]=n.inputPriceMicroUsdPerMillion,t[3]=r);let i;t[4]===n.outputPriceMicroUsdPerMillion?i=t[5]:(i=h(n.outputPriceMicroUsdPerMillion),t[4]=n.outputPriceMicroUsdPerMillion,t[5]=i);let a;return t[6]!==r||t[7]!==i?(a=(0,f.jsxs)(`span`,{className:`font-mono`,children:[r,` in /`,` `,i,` out per MTok`]}),t[6]=r,t[7]=i,t[8]=a):a=t[8],a}var _={available:`Available`,ungranted:`Ungranted`,"no-weights-staged":`No weights staged`,"no-credential":`No credential`},v={available:void 0,ungranted:`Grant access to enable this model`,"no-weights-staged":`Stage weights to enable this model`,"no-credential":`Add a provider credential to enable this model`};function y(e){return e===`available`?`default`:e===`ungranted`?`secondary`:`destructive`}function b(e){let t=(0,d.c)(10),{availability:n}=e,r=v[n],i;t[0]===n?i=t[1]:(i=y(n),t[0]=n,t[1]=i);let a=_[n],o;t[2]!==i||t[3]!==a?(o=(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:i,children:a}),t[2]=i,t[3]=a,t[4]=o):o=t[4];let c;t[5]===r?c=t[6]:(c=r&&(0,f.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:r}),t[5]=r,t[6]=c);let l;return t[7]!==o||t[8]!==c?(l=(0,f.jsxs)(`div`,{children:[o,c]}),t[7]=o,t[8]=c,t[9]=l):l=t[9],l}function x(e){let t=(0,d.c)(5),{entries:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,f.jsx)(`thead`,{children:(0,f.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Modality`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Family`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Streaming`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Price / MTok`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`VRAM / Instance`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Co-serve group`}),(0,f.jsx)(`th`,{className:`pb-1 font-medium`,children:`Availability`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(S),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,f.jsx)(`div`,{className:`overflow-x-auto`,children:(0,f.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,f.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function S(e){return(0,f.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,f.jsxs)(`td`,{className:`py-1.5 pr-4`,children:[(0,f.jsx)(`div`,{className:`font-medium`,children:e.modelName}),(0,f.jsx)(`div`,{className:`font-mono text-muted-foreground`,children:e.modelId})]}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,f.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:m(e)})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:e.family}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.responseStreamingSupported?(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`outline`,children:`Streaming`}):(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,f.jsx)(g,{entry:e})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:p(e)?(0,f.jsxs)(`span`,{className:`font-mono`,children:[i(e.minVramMib),` · `,e.instanceType]}):(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:e.coServeGroup||`-`}),(0,f.jsx)(`td`,{className:`py-1.5`,children:(0,f.jsx)(b,{availability:e.availability})})]},e.modelId)}function C(){let e=(0,d.c)(7),{data:t}=n(u),r;e[0]===t?.entries?r=e[1]:(r=t?.entries??[],e[0]=t?.entries,e[1]=r);let i;e[2]===r?i=e[3]:(i=r.toSorted(w),e[2]=r,e[3]=i);let a=i,s;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,f.jsx)(o,{title:`Model Catalog`}),e[4]=s):s=e[4];let p;return e[5]===a?p=e[6]:(p=(0,f.jsxs)(f.Fragment,{children:[s,(0,f.jsx)(l,{children:(0,f.jsx)(c,{children:a.length>0?(0,f.jsx)(x,{entries:a}):(0,f.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No models found.`})})})]}),e[5]=a,e[6]=p),p}function w(e,t){return e.modelName.localeCompare(t.modelName)}function T(){let e=(0,d.c)(1),{isAdmin:t}=a();if(!t)throw r({to:`/`});let n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,f.jsx)(C,{}),e[0]=n):n=e[0],n}export{T as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{n as r}from"./redirect-B4OxYbs2.js";import{sn as i}from"./cluster-config-DkOiY8HH.js";import{n as a}from"./admin-context-C7nTf-ee.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./badge-6vbuGFqk.js";import{r as c,t as l}from"./card-xPs7xSYh.js";import{i as u}from"./admin-JuLSsFKq.js";var d=t(),f=e();function p(e){return e.instanceType!==``}function m(e){return[...new Set([...e.inputModalities,...e.outputModalities])].map(e=>(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`outline`,children:e},e))}function h(e){return`$${(e/1e6).toFixed(2)}`}function g(e){let t=(0,d.c)(9),{entry:n}=e;if(p(n)){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`secondary`,children:`Included`}),t[0]=e):e=t[0],e}if(!n.priceKnown){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`Price unknown`}),t[1]=e):e=t[1],e}let r;t[2]===n.inputPriceMicroUsdPerMillion?r=t[3]:(r=h(n.inputPriceMicroUsdPerMillion),t[2]=n.inputPriceMicroUsdPerMillion,t[3]=r);let i;t[4]===n.outputPriceMicroUsdPerMillion?i=t[5]:(i=h(n.outputPriceMicroUsdPerMillion),t[4]=n.outputPriceMicroUsdPerMillion,t[5]=i);let a;return t[6]!==r||t[7]!==i?(a=(0,f.jsxs)(`span`,{className:`font-mono`,children:[r,` in /`,` `,i,` out per MTok`]}),t[6]=r,t[7]=i,t[8]=a):a=t[8],a}var _={available:`Available`,ungranted:`Ungranted`,"no-weights-staged":`No weights staged`,"no-credential":`No credential`},v={available:void 0,ungranted:`Grant access to enable this model`,"no-weights-staged":`Stage weights to enable this model`,"no-credential":`Add a provider credential to enable this model`};function y(e){return e===`available`?`default`:e===`ungranted`?`secondary`:`destructive`}function b(e){let t=(0,d.c)(10),{availability:n}=e,r=v[n],i;t[0]===n?i=t[1]:(i=y(n),t[0]=n,t[1]=i);let a=_[n],o;t[2]!==i||t[3]!==a?(o=(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:i,children:a}),t[2]=i,t[3]=a,t[4]=o):o=t[4];let c;t[5]===r?c=t[6]:(c=r&&(0,f.jsx)(`p`,{className:`mt-1 text-[0.625rem] text-muted-foreground`,children:r}),t[5]=r,t[6]=c);let l;return t[7]!==o||t[8]!==c?(l=(0,f.jsxs)(`div`,{children:[o,c]}),t[7]=o,t[8]=c,t[9]=l):l=t[9],l}function x(e){let t=(0,d.c)(5),{entries:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,f.jsx)(`thead`,{children:(0,f.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Modality`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Family`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Streaming`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Price / MTok`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`VRAM / Instance`}),(0,f.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Co-serve group`}),(0,f.jsx)(`th`,{className:`pb-1 font-medium`,children:`Availability`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(S),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,f.jsx)(`div`,{className:`overflow-x-auto`,children:(0,f.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,f.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function S(e){return(0,f.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,f.jsxs)(`td`,{className:`py-1.5 pr-4`,children:[(0,f.jsx)(`div`,{className:`font-medium`,children:e.modelName}),(0,f.jsx)(`div`,{className:`font-mono text-muted-foreground`,children:e.modelId})]}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,f.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:m(e)})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:e.family}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.responseStreamingSupported?(0,f.jsx)(s,{className:`text-[0.625rem]`,variant:`outline`,children:`Streaming`}):(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,f.jsx)(g,{entry:e})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4`,children:p(e)?(0,f.jsxs)(`span`,{className:`font-mono`,children:[i(e.minVramMib),` · `,e.instanceType]}):(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,f.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:e.coServeGroup||`-`}),(0,f.jsx)(`td`,{className:`py-1.5`,children:(0,f.jsx)(b,{availability:e.availability})})]},e.modelId)}function C(){let e=(0,d.c)(7),{data:t}=n(u),r;e[0]===t?.entries?r=e[1]:(r=t?.entries??[],e[0]=t?.entries,e[1]=r);let i;e[2]===r?i=e[3]:(i=r.toSorted(w),e[2]=r,e[3]=i);let a=i,s;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,f.jsx)(o,{title:`Model Catalog`}),e[4]=s):s=e[4];let p;return e[5]===a?p=e[6]:(p=(0,f.jsxs)(f.Fragment,{children:[s,(0,f.jsx)(l,{children:(0,f.jsx)(c,{children:a.length>0?(0,f.jsx)(x,{entries:a}):(0,f.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No models found.`})})})]}),e[5]=a,e[6]=p),p}function w(e,t){return e.modelName.localeCompare(t.modelName)}function T(){let e=(0,d.c)(1),{isAdmin:t}=a();if(!t)throw r({to:`/`});let n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,f.jsx)(C,{}),e[0]=n):n=e[0],n}export{T as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-DeMAXGlh.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-BO0BzScg.js similarity index 84% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-DeMAXGlh.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-BO0BzScg.js index e593e258b..b0ff7c708 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-DeMAXGlh.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-policies-BO0BzScg.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{p as a}from"./iam-CVg27y22.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Policies?s=e[1]:(s=t.Policies??[],e[0]=t.Policies,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-policy`,children:(0,l.jsx)(i,{children:`Create Policy`})}),title:`Policies`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM policies found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.Arn?(0,l.jsx)(s,{params:{policyArn:encodeURIComponent(e.Arn)},subtitle:e.Arn??``,title:e.PolicyName??``,to:`/iam/list-policies/$policyArn`},e.Arn):null}function f(e,t){let n=e.PolicyName?.toLowerCase()??``,r=t.PolicyName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{p as a}from"./iam-DmtL7LFe.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Policies?s=e[1]:(s=t.Policies??[],e[0]=t.Policies,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-policy`,children:(0,l.jsx)(i,{children:`Create Policy`})}),title:`Policies`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM policies found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.Arn?(0,l.jsx)(s,{params:{policyArn:encodeURIComponent(e.Arn)},subtitle:e.Arn??``,title:e.PolicyName??``,to:`/iam/list-policies/$policyArn`},e.Arn):null}function f(e,t){let n=e.PolicyName?.toLowerCase()??``,r=t.PolicyName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-B-9oI4MN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-DHOyauAo.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-B-9oI4MN.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-DHOyauAo.js index 65242fc4b..97f8fabc6 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-B-9oI4MN.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-repositories-DHOyauAo.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./useNavigate-BH3pQKLF.js";import{in as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./button-BarTr35m.js";import{t as l}from"./input-6kdUb_DH.js";import{n as u}from"./ecr-BFtKzkrF.js";import{i as d,n as f}from"./ecr-F-ANqxrm.js";import{t as p}from"./page-heading-vksh_67w.js";import{s as m,t as h}from"./field-c7GHI5st.js";import{a as g,i as _,l as v,n as y,o as b,r as x,s as S,t as C}from"./alert-dialog-kCQ1W4Rz.js";var w=r(),T=t(n(),1),E=e();function D(e){let t=(0,w.c)(32),{open:n,onOpenChange:r}=e,i=f(),[a,o]=(0,T.useState)(``),s;t[0]!==i||t[1]!==r?(s=function(e){e||(o(``),i.reset()),r(e)},t[0]=i,t[1]=r,t[2]=s):s=t[2];let c=s,u;t[3]!==i||t[4]!==c||t[5]!==a?(u=async function(){try{await i.mutateAsync(a.trim()),c(!1)}catch{}},t[3]=i,t[4]=c,t[5]=a,t[6]=u):u=t[6];let d=u,p;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,E.jsxs)(S,{children:[(0,E.jsx)(v,{children:`Create Repository`}),(0,E.jsx)(g,{children:`Repository names may include namespaces, e.g. team/app.`})]}),t[7]=p):p=t[7];let D;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,E.jsx)(m,{children:(0,E.jsx)(`label`,{htmlFor:`repositoryName`,children:`Name`})}),t[8]=D):D=t[8];let O;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(O=e=>{o(e.target.value)},t[9]=O):O=t[9];let k;t[10]===a?k=t[11]:(k=(0,E.jsxs)(h,{children:[D,(0,E.jsx)(l,{id:`repositoryName`,onChange:O,placeholder:`team/app`,value:a})]}),t[10]=a,t[11]=k);let A;t[12]===i.error?A=t[13]:(A=i.error&&(0,E.jsx)(`p`,{className:`text-sm text-destructive`,children:i.error.message}),t[12]=i.error,t[13]=A);let j;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,E.jsx)(x,{children:`Cancel`}),t[14]=j):j=t[14];let M;t[15]!==i.isPending||t[16]!==a?(M=i.isPending||!a.trim(),t[15]=i.isPending,t[16]=a,t[17]=M):M=t[17];let N;t[18]===d?N=t[19]:(N=e=>{e.preventDefault(),d()},t[18]=d,t[19]=N);let P=i.isPending?`Creating…`:`Create Repository`,F;t[20]!==N||t[21]!==P||t[22]!==M?(F=(0,E.jsxs)(b,{children:[j,(0,E.jsx)(y,{disabled:M,onClick:N,children:P})]}),t[20]=N,t[21]=P,t[22]=M,t[23]=F):F=t[23];let I;t[24]!==F||t[25]!==k||t[26]!==A?(I=(0,E.jsxs)(_,{children:[p,k,A,F]}),t[24]=F,t[25]=k,t[26]=A,t[27]=I):I=t[27];let L;return t[28]!==c||t[29]!==n||t[30]!==I?(L=(0,E.jsx)(C,{onOpenChange:c,open:n,children:I}),t[28]=c,t[29]=n,t[30]=I,t[31]=L):L=t[31],L}function O(){let e=(0,w.c)(35),t=o(),{data:n}=i(u),r=d(),[l,f]=(0,T.useState)(!1),[m,h]=(0,T.useState)(null),O;e[0]===n.repositories?O=e[1]:(O=n.repositories??[],e[0]=n.repositories,e[1]=O);let A=O,j;e[2]!==r||e[3]!==m?(j=async function(){if(m)try{await r.mutateAsync(m),h(null)}catch{}},e[2]=r,e[3]=m,e[4]=j):j=e[4];let M=j,N;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,E.jsx)(p,{actions:(0,E.jsx)(c,{onClick:()=>{f(!0)},children:`Create Repository`}),title:`Repositories`}),e[5]=N):N=e[5];let P;e[6]!==t||e[7]!==A?(P=A.length>0?(0,E.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,E.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`URI`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tag Mutability`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,E.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,E.jsx)(`tbody`,{children:A.map(e=>{if(!e.repositoryName)return null;let n=e.repositoryName;return(0,E.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ecr/list-repositories/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,E.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,E.jsx)(a,{className:`text-primary hover:underline`,onClick:k,params:{id:encodeURIComponent(n)},to:`/ecr/list-repositories/$id`,children:n})}),(0,E.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.repositoryUri??``}),(0,E.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTagMutability??``}),(0,E.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:s(e.createdAt)}),(0,E.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,E.jsx)(c,{onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,E.jsx)(`p`,{className:`text-muted-foreground`,children:`No repositories found.`}),e[6]=t,e[7]=A,e[8]=P):P=e[8];let F;e[9]===l?F=e[10]:(F=(0,E.jsx)(D,{onOpenChange:f,open:l}),e[9]=l,e[10]=F);let I;e[11]===Symbol.for(`react.memo_cache_sentinel`)?(I=e=>{e||h(null)},e[11]=I):I=e[11];let L=m!==null,R;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,E.jsx)(v,{children:`Delete repository?`}),e[12]=R):R=e[12];let z;e[13]===m?z=e[14]:(z=(0,E.jsxs)(S,{children:[R,(0,E.jsxs)(g,{children:[`This permanently deletes `,m,` and every image it holds. This cannot be undone.`]})]}),e[13]=m,e[14]=z);let B;e[15]===r.error?B=e[16]:(B=r.error&&(0,E.jsx)(`p`,{className:`text-sm text-destructive`,children:r.error.message}),e[15]=r.error,e[16]=B);let V;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,E.jsx)(x,{children:`Cancel`}),e[17]=V):V=e[17];let H;e[18]===M?H=e[19]:(H=e=>{e.preventDefault(),M()},e[18]=M,e[19]=H);let U=r.isPending?`Deleting…`:`Delete`,W;e[20]!==r.isPending||e[21]!==H||e[22]!==U?(W=(0,E.jsxs)(b,{children:[V,(0,E.jsx)(y,{disabled:r.isPending,onClick:H,children:U})]}),e[20]=r.isPending,e[21]=H,e[22]=U,e[23]=W):W=e[23];let G;e[24]!==W||e[25]!==z||e[26]!==B?(G=(0,E.jsxs)(_,{children:[z,B,W]}),e[24]=W,e[25]=z,e[26]=B,e[27]=G):G=e[27];let K;e[28]!==G||e[29]!==L?(K=(0,E.jsx)(C,{onOpenChange:I,open:L,children:G}),e[28]=G,e[29]=L,e[30]=K):K=e[30];let q;return e[31]!==K||e[32]!==P||e[33]!==F?(q=(0,E.jsxs)(E.Fragment,{children:[N,P,F,K]}),e[31]=K,e[32]=P,e[33]=F,e[34]=q):q=e[34],q}function k(e){e.stopPropagation()}var A=O;export{A as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./useNavigate-CTe_-BZA.js";import{an as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./button-qf9lLJ2x.js";import{t as l}from"./input-D3aUBtS6.js";import{n as u}from"./ecr-dHrKdmGg.js";import{i as d,n as f}from"./ecr-BDgZC3r0.js";import{t as p}from"./page-heading-vksh_67w.js";import{s as m,t as h}from"./field-CS-ql6du.js";import{a as g,i as _,l as v,n as y,o as b,r as x,s as S,t as C}from"./alert-dialog-jxylPXwR.js";var w=r(),T=t(n(),1),E=e();function D(e){let t=(0,w.c)(32),{open:n,onOpenChange:r}=e,i=f(),[a,o]=(0,T.useState)(``),s;t[0]!==i||t[1]!==r?(s=function(e){e||(o(``),i.reset()),r(e)},t[0]=i,t[1]=r,t[2]=s):s=t[2];let c=s,u;t[3]!==i||t[4]!==c||t[5]!==a?(u=async function(){try{await i.mutateAsync(a.trim()),c(!1)}catch{}},t[3]=i,t[4]=c,t[5]=a,t[6]=u):u=t[6];let d=u,p;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,E.jsxs)(S,{children:[(0,E.jsx)(v,{children:`Create Repository`}),(0,E.jsx)(g,{children:`Repository names may include namespaces, e.g. team/app.`})]}),t[7]=p):p=t[7];let D;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,E.jsx)(m,{children:(0,E.jsx)(`label`,{htmlFor:`repositoryName`,children:`Name`})}),t[8]=D):D=t[8];let O;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(O=e=>{o(e.target.value)},t[9]=O):O=t[9];let k;t[10]===a?k=t[11]:(k=(0,E.jsxs)(h,{children:[D,(0,E.jsx)(l,{id:`repositoryName`,onChange:O,placeholder:`team/app`,value:a})]}),t[10]=a,t[11]=k);let A;t[12]===i.error?A=t[13]:(A=i.error&&(0,E.jsx)(`p`,{className:`text-sm text-destructive`,children:i.error.message}),t[12]=i.error,t[13]=A);let j;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,E.jsx)(x,{children:`Cancel`}),t[14]=j):j=t[14];let M;t[15]!==i.isPending||t[16]!==a?(M=i.isPending||!a.trim(),t[15]=i.isPending,t[16]=a,t[17]=M):M=t[17];let N;t[18]===d?N=t[19]:(N=e=>{e.preventDefault(),d()},t[18]=d,t[19]=N);let P=i.isPending?`Creating…`:`Create Repository`,F;t[20]!==N||t[21]!==P||t[22]!==M?(F=(0,E.jsxs)(b,{children:[j,(0,E.jsx)(y,{disabled:M,onClick:N,children:P})]}),t[20]=N,t[21]=P,t[22]=M,t[23]=F):F=t[23];let I;t[24]!==F||t[25]!==k||t[26]!==A?(I=(0,E.jsxs)(_,{children:[p,k,A,F]}),t[24]=F,t[25]=k,t[26]=A,t[27]=I):I=t[27];let L;return t[28]!==c||t[29]!==n||t[30]!==I?(L=(0,E.jsx)(C,{onOpenChange:c,open:n,children:I}),t[28]=c,t[29]=n,t[30]=I,t[31]=L):L=t[31],L}function O(){let e=(0,w.c)(35),t=o(),{data:n}=i(u),r=d(),[l,f]=(0,T.useState)(!1),[m,h]=(0,T.useState)(null),O;e[0]===n.repositories?O=e[1]:(O=n.repositories??[],e[0]=n.repositories,e[1]=O);let A=O,j;e[2]!==r||e[3]!==m?(j=async function(){if(m)try{await r.mutateAsync(m),h(null)}catch{}},e[2]=r,e[3]=m,e[4]=j):j=e[4];let M=j,N;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,E.jsx)(p,{actions:(0,E.jsx)(c,{onClick:()=>{f(!0)},children:`Create Repository`}),title:`Repositories`}),e[5]=N):N=e[5];let P;e[6]!==t||e[7]!==A?(P=A.length>0?(0,E.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,E.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Name`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`URI`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Tag Mutability`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Created`}),(0,E.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,E.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,E.jsx)(`tbody`,{children:A.map(e=>{if(!e.repositoryName)return null;let n=e.repositoryName;return(0,E.jsxs)(`tr`,{className:`cursor-pointer border-b transition-colors last:border-0 hover:bg-accent`,onClick:async()=>{await t({to:`/ecr/list-repositories/$id`,params:{id:encodeURIComponent(n)}})},children:[(0,E.jsx)(`td`,{className:`px-4 py-2 font-medium`,children:(0,E.jsx)(a,{className:`text-primary hover:underline`,onClick:k,params:{id:encodeURIComponent(n)},to:`/ecr/list-repositories/$id`,children:n})}),(0,E.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:e.repositoryUri??``}),(0,E.jsx)(`td`,{className:`px-4 py-2`,children:e.imageTagMutability??``}),(0,E.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:s(e.createdAt)}),(0,E.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,E.jsx)(c,{onClick:e=>{e.stopPropagation(),h(n)},size:`sm`,variant:`destructive`,children:`Delete`})})]},n)})})]})}):(0,E.jsx)(`p`,{className:`text-muted-foreground`,children:`No repositories found.`}),e[6]=t,e[7]=A,e[8]=P):P=e[8];let F;e[9]===l?F=e[10]:(F=(0,E.jsx)(D,{onOpenChange:f,open:l}),e[9]=l,e[10]=F);let I;e[11]===Symbol.for(`react.memo_cache_sentinel`)?(I=e=>{e||h(null)},e[11]=I):I=e[11];let L=m!==null,R;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,E.jsx)(v,{children:`Delete repository?`}),e[12]=R):R=e[12];let z;e[13]===m?z=e[14]:(z=(0,E.jsxs)(S,{children:[R,(0,E.jsxs)(g,{children:[`This permanently deletes `,m,` and every image it holds. This cannot be undone.`]})]}),e[13]=m,e[14]=z);let B;e[15]===r.error?B=e[16]:(B=r.error&&(0,E.jsx)(`p`,{className:`text-sm text-destructive`,children:r.error.message}),e[15]=r.error,e[16]=B);let V;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,E.jsx)(x,{children:`Cancel`}),e[17]=V):V=e[17];let H;e[18]===M?H=e[19]:(H=e=>{e.preventDefault(),M()},e[18]=M,e[19]=H);let U=r.isPending?`Deleting…`:`Delete`,W;e[20]!==r.isPending||e[21]!==H||e[22]!==U?(W=(0,E.jsxs)(b,{children:[V,(0,E.jsx)(y,{disabled:r.isPending,onClick:H,children:U})]}),e[20]=r.isPending,e[21]=H,e[22]=U,e[23]=W):W=e[23];let G;e[24]!==W||e[25]!==z||e[26]!==B?(G=(0,E.jsxs)(_,{children:[z,B,W]}),e[24]=W,e[25]=z,e[26]=B,e[27]=G):G=e[27];let K;e[28]!==G||e[29]!==L?(K=(0,E.jsx)(C,{onOpenChange:I,open:L,children:G}),e[28]=G,e[29]=L,e[30]=K):K=e[30];let q;return e[31]!==K||e[32]!==P||e[33]!==F?(q=(0,E.jsxs)(E.Fragment,{children:[N,P,F,K]}),e[31]=K,e[32]=P,e[33]=F,e[34]=q):q=e[34],q}function k(e){e.stopPropagation()}var A=O;export{A as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-DKJKr-De.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-35tCJiv-.js similarity index 83% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-DKJKr-De.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-35tCJiv-.js index 7b1028b47..88ab67203 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-DKJKr-De.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-roles-35tCJiv-.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{y as a}from"./iam-CVg27y22.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Roles?s=e[1]:(s=t.Roles??[],e[0]=t.Roles,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-role`,children:(0,l.jsx)(i,{children:`Create Role`})}),title:`Roles`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM roles found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.RoleName?(0,l.jsx)(s,{params:{roleName:e.RoleName},subtitle:e.Arn??``,title:e.RoleName,to:`/iam/list-roles/$roleName`},e.RoleName):null}function f(e,t){let n=e.RoleName?.toLowerCase()??``,r=t.RoleName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{y as a}from"./iam-DmtL7LFe.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Roles?s=e[1]:(s=t.Roles??[],e[0]=t.Roles,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-role`,children:(0,l.jsx)(i,{children:`Create Role`})}),title:`Roles`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM roles found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.RoleName?(0,l.jsx)(s,{params:{roleName:e.RoleName},subtitle:e.Arn??``,title:e.RoleName,to:`/iam/list-roles/$roleName`},e.RoleName):null}function f(e,t){let n=e.RoleName?.toLowerCase()??``,r=t.RoleName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-B87cjyLt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-Bt1RrNuk.js similarity index 83% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-B87cjyLt.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-Bt1RrNuk.js index e44c712e5..0b96529dd 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-B87cjyLt.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/list-users-Bt1RrNuk.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{t as i}from"./button-BarTr35m.js";import{C as a}from"./iam-CVg27y22.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-DFj_XTL4.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Users?s=e[1]:(s=t.Users??[],e[0]=t.Users,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-user`,children:(0,l.jsx)(i,{children:`Create User`})}),title:`Users`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM users found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.UserName?(0,l.jsx)(s,{params:{userName:e.UserName},subtitle:e.UserId??``,title:e.UserName,to:`/iam/list-users/$userName`},e.UserName):null}function f(e,t){let n=e.UserName?.toLowerCase()??``,r=t.UserName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{t as i}from"./button-qf9lLJ2x.js";import{C as a}from"./iam-DmtL7LFe.js";import{t as o}from"./page-heading-vksh_67w.js";import{t as s}from"./list-card-PsHyk9Gp.js";var c=t(),l=e();function u(){let e=(0,c.c)(5),{data:t}=n(a),s;e[0]===t.Users?s=e[1]:(s=t.Users??[],e[0]=t.Users,e[1]=s);let u;if(e[2]!==s){let t=s.toSorted(f),n;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,l.jsx)(o,{actions:(0,l.jsx)(r,{to:`/iam/create-user`,children:(0,l.jsx)(i,{children:`Create User`})}),title:`Users`}),e[4]=n):n=e[4],u=(0,l.jsxs)(l.Fragment,{children:[n,t.length>0?(0,l.jsx)(`div`,{className:`space-y-4`,children:t.map(d)}):(0,l.jsx)(`p`,{className:`text-muted-foreground`,children:`No IAM users found.`})]}),e[2]=s,e[3]=u}else u=e[3];return u}function d(e){return e.UserName?(0,l.jsx)(s,{params:{userName:e.UserName},subtitle:e.UserId??``,title:e.UserName,to:`/iam/list-users/$userName`},e.UserName):null}function f(e,t){let n=e.UserName?.toLowerCase()??``,r=t.UserName?.toLowerCase()??``;return n.localeCompare(r)}export{u as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BDs8DRwt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BDs8DRwt.js deleted file mode 100644 index e70865d17..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BDs8DRwt.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{f as i,i as a,s as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./button-BarTr35m.js";import{t as c}from"./input-6kdUb_DH.js";import{t as l}from"./awsClient-b0hcP1Iz.js";import{t as u}from"./sts-B5ZEON3v.js";import{t as d}from"./login-Zz7MnUTC.js";import{i as ee,o as f,r as p,s as te,t as m}from"./card-BXl0Qff8.js";import{i as ne,t as re}from"./zod-DF_n2ejy.js";import{i as ie,r as h,s as g,t as _}from"./field-c7GHI5st.js";import{n as v,r as y,t as b}from"./collapsible-k5LqEmTn.js";var x=t(n()),ae=r(),S=[`https://mulgadc.com`,`https://staging.mulgadc.com`],C=`spx-handoff-ready`,w=a.extend({type:i(`spx-handoff-creds`)});function oe(e){let t=globalThis.window?.opener??null,n=typeof t?.postMessage==`function`?t:null;if(!n)return;let r=!1,i=async t=>{if(r||!S.includes(t.origin)||t.source!==n)return;let i=w.safeParse(t.data);if(i.success){r=!0,window.removeEventListener(`message`,a);try{let t=await u({accessKeyId:i.data.accessKeyId,secretAccessKey:i.data.secretAccessKey});o(t),l(),e?.onSuccess?.(),window.location.assign(`/`)}catch{e?.onFailure?.()}}},a=e=>{i(e)};window.addEventListener(`message`,a);let s=()=>{for(let e of S)try{n.postMessage({type:C},e)}catch{}};s();let c=0,d=setInterval(()=>{if(c+=1,r||c>20){clearInterval(d);return}s()},500);return()=>{clearInterval(d),window.removeEventListener(`message`,a)}}var T=new Set([`localhost`,`127.0.0.1`,`::1`]),E=/^\d{1,3}(?:\.\d{1,3}){3}$/;function se(e){let t=e.toLowerCase().replaceAll(/^\[|]$/g,``);return T.has(t)||E.test(t)?!0:t.includes(`:`)}var D=e();function O(){let e=(0,ae.c)(54),{reason:t,handoff:n}=d.useSearch(),[r,i]=(0,x.useState)(null),[v,y]=(0,x.useState)(n===`1`),b,S;e[0]===n?(b=e[1],S=e[2]):(b=()=>n===`1`?oe({onFailure:()=>{y(!1),i(`We couldn't sign you in automatically. Please enter your credentials.`)}}):void 0,S=[n],e[0]=n,e[1]=b,e[2]=S),(0,x.useEffect)(b,S);let C;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(C={resolver:re(a)},e[3]=C):C=e[3];let{register:w,handleSubmit:T,formState:E}=ne(C),{errors:O,isSubmitting:k}=E,A;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(A=async function(e){i(null);try{let t=await u(e);o(t),l(),window.location.assign(`/`)}catch{i(`Invalid credentials. Please check your Access Key ID and Secret Access Key.`)}},e[4]=A):A=e[4];let le=A;if(v){let t;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(f,{children:[(0,D.jsx)(te,{children:`Signing you in…`}),(0,D.jsx)(ee,{children:`Connecting your new Spinifex account to the console.`})]}),e[5]=t):t=e[5];let n;return e[6]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,D.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,D.jsx)(`div`,{className:`flex w-full max-w-sm flex-col gap-4`,children:(0,D.jsxs)(m,{children:[t,(0,D.jsx)(p,{children:(0,D.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`One moment — no need to copy your keys.`})})]})})}),e[6]=n):n=e[6],n}let j;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,D.jsxs)(f,{children:[(0,D.jsx)(te,{children:`Spinifex Credentials`}),(0,D.jsx)(ee,{children:`Use the credentials provided with your Spinifex account.`})]}),e[7]=j):j=e[7];let M;e[8]!==r||e[9]!==t?(M=t===`expired`&&!r&&(0,D.jsx)(`p`,{className:`mb-4 rounded-md bg-muted p-3 text-sm text-muted-foreground`,children:`Your session is no longer valid — please sign in again.`}),e[8]=r,e[9]=t,e[10]=M):M=e[10];let N;e[11]===r?N=e[12]:(N=r&&(0,D.jsx)(`p`,{className:`mb-4 rounded-md bg-destructive/10 p-3 text-sm text-destructive`,children:r}),e[11]=r,e[12]=N);let P;e[13]===T?P=e[14]:(P=T(le),e[13]=T,e[14]=P);let F;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,D.jsx)(g,{children:(0,D.jsx)(`label`,{htmlFor:`accessKeyId`,children:`Access Key ID`})}),e[15]=F):F=e[15];let I=!!O.accessKeyId,L;e[16]===w?L=e[17]:(L=w(`accessKeyId`),e[16]=w,e[17]=L);let R;e[18]!==I||e[19]!==L?(R=(0,D.jsx)(c,{"aria-invalid":I,autoComplete:`username`,id:`accessKeyId`,placeholder:`AKIAIOSFODNN7EXAMPLE`,...L}),e[18]=I,e[19]=L,e[20]=R):R=e[20];let z;e[21]===O.accessKeyId?z=e[22]:(z=(0,D.jsx)(h,{errors:[O.accessKeyId]}),e[21]=O.accessKeyId,e[22]=z);let B;e[23]!==R||e[24]!==z?(B=(0,D.jsxs)(_,{children:[F,R,z]}),e[23]=R,e[24]=z,e[25]=B):B=e[25];let V;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,D.jsx)(g,{children:(0,D.jsx)(`label`,{htmlFor:`secretAccessKey`,children:`Secret Access Key`})}),e[26]=V):V=e[26];let H=!!O.secretAccessKey,U;e[27]===w?U=e[28]:(U=w(`secretAccessKey`),e[27]=w,e[28]=U);let W;e[29]!==H||e[30]!==U?(W=(0,D.jsx)(c,{"aria-invalid":H,autoComplete:`current-password`,id:`secretAccessKey`,placeholder:`wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,type:`password`,...U}),e[29]=H,e[30]=U,e[31]=W):W=e[31];let G;e[32]===O.secretAccessKey?G=e[33]:(G=(0,D.jsx)(h,{errors:[O.secretAccessKey]}),e[32]=O.secretAccessKey,e[33]=G);let K;e[34]!==W||e[35]!==G?(K=(0,D.jsxs)(_,{children:[V,W,G]}),e[34]=W,e[35]=G,e[36]=K):K=e[36];let q=k?`Signing in...`:`Sign In`,J;e[37]!==k||e[38]!==q?(J=(0,D.jsx)(s,{className:`w-full`,disabled:k,type:`submit`,children:q}),e[37]=k,e[38]=q,e[39]=J):J=e[39];let Y;e[40]!==B||e[41]!==K||e[42]!==J?(Y=(0,D.jsxs)(ie,{children:[B,K,J]}),e[40]=B,e[41]=K,e[42]=J,e[43]=Y):Y=e[43];let X;e[44]!==Y||e[45]!==P?(X=(0,D.jsx)(`form`,{onSubmit:P,children:Y}),e[44]=Y,e[45]=P,e[46]=X):X=e[46];let Z;e[47]!==X||e[48]!==M||e[49]!==N?(Z=(0,D.jsxs)(m,{children:[j,(0,D.jsxs)(p,{children:[M,N,X]})]}),e[47]=X,e[48]=M,e[49]=N,e[50]=Z):Z=e[50];let Q;e[51]===Symbol.for(`react.memo_cache_sentinel`)?(Q=se(window.location.hostname)&&(0,D.jsx)(ce,{}),e[51]=Q):Q=e[51];let $;return e[52]===Z?$=e[53]:($=(0,D.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,D.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col gap-4`,children:[Z,Q]})}),e[52]=Z,e[53]=$),$}function ce(){let e=(0,ae.c)(4),t,n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`text-sm font-medium`,children:`Install Local Certificate Authority`}),(0,D.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`To avoid browser certificate warnings, download and install the Spinifex CA as a trusted root on your OS.`})]}),n=(0,D.jsx)(`a`,{className:`inline-flex h-8 w-full items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground`,download:`spinifex-ca.pem`,href:`/api/ca.pem`,children:`Download CA Certificate`}),e[0]=t,e[1]=n):(t=e[0],n=e[1]);let r;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,D.jsx)(y,{className:`cursor-pointer text-xs text-muted-foreground underline-offset-4 hover:underline`,children:`Installation instructions`}),e[2]=r):r=e[2];let i;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,D.jsx)(m,{className:`border-muted bg-muted/30`,children:(0,D.jsx)(p,{className:`pt-4 pb-4`,children:(0,D.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t,n,(0,D.jsxs)(b,{children:[r,(0,D.jsx)(v,{children:(0,D.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 text-xs text-muted-foreground`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`macOS`}),(0,D.jsx)(`code`,{className:`mt-1 block rounded bg-muted p-2 text-[11px] break-all`,children:`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain spinifex-ca.pem`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`Windows`}),(0,D.jsx)(`p`,{children:`Double-click the file → Install Certificate → Local Machine → Trusted Root Certification Authorities`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`Linux`}),(0,D.jsx)(`code`,{className:`mt-1 block rounded bg-muted p-2 text-[11px] break-all`,children:`sudo cp spinifex-ca.pem /usr/local/share/ca-certificates/spinifex-ca.crt && sudo update-ca-certificates`})]})]})})]})]})})}),e[3]=i):i=e[3],i}export{O as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BskQmMLi.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BskQmMLi.js new file mode 100644 index 000000000..946bb88df --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-BskQmMLi.js @@ -0,0 +1 @@ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{a as i,c as a,p as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./button-qf9lLJ2x.js";import{t as c}from"./input-D3aUBtS6.js";import{t as l}from"./awsClient-Cqp6x3OY.js";import{t as u}from"./sts-e2q_c_HI.js";import{t as d}from"./login-DQqbUSU7.js";import{i as ee,o as f,r as p,s as te,t as m}from"./card-xPs7xSYh.js";import{i as ne,t as re}from"./zod-A4qtKH_p.js";import{i as ie,r as h,s as g,t as _}from"./field-CS-ql6du.js";import{n as v,r as ae,t as y}from"./collapsible-Sj-k2ZCd.js";var b=t(n()),x=r(),S=[`https://mulgadc.com`,`https://staging.mulgadc.com`],C=`spx-handoff-ready`,w=i.extend({type:o(`spx-handoff-creds`)});function oe(e){let t=globalThis.window?.opener??null,n=typeof t?.postMessage==`function`?t:null;if(!n)return;let r=!1,i=async t=>{if(r||!S.includes(t.origin)||t.source!==n)return;let i=w.safeParse(t.data);if(i.success){r=!0,window.removeEventListener(`message`,o);try{let t=await u({accessKeyId:i.data.accessKeyId,secretAccessKey:i.data.secretAccessKey});a(t),l(),e?.onSuccess?.(),window.location.assign(`/`)}catch{e?.onFailure?.()}}},o=e=>{i(e)};window.addEventListener(`message`,o);let s=()=>{for(let e of S)try{n.postMessage({type:C},e)}catch{}};s();let c=0,d=setInterval(()=>{if(c+=1,r||c>20){clearInterval(d);return}s()},500);return()=>{clearInterval(d),window.removeEventListener(`message`,o)}}var T=new Set([`localhost`,`127.0.0.1`,`::1`]),E=/^\d{1,3}(?:\.\d{1,3}){3}$/;function se(e){let t=e.toLowerCase().replaceAll(/^\[|]$/g,``);return T.has(t)||E.test(t)?!0:t.includes(`:`)}var D=e();function O(){let e=(0,x.c)(54),{reason:t,handoff:n}=d.useSearch(),[r,o]=(0,b.useState)(null),[v,ae]=(0,b.useState)(n===`1`),y,S;e[0]===n?(y=e[1],S=e[2]):(y=()=>n===`1`?oe({onFailure:()=>{ae(!1),o(`We couldn't sign you in automatically. Please enter your credentials.`)}}):void 0,S=[n],e[0]=n,e[1]=y,e[2]=S),(0,b.useEffect)(y,S);let C;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(C={resolver:re(i)},e[3]=C):C=e[3];let{register:w,handleSubmit:T,formState:E}=ne(C),{errors:O,isSubmitting:k}=E,A;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(A=async function(e){o(null);try{let t=await u(e);a(t),l(),window.location.assign(`/`)}catch{o(`Invalid credentials. Please check your Access Key ID and Secret Access Key.`)}},e[4]=A):A=e[4];let le=A;if(v){let t;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(f,{children:[(0,D.jsx)(te,{children:`Signing you in…`}),(0,D.jsx)(ee,{children:`Connecting your new Spinifex account to the console.`})]}),e[5]=t):t=e[5];let n;return e[6]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,D.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,D.jsx)(`div`,{className:`flex w-full max-w-sm flex-col gap-4`,children:(0,D.jsxs)(m,{children:[t,(0,D.jsx)(p,{children:(0,D.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`One moment — no need to copy your keys.`})})]})})}),e[6]=n):n=e[6],n}let j;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,D.jsxs)(f,{children:[(0,D.jsx)(te,{children:`Spinifex Credentials`}),(0,D.jsx)(ee,{children:`Use the credentials provided with your Spinifex account.`})]}),e[7]=j):j=e[7];let M;e[8]!==r||e[9]!==t?(M=t===`expired`&&!r&&(0,D.jsx)(`p`,{className:`mb-4 rounded-md bg-muted p-3 text-sm text-muted-foreground`,children:`Your session is no longer valid — please sign in again.`}),e[8]=r,e[9]=t,e[10]=M):M=e[10];let N;e[11]===r?N=e[12]:(N=r&&(0,D.jsx)(`p`,{className:`mb-4 rounded-md bg-destructive/10 p-3 text-sm text-destructive`,children:r}),e[11]=r,e[12]=N);let P;e[13]===T?P=e[14]:(P=T(le),e[13]=T,e[14]=P);let F;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,D.jsx)(g,{children:(0,D.jsx)(`label`,{htmlFor:`accessKeyId`,children:`Access Key ID`})}),e[15]=F):F=e[15];let I=!!O.accessKeyId,L;e[16]===w?L=e[17]:(L=w(`accessKeyId`),e[16]=w,e[17]=L);let R;e[18]!==I||e[19]!==L?(R=(0,D.jsx)(c,{"aria-invalid":I,autoComplete:`username`,id:`accessKeyId`,placeholder:`AKIAIOSFODNN7EXAMPLE`,...L}),e[18]=I,e[19]=L,e[20]=R):R=e[20];let z;e[21]===O.accessKeyId?z=e[22]:(z=(0,D.jsx)(h,{errors:[O.accessKeyId]}),e[21]=O.accessKeyId,e[22]=z);let B;e[23]!==R||e[24]!==z?(B=(0,D.jsxs)(_,{children:[F,R,z]}),e[23]=R,e[24]=z,e[25]=B):B=e[25];let V;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,D.jsx)(g,{children:(0,D.jsx)(`label`,{htmlFor:`secretAccessKey`,children:`Secret Access Key`})}),e[26]=V):V=e[26];let H=!!O.secretAccessKey,U;e[27]===w?U=e[28]:(U=w(`secretAccessKey`),e[27]=w,e[28]=U);let W;e[29]!==H||e[30]!==U?(W=(0,D.jsx)(c,{"aria-invalid":H,autoComplete:`current-password`,id:`secretAccessKey`,placeholder:`wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,type:`password`,...U}),e[29]=H,e[30]=U,e[31]=W):W=e[31];let G;e[32]===O.secretAccessKey?G=e[33]:(G=(0,D.jsx)(h,{errors:[O.secretAccessKey]}),e[32]=O.secretAccessKey,e[33]=G);let K;e[34]!==W||e[35]!==G?(K=(0,D.jsxs)(_,{children:[V,W,G]}),e[34]=W,e[35]=G,e[36]=K):K=e[36];let q=k?`Signing in...`:`Sign In`,J;e[37]!==k||e[38]!==q?(J=(0,D.jsx)(s,{className:`w-full`,disabled:k,type:`submit`,children:q}),e[37]=k,e[38]=q,e[39]=J):J=e[39];let Y;e[40]!==B||e[41]!==K||e[42]!==J?(Y=(0,D.jsxs)(ie,{children:[B,K,J]}),e[40]=B,e[41]=K,e[42]=J,e[43]=Y):Y=e[43];let X;e[44]!==Y||e[45]!==P?(X=(0,D.jsx)(`form`,{onSubmit:P,children:Y}),e[44]=Y,e[45]=P,e[46]=X):X=e[46];let Z;e[47]!==X||e[48]!==M||e[49]!==N?(Z=(0,D.jsxs)(m,{children:[j,(0,D.jsxs)(p,{children:[M,N,X]})]}),e[47]=X,e[48]=M,e[49]=N,e[50]=Z):Z=e[50];let Q;e[51]===Symbol.for(`react.memo_cache_sentinel`)?(Q=se(window.location.hostname)&&(0,D.jsx)(ce,{}),e[51]=Q):Q=e[51];let $;return e[52]===Z?$=e[53]:($=(0,D.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,D.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col gap-4`,children:[Z,Q]})}),e[52]=Z,e[53]=$),$}function ce(){let e=(0,x.c)(4),t,n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`text-sm font-medium`,children:`Install Local Certificate Authority`}),(0,D.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`To avoid browser certificate warnings, download and install the Spinifex CA as a trusted root on your OS.`})]}),n=(0,D.jsx)(`a`,{className:`inline-flex h-8 w-full items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground`,download:`spinifex-ca.pem`,href:`/api/ca.pem`,children:`Download CA Certificate`}),e[0]=t,e[1]=n):(t=e[0],n=e[1]);let r;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,D.jsx)(ae,{className:`cursor-pointer text-xs text-muted-foreground underline-offset-4 hover:underline`,children:`Installation instructions`}),e[2]=r):r=e[2];let i;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,D.jsx)(m,{className:`border-muted bg-muted/30`,children:(0,D.jsx)(p,{className:`pt-4 pb-4`,children:(0,D.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t,n,(0,D.jsxs)(y,{children:[r,(0,D.jsx)(v,{children:(0,D.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 text-xs text-muted-foreground`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`macOS`}),(0,D.jsx)(`code`,{className:`mt-1 block rounded bg-muted p-2 text-[11px] break-all`,children:`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain spinifex-ca.pem`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`Windows`}),(0,D.jsx)(`p`,{children:`Double-click the file → Install Certificate → Local Machine → Trusted Root Certification Authorities`})]}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`p`,{className:`font-medium text-foreground`,children:`Linux`}),(0,D.jsx)(`code`,{className:`mt-1 block rounded bg-muted p-2 text-[11px] break-all`,children:`sudo cp spinifex-ca.pem /usr/local/share/ca-certificates/spinifex-ca.crt && sudo update-ca-certificates`})]})]})})]})]})})}),e[3]=i):i=e[3],i}export{O as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-DQqbUSU7.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-DQqbUSU7.js new file mode 100644 index 000000000..ebc2f742c --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-DQqbUSU7.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-BskQmMLi.js","assets/compiler-runtime-D_vZfn79.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/dist-DeC3TnAR.js","assets/input-D3aUBtS6.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/sts-e2q_c_HI.js","assets/card-xPs7xSYh.js","assets/zod-A4qtKH_p.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/collapsible-Sj-k2ZCd.js","assets/useValueAsRef-hoe2gsyn.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{n}from"./redirect-B4OxYbs2.js";import{h as r,p as i,s as a,ut as o,v as s}from"./cluster-config-DkOiY8HH.js";var c=()=>o(()=>import(`./login-BskQmMLi.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),l=r({reason:i(`expired`).optional().catch(void 0),handoff:s([i(`1`),i(1)]).optional().transform(e=>e===void 0?void 0:`1`).catch(void 0)}),u=e(`/login`)({validateSearch:l,beforeLoad:()=>{if(a())throw n({to:`/`})},component:t(c,`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-Zz7MnUTC.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-Zz7MnUTC.js deleted file mode 100644 index 9abd3be44..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/login-Zz7MnUTC.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-BDs8DRwt.js","assets/compiler-runtime-D_vZfn79.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/dist-BKgR2qk6.js","assets/input-6kdUb_DH.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/useValueChanged-B2TUO8IO.js","assets/useControlled-DwxdYHYK.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/sts-B5ZEON3v.js","assets/card-BXl0Qff8.js","assets/zod-DF_n2ejy.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/collapsible-k5LqEmTn.js","assets/useValueAsRef-F56m8WbP.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{n}from"./redirect-B4OxYbs2.js";import{_ as r,f as i,lt as a,m as o,o as s}from"./cluster-config-xw_Q7X1e.js";var c=()=>a(()=>import(`./login-BDs8DRwt.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),l=o({reason:i(`expired`).optional().catch(void 0),handoff:r([i(`1`),i(1)]).optional().transform(e=>e===void 0?void 0:`1`).catch(void 0)}),u=e(`/login`)({validateSearch:l,beforeLoad:()=>{if(s())throw n({to:`/`})},component:t(c,`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-XgxEPnDq.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-TM8kmIJ2.js similarity index 77% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-XgxEPnDq.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-TM8kmIJ2.js index c51b77e65..7790e94df 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-XgxEPnDq.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/ls-TM8kmIJ2.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-Dhy4xOXd.js";import{in as i}from"./cluster-config-xw_Q7X1e.js";import{t as a}from"./button-BarTr35m.js";import{n as o}from"./s3-DFfxBBj-.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-DFj_XTL4.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.Buckets?i=e[1]:(i=t.Buckets??[],e[0]=t.Buckets,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/s3/create-bucket`,children:(0,u.jsx)(a,{children:`Create Bucket`})}),title:`Buckets`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No buckets found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.Name?(0,u.jsx)(c,{params:{bucket:e.Name},subtitle:e.CreationDate?`Created: ${i(e.CreationDate)}`:void 0,title:e.Name,to:`/s3/ls/$bucket`},e.Name):null}export{d as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as r}from"./link-BokOReHc.js";import{an as i}from"./cluster-config-DkOiY8HH.js";import{t as a}from"./button-qf9lLJ2x.js";import{n as o}from"./s3-ClpClaoT.js";import{t as s}from"./page-heading-vksh_67w.js";import{t as c}from"./list-card-PsHyk9Gp.js";var l=t(),u=e();function d(){let e=(0,l.c)(5),{data:t}=n(o),i;e[0]===t.Buckets?i=e[1]:(i=t.Buckets??[],e[0]=t.Buckets,e[1]=i);let c=i,d;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,u.jsx)(s,{actions:(0,u.jsx)(r,{to:`/s3/create-bucket`,children:(0,u.jsx)(a,{children:`Create Bucket`})}),title:`Buckets`}),e[2]=d):d=e[2];let p;return e[3]===c?p=e[4]:(p=(0,u.jsxs)(u.Fragment,{children:[d,c.length>0?(0,u.jsx)(`div`,{className:`space-y-4`,children:c.map(f)}):(0,u.jsx)(`p`,{className:`text-muted-foreground`,children:`No buckets found.`})]}),e[3]=c,e[4]=p),p}function f(e){return e.Name?(0,u.jsx)(c,{params:{bucket:e.Name},subtitle:e.CreationDate?`Created: ${i(e.CreationDate)}`:void 0,title:e.Name,to:`/s3/ls/$bucket`},e.Name):null}export{d as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-DExo87Po.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-D2CP1Pn7.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-DExo87Po.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-D2CP1Pn7.js index c7d275c91..99201b18e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-DExo87Po.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/nodes-D2CP1Pn7.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./link-Dhy4xOXd.js";import{n as o}from"./redirect-B4OxYbs2.js";import{on as s}from"./cluster-config-xw_Q7X1e.js";import{t as c}from"./chevron-down-Dt4q6d24.js";import{t as l}from"./chevron-right-c57whaks.js";import{n as u}from"./admin-context-CXmiyIcc.js";import{t as d}from"./page-heading-vksh_67w.js";import{t as f}from"./badge-B_ExXcw2.js";import{o as p,r as m,s as h,t as g}from"./card-BXl0Qff8.js";import{o as _,r as v}from"./admin-BUkrFIlI.js";var y=r(),b=t(n(),1),x=e();function S(e){if(e.mig_enabled){let t=e.slices??[];return`${t.filter(e=>e.instance_id).length} / ${t.length}`}return`${+!!e.instance_id} / 1`}function C(e){let t=(0,y.c)(20),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=new Set,t[0]=r):r=t[0];let[i,a]=(0,b.useState)(r),o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=e=>{a(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},t[1]=o):o=t[1];let u=o,d,p,m,h;if(t[2]!==i||t[3]!==n){let e=n.flatMap(T);h=`overflow-x-auto`,p=`w-full text-xs`,t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`w-6 pb-1`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Expand`})}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`VRAM`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Mode`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Profile`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Used / Total`})]})}),t[8]=m):m=t[8];let r;t[9]===i?r=t[10]:(r=e=>{let{node:t,gpu:n}=e,r=`${t}:${n.pci_address}`,a=n.slices??[],o=n.mig_enabled&&a.length>0,d=o&&i.has(r);return(0,x.jsxs)(b.Fragment,{children:[(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5`,children:o&&(0,x.jsx)(`button`,{"aria-expanded":d,"aria-label":d?`Collapse slices`:`Expand slices`,onClick:()=>{u(r)},type:`button`,children:d?(0,x.jsx)(c,{className:`size-3.5`}):(0,x.jsx)(l,{className:`size-3.5`})})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:t}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:n.model}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:s(n.vram_mib)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{className:`text-[0.625rem]`,variant:`secondary`,children:n.mig_enabled?`MIG`:`Passthrough`})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:n.mig_profile??`—`}),(0,x.jsx)(`td`,{className:`py-1.5 font-mono`,children:S(n)})]}),d&&a.map(w)]},r)},t[9]=i,t[10]=r),d=e.map(r),t[2]=i,t[3]=n,t[4]=d,t[5]=p,t[6]=m,t[7]=h}else d=t[4],p=t[5],m=t[6],h=t[7];let g;t[11]===d?g=t[12]:(g=(0,x.jsx)(`tbody`,{children:d}),t[11]=d,t[12]=g);let _;t[13]!==p||t[14]!==m||t[15]!==g?(_=(0,x.jsxs)(`table`,{className:p,children:[m,g]}),t[13]=p,t[14]=m,t[15]=g,t[16]=_):_=t[16];let v;return t[17]!==h||t[18]!==_?(v=(0,x.jsx)(`div`,{className:h,children:_}),t[17]=h,t[18]=_,t[19]=v):v=t[19],v}function w(e){return(0,x.jsxs)(`tr`,{className:`border-b text-muted-foreground last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Slice`})}),(0,x.jsxs)(`td`,{className:`py-1 pr-4 font-mono`,colSpan:2,children:[`↳ slice `,e.gi_id]}),(0,x.jsx)(`td`,{className:`py-1 pr-4`,children:s(e.vram_mib)}),(0,x.jsx)(`td`,{className:`py-1 pr-4`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Mode`})}),(0,x.jsx)(`td`,{className:`py-1 pr-4 font-mono`,children:e.profile}),(0,x.jsx)(`td`,{className:`py-1 font-mono`,children:e.instance_id?(0,x.jsx)(a,{className:`text-primary hover:underline`,params:{id:e.instance_id},to:`/ec2/describe-instances/$id`,children:e.instance_id}):(0,x.jsx)(`span`,{className:`text-green-600`,children:`free`})})]},e.gi_id)}function T(e){return(e.gpus??[]).map(t=>({node:e.node,gpu:t}))}function E(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600);if(t>0)return`${t}d ${n}h`;let r=Math.floor(e%3600/60);return n>0?`${n}h ${r}m`:`${r}m`}function D(e){return e>=1?`${e.toFixed(1)}Gi`:`${Math.round(e*1024)}Mi`}function O(e){let t=Math.floor(Date.now()/1e3-e);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}function k(){let e=(0,y.c)(30),{isAdmin:t}=u(),n;e[0]===t?n=e[1]:(n={...v,enabled:t,refetchInterval:5e3},e[0]=t,e[1]=n);let{data:r}=i(n),a;e[2]===t?a=e[3]:(a={..._,enabled:t,refetchInterval:5e3},e[2]=t,e[3]=a);let{data:s}=i(a);if(!t)throw o({to:`/`});let c;e[4]===r?.nodes?c=e[5]:(c=r?.nodes??[],e[4]=r?.nodes,e[5]=c);let l=c,f;e[6]===s?.vms?f=e[7]:(f=s?.vms??[],e[6]=s?.vms,e[7]=f);let b;e[8]===f?b=e[9]:(b=f.filter(N),e[8]=f,e[9]=b);let S=b,w;if(e[10]!==l){let t=new Map;for(let e of l)for(let n of e.instance_types??[]){let e=t.get(n.name);e?e.available+=n.available:t.set(n.name,{vcpu:n.vcpu,memory_gb:n.memory_gb,available:n.available})}w=[...t.entries()].map(M).toSorted(j),e[10]=l,e[11]=w}else w=e[11];let T=w,E;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,x.jsx)(d,{title:`Nodes`}),e[12]=E):E=e[12];let D;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Cluster Nodes`})}),e[13]=D):D=e[13];let O;e[14]===l?O=e[15]:(O=(0,x.jsxs)(g,{children:[D,(0,x.jsx)(m,{children:l.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No nodes responding`}):(0,x.jsx)(P,{nodes:l})})]}),e[14]=l,e[15]=O);let k;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Elastic Compute Cloud (EC2)`})}),e[16]=k):k=e[16];let F;e[17]===S?F=e[18]:(F=(0,x.jsxs)(g,{children:[k,(0,x.jsx)(m,{children:S.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances running`}):(0,x.jsx)(L,{vms:S})})]}),e[17]=S,e[18]=F);let I;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Resource Usage`})}),e[19]=I):I=e[19];let R;e[20]!==T||e[21]!==l?(R=(0,x.jsxs)(g,{children:[I,(0,x.jsx)(m,{className:`space-y-4`,children:l.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(z,{nodes:l}),T.length>0&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h4`,{className:`mt-4 text-xs font-medium text-muted-foreground`,children:`Instance Type Capacity`}),(0,x.jsx)(V,{instanceTypes:T})]})]})})]}),e[20]=T,e[21]=l,e[22]=R):R=e[22];let B;e[23]===l?B=e[24]:(B=l.some(A)&&(0,x.jsxs)(g,{children:[(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`GPU Inventory`})}),(0,x.jsx)(m,{children:(0,x.jsx)(C,{nodes:l})})]}),e[23]=l,e[24]=B);let H;return e[25]!==F||e[26]!==R||e[27]!==B||e[28]!==O?(H=(0,x.jsxs)(x.Fragment,{children:[E,(0,x.jsxs)(`div`,{className:`space-y-6`,children:[O,F,R,B]})]}),e[25]=F,e[26]=R,e[27]=B,e[28]=O,e[29]=H):H=e[29],H}function A(e){return(e.gpus?.length??0)>0}function j(e,t){return e.name.localeCompare(t.name)}function M(e){let[t,n]=e;return{name:t,...n}}function N(e){return!e.managed_by}function P(e){let t=(0,y.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Roles`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`IP`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Region`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`AZ`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Uptime`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`EC2`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Services`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(F),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function F(e){let t=[e.nats_role?`nats:${e.nats_role}`:null,e.predastore_role?`predastore:${e.predastore_role}`:null].filter(Boolean).join(`,`);return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{variant:e.status===`Ready`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:t||`-`}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.region}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.az}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:E(e.uptime)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vm_count}),(0,x.jsx)(`td`,{className:`py-1.5`,children:(0,x.jsx)(`span`,{className:`text-muted-foreground`,children:e.services?.join(`,`)??`-`})})]},e.node)}function I(e){return e?.length?e.map(e=>e.profile?`${e.profile} ${s(e.vram_mib)}`:`${e.model} ${s(e.vram_mib)}`).join(`, `):`-`}function L(e){let t=(0,y.c)(5),{vms:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Instance`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Type`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`vCPU`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Memory`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`GPU`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Age`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(R),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function R(e){return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.instance_id}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{variant:e.status===`running`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.instance_type}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vcpu}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:D(e.memory_gb)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:I(e.gpus)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.node}),(0,x.jsx)(`td`,{className:`py-1.5`,children:e.launch_time>0?O(e.launch_time):`-`})]},e.instance_id)}function z(e){let t=(0,y.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`CPU (used/sched)`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`MEM (used/sched)`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`GPU (used/total)`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`EC2`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(B),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function B(e){let t=e.total_vcpu-(e.reserved_vcpu??0),n=e.total_mem_gb-(e.reserved_mem_gb??0);return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,x.jsxs)(`td`,{className:`py-1.5 pr-4 font-mono`,children:[e.alloc_vcpu,`/`,t]}),(0,x.jsxs)(`td`,{className:`py-1.5 pr-4 font-mono`,children:[D(e.alloc_mem_gb),`/`,D(n)]}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.total_gpus>0?`${e.alloc_gpus}/${e.total_gpus}`:`-`}),(0,x.jsx)(`td`,{className:`py-1.5`,children:e.vm_count})]},e.node)}function V(e){let t=(0,y.c)(5),{instanceTypes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Instance Type`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Available`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`vCPU`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Memory`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(H),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function H(e){return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.name}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.available}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vcpu}),(0,x.jsx)(`td`,{className:`py-1.5`,children:D(e.memory_gb)})]},e.name)}export{k as component,I as formatVMGPUs}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useQuery-2EKf7AyV.js";import{t as a}from"./link-BokOReHc.js";import{n as o}from"./redirect-B4OxYbs2.js";import{sn as s}from"./cluster-config-DkOiY8HH.js";import{t as c}from"./chevron-down-Dt4q6d24.js";import{t as l}from"./chevron-right-c57whaks.js";import{n as u}from"./admin-context-C7nTf-ee.js";import{t as d}from"./page-heading-vksh_67w.js";import{t as f}from"./badge-6vbuGFqk.js";import{o as p,r as m,s as h,t as g}from"./card-xPs7xSYh.js";import{o as _,r as v}from"./admin-JuLSsFKq.js";var y=r(),b=t(n(),1),x=e();function S(e){if(e.mig_enabled){let t=e.slices??[];return`${t.filter(e=>e.instance_id).length} / ${t.length}`}return`${+!!e.instance_id} / 1`}function C(e){let t=(0,y.c)(20),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=new Set,t[0]=r):r=t[0];let[i,a]=(0,b.useState)(r),o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=e=>{a(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},t[1]=o):o=t[1];let u=o,d,p,m,h;if(t[2]!==i||t[3]!==n){let e=n.flatMap(T);h=`overflow-x-auto`,p=`w-full text-xs`,t[8]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`w-6 pb-1`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Expand`})}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Model`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`VRAM`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Mode`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Profile`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Used / Total`})]})}),t[8]=m):m=t[8];let r;t[9]===i?r=t[10]:(r=e=>{let{node:t,gpu:n}=e,r=`${t}:${n.pci_address}`,a=n.slices??[],o=n.mig_enabled&&a.length>0,d=o&&i.has(r);return(0,x.jsxs)(b.Fragment,{children:[(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5`,children:o&&(0,x.jsx)(`button`,{"aria-expanded":d,"aria-label":d?`Collapse slices`:`Expand slices`,onClick:()=>{u(r)},type:`button`,children:d?(0,x.jsx)(c,{className:`size-3.5`}):(0,x.jsx)(l,{className:`size-3.5`})})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:t}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:n.model}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:s(n.vram_mib)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{className:`text-[0.625rem]`,variant:`secondary`,children:n.mig_enabled?`MIG`:`Passthrough`})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:n.mig_profile??`—`}),(0,x.jsx)(`td`,{className:`py-1.5 font-mono`,children:S(n)})]}),d&&a.map(w)]},r)},t[9]=i,t[10]=r),d=e.map(r),t[2]=i,t[3]=n,t[4]=d,t[5]=p,t[6]=m,t[7]=h}else d=t[4],p=t[5],m=t[6],h=t[7];let g;t[11]===d?g=t[12]:(g=(0,x.jsx)(`tbody`,{children:d}),t[11]=d,t[12]=g);let _;t[13]!==p||t[14]!==m||t[15]!==g?(_=(0,x.jsxs)(`table`,{className:p,children:[m,g]}),t[13]=p,t[14]=m,t[15]=g,t[16]=_):_=t[16];let v;return t[17]!==h||t[18]!==_?(v=(0,x.jsx)(`div`,{className:h,children:_}),t[17]=h,t[18]=_,t[19]=v):v=t[19],v}function w(e){return(0,x.jsxs)(`tr`,{className:`border-b text-muted-foreground last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Slice`})}),(0,x.jsxs)(`td`,{className:`py-1 pr-4 font-mono`,colSpan:2,children:[`↳ slice `,e.gi_id]}),(0,x.jsx)(`td`,{className:`py-1 pr-4`,children:s(e.vram_mib)}),(0,x.jsx)(`td`,{className:`py-1 pr-4`,children:(0,x.jsx)(`span`,{className:`sr-only`,children:`Mode`})}),(0,x.jsx)(`td`,{className:`py-1 pr-4 font-mono`,children:e.profile}),(0,x.jsx)(`td`,{className:`py-1 font-mono`,children:e.instance_id?(0,x.jsx)(a,{className:`text-primary hover:underline`,params:{id:e.instance_id},to:`/ec2/describe-instances/$id`,children:e.instance_id}):(0,x.jsx)(`span`,{className:`text-green-600`,children:`free`})})]},e.gi_id)}function T(e){return(e.gpus??[]).map(t=>({node:e.node,gpu:t}))}function E(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600);if(t>0)return`${t}d ${n}h`;let r=Math.floor(e%3600/60);return n>0?`${n}h ${r}m`:`${r}m`}function D(e){return e>=1?`${e.toFixed(1)}Gi`:`${Math.round(e*1024)}Mi`}function O(e){let t=Math.floor(Date.now()/1e3-e);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}function k(){let e=(0,y.c)(30),{isAdmin:t}=u(),n;e[0]===t?n=e[1]:(n={...v,enabled:t,refetchInterval:5e3},e[0]=t,e[1]=n);let{data:r}=i(n),a;e[2]===t?a=e[3]:(a={..._,enabled:t,refetchInterval:5e3},e[2]=t,e[3]=a);let{data:s}=i(a);if(!t)throw o({to:`/`});let c;e[4]===r?.nodes?c=e[5]:(c=r?.nodes??[],e[4]=r?.nodes,e[5]=c);let l=c,f;e[6]===s?.vms?f=e[7]:(f=s?.vms??[],e[6]=s?.vms,e[7]=f);let b;e[8]===f?b=e[9]:(b=f.filter(N),e[8]=f,e[9]=b);let S=b,w;if(e[10]!==l){let t=new Map;for(let e of l)for(let n of e.instance_types??[]){let e=t.get(n.name);e?e.available+=n.available:t.set(n.name,{vcpu:n.vcpu,memory_gb:n.memory_gb,available:n.available})}w=[...t.entries()].map(M).toSorted(j),e[10]=l,e[11]=w}else w=e[11];let T=w,E;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,x.jsx)(d,{title:`Nodes`}),e[12]=E):E=e[12];let D;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Cluster Nodes`})}),e[13]=D):D=e[13];let O;e[14]===l?O=e[15]:(O=(0,x.jsxs)(g,{children:[D,(0,x.jsx)(m,{children:l.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No nodes responding`}):(0,x.jsx)(P,{nodes:l})})]}),e[14]=l,e[15]=O);let k;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Elastic Compute Cloud (EC2)`})}),e[16]=k):k=e[16];let F;e[17]===S?F=e[18]:(F=(0,x.jsxs)(g,{children:[k,(0,x.jsx)(m,{children:S.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No instances running`}):(0,x.jsx)(L,{vms:S})})]}),e[17]=S,e[18]=F);let I;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`Resource Usage`})}),e[19]=I):I=e[19];let R;e[20]!==T||e[21]!==l?(R=(0,x.jsxs)(g,{children:[I,(0,x.jsx)(m,{className:`space-y-4`,children:l.length===0?(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(z,{nodes:l}),T.length>0&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h4`,{className:`mt-4 text-xs font-medium text-muted-foreground`,children:`Instance Type Capacity`}),(0,x.jsx)(V,{instanceTypes:T})]})]})})]}),e[20]=T,e[21]=l,e[22]=R):R=e[22];let B;e[23]===l?B=e[24]:(B=l.some(A)&&(0,x.jsxs)(g,{children:[(0,x.jsx)(p,{children:(0,x.jsx)(h,{className:`text-sm`,children:`GPU Inventory`})}),(0,x.jsx)(m,{children:(0,x.jsx)(C,{nodes:l})})]}),e[23]=l,e[24]=B);let H;return e[25]!==F||e[26]!==R||e[27]!==B||e[28]!==O?(H=(0,x.jsxs)(x.Fragment,{children:[E,(0,x.jsxs)(`div`,{className:`space-y-6`,children:[O,F,R,B]})]}),e[25]=F,e[26]=R,e[27]=B,e[28]=O,e[29]=H):H=e[29],H}function A(e){return(e.gpus?.length??0)>0}function j(e,t){return e.name.localeCompare(t.name)}function M(e){let[t,n]=e;return{name:t,...n}}function N(e){return!e.managed_by}function P(e){let t=(0,y.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Roles`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`IP`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Region`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`AZ`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Uptime`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`EC2`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Services`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(F),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function F(e){let t=[e.nats_role?`nats:${e.nats_role}`:null,e.predastore_role?`predastore:${e.predastore_role}`:null].filter(Boolean).join(`,`);return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{variant:e.status===`Ready`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono text-muted-foreground`,children:t||`-`}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.region}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.az}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:E(e.uptime)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vm_count}),(0,x.jsx)(`td`,{className:`py-1.5`,children:(0,x.jsx)(`span`,{className:`text-muted-foreground`,children:e.services?.join(`,`)??`-`})})]},e.node)}function I(e){return e?.length?e.map(e=>e.profile?`${e.profile} ${s(e.vram_mib)}`:`${e.model} ${s(e.vram_mib)}`).join(`, `):`-`}function L(e){let t=(0,y.c)(5),{vms:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Instance`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Status`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Type`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`vCPU`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Memory`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`GPU`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Age`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(R),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function R(e){return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.instance_id}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,x.jsx)(f,{variant:e.status===`running`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.status})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.instance_type}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vcpu}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:D(e.memory_gb)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:I(e.gpus)}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.node}),(0,x.jsx)(`td`,{className:`py-1.5`,children:e.launch_time>0?O(e.launch_time):`-`})]},e.instance_id)}function z(e){let t=(0,y.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Name`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`CPU (used/sched)`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`MEM (used/sched)`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`GPU (used/total)`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`EC2`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(B),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function B(e){let t=e.total_vcpu-(e.reserved_vcpu??0),n=e.total_mem_gb-(e.reserved_mem_gb??0);return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.node}),(0,x.jsxs)(`td`,{className:`py-1.5 pr-4 font-mono`,children:[e.alloc_vcpu,`/`,t]}),(0,x.jsxs)(`td`,{className:`py-1.5 pr-4 font-mono`,children:[D(e.alloc_mem_gb),`/`,D(n)]}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.total_gpus>0?`${e.alloc_gpus}/${e.total_gpus}`:`-`}),(0,x.jsx)(`td`,{className:`py-1.5`,children:e.vm_count})]},e.node)}function V(e){let t=(0,y.c)(5),{instanceTypes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Instance Type`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Available`}),(0,x.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`vCPU`}),(0,x.jsx)(`th`,{className:`pb-1 font-medium`,children:`Memory`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(H),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,x.jsx)(`div`,{className:`overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,x.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function H(e){return(0,x.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,x.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.name}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.available}),(0,x.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.vcpu}),(0,x.jsx)(`td`,{className:`py-1.5`,children:D(e.memory_gb)})]},e.name)}export{k as component,I as formatVMGPUs}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-zdI5o66q.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-DhTOBnjO.js similarity index 99% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-zdI5o66q.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-DhTOBnjO.js index fd8133cf6..d83e2b3c9 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-zdI5o66q.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/playground-DhTOBnjO.js @@ -1,4 +1,4 @@ -import{a as e,i as t,n,o as r,r as i,t as a}from"./compiler-runtime-D_vZfn79.js";import{t as o}from"./useMutation-6rdxVQpi.js";import{t as s}from"./useSuspenseQuery-Bc7E1P-f.js";import{tn as c}from"./cluster-config-xw_Q7X1e.js";import{t as l}from"./chevron-down-Dt4q6d24.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-B01jpDaX.js";import{t as h}from"./cli-command-panel-CLiFy1rG.js";import{t as g}from"./button-BarTr35m.js";import{t as _}from"./input-6kdUb_DH.js";import{ga as v,o as y}from"./awsClient-b0hcP1Iz.js";import{i as b,t as x}from"./bedrock-Ct-f5HCJ.js";import{n as S,r as C,t as w}from"./commandBuilder-BLgOdGhm.js";import{t as T}from"./page-heading-vksh_67w.js";import{t as E}from"./badge-B_ExXcw2.js";import{s as D,t as O}from"./field-c7GHI5st.js";import{t as ee}from"./textarea-n04EavUm.js";var k=class extends C(w,S,`Converse`,v){},A=r(i(),1),j=a(),M=new Set([`ModelNotReadyException`,`ServiceUnavailableException`]);function te(e){return e instanceof Error&&M.has(e.name)}function ne(e){let t={modelId:e.modelId,messages:e.messages};return e.system!==void 0&&e.system.trim().length>0&&(t.system=[{text:e.system}]),e.inferenceConfig&&(t.inferenceConfig=e.inferenceConfig),e.guardrailIdentifier!==void 0&&e.guardrailIdentifier.length>0&&e.guardrailVersion!==void 0&&e.guardrailVersion.length>0&&(t.guardrailConfig={guardrailIdentifier:e.guardrailIdentifier,guardrailVersion:e.guardrailVersion}),t}async function N(e){let t=ne(e);try{let e=await y().send(new k(t)),n=e.output?.message;if(!n)throw Error(`Converse response had no output message`);return{request:t,result:{status:`ok`,message:n,usage:e.usage??{inputTokens:0,outputTokens:0,totalTokens:0}}}}catch(e){if(te(e))return{request:t,result:{status:`warming-up`}};throw e}}function re(){let e=(0,j.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:N},e[0]=t):t=e[0],o(t)}function ie(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}var P=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ae=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,oe={};function se(e,t){return((t||oe).jsx?ae:P).test(e)}var ce=/[ \t\n\f\r]/g;function le(e){return typeof e==`object`?e.type===`text`&&ue(e.value):ue(e)}function ue(e){return e.replace(ce,``)===``}var F=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};F.prototype.normal={},F.prototype.property={},F.prototype.space=void 0;function de(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new F(n,r,t)}function I(e){return e.toLowerCase()}var L=class{constructor(e,t){this.attribute=t,this.property=e}};L.prototype.attribute=``,L.prototype.booleanish=!1,L.prototype.boolean=!1,L.prototype.commaOrSpaceSeparated=!1,L.prototype.commaSeparated=!1,L.prototype.defined=!1,L.prototype.mustUseProperty=!1,L.prototype.number=!1,L.prototype.overloadedBoolean=!1,L.prototype.property=``,L.prototype.spaceSeparated=!1,L.prototype.space=void 0;var fe=e({boolean:()=>R,booleanish:()=>z,commaOrSpaceSeparated:()=>W,commaSeparated:()=>U,number:()=>V,overloadedBoolean:()=>B,spaceSeparated:()=>H}),pe=0,R=G(),z=G(),B=G(),V=G(),H=G(),U=G(),W=G();function G(){return 2**++pe}var me=Object.keys(fe),he=class extends L{constructor(e,t,n,r){let i=-1;if(super(e,t),ge(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&ke.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(Oe,Me);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!Oe.test(e)){let n=e.replace(De,je);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=he}return new i(r,t)}function je(e){return`-`+e.toLowerCase()}function Me(e){return e.charAt(1).toUpperCase()}var Ne=de([ve,xe,Ce,we,Te],`html`),Pe=de([ve,Se,Ce,we,Te],`svg`);function Fe(e){return e.join(` `).trim()}var Ie=t(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,u=1;function f(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(` +import{a as e,i as t,n,o as r,r as i,t as a}from"./compiler-runtime-D_vZfn79.js";import{t as o}from"./useMutation-6rdxVQpi.js";import{t as s}from"./useSuspenseQuery-Bc7E1P-f.js";import{nn as c}from"./cluster-config-DkOiY8HH.js";import{t as l}from"./chevron-down-Dt4q6d24.js";import{c as u,i as d,n as f,s as p,t as m}from"./select-Cn66OoPn.js";import{t as h}from"./cli-command-panel-DavMY-tN.js";import{t as g}from"./button-qf9lLJ2x.js";import{t as _}from"./input-D3aUBtS6.js";import{ha as v,o as y}from"./awsClient-Cqp6x3OY.js";import{i as b,t as x}from"./bedrock-BF8FfWcf.js";import{n as S,r as C,t as w}from"./commandBuilder-D669HwKx.js";import{t as T}from"./page-heading-vksh_67w.js";import{t as E}from"./badge-6vbuGFqk.js";import{s as D,t as O}from"./field-CS-ql6du.js";import{t as ee}from"./textarea-DV1UO8hv.js";var k=class extends C(w,S,`Converse`,v){},A=r(i(),1),j=a(),M=new Set([`ModelNotReadyException`,`ServiceUnavailableException`]);function te(e){return e instanceof Error&&M.has(e.name)}function ne(e){let t={modelId:e.modelId,messages:e.messages};return e.system!==void 0&&e.system.trim().length>0&&(t.system=[{text:e.system}]),e.inferenceConfig&&(t.inferenceConfig=e.inferenceConfig),e.guardrailIdentifier!==void 0&&e.guardrailIdentifier.length>0&&e.guardrailVersion!==void 0&&e.guardrailVersion.length>0&&(t.guardrailConfig={guardrailIdentifier:e.guardrailIdentifier,guardrailVersion:e.guardrailVersion}),t}async function N(e){let t=ne(e);try{let e=await y().send(new k(t)),n=e.output?.message;if(!n)throw Error(`Converse response had no output message`);return{request:t,result:{status:`ok`,message:n,usage:e.usage??{inputTokens:0,outputTokens:0,totalTokens:0}}}}catch(e){if(te(e))return{request:t,result:{status:`warming-up`}};throw e}}function re(){let e=(0,j.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationFn:N},e[0]=t):t=e[0],o(t)}function ie(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}var P=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ae=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,oe={};function se(e,t){return((t||oe).jsx?ae:P).test(e)}var ce=/[ \t\n\f\r]/g;function le(e){return typeof e==`object`?e.type===`text`&&ue(e.value):ue(e)}function ue(e){return e.replace(ce,``)===``}var F=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};F.prototype.normal={},F.prototype.property={},F.prototype.space=void 0;function de(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new F(n,r,t)}function I(e){return e.toLowerCase()}var L=class{constructor(e,t){this.attribute=t,this.property=e}};L.prototype.attribute=``,L.prototype.booleanish=!1,L.prototype.boolean=!1,L.prototype.commaOrSpaceSeparated=!1,L.prototype.commaSeparated=!1,L.prototype.defined=!1,L.prototype.mustUseProperty=!1,L.prototype.number=!1,L.prototype.overloadedBoolean=!1,L.prototype.property=``,L.prototype.spaceSeparated=!1,L.prototype.space=void 0;var fe=e({boolean:()=>R,booleanish:()=>z,commaOrSpaceSeparated:()=>W,commaSeparated:()=>U,number:()=>V,overloadedBoolean:()=>B,spaceSeparated:()=>H}),pe=0,R=G(),z=G(),B=G(),V=G(),H=G(),U=G(),W=G();function G(){return 2**++pe}var me=Object.keys(fe),he=class extends L{constructor(e,t,n,r){let i=-1;if(super(e,t),ge(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&ke.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(Oe,Me);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!Oe.test(e)){let n=e.replace(De,je);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=he}return new i(r,t)}function je(e){return`-`+e.toLowerCase()}function Me(e){return e.charAt(1).toUpperCase()}var Ne=de([ve,xe,Ce,we,Te],`html`),Pe=de([ve,Se,Ce,we,Te],`svg`);function Fe(e){return e.join(` `).trim()}var Ie=t(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,u=1;function f(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(` `);u=~n?e.length-n:u+e.length}function p(){var e={line:l,column:u};return function(t){return t.position=new m(e),_(),t}}function m(e){this.start=e,this.end={line:l,column:u},this.source=t.source}m.prototype.content=e;function h(n){var r=Error(t.source+`:`+l+`:`+u+`: `+n);if(r.reason=n,r.filename=t.source,r.line=l,r.column=u,r.source=e,!t.silent)throw r}function g(t){var n=t.exec(e);if(n){var r=n[0];return f(r),e=e.slice(r.length),n}}function _(){g(i)}function v(e){var t;for(e||=[];t=y();)t!==!1&&e.push(t);return e}function y(){var t=p();if(e.charAt(0)==`/`&&e.charAt(1)==`*`){for(var n=2;e.charAt(n)!=``&&(e.charAt(n)!=`*`||e.charAt(n+1)!=`/`);)++n;if(n+=2,e.charAt(n-1)===``)return h(`End of comment missing`);var r=e.slice(2,n-2);return u+=2,f(r),e=e.slice(n),u+=2,t({type:`comment`,comment:r})}}function b(){var e=p(),t=g(a);if(t){if(y(),!g(o))return h(`property missing ':'`);var r=g(s),i=e({type:`declaration`,property:d(t[0].replace(n,``)),value:r?d(r[0].replace(n,``)):``});return g(c),i}}function x(){var e=[];v(e);for(var t;t=b();)t!==!1&&(e.push(t),v(e));return e}return _(),x()}function d(e){return e?e.replace(l,``):``}t.exports=u})),Le=t((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Ie());function r(e,t){let r=null;if(!e||typeof e!=`string`)return r;let i=(0,n.default)(e),a=typeof t==`function`;return i.forEach(e=>{if(e.type!==`declaration`)return;let{property:n,value:i}=e;a?t(n,i,e):i&&(r||={},r[n]=i)}),r}})),Re=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.camelCase=void 0;var t=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,o=function(e){return!e||r.test(e)||t.test(e)},s=function(e,t){return t.toUpperCase()},c=function(e,t){return`${t}-`};e.camelCase=function(e,t){return t===void 0&&(t={}),o(e)?e:(e=e.toLowerCase(),e=t.reactCompat?e.replace(a,c):e.replace(i,c),e.replace(n,s))}})),ze=t(((e,t)=>{var n=(e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(Le()),r=Re();function i(e,t){var i={};return!e||typeof e!=`string`||(0,n.default)(e,function(e,n){e&&n&&(i[(0,r.camelCase)(e,t)]=n)}),i}i.default=i,t.exports=i})),Be=He(`end`),Ve=He(`start`);function He(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function Ue(e){let t=Ve(e),n=Be(e);if(t&&n)return{start:t,end:n}}function We(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?Ke(e.position):`start`in e||`end`in e?Ke(e):`line`in e||`column`in e?Ge(e):``}function Ge(e){return qe(e&&e.line)+`:`+qe(e&&e.column)}function Ke(e){return Ge(e&&e.start)+`-`+Ge(e&&e.end)}function qe(e){return e&&typeof e==`number`?e:1}var K=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=We(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};K.prototype.file=``,K.prototype.name=``,K.prototype.reason=``,K.prototype.message=``,K.prototype.stack=``,K.prototype.column=void 0,K.prototype.line=void 0,K.prototype.ancestors=void 0,K.prototype.cause=void 0,K.prototype.fatal=void 0,K.prototype.place=void 0,K.prototype.ruleId=void 0,K.prototype.source=void 0;var Je=r(ze(),1),Ye={}.hasOwnProperty,Xe=new Map,Ze=/[A-Z]/g,Qe=new Set([`table`,`tbody`,`thead`,`tfoot`,`tr`]),$e=new Set([`td`,`th`]),et=`https://github.com/syntax-tree/hast-util-to-jsx-runtime`;function tt(e,t){if(!t||t.Fragment===void 0)throw TypeError("Expected `Fragment` in options");let n=t.filePath||void 0,r;if(t.development){if(typeof t.jsxDEV!=`function`)throw TypeError("Expected `jsxDEV` in options when `development: true`");r=ft(n,t.jsxDEV)}else{if(typeof t.jsx!=`function`)throw TypeError("Expected `jsx` in production options");if(typeof t.jsxs!=`function`)throw TypeError("Expected `jsxs` in production options");r=dt(n,t.jsx,t.jsxs)}let i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||`react`,evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space===`svg`?Pe:Ne,stylePropertyNameCase:t.stylePropertyNameCase||`dom`,tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},a=nt(i,e,void 0);return a&&typeof a!=`string`?a:i.create(e,i.Fragment,{children:a||void 0},void 0)}function nt(e,t,n){if(t.type===`element`)return rt(e,t,n);if(t.type===`mdxFlowExpression`||t.type===`mdxTextExpression`)return it(e,t);if(t.type===`mdxJsxFlowElement`||t.type===`mdxJsxTextElement`)return ot(e,t,n);if(t.type===`mdxjsEsm`)return at(e,t);if(t.type===`root`)return st(e,t,n);if(t.type===`text`)return ct(e,t)}function rt(e,t,n){let r=e.schema,i=r;t.tagName.toLowerCase()===`svg`&&r.space===`html`&&(i=Pe,e.schema=i),e.ancestors.push(t);let a=vt(e,t.tagName,!1),o=pt(e,t),s=ht(e,t);return Qe.has(t.tagName)&&(s=s.filter(function(e){return typeof e!=`string`||!le(e)})),lt(e,o,a,t),ut(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function it(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}yt(e,t.position)}function at(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);yt(e,t.position)}function ot(e,t,n){let r=e.schema,i=r;t.name===`svg`&&r.space===`html`&&(i=Pe,e.schema=i),e.ancestors.push(t);let a=t.name===null?e.Fragment:vt(e,t.name,!0),o=mt(e,t),s=ht(e,t);return lt(e,o,a,t),ut(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function st(e,t,n){let r={};return ut(r,ht(e,t)),e.create(t,e.Fragment,r,n)}function ct(e,t){return t.value}function lt(e,t,n,r){typeof n!=`string`&&n!==e.Fragment&&e.passNode&&(t.node=r)}function ut(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function dt(e,t,n){return r;function r(e,r,i,a){let o=Array.isArray(i.children)?n:t;return a?o(r,i,a):o(r,i)}}function ft(e,t){return n;function n(n,r,i,a){let o=Array.isArray(i.children),s=Ve(n);return t(r,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function pt(e,t){let n={},r,i;for(i in t.properties)if(i!==`children`&&Ye.call(t.properties,i)){let a=gt(e,i,t.properties[i]);if(a){let[i,o]=a;e.tableCellAlignToStyle&&i===`align`&&typeof o==`string`&&$e.has(t.tagName)?r=o:n[i]=o}}if(r){let t=n.style||={};t[e.stylePropertyNameCase===`css`?`text-align`:`textAlign`]=r}return n}function mt(e,t){let n={};for(let r of t.attributes)if(r.type===`mdxJsxExpressionAttribute`){if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];t.type;let i=t.expression;i.type;let a=i.properties[0];a.type,Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else yt(e,t.position)}else{let i=r.name,a;if(r.value&&typeof r.value==`object`){if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];t.type,a=e.evaluater.evaluateExpression(t.expression)}else yt(e,t.position)}else a=r.value===null||r.value;n[i]=a}return n}function ht(e,t){let n=[],r=-1,i=e.passKeys?new Map:Xe;for(;++ri?0:i+t:t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);a0?(jt(e,e.length,0,t),e):t}var Nt={}.hasOwnProperty;function Pt(e){let t={},n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)==65535||(n&65535)==65534||n>1114111?`�`:String.fromCodePoint(n)}function Rt(e){return e.replace(/[\t\n\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}var q=Kt(/[A-Za-z]/),J=Kt(/[\dA-Za-z]/),zt=Kt(/[#-'*+\--9=?A-Z^-~]/);function Bt(e){return e!==null&&(e<32||e===127)}var Vt=Kt(/\d/),Ht=Kt(/[\dA-Fa-f]/),Ut=Kt(/[!-/:-@[-`{-~]/);function Y(e){return e!==null&&e<-2}function X(e){return e!==null&&(e<0||e===32)}function Z(e){return e===-2||e===-1||e===32}var Wt=Kt(/\p{P}|\p{S}/u),Gt=Kt(/\s/);function Kt(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function qt(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function Q(e,t,n,r){let i=r?r-1:1/0,a=0;return o;function o(r){return Z(r)?(e.enter(n),s(r)):t(r)}function s(r){return Z(r)&&a++o))return;let n=t.events.length,a=n,s,c;for(;a--;)if(t.events[a][0]===`exit`&&t.events[a][1].type===`chunkFlow`){if(s){c=t.events[a][1].end;break}s=!0}for(_(r),e=n;er;){let r=n[i];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function $t(e,t,n){return Q(e,e.attempt(this.parser.constructs.document,t,n),`linePrefix`,this.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)}function en(e){if(e===null||X(e)||Gt(e))return 1;if(Wt(e))return 2}function tn(e,t,n){let r=[],i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let d={...e[r][1].end},f={...e[n][1].start};on(d,-c),on(f,c),o={type:c>1?`strongSequence`:`emphasisSequence`,start:d,end:{...e[r][1].end}},s={type:c>1?`strongSequence`:`emphasisSequence`,start:{...e[n][1].start},end:f},a={type:c>1?`strongText`:`emphasisText`,start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?`strong`:`emphasis`,start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},l=[],e[r][1].end.offset-e[r][1].start.offset&&(l=Mt(l,[[`enter`,e[r][1],t],[`exit`,e[r][1],t]])),l=Mt(l,[[`enter`,i,t],[`enter`,o,t],[`exit`,o,t],[`enter`,a,t]]),l=Mt(l,tn(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),l=Mt(l,[[`exit`,a,t],[`enter`,s,t],[`exit`,s,t],[`exit`,i,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,l=Mt(l,[[`enter`,e[n][1],t],[`exit`,e[n][1],t]])):u=0,jt(e,r-1,n-r+3,l),n=r+l.length-u-2;break}}for(n=-1;++n0&&Z(t)?Q(e,v,`linePrefix`,a+1)(t):v(t)}function v(t){return t===null||Y(t)?e.check(yn,h,b)(t):(e.enter(`codeFlowValue`),y(t))}function y(t){return t===null||Y(t)?(e.exit(`codeFlowValue`),v(t)):(e.consume(t),y)}function b(n){return e.exit(`codeFenced`),t(n)}function x(e,t,n){let i=0;return a;function a(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),c}function c(t){return e.enter(`codeFencedFence`),Z(t)?Q(e,l,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):l(t)}function l(t){return t===s?(e.enter(`codeFencedFenceSequence`),u(t)):n(t)}function u(t){return t===s?(i++,e.consume(t),u):i>=o?(e.exit(`codeFencedFenceSequence`),Z(t)?Q(e,d,`whitespace`)(t):d(t)):n(t)}function d(r){return r===null||Y(r)?(e.exit(`codeFencedFence`),t(r)):n(r)}}}function Sn(e,t,n){let r=this;return i;function i(t){return t===null?n(t):(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}var Cn={name:`codeIndented`,tokenize:Tn},wn={partial:!0,tokenize:En};function Tn(e,t,n){let r=this;return i;function i(t){return e.enter(`codeIndented`),Q(e,a,`linePrefix`,5)(t)}function a(e){let t=r.events[r.events.length-1];return t&&t[1].type===`linePrefix`&&t[2].sliceSerialize(t[1],!0).length>=4?o(e):n(e)}function o(t){return t===null?c(t):Y(t)?e.attempt(wn,o,c)(t):(e.enter(`codeFlowValue`),s(t))}function s(t){return t===null||Y(t)?(e.exit(`codeFlowValue`),o(t)):(e.consume(t),s)}function c(n){return e.exit(`codeIndented`),t(n)}}function En(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):Y(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),i):Q(e,a,`linePrefix`,5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&a[1].type===`linePrefix`&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):Y(e)?i(e):n(e)}}var Dn={name:`codeText`,previous:kn,resolve:On,tokenize:An};function On(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){let r=t||0;this.setCursor(Math.trunc(e));let i=this.right.splice(this.right.length-r,1/0);return n&&Mn(this.left,n),i.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),Mn(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Mn(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0)){if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}function Bn(e,t,n,r,i,a,o,s,c){let l=c||1/0,u=0;return d;function d(t){return t===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),f):t===null||t===32||t===41||Bt(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter(`chunkString`,{contentType:`string`}),h(t))}function f(n){return n===62?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter(`chunkString`,{contentType:`string`}),p(n))}function p(t){return t===62?(e.exit(`chunkString`),e.exit(s),f(t)):t===null||t===60||Y(t)?n(t):(e.consume(t),t===92?m:p)}function m(t){return t===60||t===62||t===92?(e.consume(t),p):p(t)}function h(i){return!u&&(i===null||i===41||X(i))?(e.exit(`chunkString`),e.exit(s),e.exit(o),e.exit(r),t(i)):u999||l===null||l===91||l===93&&!c||l===94&&!s&&`_hiddenFootnoteSupport`in o.parser.constructs?n(l):l===93?(e.exit(a),e.enter(i),e.consume(l),e.exit(i),e.exit(r),t):Y(l)?(e.enter(`lineEnding`),e.consume(l),e.exit(`lineEnding`),u):(e.enter(`chunkString`,{contentType:`string`}),d(l))}function d(t){return t===null||t===91||t===93||Y(t)||s++>999?(e.exit(`chunkString`),u(t)):(e.consume(t),c||=!Z(t),t===92?f:d)}function f(t){return t===91||t===92||t===93?(e.consume(t),s++,d):d(t)}}function Hn(e,t,n,r,i,a){let o;return s;function s(t){return t===34||t===39||t===40?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=t===40?41:t,c):n(t)}function c(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),c(o)):t===null?n(t):Y(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),Q(e,l,`linePrefix`)):(e.enter(`chunkString`,{contentType:`string`}),u(t))}function u(t){return t===o||t===null||Y(t)?(e.exit(`chunkString`),l(t)):(e.consume(t),t===92?d:u)}function d(t){return t===o||t===92?(e.consume(t),u):u(t)}}function Un(e,t){let n;return r;function r(i){return Y(i)?(e.enter(`lineEnding`),e.consume(i),e.exit(`lineEnding`),n=!0,r):Z(i)?Q(e,r,n?`linePrefix`:`lineSuffix`)(i):t(i)}}var Wn={name:`definition`,tokenize:Kn},Gn={partial:!0,tokenize:qn};function Kn(e,t,n){let r=this,i;return a;function a(t){return e.enter(`definition`),o(t)}function o(t){return Vn.call(r,e,s,n,`definitionLabel`,`definitionLabelMarker`,`definitionLabelString`)(t)}function s(t){return i=Rt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),c):n(t)}function c(t){return X(t)?Un(e,l)(t):l(t)}function l(t){return Bn(e,u,n,`definitionDestination`,`definitionDestinationLiteral`,`definitionDestinationLiteralMarker`,`definitionDestinationRaw`,`definitionDestinationString`)(t)}function u(t){return e.attempt(Gn,d,d)(t)}function d(t){return Z(t)?Q(e,f,`whitespace`)(t):f(t)}function f(a){return a===null||Y(a)?(e.exit(`definition`),r.parser.defined.push(i),t(a)):n(a)}}function qn(e,t,n){return r;function r(t){return X(t)?Un(e,i)(t):n(t)}function i(t){return Hn(e,a,n,`definitionTitle`,`definitionTitleMarker`,`definitionTitleString`)(t)}function a(t){return Z(t)?Q(e,o,`whitespace`)(t):o(t)}function o(e){return e===null||Y(e)?t(e):n(e)}}var Jn={name:`hardBreakEscape`,tokenize:Yn};function Yn(e,t,n){return r;function r(t){return e.enter(`hardBreakEscape`),e.consume(t),i}function i(r){return Y(r)?(e.exit(`hardBreakEscape`),t(r)):n(r)}}var Xn={name:`headingAtx`,resolve:Zn,tokenize:Qn};function Zn(e,t){let n=e.length-2,r=3,i,a;return e[r][1].type===`whitespace`&&(r+=2),n-2>r&&e[n][1].type===`whitespace`&&(n-=2),e[n][1].type===`atxHeadingSequence`&&(r===n-1||n-4>r&&e[n-2][1].type===`whitespace`)&&(n-=r+1===n?2:4),n>r&&(i={type:`atxHeadingText`,start:e[r][1].start,end:e[n][1].end},a={type:`chunkText`,start:e[r][1].start,end:e[n][1].end,contentType:`text`},jt(e,r,n-r+1,[[`enter`,i,t],[`enter`,a,t],[`exit`,a,t],[`exit`,i,t]])),e}function Qn(e,t,n){let r=0;return i;function i(t){return e.enter(`atxHeading`),a(t)}function a(t){return e.enter(`atxHeadingSequence`),o(t)}function o(t){return t===35&&r++<6?(e.consume(t),o):t===null||X(t)?(e.exit(`atxHeadingSequence`),s(t)):n(t)}function s(n){return n===35?(e.enter(`atxHeadingSequence`),c(n)):n===null||Y(n)?(e.exit(`atxHeading`),t(n)):Z(n)?Q(e,s,`whitespace`)(n):(e.enter(`atxHeadingText`),l(n))}function c(t){return t===35?(e.consume(t),c):(e.exit(`atxHeadingSequence`),s(t))}function l(t){return t===null||t===35||X(t)?(e.exit(`atxHeadingText`),s(t)):(e.consume(t),l)}}var $n=`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`),er=[`pre`,`script`,`style`,`textarea`],tr={concrete:!0,name:`htmlFlow`,resolveTo:ir,tokenize:ar},nr={partial:!0,tokenize:sr},rr={partial:!0,tokenize:or};function ir(e){let t=e.length;for(;t--&&(e[t][0]!==`enter`||e[t][1].type!==`htmlFlow`););return t>1&&e[t-2][1].type===`linePrefix`&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function ar(e,t,n){let r=this,i,a,o,s,c;return l;function l(e){return u(e)}function u(t){return e.enter(`htmlFlow`),e.enter(`htmlFlowData`),e.consume(t),d}function d(s){return s===33?(e.consume(s),f):s===47?(e.consume(s),a=!0,h):s===63?(e.consume(s),i=3,r.interrupt?t:N):q(s)?(e.consume(s),o=String.fromCharCode(s),g):n(s)}function f(a){return a===45?(e.consume(a),i=2,p):a===91?(e.consume(a),i=5,s=0,m):q(a)?(e.consume(a),i=4,r.interrupt?t:N):n(a)}function p(i){return i===45?(e.consume(i),r.interrupt?t:N):n(i)}function m(i){return i===`CDATA[`.charCodeAt(s++)?(e.consume(i),s===6?r.interrupt?t:O:m):n(i)}function h(t){return q(t)?(e.consume(t),o=String.fromCharCode(t),g):n(t)}function g(s){if(s===null||s===47||s===62||X(s)){let c=s===47,l=o.toLowerCase();return!c&&!a&&er.includes(l)?(i=1,r.interrupt?t(s):O(s)):$n.includes(o.toLowerCase())?(i=6,c?(e.consume(s),_):r.interrupt?t(s):O(s)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(s):a?v(s):y(s))}return s===45||J(s)?(e.consume(s),o+=String.fromCharCode(s),g):n(s)}function _(i){return i===62?(e.consume(i),r.interrupt?t:O):n(i)}function v(t){return Z(t)?(e.consume(t),v):E(t)}function y(t){return t===47?(e.consume(t),E):t===58||t===95||q(t)?(e.consume(t),b):Z(t)?(e.consume(t),y):E(t)}function b(t){return t===45||t===46||t===58||t===95||J(t)?(e.consume(t),b):x(t)}function x(t){return t===61?(e.consume(t),S):Z(t)?(e.consume(t),x):y(t)}function S(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),c=t,C):Z(t)?(e.consume(t),S):w(t)}function C(t){return t===c?(e.consume(t),c=null,T):t===null||Y(t)?n(t):(e.consume(t),C)}function w(t){return t===null||t===34||t===39||t===47||t===60||t===61||t===62||t===96||X(t)?x(t):(e.consume(t),w)}function T(e){return e===47||e===62||Z(e)?y(e):n(e)}function E(t){return t===62?(e.consume(t),D):n(t)}function D(t){return t===null||Y(t)?O(t):Z(t)?(e.consume(t),D):n(t)}function O(t){return t===45&&i===2?(e.consume(t),j):t===60&&i===1?(e.consume(t),M):t===62&&i===4?(e.consume(t),re):t===63&&i===3?(e.consume(t),N):t===93&&i===5?(e.consume(t),ne):Y(t)&&(i===6||i===7)?(e.exit(`htmlFlowData`),e.check(nr,ie,ee)(t)):t===null||Y(t)?(e.exit(`htmlFlowData`),ee(t)):(e.consume(t),O)}function ee(t){return e.check(rr,k,ie)(t)}function k(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),A}function A(t){return t===null||Y(t)?ee(t):(e.enter(`htmlFlowData`),O(t))}function j(t){return t===45?(e.consume(t),N):O(t)}function M(t){return t===47?(e.consume(t),o=``,te):O(t)}function te(t){if(t===62){let n=o.toLowerCase();return er.includes(n)?(e.consume(t),re):O(t)}return q(t)&&o.length<8?(e.consume(t),o+=String.fromCharCode(t),te):O(t)}function ne(t){return t===93?(e.consume(t),N):O(t)}function N(t){return t===62?(e.consume(t),re):t===45&&i===2?(e.consume(t),N):O(t)}function re(t){return t===null||Y(t)?(e.exit(`htmlFlowData`),ie(t)):(e.consume(t),re)}function ie(n){return e.exit(`htmlFlow`),t(n)}}function or(e,t,n){let r=this;return i;function i(t){return Y(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a):n(t)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function sr(e,t,n){return r;function r(r){return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),e.attempt(ln,t,n)}}var cr={name:`htmlText`,tokenize:lr};function lr(e,t,n){let r=this,i,a,o;return s;function s(t){return e.enter(`htmlText`),e.enter(`htmlTextData`),e.consume(t),c}function c(t){return t===33?(e.consume(t),l):t===47?(e.consume(t),x):t===63?(e.consume(t),y):q(t)?(e.consume(t),w):n(t)}function l(t){return t===45?(e.consume(t),u):t===91?(e.consume(t),a=0,m):q(t)?(e.consume(t),v):n(t)}function u(t){return t===45?(e.consume(t),p):n(t)}function d(t){return t===null?n(t):t===45?(e.consume(t),f):Y(t)?(o=d,M(t)):(e.consume(t),d)}function f(t){return t===45?(e.consume(t),p):d(t)}function p(e){return e===62?j(e):e===45?f(e):d(e)}function m(t){return t===`CDATA[`.charCodeAt(a++)?(e.consume(t),a===6?h:m):n(t)}function h(t){return t===null?n(t):t===93?(e.consume(t),g):Y(t)?(o=h,M(t)):(e.consume(t),h)}function g(t){return t===93?(e.consume(t),_):h(t)}function _(t){return t===62?j(t):t===93?(e.consume(t),_):h(t)}function v(t){return t===null||t===62?j(t):Y(t)?(o=v,M(t)):(e.consume(t),v)}function y(t){return t===null?n(t):t===63?(e.consume(t),b):Y(t)?(o=y,M(t)):(e.consume(t),y)}function b(e){return e===62?j(e):y(e)}function x(t){return q(t)?(e.consume(t),S):n(t)}function S(t){return t===45||J(t)?(e.consume(t),S):C(t)}function C(t){return Y(t)?(o=C,M(t)):Z(t)?(e.consume(t),C):j(t)}function w(t){return t===45||J(t)?(e.consume(t),w):t===47||t===62||X(t)?T(t):n(t)}function T(t){return t===47?(e.consume(t),j):t===58||t===95||q(t)?(e.consume(t),E):Y(t)?(o=T,M(t)):Z(t)?(e.consume(t),T):j(t)}function E(t){return t===45||t===46||t===58||t===95||J(t)?(e.consume(t),E):D(t)}function D(t){return t===61?(e.consume(t),O):Y(t)?(o=D,M(t)):Z(t)?(e.consume(t),D):T(t)}function O(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),i=t,ee):Y(t)?(o=O,M(t)):Z(t)?(e.consume(t),O):(e.consume(t),k)}function ee(t){return t===i?(e.consume(t),i=void 0,A):t===null?n(t):Y(t)?(o=ee,M(t)):(e.consume(t),ee)}function k(t){return t===null||t===34||t===39||t===60||t===61||t===96?n(t):t===47||t===62||X(t)?T(t):(e.consume(t),k)}function A(e){return e===47||e===62||X(e)?T(e):n(e)}function j(r){return r===62?(e.consume(r),e.exit(`htmlTextData`),e.exit(`htmlText`),t):n(r)}function M(t){return e.exit(`htmlTextData`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),te}function te(t){return Z(t)?Q(e,ne,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):ne(t)}function ne(t){return e.enter(`htmlTextData`),o(t)}}var ur={name:`labelEnd`,resolveAll:mr,resolveTo:hr,tokenize:gr},dr={tokenize:_r},fr={tokenize:vr},pr={tokenize:yr};function mr(e){let t=-1,n=[];for(;++t=3&&(a===null||Y(a))?(e.exit(`thematicBreak`),t(a)):n(a)}function c(t){return t===i?(e.consume(t),r++,c):(e.exit(`thematicBreakSequence`),Z(t)?Q(e,s,`whitespace`)(t):s(t))}}var Or={continuation:{tokenize:Mr},exit:Pr,name:`list`,tokenize:jr},kr={partial:!0,tokenize:Fr},Ar={partial:!0,tokenize:Nr};function jr(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type===`linePrefix`?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(t){let i=r.containerState.type||(t===42||t===43||t===45?`listUnordered`:`listOrdered`);if(i===`listUnordered`?!r.containerState.marker||t===r.containerState.marker:Vt(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),i===`listUnordered`)return e.enter(`listItemPrefix`),t===42||t===45?e.check(Er,n,l)(t):l(t);if(!r.interrupt||t===49)return e.enter(`listItemPrefix`),e.enter(`listItemValue`),c(t)}return n(t)}function c(t){return Vt(t)&&++o<10?(e.consume(t),c):(!r.interrupt||o<2)&&(r.containerState.marker?t===r.containerState.marker:t===41||t===46)?(e.exit(`listItemValue`),l(t)):n(t)}function l(t){return e.enter(`listItemMarker`),e.consume(t),e.exit(`listItemMarker`),r.containerState.marker=r.containerState.marker||t,e.check(ln,r.interrupt?n:u,e.attempt(kr,f,d))}function u(e){return r.containerState.initialBlankLine=!0,a++,f(e)}function d(t){return Z(t)?(e.enter(`listItemPrefixWhitespace`),e.consume(t),e.exit(`listItemPrefixWhitespace`),f):n(t)}function f(n){return r.containerState.size=a+r.sliceSerialize(e.exit(`listItemPrefix`),!0).length,t(n)}}function Mr(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(ln,i,a);function i(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Q(e,t,`listItemIndent`,r.containerState.size+1)(n)}function a(n){return r.containerState.furtherBlankLines||!Z(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(Ar,t,o)(n))}function o(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,Q(e,e.attempt(Or,t,n),`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(i)}}function Nr(e,t,n){let r=this;return Q(e,i,`listItemIndent`,r.containerState.size+1);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`listItemIndent`&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)}}function Pr(e){e.exit(this.containerState.type)}function Fr(e,t,n){let r=this;return Q(e,i,`listItemPrefixWhitespace`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:5);function i(e){let i=r.events[r.events.length-1];return!Z(e)&&i&&i[1].type===`listItemPrefixWhitespace`?t(e):n(e)}}var Ir={name:`setextUnderline`,resolveTo:Lr,tokenize:Rr};function Lr(e,t){let n=e.length,r,i,a;for(;n--;)if(e[n][0]===`enter`){if(e[n][1].type===`content`){r=n;break}e[n][1].type===`paragraph`&&(i=n)}else e[n][1].type===`content`&&e.splice(n,1),!a&&e[n][1].type===`definition`&&(a=n);let o={type:`setextHeading`,start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type=`setextHeadingText`,a?(e.splice(i,0,[`enter`,o,t]),e.splice(a+1,0,[`exit`,e[r][1],t]),e[r][1].end={...e[a][1].end}):e[r][1]=o,e.push([`exit`,o,t]),e}function Rr(e,t,n){let r=this,i;return a;function a(t){let a=r.events.length,s;for(;a--;)if(r.events[a][1].type!==`lineEnding`&&r.events[a][1].type!==`linePrefix`&&r.events[a][1].type!==`content`){s=r.events[a][1].type===`paragraph`;break}return!r.parser.lazy[r.now().line]&&(r.interrupt||s)?(e.enter(`setextHeadingLine`),i=t,o(t)):n(t)}function o(t){return e.enter(`setextHeadingLineSequence`),s(t)}function s(t){return t===i?(e.consume(t),s):(e.exit(`setextHeadingLineSequence`),Z(t)?Q(e,c,`lineSuffix`)(t):c(t))}function c(r){return r===null||Y(r)?(e.exit(`setextHeadingLine`),t(r)):n(r)}}var zr={tokenize:Br};function Br(e){let t=this,n=e.attempt(ln,r,e.attempt(this.parser.constructs.flowInitial,i,Q(e,e.attempt(this.parser.constructs.flow,i,e.attempt(Fn,i)),`linePrefix`)));return n;function r(r){if(r===null){e.consume(r);return}return e.enter(`lineEndingBlank`),e.consume(r),e.exit(`lineEndingBlank`),t.currentConstruct=void 0,n}function i(r){if(r===null){e.consume(r);return}return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),t.currentConstruct=void 0,n}}var Vr={resolveAll:Gr()},Hr=Wr(`string`),Ur=Wr(`text`);function Wr(e){return{resolveAll:Gr(e===`text`?Kr:void 0),tokenize:t};function t(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return c(e)?i(e):o(e)}function o(e){if(e===null){t.consume(e);return}return t.enter(`data`),t.consume(e),s}function s(e){return c(e)?(t.exit(`data`),i(e)):(t.consume(e),s)}function c(e){if(e===null)return!0;let t=r[e],i=-1;if(t)for(;++iti,contentInitial:()=>Yr,disable:()=>ni,document:()=>Jr,flow:()=>Zr,flowInitial:()=>Xr,insideSpan:()=>ei,string:()=>Qr,text:()=>$r}),Jr={42:Or,43:Or,45:Or,48:Or,49:Or,50:Or,51:Or,52:Or,53:Or,54:Or,55:Or,56:Or,57:Or,62:dn},Yr={91:Wn},Xr={[-2]:Cn,[-1]:Cn,32:Cn},Zr={35:Xn,42:Er,45:[Ir,Er],60:tr,61:Ir,95:Er,96:bn,126:bn},Qr={38:_n,92:hn},$r={[-5]:wr,[-4]:wr,[-3]:wr,33:br,38:_n,42:nn,60:[sn,cr],91:Sr,92:[Jn,hn],93:ur,95:nn,96:Dn},ei={null:[nn,Vr]},ti={null:[42,95]},ni={null:[]};function ri(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],c={attempt:C(x),check:C(S),consume:v,enter:y,exit:b,interrupt:C(S,{interrupt:!0})},l={code:null,containerState:{},defineSkip:h,events:[],now:m,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:d},u=t.tokenize.call(l,c);return t.resolveAll&&a.push(t),l;function d(e){return o=Mt(o,e),g(),o[o.length-1]===null?(w(t,0),l.events=tn(a,l.events,l),l.events):[]}function f(e,t){return ai(p(e),t)}function p(e){return ii(o,e)}function m(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function h(e){i[e.line]=e.column,E()}function g(){let e;for(;r._index-1){let e=o[0];typeof e==`string`?o[0]=e.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function ai(e,t){let n=-1,r=[],i;for(;++n0){let e=a.tokenStack[a.tokenStack.length-1];(e[1]||yi).call(a,void 0,e[0])}for(r.position={start:gi(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:gi(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d[],c=65536,l=1150,u=65535,d=63,f=8,p=128,m=30,h=1440,g={postgres:{reservedUsernames:[`rdsadmin`,`postgres`,`rds_superuser`],reservedUsernamePrefixes:[`pg_`],maxUsernameLen:63,maxDBNameLen:63},mariadb:{reservedUsernames:[`root`,`mariadb.sys`,`mysql`,`rdsadmin`,`public`],reservedUsernamePrefixes:[`mysql.`,`mariadb.`],maxUsernameLen:80,maxDBNameLen:64}},re={reservedUsernames:[],reservedUsernamePrefixes:[],maxUsernameLen:80,maxDBNameLen:64};function _(e){return g[e]??re}var v=n().min(1,`Identifier is required`).max(d,`Identifier must be at most ${d} characters`).regex(/^[a-z]/,`Identifier must begin with a lowercase letter`).regex(/^[a-z0-9-]*$/,`Identifier may contain only lowercase letters, digits and hyphens`).refine(e=>!e.endsWith(`-`),`Identifier may not end with a hyphen`).refine(e=>!e.includes(`--`),`Identifier may not contain consecutive hyphens`),y=n().min(f,`Password must be at least ${f} characters`).max(p,`Password must be at most ${p} characters`).regex(/^[ -~]*$/,`Password may only contain printable ASCII`).refine(e=>!/[/"@ ]/.test(e),`Password may not contain '/', '"', '@' or spaces`),b=a().int(`Storage must be a whole number of GiB`).min(20,`Storage must be at least 20 GiB`).max(c,`Storage must be at most ${c} GiB`),x=n().refine(e=>{if(e===``)return!0;let t=Number(e);return/^\d+$/.test(e)&&Number.isInteger(t)&&t>=1150&&t<=65535},`Port must be between ${l} and ${u}`),S=a().int(`Retention must be a whole number of days`).min(0,`Retention may not be negative`).max(7,`Retention must be at most 7 days`),ie=/^(?:[01]\d|2[0-3]):[0-5]\d-(?:[01]\d|2[0-3]):[0-5]\d$/,C=/^(?:sun|mon|tue|wed|thu|fri|sat):(?:[01]\d|2[0-3]):[0-5]\d-(?:sun|mon|tue|wed|thu|fri|sat):(?:[01]\d|2[0-3]):[0-5]\d$/,w=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];function T(e){let[t,n]=e.split(`:`);return Number(t??0)*60+Number(n??0)}function E(e){let[t,n,r]=e.split(`:`);return w.indexOf(t??``)*h+Number(n??0)*60+Number(r??0)}function D(e,t,n){return((t-e)%n+n)%n}function ae(e){let[t,n]=e.split(`-`);return D(T(t??``),T(n??``),h)}function oe(e){let[t,n]=e.split(`-`);return D(E(t??``),E(n??``),7*h)}var O=n().refine(e=>e===``||ie.test(e),`Backup window must be hh24:mi-hh24:mi in UTC`).refine(e=>e===``||ae(e)>=m,`Backup window must be at least ${m} minutes long`),k=n().refine(e=>e===``||C.test(e),`Maintenance window must be ddd:hh24:mi-ddd:hh24:mi in UTC`).refine(e=>e===``||oe(e)>=m,`Maintenance window must be at least ${m} minutes long`),A=`aws:`,j=i({key:n().min(1,`Tag key is required`).max(128).refine(e=>!e.toLowerCase().startsWith(A),`Tag keys may not start with the reserved ${A} prefix`),value:n().max(256)}),M=r(j).max(50,`At most 50 tags may be supplied`);function N(e,t,n,r,i){let a=n=>{e.addIssue({code:`custom`,path:[t],message:n})};if(r.length>i){a(`${n} must be at most ${i} characters`);return}if(!/^[a-zA-Z]/.test(r)){a(`${n} must begin with a letter`);return}/^\w*$/.test(r)||a(`${n} may contain only letters, digits and underscores`)}function P(e,t,n){let r=_(t);N(e,`masterUsername`,`Master username`,n,r.maxUsernameLen);let i=n.trim().toLowerCase();if(r.reservedUsernames.includes(i)){e.addIssue({code:`custom`,path:[`masterUsername`],message:`"${n}" is reserved by ${t}`});return}let a=r.reservedUsernamePrefixes.find(e=>i.startsWith(e));a&&e.addIssue({code:`custom`,path:[`masterUsername`],message:`Master username may not begin with "${a}", which ${t} reserves`})}var F=i({dbInstanceIdentifier:v,engine:n().min(1,`Engine is required`),engineVersion:n(),dbInstanceClass:n().min(1,`Instance class is required`),allocatedStorage:b,masterUsername:n().min(1,`Master username is required`),masterUserPassword:y,confirmPassword:n(),dbName:n(),port:x,dbSubnetGroupName:n(),vpcSecurityGroupIds:r(n()),dbParameterGroupName:n(),deletionProtection:o(),backupRetentionPeriod:S,preferredBackupWindow:O,preferredMaintenanceWindow:k,tags:M}).superRefine((e,t)=>{P(t,e.engine,e.masterUsername),e.dbName!==``&&N(t,`dbName`,`Database name`,e.dbName,_(e.engine).maxDBNameLen),e.confirmPassword!==e.masterUserPassword&&t.addIssue({code:`custom`,path:[`confirmPassword`],message:`Passwords do not match`})}),I=i({currentAllocatedStorage:a(),dbInstanceClass:n().min(1,`Instance class is required`),allocatedStorage:b,dbParameterGroupName:n(),vpcSecurityGroupIds:r(n()),deletionProtection:o(),backupRetentionPeriod:S,preferredBackupWindow:O,preferredMaintenanceWindow:k,masterUserPassword:n(),applyImmediately:o()}).superRefine((e,t)=>{if(e.allocatedStorage!e.endsWith(`-`),`Snapshot identifier may not end with a hyphen`).refine(e=>!e.includes(`--`),`Snapshot identifier may not contain consecutive hyphens`),B=n().refine(e=>!e.toLowerCase().startsWith(R),`Snapshot identifier may not begin with "${R}", which automated backups use`).pipe(z),V=i({dbSnapshotIdentifier:B,tags:M});function H(e){return String(e).padStart(2,`0`)}function U(e){return`${e.getUTCFullYear()}${H(e.getUTCMonth()+1)}${H(e.getUTCDate())}-${H(e.getUTCHours())}${H(e.getUTCMinutes())}`}function W(e,t,n=new Date){let r=`-${t}-${U(n)}`,i=d-r.length;return`${e.slice(0,i).replace(/-+$/,``)}${r}`}var G=i({snapshotAllocatedStorage:a(),dbInstanceIdentifier:v,dbInstanceClass:n().min(1,`Instance class is required`),allocatedStorage:b,port:x,dbSubnetGroupName:n(),vpcSecurityGroupIds:r(n()),dbParameterGroupName:n(),deletionProtection:o(),tags:M}).superRefine((e,t)=>{e.allocatedStoragee.toLowerCase()!=="default",`${e} may not be "default", which the service reserves`)}function Z(e){return n().min(1,`${e} is required`).max(q,`${e} must be at most 255 characters`)}var se=i({dbSubnetGroupName:X(`Name`),dbSubnetGroupDescription:Z(`Description`),subnetIds:r(n()).min(1,`Select at least one subnet`).max(20,`A DB subnet group may hold at most 20 subnets`),tags:M}),ce=i({dbParameterGroupName:n().refine(e=>!Y(e),`Name may not begin with "${J}", which the service reserves`).pipe(X(`Name`)),dbParameterGroupFamily:n().min(1,`Family is required`),description:Z(`Description`),tags:M}),le=`static`,ue=`immediate`,Q=`pending-reboot`,$=`user`;function de(e){return e===`static`?[Q]:[ue,Q]}var fe=new Set([`creating`,`modifying`,`backing-up`,`rebooting`,`stopping`,`starting`,`recovering`,`deleting`]);function pe(e){return e!==void 0&&fe.has(e)}function me(e){return e===`stopped`}function he(e){return e===`available`}function ge(e){return e===`available`}function _e(e){return e!==void 0&&e!==`deleting`&&e!==`deleted`}function ve(e){return e===`available`||e===`stopped`}var ye=`creating`,be=`manual`,xe=`automated`;function Se(e){return e===`available`}function Ce(e,t){return e===`available`&&t!==`automated`}export{G as C,te as D,ne as E,I as S,s as T,V as _,xe as a,Y as b,_e as c,Se as d,ve as f,ce as g,F as h,ye as i,Ce as l,he as m,le as n,be as o,me as p,$ as r,de as s,Q as t,ge as u,se as v,W as w,pe as x,B as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-CyiqRExv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-Ca8CaJkU.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-CyiqRExv.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-Ca8CaJkU.js index 1e3b74830..ce0c147f3 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-CyiqRExv.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-Ca8CaJkU.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{$ as t,J as n,Q as r,X as i,Y as a,Z as o,et as s,nt as c,p as l,rt as u,tt as d}from"./awsClient-b0hcP1Iz.js";import{D as f,E as p,T as m,i as h,x as g}from"./rds-CE3126Ga.js";var _=class extends f(m,p,`DescribeDBEngineVersions`,n){},v=class extends f(m,p,`DescribeDBInstanceAutomatedBackups`,a){},y=class extends f(m,p,`DescribeDBInstances`,i){},b=class extends f(m,p,`DescribeDBParameterGroups`,o){},x=class extends f(m,p,`DescribeDBParameters`,r){},S=class extends f(m,p,`DescribeDBSnapshots`,t){},C=class extends f(m,p,`DescribeDBSubnetGroups`,s){},w=class extends f(m,p,`DescribeEvents`,d){},T=class extends f(m,p,`DescribeOrderableDBInstanceOptions`,c){},E=class extends f(m,p,`ListTagsForResource`,u){},D=5e3,O=20160,k=3e4,A=36e5,j=`db-instance`,M=`db-snapshot`;function N(e){return e.some(e=>e.Status===h)}var P=e({queryKey:[`rds`,`dbInstances`],queryFn:async()=>{let e=new y({});return await l().send(e)},refetchInterval:e=>(e.state.data?.DBInstances??[]).some(e=>g(e.DBInstanceStatus))?D:!1}),F=t=>e({queryKey:[`rds`,`dbInstances`,t],queryFn:async()=>{let e=new y({DBInstanceIdentifier:t});return await l().send(e)},refetchInterval:e=>{let t=e.state.data?.DBInstances?.[0];return g(t?.DBInstanceStatus)?D:!1}}),I=e({queryKey:[`rds`,`subnetGroups`],queryFn:async()=>{let e=new C({});return await l().send(e)}}),L=t=>e({queryKey:[`rds`,`subnetGroups`,t],queryFn:async()=>{let e=new C({DBSubnetGroupName:t});return await l().send(e)}}),R=e({queryKey:[`rds`,`parameterGroups`],queryFn:async()=>{let e=new b({});return await l().send(e)}}),z=t=>e({queryKey:[`rds`,`parameterGroups`,t],queryFn:async()=>{let e=new b({DBParameterGroupName:t});return await l().send(e)}}),B=t=>e({queryKey:[`rds`,`parameters`,t],queryFn:async()=>{let e=new x({DBParameterGroupName:t});return await l().send(e)}}),V=(t,n=j)=>e({queryKey:[`rds`,`events`,n,t],queryFn:async()=>{let e=new w({SourceIdentifier:t,SourceType:n,Duration:O});return await l().send(e)},refetchInterval:k}),H=e=>V(e,M),U=e({queryKey:[`rds`,`dbSnapshots`],queryFn:async()=>{let e=new S({});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),W=t=>e({queryKey:[`rds`,`dbSnapshots`,t],queryFn:async()=>{let e=new S({DBSnapshotIdentifier:t});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),G=t=>e({queryKey:[`rds`,`dbSnapshots`,`instance`,t],queryFn:async()=>{let e=new S({DBInstanceIdentifier:t});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),K=t=>e({queryKey:[`rds`,`automatedBackups`,t],queryFn:async()=>{let e=new v({DBInstanceIdentifier:t});return await l().send(e)}}),q=t=>e({queryKey:[`rds`,`tags`,t],queryFn:async()=>{let e=new E({ResourceName:t});return await l().send(e)},enabled:t.length>0}),J=e({queryKey:[`rds`,`engineVersions`],queryFn:async()=>{let e=new _({});return await l().send(e)},staleTime:A}),Y=t=>e({queryKey:[`rds`,`orderableOptions`,t],queryFn:async()=>{let e=new T({Engine:t});return await l().send(e)},staleTime:A,enabled:t.length>0});export{U as a,G as c,R as d,B as f,q as g,I as h,W as i,Y as l,L as m,F as n,J as o,H as p,P as r,V as s,K as t,z as u}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{$ as t,J as n,Q as r,X as i,Y as a,Z as o,et as s,nt as c,p as l,rt as u,tt as d}from"./awsClient-Cqp6x3OY.js";import{D as f,E as p,T as m,i as h,x as g}from"./rds-DIuGt87z.js";var _=class extends f(m,p,`DescribeDBEngineVersions`,n){},v=class extends f(m,p,`DescribeDBInstanceAutomatedBackups`,a){},y=class extends f(m,p,`DescribeDBInstances`,i){},b=class extends f(m,p,`DescribeDBParameterGroups`,o){},x=class extends f(m,p,`DescribeDBParameters`,r){},S=class extends f(m,p,`DescribeDBSnapshots`,t){},C=class extends f(m,p,`DescribeDBSubnetGroups`,s){},w=class extends f(m,p,`DescribeEvents`,d){},T=class extends f(m,p,`DescribeOrderableDBInstanceOptions`,c){},E=class extends f(m,p,`ListTagsForResource`,u){},D=5e3,O=20160,k=3e4,A=36e5,j=`db-instance`,M=`db-snapshot`;function N(e){return e.some(e=>e.Status===h)}var P=e({queryKey:[`rds`,`dbInstances`],queryFn:async()=>{let e=new y({});return await l().send(e)},refetchInterval:e=>(e.state.data?.DBInstances??[]).some(e=>g(e.DBInstanceStatus))?D:!1}),F=t=>e({queryKey:[`rds`,`dbInstances`,t],queryFn:async()=>{let e=new y({DBInstanceIdentifier:t});return await l().send(e)},refetchInterval:e=>{let t=e.state.data?.DBInstances?.[0];return g(t?.DBInstanceStatus)?D:!1}}),I=e({queryKey:[`rds`,`subnetGroups`],queryFn:async()=>{let e=new C({});return await l().send(e)}}),L=t=>e({queryKey:[`rds`,`subnetGroups`,t],queryFn:async()=>{let e=new C({DBSubnetGroupName:t});return await l().send(e)}}),R=e({queryKey:[`rds`,`parameterGroups`],queryFn:async()=>{let e=new b({});return await l().send(e)}}),z=t=>e({queryKey:[`rds`,`parameterGroups`,t],queryFn:async()=>{let e=new b({DBParameterGroupName:t});return await l().send(e)}}),B=t=>e({queryKey:[`rds`,`parameters`,t],queryFn:async()=>{let e=new x({DBParameterGroupName:t});return await l().send(e)}}),V=(t,n=j)=>e({queryKey:[`rds`,`events`,n,t],queryFn:async()=>{let e=new w({SourceIdentifier:t,SourceType:n,Duration:O});return await l().send(e)},refetchInterval:k}),H=e=>V(e,M),U=e({queryKey:[`rds`,`dbSnapshots`],queryFn:async()=>{let e=new S({});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),W=t=>e({queryKey:[`rds`,`dbSnapshots`,t],queryFn:async()=>{let e=new S({DBSnapshotIdentifier:t});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),G=t=>e({queryKey:[`rds`,`dbSnapshots`,`instance`,t],queryFn:async()=>{let e=new S({DBInstanceIdentifier:t});return await l().send(e)},refetchInterval:e=>N(e.state.data?.DBSnapshots??[])?D:!1}),K=t=>e({queryKey:[`rds`,`automatedBackups`,t],queryFn:async()=>{let e=new v({DBInstanceIdentifier:t});return await l().send(e)}}),q=t=>e({queryKey:[`rds`,`tags`,t],queryFn:async()=>{let e=new E({ResourceName:t});return await l().send(e)},enabled:t.length>0}),J=e({queryKey:[`rds`,`engineVersions`],queryFn:async()=>{let e=new _({});return await l().send(e)},staleTime:A}),Y=t=>e({queryKey:[`rds`,`orderableOptions`,t],queryFn:async()=>{let e=new T({Engine:t});return await l().send(e)},staleTime:A,enabled:t.length>0});export{U as a,G as c,R as d,B as f,q as g,I as h,W as i,Y as l,L as m,F as n,J as o,H as p,P as r,V as s,K as t,z as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DIuGt87z.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DIuGt87z.js new file mode 100644 index 000000000..68e006679 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DIuGt87z.js @@ -0,0 +1 @@ +import{Lt as e,_ as t,d as n,h as r,m as i,u as a,vt as o}from"./cluster-config-DkOiY8HH.js";import{dt as s}from"./awsClient-Cqp6x3OY.js";var c=e(s,`AmazonRDSv19`,`RDSClient`,o),ee={},te=(e,t,n,r)=>[],l=65536,u=1150,ne=65535,d=63,f=8,p=128,m=30,h=1440,g={postgres:{reservedUsernames:[`rdsadmin`,`postgres`,`rds_superuser`],reservedUsernamePrefixes:[`pg_`],maxUsernameLen:63,maxDBNameLen:63},mariadb:{reservedUsernames:[`root`,`mariadb.sys`,`mysql`,`rdsadmin`,`public`],reservedUsernamePrefixes:[`mysql.`,`mariadb.`],maxUsernameLen:80,maxDBNameLen:64}},re={reservedUsernames:[],reservedUsernamePrefixes:[],maxUsernameLen:80,maxDBNameLen:64};function _(e){return g[e]??re}var v=t().min(1,`Identifier is required`).max(d,`Identifier must be at most ${d} characters`).regex(/^[a-z]/,`Identifier must begin with a lowercase letter`).regex(/^[a-z0-9-]*$/,`Identifier may contain only lowercase letters, digits and hyphens`).refine(e=>!e.endsWith(`-`),`Identifier may not end with a hyphen`).refine(e=>!e.includes(`--`),`Identifier may not contain consecutive hyphens`),y=t().min(f,`Password must be at least ${f} characters`).max(p,`Password must be at most ${p} characters`).regex(/^[ -~]*$/,`Password may only contain printable ASCII`).refine(e=>!/[/"@ ]/.test(e),`Password may not contain '/', '"', '@' or spaces`),b=i().int(`Storage must be a whole number of GiB`).min(20,`Storage must be at least 20 GiB`).max(l,`Storage must be at most ${l} GiB`),x=t().refine(e=>{if(e===``)return!0;let t=Number(e);return/^\d+$/.test(e)&&Number.isInteger(t)&&t>=1150&&t<=65535},`Port must be between ${u} and ${ne}`),S=i().int(`Retention must be a whole number of days`).min(0,`Retention may not be negative`).max(7,`Retention must be at most 7 days`),C=/^(?:[01]\d|2[0-3]):[0-5]\d-(?:[01]\d|2[0-3]):[0-5]\d$/,w=/^(?:sun|mon|tue|wed|thu|fri|sat):(?:[01]\d|2[0-3]):[0-5]\d-(?:sun|mon|tue|wed|thu|fri|sat):(?:[01]\d|2[0-3]):[0-5]\d$/,T=[`sun`,`mon`,`tue`,`wed`,`thu`,`fri`,`sat`];function E(e){let[t,n]=e.split(`:`);return Number(t??0)*60+Number(n??0)}function D(e){let[t,n,r]=e.split(`:`);return T.indexOf(t??``)*h+Number(n??0)*60+Number(r??0)}function O(e,t,n){return((t-e)%n+n)%n}function ie(e){let[t,n]=e.split(`-`);return O(E(t??``),E(n??``),h)}function ae(e){let[t,n]=e.split(`-`);return O(D(t??``),D(n??``),7*h)}var k=t().refine(e=>e===``||C.test(e),`Backup window must be hh24:mi-hh24:mi in UTC`).refine(e=>e===``||ie(e)>=m,`Backup window must be at least ${m} minutes long`),A=t().refine(e=>e===``||w.test(e),`Maintenance window must be ddd:hh24:mi-ddd:hh24:mi in UTC`).refine(e=>e===``||ae(e)>=m,`Maintenance window must be at least ${m} minutes long`),j=`aws:`,M=r({key:t().min(1,`Tag key is required`).max(128).refine(e=>!e.toLowerCase().startsWith(j),`Tag keys may not start with the reserved ${j} prefix`),value:t().max(256)}),N=a(M).max(50,`At most 50 tags may be supplied`);function P(e,t,n,r,i){let a=n=>{e.addIssue({code:`custom`,path:[t],message:n})};if(r.length>i){a(`${n} must be at most ${i} characters`);return}if(!/^[a-zA-Z]/.test(r)){a(`${n} must begin with a letter`);return}/^\w*$/.test(r)||a(`${n} may contain only letters, digits and underscores`)}function F(e,t,n){let r=_(t);P(e,`masterUsername`,`Master username`,n,r.maxUsernameLen);let i=n.trim().toLowerCase();if(r.reservedUsernames.includes(i)){e.addIssue({code:`custom`,path:[`masterUsername`],message:`"${n}" is reserved by ${t}`});return}let a=r.reservedUsernamePrefixes.find(e=>i.startsWith(e));a&&e.addIssue({code:`custom`,path:[`masterUsername`],message:`Master username may not begin with "${a}", which ${t} reserves`})}var I=r({dbInstanceIdentifier:v,engine:t().min(1,`Engine is required`),engineVersion:t(),dbInstanceClass:t().min(1,`Instance class is required`),allocatedStorage:b,masterUsername:t().min(1,`Master username is required`),masterUserPassword:y,confirmPassword:t(),dbName:t(),port:x,dbSubnetGroupName:t(),vpcSecurityGroupIds:a(t()),dbParameterGroupName:t(),deletionProtection:n(),backupRetentionPeriod:S,preferredBackupWindow:k,preferredMaintenanceWindow:A,tags:N}).superRefine((e,t)=>{F(t,e.engine,e.masterUsername),e.dbName!==``&&P(t,`dbName`,`Database name`,e.dbName,_(e.engine).maxDBNameLen),e.confirmPassword!==e.masterUserPassword&&t.addIssue({code:`custom`,path:[`confirmPassword`],message:`Passwords do not match`})}),L=r({currentAllocatedStorage:i(),dbInstanceClass:t().min(1,`Instance class is required`),allocatedStorage:b,dbParameterGroupName:t(),vpcSecurityGroupIds:a(t()),deletionProtection:n(),backupRetentionPeriod:S,preferredBackupWindow:k,preferredMaintenanceWindow:A,masterUserPassword:t(),applyImmediately:n()}).superRefine((e,t)=>{if(e.allocatedStorage!e.endsWith(`-`),`Snapshot identifier may not end with a hyphen`).refine(e=>!e.includes(`--`),`Snapshot identifier may not contain consecutive hyphens`),V=t().refine(e=>!e.toLowerCase().startsWith(z),`Snapshot identifier may not begin with "${z}", which automated backups use`).pipe(B),H=r({dbSnapshotIdentifier:V,tags:N});function U(e){return String(e).padStart(2,`0`)}function W(e){return`${e.getUTCFullYear()}${U(e.getUTCMonth()+1)}${U(e.getUTCDate())}-${U(e.getUTCHours())}${U(e.getUTCMinutes())}`}function G(e,t,n=new Date){let r=`-${t}-${W(n)}`,i=d-r.length;return`${e.slice(0,i).replace(/-+$/,``)}${r}`}var K=r({snapshotAllocatedStorage:i(),dbInstanceIdentifier:v,dbInstanceClass:t().min(1,`Instance class is required`),allocatedStorage:b,port:x,dbSubnetGroupName:t(),vpcSecurityGroupIds:a(t()),dbParameterGroupName:t(),deletionProtection:n(),tags:N}).superRefine((e,t)=>{e.allocatedStoragee.toLowerCase()!=="default",`${e} may not be "default", which the service reserves`)}function Q(e){return t().min(1,`${e} is required`).max(J,`${e} must be at most 255 characters`)}var oe=r({dbSubnetGroupName:Z(`Name`),dbSubnetGroupDescription:Q(`Description`),subnetIds:a(t()).min(1,`Select at least one subnet`).max(20,`A DB subnet group may hold at most 20 subnets`),tags:N}),se=r({dbParameterGroupName:t().refine(e=>!X(e),`Name may not begin with "${Y}", which the service reserves`).pipe(Z(`Name`)),dbParameterGroupFamily:t().min(1,`Family is required`),description:Q(`Description`),tags:N}),ce=`static`,le=`immediate`,$=`pending-reboot`,ue=`user`;function de(e){return e===`static`?[$]:[le,$]}var fe=new Set([`creating`,`modifying`,`backing-up`,`rebooting`,`stopping`,`starting`,`recovering`,`deleting`]);function pe(e){return e!==void 0&&fe.has(e)}function me(e){return e===`stopped`}function he(e){return e===`available`}function ge(e){return e===`available`}function _e(e){return e!==void 0&&e!==`deleting`&&e!==`deleted`}function ve(e){return e===`available`||e===`stopped`}var ye=`creating`,be=`manual`,xe=`automated`;function Se(e){return e===`available`}function Ce(e,t){return e===`available`&&t!==`automated`}export{K as C,c as D,te as E,L as S,ee as T,H as _,xe as a,X as b,_e as c,Se as d,ve as f,se as g,I as h,ye as i,Ce as l,he as m,ce as n,be as o,me as p,ue as r,de as s,$ as t,ge as u,oe as v,G as w,pe as x,V as y}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-BkKLEWPo.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DbPUva_R.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-BkKLEWPo.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DbPUva_R.js index 05fa6cebe..5f3318753 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-BkKLEWPo.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-DbPUva_R.js @@ -1 +1 @@ -import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{B as r,G as i,H as a,K as o,U as s,V as c,W as l,at as u,ct as d,it as f,lt as p,ot as ee,p as m,q as h,st as g,ut as _,z as v}from"./awsClient-b0hcP1Iz.js";import{D as y,E as b,T as x}from"./rds-CE3126Ga.js";var S=class extends y(x,b,`AddTagsToResource`,v){},C=class extends y(x,b,`CreateDBInstance`,r){},w=class extends y(x,b,`CreateDBParameterGroup`,c){},T=class extends y(x,b,`CreateDBSnapshot`,a){},E=class extends y(x,b,`CreateDBSubnetGroup`,s){},D=class extends y(x,b,`DeleteDBInstance`,l){},O=class extends y(x,b,`DeleteDBParameterGroup`,i){},k=class extends y(x,b,`DeleteDBSnapshot`,o){},A=class extends y(x,b,`DeleteDBSubnetGroup`,h){},j=class extends y(x,b,`ModifyDBInstance`,f){},M=class extends y(x,b,`ModifyDBParameterGroup`,u){},N=class extends y(x,b,`RebootDBInstance`,ee){},P=class extends y(x,b,`RemoveTagsFromResource`,g){},F=class extends y(x,b,`RestoreDBInstanceFromDBSnapshot`,d){},I=class extends y(x,b,`StartDBInstance`,p){},L=class extends y(x,b,`StopDBInstance`,_){},R=e(),z=[`rds`,`dbInstances`],B=[`rds`,`dbSnapshots`],V=[`rds`,`automatedBackups`],H=[`rds`,`subnetGroups`],U=[`rds`,`parameterGroups`];function W(e){return e.length>0?e:void 0}function G(e){let t=e.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value}));return t.length>0?t:void 0}function K(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:q,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function q(e){let t=new C({DBInstanceIdentifier:e.dbInstanceIdentifier,Engine:e.engine,EngineVersion:W(e.engineVersion),DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,MasterUsername:e.masterUsername,MasterUserPassword:e.masterUserPassword,DBName:W(e.dbName),Port:e.port===``?void 0:Number(e.port),DBSubnetGroupName:W(e.dbSubnetGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds.length>0?e.vpcSecurityGroupIds:void 0,DBParameterGroupName:W(e.dbParameterGroupName),DeletionProtection:e.deletionProtection,BackupRetentionPeriod:e.backupRetentionPeriod,PreferredBackupWindow:W(e.preferredBackupWindow),PreferredMaintenanceWindow:W(e.preferredMaintenanceWindow),Tags:G(e.tags)});return await m().send(t)}function J(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Y,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z}),r.invalidateQueries({queryKey:[...V,t.dbInstanceIdentifier]}),r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function Y(e){let t=new j({DBInstanceIdentifier:e.dbInstanceIdentifier,DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,DBParameterGroupName:W(e.dbParameterGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds,DeletionProtection:e.deletionProtection,BackupRetentionPeriod:e.backupRetentionPeriod,PreferredBackupWindow:W(e.preferredBackupWindow),PreferredMaintenanceWindow:W(e.preferredMaintenanceWindow),MasterUserPassword:W(e.masterUserPassword),ApplyImmediately:e.applyImmediately});return await m().send(t)}function X(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Z,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z}),r.invalidateQueries({queryKey:[...V,t.dbInstanceIdentifier]}),r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function Z(e){let t=new D({DBInstanceIdentifier:e.dbInstanceIdentifier,SkipFinalSnapshot:e.skipFinalSnapshot,FinalDBSnapshotIdentifier:e.skipFinalSnapshot?void 0:e.finalSnapshotIdentifier});return await m().send(t)}function Q(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function $(e){let t=new I({DBInstanceIdentifier:e});return await m().send(t)}function te(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ne,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ne(e){let t=new L({DBInstanceIdentifier:e});return await m().send(t)}function re(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ie,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ie(e){let t=new N({DBInstanceIdentifier:e});return await m().send(t)}function ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:oe,onSuccess:()=>{r.invalidateQueries({queryKey:B}),r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function oe(e){let t=new T({DBSnapshotIdentifier:e.dbSnapshotIdentifier,DBInstanceIdentifier:e.dbInstanceIdentifier,Tags:G(e.tags)});return await m().send(t)}function se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ce,onSuccess:()=>{r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function ce(e){let t=new k({DBSnapshotIdentifier:e});return await m().send(t)}function le(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ue,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ue(e){let t=new F({DBInstanceIdentifier:e.dbInstanceIdentifier,DBSnapshotIdentifier:e.dbSnapshotIdentifier,DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,Port:e.port===``?void 0:Number(e.port),DBSubnetGroupName:W(e.dbSubnetGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds.length>0?e.vpcSecurityGroupIds:void 0,DBParameterGroupName:W(e.dbParameterGroupName),DeletionProtection:e.deletionProtection,Tags:G(e.tags)});return await m().send(t)}function de(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:fe,onSuccess:()=>{r.invalidateQueries({queryKey:H})}},e[0]=r,e[1]=i),n(i)}async function fe(e){let t=new E({DBSubnetGroupName:e.dbSubnetGroupName,DBSubnetGroupDescription:e.dbSubnetGroupDescription,SubnetIds:e.subnetIds,Tags:G(e.tags)});return await m().send(t)}function pe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:H})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new A({DBSubnetGroupName:e});return await m().send(t)}function he(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ge,onSuccess:()=>{r.invalidateQueries({queryKey:U})}},e[0]=r,e[1]=i),n(i)}async function ge(e){let t=new w({DBParameterGroupName:e.dbParameterGroupName,DBParameterGroupFamily:e.dbParameterGroupFamily,Description:e.description,Tags:G(e.tags)});return await m().send(t)}function _e(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ve,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`rds`,`parameters`,t.dbParameterGroupName]}),r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ve(e){let t=new M({DBParameterGroupName:e.dbParameterGroupName,Parameters:e.parameters.map(ye)});return await m().send(t)}function ye(e){return{ParameterName:e.name,ParameterValue:e.value,ApplyMethod:e.applyMethod}}function be(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xe,onSuccess:()=>{r.invalidateQueries({queryKey:U})}},e[0]=r,e[1]=i),n(i)}async function xe(e){let t=new O({DBParameterGroupName:e});return await m().send(t)}function Se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ce,onSuccess:()=>{r.invalidateQueries({queryKey:[`rds`,`tags`]})}},e[0]=r,e[1]=i),n(i)}async function Ce(e){let t=new Set(e.tags.map(Te)),n=e.initialKeys.filter(e=>!t.has(e)),r=m();e.tags.length>0&&await r.send(new S({ResourceName:e.resourceName,Tags:e.tags.map(we)})),n.length>0&&await r.send(new P({ResourceName:e.resourceName,TagKeys:n}))}function we(e){return{Key:e.key,Value:e.value}}function Te(e){return e.key}export{X as a,pe as c,re as d,le as f,Se as h,de as i,J as l,te as m,he as n,be as o,Q as p,ae as r,se as s,K as t,_e as u}; \ No newline at end of file +import{t as e}from"./compiler-runtime-D_vZfn79.js";import{A as t}from"./removable-Dwr9otKB.js";import{t as n}from"./useMutation-6rdxVQpi.js";import{B as r,G as i,H as a,K as o,U as s,V as c,W as l,at as u,ct as d,it as f,lt as p,ot as ee,p as m,q as h,st as g,ut as _,z as v}from"./awsClient-Cqp6x3OY.js";import{D as y,E as b,T as x}from"./rds-DIuGt87z.js";var S=class extends y(x,b,`AddTagsToResource`,v){},C=class extends y(x,b,`CreateDBInstance`,r){},w=class extends y(x,b,`CreateDBParameterGroup`,c){},T=class extends y(x,b,`CreateDBSnapshot`,a){},E=class extends y(x,b,`CreateDBSubnetGroup`,s){},D=class extends y(x,b,`DeleteDBInstance`,l){},O=class extends y(x,b,`DeleteDBParameterGroup`,i){},k=class extends y(x,b,`DeleteDBSnapshot`,o){},A=class extends y(x,b,`DeleteDBSubnetGroup`,h){},j=class extends y(x,b,`ModifyDBInstance`,f){},M=class extends y(x,b,`ModifyDBParameterGroup`,u){},N=class extends y(x,b,`RebootDBInstance`,ee){},P=class extends y(x,b,`RemoveTagsFromResource`,g){},F=class extends y(x,b,`RestoreDBInstanceFromDBSnapshot`,d){},I=class extends y(x,b,`StartDBInstance`,p){},L=class extends y(x,b,`StopDBInstance`,_){},R=e(),z=[`rds`,`dbInstances`],B=[`rds`,`dbSnapshots`],V=[`rds`,`automatedBackups`],H=[`rds`,`subnetGroups`],U=[`rds`,`parameterGroups`];function W(e){return e.length>0?e:void 0}function G(e){let t=e.filter(e=>e.key.length>0).map(e=>({Key:e.key,Value:e.value}));return t.length>0?t:void 0}function K(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:q,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function q(e){let t=new C({DBInstanceIdentifier:e.dbInstanceIdentifier,Engine:e.engine,EngineVersion:W(e.engineVersion),DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,MasterUsername:e.masterUsername,MasterUserPassword:e.masterUserPassword,DBName:W(e.dbName),Port:e.port===``?void 0:Number(e.port),DBSubnetGroupName:W(e.dbSubnetGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds.length>0?e.vpcSecurityGroupIds:void 0,DBParameterGroupName:W(e.dbParameterGroupName),DeletionProtection:e.deletionProtection,BackupRetentionPeriod:e.backupRetentionPeriod,PreferredBackupWindow:W(e.preferredBackupWindow),PreferredMaintenanceWindow:W(e.preferredMaintenanceWindow),Tags:G(e.tags)});return await m().send(t)}function J(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Y,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z}),r.invalidateQueries({queryKey:[...V,t.dbInstanceIdentifier]}),r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function Y(e){let t=new j({DBInstanceIdentifier:e.dbInstanceIdentifier,DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,DBParameterGroupName:W(e.dbParameterGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds,DeletionProtection:e.deletionProtection,BackupRetentionPeriod:e.backupRetentionPeriod,PreferredBackupWindow:W(e.preferredBackupWindow),PreferredMaintenanceWindow:W(e.preferredMaintenanceWindow),MasterUserPassword:W(e.masterUserPassword),ApplyImmediately:e.applyImmediately});return await m().send(t)}function X(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Z,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:z}),r.invalidateQueries({queryKey:[...V,t.dbInstanceIdentifier]}),r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function Z(e){let t=new D({DBInstanceIdentifier:e.dbInstanceIdentifier,SkipFinalSnapshot:e.skipFinalSnapshot,FinalDBSnapshotIdentifier:e.skipFinalSnapshot?void 0:e.finalSnapshotIdentifier});return await m().send(t)}function Q(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:$,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function $(e){let t=new I({DBInstanceIdentifier:e});return await m().send(t)}function te(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ne,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ne(e){let t=new L({DBInstanceIdentifier:e});return await m().send(t)}function re(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ie,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ie(e){let t=new N({DBInstanceIdentifier:e});return await m().send(t)}function ae(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:oe,onSuccess:()=>{r.invalidateQueries({queryKey:B}),r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function oe(e){let t=new T({DBSnapshotIdentifier:e.dbSnapshotIdentifier,DBInstanceIdentifier:e.dbInstanceIdentifier,Tags:G(e.tags)});return await m().send(t)}function se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ce,onSuccess:()=>{r.invalidateQueries({queryKey:B})}},e[0]=r,e[1]=i),n(i)}async function ce(e){let t=new k({DBSnapshotIdentifier:e});return await m().send(t)}function le(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ue,onSuccess:()=>{r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ue(e){let t=new F({DBInstanceIdentifier:e.dbInstanceIdentifier,DBSnapshotIdentifier:e.dbSnapshotIdentifier,DBInstanceClass:e.dbInstanceClass,AllocatedStorage:e.allocatedStorage,Port:e.port===``?void 0:Number(e.port),DBSubnetGroupName:W(e.dbSubnetGroupName),VpcSecurityGroupIds:e.vpcSecurityGroupIds.length>0?e.vpcSecurityGroupIds:void 0,DBParameterGroupName:W(e.dbParameterGroupName),DeletionProtection:e.deletionProtection,Tags:G(e.tags)});return await m().send(t)}function de(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:fe,onSuccess:()=>{r.invalidateQueries({queryKey:H})}},e[0]=r,e[1]=i),n(i)}async function fe(e){let t=new E({DBSubnetGroupName:e.dbSubnetGroupName,DBSubnetGroupDescription:e.dbSubnetGroupDescription,SubnetIds:e.subnetIds,Tags:G(e.tags)});return await m().send(t)}function pe(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:H})}},e[0]=r,e[1]=i),n(i)}async function me(e){let t=new A({DBSubnetGroupName:e});return await m().send(t)}function he(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ge,onSuccess:()=>{r.invalidateQueries({queryKey:U})}},e[0]=r,e[1]=i),n(i)}async function ge(e){let t=new w({DBParameterGroupName:e.dbParameterGroupName,DBParameterGroupFamily:e.dbParameterGroupFamily,Description:e.description,Tags:G(e.tags)});return await m().send(t)}function _e(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:ve,onSuccess:(e,t)=>{r.invalidateQueries({queryKey:[`rds`,`parameters`,t.dbParameterGroupName]}),r.invalidateQueries({queryKey:z})}},e[0]=r,e[1]=i),n(i)}async function ve(e){let t=new M({DBParameterGroupName:e.dbParameterGroupName,Parameters:e.parameters.map(ye)});return await m().send(t)}function ye(e){return{ParameterName:e.name,ParameterValue:e.value,ApplyMethod:e.applyMethod}}function be(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:xe,onSuccess:()=>{r.invalidateQueries({queryKey:U})}},e[0]=r,e[1]=i),n(i)}async function xe(e){let t=new O({DBParameterGroupName:e});return await m().send(t)}function Se(){let e=(0,R.c)(2),r=t(),i;return e[0]===r?i=e[1]:(i={mutationFn:Ce,onSuccess:()=>{r.invalidateQueries({queryKey:[`rds`,`tags`]})}},e[0]=r,e[1]=i),n(i)}async function Ce(e){let t=new Set(e.tags.map(Te)),n=e.initialKeys.filter(e=>!t.has(e)),r=m();e.tags.length>0&&await r.send(new S({ResourceName:e.resourceName,Tags:e.tags.map(we)})),n.length>0&&await r.send(new P({ResourceName:e.resourceName,TagKeys:n}))}function we(e){return{Key:e.key,Value:e.value}}function Te(e){return e.key}export{X as a,pe as c,re as d,le as f,Se as h,de as i,J as l,te as m,he as n,be as o,Q as p,ae as r,se as s,K as t,_e as u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BtEPTeBR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BWwoVrYv.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BtEPTeBR.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BWwoVrYv.js index ff632fb45..fa75b6762 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BtEPTeBR.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-delete-dialog-BWwoVrYv.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./delete-confirmation-dialog-SdDN4LiF.js";var r=t(),i=e();function a(e){let t=(0,r.c)(22),{open:a,onOpenChange:o,identifier:s,title:c,description:l,mutation:u,onDeleted:d}=e,f;t[0]!==u||t[1]!==o?(f=function(e){e||u.reset(),o(e)},t[0]=u,t[1]=o,t[2]=f):f=t[2];let p=f,m;t[3]!==p||t[4]!==s||t[5]!==u||t[6]!==d?(m=async function(){try{await u.mutateAsync(s),p(!1),d?.()}catch{}},t[3]=p,t[4]=s,t[5]=u,t[6]=d,t[7]=m):m=t[7];let h=m,g;t[8]===u.error?g=t[9]:(g=u.error&&(0,i.jsx)(`span`,{className:`mt-2 block text-destructive`,children:u.error.message}),t[8]=u.error,t[9]=g);let _;t[10]!==l||t[11]!==g?(_=(0,i.jsxs)(i.Fragment,{children:[l,g]}),t[10]=l,t[11]=g,t[12]=_):_=t[12];let v;t[13]===h?v=t[14]:(v=()=>{h()},t[13]=h,t[14]=v);let y;return t[15]!==p||t[16]!==u.isPending||t[17]!==a||t[18]!==_||t[19]!==v||t[20]!==c?(y=(0,i.jsx)(n,{description:_,isPending:u.isPending,onConfirm:v,onOpenChange:p,open:a,title:c}),t[15]=p,t[16]=u.isPending,t[17]=a,t[18]=_,t[19]=v,t[20]=c,t[21]=y):y=t[21],y}export{a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./delete-confirmation-dialog-BYHqotoI.js";var r=t(),i=e();function a(e){let t=(0,r.c)(22),{open:a,onOpenChange:o,identifier:s,title:c,description:l,mutation:u,onDeleted:d}=e,f;t[0]!==u||t[1]!==o?(f=function(e){e||u.reset(),o(e)},t[0]=u,t[1]=o,t[2]=f):f=t[2];let p=f,m;t[3]!==p||t[4]!==s||t[5]!==u||t[6]!==d?(m=async function(){try{await u.mutateAsync(s),p(!1),d?.()}catch{}},t[3]=p,t[4]=s,t[5]=u,t[6]=d,t[7]=m):m=t[7];let h=m,g;t[8]===u.error?g=t[9]:(g=u.error&&(0,i.jsx)(`span`,{className:`mt-2 block text-destructive`,children:u.error.message}),t[8]=u.error,t[9]=g);let _;t[10]!==l||t[11]!==g?(_=(0,i.jsxs)(i.Fragment,{children:[l,g]}),t[10]=l,t[11]=g,t[12]=_):_=t[12];let v;t[13]===h?v=t[14]:(v=()=>{h()},t[13]=h,t[14]=v);let y;return t[15]!==p||t[16]!==u.isPending||t[17]!==a||t[18]!==_||t[19]!==v||t[20]!==c?(y=(0,i.jsx)(n,{description:_,isPending:u.isPending,onConfirm:v,onOpenChange:p,open:a,title:c}),t[15]=p,t[16]=u.isPending,t[17]=a,t[18]=_,t[19]=v,t[20]=c,t[21]=y):y=t[21],y}export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-Di-44bfP.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-BwYPSAd5.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-Di-44bfP.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-BwYPSAd5.js index abf9943f6..e16c49a35 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-Di-44bfP.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-events-panel-BwYPSAd5.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{in as n}from"./cluster-config-xw_Q7X1e.js";var r=t(),i=e();function a(e){let t=(0,r.c)(6),{events:n}=e;if(n.length===0){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,i.jsx)(`p`,{className:`text-muted-foreground`,children:`No events in the last 14 days.`}),t[0]=e):e=t[0],e}let a;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,i.jsx)(`thead`,{children:(0,i.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Time`}),(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Categories`}),(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Message`})]})}),t[1]=a):a=t[1];let c;t[2]===n?c=t[3]:(c=n.toSorted(s).map(o),t[2]=n,t[3]=c);let l;return t[4]===c?l=t[5]:(l=(0,i.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,i.jsxs)(`table`,{className:`w-full text-sm`,children:[a,(0,i.jsx)(`tbody`,{children:c})]})}),t[4]=c,t[5]=l),l}function o(e){return(0,i.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,i.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:n(e.Date)}),(0,i.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.EventCategories?.join(`, `)}),(0,i.jsx)(`td`,{className:`px-4 py-2`,children:e.Message})]},`${e.Date?.toISOString()}-${e.Message}`)}function s(e,t){return(t.Date?.getTime()??0)-(e.Date?.getTime()??0)}export{a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{an as n}from"./cluster-config-DkOiY8HH.js";var r=t(),i=e();function a(e){let t=(0,r.c)(6),{events:n}=e;if(n.length===0){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,i.jsx)(`p`,{className:`text-muted-foreground`,children:`No events in the last 14 days.`}),t[0]=e):e=t[0],e}let a;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,i.jsx)(`thead`,{children:(0,i.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Time`}),(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Categories`}),(0,i.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Message`})]})}),t[1]=a):a=t[1];let c;t[2]===n?c=t[3]:(c=n.toSorted(s).map(o),t[2]=n,t[3]=c);let l;return t[4]===c?l=t[5]:(l=(0,i.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,i.jsxs)(`table`,{className:`w-full text-sm`,children:[a,(0,i.jsx)(`tbody`,{children:c})]})}),t[4]=c,t[5]=l),l}function o(e){return(0,i.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,i.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:n(e.Date)}),(0,i.jsx)(`td`,{className:`px-4 py-2 text-xs`,children:e.EventCategories?.join(`, `)}),(0,i.jsx)(`td`,{className:`px-4 py-2`,children:e.Message})]},`${e.Date?.toISOString()}-${e.Message}`)}function s(e,t){return(t.Date?.getTime()??0)-(e.Date?.getTime()??0)}export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-CD2X7nDN.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-cQPAmoTz.js similarity index 78% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-CD2X7nDN.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-cQPAmoTz.js index 3cf90d81d..4c3f381e1 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-CD2X7nDN.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/rds-tags-tab-cQPAmoTz.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{h as r}from"./rds-BkKLEWPo.js";import{g as i}from"./rds-CyiqRExv.js";import{t as a}from"./tags-editor-BxxtIXTE.js";var o=t(),s=e();function c(e){let t=(0,o.c)(14),{arn:c}=e,d;t[0]===c?d=t[1]:(d=i(c),t[0]=c,t[1]=d);let{data:f}=n(d),p=r(),m;t[2]===f?.TagList?m=t[3]:(m=f?.TagList??[],t[2]=f?.TagList,t[3]=m);let h=m,g;t[4]!==c||t[5]!==h||t[6]!==p?(g=e=>{p.mutate({resourceName:c,tags:e,initialKeys:h.map(u).filter(l)})},t[4]=c,t[5]=h,t[6]=p,t[7]=g):g=t[7];let _;return t[8]!==g||t[9]!==h||t[10]!==p.error||t[11]!==p.isPending||t[12]!==p.isSuccess?(_=(0,s.jsx)(a,{error:p.error,isPending:p.isPending,isSuccess:p.isSuccess,onSubmit:g,tags:h}),t[8]=g,t[9]=h,t[10]=p.error,t[11]=p.isPending,t[12]=p.isSuccess,t[13]=_):_=t[13],_}function l(e){return e.length>0}function u(e){return e.Key??``}export{c as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{h as r}from"./rds-DbPUva_R.js";import{g as i}from"./rds-Ca8CaJkU.js";import{t as a}from"./tags-editor-1LzJEWry.js";var o=t(),s=e();function c(e){let t=(0,o.c)(14),{arn:c}=e,d;t[0]===c?d=t[1]:(d=i(c),t[0]=c,t[1]=d);let{data:f}=n(d),p=r(),m;t[2]===f?.TagList?m=t[3]:(m=f?.TagList??[],t[2]=f?.TagList,t[3]=m);let h=m,g;t[4]!==c||t[5]!==h||t[6]!==p?(g=e=>{p.mutate({resourceName:c,tags:e,initialKeys:h.map(u).filter(l)})},t[4]=c,t[5]=h,t[6]=p,t[7]=g):g=t[7];let _;return t[8]!==g||t[9]!==h||t[10]!==p.error||t[11]!==p.isPending||t[12]!==p.isSuccess?(_=(0,s.jsx)(a,{error:p.error,isPending:p.isPending,isSuccess:p.isSuccess,onSubmit:g,tags:h}),t[8]=g,t[9]=h,t[10]=p.error,t[11]=p.isPending,t[12]=p.isSuccess,t[13]=_):_=t[13],_}function l(e){return e.length>0}function u(e){return e.Key??``}export{c as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-9gqzIyeT.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-9gqzIyeT.js deleted file mode 100644 index 0f49092dc..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-9gqzIyeT.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/register-task-definition-CIctnTBf.js","assets/compiler-runtime-D_vZfn79.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-6kdUb_DH.js","assets/ecs-8RzYyUs4.js","assets/removable-Dwr9otKB.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/signed-fetch-B-FFW93q.js","assets/ecs-gqt7DXoF.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ecs-KDGpZ8Lc.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{g as n,lt as r,m as i}from"./cluster-config-xw_Q7X1e.js";var a=()=>r(()=>import(`./register-task-definition-CIctnTBf.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),o=i({cluster:n().catch(``)}),s=e(`/_auth/ecs/(clusters)/register-task-definition`)({validateSearch:o,head:()=>({meta:[{title:`Register Task Definition | ECS | Mulga`}]}),component:t(a,`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-CIctnTBf.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DLlp7cX8.js similarity index 92% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-CIctnTBf.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DLlp7cX8.js index 8660d7eea..7f3cae350 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-CIctnTBf.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DLlp7cX8.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{t as te}from"./back-link-CjKy1JE5.js";import{c as n,i as r,n as i,s as a,t as o}from"./select-B01jpDaX.js";import{t as ne}from"./plus-BodhJT2v.js";import{t as re}from"./trash-DVab4pEz.js";import{t as ie}from"./button-BarTr35m.js";import{t as s}from"./input-6kdUb_DH.js";import{s as ae}from"./ecs-8RzYyUs4.js";import{t as c}from"./register-task-definition-9gqzIyeT.js";import{t as oe}from"./page-heading-vksh_67w.js";import{i as se,n as ce,r as le,t as ue}from"./zod-DF_n2ejy.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-BUM37An0.js";import{r as pe,s as l,t as u}from"./field-c7GHI5st.js";import{r as me,t as he}from"./ecs-KDGpZ8Lc.js";var ge=t(),d=e();function f(e){let t=(0,ge.c)(129),{cluster:n}=e,r=ee(),i=ae(),a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=ue(me),t[0]=a):a=t[0];let o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:a,defaultValues:{family:``,networkMode:`bridge`,cpu:``,memory:``,containerName:``,image:``,containerCpu:``,containerMemory:``,containerGpuCount:0,essential:!0,portMappings:[]}},t[1]=o):o=t[1];let{control:c,handleSubmit:he,register:f,formState:ye}=se(o),{errors:p,isSubmitting:be}=ye,xe;t[2]===c?xe=t[3]:(xe={control:c,name:`portMappings`},t[2]=c,t[3]=xe);let m=le(xe),Se;t[4]!==n||t[5]!==r?(Se=function(){r(n?{to:`/ecs/list-clusters/$clusterName`,params:{clusterName:n}}:{to:`/ecs/list-clusters`})},t[4]=n,t[5]=r,t[6]=Se):Se=t[6];let h=Se,Ce;t[7]!==h||t[8]!==i?(Ce=async function(e){await i.mutateAsync(e),h()},t[7]=h,t[8]=i,t[9]=Ce):Ce=t[9];let we=Ce,Te,Ee;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,d.jsx)(te,{to:`/ecs/list-clusters`,children:`Clusters`}),Ee=(0,d.jsx)(oe,{subtitle:`Register a single-container task definition`,title:`Register Task Definition`}),t[10]=Te,t[11]=Ee):(Te=t[10],Ee=t[11]);let g;t[12]!==i.error||t[13]!==i.isError?(g=i.isError&&(0,d.jsx)(de,{error:i.error instanceof Error?i.error:void 0,msg:`Failed to register task definition.`}),t[12]=i.error,t[13]=i.isError,t[14]=g):g=t[14];let _;t[15]!==he||t[16]!==we?(_=he(we),t[15]=he,t[16]=we,t[17]=_):_=t[17];let De;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(De=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`family`,children:`Family`})}),t[18]=De):De=t[18];let v;t[19]===f?v=t[20]:(v=f(`family`),t[19]=f,t[20]=v);let y;t[21]===v?y=t[22]:(y=(0,d.jsx)(s,{id:`family`,placeholder:`my-app`,...v}),t[21]=v,t[22]=y);let b;t[23]===p.family?b=t[24]:(b=(0,d.jsx)(pe,{errors:[p.family]}),t[23]=p.family,t[24]=b);let x;t[25]!==y||t[26]!==b?(x=(0,d.jsxs)(u,{children:[De,y,b]}),t[25]=y,t[26]=b,t[27]=x):x=t[27];let Oe;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`networkMode`,children:`Network mode`})}),t[28]=Oe):Oe=t[28];let S;t[29]===c?S=t[30]:(S=(0,d.jsxs)(u,{children:[Oe,(0,d.jsx)(ce,{control:c,name:`networkMode`,render:ve})]}),t[29]=c,t[30]=S);let ke;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`cpu`,children:`Task CPU (units)`})}),t[31]=ke):ke=t[31];let C;t[32]===f?C=t[33]:(C=f(`cpu`),t[32]=f,t[33]=C);let w;t[34]===C?w=t[35]:(w=(0,d.jsxs)(u,{children:[ke,(0,d.jsx)(s,{id:`cpu`,placeholder:`optional`,...C})]}),t[34]=C,t[35]=w);let Ae;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(Ae=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`memory`,children:`Task memory (MiB)`})}),t[36]=Ae):Ae=t[36];let T;t[37]===f?T=t[38]:(T=f(`memory`),t[37]=f,t[38]=T);let E;t[39]===T?E=t[40]:(E=(0,d.jsxs)(u,{children:[Ae,(0,d.jsx)(s,{id:`memory`,placeholder:`optional`,...T})]}),t[39]=T,t[40]=E);let D;t[41]!==w||t[42]!==E?(D=(0,d.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[w,E]}),t[41]=w,t[42]=E,t[43]=D):D=t[43];let je;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,d.jsx)(`h2`,{className:`mb-4 font-semibold`,children:`Container`}),t[44]=je):je=t[44];let Me;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerName`,children:`Name`})}),t[45]=Me):Me=t[45];let O;t[46]===f?O=t[47]:(O=f(`containerName`),t[46]=f,t[47]=O);let k;t[48]===O?k=t[49]:(k=(0,d.jsx)(s,{id:`containerName`,placeholder:`app`,...O}),t[48]=O,t[49]=k);let A;t[50]===p.containerName?A=t[51]:(A=(0,d.jsx)(pe,{errors:[p.containerName]}),t[50]=p.containerName,t[51]=A);let j;t[52]!==k||t[53]!==A?(j=(0,d.jsxs)(u,{children:[Me,k,A]}),t[52]=k,t[53]=A,t[54]=j):j=t[54];let Ne;t[55]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`image`,children:`Image`})}),t[55]=Ne):Ne=t[55];let Pe;t[56]===f?Pe=t[57]:(Pe=f(`image`),t[56]=f,t[57]=Pe);let M;t[58]===Pe?M=t[59]:(M=(0,d.jsx)(s,{id:`image`,placeholder:`public.ecr.aws/nginx/nginx:latest`,...Pe}),t[58]=Pe,t[59]=M);let N;t[60]===p.image?N=t[61]:(N=(0,d.jsx)(pe,{errors:[p.image]}),t[60]=p.image,t[61]=N);let P;t[62]!==M||t[63]!==N?(P=(0,d.jsxs)(u,{children:[Ne,M,N]}),t[62]=M,t[63]=N,t[64]=P):P=t[64];let Fe;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(Fe=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerCpu`,children:`CPU (units)`})}),t[65]=Fe):Fe=t[65];let F;t[66]===f?F=t[67]:(F=f(`containerCpu`),t[66]=f,t[67]=F);let I;t[68]===F?I=t[69]:(I=(0,d.jsxs)(u,{children:[Fe,(0,d.jsx)(s,{id:`containerCpu`,placeholder:`optional`,...F})]}),t[68]=F,t[69]=I);let Ie;t[70]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerMemory`,children:`Memory (MiB)`})}),t[70]=Ie):Ie=t[70];let L;t[71]===f?L=t[72]:(L=f(`containerMemory`),t[71]=f,t[72]=L);let R;t[73]===L?R=t[74]:(R=(0,d.jsxs)(u,{children:[Ie,(0,d.jsx)(s,{id:`containerMemory`,placeholder:`optional`,...L})]}),t[73]=L,t[74]=R);let Le;t[75]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerGpuCount`,children:`GPU count`})}),t[75]=Le):Le=t[75];let z;t[76]===f?z=t[77]:(z=f(`containerGpuCount`,{valueAsNumber:!0}),t[76]=f,t[77]=z);let B;t[78]===z?B=t[79]:(B=(0,d.jsx)(s,{id:`containerGpuCount`,min:0,placeholder:`0`,type:`number`,...z}),t[78]=z,t[79]=B);let V;t[80]===p.containerGpuCount?V=t[81]:(V=(0,d.jsx)(pe,{errors:[p.containerGpuCount]}),t[80]=p.containerGpuCount,t[81]=V);let H;t[82]!==B||t[83]!==V?(H=(0,d.jsxs)(u,{children:[Le,B,V]}),t[82]=B,t[83]=V,t[84]=H):H=t[84];let U;t[85]!==I||t[86]!==R||t[87]!==H?(U=(0,d.jsxs)(`div`,{className:`grid grid-cols-3 gap-4`,children:[I,R,H]}),t[85]=I,t[86]=R,t[87]=H,t[88]=U):U=t[88];let W;t[89]===f?W=t[90]:(W=f(`essential`),t[89]=f,t[90]=W);let G;t[91]===W?G=t[92]:(G=(0,d.jsx)(`input`,{type:`checkbox`,...W}),t[91]=W,t[92]=G);let Re;t[93]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,d.jsx)(`span`,{children:`Essential`}),t[93]=Re):Re=t[93];let K;t[94]===G?K=t[95]:(K=(0,d.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[G,Re]}),t[94]=G,t[95]=K);let ze;t[96]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,d.jsx)(`span`,{className:`text-sm font-medium`,children:`Port mappings`}),t[96]=ze):ze=t[96];let q;t[97]===m?q=t[98]:(q=()=>{m.append({containerPort:80,protocol:`tcp`})},t[97]=m,t[98]=q);let Be;t[99]===Symbol.for(`react.memo_cache_sentinel`)?(Be=(0,d.jsx)(ne,{className:`size-4`}),t[99]=Be):Be=t[99];let J;t[100]===q?J=t[101]:(J=(0,d.jsxs)(`div`,{className:`flex items-center justify-between`,children:[ze,(0,d.jsxs)(ie,{onClick:q,size:`sm`,type:`button`,variant:`outline`,children:[Be,`Add port`]})]}),t[100]=q,t[101]=J);let Y;t[102]!==c||t[103]!==f||t[104]!==m?(Y=m.fields.map((e,t)=>(0,d.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,d.jsxs)(u,{className:`flex-1`,children:[(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`port-${t}`,children:`Container port`})}),(0,d.jsx)(s,{id:`port-${t}`,type:`number`,...f(`portMappings.${t}.containerPort`,{valueAsNumber:!0})})]}),(0,d.jsx)(ce,{control:c,name:`portMappings.${t}.protocol`,render:_e}),(0,d.jsx)(ie,{"aria-label":`Remove port mapping`,onClick:()=>{m.remove(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,d.jsx)(re,{className:`size-4`})})]},e.id)),t[102]=c,t[103]=f,t[104]=m,t[105]=Y):Y=t[105];let X;t[106]!==J||t[107]!==Y?(X=(0,d.jsxs)(`div`,{className:`space-y-2`,children:[J,Y]}),t[106]=J,t[107]=Y,t[108]=X):X=t[108];let Z;t[109]!==j||t[110]!==P||t[111]!==U||t[112]!==K||t[113]!==X?(Z=(0,d.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[je,(0,d.jsxs)(`div`,{className:`space-y-4`,children:[j,P,U,K,X]})]}),t[109]=j,t[110]=P,t[111]=U,t[112]=K,t[113]=X,t[114]=Z):Z=t[114];let Q;t[115]!==h||t[116]!==be||t[117]!==i.isPending?(Q=(0,d.jsx)(fe,{isPending:i.isPending,isSubmitting:be,onCancel:h,pendingLabel:`Registering…`,submitLabel:`Register Task Definition`}),t[115]=h,t[116]=be,t[117]=i.isPending,t[118]=Q):Q=t[118];let $;t[119]!==_||t[120]!==x||t[121]!==S||t[122]!==D||t[123]!==Z||t[124]!==Q?($=(0,d.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:_,children:[x,S,D,Z,Q]}),t[119]=_,t[120]=x,t[121]=S,t[122]=D,t[123]=Z,t[124]=Q,t[125]=$):$=t[125];let Ve;return t[126]!==$||t[127]!==g?(Ve=(0,d.jsxs)(d.Fragment,{children:[Te,Ee,g,$]}),t[126]=$,t[127]=g,t[128]=Ve):Ve=t[128],Ve}function _e(e){let{field:t}=e;return(0,d.jsxs)(o,{onValueChange:t.onChange,value:t.value,children:[(0,d.jsx)(a,{className:`w-28`,children:(0,d.jsx)(n,{})}),(0,d.jsxs)(i,{children:[(0,d.jsx)(r,{value:`tcp`,children:`tcp`}),(0,d.jsx)(r,{value:`udp`,children:`udp`})]})]})}function ve(e){let{field:t}=e;return(0,d.jsxs)(o,{onValueChange:t.onChange,value:t.value,children:[(0,d.jsx)(a,{className:`w-full`,id:`networkMode`,children:(0,d.jsx)(n,{})}),(0,d.jsx)(i,{children:he.map(ye)})]})}function ye(e){return(0,d.jsx)(r,{value:e,children:e},e)}function p(){let e=(0,ge.c)(2),{cluster:t}=c.useSearch(),ee;return e[0]===t?ee=e[1]:(ee=(0,d.jsx)(f,{cluster:t}),e[0]=t,e[1]=ee),ee}export{p as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{t as te}from"./back-link-wsXUoJ12.js";import{c as n,i as r,n as i,s as a,t as o}from"./select-Cn66OoPn.js";import{t as ne}from"./plus-BodhJT2v.js";import{t as re}from"./trash-DVab4pEz.js";import{t as ie}from"./button-qf9lLJ2x.js";import{t as s}from"./input-D3aUBtS6.js";import{s as ae}from"./ecs-Bz1Yh-WL.js";import{t as c}from"./register-task-definition-DOwYZPxR.js";import{t as oe}from"./page-heading-vksh_67w.js";import{i as se,n as ce,r as le,t as ue}from"./zod-A4qtKH_p.js";import{t as de}from"./error-banner-DeOeVBKS.js";import{t as fe}from"./form-actions-DXvy9CQI.js";import{r as pe,s as l,t as u}from"./field-CS-ql6du.js";import{r as me,t as he}from"./ecs-BRK1HDnD.js";var ge=t(),d=e();function f(e){let t=(0,ge.c)(129),{cluster:n}=e,r=ee(),i=ae(),a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=ue(me),t[0]=a):a=t[0];let o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o={resolver:a,defaultValues:{family:``,networkMode:`bridge`,cpu:``,memory:``,containerName:``,image:``,containerCpu:``,containerMemory:``,containerGpuCount:0,essential:!0,portMappings:[]}},t[1]=o):o=t[1];let{control:c,handleSubmit:he,register:f,formState:ye}=se(o),{errors:p,isSubmitting:be}=ye,xe;t[2]===c?xe=t[3]:(xe={control:c,name:`portMappings`},t[2]=c,t[3]=xe);let m=le(xe),Se;t[4]!==n||t[5]!==r?(Se=function(){r(n?{to:`/ecs/list-clusters/$clusterName`,params:{clusterName:n}}:{to:`/ecs/list-clusters`})},t[4]=n,t[5]=r,t[6]=Se):Se=t[6];let h=Se,Ce;t[7]!==h||t[8]!==i?(Ce=async function(e){await i.mutateAsync(e),h()},t[7]=h,t[8]=i,t[9]=Ce):Ce=t[9];let we=Ce,Te,Ee;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,d.jsx)(te,{to:`/ecs/list-clusters`,children:`Clusters`}),Ee=(0,d.jsx)(oe,{subtitle:`Register a single-container task definition`,title:`Register Task Definition`}),t[10]=Te,t[11]=Ee):(Te=t[10],Ee=t[11]);let g;t[12]!==i.error||t[13]!==i.isError?(g=i.isError&&(0,d.jsx)(de,{error:i.error instanceof Error?i.error:void 0,msg:`Failed to register task definition.`}),t[12]=i.error,t[13]=i.isError,t[14]=g):g=t[14];let _;t[15]!==he||t[16]!==we?(_=he(we),t[15]=he,t[16]=we,t[17]=_):_=t[17];let De;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(De=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`family`,children:`Family`})}),t[18]=De):De=t[18];let v;t[19]===f?v=t[20]:(v=f(`family`),t[19]=f,t[20]=v);let y;t[21]===v?y=t[22]:(y=(0,d.jsx)(s,{id:`family`,placeholder:`my-app`,...v}),t[21]=v,t[22]=y);let b;t[23]===p.family?b=t[24]:(b=(0,d.jsx)(pe,{errors:[p.family]}),t[23]=p.family,t[24]=b);let x;t[25]!==y||t[26]!==b?(x=(0,d.jsxs)(u,{children:[De,y,b]}),t[25]=y,t[26]=b,t[27]=x):x=t[27];let Oe;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`networkMode`,children:`Network mode`})}),t[28]=Oe):Oe=t[28];let S;t[29]===c?S=t[30]:(S=(0,d.jsxs)(u,{children:[Oe,(0,d.jsx)(ce,{control:c,name:`networkMode`,render:ve})]}),t[29]=c,t[30]=S);let ke;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(ke=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`cpu`,children:`Task CPU (units)`})}),t[31]=ke):ke=t[31];let C;t[32]===f?C=t[33]:(C=f(`cpu`),t[32]=f,t[33]=C);let w;t[34]===C?w=t[35]:(w=(0,d.jsxs)(u,{children:[ke,(0,d.jsx)(s,{id:`cpu`,placeholder:`optional`,...C})]}),t[34]=C,t[35]=w);let Ae;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(Ae=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`memory`,children:`Task memory (MiB)`})}),t[36]=Ae):Ae=t[36];let T;t[37]===f?T=t[38]:(T=f(`memory`),t[37]=f,t[38]=T);let E;t[39]===T?E=t[40]:(E=(0,d.jsxs)(u,{children:[Ae,(0,d.jsx)(s,{id:`memory`,placeholder:`optional`,...T})]}),t[39]=T,t[40]=E);let D;t[41]!==w||t[42]!==E?(D=(0,d.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[w,E]}),t[41]=w,t[42]=E,t[43]=D):D=t[43];let je;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(je=(0,d.jsx)(`h2`,{className:`mb-4 font-semibold`,children:`Container`}),t[44]=je):je=t[44];let Me;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(Me=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerName`,children:`Name`})}),t[45]=Me):Me=t[45];let O;t[46]===f?O=t[47]:(O=f(`containerName`),t[46]=f,t[47]=O);let k;t[48]===O?k=t[49]:(k=(0,d.jsx)(s,{id:`containerName`,placeholder:`app`,...O}),t[48]=O,t[49]=k);let A;t[50]===p.containerName?A=t[51]:(A=(0,d.jsx)(pe,{errors:[p.containerName]}),t[50]=p.containerName,t[51]=A);let j;t[52]!==k||t[53]!==A?(j=(0,d.jsxs)(u,{children:[Me,k,A]}),t[52]=k,t[53]=A,t[54]=j):j=t[54];let Ne;t[55]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`image`,children:`Image`})}),t[55]=Ne):Ne=t[55];let Pe;t[56]===f?Pe=t[57]:(Pe=f(`image`),t[56]=f,t[57]=Pe);let M;t[58]===Pe?M=t[59]:(M=(0,d.jsx)(s,{id:`image`,placeholder:`public.ecr.aws/nginx/nginx:latest`,...Pe}),t[58]=Pe,t[59]=M);let N;t[60]===p.image?N=t[61]:(N=(0,d.jsx)(pe,{errors:[p.image]}),t[60]=p.image,t[61]=N);let P;t[62]!==M||t[63]!==N?(P=(0,d.jsxs)(u,{children:[Ne,M,N]}),t[62]=M,t[63]=N,t[64]=P):P=t[64];let Fe;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(Fe=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerCpu`,children:`CPU (units)`})}),t[65]=Fe):Fe=t[65];let F;t[66]===f?F=t[67]:(F=f(`containerCpu`),t[66]=f,t[67]=F);let I;t[68]===F?I=t[69]:(I=(0,d.jsxs)(u,{children:[Fe,(0,d.jsx)(s,{id:`containerCpu`,placeholder:`optional`,...F})]}),t[68]=F,t[69]=I);let Ie;t[70]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerMemory`,children:`Memory (MiB)`})}),t[70]=Ie):Ie=t[70];let L;t[71]===f?L=t[72]:(L=f(`containerMemory`),t[71]=f,t[72]=L);let R;t[73]===L?R=t[74]:(R=(0,d.jsxs)(u,{children:[Ie,(0,d.jsx)(s,{id:`containerMemory`,placeholder:`optional`,...L})]}),t[73]=L,t[74]=R);let Le;t[75]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`containerGpuCount`,children:`GPU count`})}),t[75]=Le):Le=t[75];let z;t[76]===f?z=t[77]:(z=f(`containerGpuCount`,{valueAsNumber:!0}),t[76]=f,t[77]=z);let B;t[78]===z?B=t[79]:(B=(0,d.jsx)(s,{id:`containerGpuCount`,min:0,placeholder:`0`,type:`number`,...z}),t[78]=z,t[79]=B);let V;t[80]===p.containerGpuCount?V=t[81]:(V=(0,d.jsx)(pe,{errors:[p.containerGpuCount]}),t[80]=p.containerGpuCount,t[81]=V);let H;t[82]!==B||t[83]!==V?(H=(0,d.jsxs)(u,{children:[Le,B,V]}),t[82]=B,t[83]=V,t[84]=H):H=t[84];let U;t[85]!==I||t[86]!==R||t[87]!==H?(U=(0,d.jsxs)(`div`,{className:`grid grid-cols-3 gap-4`,children:[I,R,H]}),t[85]=I,t[86]=R,t[87]=H,t[88]=U):U=t[88];let W;t[89]===f?W=t[90]:(W=f(`essential`),t[89]=f,t[90]=W);let G;t[91]===W?G=t[92]:(G=(0,d.jsx)(`input`,{type:`checkbox`,...W}),t[91]=W,t[92]=G);let Re;t[93]===Symbol.for(`react.memo_cache_sentinel`)?(Re=(0,d.jsx)(`span`,{children:`Essential`}),t[93]=Re):Re=t[93];let K;t[94]===G?K=t[95]:(K=(0,d.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[G,Re]}),t[94]=G,t[95]=K);let ze;t[96]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,d.jsx)(`span`,{className:`text-sm font-medium`,children:`Port mappings`}),t[96]=ze):ze=t[96];let q;t[97]===m?q=t[98]:(q=()=>{m.append({containerPort:80,protocol:`tcp`})},t[97]=m,t[98]=q);let Be;t[99]===Symbol.for(`react.memo_cache_sentinel`)?(Be=(0,d.jsx)(ne,{className:`size-4`}),t[99]=Be):Be=t[99];let J;t[100]===q?J=t[101]:(J=(0,d.jsxs)(`div`,{className:`flex items-center justify-between`,children:[ze,(0,d.jsxs)(ie,{onClick:q,size:`sm`,type:`button`,variant:`outline`,children:[Be,`Add port`]})]}),t[100]=q,t[101]=J);let Y;t[102]!==c||t[103]!==f||t[104]!==m?(Y=m.fields.map((e,t)=>(0,d.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,d.jsxs)(u,{className:`flex-1`,children:[(0,d.jsx)(l,{children:(0,d.jsx)(`label`,{htmlFor:`port-${t}`,children:`Container port`})}),(0,d.jsx)(s,{id:`port-${t}`,type:`number`,...f(`portMappings.${t}.containerPort`,{valueAsNumber:!0})})]}),(0,d.jsx)(ce,{control:c,name:`portMappings.${t}.protocol`,render:_e}),(0,d.jsx)(ie,{"aria-label":`Remove port mapping`,onClick:()=>{m.remove(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,d.jsx)(re,{className:`size-4`})})]},e.id)),t[102]=c,t[103]=f,t[104]=m,t[105]=Y):Y=t[105];let X;t[106]!==J||t[107]!==Y?(X=(0,d.jsxs)(`div`,{className:`space-y-2`,children:[J,Y]}),t[106]=J,t[107]=Y,t[108]=X):X=t[108];let Z;t[109]!==j||t[110]!==P||t[111]!==U||t[112]!==K||t[113]!==X?(Z=(0,d.jsxs)(`div`,{className:`rounded-lg border bg-card p-4`,children:[je,(0,d.jsxs)(`div`,{className:`space-y-4`,children:[j,P,U,K,X]})]}),t[109]=j,t[110]=P,t[111]=U,t[112]=K,t[113]=X,t[114]=Z):Z=t[114];let Q;t[115]!==h||t[116]!==be||t[117]!==i.isPending?(Q=(0,d.jsx)(fe,{isPending:i.isPending,isSubmitting:be,onCancel:h,pendingLabel:`Registering…`,submitLabel:`Register Task Definition`}),t[115]=h,t[116]=be,t[117]=i.isPending,t[118]=Q):Q=t[118];let $;t[119]!==_||t[120]!==x||t[121]!==S||t[122]!==D||t[123]!==Z||t[124]!==Q?($=(0,d.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:_,children:[x,S,D,Z,Q]}),t[119]=_,t[120]=x,t[121]=S,t[122]=D,t[123]=Z,t[124]=Q,t[125]=$):$=t[125];let Ve;return t[126]!==$||t[127]!==g?(Ve=(0,d.jsxs)(d.Fragment,{children:[Te,Ee,g,$]}),t[126]=$,t[127]=g,t[128]=Ve):Ve=t[128],Ve}function _e(e){let{field:t}=e;return(0,d.jsxs)(o,{onValueChange:t.onChange,value:t.value,children:[(0,d.jsx)(a,{className:`w-28`,children:(0,d.jsx)(n,{})}),(0,d.jsxs)(i,{children:[(0,d.jsx)(r,{value:`tcp`,children:`tcp`}),(0,d.jsx)(r,{value:`udp`,children:`udp`})]})]})}function ve(e){let{field:t}=e;return(0,d.jsxs)(o,{onValueChange:t.onChange,value:t.value,children:[(0,d.jsx)(a,{className:`w-full`,id:`networkMode`,children:(0,d.jsx)(n,{})}),(0,d.jsx)(i,{children:he.map(ye)})]})}function ye(e){return(0,d.jsx)(r,{value:e,children:e},e)}function p(){let e=(0,ge.c)(2),{cluster:t}=c.useSearch(),ee;return e[0]===t?ee=e[1]:(ee=(0,d.jsx)(f,{cluster:t}),e[0]=t,e[1]=ee),ee}export{p as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DOwYZPxR.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DOwYZPxR.js new file mode 100644 index 000000000..408024201 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/register-task-definition-DOwYZPxR.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/register-task-definition-DLlp7cX8.js","assets/compiler-runtime-D_vZfn79.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/plus-BodhJT2v.js","assets/trash-DVab4pEz.js","assets/input-D3aUBtS6.js","assets/ecs-Bz1Yh-WL.js","assets/removable-Dwr9otKB.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/signed-fetch-C_pG4AOx.js","assets/ecs-BmKTMTV2.js","assets/queryOptions-Dfvzj6n2.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ecs-BRK1HDnD.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{_ as n,h as r,ut as i}from"./cluster-config-DkOiY8HH.js";var a=()=>i(()=>import(`./register-task-definition-DLlp7cX8.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41])),o=r({cluster:n().catch(``)}),s=e(`/_auth/ecs/(clusters)/register-task-definition`)({validateSearch:o,head:()=>({meta:[{title:`Register Task Definition | ECS | Mulga`}]}),component:t(a,`component`)});export{s as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DPFKZkGs.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-CAwLPdN1.js similarity index 73% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DPFKZkGs.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-CAwLPdN1.js index 19c92fad8..b9bf3a863 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DPFKZkGs.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-CAwLPdN1.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-Q4m9gh_H.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-D6VSR81X.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DtXjPAiX.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-MJhrpG5n.js similarity index 73% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DtXjPAiX.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-MJhrpG5n.js index 19c92fad8..b9bf3a863 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-DtXjPAiX.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-MJhrpG5n.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-Q4m9gh_H.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-D6VSR81X.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-n5jLl8qw.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-ri79I-mW.js similarity index 73% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-n5jLl8qw.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-ri79I-mW.js index 19c92fad8..b9bf3a863 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-n5jLl8qw.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/route-ri79I-mW.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-Q4m9gh_H.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./Match-D6VSR81X.js";var r=t(),i=e(),a=()=>{let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,i.jsx)(n,{}),e[0]=t):t=e[0],t};export{a as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-CCY2HdNd.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-CCY2HdNd.js deleted file mode 100644 index 4cf75f612..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-CCY2HdNd.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/run-instances-DaYPaBMp.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/chevron-down-Dt4q6d24.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/cli-command-panel-CLiFy1rG.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ec2-Ctto2xjU.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ec2-DhWukC79.js","assets/system-managed-Dk7ySh_E.js","assets/gpu-instance-type-select-BD2r8UcO.js","assets/collapsible-k5LqEmTn.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{g as n,lt as r,m as i}from"./cluster-config-xw_Q7X1e.js";import{M as a,O as o,c as s,h as c,o as l,p as u,w as d,y as f}from"./ec2-CWEplLq4.js";var p=()=>r(()=>import(`./run-instances-DaYPaBMp.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),m=i({launchTemplateId:n().optional().catch(void 0),launchTemplateVersion:n().optional().catch(void 0)}),h=e(`/_auth/ec2/(instances)/run-instances`)({validateSearch:m,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...u,staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...f,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...d,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`})])},head:()=>({meta:[{title:`Run Instances | EC2 | Mulga`}]}),component:t(p,`component`)});export{h as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-NtPi-zqD.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-NtPi-zqD.js new file mode 100644 index 000000000..dac6e843f --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-NtPi-zqD.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/run-instances-X8O4pPun.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/chevron-down-Dt4q6d24.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/cli-command-panel-DavMY-tN.js","assets/copy-CamWo-pg.js","assets/use-copy-to-clipboard-DjiD3qo6.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ec2-Csn1kwZ8.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/subnet-calculator-BlCTyGtY.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ec2-DqNqPeiA.js","assets/system-managed-Dk7ySh_E.js","assets/gpu-instance-type-select-DMxBayBV.js","assets/collapsible-Sj-k2ZCd.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{_ as n,h as r,ut as i}from"./cluster-config-DkOiY8HH.js";import{M as a,O as o,c as s,h as c,o as l,p as u,w as d,y as f}from"./ec2-DYgBhYCJ.js";var p=()=>i(()=>import(`./run-instances-X8O4pPun.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),m=r({launchTemplateId:n().optional().catch(void 0),launchTemplateVersion:n().optional().catch(void 0)}),h=e(`/_auth/ec2/(instances)/run-instances`)({validateSearch:m,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...l,staleTime:`static`}),e.queryClient.query({...u,staleTime:`static`}),e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`}),e.queryClient.query({...f,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...d,staleTime:`static`}),e.queryClient.query({...c,staleTime:`static`})])},head:()=>({meta:[{title:`Run Instances | EC2 | Mulga`}]}),component:t(p,`component`)});export{h as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-DaYPaBMp.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-X8O4pPun.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-DaYPaBMp.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-X8O4pPun.js index 1de663cf6..fcbb5e141 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-DaYPaBMp.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-instances-X8O4pPun.js @@ -1,4 +1,4 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useQuery-2EKf7AyV.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-BH3pQKLF.js";import{on as ne}from"./cluster-config-xw_Q7X1e.js";import{t as re}from"./back-link-CjKy1JE5.js";import{t as ie}from"./chevron-down-Dt4q6d24.js";import{c as a,i as o,n as s,s as c,t as l}from"./select-B01jpDaX.js";import{t as ae}from"./cli-command-panel-CLiFy1rG.js";import{t as oe}from"./button-BarTr35m.js";import{t as u}from"./input-6kdUb_DH.js";import{M as se,O as ce,c as le,h as ue,m as de,o as fe,p as pe,w as me,y as he}from"./ec2-CWEplLq4.js";import{f as ge}from"./ec2-Ctto2xjU.js";import{t as d}from"./run-instances-CCY2HdNd.js";import{t as _e}from"./page-heading-vksh_67w.js";import{a as f,i as ve,n as p,t as ye}from"./zod-DF_n2ejy.js";import{t as be}from"./error-banner-DeOeVBKS.js";import{n as xe,r as m,s as h,t as g}from"./field-c7GHI5st.js";import{b as Se,i as Ce,t as we}from"./ec2-DhWukC79.js";import{i as Te}from"./system-managed-Dk7ySh_E.js";import{t as Ee}from"./gpu-instance-type-select-BD2r8UcO.js";import{n as De,r as Oe,t as ke}from"./collapsible-k5LqEmTn.js";var Ae=r(),je=t(n(),1),_=e(),Me=`/dev/sda1`,Ne=`gp3`,Pe=1,Fe=16384;function v(e){let t=(0,Ae.c)(140),{launchTemplateId:n,launchTemplateVersion:r}=e,d=te(),{data:Te}=i(fe),{data:Me}=i(pe),{data:v}=i(le),{data:rt}=i(ce),{data:it}=i(he),{data:at}=i(se),{data:ot}=i(me),{data:st}=i(ue),y=ge(),ct;t[0]===Te.Images?ct=t[1]:(ct=Te.Images??[],t[0]=Te.Images,t[1]=ct);let b=ct.filter($e),lt;t[2]===Me.KeyPairs?lt=t[3]:(lt=Me.KeyPairs??[],t[2]=Me.KeyPairs,t[3]=lt);let ut=lt,dt;t[4]===rt.Subnets?dt=t[5]:(dt=rt.Subnets??[],t[4]=rt.Subnets,t[5]=dt);let ft=dt,pt;t[6]===it.PlacementGroups?pt=t[7]:(pt=it.PlacementGroups??[],t[6]=it.PlacementGroups,t[7]=pt);let mt=pt,ht;t[8]===at.Vpcs?ht=t[9]:(ht=at.Vpcs??[],t[8]=at.Vpcs,t[9]=ht);let gt=ht,_t;t[10]===ot.SecurityGroups?_t=t[11]:(_t=ot.SecurityGroups??[],t[10]=ot.SecurityGroups,t[11]=_t);let vt=_t,yt;t[12]===st.LaunchTemplates?yt=t[13]:(yt=st.LaunchTemplates??[],t[12]=st.LaunchTemplates,t[13]=yt);let bt=yt,xt;t[14]===gt?xt=t[15]:(xt=(gt.find(Qe)??gt[0])?.VpcId,t[14]=gt,t[15]=xt);let St=xt,Ct=Se(vt.map(Ze)),x;if(t[16]!==v.InstanceTypes){x={};for(let e of v.InstanceTypes??[]){let t=e.InstanceType;t&&(x[t]=(x[t]??0)+1)}t[16]=v.InstanceTypes,t[17]=x}else x=t[17];let S=Object.keys(x).toSorted(),wt=b[0]?.ImageId,Tt=ut[0]?.KeyName,Et=S.find(Xe)??S[0],Dt=et(b.find(e=>e.ImageId===wt)),Ot;t[18]===x?Ot=t[19]:(Ot=e=>!e.instanceType||e.count<=(x[e.instanceType]??1),t[18]=x,t[19]=Ot);let{control:C,handleSubmit:kt,register:w,setValue:T,getValues:At,watch:jt,formState:Mt}=ve({resolver:ye(Ce.refine(Ot,{message:`Cannot exceed available capacity`,path:[`count`]}).superRefine((e,t)=>{let n=et(b.find(t=>t.ImageId===e.imageId)).snapshotSize;e.rootVolumeSize!==void 0&&n!==void 0&&e.rootVolumeSizee.InstanceType===Ft))?.GpuInfo?.Gpus?.[0],Lt=D?.Name?.startsWith(`MIG `)?D.Name.slice(4):void 0,Rt;t[22]===C?Rt=t[23]:(Rt={control:C,name:`imageId`},t[22]=C,t[23]=Rt);let zt=f(Rt),Bt;t[24]===zt?Bt=t[25]:(Bt=e=>e.ImageId===zt,t[24]=zt,t[25]=Bt);let O=et(b.find(Bt)),Vt;t[26]===C?Vt=t[27]:(Vt={control:C,name:`subnetId`},t[26]=C,t[27]=Vt);let Ht=f(Vt),Ut;t[28]===C?Ut=t[29]:(Ut={control:C,name:`securityGroupMode`},t[28]=C,t[29]=Ut);let Wt=f(Ut),Gt;t[30]===C?Gt=t[31]:(Gt={control:C,name:`ruleSource`},t[30]=C,t[31]=Gt);let Kt=f(Gt),qt=f({control:C,name:`securityGroupIds`})??[],Jt;t[32]===qt?Jt=t[33]:(Jt=new Set(qt),t[32]=qt,t[33]=Jt);let Yt=Jt,Xt;t[34]===C?Xt=t[35]:(Xt={control:C,name:`launchTemplateId`},t[34]=C,t[35]=Xt);let k=f(Xt),Zt;t[36]===C?Zt=t[37]:(Zt={control:C,name:`launchTemplateVersion`},t[36]=C,t[37]=Zt);let Qt=f(Zt),$t=k??``,A;t[38]===$t?A=t[39]:(A=de($t),t[38]=$t,t[39]=A);let en=!!k,tn;t[40]!==A||t[41]!==en?(tn={...A,enabled:en},t[40]=A,t[41]=en,t[42]=tn):tn=t[42];let nn=ee(tn),rn;t[43]===nn.data?.LaunchTemplateVersions?rn=t[44]:(rn=nn.data?.LaunchTemplateVersions??[],t[43]=nn.data?.LaunchTemplateVersions,t[44]=rn);let j=rn,an;t[45]!==Qt||t[46]!==j?(an=tt(j,Qt)?.LaunchTemplateData,t[45]=Qt,t[46]=j,t[47]=an):an=t[47];let M=an,on;t[48]!==St||t[49]!==Ht||t[50]!==ft?(on=ft.find(e=>e.SubnetId===Ht)?.VpcId??St,t[48]=St,t[49]=Ht,t[50]=ft,t[51]=on):on=t[51];let N=on,sn;t[52]!==N||t[53]!==vt?(sn=N?vt.filter(e=>e.VpcId===N):vt,t[52]=N,t[53]=vt,t[54]=sn):sn=t[54];let cn=sn,ln;t[55]!==At||t[56]!==T?(ln=e=>{let t=At(`securityGroupIds`)??[],n=t.includes(e)?t.filter(t=>t!==e):[...t,e];T(`securityGroupIds`,n,{shouldValidate:!0})},t[55]=At,t[56]=T,t[57]=ln):ln=t[57];let un=ln,dn,fn;t[58]!==O.deviceName||t[59]!==T?(dn=()=>{T(`rootDeviceName`,O.deviceName)},fn=[O.deviceName,T],t[58]=O.deviceName,t[59]=T,t[60]=dn,t[61]=fn):(dn=t[60],fn=t[61]),(0,je.useEffect)(dn,fn);let pn;t[62]!==y||t[63]!==N||t[64]!==d?(pn=async e=>{let t=e.launchTemplateId?{count:e.count,launchTemplateId:e.launchTemplateId,launchTemplateVersion:e.launchTemplateVersion,resolvedVpcId:N}:{...e,resolvedVpcId:N};await y.mutateAsync(t),d({to:`/ec2/describe-instances`})},t[62]=y,t[63]=N,t[64]=d,t[65]=pn):pn=t[65];let mn=pn,P,F;t[66]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(re,{to:`/ec2/describe-instances`,children:`Back to instances`}),F=(0,_.jsx)(_e,{title:`Run Instances`}),t[66]=P,t[67]=F):(P=t[66],F=t[67]);let I;t[68]!==k||t[69]!==S?(I=S.length===0&&!k&&(0,_.jsx)(be,{msg:`No compute available. No new instances can be created until compute is available.`}),t[68]=k,t[69]=S,t[70]=I):I=t[70];let L;t[71]===y.error?L=t[72]:(L=y.error&&(0,_.jsx)(be,{error:y.error,msg:`Failed to create instance`}),t[71]=y.error,t[72]=L);let R;t[73]!==kt||t[74]!==mn?(R=kt(mn),t[73]=kt,t[74]=mn,t[75]=R):R=t[75];let hn;t[76]===Symbol.for(`react.memo_cache_sentinel`)?(hn=(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateId`,children:`Launch Template`})}),t[76]=hn):hn=t[76];let z;t[77]===bt?z=t[78]:(z=e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`launchTemplateId`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),bt.map(Ye)]})]})},t[77]=bt,t[78]=z);let B;t[79]!==C||t[80]!==z?(B=(0,_.jsxs)(g,{children:[hn,(0,_.jsx)(p,{control:C,name:`launchTemplateId`,render:z})]}),t[79]=C,t[80]=z,t[81]=B):B=t[81];let V;t[82]!==C||t[83]!==M||t[84]!==k||t[85]!==j?(V=k&&(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateVersion`,children:`Version`})}),(0,_.jsx)(p,{control:C,name:`launchTemplateVersion`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??`$Default`,children:[(0,_.jsx)(c,{className:`w-full`,id:`launchTemplateVersion`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`$Default`,children:`$Default`}),(0,_.jsx)(o,{value:`$Latest`,children:`$Latest`}),j.map(Je)]})]})}}),M&&(0,_.jsxs)(`div`,{className:`mt-3 space-y-1 rounded-md border border-border p-3 text-xs`,children:[(0,_.jsx)(`p`,{className:`text-muted-foreground`,children:`Configuration from this version:`}),(0,_.jsxs)(`p`,{children:[`Image:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.ImageId??`—`})]}),(0,_.jsxs)(`p`,{children:[`Instance type:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.InstanceType??`—`})]}),(0,_.jsxs)(`p`,{children:[`Key pair:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.KeyName??`—`})]})]})]}),t[82]=C,t[83]=M,t[84]=k,t[85]=j,t[86]=V):V=t[86];let gn=!k&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`imageId`,children:`Image`})}),(0,_.jsx)(p,{control:C,name:`imageId`,render:e=>{let{field:t}=e,n=b.find(e=>e.ImageId===t.value);return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(c,{"aria-invalid":!!E.imageId,className:`w-full`,id:`imageId`,children:(0,_.jsx)(a,{children:n?`${n.Name??`Unnamed`} (${n.Architecture})`:``})}),(0,_.jsx)(s,{children:b.map(qe)})]})}}),(0,_.jsx)(m,{errors:[E.imageId]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),(0,_.jsx)(p,{control:C,name:`instanceType`,render:e=>{let{field:t}=e;return(0,_.jsx)(Ee,{"aria-invalid":!!E.instanceType,availabilityByType:x,className:`w-full`,id:`instanceType`,instanceTypes:v.InstanceTypes??[],onValueChange:t.onChange,value:t.value??``})}}),D&&(0,_.jsxs)(xe,{children:[`GPU: `,D.Name,D.MemoryInfo?.SizeInMiB!==void 0&&` · ${ne(D.MemoryInfo.SizeInMiB)} VRAM`,Lt&&` · MIG ${Lt} slice`]}),(0,_.jsx)(m,{errors:[E.instanceType]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair`})}),(0,_.jsx)(p,{control:C,name:`keyName`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(c,{"aria-invalid":!!E.keyName,className:`w-full`,id:`keyName`,children:(0,_.jsx)(a,{})}),(0,_.jsx)(s,{children:ut.map(Ke)})]})}}),(0,_.jsx)(m,{errors:[E.keyName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`subnetId`,children:`Subnet`})}),(0,_.jsx)(p,{control:C,name:`subnetId`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`subnetId`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),ft.map(Ge)]})]})}})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Security Group`}),(0,_.jsx)(xe,{children:N?`Applies to VPC ${N}`:`No VPC resolved — select a subnet`}),(0,_.jsx)(p,{control:C,name:`securityGroupMode`,render:We}),Wt===`create`?(0,_.jsxs)(`div`,{className:`mt-3 space-y-4 rounded-md border border-border p-4`,children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`newSgName`,children:`Name`})}),(0,_.jsx)(u,{"aria-invalid":!!E.newSgName,id:`newSgName`,type:`text`,...w(`newSgName`)}),(0,_.jsx)(m,{errors:[E.newSgName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`newSgDescription`,children:`Description`})}),(0,_.jsx)(u,{id:`newSgDescription`,type:`text`,...w(`newSgDescription`)})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Inbound rules`}),(0,_.jsxs)(`div`,{className:`space-y-1`,children:[(0,_.jsx)(p,{control:C,name:`allowSsh`,render:Ue}),(0,_.jsx)(p,{control:C,name:`allowHttp`,render:He}),(0,_.jsx)(p,{control:C,name:`allowHttps`,render:Ve})]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Source`}),(0,_.jsx)(p,{control:C,name:`ruleSource`,render:Be}),Kt===`custom`&&(0,_.jsxs)(`div`,{className:`mt-2`,children:[(0,_.jsx)(u,{"aria-invalid":!!E.customCidr,placeholder:`203.0.113.0/24`,type:`text`,...w(`customCidr`)}),(0,_.jsx)(m,{errors:[E.customCidr]})]})]})]}):(0,_.jsxs)(`div`,{className:`mt-3`,children:[cn.length===0?(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups in the resolved VPC.`}):(0,_.jsx)(`div`,{className:`space-y-1`,children:cn.map(e=>(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,_.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:Yt.has(e.GroupId??``),onChange:()=>{un(e.GroupId??``)},type:`checkbox`}),(0,_.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))}),(0,_.jsx)(m,{errors:[E.securityGroupIds]})]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`placementGroupName`,children:`Placement Group`})}),(0,_.jsx)(p,{control:C,name:`placementGroupName`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`placementGroupName`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),mt.map(ze)]})]})}})]})]}),_n;t[87]===Symbol.for(`react.memo_cache_sentinel`)?(_n=(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`count`,children:`Number of Instances`})}),t[87]=_n):_n=t[87];let vn=!!E.count,H;t[88]===w?H=t[89]:(H=w(`count`,{valueAsNumber:!0}),t[88]=w,t[89]=H);let U;t[90]!==vn||t[91]!==H?(U=(0,_.jsx)(u,{"aria-describedby":`count-description`,"aria-invalid":vn,id:`count`,type:`number`,...H}),t[90]=vn,t[91]=H,t[92]=U):U=t[92];let yn=Ft&&`Available capacity for ${Ft}: ${It}`,W;t[93]===yn?W=t[94]:(W=(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,id:`count-description`,children:yn}),t[93]=yn,t[94]=W);let G;t[95]===E.count?G=t[96]:(G=(0,_.jsx)(m,{errors:[E.count]}),t[95]=E.count,t[96]=G);let K;t[97]!==U||t[98]!==W||t[99]!==G?(K=(0,_.jsxs)(g,{children:[_n,U,W,G]}),t[97]=U,t[98]=W,t[99]=G,t[100]=K):K=t[100];let q;t[101]!==C||t[102]!==E.rootDeviceName||t[103]!==E.rootVolumeSize||t[104]!==E.rootVolumeType||t[105]!==w||t[106]!==O.snapshotSize||t[107]!==k?(q=!k&&(0,_.jsx)(_.Fragment,{children:(0,_.jsxs)(ke,{children:[(0,_.jsxs)(Oe,{className:`group flex h-7 w-full items-center justify-between rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none hover:bg-input/40 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 md:text-xs/relaxed dark:bg-input/30 dark:hover:bg-input/50`,render:(0,_.jsx)(`button`,{"aria-label":`Block Device Mappings (root volume)`,type:`button`}),children:[(0,_.jsx)(`span`,{children:`Block Device Mappings (root volume)`}),(0,_.jsx)(ie,{className:`size-3.5 text-muted-foreground transition-transform group-data-[panel-open]:rotate-180`})]}),(0,_.jsxs)(De,{className:`mt-3 space-y-4 rounded-md border border-border p-4`,children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootDeviceName`,children:`Device Name`})}),(0,_.jsx)(u,{"aria-invalid":!!E.rootDeviceName,id:`rootDeviceName`,type:`text`,...w(`rootDeviceName`)}),(0,_.jsx)(m,{errors:[E.rootDeviceName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootVolumeSize`,children:`Volume Size (GiB)`})}),(0,_.jsx)(u,{"aria-invalid":!!E.rootVolumeSize,id:`rootVolumeSize`,max:Fe,min:O.snapshotSize??Pe,placeholder:O.snapshotSize?`${O.snapshotSize} (AMI default)`:`use AMI / backend default`,type:`number`,...w(`rootVolumeSize`,{setValueAs:Re})}),O.snapshotSize!==void 0&&(0,_.jsxs)(xe,{children:[`AMI snapshot size: `,O.snapshotSize,` GiB`]}),(0,_.jsx)(m,{errors:[E.rootVolumeSize]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootVolumeType`,children:`Volume Type`})}),(0,_.jsx)(p,{control:C,name:`rootVolumeType`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??Ne,children:[(0,_.jsx)(c,{"aria-invalid":!!E.rootVolumeType,className:`w-full`,id:`rootVolumeType`,children:(0,_.jsx)(a,{})}),(0,_.jsx)(s,{children:we.map(Le)})]})}}),(0,_.jsx)(m,{errors:[E.rootVolumeType]})]}),(0,_.jsx)(g,{children:(0,_.jsx)(p,{control:C,name:`rootDeleteOnTermination`,render:Ie})})]})]})}),t[101]=C,t[102]=E.rootDeviceName,t[103]=E.rootVolumeSize,t[104]=E.rootVolumeType,t[105]=w,t[106]=O.snapshotSize,t[107]=k,t[108]=q):q=t[108];let J;t[109]!==N||t[110]!==jt?(J=nt(jt,N),t[109]=N,t[110]=jt,t[111]=J):J=t[111];let Y;t[112]===J?Y=t[113]:(Y=(0,_.jsx)(ae,{commands:J}),t[112]=J,t[113]=Y);let bn=Nt||y.isPending,X;t[114]===d?X=t[115]:(X=async()=>{await d({to:`/ec2/describe-instances`})},t[114]=d,t[115]=X);let Z;t[116]!==bn||t[117]!==X?(Z=(0,_.jsx)(oe,{disabled:bn,onClick:X,type:`button`,variant:`outline`,children:`Cancel`}),t[116]=bn,t[117]=X,t[118]=Z):Z=t[118];let xn=Nt||y.isPending||!k&&S.length===0,Sn=Nt||y.isPending?`Creating…`:`Create Instance`,Q;t[119]!==xn||t[120]!==Sn?(Q=(0,_.jsx)(oe,{disabled:xn,type:`submit`,children:Sn}),t[119]=xn,t[120]=Sn,t[121]=Q):Q=t[121];let Cn;t[122]!==Z||t[123]!==Q?(Cn=(0,_.jsxs)(`div`,{className:`flex gap-2`,children:[Z,Q]}),t[122]=Z,t[123]=Q,t[124]=Cn):Cn=t[124];let $;t[125]!==R||t[126]!==B||t[127]!==V||t[128]!==gn||t[129]!==K||t[130]!==q||t[131]!==Y||t[132]!==Cn?($=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:R,children:[B,V,gn,K,q,Y,Cn]}),t[125]=R,t[126]=B,t[127]=V,t[128]=gn,t[129]=K,t[130]=q,t[131]=Y,t[132]=Cn,t[133]=$):$=t[133];let wn;return t[134]!==P||t[135]!==F||t[136]!==I||t[137]!==L||t[138]!==$?(wn=(0,_.jsxs)(_.Fragment,{children:[P,F,I,L,$]}),t[134]=P,t[135]=F,t[136]=I,t[137]=L,t[138]=$,t[139]=wn):wn=t[139],wn}function Ie(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Delete on termination`,checked:t.value??!0,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Delete on termination`]})}function Le(e){return(0,_.jsx)(o,{value:e,children:e},e)}function Re(e){return e===``||e==null?void 0:Number(e)}function ze(e){return(0,_.jsxs)(o,{value:e.GroupName??``,children:[e.GroupName,` (`,e.Strategy,`)`]},e.GroupId)}function Be(e){let{field:t}=e;return(0,_.jsxs)(`div`,{className:`flex gap-4 text-sm`,children:[(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Source anywhere`,checked:t.value===`anywhere`,name:t.name,onChange:()=>{t.onChange(`anywhere`)},type:`radio`}),`Anywhere (0.0.0.0/0)`]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Source custom CIDR`,checked:t.value===`custom`,name:t.name,onChange:()=>{t.onChange(`custom`)},type:`radio`}),`Custom CIDR`]})]})}function Ve(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow HTTPS`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow HTTPS (tcp/443)`]})}function He(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow HTTP`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow HTTP (tcp/80)`]})}function Ue(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow SSH`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow SSH (tcp/22)`]})}function We(e){let{field:t}=e;return(0,_.jsxs)(`div`,{className:`flex gap-4 text-sm`,children:[(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Create new security group`,checked:t.value===`create`,name:t.name,onChange:()=>{t.onChange(`create`)},type:`radio`}),`Create new`]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Select existing security group`,checked:t.value===`existing`,name:t.name,onChange:()=>{t.onChange(`existing`)},type:`radio`}),`Select existing`]})]})}function Ge(e){return(0,_.jsx)(o,{value:e.SubnetId??``,children:e.SubnetId},e.SubnetId)}function Ke(e){return(0,_.jsx)(o,{value:e.KeyName??``,children:e.KeyName},e.KeyPairId)}function qe(e){return(0,_.jsxs)(o,{value:e.ImageId??``,children:[e.Name??`Unnamed`,` (`,e.Architecture,`)`]},e.ImageId)}function Je(e){return(0,_.jsxs)(o,{value:String(e.VersionNumber),children:[`v`,e.VersionNumber]},e.VersionNumber)}function Ye(e){return(0,_.jsx)(o,{value:e.LaunchTemplateId??``,children:e.LaunchTemplateName??e.LaunchTemplateId},e.LaunchTemplateId)}function Xe(e){return e.endsWith(`.nano`)}function Ze(e){return e.GroupName??``}function Qe(e){return e.IsDefault}function $e(e){return!Te(e)}function et(e){let t=e?.RootDeviceName??Me,n=e?.BlockDeviceMappings??[];return{deviceName:t,snapshotSize:(n.find(e=>e.DeviceName===t)??n[0])?.Ebs?.VolumeSize}}function tt(e,t){if(e.length===0)return;if(!t||t===`$Default`)return e.find(e=>e.DefaultVersion)??e[0];if(t===`$Latest`)return e.toSorted((e,t)=>(t.VersionNumber??0)-(e.VersionNumber??0))[0];let n=Number(t);return e.find(e=>e.VersionNumber===n)}function nt(e,t){let n=e(`launchTemplateId`)??``;if(n){let t=e(`launchTemplateVersion`)||`$Default`,r=e(`count`)??0;return[{label:`Run Instances`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 run-instances`},{type:`flag`,value:` \\ +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./useQuery-2EKf7AyV.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as te}from"./useNavigate-CTe_-BZA.js";import{sn as ne}from"./cluster-config-DkOiY8HH.js";import{t as re}from"./back-link-wsXUoJ12.js";import{t as ie}from"./chevron-down-Dt4q6d24.js";import{c as a,i as o,n as s,s as c,t as l}from"./select-Cn66OoPn.js";import{t as ae}from"./cli-command-panel-DavMY-tN.js";import{t as oe}from"./button-qf9lLJ2x.js";import{t as u}from"./input-D3aUBtS6.js";import{M as se,O as ce,c as le,h as ue,m as de,o as fe,p as pe,w as me,y as he}from"./ec2-DYgBhYCJ.js";import{f as ge}from"./ec2-Csn1kwZ8.js";import{t as d}from"./run-instances-NtPi-zqD.js";import{t as _e}from"./page-heading-vksh_67w.js";import{a as f,i as ve,n as p,t as ye}from"./zod-A4qtKH_p.js";import{t as be}from"./error-banner-DeOeVBKS.js";import{n as xe,r as m,s as h,t as g}from"./field-CS-ql6du.js";import{b as Se,i as Ce,t as we}from"./ec2-DqNqPeiA.js";import{i as Te}from"./system-managed-Dk7ySh_E.js";import{t as Ee}from"./gpu-instance-type-select-DMxBayBV.js";import{n as De,r as Oe,t as ke}from"./collapsible-Sj-k2ZCd.js";var Ae=r(),je=t(n(),1),_=e(),Me=`/dev/sda1`,Ne=`gp3`,Pe=1,Fe=16384;function v(e){let t=(0,Ae.c)(140),{launchTemplateId:n,launchTemplateVersion:r}=e,d=te(),{data:Te}=i(fe),{data:Me}=i(pe),{data:v}=i(le),{data:rt}=i(ce),{data:it}=i(he),{data:at}=i(se),{data:ot}=i(me),{data:st}=i(ue),y=ge(),ct;t[0]===Te.Images?ct=t[1]:(ct=Te.Images??[],t[0]=Te.Images,t[1]=ct);let b=ct.filter($e),lt;t[2]===Me.KeyPairs?lt=t[3]:(lt=Me.KeyPairs??[],t[2]=Me.KeyPairs,t[3]=lt);let ut=lt,dt;t[4]===rt.Subnets?dt=t[5]:(dt=rt.Subnets??[],t[4]=rt.Subnets,t[5]=dt);let ft=dt,pt;t[6]===it.PlacementGroups?pt=t[7]:(pt=it.PlacementGroups??[],t[6]=it.PlacementGroups,t[7]=pt);let mt=pt,ht;t[8]===at.Vpcs?ht=t[9]:(ht=at.Vpcs??[],t[8]=at.Vpcs,t[9]=ht);let gt=ht,_t;t[10]===ot.SecurityGroups?_t=t[11]:(_t=ot.SecurityGroups??[],t[10]=ot.SecurityGroups,t[11]=_t);let vt=_t,yt;t[12]===st.LaunchTemplates?yt=t[13]:(yt=st.LaunchTemplates??[],t[12]=st.LaunchTemplates,t[13]=yt);let bt=yt,xt;t[14]===gt?xt=t[15]:(xt=(gt.find(Qe)??gt[0])?.VpcId,t[14]=gt,t[15]=xt);let St=xt,Ct=Se(vt.map(Ze)),x;if(t[16]!==v.InstanceTypes){x={};for(let e of v.InstanceTypes??[]){let t=e.InstanceType;t&&(x[t]=(x[t]??0)+1)}t[16]=v.InstanceTypes,t[17]=x}else x=t[17];let S=Object.keys(x).toSorted(),wt=b[0]?.ImageId,Tt=ut[0]?.KeyName,Et=S.find(Xe)??S[0],Dt=et(b.find(e=>e.ImageId===wt)),Ot;t[18]===x?Ot=t[19]:(Ot=e=>!e.instanceType||e.count<=(x[e.instanceType]??1),t[18]=x,t[19]=Ot);let{control:C,handleSubmit:kt,register:w,setValue:T,getValues:At,watch:jt,formState:Mt}=ve({resolver:ye(Ce.refine(Ot,{message:`Cannot exceed available capacity`,path:[`count`]}).superRefine((e,t)=>{let n=et(b.find(t=>t.ImageId===e.imageId)).snapshotSize;e.rootVolumeSize!==void 0&&n!==void 0&&e.rootVolumeSizee.InstanceType===Ft))?.GpuInfo?.Gpus?.[0],Lt=D?.Name?.startsWith(`MIG `)?D.Name.slice(4):void 0,Rt;t[22]===C?Rt=t[23]:(Rt={control:C,name:`imageId`},t[22]=C,t[23]=Rt);let zt=f(Rt),Bt;t[24]===zt?Bt=t[25]:(Bt=e=>e.ImageId===zt,t[24]=zt,t[25]=Bt);let O=et(b.find(Bt)),Vt;t[26]===C?Vt=t[27]:(Vt={control:C,name:`subnetId`},t[26]=C,t[27]=Vt);let Ht=f(Vt),Ut;t[28]===C?Ut=t[29]:(Ut={control:C,name:`securityGroupMode`},t[28]=C,t[29]=Ut);let Wt=f(Ut),Gt;t[30]===C?Gt=t[31]:(Gt={control:C,name:`ruleSource`},t[30]=C,t[31]=Gt);let Kt=f(Gt),qt=f({control:C,name:`securityGroupIds`})??[],Jt;t[32]===qt?Jt=t[33]:(Jt=new Set(qt),t[32]=qt,t[33]=Jt);let Yt=Jt,Xt;t[34]===C?Xt=t[35]:(Xt={control:C,name:`launchTemplateId`},t[34]=C,t[35]=Xt);let k=f(Xt),Zt;t[36]===C?Zt=t[37]:(Zt={control:C,name:`launchTemplateVersion`},t[36]=C,t[37]=Zt);let Qt=f(Zt),$t=k??``,A;t[38]===$t?A=t[39]:(A=de($t),t[38]=$t,t[39]=A);let en=!!k,tn;t[40]!==A||t[41]!==en?(tn={...A,enabled:en},t[40]=A,t[41]=en,t[42]=tn):tn=t[42];let nn=ee(tn),rn;t[43]===nn.data?.LaunchTemplateVersions?rn=t[44]:(rn=nn.data?.LaunchTemplateVersions??[],t[43]=nn.data?.LaunchTemplateVersions,t[44]=rn);let j=rn,an;t[45]!==Qt||t[46]!==j?(an=tt(j,Qt)?.LaunchTemplateData,t[45]=Qt,t[46]=j,t[47]=an):an=t[47];let M=an,on;t[48]!==St||t[49]!==Ht||t[50]!==ft?(on=ft.find(e=>e.SubnetId===Ht)?.VpcId??St,t[48]=St,t[49]=Ht,t[50]=ft,t[51]=on):on=t[51];let N=on,sn;t[52]!==N||t[53]!==vt?(sn=N?vt.filter(e=>e.VpcId===N):vt,t[52]=N,t[53]=vt,t[54]=sn):sn=t[54];let cn=sn,ln;t[55]!==At||t[56]!==T?(ln=e=>{let t=At(`securityGroupIds`)??[],n=t.includes(e)?t.filter(t=>t!==e):[...t,e];T(`securityGroupIds`,n,{shouldValidate:!0})},t[55]=At,t[56]=T,t[57]=ln):ln=t[57];let un=ln,dn,fn;t[58]!==O.deviceName||t[59]!==T?(dn=()=>{T(`rootDeviceName`,O.deviceName)},fn=[O.deviceName,T],t[58]=O.deviceName,t[59]=T,t[60]=dn,t[61]=fn):(dn=t[60],fn=t[61]),(0,je.useEffect)(dn,fn);let pn;t[62]!==y||t[63]!==N||t[64]!==d?(pn=async e=>{let t=e.launchTemplateId?{count:e.count,launchTemplateId:e.launchTemplateId,launchTemplateVersion:e.launchTemplateVersion,resolvedVpcId:N}:{...e,resolvedVpcId:N};await y.mutateAsync(t),d({to:`/ec2/describe-instances`})},t[62]=y,t[63]=N,t[64]=d,t[65]=pn):pn=t[65];let mn=pn,P,F;t[66]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,_.jsx)(re,{to:`/ec2/describe-instances`,children:`Back to instances`}),F=(0,_.jsx)(_e,{title:`Run Instances`}),t[66]=P,t[67]=F):(P=t[66],F=t[67]);let I;t[68]!==k||t[69]!==S?(I=S.length===0&&!k&&(0,_.jsx)(be,{msg:`No compute available. No new instances can be created until compute is available.`}),t[68]=k,t[69]=S,t[70]=I):I=t[70];let L;t[71]===y.error?L=t[72]:(L=y.error&&(0,_.jsx)(be,{error:y.error,msg:`Failed to create instance`}),t[71]=y.error,t[72]=L);let R;t[73]!==kt||t[74]!==mn?(R=kt(mn),t[73]=kt,t[74]=mn,t[75]=R):R=t[75];let hn;t[76]===Symbol.for(`react.memo_cache_sentinel`)?(hn=(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateId`,children:`Launch Template`})}),t[76]=hn):hn=t[76];let z;t[77]===bt?z=t[78]:(z=e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`launchTemplateId`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),bt.map(Ye)]})]})},t[77]=bt,t[78]=z);let B;t[79]!==C||t[80]!==z?(B=(0,_.jsxs)(g,{children:[hn,(0,_.jsx)(p,{control:C,name:`launchTemplateId`,render:z})]}),t[79]=C,t[80]=z,t[81]=B):B=t[81];let V;t[82]!==C||t[83]!==M||t[84]!==k||t[85]!==j?(V=k&&(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`launchTemplateVersion`,children:`Version`})}),(0,_.jsx)(p,{control:C,name:`launchTemplateVersion`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??`$Default`,children:[(0,_.jsx)(c,{className:`w-full`,id:`launchTemplateVersion`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`$Default`,children:`$Default`}),(0,_.jsx)(o,{value:`$Latest`,children:`$Latest`}),j.map(Je)]})]})}}),M&&(0,_.jsxs)(`div`,{className:`mt-3 space-y-1 rounded-md border border-border p-3 text-xs`,children:[(0,_.jsx)(`p`,{className:`text-muted-foreground`,children:`Configuration from this version:`}),(0,_.jsxs)(`p`,{children:[`Image:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.ImageId??`—`})]}),(0,_.jsxs)(`p`,{children:[`Instance type:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.InstanceType??`—`})]}),(0,_.jsxs)(`p`,{children:[`Key pair:`,` `,(0,_.jsx)(`span`,{className:`font-mono`,children:M.KeyName??`—`})]})]})]}),t[82]=C,t[83]=M,t[84]=k,t[85]=j,t[86]=V):V=t[86];let gn=!k&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`imageId`,children:`Image`})}),(0,_.jsx)(p,{control:C,name:`imageId`,render:e=>{let{field:t}=e,n=b.find(e=>e.ImageId===t.value);return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(c,{"aria-invalid":!!E.imageId,className:`w-full`,id:`imageId`,children:(0,_.jsx)(a,{children:n?`${n.Name??`Unnamed`} (${n.Architecture})`:``})}),(0,_.jsx)(s,{children:b.map(qe)})]})}}),(0,_.jsx)(m,{errors:[E.imageId]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`instanceType`,children:`Instance Type`})}),(0,_.jsx)(p,{control:C,name:`instanceType`,render:e=>{let{field:t}=e;return(0,_.jsx)(Ee,{"aria-invalid":!!E.instanceType,availabilityByType:x,className:`w-full`,id:`instanceType`,instanceTypes:v.InstanceTypes??[],onValueChange:t.onChange,value:t.value??``})}}),D&&(0,_.jsxs)(xe,{children:[`GPU: `,D.Name,D.MemoryInfo?.SizeInMiB!==void 0&&` · ${ne(D.MemoryInfo.SizeInMiB)} VRAM`,Lt&&` · MIG ${Lt} slice`]}),(0,_.jsx)(m,{errors:[E.instanceType]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`keyName`,children:`Key Pair`})}),(0,_.jsx)(p,{control:C,name:`keyName`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,_.jsx)(c,{"aria-invalid":!!E.keyName,className:`w-full`,id:`keyName`,children:(0,_.jsx)(a,{})}),(0,_.jsx)(s,{children:ut.map(Ke)})]})}}),(0,_.jsx)(m,{errors:[E.keyName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`subnetId`,children:`Subnet`})}),(0,_.jsx)(p,{control:C,name:`subnetId`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`subnetId`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),ft.map(Ge)]})]})}})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Security Group`}),(0,_.jsx)(xe,{children:N?`Applies to VPC ${N}`:`No VPC resolved — select a subnet`}),(0,_.jsx)(p,{control:C,name:`securityGroupMode`,render:We}),Wt===`create`?(0,_.jsxs)(`div`,{className:`mt-3 space-y-4 rounded-md border border-border p-4`,children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`newSgName`,children:`Name`})}),(0,_.jsx)(u,{"aria-invalid":!!E.newSgName,id:`newSgName`,type:`text`,...w(`newSgName`)}),(0,_.jsx)(m,{errors:[E.newSgName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`newSgDescription`,children:`Description`})}),(0,_.jsx)(u,{id:`newSgDescription`,type:`text`,...w(`newSgDescription`)})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Inbound rules`}),(0,_.jsxs)(`div`,{className:`space-y-1`,children:[(0,_.jsx)(p,{control:C,name:`allowSsh`,render:Ue}),(0,_.jsx)(p,{control:C,name:`allowHttp`,render:He}),(0,_.jsx)(p,{control:C,name:`allowHttps`,render:Ve})]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:`Source`}),(0,_.jsx)(p,{control:C,name:`ruleSource`,render:Be}),Kt===`custom`&&(0,_.jsxs)(`div`,{className:`mt-2`,children:[(0,_.jsx)(u,{"aria-invalid":!!E.customCidr,placeholder:`203.0.113.0/24`,type:`text`,...w(`customCidr`)}),(0,_.jsx)(m,{errors:[E.customCidr]})]})]})]}):(0,_.jsxs)(`div`,{className:`mt-3`,children:[cn.length===0?(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No security groups in the resolved VPC.`}):(0,_.jsx)(`div`,{className:`space-y-1`,children:cn.map(e=>(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,_.jsx)(`input`,{"aria-label":`Security group ${e.GroupId} (${e.GroupName})`,checked:Yt.has(e.GroupId??``),onChange:()=>{un(e.GroupId??``)},type:`checkbox`}),(0,_.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))}),(0,_.jsx)(m,{errors:[E.securityGroupIds]})]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`placementGroupName`,children:`Placement Group`})}),(0,_.jsx)(p,{control:C,name:`placementGroupName`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e===`none`?void 0:e)},value:t.value??`none`,children:[(0,_.jsx)(c,{className:`w-full`,id:`placementGroupName`,children:(0,_.jsx)(a,{})}),(0,_.jsxs)(s,{children:[(0,_.jsx)(o,{value:`none`,children:`none`}),mt.map(ze)]})]})}})]})]}),_n;t[87]===Symbol.for(`react.memo_cache_sentinel`)?(_n=(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`count`,children:`Number of Instances`})}),t[87]=_n):_n=t[87];let vn=!!E.count,H;t[88]===w?H=t[89]:(H=w(`count`,{valueAsNumber:!0}),t[88]=w,t[89]=H);let U;t[90]!==vn||t[91]!==H?(U=(0,_.jsx)(u,{"aria-describedby":`count-description`,"aria-invalid":vn,id:`count`,type:`number`,...H}),t[90]=vn,t[91]=H,t[92]=U):U=t[92];let yn=Ft&&`Available capacity for ${Ft}: ${It}`,W;t[93]===yn?W=t[94]:(W=(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,id:`count-description`,children:yn}),t[93]=yn,t[94]=W);let G;t[95]===E.count?G=t[96]:(G=(0,_.jsx)(m,{errors:[E.count]}),t[95]=E.count,t[96]=G);let K;t[97]!==U||t[98]!==W||t[99]!==G?(K=(0,_.jsxs)(g,{children:[_n,U,W,G]}),t[97]=U,t[98]=W,t[99]=G,t[100]=K):K=t[100];let q;t[101]!==C||t[102]!==E.rootDeviceName||t[103]!==E.rootVolumeSize||t[104]!==E.rootVolumeType||t[105]!==w||t[106]!==O.snapshotSize||t[107]!==k?(q=!k&&(0,_.jsx)(_.Fragment,{children:(0,_.jsxs)(ke,{children:[(0,_.jsxs)(Oe,{className:`group flex h-7 w-full items-center justify-between rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none hover:bg-input/40 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 md:text-xs/relaxed dark:bg-input/30 dark:hover:bg-input/50`,render:(0,_.jsx)(`button`,{"aria-label":`Block Device Mappings (root volume)`,type:`button`}),children:[(0,_.jsx)(`span`,{children:`Block Device Mappings (root volume)`}),(0,_.jsx)(ie,{className:`size-3.5 text-muted-foreground transition-transform group-data-[panel-open]:rotate-180`})]}),(0,_.jsxs)(De,{className:`mt-3 space-y-4 rounded-md border border-border p-4`,children:[(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootDeviceName`,children:`Device Name`})}),(0,_.jsx)(u,{"aria-invalid":!!E.rootDeviceName,id:`rootDeviceName`,type:`text`,...w(`rootDeviceName`)}),(0,_.jsx)(m,{errors:[E.rootDeviceName]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootVolumeSize`,children:`Volume Size (GiB)`})}),(0,_.jsx)(u,{"aria-invalid":!!E.rootVolumeSize,id:`rootVolumeSize`,max:Fe,min:O.snapshotSize??Pe,placeholder:O.snapshotSize?`${O.snapshotSize} (AMI default)`:`use AMI / backend default`,type:`number`,...w(`rootVolumeSize`,{setValueAs:Re})}),O.snapshotSize!==void 0&&(0,_.jsxs)(xe,{children:[`AMI snapshot size: `,O.snapshotSize,` GiB`]}),(0,_.jsx)(m,{errors:[E.rootVolumeSize]})]}),(0,_.jsxs)(g,{children:[(0,_.jsx)(h,{children:(0,_.jsx)(`label`,{htmlFor:`rootVolumeType`,children:`Volume Type`})}),(0,_.jsx)(p,{control:C,name:`rootVolumeType`,render:e=>{let{field:t}=e;return(0,_.jsxs)(l,{onValueChange:e=>{t.onChange(e)},value:t.value??Ne,children:[(0,_.jsx)(c,{"aria-invalid":!!E.rootVolumeType,className:`w-full`,id:`rootVolumeType`,children:(0,_.jsx)(a,{})}),(0,_.jsx)(s,{children:we.map(Le)})]})}}),(0,_.jsx)(m,{errors:[E.rootVolumeType]})]}),(0,_.jsx)(g,{children:(0,_.jsx)(p,{control:C,name:`rootDeleteOnTermination`,render:Ie})})]})]})}),t[101]=C,t[102]=E.rootDeviceName,t[103]=E.rootVolumeSize,t[104]=E.rootVolumeType,t[105]=w,t[106]=O.snapshotSize,t[107]=k,t[108]=q):q=t[108];let J;t[109]!==N||t[110]!==jt?(J=nt(jt,N),t[109]=N,t[110]=jt,t[111]=J):J=t[111];let Y;t[112]===J?Y=t[113]:(Y=(0,_.jsx)(ae,{commands:J}),t[112]=J,t[113]=Y);let bn=Nt||y.isPending,X;t[114]===d?X=t[115]:(X=async()=>{await d({to:`/ec2/describe-instances`})},t[114]=d,t[115]=X);let Z;t[116]!==bn||t[117]!==X?(Z=(0,_.jsx)(oe,{disabled:bn,onClick:X,type:`button`,variant:`outline`,children:`Cancel`}),t[116]=bn,t[117]=X,t[118]=Z):Z=t[118];let xn=Nt||y.isPending||!k&&S.length===0,Sn=Nt||y.isPending?`Creating…`:`Create Instance`,Q;t[119]!==xn||t[120]!==Sn?(Q=(0,_.jsx)(oe,{disabled:xn,type:`submit`,children:Sn}),t[119]=xn,t[120]=Sn,t[121]=Q):Q=t[121];let Cn;t[122]!==Z||t[123]!==Q?(Cn=(0,_.jsxs)(`div`,{className:`flex gap-2`,children:[Z,Q]}),t[122]=Z,t[123]=Q,t[124]=Cn):Cn=t[124];let $;t[125]!==R||t[126]!==B||t[127]!==V||t[128]!==gn||t[129]!==K||t[130]!==q||t[131]!==Y||t[132]!==Cn?($=(0,_.jsxs)(`form`,{className:`max-w-4xl space-y-6`,onSubmit:R,children:[B,V,gn,K,q,Y,Cn]}),t[125]=R,t[126]=B,t[127]=V,t[128]=gn,t[129]=K,t[130]=q,t[131]=Y,t[132]=Cn,t[133]=$):$=t[133];let wn;return t[134]!==P||t[135]!==F||t[136]!==I||t[137]!==L||t[138]!==$?(wn=(0,_.jsxs)(_.Fragment,{children:[P,F,I,L,$]}),t[134]=P,t[135]=F,t[136]=I,t[137]=L,t[138]=$,t[139]=wn):wn=t[139],wn}function Ie(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Delete on termination`,checked:t.value??!0,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Delete on termination`]})}function Le(e){return(0,_.jsx)(o,{value:e,children:e},e)}function Re(e){return e===``||e==null?void 0:Number(e)}function ze(e){return(0,_.jsxs)(o,{value:e.GroupName??``,children:[e.GroupName,` (`,e.Strategy,`)`]},e.GroupId)}function Be(e){let{field:t}=e;return(0,_.jsxs)(`div`,{className:`flex gap-4 text-sm`,children:[(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Source anywhere`,checked:t.value===`anywhere`,name:t.name,onChange:()=>{t.onChange(`anywhere`)},type:`radio`}),`Anywhere (0.0.0.0/0)`]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Source custom CIDR`,checked:t.value===`custom`,name:t.name,onChange:()=>{t.onChange(`custom`)},type:`radio`}),`Custom CIDR`]})]})}function Ve(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow HTTPS`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow HTTPS (tcp/443)`]})}function He(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow HTTP`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow HTTP (tcp/80)`]})}function Ue(e){let{field:t}=e;return(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,_.jsx)(`input`,{"aria-label":`Allow SSH`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),`Allow SSH (tcp/22)`]})}function We(e){let{field:t}=e;return(0,_.jsxs)(`div`,{className:`flex gap-4 text-sm`,children:[(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Create new security group`,checked:t.value===`create`,name:t.name,onChange:()=>{t.onChange(`create`)},type:`radio`}),`Create new`]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`input`,{"aria-label":`Select existing security group`,checked:t.value===`existing`,name:t.name,onChange:()=>{t.onChange(`existing`)},type:`radio`}),`Select existing`]})]})}function Ge(e){return(0,_.jsx)(o,{value:e.SubnetId??``,children:e.SubnetId},e.SubnetId)}function Ke(e){return(0,_.jsx)(o,{value:e.KeyName??``,children:e.KeyName},e.KeyPairId)}function qe(e){return(0,_.jsxs)(o,{value:e.ImageId??``,children:[e.Name??`Unnamed`,` (`,e.Architecture,`)`]},e.ImageId)}function Je(e){return(0,_.jsxs)(o,{value:String(e.VersionNumber),children:[`v`,e.VersionNumber]},e.VersionNumber)}function Ye(e){return(0,_.jsx)(o,{value:e.LaunchTemplateId??``,children:e.LaunchTemplateName??e.LaunchTemplateId},e.LaunchTemplateId)}function Xe(e){return e.endsWith(`.nano`)}function Ze(e){return e.GroupName??``}function Qe(e){return e.IsDefault}function $e(e){return!Te(e)}function et(e){let t=e?.RootDeviceName??Me,n=e?.BlockDeviceMappings??[];return{deviceName:t,snapshotSize:(n.find(e=>e.DeviceName===t)??n[0])?.Ebs?.VolumeSize}}function tt(e,t){if(e.length===0)return;if(!t||t===`$Default`)return e.find(e=>e.DefaultVersion)??e[0];if(t===`$Latest`)return e.toSorted((e,t)=>(t.VersionNumber??0)-(e.VersionNumber??0))[0];let n=Number(t);return e.find(e=>e.VersionNumber===n)}function nt(e,t){let n=e(`launchTemplateId`)??``;if(n){let t=e(`launchTemplateVersion`)||`$Default`,r=e(`count`)??0;return[{label:`Run Instances`,parts:[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 run-instances`},{type:`flag`,value:` \\ --launch-template`},{type:`value`,value:` LaunchTemplateId=${n},Version=${t}`},{type:`flag`,value:` \\ --count`},{type:`value`,value:` ${r||1}`}]}]}let r=e(`imageId`)??``,ee=e(`instanceType`)??``,i=e(`keyName`)??``,te=e(`subnetId`)??``,ne=e(`placementGroupName`)??``,re=e(`count`)??0,ie=e(`rootDeviceName`)??``,a=e(`rootVolumeSize`),o=e(`rootVolumeType`),s=e(`rootDeleteOnTermination`),c=[{type:`bin`,value:`AWS_PROFILE=spinifex aws ec2 run-instances`},{type:`flag`,value:` \\ --image-id`},{type:`value`,value:` ${r||``}`},{type:`flag`,value:` \\ diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DypL7RpO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DcKjbPwq.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DypL7RpO.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DcKjbPwq.js index 2177a9447..40d87ee9a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DypL7RpO.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DcKjbPwq.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-BH3pQKLF.js";import{t as te}from"./back-link-CjKy1JE5.js";import{c as ne,i,n as re,s as ie,t as ae}from"./select-B01jpDaX.js";import{t as oe}from"./input-6kdUb_DH.js";import{O as se,w as ce}from"./ec2-CWEplLq4.js";import{a as le,o as ue}from"./ecs-gqt7DXoF.js";import{c as de}from"./ecs-8RzYyUs4.js";import{t as a}from"./run-task-Dkc0UyHr.js";import{t as fe}from"./page-heading-vksh_67w.js";import{a as pe,i as me,n as he,t as ge}from"./zod-DF_n2ejy.js";import{t as _e}from"./error-banner-DeOeVBKS.js";import{t as ve}from"./form-actions-BUM37An0.js";import{r as ye,s as be,t as xe}from"./field-c7GHI5st.js";import{i as Se}from"./ecs-KDGpZ8Lc.js";var Ce=t(),o=e();function s(e){return e.split(`/`).at(-1)??e}function c(e){let t=(0,Ce.c)(88),{cluster:i}=e,a=ee(),s=de(),{data:c}=r(ue),{data:l}=r(se),{data:Te}=r(ce),u;t[0]===l.Subnets?u=t[1]:(u=l.Subnets??[],t[0]=l.Subnets,t[1]=u);let Ee=u,d;t[2]===Te.SecurityGroups?d=t[3]:(d=Te.SecurityGroups??[],t[2]=Te.SecurityGroups,t[3]=d);let De=d,f;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(f=ge(Se),t[4]=f):f=t[4];let p,m;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=[],m=[],t[5]=p,t[6]=m):(p=t[5],m=t[6]);let h;t[7]===i?h=t[8]:(h={resolver:f,defaultValues:{cluster:i,taskDefinition:``,count:1,subnets:p,securityGroups:m,assignPublicIp:!1}},t[7]=i,t[8]=h);let{control:g,handleSubmit:Oe,register:_,setValue:ke,getValues:Ae,formState:je}=me(h),{errors:v,isSubmitting:y}=je,b;t[9]===g?b=t[10]:(b={control:g,name:`taskDefinition`},t[9]=g,t[10]=b);let x=pe(b),S;t[11]===x?S=t[12]:(S=le(x),t[11]=x,t[12]=S);let{data:Me}=n(S),C=Me?.networkMode===`awsvpc`,w;t[13]===g?w=t[14]:(w={control:g,name:`subnets`},t[13]=g,t[14]=w);let T=pe(w),E;t[15]===g?E=t[16]:(E={control:g,name:`securityGroups`},t[15]=g,t[16]=E);let D=pe(E),O;t[17]===T?O=t[18]:(O=new Set(T),t[17]=T,t[18]=O);let Ne=O,k;t[19]===D?k=t[20]:(k=new Set(D),t[19]=D,t[20]=k);let Pe=k,A;t[21]!==Ae||t[22]!==ke?(A=(e,t)=>{let n=Ae(e);ke(e,n.includes(t)?n.filter(e=>e!==t):[...n,t],{shouldValidate:!0})},t[21]=Ae,t[22]=ke,t[23]=A):A=t[23];let j=A,M;t[24]!==i||t[25]!==a?(M=function(){a({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:i}})},t[24]=i,t[25]=a,t[26]=M):M=t[26];let N=M,P;t[27]!==C||t[28]!==N||t[29]!==s?(P=function(e){s.mutate({cluster:e.cluster,taskDefinition:e.taskDefinition,count:e.count,awsvpc:C,subnets:e.subnets,securityGroups:e.securityGroups,assignPublicIp:e.assignPublicIp},{onSuccess:N})},t[27]=C,t[28]=N,t[29]=s,t[30]=P):P=t[30];let Fe=P,Ie=C&&T.length===0,F;t[31]===i?F=t[32]:(F={clusterName:i},t[31]=i,t[32]=F);let I;t[33]!==i||t[34]!==F?(I=(0,o.jsx)(te,{params:F,to:`/ecs/list-clusters/$clusterName`,children:i}),t[33]=i,t[34]=F,t[35]=I):I=t[35];let Le=`Cluster: ${i}`,L;t[36]===Le?L=t[37]:(L=(0,o.jsx)(fe,{subtitle:Le,title:`Run Task`}),t[36]=Le,t[37]=L);let R;t[38]!==s.error||t[39]!==s.isError?(R=s.isError&&(0,o.jsx)(_e,{error:s.error instanceof Error?s.error:void 0,msg:`Failed to run task.`}),t[38]=s.error,t[39]=s.isError,t[40]=R):R=t[40];let z;t[41]!==Oe||t[42]!==Fe?(z=Oe(Fe),t[41]=Oe,t[42]=Fe,t[43]=z):z=t[43];let B;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,o.jsx)(be,{children:(0,o.jsx)(`label`,{htmlFor:`taskDefinition`,children:`Task definition`})}),t[44]=B):B=t[44];let V;t[45]===c?V=t[46]:(V=e=>{let{field:t}=e;return(0,o.jsxs)(ae,{onValueChange:t.onChange,value:t.value,children:[(0,o.jsx)(ie,{className:`w-full`,id:`taskDefinition`,children:(0,o.jsx)(ne,{placeholder:`Select a task definition`})}),(0,o.jsx)(re,{children:c.map(we)})]})},t[45]=c,t[46]=V);let H;t[47]!==g||t[48]!==V?(H=(0,o.jsx)(he,{control:g,name:`taskDefinition`,render:V}),t[47]=g,t[48]=V,t[49]=H):H=t[49];let U;t[50]===v.taskDefinition?U=t[51]:(U=(0,o.jsx)(ye,{errors:[v.taskDefinition]}),t[50]=v.taskDefinition,t[51]=U);let W;t[52]!==H||t[53]!==U?(W=(0,o.jsxs)(xe,{children:[B,H,U]}),t[52]=H,t[53]=U,t[54]=W):W=t[54];let G;t[55]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,o.jsx)(be,{children:(0,o.jsx)(`label`,{htmlFor:`count`,children:`Count`})}),t[55]=G):G=t[55];let K;t[56]===_?K=t[57]:(K=_(`count`,{valueAsNumber:!0}),t[56]=_,t[57]=K);let q;t[58]===K?q=t[59]:(q=(0,o.jsx)(oe,{id:`count`,type:`number`,...K}),t[58]=K,t[59]=q);let J;t[60]===v.count?J=t[61]:(J=(0,o.jsx)(ye,{errors:[v.count]}),t[60]=v.count,t[61]=J);let Y;t[62]!==q||t[63]!==J?(Y=(0,o.jsxs)(xe,{children:[G,q,J]}),t[62]=q,t[63]=J,t[64]=Y):Y=t[64];let X;t[65]!==C||t[66]!==_||t[67]!==De||t[68]!==Pe||t[69]!==Ne||t[70]!==Ee||t[71]!==j?(X=C&&(0,o.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[(0,o.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`This task definition uses awsvpc networking. Select at least one subnet.`}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`span`,{className:`text-sm font-medium`,children:`Subnets`}),(0,o.jsx)(`div`,{className:`mt-2 space-y-1`,children:Ee.map(e=>(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,o.jsx)(`input`,{checked:Ne.has(e.SubnetId??``),onChange:()=>{j(`subnets`,e.SubnetId??``)},type:`checkbox`}),(0,o.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` (`,e.CidrBlock,`)`]})]},e.SubnetId))})]}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`span`,{className:`text-sm font-medium`,children:`Security groups`}),(0,o.jsx)(`div`,{className:`mt-2 space-y-1`,children:De.map(e=>(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,o.jsx)(`input`,{checked:Pe.has(e.GroupId??``),onChange:()=>{j(`securityGroups`,e.GroupId??``)},type:`checkbox`}),(0,o.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,o.jsx)(`input`,{type:`checkbox`,..._(`assignPublicIp`)}),(0,o.jsx)(`span`,{children:`Assign public IP`})]})]}),t[65]=C,t[66]=_,t[67]=De,t[68]=Pe,t[69]=Ne,t[70]=Ee,t[71]=j,t[72]=X):X=t[72];let Re=s.isPending||Ie,Z;t[73]!==N||t[74]!==y||t[75]!==Re?(Z=(0,o.jsx)(ve,{isPending:Re,isSubmitting:y,onCancel:N,pendingLabel:`Running…`,submitLabel:`Run Task`}),t[73]=N,t[74]=y,t[75]=Re,t[76]=Z):Z=t[76];let Q;t[77]!==z||t[78]!==W||t[79]!==Y||t[80]!==X||t[81]!==Z?(Q=(0,o.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:z,children:[W,Y,X,Z]}),t[77]=z,t[78]=W,t[79]=Y,t[80]=X,t[81]=Z,t[82]=Q):Q=t[82];let $;return t[83]!==I||t[84]!==L||t[85]!==R||t[86]!==Q?($=(0,o.jsxs)(o.Fragment,{children:[I,L,R,Q]}),t[83]=I,t[84]=L,t[85]=R,t[86]=Q,t[87]=$):$=t[87],$}function we(e){let t=s(e);return(0,o.jsx)(i,{value:t,children:t},e)}function l(){let e=(0,Ce.c)(2),{cluster:t}=a.useSearch(),n;return e[0]===t?n=e[1]:(n=(0,o.jsx)(c,{cluster:t}),e[0]=t,e[1]=n),n}export{l as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{t as r}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as ee}from"./useNavigate-CTe_-BZA.js";import{t as te}from"./back-link-wsXUoJ12.js";import{c as ne,i,n as re,s as ie,t as ae}from"./select-Cn66OoPn.js";import{t as oe}from"./input-D3aUBtS6.js";import{O as se,w as ce}from"./ec2-DYgBhYCJ.js";import{a as le,o as ue}from"./ecs-BmKTMTV2.js";import{c as de}from"./ecs-Bz1Yh-WL.js";import{t as a}from"./run-task-DfVldodn.js";import{t as fe}from"./page-heading-vksh_67w.js";import{a as pe,i as me,n as he,t as ge}from"./zod-A4qtKH_p.js";import{t as _e}from"./error-banner-DeOeVBKS.js";import{t as ve}from"./form-actions-DXvy9CQI.js";import{r as ye,s as be,t as xe}from"./field-CS-ql6du.js";import{i as Se}from"./ecs-BRK1HDnD.js";var Ce=t(),o=e();function s(e){return e.split(`/`).at(-1)??e}function c(e){let t=(0,Ce.c)(88),{cluster:i}=e,a=ee(),s=de(),{data:c}=r(ue),{data:l}=r(se),{data:Te}=r(ce),u;t[0]===l.Subnets?u=t[1]:(u=l.Subnets??[],t[0]=l.Subnets,t[1]=u);let Ee=u,d;t[2]===Te.SecurityGroups?d=t[3]:(d=Te.SecurityGroups??[],t[2]=Te.SecurityGroups,t[3]=d);let De=d,f;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(f=ge(Se),t[4]=f):f=t[4];let p,m;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=[],m=[],t[5]=p,t[6]=m):(p=t[5],m=t[6]);let h;t[7]===i?h=t[8]:(h={resolver:f,defaultValues:{cluster:i,taskDefinition:``,count:1,subnets:p,securityGroups:m,assignPublicIp:!1}},t[7]=i,t[8]=h);let{control:g,handleSubmit:Oe,register:_,setValue:ke,getValues:Ae,formState:je}=me(h),{errors:v,isSubmitting:y}=je,b;t[9]===g?b=t[10]:(b={control:g,name:`taskDefinition`},t[9]=g,t[10]=b);let x=pe(b),S;t[11]===x?S=t[12]:(S=le(x),t[11]=x,t[12]=S);let{data:Me}=n(S),C=Me?.networkMode===`awsvpc`,w;t[13]===g?w=t[14]:(w={control:g,name:`subnets`},t[13]=g,t[14]=w);let T=pe(w),E;t[15]===g?E=t[16]:(E={control:g,name:`securityGroups`},t[15]=g,t[16]=E);let D=pe(E),O;t[17]===T?O=t[18]:(O=new Set(T),t[17]=T,t[18]=O);let Ne=O,k;t[19]===D?k=t[20]:(k=new Set(D),t[19]=D,t[20]=k);let Pe=k,A;t[21]!==Ae||t[22]!==ke?(A=(e,t)=>{let n=Ae(e);ke(e,n.includes(t)?n.filter(e=>e!==t):[...n,t],{shouldValidate:!0})},t[21]=Ae,t[22]=ke,t[23]=A):A=t[23];let j=A,M;t[24]!==i||t[25]!==a?(M=function(){a({to:`/ecs/list-clusters/$clusterName`,params:{clusterName:i}})},t[24]=i,t[25]=a,t[26]=M):M=t[26];let N=M,P;t[27]!==C||t[28]!==N||t[29]!==s?(P=function(e){s.mutate({cluster:e.cluster,taskDefinition:e.taskDefinition,count:e.count,awsvpc:C,subnets:e.subnets,securityGroups:e.securityGroups,assignPublicIp:e.assignPublicIp},{onSuccess:N})},t[27]=C,t[28]=N,t[29]=s,t[30]=P):P=t[30];let Fe=P,Ie=C&&T.length===0,F;t[31]===i?F=t[32]:(F={clusterName:i},t[31]=i,t[32]=F);let I;t[33]!==i||t[34]!==F?(I=(0,o.jsx)(te,{params:F,to:`/ecs/list-clusters/$clusterName`,children:i}),t[33]=i,t[34]=F,t[35]=I):I=t[35];let Le=`Cluster: ${i}`,L;t[36]===Le?L=t[37]:(L=(0,o.jsx)(fe,{subtitle:Le,title:`Run Task`}),t[36]=Le,t[37]=L);let R;t[38]!==s.error||t[39]!==s.isError?(R=s.isError&&(0,o.jsx)(_e,{error:s.error instanceof Error?s.error:void 0,msg:`Failed to run task.`}),t[38]=s.error,t[39]=s.isError,t[40]=R):R=t[40];let z;t[41]!==Oe||t[42]!==Fe?(z=Oe(Fe),t[41]=Oe,t[42]=Fe,t[43]=z):z=t[43];let B;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,o.jsx)(be,{children:(0,o.jsx)(`label`,{htmlFor:`taskDefinition`,children:`Task definition`})}),t[44]=B):B=t[44];let V;t[45]===c?V=t[46]:(V=e=>{let{field:t}=e;return(0,o.jsxs)(ae,{onValueChange:t.onChange,value:t.value,children:[(0,o.jsx)(ie,{className:`w-full`,id:`taskDefinition`,children:(0,o.jsx)(ne,{placeholder:`Select a task definition`})}),(0,o.jsx)(re,{children:c.map(we)})]})},t[45]=c,t[46]=V);let H;t[47]!==g||t[48]!==V?(H=(0,o.jsx)(he,{control:g,name:`taskDefinition`,render:V}),t[47]=g,t[48]=V,t[49]=H):H=t[49];let U;t[50]===v.taskDefinition?U=t[51]:(U=(0,o.jsx)(ye,{errors:[v.taskDefinition]}),t[50]=v.taskDefinition,t[51]=U);let W;t[52]!==H||t[53]!==U?(W=(0,o.jsxs)(xe,{children:[B,H,U]}),t[52]=H,t[53]=U,t[54]=W):W=t[54];let G;t[55]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,o.jsx)(be,{children:(0,o.jsx)(`label`,{htmlFor:`count`,children:`Count`})}),t[55]=G):G=t[55];let K;t[56]===_?K=t[57]:(K=_(`count`,{valueAsNumber:!0}),t[56]=_,t[57]=K);let q;t[58]===K?q=t[59]:(q=(0,o.jsx)(oe,{id:`count`,type:`number`,...K}),t[58]=K,t[59]=q);let J;t[60]===v.count?J=t[61]:(J=(0,o.jsx)(ye,{errors:[v.count]}),t[60]=v.count,t[61]=J);let Y;t[62]!==q||t[63]!==J?(Y=(0,o.jsxs)(xe,{children:[G,q,J]}),t[62]=q,t[63]=J,t[64]=Y):Y=t[64];let X;t[65]!==C||t[66]!==_||t[67]!==De||t[68]!==Pe||t[69]!==Ne||t[70]!==Ee||t[71]!==j?(X=C&&(0,o.jsxs)(`div`,{className:`space-y-4 rounded-lg border bg-card p-4`,children:[(0,o.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`This task definition uses awsvpc networking. Select at least one subnet.`}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`span`,{className:`text-sm font-medium`,children:`Subnets`}),(0,o.jsx)(`div`,{className:`mt-2 space-y-1`,children:Ee.map(e=>(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,o.jsx)(`input`,{checked:Ne.has(e.SubnetId??``),onChange:()=>{j(`subnets`,e.SubnetId??``)},type:`checkbox`}),(0,o.jsxs)(`span`,{className:`font-mono`,children:[e.SubnetId,` (`,e.CidrBlock,`)`]})]},e.SubnetId))})]}),(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`span`,{className:`text-sm font-medium`,children:`Security groups`}),(0,o.jsx)(`div`,{className:`mt-2 space-y-1`,children:De.map(e=>(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,o.jsx)(`input`,{checked:Pe.has(e.GroupId??``),onChange:()=>{j(`securityGroups`,e.GroupId??``)},type:`checkbox`}),(0,o.jsxs)(`span`,{className:`font-mono`,children:[e.GroupId,` (`,e.GroupName,`)`]})]},e.GroupId))})]}),(0,o.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,o.jsx)(`input`,{type:`checkbox`,..._(`assignPublicIp`)}),(0,o.jsx)(`span`,{children:`Assign public IP`})]})]}),t[65]=C,t[66]=_,t[67]=De,t[68]=Pe,t[69]=Ne,t[70]=Ee,t[71]=j,t[72]=X):X=t[72];let Re=s.isPending||Ie,Z;t[73]!==N||t[74]!==y||t[75]!==Re?(Z=(0,o.jsx)(ve,{isPending:Re,isSubmitting:y,onCancel:N,pendingLabel:`Running…`,submitLabel:`Run Task`}),t[73]=N,t[74]=y,t[75]=Re,t[76]=Z):Z=t[76];let Q;t[77]!==z||t[78]!==W||t[79]!==Y||t[80]!==X||t[81]!==Z?(Q=(0,o.jsxs)(`form`,{className:`max-w-2xl space-y-6`,onSubmit:z,children:[W,Y,X,Z]}),t[77]=z,t[78]=W,t[79]=Y,t[80]=X,t[81]=Z,t[82]=Q):Q=t[82];let $;return t[83]!==I||t[84]!==L||t[85]!==R||t[86]!==Q?($=(0,o.jsxs)(o.Fragment,{children:[I,L,R,Q]}),t[83]=I,t[84]=L,t[85]=R,t[86]=Q,t[87]=$):$=t[87],$}function we(e){let t=s(e);return(0,o.jsx)(i,{value:t,children:t},e)}function l(){let e=(0,Ce.c)(2),{cluster:t}=a.useSearch(),n;return e[0]===t?n=e[1]:(n=(0,o.jsx)(c,{cluster:t}),e[0]=t,e[1]=n),n}export{l as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DfVldodn.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DfVldodn.js new file mode 100644 index 000000000..da57d0b8f --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-DfVldodn.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/run-task-DcKjbPwq.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-CTe_-BZA.js","assets/useSelector-C6_B_5v6.js","assets/with-selector-DrM041uv.js","assets/back-link-wsXUoJ12.js","assets/link-BokOReHc.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-Cn66OoPn.js","assets/useValueAsRef-hoe2gsyn.js","assets/dist-DeC3TnAR.js","assets/cluster-config-DkOiY8HH.js","assets/hex-encoding-CVnQo5PF.js","assets/button-qf9lLJ2x.js","assets/createBaseUIEventDetails-CJZ8g-R_.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-ZoIoM_Qs.js","assets/useScrollLock-UqEMT494.js","assets/usePositioner-BZ4WwVxL.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-Puv6a8xb.js","assets/input-D3aUBtS6.js","assets/ec2-DYgBhYCJ.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-Cqp6x3OY.js","assets/index.browser-DuXQj3EI.js","assets/ecs-BmKTMTV2.js","assets/ecs-Bz1Yh-WL.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-C_pG4AOx.js","assets/page-heading-vksh_67w.js","assets/zod-A4qtKH_p.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-DXvy9CQI.js","assets/field-CS-ql6du.js","assets/separator--2CKf90h.js","assets/ecs-BRK1HDnD.js"])))=>i.map(i=>d[i]); +import{n as e,t}from"./lazyRouteComponent-D0nAq0Je.js";import{_ as n,h as r,ut as i}from"./cluster-config-DkOiY8HH.js";import{O as a,w as o}from"./ec2-DYgBhYCJ.js";import{o as s}from"./ecs-BmKTMTV2.js";var c=()=>i(()=>import(`./run-task-DcKjbPwq.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44])),l=r({cluster:n().catch(``)}),u=e(`/_auth/ecs/(clusters)/run-task`)({validateSearch:l,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`})])},head:()=>({meta:[{title:`Run Task | ECS | Mulga`}]}),component:t(c,`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-Dkc0UyHr.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-Dkc0UyHr.js deleted file mode 100644 index f07851d40..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/run-task-Dkc0UyHr.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/run-task-DypL7RpO.js","assets/compiler-runtime-D_vZfn79.js","assets/useQuery-2EKf7AyV.js","assets/useBaseQuery-Dqg0ViLa.js","assets/removable-Dwr9otKB.js","assets/query-BPr_oSEg.js","assets/useSuspenseQuery-Bc7E1P-f.js","assets/useNavigate-BH3pQKLF.js","assets/useSelector-CRh8wCTv.js","assets/with-selector-DrM041uv.js","assets/back-link-CjKy1JE5.js","assets/link-Dhy4xOXd.js","assets/createLucideIcon-BQgzNCBR.js","assets/select-B01jpDaX.js","assets/useValueAsRef-F56m8WbP.js","assets/dist-BKgR2qk6.js","assets/cluster-config-xw_Q7X1e.js","assets/hex-encoding-B19xAT_7.js","assets/button-BarTr35m.js","assets/createBaseUIEventDetails-DL-8egB9.js","assets/check-BO7W8OSs.js","assets/chevron-down-Dt4q6d24.js","assets/useValueChanged-B2TUO8IO.js","assets/useScrollLock-NX6x9Pv8.js","assets/usePositioner-DUsvphCt.js","assets/DirectionContext-C9rdm8xn.js","assets/useControlled-DwxdYHYK.js","assets/useCompositeListItem-CEsaEeXb.js","assets/input-6kdUb_DH.js","assets/ec2-CWEplLq4.js","assets/queryOptions-Dfvzj6n2.js","assets/awsClient-b0hcP1Iz.js","assets/index.browser-C3WbWNjZ.js","assets/ecs-gqt7DXoF.js","assets/ecs-8RzYyUs4.js","assets/useMutation-6rdxVQpi.js","assets/mutation-BziiWz5u.js","assets/signed-fetch-B-FFW93q.js","assets/page-heading-vksh_67w.js","assets/zod-DF_n2ejy.js","assets/error-banner-DeOeVBKS.js","assets/form-actions-BUM37An0.js","assets/field-c7GHI5st.js","assets/separator-B3CHPrlt.js","assets/ecs-KDGpZ8Lc.js"])))=>i.map(i=>d[i]); -import{n as e,t}from"./lazyRouteComponent-CiZDS8hZ.js";import{g as n,lt as r,m as i}from"./cluster-config-xw_Q7X1e.js";import{O as a,w as o}from"./ec2-CWEplLq4.js";import{o as s}from"./ecs-gqt7DXoF.js";var c=()=>r(()=>import(`./run-task-DypL7RpO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44])),l=i({cluster:n().catch(``)}),u=e(`/_auth/ecs/(clusters)/run-task`)({validateSearch:l,loader:async({context:e})=>{await Promise.all([e.queryClient.query({...s,staleTime:`static`}),e.queryClient.query({...a,staleTime:`static`}),e.queryClient.query({...o,staleTime:`static`})])},head:()=>({meta:[{title:`Run Task | ECS | Mulga`}]}),component:t(c,`component`)});export{u as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DFfxBBj-.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-ClpClaoT.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DFfxBBj-.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-ClpClaoT.js index dfd3eb8f3..abe663f7b 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DFfxBBj-.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-ClpClaoT.js @@ -1 +1 @@ -import{t as e}from"./queryOptions-Dfvzj6n2.js";import{A as t,R as n,S as r,j as i,k as a,m as o,x as s}from"./awsClient-b0hcP1Iz.js";var c=class extends n(a,i,`ListBuckets`,s){},l=class extends n(t,i,`ListObjectsV2`,r){},u=e({queryKey:[`s3`,`buckets`],queryFn:async()=>{let e=new c({});return await o().send(e)}}),d=(t,n)=>e({queryKey:[`s3`,`buckets`,t,`objects`,n??``],queryFn:async()=>{let e=new l({Bucket:t,Prefix:n,Delimiter:`/`});return await o().send(e)}});export{u as n,d as t}; \ No newline at end of file +import{t as e}from"./queryOptions-Dfvzj6n2.js";import{A as t,R as n,S as r,j as i,k as a,m as o,x as s}from"./awsClient-Cqp6x3OY.js";var c=class extends n(a,i,`ListBuckets`,s){},l=class extends n(t,i,`ListObjectsV2`,r){},u=e({queryKey:[`s3`,`buckets`],queryFn:async()=>{let e=new c({});return await o().send(e)}}),d=(t,n)=>e({queryKey:[`s3`,`buckets`,t,`objects`,n??``],queryFn:async()=>{let e=new l({Bucket:t,Prefix:n,Delimiter:`/`});return await o().send(e)}});export{u as n,d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DaPUyf7s.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-D7lLgKWv.js similarity index 99% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DaPUyf7s.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-D7lLgKWv.js index 38063fe68..46c844b78 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-DaPUyf7s.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/s3-D7lLgKWv.js @@ -1,4 +1,4 @@ -import{i as e,t}from"./compiler-runtime-D_vZfn79.js";import{A as n}from"./removable-Dwr9otKB.js";import{t as r}from"./useMutation-6rdxVQpi.js";import{Jt as i,dt as a,gt as o}from"./cluster-config-xw_Q7X1e.js";import{C as s,D as c,E as l,F as u,I as d,M as f,N as p,O as m,P as h,R as g,T as _,_ as v,g as y,h as b,j as x,m as S,v as C,w,y as T}from"./awsClient-b0hcP1Iz.js";var E=class extends g(l,x,`AbortMultipartUpload`,b){},D=class extends g(l,f,`CompleteMultipartUpload`,y){},O=class extends g(c,u,`CreateBucket`,v){},k=class extends g(l,f,`CreateMultipartUpload`,C){},A=class extends g(l,x,`DeleteObject`,T){},j=class extends g(l,p,`PutObject`,s){},M=class extends g(m,d,`PutObjectTagging`,w){},N=class extends g(l,h,`UploadPart`,_){},P={CRC32:`CRC32`,CRC32C:`CRC32C`,CRC64NVME:`CRC64NVME`,MD5:`MD5`,SHA1:`SHA1`,SHA256:`SHA256`,SHA512:`SHA512`,XXHASH128:`XXHASH128`,XXHASH3:`XXHASH3`,XXHASH64:`XXHASH64`},F=e(((e,t)=>{var n=typeof Reflect==`object`?Reflect:null,r=n&&typeof n.apply==`function`?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},i=n&&typeof n.ownKeys==`function`?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};function a(e){console&&console.warn&&console.warn(e)}var o=Number.isNaN||function(e){return e!==e};function s(){s.init.call(this)}t.exports=s,t.exports.once=y,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var c=10;function l(e){if(typeof e!=`function`)throw TypeError(`The "listener" argument must be of type Function. Received type `+typeof e)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return c},set:function(e){if(typeof e!=`number`||e<0||o(e))throw RangeError(`The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received `+e+`.`);c=e}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(typeof e!=`number`||e<0||o(e))throw RangeError(`The value of "n" is out of range. It must be a non-negative number. Received `+e+`.`);return this._maxListeners=e,this};function u(e){return e._maxListeners===void 0?s.defaultMaxListeners:e._maxListeners}s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(e){for(var t=[],n=1;n0&&(o=t[0]),o instanceof Error)throw o;var s=Error(`Unhandled error.`+(o?` (`+o.message+`)`:``));throw s.context=o,s}var c=a[e];if(c===void 0)return!1;if(typeof c==`function`)r(c,this,t);else for(var l=c.length,u=g(c,l),n=0;n0&&s.length>i&&!s.warned){s.warned=!0;var c=Error(`Possible EventEmitter memory leak detected. `+s.length+` `+String(t)+` listeners added. Use emitter.setMaxListeners() to increase limit`);c.name=`MaxListenersExceededWarning`,c.emitter=e,c.type=t,c.count=s.length,a(c)}return e}s.prototype.addListener=function(e,t){return d(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return d(this,e,t,!0)};function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=f.bind(r);return i.listener=n,r.wrapFn=i,i}s.prototype.once=function(e,t){return l(t),this.on(e,p(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return l(t),this.prependListener(e,p(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,r,i,a,o;if(l(t),r=this._events,r===void 0||(n=r[e],n===void 0))return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(`removeListener`,e,n.listener||t));else if(typeof n!=`function`){for(i=-1,a=n.length-1;a>=0;a--)if(n[a]===t||n[a].listener===t){o=n[a].listener,i=a;break}if(i<0)return this;i===0?n.shift():_(n,i),n.length===1&&(r[e]=n[0]),r.removeListener!==void 0&&this.emit(`removeListener`,e,o||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n=this._events,r;if(n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),a;for(r=0;r=0;r--)this.removeListener(e,t[r]);return this};function m(e,t,n){var r=e._events;if(r===void 0)return[];var i=r[t];return i===void 0?[]:typeof i==`function`?n?[i.listener||i]:[i]:n?v(i):g(i,i.length)}s.prototype.listeners=function(e){return m(this,e,!0)},s.prototype.rawListeners=function(e){return m(this,e,!1)},s.listenerCount=function(e,t){return typeof e.listenerCount==`function`?e.listenerCount(t):h.call(e,t)},s.prototype.listenerCount=h;function h(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n==`function`)return 1;if(n!==void 0)return n.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]};function g(e,t){for(var n=Array(t),r=0;r{e.byteLength=c,e.toByteArray=u,e.fromByteArray=p;for(var t=[],n=[],r=typeof Uint8Array<`u`?Uint8Array:Array,i=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,a=0,o=i.length;a0)throw Error(`Invalid string. Length must be a multiple of 4`);var n=e.indexOf(`=`);n===-1&&(n=t);var r=n===t?0:4-n%4;return[n,r]}function c(e){var t=s(e),n=t[0],r=t[1];return(n+r)*3/4-r}function l(e,t,n){return(t+n)*3/4-n}function u(e){for(var t,i=s(e),a=i[0],o=i[1],c=new r(l(e,a,o)),u=0,d=o>0?a-4:a,f=0;f>16&255,c[u++]=t>>8&255,c[u++]=t&255;return o===2&&(t=n[e.charCodeAt(f)]<<2|n[e.charCodeAt(f+1)]>>4,c[u++]=t&255),o===1&&(t=n[e.charCodeAt(f)]<<10|n[e.charCodeAt(f+1)]<<4|n[e.charCodeAt(f+2)]>>2,c[u++]=t>>8&255,c[u++]=t&255),c}function d(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function f(e,t,n){for(var r,i=[],a=t;ac?c:s+o));return i===1?(n=e[r-1],a.push(t[n>>2]+t[n<<4&63]+`==`)):i===2&&(n=(e[r-2]<<8)+e[r-1],a.push(t[n>>10]+t[n>>4&63]+t[n<<2&63]+`=`)),a.join(``)}})),L=e((e=>{e.read=function(e,t,n,r,i){var a,o,s=i*8-r-1,c=(1<>1,u=-7,d=n?i-1:0,f=n?-1:1,p=e[t+d];for(d+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=a*256+e[t+d],d+=f,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=r;u>0;o=o*256+e[t+d],d+=f,u-=8);if(a===0)a=1-l;else if(a===c)return o?NaN:(p?-1:1)*(1/0);else o+=2**r,a-=l;return(p?-1:1)*o*2**(a-r)},e.write=function(e,t,n,r,i,a){var o,s,c,l=a*8-i-1,u=(1<>1,f=i===23?2**-24-2**-77:0,p=r?0:a-1,m=r?1:-1,h=+(t<0||t===0&&1/t<0);for(t=Math.abs(t),isNaN(t)||t===1/0?(s=+!!isNaN(t),o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(c=2**-o)<1&&(o--,c*=2),o+d>=1?t+=f/c:t+=f*2**(1-d),t*c>=2&&(o++,c/=2),o+d>=u?(s=0,o=u):o+d>=1?(s=(t*c-1)*2**i,o+=d):(s=t*2**(d-1)*2**i,o=0));i>=8;e[n+p]=s&255,p+=m,s/=256,i-=8);for(o=o<0;e[n+p]=o&255,p+=m,o/=256,l-=8);e[n+p-m]|=h*128}})),R=e((e=>{var t=I(),n=L(),r=typeof Symbol==`function`&&typeof Symbol.for==`function`?Symbol.for(`nodejs.util.inspect.custom`):null;e.Buffer=s,e.SlowBuffer=_,e.INSPECT_MAX_BYTES=50;var i=2147483647;e.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=a(),!s.TYPED_ARRAY_SUPPORT&&typeof console<`u`&&typeof console.error==`function`&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function a(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch{return!1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(e){if(e>i)throw RangeError(`The value "`+e+`" is invalid for option "size"`);var t=new Uint8Array(e);return Object.setPrototypeOf(t,s.prototype),t}function s(e,t,n){if(typeof e==`number`){if(typeof t==`string`)throw TypeError(`The "string" argument must be of type string. Received type number`);return d(e)}return c(e,t,n)}s.poolSize=8192;function c(e,t,n){if(typeof e==`string`)return f(e,t);if(ArrayBuffer.isView(e))return p(e);if(e==null)throw TypeError(`The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type `+typeof e);if(J(e,ArrayBuffer)||e&&J(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<`u`&&(J(e,SharedArrayBuffer)||e&&J(e.buffer,SharedArrayBuffer)))return m(e,t,n);if(typeof e==`number`)throw TypeError(`The "value" argument must not be of type number. Received type number`);var r=e.valueOf&&e.valueOf();if(r!=null&&r!==e)return s.from(r,t,n);var i=h(e);if(i)return i;if(typeof Symbol<`u`&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==`function`)return s.from(e[Symbol.toPrimitive](`string`),t,n);throw TypeError(`The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type `+typeof e)}s.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function l(e){if(typeof e!=`number`)throw TypeError(`"size" argument must be of type number`);if(e<0)throw RangeError(`The value "`+e+`" is invalid for option "size"`)}function u(e,t,n){return l(e),e<=0||t===void 0?o(e):typeof n==`string`?o(e).fill(t,n):o(e).fill(t)}s.alloc=function(e,t,n){return u(e,t,n)};function d(e){return l(e),o(e<0?0:g(e)|0)}s.allocUnsafe=function(e){return d(e)},s.allocUnsafeSlow=function(e){return d(e)};function f(e,t){if((typeof t!=`string`||t===``)&&(t=`utf8`),!s.isEncoding(t))throw TypeError(`Unknown encoding: `+t);var n=v(e,t)|0,r=o(n),i=r.write(e,t);return i!==n&&(r=r.slice(0,i)),r}function p(e){for(var t=e.length<0?0:g(e.length)|0,n=o(t),r=0;r=i)throw RangeError(`Attempt to allocate Buffer larger than maximum size: 0x`+i.toString(16)+` bytes`);return e|0}function _(e){return+e!=e&&(e=0),s.alloc(+e)}s.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==s.prototype},s.compare=function(e,t){if(J(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),J(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(e)||!s.isBuffer(t))throw TypeError(`The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array`);if(e===t)return 0;for(var n=e.length,r=t.length,i=0,a=Math.min(n,r);i2&&arguments[2]===!0;if(!r&&n===0)return 0;for(var i=!1;;)switch(t){case`ascii`:case`latin1`:case`binary`:return n;case`utf8`:case`utf-8`:return K(e).length;case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return n*2;case`hex`:return n>>>1;case`base64`:return ne(e).length;default:if(i)return r?-1:K(e).length;t=(``+t).toLowerCase(),i=!0}}s.byteLength=v;function y(e,t,n){var r=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((n===void 0||n>this.length)&&(n=this.length),n<=0)||(n>>>=0,t>>>=0,n<=t))return``;for(e||=`utf8`;;)switch(e){case`hex`:return F(this,t,n);case`utf8`:case`utf-8`:return A(this,t,n);case`ascii`:return N(this,t,n);case`latin1`:case`binary`:return P(this,t,n);case`base64`:return k(this,t,n);case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return R(this,t,n);default:if(r)throw TypeError(`Unknown encoding: `+e);e=(e+``).toLowerCase(),r=!0}}s.prototype._isBuffer=!0;function b(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw RangeError(`Buffer size must be a multiple of 16-bits`);for(var t=0;tn&&(t+=` ... `),``},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(e,t,n,r,i){if(J(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw TypeError(`The "target" argument must be one of type Buffer or Uint8Array. Received type `+typeof e);if(t===void 0&&(t=0),n===void 0&&(n=e?e.length:0),r===void 0&&(r=0),i===void 0&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw RangeError(`out of range index`);if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var a=i-r,o=n-t,c=Math.min(a,o),l=this.slice(r,i),u=e.slice(t,n),d=0;d2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,Y(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(i)n=0;else return-1}if(typeof t==`string`&&(t=s.from(t,r)),s.isBuffer(t))return t.length===0?-1:S(e,t,n,r,i);if(typeof t==`number`)return t&=255,typeof Uint8Array.prototype.indexOf==`function`?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):S(e,[t],n,r,i);throw TypeError(`val must be string, number or Buffer`)}function S(e,t,n,r,i){var a=1,o=e.length,s=t.length;if(r!==void 0&&(r=String(r).toLowerCase(),r===`ucs2`||r===`ucs-2`||r===`utf16le`||r===`utf-16le`)){if(e.length<2||t.length<2)return-1;a=2,o/=2,s/=2,n/=2}function c(e,t){return a===1?e[t]:e.readUInt16BE(t*a)}var l;if(i){var u=-1;for(l=n;lo&&(n=o-s),l=n;l>=0;l--){for(var d=!0,f=0;fi&&(r=i)):r=i;var a=t.length;r>a/2&&(r=a/2);for(var o=0;o>>=0,isFinite(n)?(n>>>=0,r===void 0&&(r=`utf8`)):(r=n,n=void 0);else throw Error(`Buffer.write(string, encoding, offset[, length]) is no longer supported`);var i=this.length-t;if((n===void 0||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw RangeError(`Attempt to write outside buffer bounds`);r||=`utf8`;for(var a=!1;;)switch(r){case`hex`:return C(this,e,t,n);case`utf8`:case`utf-8`:return w(this,e,t,n);case`ascii`:return T(this,e,t,n);case`latin1`:case`binary`:return E(this,e,t,n);case`base64`:return D(this,e,t,n);case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return O(this,e,t,n);default:if(a)throw TypeError(`Unknown encoding: `+r);r=(``+r).toLowerCase(),a=!0}},s.prototype.toJSON=function(){return{type:`Buffer`,data:Array.prototype.slice.call(this._arr||this,0)}};function k(e,n,r){return n===0&&r===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(n,r))}function A(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:a>223?3:a>191?2:1;if(i+s<=n){var c,l,u,d;switch(s){case 1:a<128&&(o=a);break;case 2:c=e[i+1],(c&192)==128&&(d=(a&31)<<6|c&63,d>127&&(o=d));break;case 3:c=e[i+1],l=e[i+2],(c&192)==128&&(l&192)==128&&(d=(a&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(o=d));break;case 4:c=e[i+1],l=e[i+2],u=e[i+3],(c&192)==128&&(l&192)==128&&(u&192)==128&&(d=(a&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(o=d))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|o&1023),r.push(o),i+=s}return M(r)}var j=4096;function M(e){var t=e.length;if(t<=j)return String.fromCharCode.apply(String,e);for(var n=``,r=0;rr)&&(n=r);for(var i=``,a=t;an&&(e=n),t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),tn)throw RangeError(`Trying to access beyond buffer length`)}s.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e],i=1,a=0;++a>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},s.prototype.readUInt8=function(e,t){return e>>>=0,t||z(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return e>>>=0,t||z(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return e>>>=0,t||z(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return e>>>=0,t||z(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216},s.prototype.readUInt32BE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e],i=1,a=0;++a=i&&(r-=2**(8*t)),r},s.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=t,i=1,a=this[e+--r];r>0&&(i*=256);)a+=this[e+--r]*i;return i*=128,a>=i&&(a-=2**(8*t)),a},s.prototype.readInt8=function(e,t){return e>>>=0,t||z(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]},s.prototype.readInt16LE=function(e,t){e>>>=0,t||z(e,2,this.length);var n=this[e]|this[e+1]<<8;return n&32768?n|4294901760:n},s.prototype.readInt16BE=function(e,t){e>>>=0,t||z(e,2,this.length);var n=this[e+1]|this[e]<<8;return n&32768?n|4294901760:n},s.prototype.readInt32LE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return e>>>=0,t||z(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e>>>=0,t||z(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e>>>=0,t||z(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e>>>=0,t||z(e,8,this.length),n.read(this,e,!1,52,8)};function B(e,t,n,r,i,a){if(!s.isBuffer(e))throw TypeError(`"buffer" argument must be a Buffer instance`);if(t>i||te.length)throw RangeError(`Index out of range`)}s.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){var i=2**(8*n)-1;B(this,e,t,n,i,0)}var a=1,o=0;for(this[t]=e&255;++o>>=0,n>>>=0,!r){var i=2**(8*n)-1;B(this,e,t,n,i,0)}var a=n-1,o=1;for(this[t+a]=e&255;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,1,255,0),this[t]=e&255,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=2**(8*n-1);B(this,e,t,n,i-1,-i)}var a=0,o=1,s=0;for(this[t]=e&255;++a>0)-s&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=2**(8*n-1);B(this,e,t,n,i-1,-i)}var a=n-1,o=1,s=0;for(this[t+a]=e&255;--a>=0&&(o*=256);)e<0&&s===0&&this[t+a+1]!==0&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function V(e,t,n,r,i,a){if(n+r>e.length||n<0)throw RangeError(`Index out of range`)}function H(e,t,r,i,a){return t=+t,r>>>=0,a||V(e,t,r,4,34028234663852886e22,-34028234663852886e22),n.write(e,t,r,i,23,4),r+4}s.prototype.writeFloatLE=function(e,t,n){return H(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return H(this,e,t,!1,n)};function U(e,t,r,i,a){return t=+t,r>>>=0,a||V(e,t,r,8,17976931348623157e292,-17976931348623157e292),n.write(e,t,r,i,52,8),r+8}s.prototype.writeDoubleLE=function(e,t,n){return U(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return U(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(!s.isBuffer(e))throw TypeError(`argument should be a Buffer`);if(n||=0,!r&&r!==0&&(r=this.length),t>=e.length&&(t=e.length),t||=0,r>0&&r=this.length)throw RangeError(`Index out of range`);if(r<0)throw RangeError(`sourceEnd out of bounds`);r>this.length&&(r=this.length),e.length-t=0;--a)e[a+t]=this[a+n];else Uint8Array.prototype.set.call(e,this.subarray(n,r),t);return i},s.prototype.fill=function(e,t,n,r){if(typeof e==`string`){if(typeof t==`string`?(r=t,t=0,n=this.length):typeof n==`string`&&(r=n,n=this.length),r!==void 0&&typeof r!=`string`)throw TypeError(`encoding must be a string`);if(typeof r==`string`&&!s.isEncoding(r))throw TypeError(`Unknown encoding: `+r);if(e.length===1){var i=e.charCodeAt(0);(r===`utf8`&&i<128||r===`latin1`)&&(e=i)}}else typeof e==`number`?e&=255:typeof e==`boolean`&&(e=Number(e));if(t<0||this.length>>=0,n=n===void 0?this.length:n>>>0,e||=0;var a;if(typeof e==`number`)for(a=t;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if(--t<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,n&63|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,n&63|128)}else if(n<1114112){if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,n&63|128)}else throw Error(`Invalid code point`)}return a}function ee(e){for(var t=[],n=0;n>8,i=n%256,a.push(i),a.push(r);return a}function ne(e){return t.toByteArray(G(e))}function q(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function J(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function Y(e){return e!==e}var X=(function(){for(var e=`0123456789abcdef`,t=Array(256),n=0;n<16;++n)for(var r=n*16,i=0;i<16;++i)t[r+i]=e[n]+e[i];return t})()})),z=t(),B=F(),V=R(),H={statSync:()=>{},isFileReadStream(e){return!1},runtime:`browser`},U=e=>{if(e==null)return 0;if(typeof e==`string`)return V.Buffer.byteLength(e);if(typeof e.byteLength==`number`)return e.byteLength;if(typeof e.length==`number`)return e.length;if(typeof e.size==`number`)return e.size;if(typeof e.start==`number`&&typeof e.end==`number`)return e.end+1-e.start;if(H.isFileReadStream(e))try{return H.statSync(e.path).size}catch{return}},W;(function(e){e.EMPTY_INPUT=`a null or undefined Body`,e.CONTENT_LENGTH=`the ContentLength property of the params set by the caller`,e.STRING_LENGTH=`the encoded byte length of the Body string`,e.TYPED_ARRAY=`the byteLength of a typed byte array such as Uint8Array`,e.LENGTH=`the value of Body.length`,e.SIZE=`the value of Body.size`,e.START_END_DIFF=`the numeric difference between Body.start and Body.end`,e.STAT=`the size of the file given by Body.path on disk as reported by statSync`})(W||={});var G=(e,t)=>{if(t!=null)return W.CONTENT_LENGTH;if(e==null)return W.EMPTY_INPUT;if(typeof e==`string`)return W.STRING_LENGTH;if(typeof e.byteLength==`number`)return W.TYPED_ARRAY;if(typeof e.length==`number`)return W.LENGTH;if(typeof e.size==`number`)return W.SIZE;if(typeof e.start==`number`&&typeof e.end==`number`)return W.START_END_DIFF;if(H.isFileReadStream(e))try{return H.statSync(e.path).size,W.STAT}catch{return}},K=e(((e,t)=>{t.exports=typeof Object.create==`function`?function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}})),ee=e(((e,t)=>{t.exports=F().EventEmitter})),te=e(((e,t)=>{t.exports={}})),ne=e(((e,t)=>{function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function r(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:`unshift`,value:function(e){var t={data:e,next:this.head};this.length===0&&(this.tail=t),this.head=t,++this.length}},{key:`shift`,value:function(){if(this.length!==0){var e=this.head.data;return this.head=this.length===1?this.tail=null:this.head.next,--this.length,e}}},{key:`clear`,value:function(){this.head=this.tail=null,this.length=0}},{key:`join`,value:function(e){if(this.length===0)return``;for(var t=this.head,n=``+t.data;t=t.next;)n+=e+t.data;return n}},{key:`concat`,value:function(e){if(this.length===0)return u.alloc(0);for(var t=u.allocUnsafe(e>>>0),n=this.head,r=0;n;)p(n.data,t,r),r+=n.data.length,n=n.next;return t}},{key:`consume`,value:function(e,t){var n;return ei.length?i.length:e;if(a===i.length?r+=i:r+=i.slice(0,e),e-=a,e===0){a===i.length?(++n,this.head=t.next?t.next:this.tail=null):(this.head=t,t.data=i.slice(a));break}++n}return this.length-=n,r}},{key:`_getBuffer`,value:function(e){var t=u.allocUnsafe(e),n=this.head,r=1;for(n.data.copy(t),e-=n.data.length;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,a),e-=a,e===0){a===i.length?(++r,this.head=n.next?n.next:this.tail=null):(this.head=n,n.data=i.slice(a));break}++r}return this.length-=r,t}},{key:f,value:function(e,t){return d(this,r(r({},t),{},{depth:0,customInspect:!1}))}}]),e}()})),q=e(((e,t)=>{function n(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,s=this._writableState&&this._writableState.destroyed;return a||s?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(o,this,e)):process.nextTick(o,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?n._writableState?n._writableState.errorEmitted?process.nextTick(i,n):(n._writableState.errorEmitted=!0,process.nextTick(r,n,e)):process.nextTick(r,n,e):t?(process.nextTick(i,n),t(e)):process.nextTick(i,n)}),this)}function r(e,t){o(e,t),i(e)}function i(e){(!e._writableState||e._writableState.emitClose)&&(!e._readableState||e._readableState.emitClose)&&e.emit(`close`)}function a(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function o(e,t){e.emit(`error`,t)}function s(e,t){var n=e._readableState,r=e._writableState;n&&n.autoDestroy||r&&r.autoDestroy?e.destroy(t):e.emit(`error`,t)}t.exports={destroy:n,undestroy:a,errorOrDestroy:s}})),J=e(((e,t)=>{function n(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var r={};function i(e,t,i){i||=Error;function a(e,n,r){return typeof t==`string`?t:t(e,n,r)}var o=function(e){n(t,e);function t(t,n,r){return e.call(this,a(t,n,r))||this}return t}(i);o.prototype.name=i.name,o.prototype.code=e,r[e]=o}function a(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map(function(e){return String(e)}),n>2?`one of ${t} ${e.slice(0,n-1).join(`, `)}, or `+e[n-1]:n===2?`one of ${t} ${e[0]} or ${e[1]}`:`of ${t} ${e[0]}`}return`of ${t} ${String(e)}`}function o(e,t,n){return e.substr(!n||n<0?0:+n,t.length)===t}function s(e,t,n){return(n===void 0||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}function c(e,t,n){return typeof n!=`number`&&(n=0),n+t.length>e.length?!1:e.indexOf(t,n)!==-1}i(`ERR_INVALID_OPT_VALUE`,function(e,t){return`The value "`+t+`" is invalid for option "`+e+`"`},TypeError),i(`ERR_INVALID_ARG_TYPE`,function(e,t,n){var r;typeof t==`string`&&o(t,`not `)?(r=`must not be`,t=t.replace(/^not /,``)):r=`must be`;var i=s(e,` argument`)?`The ${e} ${r} ${a(t,`type`)}`:`The "${e}" ${c(e,`.`)?`property`:`argument`} ${r} ${a(t,`type`)}`;return i+=`. Received type ${typeof n}`,i},TypeError),i(`ERR_STREAM_PUSH_AFTER_EOF`,`stream.push() after EOF`),i(`ERR_METHOD_NOT_IMPLEMENTED`,function(e){return`The `+e+` method is not implemented`}),i(`ERR_STREAM_PREMATURE_CLOSE`,`Premature close`),i(`ERR_STREAM_DESTROYED`,function(e){return`Cannot call `+e+` after a stream was destroyed`}),i(`ERR_MULTIPLE_CALLBACK`,`Callback called multiple times`),i(`ERR_STREAM_CANNOT_PIPE`,`Cannot pipe, not readable`),i(`ERR_STREAM_WRITE_AFTER_END`,`write after end`),i(`ERR_STREAM_NULL_VALUES`,`May not write null values to stream`,TypeError),i(`ERR_UNKNOWN_ENCODING`,function(e){return`Unknown encoding: `+e},TypeError),i(`ERR_STREAM_UNSHIFT_AFTER_END_EVENT`,`stream.unshift() after end event`),t.exports.codes=r})),Y=e(((e,t)=>{var n=J().codes.ERR_INVALID_OPT_VALUE;function r(e,t,n){return e.highWaterMark==null?t?e[n]:null:e.highWaterMark}function i(e,t,i,a){var o=r(t,a,i);if(o!=null){if(!(isFinite(o)&&Math.floor(o)===o)||o<0)throw new n(a?i:`highWaterMark`,o);return Math.floor(o)}return e.objectMode?16:16384}t.exports={getHighWaterMark:i}})),X=e(((e,t)=>{t.exports=n;function n(e,t){if(r(`noDeprecation`))return e;var n=!1;function i(){if(!n){if(r(`throwDeprecation`))throw Error(t);r(`traceDeprecation`)?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}return i}function r(e){try{if(!global.localStorage)return!1}catch{return!1}var t=global.localStorage[e];return t!=null&&String(t).toLowerCase()===`true`}})),Z=e(((e,t)=>{t.exports=T;function n(e){var t=this;this.next=null,this.entry=null,this.finish=function(){U(t,e)}}var r;T.WritableState=C;var i={deprecate:X()},a=ee(),o=R().Buffer,s=(typeof global<`u`?global:typeof window<`u`?window:typeof self<`u`?self:{}).Uint8Array||function(){};function c(e){return o.from(e)}function l(e){return o.isBuffer(e)||e instanceof s}var u=q(),d=Y().getHighWaterMark,f=J().codes,p=f.ERR_INVALID_ARG_TYPE,m=f.ERR_METHOD_NOT_IMPLEMENTED,h=f.ERR_MULTIPLE_CALLBACK,g=f.ERR_STREAM_CANNOT_PIPE,_=f.ERR_STREAM_DESTROYED,v=f.ERR_STREAM_NULL_VALUES,y=f.ERR_STREAM_WRITE_AFTER_END,b=f.ERR_UNKNOWN_ENCODING,x=u.errorOrDestroy;K()(T,a);function S(){}function C(e,t,i){r||=Q(),e||={},typeof i!=`boolean`&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=d(this,e,`writableHighWaterMark`,i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=e.decodeStrings===!1;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||`utf8`,this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){N(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}C.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},(function(){try{Object.defineProperty(C.prototype,"buffer",{get:i.deprecate(function(){return this.getBuffer()},`_writableState.buffer is deprecated. Use _writableState.getBuffer instead.`,`DEP0003`)})}catch{}})();var w;typeof Symbol==`function`&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==`function`?(w=Function.prototype[Symbol.hasInstance],Object.defineProperty(T,Symbol.hasInstance,{value:function(e){return w.call(this,e)?!0:this===T&&e&&e._writableState instanceof C}})):w=function(e){return e instanceof this};function T(e){r||=Q();var t=this instanceof r;if(!t&&!w.call(T,this))return new T(e);this._writableState=new C(e,this,t),this.writable=!0,e&&(typeof e.write==`function`&&(this._write=e.write),typeof e.writev==`function`&&(this._writev=e.writev),typeof e.destroy==`function`&&(this._destroy=e.destroy),typeof e.final==`function`&&(this._final=e.final)),a.call(this)}T.prototype.pipe=function(){x(this,new g)};function E(e,t){var n=new y;x(e,n),process.nextTick(t,n)}function D(e,t,n,r){var i;return n===null?i=new v:typeof n!=`string`&&!t.objectMode&&(i=new p(`chunk`,[`string`,`Buffer`],n)),!i||(x(e,i),process.nextTick(r,i),!1)}T.prototype.write=function(e,t,n){var r=this._writableState,i=!1,a=!r.objectMode&&l(e);return a&&!o.isBuffer(e)&&(e=c(e)),typeof t==`function`&&(n=t,t=null),a?t=`buffer`:t||=r.defaultEncoding,typeof n!=`function`&&(n=S),r.ending?E(this,n):(a||D(this,r,e,n))&&(r.pendingcb++,i=k(this,r,a,e,t,n)),i},T.prototype.cork=function(){this._writableState.corked++},T.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,!e.writing&&!e.corked&&!e.bufferProcessing&&e.bufferedRequest&&I(this,e))},T.prototype.setDefaultEncoding=function(e){if(typeof e==`string`&&(e=e.toLowerCase()),!([`hex`,`utf8`,`utf-8`,`ascii`,`binary`,`base64`,`ucs2`,`ucs-2`,`utf16le`,`utf-16le`,`raw`].indexOf((e+``).toLowerCase())>-1))throw new b(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(T.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function O(e,t,n){return!e.objectMode&&e.decodeStrings!==!1&&typeof t==`string`&&(t=o.from(t,n)),t}Object.defineProperty(T.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function k(e,t,n,r,i,a){if(!n){var o=O(t,r,i);r!==o&&(n=!0,i=`buffer`,r=o)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length{var n=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};t.exports=c;var r=se(),i=Z();K()(c,r);for(var a=n(i.prototype),o=0;o{var n=R(),r=n.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=a);function a(e,t,n){return r(e,t,n)}a.prototype=Object.create(r.prototype),i(r,a),a.from=function(e,t,n){if(typeof e==`number`)throw TypeError(`Argument must not be a number`);return r(e,t,n)},a.alloc=function(e,t,n){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);var i=r(e);return t===void 0?i.fill(0):typeof n==`string`?i.fill(t,n):i.fill(t),i},a.allocUnsafe=function(e){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);return r(e)},a.allocUnsafeSlow=function(e){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);return n.SlowBuffer(e)}})),ie=e((e=>{var t=re().Buffer,n=t.isEncoding||function(e){switch(e=``+e,e&&e.toLowerCase()){case`hex`:case`utf8`:case`utf-8`:case`ascii`:case`binary`:case`base64`:case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:case`raw`:return!0;default:return!1}};function r(e){if(!e)return`utf8`;for(var t;;)switch(e){case`utf8`:case`utf-8`:return`utf8`;case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return`utf16le`;case`latin1`:case`binary`:return`latin1`;case`base64`:case`ascii`:case`hex`:return e;default:if(t)return;e=(``+e).toLowerCase(),t=!0}}function i(e){var i=r(e);if(typeof i!=`string`&&(t.isEncoding===n||!n(e)))throw Error(`Unknown encoding: `+e);return i||e}e.StringDecoder=a;function a(e){this.encoding=i(e);var n;switch(this.encoding){case`utf16le`:this.text=f,this.end=p,n=4;break;case`utf8`:this.fillLast=l,n=4;break;case`base64`:this.text=m,this.end=h,n=3;break;default:this.write=g,this.end=_;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=t.allocUnsafe(n)}a.prototype.write=function(e){if(e.length===0)return``;var t,n;if(this.lastNeed){if(t=this.fillLast(e),t===void 0)return``;n=this.lastNeed,this.lastNeed=0}else n=0;return n>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e,t,n){var r=t.length-1;if(r=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(i===2?i=0:e.lastNeed=i-3),i):0))}function c(e,t,n){if((t[0]&192)!=128)return e.lastNeed=0,`�`;if(e.lastNeed>1&&t.length>1){if((t[1]&192)!=128)return e.lastNeed=1,`�`;if(e.lastNeed>2&&t.length>2&&(t[2]&192)!=128)return e.lastNeed=2,`�`}}function l(e){var t=this.lastTotal-this.lastNeed,n=c(this,e,t);if(n!==void 0)return n;if(this.lastNeed<=e.length)return e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,t,0,e.length),this.lastNeed-=e.length}function u(e,t){var n=s(this,e,t);if(!this.lastNeed)return e.toString(`utf8`,t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString(`utf8`,t,r)}function d(e){var t=e&&e.length?this.write(e):``;return this.lastNeed?t+`�`:t}function f(e,t){if((e.length-t)%2==0){var n=e.toString(`utf16le`,t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(`utf16le`,t,e.length-1)}function p(e){var t=e&&e.length?this.write(e):``;if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(`utf16le`,0,n)}return t}function m(e,t){var n=(e.length-t)%3;return n===0?e.toString(`base64`,t):(this.lastNeed=3-n,this.lastTotal=3,n===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(`base64`,t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):``;return this.lastNeed?t+this.lastChar.toString(`base64`,0,3-this.lastNeed):t}function g(e){return e.toString(this.encoding)}function _(e){return e&&e.length?this.write(e):``}})),$=e(((e,t)=>{var n=J().codes.ERR_STREAM_PREMATURE_CLOSE;function r(e){var t=!1;return function(){if(!t){t=!0;var n=[...arguments];e.apply(this,n)}}}function i(){}function a(e){return e.setHeader&&typeof e.abort==`function`}function o(e,t,s){if(typeof t==`function`)return o(e,null,t);t||={},s=r(s||i);var c=t.readable||t.readable!==!1&&e.readable,l=t.writable||t.writable!==!1&&e.writable,u=function(){e.writable||f()},d=e._writableState&&e._writableState.finished,f=function(){l=!1,d=!0,c||s.call(e)},p=e._readableState&&e._readableState.endEmitted,m=function(){c=!1,p=!0,l||s.call(e)},h=function(t){s.call(e,t)},g=function(){var t;if(c&&!p)return(!e._readableState||!e._readableState.ended)&&(t=new n),s.call(e,t);if(l&&!d)return(!e._writableState||!e._writableState.ended)&&(t=new n),s.call(e,t)},_=function(){e.req.on(`finish`,f)};return a(e)?(e.on(`complete`,f),e.on(`abort`,g),e.req?_():e.on(`request`,_)):l&&!e._writableState&&(e.on(`end`,u),e.on(`close`,u)),e.on(`end`,m),e.on(`finish`,f),t.error!==!1&&e.on(`error`,h),e.on(`close`,g),function(){e.removeListener(`complete`,f),e.removeListener(`abort`,g),e.removeListener(`request`,_),e.req&&e.req.removeListener(`finish`,f),e.removeListener(`end`,u),e.removeListener(`close`,u),e.removeListener(`finish`,f),e.removeListener(`end`,m),e.removeListener(`error`,h),e.removeListener(`close`,g)}}t.exports=o})),ae=e(((e,t)=>{var n;function r(e,t,n){return t=i(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){var t=a(e,`string`);return typeof t==`symbol`?t:String(t)}function a(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var o=$(),s=Symbol(`lastResolve`),c=Symbol(`lastReject`),l=Symbol(`error`),u=Symbol(`ended`),d=Symbol(`lastPromise`),f=Symbol(`handlePromise`),p=Symbol(`stream`);function m(e,t){return{value:e,done:t}}function h(e){var t=e[s];if(t!==null){var n=e[p].read();n!==null&&(e[d]=null,e[s]=null,e[c]=null,t(m(n,!1)))}}function g(e){process.nextTick(h,e)}function _(e,t){return function(n,r){e.then(function(){if(t[u]){n(m(void 0,!0));return}t[f](n,r)},r)}}var v=Object.getPrototypeOf(function(){}),y=Object.setPrototypeOf((n={get stream(){return this[p]},next:function(){var e=this,t=this[l];if(t!==null)return Promise.reject(t);if(this[u])return Promise.resolve(m(void 0,!0));if(this[p].destroyed)return new Promise(function(t,n){process.nextTick(function(){e[l]?n(e[l]):t(m(void 0,!0))})});var n=this[d],r;if(n)r=new Promise(_(n,this));else{var i=this[p].read();if(i!==null)return Promise.resolve(m(i,!1));r=new Promise(this[f])}return this[d]=r,r}},r(n,Symbol.asyncIterator,function(){return this}),r(n,`return`,function(){var e=this;return new Promise(function(t,n){e[p].destroy(null,function(e){if(e){n(e);return}t(m(void 0,!0))})})}),n),v);t.exports=function(e){var t,n=Object.create(y,(t={},r(t,p,{value:e,writable:!0}),r(t,s,{value:null,writable:!0}),r(t,c,{value:null,writable:!0}),r(t,l,{value:null,writable:!0}),r(t,u,{value:e._readableState.endEmitted,writable:!0}),r(t,f,{value:function(e,t){var r=n[p].read();r?(n[d]=null,n[s]=null,n[c]=null,e(m(r,!1))):(n[s]=e,n[c]=t)},writable:!0}),t));return n[d]=null,o(e,function(e){if(e&&e.code!==`ERR_STREAM_PREMATURE_CLOSE`){var t=n[c];t!==null&&(n[d]=null,n[s]=null,n[c]=null,t(e)),n[l]=e;return}var r=n[s];r!==null&&(n[d]=null,n[s]=null,n[c]=null,r(m(void 0,!0))),n[u]=!0}),e.on(`readable`,g.bind(null,n)),n}})),oe=e(((e,t)=>{t.exports=function(){throw Error(`Readable.from is not available in the browser`)}})),se=e(((e,t)=>{t.exports=E;var n;E.ReadableState=T,F().EventEmitter;var r=function(e,t){return e.listeners(t).length},i=ee(),a=R().Buffer,o=(typeof global<`u`?global:typeof window<`u`?window:typeof self<`u`?self:{}).Uint8Array||function(){};function s(e){return a.from(e)}function c(e){return a.isBuffer(e)||e instanceof o}var l=te(),u=l&&l.debuglog?l.debuglog(`stream`):function(){},d=ne(),f=q(),p=Y().getHighWaterMark,m=J().codes,h=m.ERR_INVALID_ARG_TYPE,g=m.ERR_STREAM_PUSH_AFTER_EOF,_=m.ERR_METHOD_NOT_IMPLEMENTED,v=m.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,y,b,x;K()(E,i);var S=f.errorOrDestroy,C=[`error`,`close`,`destroy`,`pause`,`resume`];function w(e,t,n){if(typeof e.prependListener==`function`)return e.prependListener(t,n);!e._events||!e._events[t]?e.on(t,n):Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]}function T(e,t,r){n||=Q(),e||={},typeof r!=`boolean`&&(r=t instanceof n),this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=p(this,e,`readableHighWaterMark`,r),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||`utf8`,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(y||=ie().StringDecoder,this.decoder=new y(e.encoding),this.encoding=e.encoding)}function E(e){if(n||=Q(),!(this instanceof E))return new E(e);var t=this instanceof n;this._readableState=new T(e,this,t),this.readable=!0,e&&(typeof e.read==`function`&&(this._read=e.read),typeof e.destroy==`function`&&(this._destroy=e.destroy)),i.call(this)}Object.defineProperty(E.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState!==void 0&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),E.prototype.destroy=f.destroy,E.prototype._undestroy=f.undestroy,E.prototype._destroy=function(e,t){t(e)},E.prototype.push=function(e,t){var n=this._readableState,r;return n.objectMode?r=!0:typeof e==`string`&&(t||=n.defaultEncoding,t!==n.encoding&&(e=a.from(e,t),t=``),r=!0),D(this,e,t,!1,r)},E.prototype.unshift=function(e){return D(this,e,null,!0,!1)};function D(e,t,n,r,i){u(`readableAddChunk`,t);var o=e._readableState;if(t===null)o.reading=!1,N(e,o);else{var c;if(i||(c=k(o,t)),c)S(e,c);else if(o.objectMode||t&&t.length>0){if(typeof t!=`string`&&!o.objectMode&&Object.getPrototypeOf(t)!==a.prototype&&(t=s(t)),r)o.endEmitted?S(e,new v):O(e,o,t,!0);else if(o.ended)S(e,new g);else if(o.destroyed)return!1;else o.reading=!1,o.decoder&&!n?(t=o.decoder.write(t),o.objectMode||t.length!==0?O(e,o,t,!1):L(e,o)):O(e,o,t,!1)}else r||(o.reading=!1,L(e,o))}return!o.ended&&(o.length=A?e=A:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function M(e,t){return e<=0||t.length===0&&t.ended?0:t.objectMode?1:e===e?(e>t.highWaterMark&&(t.highWaterMark=j(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0)):t.flowing&&t.length?t.buffer.head.data.length:t.length}E.prototype.read=function(e){u(`read`,e),e=parseInt(e,10);var t=this._readableState,n=e;if(e!==0&&(t.emittedReadable=!1),e===0&&t.needReadable&&((t.highWaterMark===0?t.length>0:t.length>=t.highWaterMark)||t.ended))return u(`read: emitReadable`,t.length,t.ended),t.length===0&&t.ended?Z(this):P(this),null;if(e=M(e,t),e===0&&t.ended)return t.length===0&&Z(this),null;var r=t.needReadable;u(`need readable`,r),(t.length===0||t.length-e0?X(e,t):null;return i===null?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),t.length===0&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&Z(this)),i!==null&&this.emit(`data`,i),i};function N(e,t){if(u(`onEofChunk`),!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?P(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,I(e)))}}function P(e){var t=e._readableState;u(`emitReadable`,t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(u(`emitReadable`,t.flowing),t.emittedReadable=!0,process.nextTick(I,e))}function I(e){var t=e._readableState;u(`emitReadable_`,t.destroyed,t.length,t.ended),!t.destroyed&&(t.length||t.ended)&&(e.emit(`readable`),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,G(e)}function L(e,t){t.readingMore||(t.readingMore=!0,process.nextTick(z,e,t))}function z(e,t){for(;!t.reading&&!t.ended&&(t.length1&&$(i.pipes,e)!==-1)&&!l&&(u(`false write response, pause`,i.awaitDrain),i.awaitDrain++),n.pause())}function p(t){u(`onerror`,t),g(),e.removeListener(`error`,p),r(e,`error`)===0&&S(e,t)}w(e,`error`,p);function m(){e.removeListener(`finish`,h),g()}e.once(`close`,m);function h(){u(`onfinish`),e.removeListener(`close`,m),g()}e.once(`finish`,h);function g(){u(`unpipe`),n.unpipe(e)}return e.emit(`pipe`,n),i.flowing||(u(`pipe resume`),n.resume()),e};function B(e){return function(){var t=e._readableState;u(`pipeOnDrain`,t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&r(e,`data`)&&(t.flowing=!0,G(e))}}E.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(t.pipesCount===0)return this;if(t.pipesCount===1)return e&&e!==t.pipes?this:(e||=t.pipes,t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(`unpipe`,this,n),this);if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a0,r.flowing!==!1&&this.resume()):e===`readable`&&!r.endEmitted&&!r.readableListening&&(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,u(`on readable`,r.length,r.reading),r.length?P(this):r.reading||process.nextTick(H,this)),n},E.prototype.addListener=E.prototype.on,E.prototype.removeListener=function(e,t){var n=i.prototype.removeListener.call(this,e,t);return e===`readable`&&process.nextTick(V,this),n},E.prototype.removeAllListeners=function(e){var t=i.prototype.removeAllListeners.apply(this,arguments);return(e===`readable`||e===void 0)&&process.nextTick(V,this),t};function V(e){var t=e._readableState;t.readableListening=e.listenerCount(`readable`)>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(`data`)>0&&e.resume()}function H(e){u(`readable nexttick read 0`),e.read(0)}E.prototype.resume=function(){var e=this._readableState;return e.flowing||(u(`resume`),e.flowing=!e.readableListening,U(this,e)),e.paused=!1,this};function U(e,t){t.resumeScheduled||(t.resumeScheduled=!0,process.nextTick(W,e,t))}function W(e,t){u(`resume`,t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(`resume`),G(e),t.flowing&&!t.reading&&e.read(0)}E.prototype.pause=function(){return u(`call pause flowing=%j`,this._readableState.flowing),this._readableState.flowing!==!1&&(u(`pause`),this._readableState.flowing=!1,this.emit(`pause`)),this._readableState.paused=!0,this};function G(e){var t=e._readableState;for(u(`flow`,t.flowing);t.flowing&&e.read()!==null;);}E.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var i in e.on(`end`,function(){if(u(`wrapped end`),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)}),e.on(`data`,function(i){u(`wrapped data`),n.decoder&&(i=n.decoder.write(i)),!(n.objectMode&&i==null)&&(n.objectMode||i&&i.length)&&(t.push(i)||(r=!0,e.pause()))}),e)this[i]===void 0&&typeof e[i]==`function`&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var a=0;a=t.length?(n=t.decoder?t.buffer.join(``):t.buffer.length===1?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n}function Z(e){var t=e._readableState;u(`endReadable`,t.endEmitted),t.endEmitted||(t.ended=!0,process.nextTick(re,t,e))}function re(e,t){if(u(`endReadableNT`,e.endEmitted,e.length),!e.endEmitted&&e.length===0&&(e.endEmitted=!0,t.readable=!1,t.emit(`end`),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}typeof Symbol==`function`&&(E.from=function(e,t){return x===void 0&&(x=oe()),x(E,e,t)});function $(e,t){for(var n=0,r=e.length;n{t.exports=l;var n=J().codes,r=n.ERR_METHOD_NOT_IMPLEMENTED,i=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,o=n.ERR_TRANSFORM_WITH_LENGTH_0,s=Q();K()(l,s);function c(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(r===null)return this.emit(`error`,new i);n.writechunk=null,n.writecb=null,t!=null&&this.push(t),r(e);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{t.exports=r;var n=ce();K()(r,n);function r(e){if(!(this instanceof r))return new r(e);n.call(this,e)}r.prototype._transform=function(e,t,n){n(null,e)}})),ue=e(((e,t)=>{var n;function r(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}var i=J().codes,a=i.ERR_MISSING_ARGS,o=i.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function c(e){return e.setHeader&&typeof e.abort==`function`}function l(e,t,i,a){a=r(a);var s=!1;e.on(`close`,function(){s=!0}),n===void 0&&(n=$()),n(e,{readable:t,writable:i},function(e){if(e)return a(e);s=!0,a()});var l=!1;return function(t){if(!s&&!l){if(l=!0,c(e))return e.abort();if(typeof e.destroy==`function`)return e.destroy();a(t||new o(`pipe`))}}}function u(e){e()}function d(e,t){return e.pipe(t)}function f(e){return!e.length||typeof e[e.length-1]!=`function`?s:e.pop()}function p(){var e=[...arguments],t=f(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new a(`streams`);var n,r=e.map(function(i,a){var o=a0,function(e){n||=e,e&&r.forEach(u),!o&&(r.forEach(u),t(n))})});return e.reduce(d)}t.exports=p})),de=e(((e,t)=>{t.exports=r;var n=F().EventEmitter;K()(r,n),r.Readable=se(),r.Writable=Z(),r.Duplex=Q(),r.Transform=ce(),r.PassThrough=le(),r.finished=$(),r.pipeline=ue(),r.Stream=r;function r(){n.call(this)}r.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}r.on(`data`,i);function a(){r.readable&&r.resume&&r.resume()}e.on(`drain`,a),!e._isStdio&&(!t||t.end!==!1)&&(r.on(`end`,s),r.on(`close`,c));var o=!1;function s(){o||(o=!0,e.end())}function c(){o||(o=!0,typeof e.destroy==`function`&&e.destroy())}function l(e){if(u(),n.listenerCount(this,`error`)===0)throw e}r.on(`error`,l),e.on(`error`,l);function u(){r.removeListener(`data`,i),e.removeListener(`drain`,a),r.removeListener(`end`,s),r.removeListener(`close`,c),r.removeListener(`error`,l),e.removeListener(`error`,l),r.removeListener(`end`,u),r.removeListener(`close`,u),e.removeListener(`close`,u)}return r.on(`end`,u),r.on(`close`,u),e.on(`close`,u),e.emit(`pipe`,r),e}}))();async function*fe(e,t,n){let r=1,i={chunks:[],length:0};for await(let a of n(e))for(i.chunks.push(a),i.length+=a.byteLength;i.length>t;){let e=i.chunks.length>1?V.Buffer.concat(i.chunks):i.chunks[0];yield{partNumber:r,data:e.subarray(0,t)},i.chunks=[e.subarray(t)],i.length=i.chunks[0].byteLength,r+=1}yield{partNumber:r,data:i.chunks.length===1?i.chunks[0]:V.Buffer.concat(i.chunks),lastPart:!0}}async function*pe(e,t){let n=1,r=0,i=t;for(;i{if(e instanceof Uint8Array)return pe(e,t);if(e instanceof de.Readable)return fe(e,t,me);if(e instanceof String||typeof e==`string`)return pe(V.Buffer.from(e),t);if(typeof e.stream==`function`)return fe(e.stream(),t,he);if(e instanceof ReadableStream)return fe(e,t,he);throw Error(`Body Data is unsupported format, expected data to be one of: string | Uint8Array | Buffer | Readable | ReadableStream | Blob;.`)},_e=class e extends B.EventEmitter{static MIN_PART_SIZE=5242880;MAX_PARTS=1e4;queueSize=4;partSize;leavePartsOnError=!1;tags=[];client;params;totalBytes;totalBytesSource;bytesUploadedSoFar;abortController;concurrentUploaders=[];createMultiPartPromise;abortMultipartUploadCommand=null;uploadedParts=[];uploadEnqueuedPartsCount=0;expectedPartsCount;uploadId;uploadEvent;isMultiPart=!0;singleUploadResult;sent=!1;constructor(t){if(super(),this.queueSize=t.queueSize||this.queueSize,this.leavePartsOnError=t.leavePartsOnError||this.leavePartsOnError,this.tags=t.tags||this.tags,this.client=t.client,this.params=t.params,!this.params)throw Error(`InputError: Upload requires params to be passed to upload.`);this.totalBytes=this.params.ContentLength??U(this.params.Body),this.totalBytesSource=G(this.params.Body,this.params.ContentLength),this.bytesUploadedSoFar=0,this.abortController=t.abortController??new AbortController,this.partSize=t.partSize||Math.max(e.MIN_PART_SIZE,Math.ceil((this.totalBytes||0)/this.MAX_PARTS)),this.totalBytes!==void 0&&(this.expectedPartsCount=Math.ceil(this.totalBytes/this.partSize)),this.__validateInput()}async abort(){this.abortController.abort()}async done(){if(this.sent)throw Error(`@aws-sdk/lib-storage: this instance of Upload has already executed .done(). Create a new instance.`);return this.sent=!0,await Promise.race([this.__doMultipartUpload(),this.__abortTimeout(this.abortController.signal)])}on(e,t){return this.uploadEvent=e,super.on(e,t)}async __uploadUsingPut(e){this.isMultiPart=!1;let t={...this.params,Body:e.data},n=this.client.config,r=n.requestHandler,s=r instanceof B.EventEmitter?r:null,c=t=>{this.bytesUploadedSoFar=t.loaded,this.totalBytes=t.total,this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:e.partNumber,Key:this.params.Key,Bucket:this.params.Bucket})};s!==null&&s.on(`xhr.upload.progress`,c);let l=await Promise.all([this.client.send(new j(t)),n?.endpoint?.()]),u=l[0],d=l[1];if(d||=i(await o(t,j,{...n})),!d)throw Error(`Could not resolve endpoint from S3 "client.config.endpoint()" nor EndpointsV2.`);s!==null&&s.off(`xhr.upload.progress`,c);let f=this.params.Key.split(`/`).map(e=>a(e)).join(`/`),p=a(this.params.Bucket),m=(()=>{let e=d.hostname.startsWith(`${p}.`),t=this.client.config.forcePathStyle,n=d.port?`:${d.port}`:``;return t?`${d.protocol}//${d.hostname}${n}/${p}/${f}`:e?`${d.protocol}//${d.hostname}${n}/${f}`:`${d.protocol}//${p}.${d.hostname}${n}/${f}`})();this.singleUploadResult={...u,Bucket:this.params.Bucket,Key:this.params.Key,Location:m};let h=U(e.data);this.__notifyProgress({loaded:h,total:h,part:1,Key:this.params.Key,Bucket:this.params.Bucket})}async __createMultipartUpload(){let e=await this.client.config.requestChecksumCalculation();if(!this.createMultiPartPromise){let t={...this.params,Body:void 0};e===`WHEN_SUPPORTED`&&(t.ChecksumAlgorithm=this.params.ChecksumAlgorithm||P.CRC32),this.createMultiPartPromise=this.client.send(new k(t)).then(e=>(this.abortMultipartUploadCommand=new E({Bucket:this.params.Bucket,Key:this.params.Key,UploadId:e.UploadId}),e))}return this.createMultiPartPromise}async __doConcurrentUpload(e){for await(let t of e){if(this.uploadEnqueuedPartsCount>this.MAX_PARTS)throw Error(`Exceeded ${this.MAX_PARTS} parts in multipart upload to Bucket: ${this.params.Bucket} Key: ${this.params.Key}.`);if(this.abortController.signal.aborted)return;if(t.partNumber===1&&t.lastPart)return await this.__uploadUsingPut(t);if(!this.uploadId){let{UploadId:e}=await this.__createMultipartUpload();if(this.uploadId=e,this.abortController.signal.aborted)return}let e=U(t.data)||0,n=this.client.config.requestHandler,r=n instanceof B.EventEmitter?n:null,i=0,a=(n,r)=>{(Number(r.query.partNumber)||-1)===t.partNumber&&(n.total&&e&&(this.bytesUploadedSoFar+=n.loaded-i,i=n.loaded),this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:t.partNumber,Key:this.params.Key,Bucket:this.params.Bucket}))};r!==null&&r.on(`xhr.upload.progress`,a),this.uploadEnqueuedPartsCount+=1,this.__validateUploadPart(t);let o=await this.client.send(new N({...this.params,ContentLength:void 0,UploadId:this.uploadId,Body:t.data,PartNumber:t.partNumber}));if(r!==null&&r.off(`xhr.upload.progress`,a),this.abortController.signal.aborted)return;if(!o.ETag)throw Error(`Part ${t.partNumber} is missing ETag in UploadPart response. Missing Bucket CORS configuration for ETag header?`);this.uploadedParts.push({PartNumber:t.partNumber,ETag:o.ETag,...o.ChecksumCRC32&&{ChecksumCRC32:o.ChecksumCRC32},...o.ChecksumCRC32C&&{ChecksumCRC32C:o.ChecksumCRC32C},...o.ChecksumSHA1&&{ChecksumSHA1:o.ChecksumSHA1},...o.ChecksumSHA256&&{ChecksumSHA256:o.ChecksumSHA256}}),r===null&&(this.bytesUploadedSoFar+=e),this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:t.partNumber,Key:this.params.Key,Bucket:this.params.Bucket})}}async __doMultipartUpload(){let e=ge(this.params.Body,this.partSize),t=[];for(let n=0;n{t.push(e)});this.concurrentUploaders.push(n)}if(await Promise.all(this.concurrentUploaders),t.length>=1)throw await this.markUploadAsAborted(),t[0];if(this.abortController.signal.aborted)throw await this.markUploadAsAborted(),Object.assign(Error(`Upload aborted.`),{name:`AbortError`});let n;if(this.isMultiPart){let{expectedPartsCount:e,uploadedParts:t,totalBytes:r,totalBytesSource:i}=this;if(r!==void 0&&e!==void 0&&t.length!==e)throw await this.markUploadAsAborted(),Error(`Expected ${e} part(s) but uploaded ${t.length} part(s). +import{i as e,t}from"./compiler-runtime-D_vZfn79.js";import{A as n}from"./removable-Dwr9otKB.js";import{t as r}from"./useMutation-6rdxVQpi.js";import{Yt as i,_t as a,ft as o}from"./cluster-config-DkOiY8HH.js";import{C as s,D as c,E as l,F as u,I as d,M as f,N as p,O as m,P as h,R as g,T as _,_ as v,g as y,h as b,j as x,m as S,v as C,w,y as T}from"./awsClient-Cqp6x3OY.js";var E=class extends g(l,x,`AbortMultipartUpload`,b){},D=class extends g(l,f,`CompleteMultipartUpload`,y){},O=class extends g(c,u,`CreateBucket`,v){},k=class extends g(l,f,`CreateMultipartUpload`,C){},A=class extends g(l,x,`DeleteObject`,T){},j=class extends g(l,p,`PutObject`,s){},M=class extends g(m,d,`PutObjectTagging`,w){},N=class extends g(l,h,`UploadPart`,_){},P={CRC32:`CRC32`,CRC32C:`CRC32C`,CRC64NVME:`CRC64NVME`,MD5:`MD5`,SHA1:`SHA1`,SHA256:`SHA256`,SHA512:`SHA512`,XXHASH128:`XXHASH128`,XXHASH3:`XXHASH3`,XXHASH64:`XXHASH64`},F=e(((e,t)=>{var n=typeof Reflect==`object`?Reflect:null,r=n&&typeof n.apply==`function`?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},i=n&&typeof n.ownKeys==`function`?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};function a(e){console&&console.warn&&console.warn(e)}var o=Number.isNaN||function(e){return e!==e};function s(){s.init.call(this)}t.exports=s,t.exports.once=y,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var c=10;function l(e){if(typeof e!=`function`)throw TypeError(`The "listener" argument must be of type Function. Received type `+typeof e)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return c},set:function(e){if(typeof e!=`number`||e<0||o(e))throw RangeError(`The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received `+e+`.`);c=e}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(typeof e!=`number`||e<0||o(e))throw RangeError(`The value of "n" is out of range. It must be a non-negative number. Received `+e+`.`);return this._maxListeners=e,this};function u(e){return e._maxListeners===void 0?s.defaultMaxListeners:e._maxListeners}s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(e){for(var t=[],n=1;n0&&(o=t[0]),o instanceof Error)throw o;var s=Error(`Unhandled error.`+(o?` (`+o.message+`)`:``));throw s.context=o,s}var c=a[e];if(c===void 0)return!1;if(typeof c==`function`)r(c,this,t);else for(var l=c.length,u=g(c,l),n=0;n0&&s.length>i&&!s.warned){s.warned=!0;var c=Error(`Possible EventEmitter memory leak detected. `+s.length+` `+String(t)+` listeners added. Use emitter.setMaxListeners() to increase limit`);c.name=`MaxListenersExceededWarning`,c.emitter=e,c.type=t,c.count=s.length,a(c)}return e}s.prototype.addListener=function(e,t){return d(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return d(this,e,t,!0)};function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=f.bind(r);return i.listener=n,r.wrapFn=i,i}s.prototype.once=function(e,t){return l(t),this.on(e,p(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return l(t),this.prependListener(e,p(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,r,i,a,o;if(l(t),r=this._events,r===void 0||(n=r[e],n===void 0))return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(`removeListener`,e,n.listener||t));else if(typeof n!=`function`){for(i=-1,a=n.length-1;a>=0;a--)if(n[a]===t||n[a].listener===t){o=n[a].listener,i=a;break}if(i<0)return this;i===0?n.shift():_(n,i),n.length===1&&(r[e]=n[0]),r.removeListener!==void 0&&this.emit(`removeListener`,e,o||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n=this._events,r;if(n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),a;for(r=0;r=0;r--)this.removeListener(e,t[r]);return this};function m(e,t,n){var r=e._events;if(r===void 0)return[];var i=r[t];return i===void 0?[]:typeof i==`function`?n?[i.listener||i]:[i]:n?v(i):g(i,i.length)}s.prototype.listeners=function(e){return m(this,e,!0)},s.prototype.rawListeners=function(e){return m(this,e,!1)},s.listenerCount=function(e,t){return typeof e.listenerCount==`function`?e.listenerCount(t):h.call(e,t)},s.prototype.listenerCount=h;function h(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n==`function`)return 1;if(n!==void 0)return n.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]};function g(e,t){for(var n=Array(t),r=0;r{e.byteLength=c,e.toByteArray=u,e.fromByteArray=p;for(var t=[],n=[],r=typeof Uint8Array<`u`?Uint8Array:Array,i=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,a=0,o=i.length;a0)throw Error(`Invalid string. Length must be a multiple of 4`);var n=e.indexOf(`=`);n===-1&&(n=t);var r=n===t?0:4-n%4;return[n,r]}function c(e){var t=s(e),n=t[0],r=t[1];return(n+r)*3/4-r}function l(e,t,n){return(t+n)*3/4-n}function u(e){for(var t,i=s(e),a=i[0],o=i[1],c=new r(l(e,a,o)),u=0,d=o>0?a-4:a,f=0;f>16&255,c[u++]=t>>8&255,c[u++]=t&255;return o===2&&(t=n[e.charCodeAt(f)]<<2|n[e.charCodeAt(f+1)]>>4,c[u++]=t&255),o===1&&(t=n[e.charCodeAt(f)]<<10|n[e.charCodeAt(f+1)]<<4|n[e.charCodeAt(f+2)]>>2,c[u++]=t>>8&255,c[u++]=t&255),c}function d(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function f(e,t,n){for(var r,i=[],a=t;ac?c:s+o));return i===1?(n=e[r-1],a.push(t[n>>2]+t[n<<4&63]+`==`)):i===2&&(n=(e[r-2]<<8)+e[r-1],a.push(t[n>>10]+t[n>>4&63]+t[n<<2&63]+`=`)),a.join(``)}})),L=e((e=>{e.read=function(e,t,n,r,i){var a,o,s=i*8-r-1,c=(1<>1,u=-7,d=n?i-1:0,f=n?-1:1,p=e[t+d];for(d+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=a*256+e[t+d],d+=f,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=r;u>0;o=o*256+e[t+d],d+=f,u-=8);if(a===0)a=1-l;else if(a===c)return o?NaN:(p?-1:1)*(1/0);else o+=2**r,a-=l;return(p?-1:1)*o*2**(a-r)},e.write=function(e,t,n,r,i,a){var o,s,c,l=a*8-i-1,u=(1<>1,f=i===23?2**-24-2**-77:0,p=r?0:a-1,m=r?1:-1,h=+(t<0||t===0&&1/t<0);for(t=Math.abs(t),isNaN(t)||t===1/0?(s=+!!isNaN(t),o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(c=2**-o)<1&&(o--,c*=2),o+d>=1?t+=f/c:t+=f*2**(1-d),t*c>=2&&(o++,c/=2),o+d>=u?(s=0,o=u):o+d>=1?(s=(t*c-1)*2**i,o+=d):(s=t*2**(d-1)*2**i,o=0));i>=8;e[n+p]=s&255,p+=m,s/=256,i-=8);for(o=o<0;e[n+p]=o&255,p+=m,o/=256,l-=8);e[n+p-m]|=h*128}})),R=e((e=>{var t=I(),n=L(),r=typeof Symbol==`function`&&typeof Symbol.for==`function`?Symbol.for(`nodejs.util.inspect.custom`):null;e.Buffer=s,e.SlowBuffer=_,e.INSPECT_MAX_BYTES=50;var i=2147483647;e.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=a(),!s.TYPED_ARRAY_SUPPORT&&typeof console<`u`&&typeof console.error==`function`&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function a(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch{return!1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function o(e){if(e>i)throw RangeError(`The value "`+e+`" is invalid for option "size"`);var t=new Uint8Array(e);return Object.setPrototypeOf(t,s.prototype),t}function s(e,t,n){if(typeof e==`number`){if(typeof t==`string`)throw TypeError(`The "string" argument must be of type string. Received type number`);return d(e)}return c(e,t,n)}s.poolSize=8192;function c(e,t,n){if(typeof e==`string`)return f(e,t);if(ArrayBuffer.isView(e))return p(e);if(e==null)throw TypeError(`The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type `+typeof e);if(J(e,ArrayBuffer)||e&&J(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<`u`&&(J(e,SharedArrayBuffer)||e&&J(e.buffer,SharedArrayBuffer)))return m(e,t,n);if(typeof e==`number`)throw TypeError(`The "value" argument must not be of type number. Received type number`);var r=e.valueOf&&e.valueOf();if(r!=null&&r!==e)return s.from(r,t,n);var i=h(e);if(i)return i;if(typeof Symbol<`u`&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==`function`)return s.from(e[Symbol.toPrimitive](`string`),t,n);throw TypeError(`The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type `+typeof e)}s.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function l(e){if(typeof e!=`number`)throw TypeError(`"size" argument must be of type number`);if(e<0)throw RangeError(`The value "`+e+`" is invalid for option "size"`)}function u(e,t,n){return l(e),e<=0||t===void 0?o(e):typeof n==`string`?o(e).fill(t,n):o(e).fill(t)}s.alloc=function(e,t,n){return u(e,t,n)};function d(e){return l(e),o(e<0?0:g(e)|0)}s.allocUnsafe=function(e){return d(e)},s.allocUnsafeSlow=function(e){return d(e)};function f(e,t){if((typeof t!=`string`||t===``)&&(t=`utf8`),!s.isEncoding(t))throw TypeError(`Unknown encoding: `+t);var n=v(e,t)|0,r=o(n),i=r.write(e,t);return i!==n&&(r=r.slice(0,i)),r}function p(e){for(var t=e.length<0?0:g(e.length)|0,n=o(t),r=0;r=i)throw RangeError(`Attempt to allocate Buffer larger than maximum size: 0x`+i.toString(16)+` bytes`);return e|0}function _(e){return+e!=e&&(e=0),s.alloc(+e)}s.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==s.prototype},s.compare=function(e,t){if(J(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),J(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(e)||!s.isBuffer(t))throw TypeError(`The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array`);if(e===t)return 0;for(var n=e.length,r=t.length,i=0,a=Math.min(n,r);i2&&arguments[2]===!0;if(!r&&n===0)return 0;for(var i=!1;;)switch(t){case`ascii`:case`latin1`:case`binary`:return n;case`utf8`:case`utf-8`:return K(e).length;case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return n*2;case`hex`:return n>>>1;case`base64`:return ne(e).length;default:if(i)return r?-1:K(e).length;t=(``+t).toLowerCase(),i=!0}}s.byteLength=v;function y(e,t,n){var r=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((n===void 0||n>this.length)&&(n=this.length),n<=0)||(n>>>=0,t>>>=0,n<=t))return``;for(e||=`utf8`;;)switch(e){case`hex`:return F(this,t,n);case`utf8`:case`utf-8`:return A(this,t,n);case`ascii`:return N(this,t,n);case`latin1`:case`binary`:return P(this,t,n);case`base64`:return k(this,t,n);case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return R(this,t,n);default:if(r)throw TypeError(`Unknown encoding: `+e);e=(e+``).toLowerCase(),r=!0}}s.prototype._isBuffer=!0;function b(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw RangeError(`Buffer size must be a multiple of 16-bits`);for(var t=0;tn&&(t+=` ... `),``},r&&(s.prototype[r]=s.prototype.inspect),s.prototype.compare=function(e,t,n,r,i){if(J(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw TypeError(`The "target" argument must be one of type Buffer or Uint8Array. Received type `+typeof e);if(t===void 0&&(t=0),n===void 0&&(n=e?e.length:0),r===void 0&&(r=0),i===void 0&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw RangeError(`out of range index`);if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var a=i-r,o=n-t,c=Math.min(a,o),l=this.slice(r,i),u=e.slice(t,n),d=0;d2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,Y(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(i)n=0;else return-1}if(typeof t==`string`&&(t=s.from(t,r)),s.isBuffer(t))return t.length===0?-1:S(e,t,n,r,i);if(typeof t==`number`)return t&=255,typeof Uint8Array.prototype.indexOf==`function`?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):S(e,[t],n,r,i);throw TypeError(`val must be string, number or Buffer`)}function S(e,t,n,r,i){var a=1,o=e.length,s=t.length;if(r!==void 0&&(r=String(r).toLowerCase(),r===`ucs2`||r===`ucs-2`||r===`utf16le`||r===`utf-16le`)){if(e.length<2||t.length<2)return-1;a=2,o/=2,s/=2,n/=2}function c(e,t){return a===1?e[t]:e.readUInt16BE(t*a)}var l;if(i){var u=-1;for(l=n;lo&&(n=o-s),l=n;l>=0;l--){for(var d=!0,f=0;fi&&(r=i)):r=i;var a=t.length;r>a/2&&(r=a/2);for(var o=0;o>>=0,isFinite(n)?(n>>>=0,r===void 0&&(r=`utf8`)):(r=n,n=void 0);else throw Error(`Buffer.write(string, encoding, offset[, length]) is no longer supported`);var i=this.length-t;if((n===void 0||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw RangeError(`Attempt to write outside buffer bounds`);r||=`utf8`;for(var a=!1;;)switch(r){case`hex`:return C(this,e,t,n);case`utf8`:case`utf-8`:return w(this,e,t,n);case`ascii`:return T(this,e,t,n);case`latin1`:case`binary`:return E(this,e,t,n);case`base64`:return D(this,e,t,n);case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return O(this,e,t,n);default:if(a)throw TypeError(`Unknown encoding: `+r);r=(``+r).toLowerCase(),a=!0}},s.prototype.toJSON=function(){return{type:`Buffer`,data:Array.prototype.slice.call(this._arr||this,0)}};function k(e,n,r){return n===0&&r===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(n,r))}function A(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:a>223?3:a>191?2:1;if(i+s<=n){var c,l,u,d;switch(s){case 1:a<128&&(o=a);break;case 2:c=e[i+1],(c&192)==128&&(d=(a&31)<<6|c&63,d>127&&(o=d));break;case 3:c=e[i+1],l=e[i+2],(c&192)==128&&(l&192)==128&&(d=(a&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(o=d));break;case 4:c=e[i+1],l=e[i+2],u=e[i+3],(c&192)==128&&(l&192)==128&&(u&192)==128&&(d=(a&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(o=d))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|o&1023),r.push(o),i+=s}return M(r)}var j=4096;function M(e){var t=e.length;if(t<=j)return String.fromCharCode.apply(String,e);for(var n=``,r=0;rr)&&(n=r);for(var i=``,a=t;an&&(e=n),t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),tn)throw RangeError(`Trying to access beyond buffer length`)}s.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e],i=1,a=0;++a>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},s.prototype.readUInt8=function(e,t){return e>>>=0,t||z(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return e>>>=0,t||z(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return e>>>=0,t||z(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return e>>>=0,t||z(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216},s.prototype.readUInt32BE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=this[e],i=1,a=0;++a=i&&(r-=2**(8*t)),r},s.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||z(e,t,this.length);for(var r=t,i=1,a=this[e+--r];r>0&&(i*=256);)a+=this[e+--r]*i;return i*=128,a>=i&&(a-=2**(8*t)),a},s.prototype.readInt8=function(e,t){return e>>>=0,t||z(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]},s.prototype.readInt16LE=function(e,t){e>>>=0,t||z(e,2,this.length);var n=this[e]|this[e+1]<<8;return n&32768?n|4294901760:n},s.prototype.readInt16BE=function(e,t){e>>>=0,t||z(e,2,this.length);var n=this[e+1]|this[e]<<8;return n&32768?n|4294901760:n},s.prototype.readInt32LE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e>>>=0,t||z(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return e>>>=0,t||z(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e>>>=0,t||z(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e>>>=0,t||z(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e>>>=0,t||z(e,8,this.length),n.read(this,e,!1,52,8)};function B(e,t,n,r,i,a){if(!s.isBuffer(e))throw TypeError(`"buffer" argument must be a Buffer instance`);if(t>i||te.length)throw RangeError(`Index out of range`)}s.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){var i=2**(8*n)-1;B(this,e,t,n,i,0)}var a=1,o=0;for(this[t]=e&255;++o>>=0,n>>>=0,!r){var i=2**(8*n)-1;B(this,e,t,n,i,0)}var a=n-1,o=1;for(this[t+a]=e&255;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,1,255,0),this[t]=e&255,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=2**(8*n-1);B(this,e,t,n,i-1,-i)}var a=0,o=1,s=0;for(this[t]=e&255;++a>0)-s&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=2**(8*n-1);B(this,e,t,n,i-1,-i)}var a=n-1,o=1,s=0;for(this[t+a]=e&255;--a>=0&&(o*=256);)e<0&&s===0&&this[t+a+1]!==0&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||B(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function V(e,t,n,r,i,a){if(n+r>e.length||n<0)throw RangeError(`Index out of range`)}function H(e,t,r,i,a){return t=+t,r>>>=0,a||V(e,t,r,4,34028234663852886e22,-34028234663852886e22),n.write(e,t,r,i,23,4),r+4}s.prototype.writeFloatLE=function(e,t,n){return H(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return H(this,e,t,!1,n)};function U(e,t,r,i,a){return t=+t,r>>>=0,a||V(e,t,r,8,17976931348623157e292,-17976931348623157e292),n.write(e,t,r,i,52,8),r+8}s.prototype.writeDoubleLE=function(e,t,n){return U(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return U(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(!s.isBuffer(e))throw TypeError(`argument should be a Buffer`);if(n||=0,!r&&r!==0&&(r=this.length),t>=e.length&&(t=e.length),t||=0,r>0&&r=this.length)throw RangeError(`Index out of range`);if(r<0)throw RangeError(`sourceEnd out of bounds`);r>this.length&&(r=this.length),e.length-t=0;--a)e[a+t]=this[a+n];else Uint8Array.prototype.set.call(e,this.subarray(n,r),t);return i},s.prototype.fill=function(e,t,n,r){if(typeof e==`string`){if(typeof t==`string`?(r=t,t=0,n=this.length):typeof n==`string`&&(r=n,n=this.length),r!==void 0&&typeof r!=`string`)throw TypeError(`encoding must be a string`);if(typeof r==`string`&&!s.isEncoding(r))throw TypeError(`Unknown encoding: `+r);if(e.length===1){var i=e.charCodeAt(0);(r===`utf8`&&i<128||r===`latin1`)&&(e=i)}}else typeof e==`number`?e&=255:typeof e==`boolean`&&(e=Number(e));if(t<0||this.length>>=0,n=n===void 0?this.length:n>>>0,e||=0;var a;if(typeof e==`number`)for(a=t;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if(--t<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,n&63|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,n&63|128)}else if(n<1114112){if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,n&63|128)}else throw Error(`Invalid code point`)}return a}function ee(e){for(var t=[],n=0;n>8,i=n%256,a.push(i),a.push(r);return a}function ne(e){return t.toByteArray(G(e))}function q(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function J(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function Y(e){return e!==e}var X=(function(){for(var e=`0123456789abcdef`,t=Array(256),n=0;n<16;++n)for(var r=n*16,i=0;i<16;++i)t[r+i]=e[n]+e[i];return t})()})),z=t(),B=F(),V=R(),H={statSync:()=>{},isFileReadStream(e){return!1},runtime:`browser`},U=e=>{if(e==null)return 0;if(typeof e==`string`)return V.Buffer.byteLength(e);if(typeof e.byteLength==`number`)return e.byteLength;if(typeof e.length==`number`)return e.length;if(typeof e.size==`number`)return e.size;if(typeof e.start==`number`&&typeof e.end==`number`)return e.end+1-e.start;if(H.isFileReadStream(e))try{return H.statSync(e.path).size}catch{return}},W;(function(e){e.EMPTY_INPUT=`a null or undefined Body`,e.CONTENT_LENGTH=`the ContentLength property of the params set by the caller`,e.STRING_LENGTH=`the encoded byte length of the Body string`,e.TYPED_ARRAY=`the byteLength of a typed byte array such as Uint8Array`,e.LENGTH=`the value of Body.length`,e.SIZE=`the value of Body.size`,e.START_END_DIFF=`the numeric difference between Body.start and Body.end`,e.STAT=`the size of the file given by Body.path on disk as reported by statSync`})(W||={});var G=(e,t)=>{if(t!=null)return W.CONTENT_LENGTH;if(e==null)return W.EMPTY_INPUT;if(typeof e==`string`)return W.STRING_LENGTH;if(typeof e.byteLength==`number`)return W.TYPED_ARRAY;if(typeof e.length==`number`)return W.LENGTH;if(typeof e.size==`number`)return W.SIZE;if(typeof e.start==`number`&&typeof e.end==`number`)return W.START_END_DIFF;if(H.isFileReadStream(e))try{return H.statSync(e.path).size,W.STAT}catch{return}},K=e(((e,t)=>{t.exports=typeof Object.create==`function`?function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}})),ee=e(((e,t)=>{t.exports=F().EventEmitter})),te=e(((e,t)=>{t.exports={}})),ne=e(((e,t)=>{function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function r(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:`unshift`,value:function(e){var t={data:e,next:this.head};this.length===0&&(this.tail=t),this.head=t,++this.length}},{key:`shift`,value:function(){if(this.length!==0){var e=this.head.data;return this.head=this.length===1?this.tail=null:this.head.next,--this.length,e}}},{key:`clear`,value:function(){this.head=this.tail=null,this.length=0}},{key:`join`,value:function(e){if(this.length===0)return``;for(var t=this.head,n=``+t.data;t=t.next;)n+=e+t.data;return n}},{key:`concat`,value:function(e){if(this.length===0)return u.alloc(0);for(var t=u.allocUnsafe(e>>>0),n=this.head,r=0;n;)p(n.data,t,r),r+=n.data.length,n=n.next;return t}},{key:`consume`,value:function(e,t){var n;return ei.length?i.length:e;if(a===i.length?r+=i:r+=i.slice(0,e),e-=a,e===0){a===i.length?(++n,this.head=t.next?t.next:this.tail=null):(this.head=t,t.data=i.slice(a));break}++n}return this.length-=n,r}},{key:`_getBuffer`,value:function(e){var t=u.allocUnsafe(e),n=this.head,r=1;for(n.data.copy(t),e-=n.data.length;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,a),e-=a,e===0){a===i.length?(++r,this.head=n.next?n.next:this.tail=null):(this.head=n,n.data=i.slice(a));break}++r}return this.length-=r,t}},{key:f,value:function(e,t){return d(this,r(r({},t),{},{depth:0,customInspect:!1}))}}]),e}()})),q=e(((e,t)=>{function n(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,s=this._writableState&&this._writableState.destroyed;return a||s?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(o,this,e)):process.nextTick(o,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?n._writableState?n._writableState.errorEmitted?process.nextTick(i,n):(n._writableState.errorEmitted=!0,process.nextTick(r,n,e)):process.nextTick(r,n,e):t?(process.nextTick(i,n),t(e)):process.nextTick(i,n)}),this)}function r(e,t){o(e,t),i(e)}function i(e){(!e._writableState||e._writableState.emitClose)&&(!e._readableState||e._readableState.emitClose)&&e.emit(`close`)}function a(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function o(e,t){e.emit(`error`,t)}function s(e,t){var n=e._readableState,r=e._writableState;n&&n.autoDestroy||r&&r.autoDestroy?e.destroy(t):e.emit(`error`,t)}t.exports={destroy:n,undestroy:a,errorOrDestroy:s}})),J=e(((e,t)=>{function n(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var r={};function i(e,t,i){i||=Error;function a(e,n,r){return typeof t==`string`?t:t(e,n,r)}var o=function(e){n(t,e);function t(t,n,r){return e.call(this,a(t,n,r))||this}return t}(i);o.prototype.name=i.name,o.prototype.code=e,r[e]=o}function a(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map(function(e){return String(e)}),n>2?`one of ${t} ${e.slice(0,n-1).join(`, `)}, or `+e[n-1]:n===2?`one of ${t} ${e[0]} or ${e[1]}`:`of ${t} ${e[0]}`}return`of ${t} ${String(e)}`}function o(e,t,n){return e.substr(!n||n<0?0:+n,t.length)===t}function s(e,t,n){return(n===void 0||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}function c(e,t,n){return typeof n!=`number`&&(n=0),n+t.length>e.length?!1:e.indexOf(t,n)!==-1}i(`ERR_INVALID_OPT_VALUE`,function(e,t){return`The value "`+t+`" is invalid for option "`+e+`"`},TypeError),i(`ERR_INVALID_ARG_TYPE`,function(e,t,n){var r;typeof t==`string`&&o(t,`not `)?(r=`must not be`,t=t.replace(/^not /,``)):r=`must be`;var i=s(e,` argument`)?`The ${e} ${r} ${a(t,`type`)}`:`The "${e}" ${c(e,`.`)?`property`:`argument`} ${r} ${a(t,`type`)}`;return i+=`. Received type ${typeof n}`,i},TypeError),i(`ERR_STREAM_PUSH_AFTER_EOF`,`stream.push() after EOF`),i(`ERR_METHOD_NOT_IMPLEMENTED`,function(e){return`The `+e+` method is not implemented`}),i(`ERR_STREAM_PREMATURE_CLOSE`,`Premature close`),i(`ERR_STREAM_DESTROYED`,function(e){return`Cannot call `+e+` after a stream was destroyed`}),i(`ERR_MULTIPLE_CALLBACK`,`Callback called multiple times`),i(`ERR_STREAM_CANNOT_PIPE`,`Cannot pipe, not readable`),i(`ERR_STREAM_WRITE_AFTER_END`,`write after end`),i(`ERR_STREAM_NULL_VALUES`,`May not write null values to stream`,TypeError),i(`ERR_UNKNOWN_ENCODING`,function(e){return`Unknown encoding: `+e},TypeError),i(`ERR_STREAM_UNSHIFT_AFTER_END_EVENT`,`stream.unshift() after end event`),t.exports.codes=r})),Y=e(((e,t)=>{var n=J().codes.ERR_INVALID_OPT_VALUE;function r(e,t,n){return e.highWaterMark==null?t?e[n]:null:e.highWaterMark}function i(e,t,i,a){var o=r(t,a,i);if(o!=null){if(!(isFinite(o)&&Math.floor(o)===o)||o<0)throw new n(a?i:`highWaterMark`,o);return Math.floor(o)}return e.objectMode?16:16384}t.exports={getHighWaterMark:i}})),X=e(((e,t)=>{t.exports=n;function n(e,t){if(r(`noDeprecation`))return e;var n=!1;function i(){if(!n){if(r(`throwDeprecation`))throw Error(t);r(`traceDeprecation`)?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}return i}function r(e){try{if(!global.localStorage)return!1}catch{return!1}var t=global.localStorage[e];return t!=null&&String(t).toLowerCase()===`true`}})),Z=e(((e,t)=>{t.exports=T;function n(e){var t=this;this.next=null,this.entry=null,this.finish=function(){U(t,e)}}var r;T.WritableState=C;var i={deprecate:X()},a=ee(),o=R().Buffer,s=(typeof global<`u`?global:typeof window<`u`?window:typeof self<`u`?self:{}).Uint8Array||function(){};function c(e){return o.from(e)}function l(e){return o.isBuffer(e)||e instanceof s}var u=q(),d=Y().getHighWaterMark,f=J().codes,p=f.ERR_INVALID_ARG_TYPE,m=f.ERR_METHOD_NOT_IMPLEMENTED,h=f.ERR_MULTIPLE_CALLBACK,g=f.ERR_STREAM_CANNOT_PIPE,_=f.ERR_STREAM_DESTROYED,v=f.ERR_STREAM_NULL_VALUES,y=f.ERR_STREAM_WRITE_AFTER_END,b=f.ERR_UNKNOWN_ENCODING,x=u.errorOrDestroy;K()(T,a);function S(){}function C(e,t,i){r||=Q(),e||={},typeof i!=`boolean`&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=d(this,e,`writableHighWaterMark`,i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=e.decodeStrings===!1;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||`utf8`,this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){N(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}C.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},(function(){try{Object.defineProperty(C.prototype,"buffer",{get:i.deprecate(function(){return this.getBuffer()},`_writableState.buffer is deprecated. Use _writableState.getBuffer instead.`,`DEP0003`)})}catch{}})();var w;typeof Symbol==`function`&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==`function`?(w=Function.prototype[Symbol.hasInstance],Object.defineProperty(T,Symbol.hasInstance,{value:function(e){return w.call(this,e)?!0:this===T&&e&&e._writableState instanceof C}})):w=function(e){return e instanceof this};function T(e){r||=Q();var t=this instanceof r;if(!t&&!w.call(T,this))return new T(e);this._writableState=new C(e,this,t),this.writable=!0,e&&(typeof e.write==`function`&&(this._write=e.write),typeof e.writev==`function`&&(this._writev=e.writev),typeof e.destroy==`function`&&(this._destroy=e.destroy),typeof e.final==`function`&&(this._final=e.final)),a.call(this)}T.prototype.pipe=function(){x(this,new g)};function E(e,t){var n=new y;x(e,n),process.nextTick(t,n)}function D(e,t,n,r){var i;return n===null?i=new v:typeof n!=`string`&&!t.objectMode&&(i=new p(`chunk`,[`string`,`Buffer`],n)),!i||(x(e,i),process.nextTick(r,i),!1)}T.prototype.write=function(e,t,n){var r=this._writableState,i=!1,a=!r.objectMode&&l(e);return a&&!o.isBuffer(e)&&(e=c(e)),typeof t==`function`&&(n=t,t=null),a?t=`buffer`:t||=r.defaultEncoding,typeof n!=`function`&&(n=S),r.ending?E(this,n):(a||D(this,r,e,n))&&(r.pendingcb++,i=k(this,r,a,e,t,n)),i},T.prototype.cork=function(){this._writableState.corked++},T.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,!e.writing&&!e.corked&&!e.bufferProcessing&&e.bufferedRequest&&I(this,e))},T.prototype.setDefaultEncoding=function(e){if(typeof e==`string`&&(e=e.toLowerCase()),!([`hex`,`utf8`,`utf-8`,`ascii`,`binary`,`base64`,`ucs2`,`ucs-2`,`utf16le`,`utf-16le`,`raw`].indexOf((e+``).toLowerCase())>-1))throw new b(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(T.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function O(e,t,n){return!e.objectMode&&e.decodeStrings!==!1&&typeof t==`string`&&(t=o.from(t,n)),t}Object.defineProperty(T.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function k(e,t,n,r,i,a){if(!n){var o=O(t,r,i);r!==o&&(n=!0,i=`buffer`,r=o)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length{var n=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};t.exports=c;var r=se(),i=Z();K()(c,r);for(var a=n(i.prototype),o=0;o{var n=R(),r=n.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=a);function a(e,t,n){return r(e,t,n)}a.prototype=Object.create(r.prototype),i(r,a),a.from=function(e,t,n){if(typeof e==`number`)throw TypeError(`Argument must not be a number`);return r(e,t,n)},a.alloc=function(e,t,n){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);var i=r(e);return t===void 0?i.fill(0):typeof n==`string`?i.fill(t,n):i.fill(t),i},a.allocUnsafe=function(e){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);return r(e)},a.allocUnsafeSlow=function(e){if(typeof e!=`number`)throw TypeError(`Argument must be a number`);return n.SlowBuffer(e)}})),ie=e((e=>{var t=re().Buffer,n=t.isEncoding||function(e){switch(e=``+e,e&&e.toLowerCase()){case`hex`:case`utf8`:case`utf-8`:case`ascii`:case`binary`:case`base64`:case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:case`raw`:return!0;default:return!1}};function r(e){if(!e)return`utf8`;for(var t;;)switch(e){case`utf8`:case`utf-8`:return`utf8`;case`ucs2`:case`ucs-2`:case`utf16le`:case`utf-16le`:return`utf16le`;case`latin1`:case`binary`:return`latin1`;case`base64`:case`ascii`:case`hex`:return e;default:if(t)return;e=(``+e).toLowerCase(),t=!0}}function i(e){var i=r(e);if(typeof i!=`string`&&(t.isEncoding===n||!n(e)))throw Error(`Unknown encoding: `+e);return i||e}e.StringDecoder=a;function a(e){this.encoding=i(e);var n;switch(this.encoding){case`utf16le`:this.text=f,this.end=p,n=4;break;case`utf8`:this.fillLast=l,n=4;break;case`base64`:this.text=m,this.end=h,n=3;break;default:this.write=g,this.end=_;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=t.allocUnsafe(n)}a.prototype.write=function(e){if(e.length===0)return``;var t,n;if(this.lastNeed){if(t=this.fillLast(e),t===void 0)return``;n=this.lastNeed,this.lastNeed=0}else n=0;return n>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e,t,n){var r=t.length-1;if(r=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(i===2?i=0:e.lastNeed=i-3),i):0))}function c(e,t,n){if((t[0]&192)!=128)return e.lastNeed=0,`�`;if(e.lastNeed>1&&t.length>1){if((t[1]&192)!=128)return e.lastNeed=1,`�`;if(e.lastNeed>2&&t.length>2&&(t[2]&192)!=128)return e.lastNeed=2,`�`}}function l(e){var t=this.lastTotal-this.lastNeed,n=c(this,e,t);if(n!==void 0)return n;if(this.lastNeed<=e.length)return e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,t,0,e.length),this.lastNeed-=e.length}function u(e,t){var n=s(this,e,t);if(!this.lastNeed)return e.toString(`utf8`,t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString(`utf8`,t,r)}function d(e){var t=e&&e.length?this.write(e):``;return this.lastNeed?t+`�`:t}function f(e,t){if((e.length-t)%2==0){var n=e.toString(`utf16le`,t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(`utf16le`,t,e.length-1)}function p(e){var t=e&&e.length?this.write(e):``;if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(`utf16le`,0,n)}return t}function m(e,t){var n=(e.length-t)%3;return n===0?e.toString(`base64`,t):(this.lastNeed=3-n,this.lastTotal=3,n===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(`base64`,t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):``;return this.lastNeed?t+this.lastChar.toString(`base64`,0,3-this.lastNeed):t}function g(e){return e.toString(this.encoding)}function _(e){return e&&e.length?this.write(e):``}})),$=e(((e,t)=>{var n=J().codes.ERR_STREAM_PREMATURE_CLOSE;function r(e){var t=!1;return function(){if(!t){t=!0;var n=[...arguments];e.apply(this,n)}}}function i(){}function a(e){return e.setHeader&&typeof e.abort==`function`}function o(e,t,s){if(typeof t==`function`)return o(e,null,t);t||={},s=r(s||i);var c=t.readable||t.readable!==!1&&e.readable,l=t.writable||t.writable!==!1&&e.writable,u=function(){e.writable||f()},d=e._writableState&&e._writableState.finished,f=function(){l=!1,d=!0,c||s.call(e)},p=e._readableState&&e._readableState.endEmitted,m=function(){c=!1,p=!0,l||s.call(e)},h=function(t){s.call(e,t)},g=function(){var t;if(c&&!p)return(!e._readableState||!e._readableState.ended)&&(t=new n),s.call(e,t);if(l&&!d)return(!e._writableState||!e._writableState.ended)&&(t=new n),s.call(e,t)},_=function(){e.req.on(`finish`,f)};return a(e)?(e.on(`complete`,f),e.on(`abort`,g),e.req?_():e.on(`request`,_)):l&&!e._writableState&&(e.on(`end`,u),e.on(`close`,u)),e.on(`end`,m),e.on(`finish`,f),t.error!==!1&&e.on(`error`,h),e.on(`close`,g),function(){e.removeListener(`complete`,f),e.removeListener(`abort`,g),e.removeListener(`request`,_),e.req&&e.req.removeListener(`finish`,f),e.removeListener(`end`,u),e.removeListener(`close`,u),e.removeListener(`finish`,f),e.removeListener(`end`,m),e.removeListener(`error`,h),e.removeListener(`close`,g)}}t.exports=o})),ae=e(((e,t)=>{var n;function r(e,t,n){return t=i(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){var t=a(e,`string`);return typeof t==`symbol`?t:String(t)}function a(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var o=$(),s=Symbol(`lastResolve`),c=Symbol(`lastReject`),l=Symbol(`error`),u=Symbol(`ended`),d=Symbol(`lastPromise`),f=Symbol(`handlePromise`),p=Symbol(`stream`);function m(e,t){return{value:e,done:t}}function h(e){var t=e[s];if(t!==null){var n=e[p].read();n!==null&&(e[d]=null,e[s]=null,e[c]=null,t(m(n,!1)))}}function g(e){process.nextTick(h,e)}function _(e,t){return function(n,r){e.then(function(){if(t[u]){n(m(void 0,!0));return}t[f](n,r)},r)}}var v=Object.getPrototypeOf(function(){}),y=Object.setPrototypeOf((n={get stream(){return this[p]},next:function(){var e=this,t=this[l];if(t!==null)return Promise.reject(t);if(this[u])return Promise.resolve(m(void 0,!0));if(this[p].destroyed)return new Promise(function(t,n){process.nextTick(function(){e[l]?n(e[l]):t(m(void 0,!0))})});var n=this[d],r;if(n)r=new Promise(_(n,this));else{var i=this[p].read();if(i!==null)return Promise.resolve(m(i,!1));r=new Promise(this[f])}return this[d]=r,r}},r(n,Symbol.asyncIterator,function(){return this}),r(n,`return`,function(){var e=this;return new Promise(function(t,n){e[p].destroy(null,function(e){if(e){n(e);return}t(m(void 0,!0))})})}),n),v);t.exports=function(e){var t,n=Object.create(y,(t={},r(t,p,{value:e,writable:!0}),r(t,s,{value:null,writable:!0}),r(t,c,{value:null,writable:!0}),r(t,l,{value:null,writable:!0}),r(t,u,{value:e._readableState.endEmitted,writable:!0}),r(t,f,{value:function(e,t){var r=n[p].read();r?(n[d]=null,n[s]=null,n[c]=null,e(m(r,!1))):(n[s]=e,n[c]=t)},writable:!0}),t));return n[d]=null,o(e,function(e){if(e&&e.code!==`ERR_STREAM_PREMATURE_CLOSE`){var t=n[c];t!==null&&(n[d]=null,n[s]=null,n[c]=null,t(e)),n[l]=e;return}var r=n[s];r!==null&&(n[d]=null,n[s]=null,n[c]=null,r(m(void 0,!0))),n[u]=!0}),e.on(`readable`,g.bind(null,n)),n}})),oe=e(((e,t)=>{t.exports=function(){throw Error(`Readable.from is not available in the browser`)}})),se=e(((e,t)=>{t.exports=E;var n;E.ReadableState=T,F().EventEmitter;var r=function(e,t){return e.listeners(t).length},i=ee(),a=R().Buffer,o=(typeof global<`u`?global:typeof window<`u`?window:typeof self<`u`?self:{}).Uint8Array||function(){};function s(e){return a.from(e)}function c(e){return a.isBuffer(e)||e instanceof o}var l=te(),u=l&&l.debuglog?l.debuglog(`stream`):function(){},d=ne(),f=q(),p=Y().getHighWaterMark,m=J().codes,h=m.ERR_INVALID_ARG_TYPE,g=m.ERR_STREAM_PUSH_AFTER_EOF,_=m.ERR_METHOD_NOT_IMPLEMENTED,v=m.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,y,b,x;K()(E,i);var S=f.errorOrDestroy,C=[`error`,`close`,`destroy`,`pause`,`resume`];function w(e,t,n){if(typeof e.prependListener==`function`)return e.prependListener(t,n);!e._events||!e._events[t]?e.on(t,n):Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]}function T(e,t,r){n||=Q(),e||={},typeof r!=`boolean`&&(r=t instanceof n),this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=p(this,e,`readableHighWaterMark`,r),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||`utf8`,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(y||=ie().StringDecoder,this.decoder=new y(e.encoding),this.encoding=e.encoding)}function E(e){if(n||=Q(),!(this instanceof E))return new E(e);var t=this instanceof n;this._readableState=new T(e,this,t),this.readable=!0,e&&(typeof e.read==`function`&&(this._read=e.read),typeof e.destroy==`function`&&(this._destroy=e.destroy)),i.call(this)}Object.defineProperty(E.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState!==void 0&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),E.prototype.destroy=f.destroy,E.prototype._undestroy=f.undestroy,E.prototype._destroy=function(e,t){t(e)},E.prototype.push=function(e,t){var n=this._readableState,r;return n.objectMode?r=!0:typeof e==`string`&&(t||=n.defaultEncoding,t!==n.encoding&&(e=a.from(e,t),t=``),r=!0),D(this,e,t,!1,r)},E.prototype.unshift=function(e){return D(this,e,null,!0,!1)};function D(e,t,n,r,i){u(`readableAddChunk`,t);var o=e._readableState;if(t===null)o.reading=!1,N(e,o);else{var c;if(i||(c=k(o,t)),c)S(e,c);else if(o.objectMode||t&&t.length>0){if(typeof t!=`string`&&!o.objectMode&&Object.getPrototypeOf(t)!==a.prototype&&(t=s(t)),r)o.endEmitted?S(e,new v):O(e,o,t,!0);else if(o.ended)S(e,new g);else if(o.destroyed)return!1;else o.reading=!1,o.decoder&&!n?(t=o.decoder.write(t),o.objectMode||t.length!==0?O(e,o,t,!1):L(e,o)):O(e,o,t,!1)}else r||(o.reading=!1,L(e,o))}return!o.ended&&(o.length=A?e=A:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function M(e,t){return e<=0||t.length===0&&t.ended?0:t.objectMode?1:e===e?(e>t.highWaterMark&&(t.highWaterMark=j(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0)):t.flowing&&t.length?t.buffer.head.data.length:t.length}E.prototype.read=function(e){u(`read`,e),e=parseInt(e,10);var t=this._readableState,n=e;if(e!==0&&(t.emittedReadable=!1),e===0&&t.needReadable&&((t.highWaterMark===0?t.length>0:t.length>=t.highWaterMark)||t.ended))return u(`read: emitReadable`,t.length,t.ended),t.length===0&&t.ended?Z(this):P(this),null;if(e=M(e,t),e===0&&t.ended)return t.length===0&&Z(this),null;var r=t.needReadable;u(`need readable`,r),(t.length===0||t.length-e0?X(e,t):null;return i===null?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),t.length===0&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&Z(this)),i!==null&&this.emit(`data`,i),i};function N(e,t){if(u(`onEofChunk`),!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?P(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,I(e)))}}function P(e){var t=e._readableState;u(`emitReadable`,t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(u(`emitReadable`,t.flowing),t.emittedReadable=!0,process.nextTick(I,e))}function I(e){var t=e._readableState;u(`emitReadable_`,t.destroyed,t.length,t.ended),!t.destroyed&&(t.length||t.ended)&&(e.emit(`readable`),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,G(e)}function L(e,t){t.readingMore||(t.readingMore=!0,process.nextTick(z,e,t))}function z(e,t){for(;!t.reading&&!t.ended&&(t.length1&&$(i.pipes,e)!==-1)&&!l&&(u(`false write response, pause`,i.awaitDrain),i.awaitDrain++),n.pause())}function p(t){u(`onerror`,t),g(),e.removeListener(`error`,p),r(e,`error`)===0&&S(e,t)}w(e,`error`,p);function m(){e.removeListener(`finish`,h),g()}e.once(`close`,m);function h(){u(`onfinish`),e.removeListener(`close`,m),g()}e.once(`finish`,h);function g(){u(`unpipe`),n.unpipe(e)}return e.emit(`pipe`,n),i.flowing||(u(`pipe resume`),n.resume()),e};function B(e){return function(){var t=e._readableState;u(`pipeOnDrain`,t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&r(e,`data`)&&(t.flowing=!0,G(e))}}E.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(t.pipesCount===0)return this;if(t.pipesCount===1)return e&&e!==t.pipes?this:(e||=t.pipes,t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(`unpipe`,this,n),this);if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a0,r.flowing!==!1&&this.resume()):e===`readable`&&!r.endEmitted&&!r.readableListening&&(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,u(`on readable`,r.length,r.reading),r.length?P(this):r.reading||process.nextTick(H,this)),n},E.prototype.addListener=E.prototype.on,E.prototype.removeListener=function(e,t){var n=i.prototype.removeListener.call(this,e,t);return e===`readable`&&process.nextTick(V,this),n},E.prototype.removeAllListeners=function(e){var t=i.prototype.removeAllListeners.apply(this,arguments);return(e===`readable`||e===void 0)&&process.nextTick(V,this),t};function V(e){var t=e._readableState;t.readableListening=e.listenerCount(`readable`)>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(`data`)>0&&e.resume()}function H(e){u(`readable nexttick read 0`),e.read(0)}E.prototype.resume=function(){var e=this._readableState;return e.flowing||(u(`resume`),e.flowing=!e.readableListening,U(this,e)),e.paused=!1,this};function U(e,t){t.resumeScheduled||(t.resumeScheduled=!0,process.nextTick(W,e,t))}function W(e,t){u(`resume`,t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(`resume`),G(e),t.flowing&&!t.reading&&e.read(0)}E.prototype.pause=function(){return u(`call pause flowing=%j`,this._readableState.flowing),this._readableState.flowing!==!1&&(u(`pause`),this._readableState.flowing=!1,this.emit(`pause`)),this._readableState.paused=!0,this};function G(e){var t=e._readableState;for(u(`flow`,t.flowing);t.flowing&&e.read()!==null;);}E.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var i in e.on(`end`,function(){if(u(`wrapped end`),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)}),e.on(`data`,function(i){u(`wrapped data`),n.decoder&&(i=n.decoder.write(i)),!(n.objectMode&&i==null)&&(n.objectMode||i&&i.length)&&(t.push(i)||(r=!0,e.pause()))}),e)this[i]===void 0&&typeof e[i]==`function`&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var a=0;a=t.length?(n=t.decoder?t.buffer.join(``):t.buffer.length===1?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n}function Z(e){var t=e._readableState;u(`endReadable`,t.endEmitted),t.endEmitted||(t.ended=!0,process.nextTick(re,t,e))}function re(e,t){if(u(`endReadableNT`,e.endEmitted,e.length),!e.endEmitted&&e.length===0&&(e.endEmitted=!0,t.readable=!1,t.emit(`end`),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}typeof Symbol==`function`&&(E.from=function(e,t){return x===void 0&&(x=oe()),x(E,e,t)});function $(e,t){for(var n=0,r=e.length;n{t.exports=l;var n=J().codes,r=n.ERR_METHOD_NOT_IMPLEMENTED,i=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,o=n.ERR_TRANSFORM_WITH_LENGTH_0,s=Q();K()(l,s);function c(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(r===null)return this.emit(`error`,new i);n.writechunk=null,n.writecb=null,t!=null&&this.push(t),r(e);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{t.exports=r;var n=ce();K()(r,n);function r(e){if(!(this instanceof r))return new r(e);n.call(this,e)}r.prototype._transform=function(e,t,n){n(null,e)}})),ue=e(((e,t)=>{var n;function r(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}var i=J().codes,a=i.ERR_MISSING_ARGS,o=i.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function c(e){return e.setHeader&&typeof e.abort==`function`}function l(e,t,i,a){a=r(a);var s=!1;e.on(`close`,function(){s=!0}),n===void 0&&(n=$()),n(e,{readable:t,writable:i},function(e){if(e)return a(e);s=!0,a()});var l=!1;return function(t){if(!s&&!l){if(l=!0,c(e))return e.abort();if(typeof e.destroy==`function`)return e.destroy();a(t||new o(`pipe`))}}}function u(e){e()}function d(e,t){return e.pipe(t)}function f(e){return!e.length||typeof e[e.length-1]!=`function`?s:e.pop()}function p(){var e=[...arguments],t=f(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new a(`streams`);var n,r=e.map(function(i,a){var o=a0,function(e){n||=e,e&&r.forEach(u),!o&&(r.forEach(u),t(n))})});return e.reduce(d)}t.exports=p})),de=e(((e,t)=>{t.exports=r;var n=F().EventEmitter;K()(r,n),r.Readable=se(),r.Writable=Z(),r.Duplex=Q(),r.Transform=ce(),r.PassThrough=le(),r.finished=$(),r.pipeline=ue(),r.Stream=r;function r(){n.call(this)}r.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}r.on(`data`,i);function a(){r.readable&&r.resume&&r.resume()}e.on(`drain`,a),!e._isStdio&&(!t||t.end!==!1)&&(r.on(`end`,s),r.on(`close`,c));var o=!1;function s(){o||(o=!0,e.end())}function c(){o||(o=!0,typeof e.destroy==`function`&&e.destroy())}function l(e){if(u(),n.listenerCount(this,`error`)===0)throw e}r.on(`error`,l),e.on(`error`,l);function u(){r.removeListener(`data`,i),e.removeListener(`drain`,a),r.removeListener(`end`,s),r.removeListener(`close`,c),r.removeListener(`error`,l),e.removeListener(`error`,l),r.removeListener(`end`,u),r.removeListener(`close`,u),e.removeListener(`close`,u)}return r.on(`end`,u),r.on(`close`,u),e.on(`close`,u),e.emit(`pipe`,r),e}}))();async function*fe(e,t,n){let r=1,i={chunks:[],length:0};for await(let a of n(e))for(i.chunks.push(a),i.length+=a.byteLength;i.length>t;){let e=i.chunks.length>1?V.Buffer.concat(i.chunks):i.chunks[0];yield{partNumber:r,data:e.subarray(0,t)},i.chunks=[e.subarray(t)],i.length=i.chunks[0].byteLength,r+=1}yield{partNumber:r,data:i.chunks.length===1?i.chunks[0]:V.Buffer.concat(i.chunks),lastPart:!0}}async function*pe(e,t){let n=1,r=0,i=t;for(;i{if(e instanceof Uint8Array)return pe(e,t);if(e instanceof de.Readable)return fe(e,t,me);if(e instanceof String||typeof e==`string`)return pe(V.Buffer.from(e),t);if(typeof e.stream==`function`)return fe(e.stream(),t,he);if(e instanceof ReadableStream)return fe(e,t,he);throw Error(`Body Data is unsupported format, expected data to be one of: string | Uint8Array | Buffer | Readable | ReadableStream | Blob;.`)},_e=class e extends B.EventEmitter{static MIN_PART_SIZE=5242880;MAX_PARTS=1e4;queueSize=4;partSize;leavePartsOnError=!1;tags=[];client;params;totalBytes;totalBytesSource;bytesUploadedSoFar;abortController;concurrentUploaders=[];createMultiPartPromise;abortMultipartUploadCommand=null;uploadedParts=[];uploadEnqueuedPartsCount=0;expectedPartsCount;uploadId;uploadEvent;isMultiPart=!0;singleUploadResult;sent=!1;constructor(t){if(super(),this.queueSize=t.queueSize||this.queueSize,this.leavePartsOnError=t.leavePartsOnError||this.leavePartsOnError,this.tags=t.tags||this.tags,this.client=t.client,this.params=t.params,!this.params)throw Error(`InputError: Upload requires params to be passed to upload.`);this.totalBytes=this.params.ContentLength??U(this.params.Body),this.totalBytesSource=G(this.params.Body,this.params.ContentLength),this.bytesUploadedSoFar=0,this.abortController=t.abortController??new AbortController,this.partSize=t.partSize||Math.max(e.MIN_PART_SIZE,Math.ceil((this.totalBytes||0)/this.MAX_PARTS)),this.totalBytes!==void 0&&(this.expectedPartsCount=Math.ceil(this.totalBytes/this.partSize)),this.__validateInput()}async abort(){this.abortController.abort()}async done(){if(this.sent)throw Error(`@aws-sdk/lib-storage: this instance of Upload has already executed .done(). Create a new instance.`);return this.sent=!0,await Promise.race([this.__doMultipartUpload(),this.__abortTimeout(this.abortController.signal)])}on(e,t){return this.uploadEvent=e,super.on(e,t)}async __uploadUsingPut(e){this.isMultiPart=!1;let t={...this.params,Body:e.data},n=this.client.config,r=n.requestHandler,s=r instanceof B.EventEmitter?r:null,c=t=>{this.bytesUploadedSoFar=t.loaded,this.totalBytes=t.total,this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:e.partNumber,Key:this.params.Key,Bucket:this.params.Bucket})};s!==null&&s.on(`xhr.upload.progress`,c);let l=await Promise.all([this.client.send(new j(t)),n?.endpoint?.()]),u=l[0],d=l[1];if(d||=i(await a(t,j,{...n})),!d)throw Error(`Could not resolve endpoint from S3 "client.config.endpoint()" nor EndpointsV2.`);s!==null&&s.off(`xhr.upload.progress`,c);let f=this.params.Key.split(`/`).map(e=>o(e)).join(`/`),p=o(this.params.Bucket),m=(()=>{let e=d.hostname.startsWith(`${p}.`),t=this.client.config.forcePathStyle,n=d.port?`:${d.port}`:``;return t?`${d.protocol}//${d.hostname}${n}/${p}/${f}`:e?`${d.protocol}//${d.hostname}${n}/${f}`:`${d.protocol}//${p}.${d.hostname}${n}/${f}`})();this.singleUploadResult={...u,Bucket:this.params.Bucket,Key:this.params.Key,Location:m};let h=U(e.data);this.__notifyProgress({loaded:h,total:h,part:1,Key:this.params.Key,Bucket:this.params.Bucket})}async __createMultipartUpload(){let e=await this.client.config.requestChecksumCalculation();if(!this.createMultiPartPromise){let t={...this.params,Body:void 0};e===`WHEN_SUPPORTED`&&(t.ChecksumAlgorithm=this.params.ChecksumAlgorithm||P.CRC32),this.createMultiPartPromise=this.client.send(new k(t)).then(e=>(this.abortMultipartUploadCommand=new E({Bucket:this.params.Bucket,Key:this.params.Key,UploadId:e.UploadId}),e))}return this.createMultiPartPromise}async __doConcurrentUpload(e){for await(let t of e){if(this.uploadEnqueuedPartsCount>this.MAX_PARTS)throw Error(`Exceeded ${this.MAX_PARTS} parts in multipart upload to Bucket: ${this.params.Bucket} Key: ${this.params.Key}.`);if(this.abortController.signal.aborted)return;if(t.partNumber===1&&t.lastPart)return await this.__uploadUsingPut(t);if(!this.uploadId){let{UploadId:e}=await this.__createMultipartUpload();if(this.uploadId=e,this.abortController.signal.aborted)return}let e=U(t.data)||0,n=this.client.config.requestHandler,r=n instanceof B.EventEmitter?n:null,i=0,a=(n,r)=>{(Number(r.query.partNumber)||-1)===t.partNumber&&(n.total&&e&&(this.bytesUploadedSoFar+=n.loaded-i,i=n.loaded),this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:t.partNumber,Key:this.params.Key,Bucket:this.params.Bucket}))};r!==null&&r.on(`xhr.upload.progress`,a),this.uploadEnqueuedPartsCount+=1,this.__validateUploadPart(t);let o=await this.client.send(new N({...this.params,ContentLength:void 0,UploadId:this.uploadId,Body:t.data,PartNumber:t.partNumber}));if(r!==null&&r.off(`xhr.upload.progress`,a),this.abortController.signal.aborted)return;if(!o.ETag)throw Error(`Part ${t.partNumber} is missing ETag in UploadPart response. Missing Bucket CORS configuration for ETag header?`);this.uploadedParts.push({PartNumber:t.partNumber,ETag:o.ETag,...o.ChecksumCRC32&&{ChecksumCRC32:o.ChecksumCRC32},...o.ChecksumCRC32C&&{ChecksumCRC32C:o.ChecksumCRC32C},...o.ChecksumSHA1&&{ChecksumSHA1:o.ChecksumSHA1},...o.ChecksumSHA256&&{ChecksumSHA256:o.ChecksumSHA256}}),r===null&&(this.bytesUploadedSoFar+=e),this.__notifyProgress({loaded:this.bytesUploadedSoFar,total:this.totalBytes,part:t.partNumber,Key:this.params.Key,Bucket:this.params.Bucket})}}async __doMultipartUpload(){let e=ge(this.params.Body,this.partSize),t=[];for(let n=0;n{t.push(e)});this.concurrentUploaders.push(n)}if(await Promise.all(this.concurrentUploaders),t.length>=1)throw await this.markUploadAsAborted(),t[0];if(this.abortController.signal.aborted)throw await this.markUploadAsAborted(),Object.assign(Error(`Upload aborted.`),{name:`AbortError`});let n;if(this.isMultiPart){let{expectedPartsCount:e,uploadedParts:t,totalBytes:r,totalBytesSource:i}=this;if(r!==void 0&&e!==void 0&&t.length!==e)throw await this.markUploadAsAborted(),Error(`Expected ${e} part(s) but uploaded ${t.length} part(s). The expected part count is based on the byte-count of the input.params.Body, which was read from ${i} and is ${r}. If this is not correct, provide an override value by setting a number diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-BkxIRro9.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-DFjvW5uT.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-BkxIRro9.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-DFjvW5uT.js index 0fbbd2ef4..e85e73c1f 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-BkxIRro9.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/security-group-checkboxes-DFjvW5uT.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{un as n}from"./cluster-config-xw_Q7X1e.js";import{c as r,i,n as a,s as o,t as s}from"./select-B01jpDaX.js";import{n as c}from"./zod-DF_n2ejy.js";import{n as l,r as u,s as d,t as f}from"./field-c7GHI5st.js";import{t as p}from"./picker-notice-tK9XfUSR.js";var m=t(),h=e();function g(e){let t=(0,m.c)(13),{control:n,name:i,id:g,label:v,placeholder:y,options:b,notice:x,description:S,warning:C,onValueChange:w}=e,T;t[0]!==S||t[1]!==g||t[2]!==v||t[3]!==x||t[4]!==w||t[5]!==b||t[6]!==y||t[7]!==C?(T=e=>{let{field:t,fieldState:n}=e,i=typeof t.value==`string`?t.value:``;return(0,h.jsxs)(f,{children:[(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:g,children:v})}),x?(0,h.jsx)(p,{notice:x}):(0,h.jsxs)(s,{onValueChange:e=>{(w??t.onChange)(e??``)},value:i,children:[(0,h.jsx)(o,{"aria-invalid":!!n.error,className:`w-full`,id:g,children:(0,h.jsx)(r,{placeholder:y})}),(0,h.jsx)(a,{children:b.map(_)})]}),S&&(0,h.jsx)(l,{children:S}),C&&(0,h.jsx)(`p`,{className:`text-xs text-tactical-amber`,children:C}),(0,h.jsx)(u,{errors:[n.error]})]})},t[0]=S,t[1]=g,t[2]=v,t[3]=x,t[4]=w,t[5]=b,t[6]=y,t[7]=C,t[8]=T):T=t[8];let E;return t[9]!==n||t[10]!==i||t[11]!==T?(E=(0,h.jsx)(c,{control:n,name:i,render:T}),t[9]=n,t[10]=i,t[11]=T,t[12]=E):E=t[12],E}function _(e){return(0,h.jsx)(i,{value:e.value,children:e.label},e.value)}function v(e){let t=(0,m.c)(3),{control:n,name:r}=e,i;return t[0]!==n||t[1]!==r?(i=(0,h.jsx)(c,{control:n,name:r,render:y}),t[0]=n,t[1]=r,t[2]=i):i=t[2],i}function y(e){let{field:t,fieldState:n}=e;return(0,h.jsxs)(f,{children:[(0,h.jsx)(d,{children:`Deletion protection`}),(0,h.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,h.jsx)(`input`,{"aria-label":`Enable deletion protection`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),(0,h.jsx)(`span`,{children:`Refuse DeleteDBInstance while this is on`})]}),(0,h.jsx)(u,{errors:[n.error]})]})}function b(e,t,n){let r=new Set(t.filter(e=>e.Engine===n).map(e=>e.DBParameterGroupFamily));return e.filter(e=>r.has(e.DBParameterGroupFamily))}function x(e,t){return t?e.filter(e=>e.VpcId===t):[]}function S(e,t,n){let r=new Set(x(e,t).map(e=>e.GroupId));return n.filter(e=>r.has(e))}function C(e,t){return x(e,t).find(e=>e.GroupName==="default")?.GroupId}function w(e){let t=(0,m.c)(16),{emptyText:r,groups:i,onChange:a,selected:o}=e;if(i.length===0){let e;return t[0]===r?e=t[1]:(e=(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r}),t[0]=r,t[1]=e),e}let s;t[2]===o?s=t[3]:(s=new Set(o),t[2]=o,t[3]=s);let c=s,l;t[4]!==a||t[5]!==o?(l=e=>{a(o.includes(e)?o.filter(t=>t!==e):[...o,e])},t[4]=a,t[5]=o,t[6]=l):l=t[6];let u=l,d;if(t[7]!==i||t[8]!==c||t[9]!==u){let e;t[11]!==c||t[12]!==u?(e=e=>(0,h.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,h.jsx)(`input`,{"aria-label":`Security group ${n(e)}`,checked:c.has(e.GroupId??``),onChange:()=>{u(e.GroupId??``)},type:`checkbox`}),(0,h.jsx)(`span`,{className:`font-mono`,children:n(e)})]},e.GroupId),t[11]=c,t[12]=u,t[13]=e):e=t[13],d=i.map(e),t[7]=i,t[8]=c,t[9]=u,t[10]=d}else d=t[10];let f;return t[14]===d?f=t[15]:(f=(0,h.jsx)(`div`,{className:`space-y-1`,children:d}),t[14]=d,t[15]=f),f}export{v as a,x as i,C as n,g as o,S as r,b as s,w as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{dn as n}from"./cluster-config-DkOiY8HH.js";import{c as r,i,n as a,s as o,t as s}from"./select-Cn66OoPn.js";import{n as c}from"./zod-A4qtKH_p.js";import{n as l,r as u,s as d,t as f}from"./field-CS-ql6du.js";import{t as p}from"./picker-notice-tK9XfUSR.js";var m=t(),h=e();function g(e){let t=(0,m.c)(13),{control:n,name:i,id:g,label:v,placeholder:y,options:b,notice:x,description:S,warning:C,onValueChange:w}=e,T;t[0]!==S||t[1]!==g||t[2]!==v||t[3]!==x||t[4]!==w||t[5]!==b||t[6]!==y||t[7]!==C?(T=e=>{let{field:t,fieldState:n}=e,i=typeof t.value==`string`?t.value:``;return(0,h.jsxs)(f,{children:[(0,h.jsx)(d,{children:(0,h.jsx)(`label`,{htmlFor:g,children:v})}),x?(0,h.jsx)(p,{notice:x}):(0,h.jsxs)(s,{onValueChange:e=>{(w??t.onChange)(e??``)},value:i,children:[(0,h.jsx)(o,{"aria-invalid":!!n.error,className:`w-full`,id:g,children:(0,h.jsx)(r,{placeholder:y})}),(0,h.jsx)(a,{children:b.map(_)})]}),S&&(0,h.jsx)(l,{children:S}),C&&(0,h.jsx)(`p`,{className:`text-xs text-tactical-amber`,children:C}),(0,h.jsx)(u,{errors:[n.error]})]})},t[0]=S,t[1]=g,t[2]=v,t[3]=x,t[4]=w,t[5]=b,t[6]=y,t[7]=C,t[8]=T):T=t[8];let E;return t[9]!==n||t[10]!==i||t[11]!==T?(E=(0,h.jsx)(c,{control:n,name:i,render:T}),t[9]=n,t[10]=i,t[11]=T,t[12]=E):E=t[12],E}function _(e){return(0,h.jsx)(i,{value:e.value,children:e.label},e.value)}function v(e){let t=(0,m.c)(3),{control:n,name:r}=e,i;return t[0]!==n||t[1]!==r?(i=(0,h.jsx)(c,{control:n,name:r,render:y}),t[0]=n,t[1]=r,t[2]=i):i=t[2],i}function y(e){let{field:t,fieldState:n}=e;return(0,h.jsxs)(f,{children:[(0,h.jsx)(d,{children:`Deletion protection`}),(0,h.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,h.jsx)(`input`,{"aria-label":`Enable deletion protection`,checked:t.value,onChange:e=>{t.onChange(e.target.checked)},type:`checkbox`}),(0,h.jsx)(`span`,{children:`Refuse DeleteDBInstance while this is on`})]}),(0,h.jsx)(u,{errors:[n.error]})]})}function b(e,t,n){let r=new Set(t.filter(e=>e.Engine===n).map(e=>e.DBParameterGroupFamily));return e.filter(e=>r.has(e.DBParameterGroupFamily))}function x(e,t){return t?e.filter(e=>e.VpcId===t):[]}function S(e,t,n){let r=new Set(x(e,t).map(e=>e.GroupId));return n.filter(e=>r.has(e))}function C(e,t){return x(e,t).find(e=>e.GroupName==="default")?.GroupId}function w(e){let t=(0,m.c)(16),{emptyText:r,groups:i,onChange:a,selected:o}=e;if(i.length===0){let e;return t[0]===r?e=t[1]:(e=(0,h.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r}),t[0]=r,t[1]=e),e}let s;t[2]===o?s=t[3]:(s=new Set(o),t[2]=o,t[3]=s);let c=s,l;t[4]!==a||t[5]!==o?(l=e=>{a(o.includes(e)?o.filter(t=>t!==e):[...o,e])},t[4]=a,t[5]=o,t[6]=l):l=t[6];let u=l,d;if(t[7]!==i||t[8]!==c||t[9]!==u){let e;t[11]!==c||t[12]!==u?(e=e=>(0,h.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,h.jsx)(`input`,{"aria-label":`Security group ${n(e)}`,checked:c.has(e.GroupId??``),onChange:()=>{u(e.GroupId??``)},type:`checkbox`}),(0,h.jsx)(`span`,{className:`font-mono`,children:n(e)})]},e.GroupId),t[11]=c,t[12]=u,t[13]=e):e=t[13],d=i.map(e),t[7]=i,t[8]=c,t[9]=u,t[10]=d}else d=t[10];let f;return t[14]===d?f=t[15]:(f=(0,h.jsx)(`div`,{className:`space-y-1`,children:d}),t[14]=d,t[15]=f),f}export{v as a,x as i,C as n,g as o,S as r,b as s,w as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-B01jpDaX.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-Cn66OoPn.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-B01jpDaX.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-Cn66OoPn.js index 487a3d099..16bf40df5 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-B01jpDaX.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/select-Cn66OoPn.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{c as i,i as a,l as o,n as s,r as c,t as l}from"./useValueAsRef-F56m8WbP.js";import{a as u,c as d,f,i as p,l as m,n as h,o as g,u as _}from"./dist-BKgR2qk6.js";import{tn as v}from"./cluster-config-xw_Q7X1e.js";import{t as y}from"./createLucideIcon-BQgzNCBR.js";import{t as b}from"./check-BO7W8OSs.js";import{t as x}from"./chevron-down-Dt4q6d24.js";import{_ as S,b as C,o as w,r as T,s as E,y as D}from"./button-BarTr35m.js";import{C as O,E as k,S as A,T as j,_ as M,f as N,g as P,l as F,n as I,o as L,t as R,u as z,w as B,x as ee,y as V}from"./createBaseUIEventDetails-DL-8egB9.js";import{a as te,i as H,n as ne,o as U,r as re,s as W,t as G}from"./useValueChanged-B2TUO8IO.js";import{A as ie,B as ae,Ct as K,E as oe,G as se,I as ce,J as q,K as J,M as Y,N as le,Q as X,R as ue,St as de,T as fe,U as pe,V as me,W as he,X as ge,Y as _e,Z as ve,_t as ye,bt as be,c as xe,et as Se,it as Ce,j as we,k as Te,lt as Ee,m as De,n as Oe,p as ke,q as Ae,r as je,rt as Z,st as Me,t as Ne,ut as Pe,vt as Fe,xt as Ie,yt as Le}from"./useScrollLock-NX6x9Pv8.js";import{a as Re,i as ze,n as Be,r as Ve,t as He}from"./usePositioner-DUsvphCt.js";import{t as Ue}from"./useControlled-DwxdYHYK.js";import{t as We}from"./DirectionContext-C9rdm8xn.js";import{n as Ge,r as Ke,t as qe}from"./useCompositeListItem-CEsaEeXb.js";var Je={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};Je.node;var Ye=y(Je),Q=t(n(),1);function Xe(e,t={}){let{enabled:n=!0,event:r=`click`,toggle:a=!0,ignoreMouse:o=!1,stickIfOpen:s=!0,touchOpenDelay:c=0,reason:l=P}=t,d=`rootStore`in e?e.rootStore:e,f=d.context.dataRef,p=Q.useRef(void 0),m=i(),h=V(),g=Q.useMemo(()=>{function e(e,t,n,r){let i=R(l,t,n);e&&r===`touch`&&c>0?h.start(c,()=>{d.setOpen(!0,i)}):d.setOpen(e,i)}function t(e,t,n){let r=f.current.openEvent,i=d.select(`domReferenceElement`)!==t;return e&&i||!e||!a?!0:r&&s?!n(r.type):!1}return{onPointerDown(e){p.current=_e(e.pointerType,!0)&&ve(e.nativeEvent)?`virtual`:e.pointerType},onMouseDown(n){let i=p.current,a=n.nativeEvent,s=d.select(`open`);if(n.button!==0||r===`click`||_e(i,!0)&&o)return;let c=t(s,n.currentTarget,e=>e===`click`||e===`mousedown`),l=O(a);if(Ce(l)){e(c,a,l,i);return}let u=n.currentTarget;m.request(()=>{e(c,a,u,i)})},onClick(n){if(r===`mousedown-only`)return;let i=p.current;if(r===`mousedown`&&i){p.current=void 0;return}_e(i,!0)&&o||e(t(d.select(`open`),n.currentTarget,e=>e===`click`||e===`mousedown`||e===`keydown`||e===`keyup`),n.nativeEvent,n.currentTarget,i)},onKeyDown(){p.current=void 0}}},[f,r,o,l,d,s,a,m,h,c]);return Q.useMemo(()=>n?{reference:g}:u,[n,g])}function Ze(e){let{open:t=!1,onOpenChange:n,elements:r={}}=e,i=j(),a=we()!=null,o=m(()=>new fe({open:t,transitionStatus:void 0,onOpenChange:n,referenceElement:r.reference??null,floatingElement:r.floating??null,triggerElements:new ke,floatingId:i,syncOnly:!1,nested:a})).current;return w(()=>{let e={open:t,floatingId:i};r.reference!==void 0&&(e.referenceElement=r.reference,e.domReferenceElement=D(r.reference)?r.reference:null),r.floating!==void 0&&(e.floatingElement=r.floating),o.update(e)},[t,i,r.reference,r.floating,o]),o.context.onOpenChange=n,o.context.nested=a,o}var Qe=`Escape`;function $e(e){return de&&e.movementX===0&&e.movementY===0}function et(e,t,n){switch(e){case`vertical`:return t;case`horizontal`:return n;default:return t||n}}function tt(e,t){return et(t,e===`ArrowUp`||e===`ArrowDown`,e===`ArrowLeft`||e===`ArrowRight`)}function nt(e,t,n){return et(t,e===`ArrowDown`,n?e===`ArrowLeft`:e===`ArrowRight`)||e===`Enter`||e===` `||e===``}function rt(e,t,n){return et(t,n?e===Fe:e===Le,e===ye)}function it(e,t,n,r){return t===`both`||t===`horizontal`&&r?e===Qe:et(t,n?e===Le:e===Fe,e===be)}function at(e,t){let{listRef:n,activeIndex:r,onNavigate:a=()=>{},enabled:o=!0,selectedIndex:s=null,allowEscape:c=!1,loopFocus:u=!1,nested:d=!1,rtl:f=!1,virtual:p=!1,focusItemOnOpen:m=`auto`,focusItemOnHover:h=!0,openOnArrowKeyDown:g=!0,disabledIndices:_=void 0,orientation:v=`vertical`,parentOrientation:y,id:b,resetOnPointerLeave:x=!0,externalTree:S,grid:T}=t,D=T!=null,j=`rootStore`in e?e.rootStore:e,M=j.useState(`open`),N=j.useState(`floatingElement`),P=j.useState(`domReferenceElement`),F=j.context.dataRef,I=Se(N),B=Z(P),V=l(I),te=we(),H=Y(S),ne=Q.useRef(m),U=Q.useRef(s??-1),re=Q.useRef(null),W=Q.useRef(!0),G=E(e=>{a(U.current===-1?null:U.current,e)}),ie=Q.useRef(!!N),ae=Q.useRef(M),K=Q.useRef(!1),oe=Q.useRef(!1),ce=Q.useRef(null),q=l(_),J=l(M),le=l(s),de=l(x),fe=i(),me=i(),_e=E(()=>{function e(e){p?H?.events.emit(`virtualfocus`,e):ce.current=ue(e,{sync:K.current,preventScroll:!0})}let t=n.current[U.current],r=oe.current;t&&e(t),(K.current?e=>e():e=>fe.request(e))(()=>{let i=n.current[U.current]||t;i&&(t||e(i),Ee&&(r||!W.current)&&i.scrollIntoView?.({block:`nearest`,inline:`nearest`}))})});w(()=>{F.current.orientation=v},[F,v]),w(()=>{o&&(M&&N?(U.current=s??-1,ne.current&&s!=null&&(oe.current=!0,G())):ie.current&&(U.current=-1,G()))},[o,M,N,s,G]),w(()=>{if(o){if(!M){K.current=!1;return}if(N){if(r==null){if(K.current=!1,le.current!=null)return;if(ie.current&&(U.current=-1,_e()),(!ae.current||!ie.current)&&ne.current&&(re.current!=null||ne.current===!0&&re.current==null)){let e=0,t=()=>{n.current[0]==null?(e<2&&(e?e=>me.request(e):queueMicrotask)(t),e+=1):(U.current=re.current==null||nt(re.current,v,f)||d?se(n):he(n),re.current=null,G())};t()}}else Ae(n.current,r)||(U.current=r,_e(),oe.current=!1)}}},[o,M,N,r,le,d,n,v,f,G,_e,me]),w(()=>{if(!o||N||!H||p||!ie.current)return;let e=H.nodesRef.current,t=e.find(e=>e.id===te)?.context?.elements.floating,n=ee(k(P??t??null)),r=e.some(e=>e.context&&A(e.context.elements.floating,n));t&&!r&&W.current&&t.focus({preventScroll:!0})},[o,N,P,H,te,p]),w(()=>{ae.current=M,ie.current=!!N}),w(()=>{M||(re.current=null,ne.current=m)},[M,m]);let ye=r!=null,be=E(e=>{if(!J.current)return;let t=n.current.indexOf(e.currentTarget);t!==-1&&(U.current!==t||r!==t)&&(U.current=t,G(e))}),xe=E(()=>y??H?.nodesRef.current.find(e=>e.id===te)?.context?.dataRef?.current.orientation),Ce=E(()=>se(n,q.current)),Te=E(e=>{if(W.current=!1,K.current=!0,e.which===229||!J.current&&e.currentTarget===V.current)return;if(d&&it(e.key,v,f,D)){tt(e.key,xe())||X(e),j.setOpen(!1,R(z,e.nativeEvent)),C(P)&&(p?H?.events.emit(`virtualfocus`,P):P.focus());return}let t=U.current,r=se(n,_),i=he(n,_);if(B||(e.key===`Home`&&(X(e),U.current=r,G(e)),e.key===`End`&&(X(e),U.current=i,G(e))),T!=null){let t=T(e,U.current,n,v,u,f,_,r,i);if(t!=null&&(U.current=t,G(e)),v===`both`)return}if(tt(e.key,v)){if(X(e),M&&!p&&ee(e.currentTarget.ownerDocument)===e.currentTarget){U.current=nt(e.key,v,f)?r:i,G(e);return}nt(e.key,v,f)?u?t>=i?c&&t!==n.current.length?U.current=-1:(K.current=!1,U.current=r):U.current=pe(n.current,{startingIndex:t,disabledIndices:_}):U.current=Math.min(i,pe(n.current,{startingIndex:t,disabledIndices:_})):u?t<=r?c&&t!==-1?U.current=n.current.length:(K.current=!1,U.current=i):U.current=pe(n.current,{startingIndex:t,decrement:!0,disabledIndices:_}):U.current=Math.max(r,pe(n.current,{startingIndex:t,decrement:!0,disabledIndices:_})),Ae(n.current,U.current)&&(U.current=-1),G(e)}}),Ee=Q.useMemo(()=>({onFocus(e){K.current=!0,be(e)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove(e){$e(e)||(K.current=!0,oe.current=!1,h&&be(e))},onPointerLeave(e){if(!J.current||!W.current||e.pointerType===`touch`)return;K.current=!0;let t=e.relatedTarget;if(h&&!n.current.includes(t)&&de.current&&(ce.current?.(),ce.current=null,U.current=-1,G(e),!p)){let e=V.current,t=ee(k(e));e&&A(e,t)&&e.focus({preventScroll:!0})}}}),[be,J,V,h,n,G,de,p]),De=Q.useMemo(()=>p&&M&&ye&&{"aria-activedescendant":`${b}-${r}`},[p,M,ye,b,r]),Oe=Q.useMemo(()=>({...B?{}:De,onKeyDown(e){if(e.key===`Tab`&&e.shiftKey&&M&&!p){let t=O(e.nativeEvent);if(t&&!A(V.current,t))return;X(e),j.setOpen(!1,R(L,e.nativeEvent)),C(P)&&P.focus();return}Te(e)},onPointerMove(e){$e(e)||(W.current=!0)}}),[De,Te,V,B,j,M,p,P]),ke=Q.useMemo(()=>{function e(e){j.setOpen(!0,R(z,e.nativeEvent,e.currentTarget))}function t(e){m===`auto`&&ge(e.nativeEvent)&&(ne.current=!p)}function n(e){ne.current=m,m===`auto`&&ve(e.nativeEvent)&&(ne.current=!0)}return{onKeyDown(t){let n=j.select(`open`);W.current=!1;let r=t.key.startsWith(`Arrow`),i=rt(t.key,xe(),f),a=tt(t.key,v),o=(d?i:a)||t.key===`Enter`||t.key.trim()===``;if(p&&n)return Te(t);if(n||g||!r){if(o){let e=tt(t.key,xe());re.current=d&&e?null:t.key}if(d){i&&(X(t),n?(U.current=Ce(),G(t)):e(t));return}a&&(le.current!=null&&(U.current=le.current),X(t),!n&&g?e(t):Te(t),n&&G(t))}},onFocus(e){j.select(`open`)&&!p&&(U.current=-1,G(e))},onPointerDown:n,onPointerEnter:n,onMouseDown:t,onClick:t}},[Te,m,Ce,d,G,j,g,v,xe,f,le,p]),je=Q.useMemo(()=>({...De,...ke}),[De,ke]);return Q.useMemo(()=>o?{reference:je,floating:Oe,item:Ee,trigger:ke}:{},[o,je,Oe,ke,Ee])}function ot(e,t){let{listRef:n,elementsRef:r,activeIndex:i,onMatch:a,disabledIndices:o,onTyping:s,enabled:c=!0,resetMs:l=750,selectedIndex:u=null}=t,d=`rootStore`in e?e.rootStore:e,f=d.useState(`open`),m=V(),h=Q.useRef(``),g=Q.useRef(u??i??-1),_=Q.useRef(null),v=E(e=>{function t(e){return r?.current[e]}function c(e){let n=t(e);return n&&!J(n)||n?.matches(`:disabled`)?!1:o==null||!q(p,e,o)}function d(e,t,n=0){if(e.length===0)return-1;let r=(n%e.length+e.length)%e.length,i=t.toLowerCase();for(let t=0;t0&&e.key===` `&&(X(e),s?.(!0)),h.current.length>0&&h.current[0]!==` `&&d(v,h.current)===-1&&e.key!==` `&&s?.(!1),v==null||e.key.length!==1||e.ctrlKey||e.metaKey||e.altKey)return;f&&e.key!==` `&&(X(e),s?.(!0));let y=h.current===``;y&&(g.current=u??i??-1),v.every((e,t)=>e&&c(t)?e[0]?.toLowerCase()!==e[1]?.toLowerCase():!0)&&h.current===e.key&&(h.current=``,g.current=_.current),h.current+=e.key,m.start(l,()=>{h.current=``,g.current=_.current,s?.(!1)});let b=((y?u??i??-1:g.current)??0)+1,x=d(v,h.current,b);x===-1?e.key!==` `&&(h.current=``,s?.(!1)):(a?.(x),_.current=x)}),y=E(e=>{let t=e.relatedTarget,n=d.select(`domReferenceElement`),r=d.select(`floatingElement`);A(n,t)||A(r,t)||(m.clear(),h.current=``,g.current=_.current,s?.(!1))});w(()=>{(f||u===null)&&(m.clear(),_.current=null,h.current!==``&&(h.current=``))},[f,u,m]);let b=Q.useMemo(()=>({onKeyDown:v,onBlur:y}),[v,y]);return Q.useMemo(()=>c?{reference:b,floating:b}:{},[c,b])}var $=e();function st(e){let t=Q.useRef(``),n=Q.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:Q.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function ct(e,t){let{onClick:n,onPointerDown:r}=st(E((n,r)=>{(typeof e==`function`?e():e)||t(r||(K?`touch`:``))}));return Q.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function lt(e){let[t,n]=Q.useState(null),r=ct(e,n);return G(e,t=>{t&&!e&&n(null)}),Q.useMemo(()=>({openMethod:t,triggerProps:r}),[t,r])}function ut(e){let[t,n]=Q.useState({current:e,previous:null});return Object.is(e,t.current)||n({current:e,previous:t.current}),t.previous}function dt(e){let t=Q.useRef(!0);t.current&&(t.current=!1,e())}var ft=Q.createContext(void 0),pt=Q.createContext(void 0),mt=Q.createContext(void 0);function ht(){let e=Q.useContext(ft);if(e===void 0)throw Error(_(60));return e}function gt(){let e=Q.useContext(pt);if(e===void 0)throw Error(_(101));return e}function _t(){let e=Q.useContext(mt);if(e===void 0)throw Error(_(61));return e}function vt(e,t,n=Object.is){let{length:r}=e;if(r!==t.length)return!1;for(let i=0;iObject.is(e,t);function bt(e,t,n){return e==null||t==null?Object.is(e,t):n(e,t)}function xt(e,t,n){return Array.isArray(e)&&Array.isArray(t)?!vt(e,t,(e,t)=>bt(e,t,n)):e!==t}function St(e,t,n){return e?e.some(e=>e!==void 0&&bt(t,e,n)):!1}function Ct(e,t,n){return e?e.findIndex(e=>e!==void 0&&bt(e,t,n)):-1}function wt(e,t){if(t!==yt)return n=>St(e,n,t);let n=new Set(e);return n.delete(void 0),t=>n.has(t)&&(t!==0||e.some(e=>Object.is(t,e)))}function Tt(e,t,n,r){let i=r&&Array.isArray(t)?e.findIndex(wt(t,n)):Ct(e,t,n);return i===-1?null:i}function Et(e,t,n,r,i,a){return St(r,t,i)?a!=null&&e>a&&St(r,n[a],i)?a:e:e===a?Tt(n,r,i,!0):a}function Dt(e,t,n){return e.filter(e=>!bt(t,e,n))}function Ot(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function kt(e){return typeof e==`object`&&!!e&&Array.isArray(e.items)}function At(e){return kt(e?.[0])}function jt(e){return At(e)?e.flatMap(e=>e.items):e}function Mt(e){if(!Array.isArray(e))return e!=null&&`null`in e;let t=e;if(At(t)){for(let e of t)for(let t of e.items)if(t&&t.value==null&&t.label!=null)return!0;return!1}for(let e of t)if(e&&e.value==null&&e.label!=null)return!0;return!1}function Nt(e,t){if(t&&e!=null)return t(e)??``;if(e&&typeof e==`object`){if(`label`in e&&e.label!=null)return String(e.label);if(`value`in e)return String(e.value)}return Ot(e)}function Pt(e,t){return t&&e!=null?t(e)??``:e&&typeof e==`object`&&`value`in e&&`label`in e?Ot(e.value):Ot(e)}function Ft(e,t,n){function r(){return Nt(e,n)}if(n&&e!=null)return n(e);if(e&&typeof e==`object`&&`label`in e&&e.label!=null)return e.label;if(t&&!Array.isArray(t))return(Object.hasOwn(t,e)?t[e]:void 0)??r();if(Array.isArray(t)){let n=jt(t);if(typeof e!=`object`||!e){let t=n.find(t=>t.value===e);return t&&t.label!=null?t.label:r()}if(`value`in e){let t=n.find(t=>t&&t.value===e.value);if(t&&t.label!=null)return t.label}}return r()}function It(e,t,n){return e.reduce((e,r,i)=>(i>0&&e.push(`, `),e.push((0,$.jsx)(Q.Fragment,{children:Ft(r,t,n)},i)),e),[])}var Lt={id:e=>e.id,labelId:e=>e.labelId,modal:e=>e.modal,items:e=>e.items,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,value:e=>e.value,hasSelectedValue:e=>{let{value:t,multiple:n,itemToStringValue:r}=e;return t==null?!1:n&&Array.isArray(t)?t.length>0:Pt(t,r)!==``},hasNullItemLabel:(e,t)=>t?Mt(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMount:e=>e.forceMount,transitionStatus:e=>e.transitionStatus,openMethod:e=>e.openMethod,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{let n=e.isItemEqualToValue,r=e.value;return e.multiple?Array.isArray(r)&&r.some(e=>bt(t,e,n)):bt(t,r,n)},isSelectedByFocus:(e,t)=>e.selectedIndex===t,popupProps:e=>e.popupProps,triggerProps:e=>e.triggerProps,triggerElement:e=>e.triggerElement,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupSide:e=>e.popupSide,scrollUpArrowVisible:e=>e.scrollUpArrowVisible,scrollDownArrowVisible:e=>e.scrollDownArrowVisible,hasScrollArrows:e=>e.hasScrollArrows};function Rt(e,t=-(2**53-1),n=2**53-1){return Math.max(t,Math.min(e,n))}function zt(e,t){return Math.max(0,e-t)}function Bt(e,t){if(t<=0)return 0;let n=Rt(e,0,t),r=n,i=t-n,a=r<=1,o=i<=1;return a&&o?r<=i?0:t:a?0:o?t:n}function Vt(e){let{id:t,value:n,defaultValue:r=null,onValueChange:i,open:o,defaultOpen:s=!1,onOpenChange:h,name:_,form:v,autoComplete:y,disabled:b=!1,readOnly:x=!1,required:S=!1,modal:C=!0,actionsRef:T,inputRef:D,onOpenChangeComplete:O,items:k,multiple:A=!1,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P=yt,highlightItemOnHover:F=!0,children:I}=e,{clearErrors:L}=te(),{setDirty:z,setTouched:B,setFocused:ee,validityData:V,setFilled:H,name:W,disabled:ie,validation:K,validationMode:se}=U(),ce=re({id:t}),q=ie||b,J=W??_,[Y,le]=Ue({controlled:n,default:A?r??p:r,name:`Select`,state:`value`}),[X,ue]=Ue({controlled:o,default:s,name:`Select`,state:`open`}),de=Q.useRef([]),fe=Q.useRef([]),pe=Q.useRef(null),he=Q.useRef(null),ge=Q.useRef(0),_e=Q.useRef(null),ve=Q.useRef([]),ye=Q.useRef(!1),be=Q.useRef(null),xe=Q.useRef(null),Se=Q.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),Ce=Q.useRef(!1),we=Q.useRef(Y),{mounted:Ee,setMounted:Oe,transitionStatus:ke}=c(X),{openMethod:Ae,triggerProps:je}=lt(X),Z=m(()=>new oe({id:ce,labelId:void 0,modal:C,multiple:A,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P,value:Y,open:X,mounted:Ee,transitionStatus:ke,items:k,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:u,triggerProps:u,triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1},{setValue:g,setOpen:g,handleScrollArrowVisibility:g,onOpenChangeComplete:g,listRef:de,popupRef:pe,scrollHandlerRef:he,scrollArrowsMountedCountRef:ge,valueRef:_e,valuesRef:ve,labelsRef:fe,typingRef:ye,selectionRef:Se,firstItemTextRef:be,selectedItemTextRef:xe,alignItemWithTriggerActiveRef:Ce,initialValueRef:we},Lt)).current,Me=Z.useState(`activeIndex`),Ne=Z.useState(`selectedIndex`),Pe=Z.useState(`triggerElement`),Fe=Z.useState(`positionerElement`),Ie=ut(Ae),Le=Ae??Ie,Re=Q.useMemo(()=>A?``:Pt(Y,M),[A,Y,M]),ze=Q.useMemo(()=>A&&Array.isArray(Y)?Y.map(e=>Pt(e,M)):Pt(Y,M),[A,Y,M]),Be=l(Pe),Ve=E(()=>ze);ne(Be,ce,Y,Ve,!q,_);let He=A?Array.isArray(Y)&&Y.length>0:Y!=null&&Re!==``;w(()=>{H(He)},[He,H]),w(function(){let e=Tt(ve.current,Y,P,A);e===null&&(xe.current=null),!X&&Z.set(`selectedIndex`,e)},[A,X,Y,P,Z]),G(Y,()=>{L(J),z(xt(Y,V.initialValue,P)),K.change(Y)});let We=E((e,t)=>{h?.(e,t),!t.isCanceled&&(ue(e),!e&&(t.reason===`focus-out`||t.reason===`outside-press`)&&(B(!0),ee(!1),se===`onBlur`&&K.commit(Y)))}),Ge=E(()=>{Oe(!1),Z.update({activeIndex:null,openMethod:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1}),O?.(!1)});a({enabled:!T,open:X,ref:pe,onComplete(){X||Ge()}}),Q.useImperativeHandle(T,()=>({unmount:Ge}),[Ge]);let qe=E((e,t)=>{i?.(e,t),!t.isCanceled&&le(e)}),Je=E(e=>{let t=zt(e.scrollHeight,e.clientHeight),n=Bt(e.scrollTop,t),r=n>0,i=nKe(de.current[e]),onMatch(e){X?Z.set(`activeIndex`,e):qe(ve.current[e],R(N))},onTyping(e){ye.current=e}}),nt=Q.useMemo(()=>f(tt.reference,et.reference,$e.reference,Qe.reference,je),[Qe.reference,tt.reference,et.reference,$e.reference,je]),rt=Q.useMemo(()=>f(De,tt.floating,et.floating,$e.floating),[tt.floating,et.floating,$e.floating]),it=et.item??u;Z.useContextCallback(`setValue`,qe),Z.useContextCallback(`setOpen`,We),Z.useContextCallback(`handleScrollArrowVisibility`,Je),Z.useContextCallback(`onOpenChangeComplete`,O),dt(()=>{Z.update({popupProps:rt,triggerProps:nt})}),Z.useSyncedValues({id:ce,modal:C,multiple:A,value:Y,open:X,mounted:Ee,transitionStatus:ke,popupProps:rt,triggerProps:nt,items:k,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P,openMethod:Le});let st=Q.useMemo(()=>({disabled:q,readOnly:x,required:S,multiple:A,highlightItemOnHover:F,itemProps:it}),[q,x,S,A,F,it]),ct=d(D,K.inputRef),ht=A?void 0:J,gt=Q.useMemo(()=>!A||!Array.isArray(Y)||!J?null:Y.map(e=>{let t=Pt(e,M);return(0,$.jsx)(`input`,{type:`hidden`,form:v,name:J,value:t,disabled:q},t)}),[A,Y,v,J,M,q]);return(0,$.jsxs)(ft.Provider,{value:Z,children:[(0,$.jsx)(pt.Provider,{value:st,children:(0,$.jsx)(mt.Provider,{value:Ye,children:I})}),(0,$.jsx)(`input`,{...K.getValidationProps(q,{onFocus(){Z.state.triggerElement?.focus({focusVisible:!0})},onChange(e){if(e.nativeEvent.defaultPrevented||q||x)return;let t=e.currentTarget.value,n=R(N,e.nativeEvent);function r(){if(A)return;let e=t.toLowerCase(),r=ve.current.findIndex(t=>Pt(t,M).toLowerCase()===e||Nt(t,j).toLowerCase()===e);r===-1&&(r=ve.current.findIndex((t,n)=>{let r=fe.current[n];return r!=null&&r.toLowerCase()===e}));let i=ve.current[r];i!=null&&qe(i,n)}Z.set(`forceMount`,!0),queueMicrotask(r)}}),id:ce&&ht==null?`${ce}-hidden-input`:void 0,form:v,name:ht,autoComplete:y,value:Re,disabled:q,required:S&&!(A&&He),readOnly:x,ref:ct,style:J?me:ae,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),gt]})}function Ht(e,t){return e??t}var Ut=5;function Wt(e,t){let n=Gt(t);return e.clientX>=n.left-Ut&&e.clientX<=n.right+Ut&&e.clientY>=n.top-Ut&&e.clientY<=n.bottom+Ut}function Gt(e){let t=e.getBoundingClientRect(),n=S(e);if(Ie)return t;let r=n.getComputedStyle(e,`::before`),i=n.getComputedStyle(e,`::after`);if(r.content===`none`&&i.content===`none`)return t;let a=parseFloat(r.width)||0,o=parseFloat(r.height)||0,s=parseFloat(i.width)||0,c=parseFloat(i.height)||0,l=Math.max(t.width,a,s),u=Math.max(t.height,o,c),d=l-t.width,f=u-t.height;return{left:t.left-d/2,right:t.right+d/2,top:t.top-f/2,bottom:t.bottom+f/2}}var Kt=`data-popup-side`,qt=400,Jt={...Ee,...W,popupSide:e=>e?{[Kt]:e}:null,value:()=>null},Yt=Q.forwardRef(function(e,t){let{render:n,className:r,id:i,disabled:a=!1,nativeButton:o=!0,style:s,...c}=e,{setTouched:u,setFocused:d,validationMode:p,validation:m,state:g,disabled:_}=U(),{labelId:v}=H(),y=ht(),{readOnly:b,required:x,disabled:S}=gt(),C=_||S||a,w=y.useState(`open`),E=y.useState(`mounted`),D=y.useState(`value`),O=y.useState(`triggerProps`),j=y.useState(`positionerElement`),M=y.useState(`listElement`),P=y.useState(`popupSide`),F=y.useState(`id`),L=y.useState(`labelId`),z=y.useState(`hasSelectedValue`),B=E&&j?P:null,ee=i??F,te=Ht(v,L);re({id:i});let ne=l(j),W=Q.useRef(null),{getButtonProps:G,buttonRef:ie}=T({disabled:C,native:o}),ae=y.useStateSetter(`triggerElement`),K=V(),oe=V(),se=V();Q.useEffect(()=>{if(w)return se.start(qt,()=>{y.context.selectionRef.current.allowUnselectedMouseUp=!0,y.context.selectionRef.current.allowSelectedMouseUp=!0}),()=>{se.clear()};y.context.selectionRef.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},oe.clear()},[w,y,oe,se]);let ce=f(O,{id:ee,role:`combobox`,"aria-expanded":w,"aria-haspopup":`listbox`,"aria-controls":w?M?.id??Se(j)?.id:void 0,"aria-labelledby":te,"aria-readonly":b||void 0,"aria-required":x||void 0,tabIndex:C?-1:0,onFocus(e){d(!0),w&&y.context.alignItemWithTriggerActiveRef.current&&y.context.setOpen(!1,R(N,e.nativeEvent)),K.start(0,()=>{y.set(`forceMount`,!0)})},onBlur(e){A(j,e.relatedTarget)||(u(!0),d(!1),p===`onBlur`&&m.commit(D))},onMouseDown(e){if(w)return;let t=k(e.currentTarget);function n(e){if(!W.current)return;let t=e.target;A(W.current,t)||A(ne.current,t)||Wt(e,W.current)||y.context.setOpen(!1,R(I,e))}oe.start(0,()=>{t.addEventListener(`mouseup`,n,{once:!0})})}},c,G),q=m.getValidationProps(C,ce);q.role=`combobox`;let J={...g,open:w,disabled:C,value:D,readOnly:b,popupSide:B,placeholder:!z};return h(`button`,e,{ref:[t,W,ie,ae],state:J,stateAttributesMapping:Jt,props:q})}),Xt={value:()=>null},Zt=Q.forwardRef(function(e,t){let{className:n,render:r,children:i,placeholder:a,style:o,...s}=e,c=ht(),l=c.useState(`value`),u=c.useState(`items`),d=c.useState(`itemToStringLabel`),f=c.useState(`hasSelectedValue`),p=!f&&a!=null&&i==null,m=c.useState(`hasNullItemLabel`,p),g={value:l,placeholder:!f},_=null;return _=typeof i==`function`?i(l):i??(p&&!m?a:Array.isArray(l)?It(l,u,d):Ft(l,u,d)),h(`span`,e,{state:g,ref:[t,c.context.valueRef],props:[{children:_},s],stateAttributesMapping:Xt})}),Qt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o={open:ht().useState(`open`)};return h(`span`,e,{state:o,ref:t,props:[{"aria-hidden":!0,children:`▼`},a],stateAttributesMapping:Pe})}),$t=Q.forwardRef(function(e,t){let n=ht(),r=n.useState(`mounted`),i=n.useState(`forceMount`);return r||i?(0,$.jsx)(le,{ref:t,...e}):null}),en=Q.createContext(void 0);function tn(){let e=Q.useContext(en);if(!e)throw Error(_(59));return e}function nn(e,t){e&&Object.assign(e.style,t)}var rn={position:`relative`,maxHeight:`100%`,overflowX:`hidden`,overflowY:`auto`},an=20;function on(e,t,n,r){let[i,a]=Q.useState(!1);w(()=>{if(!e||!t||n==null){a(!1);return}let r=k(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-an)},[e,t,n]),Ne(e&&(!t||i),r)}var sn={position:`fixed`},cn=Q.forwardRef(function(e,t){let{anchor:n,className:r,render:i,positionMethod:a,side:o,align:s,sideOffset:c,alignOffset:l,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d,arrowPadding:f,sticky:p,disableAnchorTracking:m,alignItemWithTrigger:h=!0,collisionAvoidance:g=ce,style:_,...v}=e,y=ht(),b=_t(),x=y.useState(`open`),S=y.useState(`mounted`),C=y.useState(`modal`),T=y.useState(`value`),D=y.useState(`openMethod`),O=y.useState(`positionerElement`),k=y.useState(`triggerElement`),A=y.useState(`isItemEqualToValue`),j=y.useState(`transitionStatus`),M=Q.useRef(null),P=Q.useRef(null),[F,I]=Q.useState(h),L=S&&F&&D!==`touch`;!S&&F!==h&&I(h),Q.useImperativeHandle(y.context.alignItemWithTriggerActiveRef,()=>L),on((L||C)&&x,D===`touch`,O,k);let z=Ve({anchor:n,floatingRootContext:b,positionMethod:a,mounted:S,side:o,sideOffset:c,align:s,alignOffset:l,arrowPadding:f,collisionBoundary:u,collisionPadding:d,sticky:p,disableAnchorTracking:m??L,collisionAvoidance:g,keepMounted:!0}),B=L?`none`:z.side,ee=L?sn:z.positionerStyles,V={open:x,side:B,align:z.align,anchorHidden:z.anchorHidden};w(()=>{y.set(`popupSide`,z.side)},[y,z.side]);let te=y.useStateSetter(`positionerElement`),H=He(e,V,{styles:ee,transitionStatus:j,props:v,refs:[t,te],hidden:!S,inert:!x}),ne=Q.useRef(0),U=E(e=>{if(y.context.valuesRef.current.length===0)return;let t=ne.current;ne.current=e.size;let n=R(N);if(t!==0&&!y.state.multiple&&T!==null&&Ct(y.context.valuesRef.current,T,A)===-1){let e=y.context.initialValueRef.current,t=e!=null&&Ct(y.context.valuesRef.current,e,A)!==-1?e:null;y.context.setValue(t,n),t===null&&(y.set(`selectedIndex`,null),y.context.selectedItemTextRef.current=null)}if(t!==0&&y.state.multiple&&Array.isArray(T)){let e=T.filter(e=>Ct(y.context.valuesRef.current,e,A)!==-1);e.length!==T.length&&(y.context.setValue(e,n),e.length===0&&(y.set(`selectedIndex`,null),y.context.selectedItemTextRef.current=null))}if(x&&L){y.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});let e={height:``};nn(O,e),nn(y.context.popupRef.current,e)}}),re=Q.useMemo(()=>({...z,side:B,alignItemWithTriggerActive:L,setControlledAlignItemWithTrigger:I,scrollUpArrowRef:M,scrollDownArrowRef:P}),[z,B,L,I]);return(0,$.jsx)(Ge,{elementsRef:y.context.listRef,labelsRef:y.context.labelsRef,onMapChange:U,children:(0,$.jsxs)(en.Provider,{value:re,children:[S&&C&&(0,$.jsx)(Oe,{inert:je(!x),cutout:k}),H]})})}),ln=`base-ui-disable-scrollbar`,un={className:ln,getElement(e){return(0,$.jsx)(`style`,{nonce:e,href:ln,precedence:`base-ui:low`,children:`.${ln}{scrollbar-width:none}.${ln}::-webkit-scrollbar{display:none}`})}},dn=Q.createContext(void 0);function fn(e){let t=Q.useContext(dn);if(t===void 0&&!e)throw Error(_(69));return t}var pn=Q.createContext(void 0),mn={disableStyleElements:!1};function hn(){return Q.useContext(pn)??mn}var gn=`--transform-origin`,_n={...Me,...o},vn=Q.forwardRef(function(e,t){let{render:n,className:r,style:o,finalFocus:c,...l}=e,u=ht(),{multiple:d,readOnly:f,highlightItemOnHover:p}=gt(),m=_t(),{side:g,align:_,alignItemWithTriggerActive:v,isPositioned:y,setControlledAlignItemWithTrigger:b}=tn(),x=fn(!0)!=null,C=We(),{nonce:T,disableStyleElements:D}=hn(),O=u.useState(`id`),A=u.useState(`open`),j=u.useState(`openMethod`),N=u.useState(`mounted`),P=u.useState(`popupProps`),F=u.useState(`transitionStatus`),I=u.useState(`triggerElement`),L=u.useState(`positionerElement`),z=u.useState(`listElement`),B=Q.useRef(!1),ee=Q.useRef(!1),V=Q.useRef({}),te=i(),H=E(e=>{if(!L||!u.context.popupRef.current||!ee.current)return;let t=L.style.top===`0px`,n=L.style.bottom===`0px`;if(B.current||!v||!t&&!n){u.context.handleScrollArrowVisibility(e);return}let r=xn(L),i=Sn(L.getBoundingClientRect().height,`y`,r),a=k(L),o=S(L),s=o.getComputedStyle(L),c=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),d=yn(o.getComputedStyle(u.context.popupRef.current)),f=Math.min(a.documentElement.clientHeight-c-l,d),p=e.scrollTop,m=bn(e),h=null,g=e=>{L.style.height=`${e}px`},_=t?m-p:p,y=Math.min(i+_,f);if(_<=1){let n=Rt(_,0,f-i);n>0&&g(i+n),e.scrollTop=t?m:0,f-(i+n)<=1&&(B.current=!0),u.context.handleScrollArrowVisibility(e);return}f-y>1?h=t?1/0:0:n&&p1&&(e.scrollTop=t)}b>=f-1&&(B.current=!0),u.context.handleScrollArrowVisibility(e)});Q.useImperativeHandle(u.context.scrollHandlerRef,()=>H,[H]),a({open:A,ref:u.context.popupRef,onComplete(){A&&u.context.onOpenChangeComplete(!0)}});let ne={open:A,transitionStatus:F,side:g,align:_};w(()=>{L&&u.context.popupRef.current&&!Object.keys(V.current).length&&(V.current={top:L.style.top||`0`,left:L.style.left||`0`,right:L.style.right,height:L.style.height,bottom:L.style.bottom,minHeight:L.style.minHeight,maxHeight:L.style.maxHeight,marginTop:L.style.marginTop,marginBottom:L.style.marginBottom})},[u,L]),w(()=>{A||v||(ee.current=!1,B.current=!1,nn(L,V.current))},[A,v,L]),w(()=>{let e=u.context.popupRef.current;if(!A||!I||!L||!e||v&&!y||u.state.transitionStatus===`ending`)return;if(ee.current=!0,e.style.removeProperty(gn),!v){te.request(()=>u.context.handleScrollArrowVisibility(z||e));return}let t=Tn(e);try{let t=u.context.selectedItemTextRef.current;t?.isConnected||(t=!u.select(`hasSelectedValue`)&&u.context.firstItemTextRef.current?.isConnected?u.context.firstItemTextRef.current:null);let n=u.context.valueRef.current,r=S(L),i=r.getComputedStyle(L),a=r.getComputedStyle(e),o=k(I),s=xn(I),c=Cn(I.getBoundingClientRect(),s),l=Cn(L.getBoundingClientRect(),s),d=c.height,f=z||e,m=f.scrollHeight,h=parseFloat(a.borderBottomWidth),g=parseFloat(i.marginTop)||10,_=parseFloat(i.marginBottom)||10,v=parseFloat(i.minHeight)||100,y=yn(a),x=o.documentElement.clientHeight-g-_,w=o.documentElement.clientWidth,T=x-c.bottom+d,E,D=C===`rtl`?c.right-l.width:c.left,O=0;if(t&&n){let e=Cn(n.getBoundingClientRect(),s);E=Cn(t.getBoundingClientRect(),s),D=l.left+(C===`rtl`?e.right-E.right:e.left-E.left);let r=e.top-c.top+e.height/2;O=E.top-l.top+E.height/2-r}let A=T+O+_+h,j=Math.min(x,A),M=x-g-_,N=A-j,P=w-5;L.style.left=`${Rt(D,5,P-l.width)}px`,L.style.height=`${j}px`,L.style.maxHeight=`none`,L.style.marginTop=`${g}px`,L.style.marginBottom=`${_}px`,e.style.height=`100%`;let F=bn(f),R=N>=F-1;R&&(j=Math.min(x,l.height)-(N-F));let ee=c.top<20||c.bottom>x-20||Math.ceil(j)+1=M?`0`:`${e}px`,L.style.height=`${j}px`,f.scrollTop=bn(f)}else L.style.bottom=`0`,f.scrollTop=N;if(E){let t=l.top,n=l.height,r=E.top+E.height/2,i=Rt(n>0?(r-t)/n*100:50,0,100);e.style.setProperty(gn,`50% ${i}%`)}(H===x||j>=y)&&(B.current=!0),u.context.handleScrollArrowVisibility(f),p&&u.state.selectedIndex===null&&u.state.activeIndex===null&&u.context.listRef.current[0]!=null&&u.set(`activeIndex`,0)}finally{t()}},[u,A,L,I,v,b,te,z,p,C,y]),Q.useEffect(()=>{if(!v||!L||!A)return;let e=S(L);function t(e){u.context.setOpen(!1,R(M,e))}return s(e,`resize`,t)},[u,v,L,A]);let U={...z?{role:`presentation`}:{role:`listbox`,"aria-multiselectable":d||void 0,"aria-readonly":f||void 0,id:`${O}-list`},onKeyDown(e){x&&xe.has(e.key)&&e.stopPropagation()},onScroll(e){z||H(e.currentTarget)},...v&&{style:z?{height:`100%`}:rn},className:!z&&v?un.className:void 0},re=h(`div`,e,{ref:[t,u.context.popupRef],state:ne,stateAttributesMapping:_n,props:[P,U,Be(F),l]});return(0,$.jsxs)(Q.Fragment,{children:[!D&&un.getElement(T),(0,$.jsx)(ie,{context:m,modal:!1,disabled:!N,openInteractionType:j,returnFocus:c,restoreFocus:!0,children:re})]})});function yn(e){let t=e.maxHeight;return t.endsWith(`px`)&&parseFloat(t)||1/0}function bn(e){return zt(e.scrollHeight,e.clientHeight)}function xn(e){return ze.getScale(e)}function Sn(e,t,n){return e/n[t]}function Cn(e,t){return Re({x:Sn(e.x,`x`,t),y:Sn(e.y,`y`,t),width:Sn(e.width,`x`,t),height:Sn(e.height,`y`,t)})}var wn=[[`transform`,`none`],[`scale`,`1`],[`translate`,`0 0`]];function Tn(e){let{style:t}=e,n={};for(let[e,r]of wn)n[e]=t.getPropertyValue(e),t.setProperty(e,r,`important`);return()=>{for(let[e]of wn){let r=n[e];r?t.setProperty(e,r):t.removeProperty(e)}}}var En=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=ht(),{multiple:s,readOnly:c}=gt(),{alignItemWithTriggerActive:l}=tn(),u=o.useState(`hasScrollArrows`),d=o.useState(`openMethod`),f={id:`${o.useState(`id`)}-list`,role:`listbox`,"aria-multiselectable":s||void 0,"aria-readonly":c||void 0,onScroll(e){o.context.scrollHandlerRef.current?.(e.currentTarget)},...l&&{style:rn},className:u&&d!==`touch`?un.className:void 0},p=o.useStateSetter(`listElement`);return h(`div`,e,{ref:[t,p],props:[f,a]})}),Dn=Q.createContext(void 0);function On(){let e=Q.useContext(Dn);if(!e)throw Error(_(57));return e}var kn=Q.memo(Q.forwardRef(function(e,t){let{render:n,className:r,style:i,value:a=null,label:o,disabled:s=!1,nativeButton:c=!1,...l}=e,u=Q.useRef(null),d=qe({guess:!0,label:o,textRef:u}),f=ht(),{itemProps:p,multiple:m,disabled:g,readOnly:_}=gt(),v=g||s,y=f.useState(`isActive`,d.index),b=f.useState(`open`),x=f.useState(`isSelected`,a),S=f.useState(`isSelectedByFocus`,d.index),C=f.useState(`isItemEqualToValue`),E=d.index,D=Q.useRef(null);w(()=>{let e=f.context.valuesRef.current;return e[E]=a,()=>{delete e[E]}},[E,a,f]),w(()=>{let e=f.state.value,t=f.state.selectedIndex,n=t,r;m&&Array.isArray(e)?(n=Et(E,a,f.context.valuesRef.current,e,C,t),r=n===E,E===t&&!r&&(f.context.selectedItemTextRef.current=null)):(r=e!==void 0&&bt(a,e,C),r&&(n=E)),f.set(`selectedIndex`,n),r&&u.current&&(f.context.selectedItemTextRef.current=u.current)},[E,m,C,f,a]);let O=Q.useRef(`mouse`),k=Q.useRef(!1),{getButtonProps:A,buttonRef:j}=T({disabled:v,focusableWhenDisabled:!0,native:c,composite:!0}),M={disabled:v,selected:x,highlighted:y};function N(e){if(g||_)return;let t=f.state.value;if(m){let n=Array.isArray(t)?t:[],r=x?Dt(n,a,C):[...n,a];f.context.setValue(r,R(F,e))}else f.context.setValue(a,R(F,e)),f.context.setOpen(!1,R(F,e))}function P(){f.context.selectionRef.current.dragY=0}let I={role:`option`,"aria-selected":x,tabIndex:b&&y?0:-1,onKeyDown(e){f.set(`activeIndex`,E),e.key===` `&&f.context.typingRef.current&&e.preventDefault()},onClick(e){let t=O.current!==`touch`,n=e.nativeEvent.pointerType,r=t&&ge(e.nativeEvent)&&(n!==void 0||y),i=t&&!r&&!k.current;k.current=!1,!(v||i)&&N(e.nativeEvent)},onPointerEnter(e){O.current=e.pointerType},onPointerMove(e){if(e.pointerType===`mouse`&&e.buttons===1){let t=f.context.selectionRef.current;t.dragY+=e.movementY,t.dragY**2>=64&&(t.allowUnselectedMouseUp=!0)}},onPointerDown(e){O.current=e.pointerType,k.current=!0,P()},onMouseUp(){if(P(),v||O.current===`touch`||k.current)return;let e=!f.context.selectionRef.current.allowSelectedMouseUp&&x,t=!f.context.selectionRef.current.allowUnselectedMouseUp&&!x;e||t||(k.current=!0,D.current?.click(),k.current=!1)}},L=h(`div`,e,{ref:[j,t,d.ref,D],state:M,props:[p,I,l,A]}),z=Q.useMemo(()=>({selected:x,index:E,textRef:u,selectedByFocus:S}),[x,E,u,S]);return(0,$.jsx)(Dn.Provider,{value:z,children:L})})),An=Q.forwardRef(function(e,t){let{selected:n}=On();return e.keepMounted||n?(0,$.jsx)(jn,{...e,ref:t}):null}),jn=Q.memo(Q.forwardRef((e,t)=>{let{render:n,className:r,style:i,keepMounted:s,...l}=e,{selected:u}=On(),d=Q.useRef(null),{transitionStatus:f,setMounted:p}=c(u),m=h(`span`,e,{ref:[t,d],state:{selected:u,transitionStatus:f},props:[{"aria-hidden":!0,children:`✔️`},l],stateAttributesMapping:o});return a({batch:!0,enabled:!u,open:u,ref:d,onComplete(){u||p(!1)}}),m})),Mn=Q.memo(Q.forwardRef(function(e,t){let{index:n,textRef:r,selectedByFocus:i}=On(),a=ht(),{render:o,className:s,style:c,...l}=e,u=Q.useCallback(e=>{e&&(n===0&&(a.context.firstItemTextRef.current=e),i&&(a.context.selectedItemTextRef.current=e))},[a,n,i]);return h(`div`,e,{ref:[u,t,r],props:l})})),Nn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,direction:s,keepMounted:l,...u}=e,d=s===`up`,f=ht(),{side:p,scrollDownArrowRef:m,scrollUpArrowRef:g}=tn(),_=d?`scrollUpArrowVisible`:`scrollDownArrowVisible`,v=f.useState(_),y=f.useState(`openMethod`),b=v&&y!==`touch`,x=V(),S=d?g:m,{mounted:C,transitionStatus:T,setMounted:E}=c(b);w(()=>(f.context.scrollArrowsMountedCountRef.current+=1,f.set(`hasScrollArrows`,!0),()=>{f.context.scrollArrowsMountedCountRef.current=Math.max(0,f.context.scrollArrowsMountedCountRef.current-1),f.context.scrollArrowsMountedCountRef.current===0&&f.set(`hasScrollArrows`,!1)}),[f]),a({open:b,ref:S,onComplete(){b||E(!1)}});let D=h(`div`,e,{ref:[t,S],state:{direction:s,visible:b,side:p,transitionStatus:T},props:[{"aria-hidden":!0,children:d?`▲`:`▼`,style:{position:`absolute`},onMouseMove(e){if(e.movementX===0&&e.movementY===0||x.isStarted())return;f.set(`activeIndex`,null);function t(){let e=f.state.listElement??f.context.popupRef.current;if(!e)return;f.set(`activeIndex`,null),f.context.handleScrollArrowVisibility(e);let n=zt(e.scrollHeight,e.clientHeight),r=Bt(e.scrollTop,n),i=r===(d?0:n),a=f.context.listRef.current;if(r!==e.scrollTop&&(e.scrollTop=r),i){x.clear();return}if(a.length>0){let t=S.current?.offsetHeight||0;e.scrollTop=Pn(a,d,r,e.clientHeight,t,n)}x.start(40,t)}x.start(40,t)},onMouseLeave(){x.clear()}},u],stateAttributesMapping:o});return C||l?D:null});function Pn(e,t,n,r,i,a){if(t){let t=0,r=n+i-1;for(let n=0;n=r){t=n;break}}let o=Math.max(0,t-1),s=e[o];return os){o=Math.max(0,t-1);break}}let c=Math.min(e.length-1,o+1),l=e[c];return c>o&&l?Bt(l.offsetTop+l.offsetHeight-r+i,a):a}var Fn=Q.forwardRef(function(e,t){return(0,$.jsx)(Nn,{...e,ref:t,direction:`down`})}),In=Q.forwardRef(function(e,t){return(0,$.jsx)(Nn,{...e,ref:t,direction:`up`})}),Ln=Q.createContext(void 0);function Rn(){let e=Q.useContext(Ln);if(e===void 0)throw Error(_(56));return e}var zn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,[o,s]=Q.useState(),c=Q.useMemo(()=>({labelId:o,setLabelId:s}),[o,s]),l=h(`div`,e,{ref:t,props:[{role:`group`,"aria-labelledby":o},a]});return(0,$.jsx)(Ln.Provider,{value:c,children:l})}),Bn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,{setLabelId:s}=Rn(),c=B(a);return w(()=>(s(c),()=>{s(e=>e===c?void 0:e)}),[c,s]),h(`div`,e,{ref:t,props:[{id:c,"aria-hidden":!0},o]})}),Vn=Q.forwardRef(function(e,t){let{className:n,render:r,orientation:i=`horizontal`,style:a,...o}=e;return h(`div`,e,{state:{orientation:i},ref:t,props:[{role:`presentation`},o]})}),Hn=r(),Un=Vt;function Wn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`scroll-my-1 p-1`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(zn,{className:i,"data-slot":`select-group`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Gn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`flex flex-1 text-left`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Zt,{className:i,"data-slot":`select-value`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Kn(e){let t=(0,Hn.c)(15),n,r,i,a,o;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5]):({className:r,size:o,id:i,children:n,...a}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o);let s=o===void 0?`default`:o,c;t[6]===r?c=t[7]:(c=v(`flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,r),t[6]=r,t[7]=c);let l;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,$.jsx)(Qt,{render:(0,$.jsx)(x,{className:`pointer-events-none size-3.5 text-muted-foreground`})}),t[8]=l):l=t[8];let u;return t[9]!==n||t[10]!==i||t[11]!==a||t[12]!==s||t[13]!==c?(u=(0,$.jsxs)(Yt,{className:c,"data-size":s,"data-slot":`select-trigger`,id:i,...a,children:[n,l]}),t[9]=n,t[10]=i,t[11]=a,t[12]=s,t[13]=c,t[14]=u):u=t[14],u}function qn(e){let t=(0,Hn.c)(26),n,r,i,a,o,s,c,l;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8]):({className:r,children:n,side:a,sideOffset:o,align:s,alignOffset:c,alignItemWithTrigger:l,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c,t[8]=l);let u=a===void 0?`bottom`:a,d=o===void 0?4:o,f=s===void 0?`center`:s,p=c===void 0?0:c,m=l===void 0||l,h;t[9]===r?h=t[10]:(h=v(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-open:animate-in relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100`,r),t[9]=r,t[10]=h);let g;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,$.jsx)(Zn,{}),t[11]=g):g=t[11];let _;t[12]===n?_=t[13]:(_=(0,$.jsx)(En,{children:n}),t[12]=n,t[13]=_);let y;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,$.jsx)(Qn,{}),t[14]=y):y=t[14];let b;t[15]!==i||t[16]!==h||t[17]!==_?(b=(0,$.jsxs)(vn,{className:h,"data-slot":`select-content`,...i,children:[g,_,y]}),t[15]=i,t[16]=h,t[17]=_,t[18]=b):b=t[18];let x;return t[19]!==f||t[20]!==m||t[21]!==p||t[22]!==u||t[23]!==d||t[24]!==b?(x=(0,$.jsx)($t,{children:(0,$.jsx)(cn,{align:f,alignItemWithTrigger:m,alignOffset:p,className:`isolate z-50`,side:u,sideOffset:d,children:b})}),t[19]=f,t[20]=m,t[21]=p,t[22]=u,t[23]=d,t[24]=b,t[25]=x):x=t[25],x}function Jn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`px-2 py-1.5 text-xs text-muted-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Bn,{className:i,"data-slot":`select-label`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Yn(e){let t=(0,Hn.c)(13),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:r,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a;t[4]===r?a=t[5]:(a=v(`relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,r),t[4]=r,t[5]=a);let o;t[6]===n?o=t[7]:(o=(0,$.jsx)(Mn,{className:`flex flex-1 shrink-0 gap-2 whitespace-nowrap`,children:n}),t[6]=n,t[7]=o);let s;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,$.jsx)(An,{render:(0,$.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`}),children:(0,$.jsx)(b,{className:`pointer-events-none`})}),t[8]=s):s=t[8];let c;return t[9]!==i||t[10]!==a||t[11]!==o?(c=(0,$.jsxs)(kn,{className:a,"data-slot":`select-item`,...i,children:[o,s]}),t[9]=i,t[10]=a,t[11]=o,t[12]=c):c=t[12],c}function Xn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`pointer-events-none -mx-1 my-1 h-px bg-border/50`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Vn,{className:i,"data-slot":`select-separator`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Zn(e){let t=(0,Hn.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5`,n),t[3]=n,t[4]=i);let a;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(Ye,{}),t[5]=a):a=t[5];let o;return t[6]!==r||t[7]!==i?(o=(0,$.jsx)(In,{className:i,"data-slot":`select-scroll-up-button`,...r,children:a}),t[6]=r,t[7]=i,t[8]=o):o=t[8],o}function Qn(e){let t=(0,Hn.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5`,n),t[3]=n,t[4]=i);let a;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(x,{}),t[5]=a):a=t[5];let o;return t[6]!==r||t[7]!==i?(o=(0,$.jsx)(Fn,{className:i,"data-slot":`select-scroll-down-button`,...r,children:a}),t[6]=r,t[7]=i,t[8]=o):o=t[8],o}export{Jn as a,Gn as c,Yn as i,qn as n,Xn as o,Wn as r,Kn as s,Un as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{c as i,i as a,l as o,n as s,r as c,t as l}from"./useValueAsRef-hoe2gsyn.js";import{a as u,c as d,f,i as p,l as m,n as h,o as g,u as _}from"./dist-DeC3TnAR.js";import{nn as v}from"./cluster-config-DkOiY8HH.js";import{t as y}from"./createLucideIcon-BQgzNCBR.js";import{t as b}from"./check-BO7W8OSs.js";import{t as x}from"./chevron-down-Dt4q6d24.js";import{_ as S,b as C,o as w,r as T,s as E,y as D}from"./button-qf9lLJ2x.js";import{C as O,E as k,S as A,T as j,_ as M,f as N,g as P,l as F,n as I,o as L,t as R,u as z,w as B,x as ee,y as V}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{a as te,i as H,n as ne,o as U,r as re,s as W,t as G}from"./useValueChanged-ZoIoM_Qs.js";import{A as ie,B as ae,Ct as K,E as oe,G as se,I as ce,J as q,K as J,M as Y,N as le,Q as X,R as ue,St as de,T as fe,U as pe,V as me,W as he,X as ge,Y as _e,Z as ve,_t as ye,bt as be,c as xe,et as Se,it as Ce,j as we,k as Te,lt as Ee,m as De,n as Oe,p as ke,q as Ae,r as je,rt as Z,st as Me,t as Ne,ut as Pe,vt as Fe,xt as Ie,yt as Le}from"./useScrollLock-UqEMT494.js";import{a as Re,i as ze,n as Be,r as Ve,t as He}from"./usePositioner-BZ4WwVxL.js";import{t as Ue}from"./useControlled-DwxdYHYK.js";import{t as We}from"./DirectionContext-C9rdm8xn.js";import{n as Ge,r as Ke,t as qe}from"./useCompositeListItem-Puv6a8xb.js";var Je={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};Je.node;var Ye=y(Je),Q=t(n(),1);function Xe(e,t={}){let{enabled:n=!0,event:r=`click`,toggle:a=!0,ignoreMouse:o=!1,stickIfOpen:s=!0,touchOpenDelay:c=0,reason:l=P}=t,d=`rootStore`in e?e.rootStore:e,f=d.context.dataRef,p=Q.useRef(void 0),m=i(),h=V(),g=Q.useMemo(()=>{function e(e,t,n,r){let i=R(l,t,n);e&&r===`touch`&&c>0?h.start(c,()=>{d.setOpen(!0,i)}):d.setOpen(e,i)}function t(e,t,n){let r=f.current.openEvent,i=d.select(`domReferenceElement`)!==t;return e&&i||!e||!a?!0:r&&s?!n(r.type):!1}return{onPointerDown(e){p.current=_e(e.pointerType,!0)&&ve(e.nativeEvent)?`virtual`:e.pointerType},onMouseDown(n){let i=p.current,a=n.nativeEvent,s=d.select(`open`);if(n.button!==0||r===`click`||_e(i,!0)&&o)return;let c=t(s,n.currentTarget,e=>e===`click`||e===`mousedown`),l=O(a);if(Ce(l)){e(c,a,l,i);return}let u=n.currentTarget;m.request(()=>{e(c,a,u,i)})},onClick(n){if(r===`mousedown-only`)return;let i=p.current;if(r===`mousedown`&&i){p.current=void 0;return}_e(i,!0)&&o||e(t(d.select(`open`),n.currentTarget,e=>e===`click`||e===`mousedown`||e===`keydown`||e===`keyup`),n.nativeEvent,n.currentTarget,i)},onKeyDown(){p.current=void 0}}},[f,r,o,l,d,s,a,m,h,c]);return Q.useMemo(()=>n?{reference:g}:u,[n,g])}function Ze(e){let{open:t=!1,onOpenChange:n,elements:r={}}=e,i=j(),a=we()!=null,o=m(()=>new fe({open:t,transitionStatus:void 0,onOpenChange:n,referenceElement:r.reference??null,floatingElement:r.floating??null,triggerElements:new ke,floatingId:i,syncOnly:!1,nested:a})).current;return w(()=>{let e={open:t,floatingId:i};r.reference!==void 0&&(e.referenceElement=r.reference,e.domReferenceElement=D(r.reference)?r.reference:null),r.floating!==void 0&&(e.floatingElement=r.floating),o.update(e)},[t,i,r.reference,r.floating,o]),o.context.onOpenChange=n,o.context.nested=a,o}var Qe=`Escape`;function $e(e){return de&&e.movementX===0&&e.movementY===0}function et(e,t,n){switch(e){case`vertical`:return t;case`horizontal`:return n;default:return t||n}}function tt(e,t){return et(t,e===`ArrowUp`||e===`ArrowDown`,e===`ArrowLeft`||e===`ArrowRight`)}function nt(e,t,n){return et(t,e===`ArrowDown`,n?e===`ArrowLeft`:e===`ArrowRight`)||e===`Enter`||e===` `||e===``}function rt(e,t,n){return et(t,n?e===Fe:e===Le,e===ye)}function it(e,t,n,r){return t===`both`||t===`horizontal`&&r?e===Qe:et(t,n?e===Le:e===Fe,e===be)}function at(e,t){let{listRef:n,activeIndex:r,onNavigate:a=()=>{},enabled:o=!0,selectedIndex:s=null,allowEscape:c=!1,loopFocus:u=!1,nested:d=!1,rtl:f=!1,virtual:p=!1,focusItemOnOpen:m=`auto`,focusItemOnHover:h=!0,openOnArrowKeyDown:g=!0,disabledIndices:_=void 0,orientation:v=`vertical`,parentOrientation:y,id:b,resetOnPointerLeave:x=!0,externalTree:S,grid:T}=t,D=T!=null,j=`rootStore`in e?e.rootStore:e,M=j.useState(`open`),N=j.useState(`floatingElement`),P=j.useState(`domReferenceElement`),F=j.context.dataRef,I=Se(N),B=Z(P),V=l(I),te=we(),H=Y(S),ne=Q.useRef(m),U=Q.useRef(s??-1),re=Q.useRef(null),W=Q.useRef(!0),G=E(e=>{a(U.current===-1?null:U.current,e)}),ie=Q.useRef(!!N),ae=Q.useRef(M),K=Q.useRef(!1),oe=Q.useRef(!1),ce=Q.useRef(null),q=l(_),J=l(M),le=l(s),de=l(x),fe=i(),me=i(),_e=E(()=>{function e(e){p?H?.events.emit(`virtualfocus`,e):ce.current=ue(e,{sync:K.current,preventScroll:!0})}let t=n.current[U.current],r=oe.current;t&&e(t),(K.current?e=>e():e=>fe.request(e))(()=>{let i=n.current[U.current]||t;i&&(t||e(i),Ee&&(r||!W.current)&&i.scrollIntoView?.({block:`nearest`,inline:`nearest`}))})});w(()=>{F.current.orientation=v},[F,v]),w(()=>{o&&(M&&N?(U.current=s??-1,ne.current&&s!=null&&(oe.current=!0,G())):ie.current&&(U.current=-1,G()))},[o,M,N,s,G]),w(()=>{if(o){if(!M){K.current=!1;return}if(N){if(r==null){if(K.current=!1,le.current!=null)return;if(ie.current&&(U.current=-1,_e()),(!ae.current||!ie.current)&&ne.current&&(re.current!=null||ne.current===!0&&re.current==null)){let e=0,t=()=>{n.current[0]==null?(e<2&&(e?e=>me.request(e):queueMicrotask)(t),e+=1):(U.current=re.current==null||nt(re.current,v,f)||d?se(n):he(n),re.current=null,G())};t()}}else Ae(n.current,r)||(U.current=r,_e(),oe.current=!1)}}},[o,M,N,r,le,d,n,v,f,G,_e,me]),w(()=>{if(!o||N||!H||p||!ie.current)return;let e=H.nodesRef.current,t=e.find(e=>e.id===te)?.context?.elements.floating,n=ee(k(P??t??null)),r=e.some(e=>e.context&&A(e.context.elements.floating,n));t&&!r&&W.current&&t.focus({preventScroll:!0})},[o,N,P,H,te,p]),w(()=>{ae.current=M,ie.current=!!N}),w(()=>{M||(re.current=null,ne.current=m)},[M,m]);let ye=r!=null,be=E(e=>{if(!J.current)return;let t=n.current.indexOf(e.currentTarget);t!==-1&&(U.current!==t||r!==t)&&(U.current=t,G(e))}),xe=E(()=>y??H?.nodesRef.current.find(e=>e.id===te)?.context?.dataRef?.current.orientation),Ce=E(()=>se(n,q.current)),Te=E(e=>{if(W.current=!1,K.current=!0,e.which===229||!J.current&&e.currentTarget===V.current)return;if(d&&it(e.key,v,f,D)){tt(e.key,xe())||X(e),j.setOpen(!1,R(z,e.nativeEvent)),C(P)&&(p?H?.events.emit(`virtualfocus`,P):P.focus());return}let t=U.current,r=se(n,_),i=he(n,_);if(B||(e.key===`Home`&&(X(e),U.current=r,G(e)),e.key===`End`&&(X(e),U.current=i,G(e))),T!=null){let t=T(e,U.current,n,v,u,f,_,r,i);if(t!=null&&(U.current=t,G(e)),v===`both`)return}if(tt(e.key,v)){if(X(e),M&&!p&&ee(e.currentTarget.ownerDocument)===e.currentTarget){U.current=nt(e.key,v,f)?r:i,G(e);return}nt(e.key,v,f)?u?t>=i?c&&t!==n.current.length?U.current=-1:(K.current=!1,U.current=r):U.current=pe(n.current,{startingIndex:t,disabledIndices:_}):U.current=Math.min(i,pe(n.current,{startingIndex:t,disabledIndices:_})):u?t<=r?c&&t!==-1?U.current=n.current.length:(K.current=!1,U.current=i):U.current=pe(n.current,{startingIndex:t,decrement:!0,disabledIndices:_}):U.current=Math.max(r,pe(n.current,{startingIndex:t,decrement:!0,disabledIndices:_})),Ae(n.current,U.current)&&(U.current=-1),G(e)}}),Ee=Q.useMemo(()=>({onFocus(e){K.current=!0,be(e)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove(e){$e(e)||(K.current=!0,oe.current=!1,h&&be(e))},onPointerLeave(e){if(!J.current||!W.current||e.pointerType===`touch`)return;K.current=!0;let t=e.relatedTarget;if(h&&!n.current.includes(t)&&de.current&&(ce.current?.(),ce.current=null,U.current=-1,G(e),!p)){let e=V.current,t=ee(k(e));e&&A(e,t)&&e.focus({preventScroll:!0})}}}),[be,J,V,h,n,G,de,p]),De=Q.useMemo(()=>p&&M&&ye&&{"aria-activedescendant":`${b}-${r}`},[p,M,ye,b,r]),Oe=Q.useMemo(()=>({...B?{}:De,onKeyDown(e){if(e.key===`Tab`&&e.shiftKey&&M&&!p){let t=O(e.nativeEvent);if(t&&!A(V.current,t))return;X(e),j.setOpen(!1,R(L,e.nativeEvent)),C(P)&&P.focus();return}Te(e)},onPointerMove(e){$e(e)||(W.current=!0)}}),[De,Te,V,B,j,M,p,P]),ke=Q.useMemo(()=>{function e(e){j.setOpen(!0,R(z,e.nativeEvent,e.currentTarget))}function t(e){m===`auto`&&ge(e.nativeEvent)&&(ne.current=!p)}function n(e){ne.current=m,m===`auto`&&ve(e.nativeEvent)&&(ne.current=!0)}return{onKeyDown(t){let n=j.select(`open`);W.current=!1;let r=t.key.startsWith(`Arrow`),i=rt(t.key,xe(),f),a=tt(t.key,v),o=(d?i:a)||t.key===`Enter`||t.key.trim()===``;if(p&&n)return Te(t);if(n||g||!r){if(o){let e=tt(t.key,xe());re.current=d&&e?null:t.key}if(d){i&&(X(t),n?(U.current=Ce(),G(t)):e(t));return}a&&(le.current!=null&&(U.current=le.current),X(t),!n&&g?e(t):Te(t),n&&G(t))}},onFocus(e){j.select(`open`)&&!p&&(U.current=-1,G(e))},onPointerDown:n,onPointerEnter:n,onMouseDown:t,onClick:t}},[Te,m,Ce,d,G,j,g,v,xe,f,le,p]),je=Q.useMemo(()=>({...De,...ke}),[De,ke]);return Q.useMemo(()=>o?{reference:je,floating:Oe,item:Ee,trigger:ke}:{},[o,je,Oe,ke,Ee])}function ot(e,t){let{listRef:n,elementsRef:r,activeIndex:i,onMatch:a,disabledIndices:o,onTyping:s,enabled:c=!0,resetMs:l=750,selectedIndex:u=null}=t,d=`rootStore`in e?e.rootStore:e,f=d.useState(`open`),m=V(),h=Q.useRef(``),g=Q.useRef(u??i??-1),_=Q.useRef(null),v=E(e=>{function t(e){return r?.current[e]}function c(e){let n=t(e);return n&&!J(n)||n?.matches(`:disabled`)?!1:o==null||!q(p,e,o)}function d(e,t,n=0){if(e.length===0)return-1;let r=(n%e.length+e.length)%e.length,i=t.toLowerCase();for(let t=0;t0&&e.key===` `&&(X(e),s?.(!0)),h.current.length>0&&h.current[0]!==` `&&d(v,h.current)===-1&&e.key!==` `&&s?.(!1),v==null||e.key.length!==1||e.ctrlKey||e.metaKey||e.altKey)return;f&&e.key!==` `&&(X(e),s?.(!0));let y=h.current===``;y&&(g.current=u??i??-1),v.every((e,t)=>e&&c(t)?e[0]?.toLowerCase()!==e[1]?.toLowerCase():!0)&&h.current===e.key&&(h.current=``,g.current=_.current),h.current+=e.key,m.start(l,()=>{h.current=``,g.current=_.current,s?.(!1)});let b=((y?u??i??-1:g.current)??0)+1,x=d(v,h.current,b);x===-1?e.key!==` `&&(h.current=``,s?.(!1)):(a?.(x),_.current=x)}),y=E(e=>{let t=e.relatedTarget,n=d.select(`domReferenceElement`),r=d.select(`floatingElement`);A(n,t)||A(r,t)||(m.clear(),h.current=``,g.current=_.current,s?.(!1))});w(()=>{(f||u===null)&&(m.clear(),_.current=null,h.current!==``&&(h.current=``))},[f,u,m]);let b=Q.useMemo(()=>({onKeyDown:v,onBlur:y}),[v,y]);return Q.useMemo(()=>c?{reference:b,floating:b}:{},[c,b])}var $=e();function st(e){let t=Q.useRef(``),n=Q.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:Q.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function ct(e,t){let{onClick:n,onPointerDown:r}=st(E((n,r)=>{(typeof e==`function`?e():e)||t(r||(K?`touch`:``))}));return Q.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function lt(e){let[t,n]=Q.useState(null),r=ct(e,n);return G(e,t=>{t&&!e&&n(null)}),Q.useMemo(()=>({openMethod:t,triggerProps:r}),[t,r])}function ut(e){let[t,n]=Q.useState({current:e,previous:null});return Object.is(e,t.current)||n({current:e,previous:t.current}),t.previous}function dt(e){let t=Q.useRef(!0);t.current&&(t.current=!1,e())}var ft=Q.createContext(void 0),pt=Q.createContext(void 0),mt=Q.createContext(void 0);function ht(){let e=Q.useContext(ft);if(e===void 0)throw Error(_(60));return e}function gt(){let e=Q.useContext(pt);if(e===void 0)throw Error(_(101));return e}function _t(){let e=Q.useContext(mt);if(e===void 0)throw Error(_(61));return e}function vt(e,t,n=Object.is){let{length:r}=e;if(r!==t.length)return!1;for(let i=0;iObject.is(e,t);function bt(e,t,n){return e==null||t==null?Object.is(e,t):n(e,t)}function xt(e,t,n){return Array.isArray(e)&&Array.isArray(t)?!vt(e,t,(e,t)=>bt(e,t,n)):e!==t}function St(e,t,n){return e?e.some(e=>e!==void 0&&bt(t,e,n)):!1}function Ct(e,t,n){return e?e.findIndex(e=>e!==void 0&&bt(e,t,n)):-1}function wt(e,t){if(t!==yt)return n=>St(e,n,t);let n=new Set(e);return n.delete(void 0),t=>n.has(t)&&(t!==0||e.some(e=>Object.is(t,e)))}function Tt(e,t,n,r){let i=r&&Array.isArray(t)?e.findIndex(wt(t,n)):Ct(e,t,n);return i===-1?null:i}function Et(e,t,n,r,i,a){return St(r,t,i)?a!=null&&e>a&&St(r,n[a],i)?a:e:e===a?Tt(n,r,i,!0):a}function Dt(e,t,n){return e.filter(e=>!bt(t,e,n))}function Ot(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function kt(e){return typeof e==`object`&&!!e&&Array.isArray(e.items)}function At(e){return kt(e?.[0])}function jt(e){return At(e)?e.flatMap(e=>e.items):e}function Mt(e){if(!Array.isArray(e))return e!=null&&`null`in e;let t=e;if(At(t)){for(let e of t)for(let t of e.items)if(t&&t.value==null&&t.label!=null)return!0;return!1}for(let e of t)if(e&&e.value==null&&e.label!=null)return!0;return!1}function Nt(e,t){if(t&&e!=null)return t(e)??``;if(e&&typeof e==`object`){if(`label`in e&&e.label!=null)return String(e.label);if(`value`in e)return String(e.value)}return Ot(e)}function Pt(e,t){return t&&e!=null?t(e)??``:e&&typeof e==`object`&&`value`in e&&`label`in e?Ot(e.value):Ot(e)}function Ft(e,t,n){function r(){return Nt(e,n)}if(n&&e!=null)return n(e);if(e&&typeof e==`object`&&`label`in e&&e.label!=null)return e.label;if(t&&!Array.isArray(t))return(Object.hasOwn(t,e)?t[e]:void 0)??r();if(Array.isArray(t)){let n=jt(t);if(typeof e!=`object`||!e){let t=n.find(t=>t.value===e);return t&&t.label!=null?t.label:r()}if(`value`in e){let t=n.find(t=>t&&t.value===e.value);if(t&&t.label!=null)return t.label}}return r()}function It(e,t,n){return e.reduce((e,r,i)=>(i>0&&e.push(`, `),e.push((0,$.jsx)(Q.Fragment,{children:Ft(r,t,n)},i)),e),[])}var Lt={id:e=>e.id,labelId:e=>e.labelId,modal:e=>e.modal,items:e=>e.items,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,value:e=>e.value,hasSelectedValue:e=>{let{value:t,multiple:n,itemToStringValue:r}=e;return t==null?!1:n&&Array.isArray(t)?t.length>0:Pt(t,r)!==``},hasNullItemLabel:(e,t)=>t?Mt(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMount:e=>e.forceMount,transitionStatus:e=>e.transitionStatus,openMethod:e=>e.openMethod,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{let n=e.isItemEqualToValue,r=e.value;return e.multiple?Array.isArray(r)&&r.some(e=>bt(t,e,n)):bt(t,r,n)},isSelectedByFocus:(e,t)=>e.selectedIndex===t,popupProps:e=>e.popupProps,triggerProps:e=>e.triggerProps,triggerElement:e=>e.triggerElement,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupSide:e=>e.popupSide,scrollUpArrowVisible:e=>e.scrollUpArrowVisible,scrollDownArrowVisible:e=>e.scrollDownArrowVisible,hasScrollArrows:e=>e.hasScrollArrows};function Rt(e,t=-(2**53-1),n=2**53-1){return Math.max(t,Math.min(e,n))}function zt(e,t){return Math.max(0,e-t)}function Bt(e,t){if(t<=0)return 0;let n=Rt(e,0,t),r=n,i=t-n,a=r<=1,o=i<=1;return a&&o?r<=i?0:t:a?0:o?t:n}function Vt(e){let{id:t,value:n,defaultValue:r=null,onValueChange:i,open:o,defaultOpen:s=!1,onOpenChange:h,name:_,form:v,autoComplete:y,disabled:b=!1,readOnly:x=!1,required:S=!1,modal:C=!0,actionsRef:T,inputRef:D,onOpenChangeComplete:O,items:k,multiple:A=!1,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P=yt,highlightItemOnHover:F=!0,children:I}=e,{clearErrors:L}=te(),{setDirty:z,setTouched:B,setFocused:ee,validityData:V,setFilled:H,name:W,disabled:ie,validation:K,validationMode:se}=U(),ce=re({id:t}),q=ie||b,J=W??_,[Y,le]=Ue({controlled:n,default:A?r??p:r,name:`Select`,state:`value`}),[X,ue]=Ue({controlled:o,default:s,name:`Select`,state:`open`}),de=Q.useRef([]),fe=Q.useRef([]),pe=Q.useRef(null),he=Q.useRef(null),ge=Q.useRef(0),_e=Q.useRef(null),ve=Q.useRef([]),ye=Q.useRef(!1),be=Q.useRef(null),xe=Q.useRef(null),Se=Q.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),Ce=Q.useRef(!1),we=Q.useRef(Y),{mounted:Ee,setMounted:Oe,transitionStatus:ke}=c(X),{openMethod:Ae,triggerProps:je}=lt(X),Z=m(()=>new oe({id:ce,labelId:void 0,modal:C,multiple:A,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P,value:Y,open:X,mounted:Ee,transitionStatus:ke,items:k,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:u,triggerProps:u,triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1},{setValue:g,setOpen:g,handleScrollArrowVisibility:g,onOpenChangeComplete:g,listRef:de,popupRef:pe,scrollHandlerRef:he,scrollArrowsMountedCountRef:ge,valueRef:_e,valuesRef:ve,labelsRef:fe,typingRef:ye,selectionRef:Se,firstItemTextRef:be,selectedItemTextRef:xe,alignItemWithTriggerActiveRef:Ce,initialValueRef:we},Lt)).current,Me=Z.useState(`activeIndex`),Ne=Z.useState(`selectedIndex`),Pe=Z.useState(`triggerElement`),Fe=Z.useState(`positionerElement`),Ie=ut(Ae),Le=Ae??Ie,Re=Q.useMemo(()=>A?``:Pt(Y,M),[A,Y,M]),ze=Q.useMemo(()=>A&&Array.isArray(Y)?Y.map(e=>Pt(e,M)):Pt(Y,M),[A,Y,M]),Be=l(Pe),Ve=E(()=>ze);ne(Be,ce,Y,Ve,!q,_);let He=A?Array.isArray(Y)&&Y.length>0:Y!=null&&Re!==``;w(()=>{H(He)},[He,H]),w(function(){let e=Tt(ve.current,Y,P,A);e===null&&(xe.current=null),!X&&Z.set(`selectedIndex`,e)},[A,X,Y,P,Z]),G(Y,()=>{L(J),z(xt(Y,V.initialValue,P)),K.change(Y)});let We=E((e,t)=>{h?.(e,t),!t.isCanceled&&(ue(e),!e&&(t.reason===`focus-out`||t.reason===`outside-press`)&&(B(!0),ee(!1),se===`onBlur`&&K.commit(Y)))}),Ge=E(()=>{Oe(!1),Z.update({activeIndex:null,openMethod:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1}),O?.(!1)});a({enabled:!T,open:X,ref:pe,onComplete(){X||Ge()}}),Q.useImperativeHandle(T,()=>({unmount:Ge}),[Ge]);let qe=E((e,t)=>{i?.(e,t),!t.isCanceled&&le(e)}),Je=E(e=>{let t=zt(e.scrollHeight,e.clientHeight),n=Bt(e.scrollTop,t),r=n>0,i=nKe(de.current[e]),onMatch(e){X?Z.set(`activeIndex`,e):qe(ve.current[e],R(N))},onTyping(e){ye.current=e}}),nt=Q.useMemo(()=>f(tt.reference,et.reference,$e.reference,Qe.reference,je),[Qe.reference,tt.reference,et.reference,$e.reference,je]),rt=Q.useMemo(()=>f(De,tt.floating,et.floating,$e.floating),[tt.floating,et.floating,$e.floating]),it=et.item??u;Z.useContextCallback(`setValue`,qe),Z.useContextCallback(`setOpen`,We),Z.useContextCallback(`handleScrollArrowVisibility`,Je),Z.useContextCallback(`onOpenChangeComplete`,O),dt(()=>{Z.update({popupProps:rt,triggerProps:nt})}),Z.useSyncedValues({id:ce,modal:C,multiple:A,value:Y,open:X,mounted:Ee,transitionStatus:ke,popupProps:rt,triggerProps:nt,items:k,itemToStringLabel:j,itemToStringValue:M,isItemEqualToValue:P,openMethod:Le});let st=Q.useMemo(()=>({disabled:q,readOnly:x,required:S,multiple:A,highlightItemOnHover:F,itemProps:it}),[q,x,S,A,F,it]),ct=d(D,K.inputRef),ht=A?void 0:J,gt=Q.useMemo(()=>!A||!Array.isArray(Y)||!J?null:Y.map(e=>{let t=Pt(e,M);return(0,$.jsx)(`input`,{type:`hidden`,form:v,name:J,value:t,disabled:q},t)}),[A,Y,v,J,M,q]);return(0,$.jsxs)(ft.Provider,{value:Z,children:[(0,$.jsx)(pt.Provider,{value:st,children:(0,$.jsx)(mt.Provider,{value:Ye,children:I})}),(0,$.jsx)(`input`,{...K.getValidationProps(q,{onFocus(){Z.state.triggerElement?.focus({focusVisible:!0})},onChange(e){if(e.nativeEvent.defaultPrevented||q||x)return;let t=e.currentTarget.value,n=R(N,e.nativeEvent);function r(){if(A)return;let e=t.toLowerCase(),r=ve.current.findIndex(t=>Pt(t,M).toLowerCase()===e||Nt(t,j).toLowerCase()===e);r===-1&&(r=ve.current.findIndex((t,n)=>{let r=fe.current[n];return r!=null&&r.toLowerCase()===e}));let i=ve.current[r];i!=null&&qe(i,n)}Z.set(`forceMount`,!0),queueMicrotask(r)}}),id:ce&&ht==null?`${ce}-hidden-input`:void 0,form:v,name:ht,autoComplete:y,value:Re,disabled:q,required:S&&!(A&&He),readOnly:x,ref:ct,style:J?me:ae,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),gt]})}function Ht(e,t){return e??t}var Ut=5;function Wt(e,t){let n=Gt(t);return e.clientX>=n.left-Ut&&e.clientX<=n.right+Ut&&e.clientY>=n.top-Ut&&e.clientY<=n.bottom+Ut}function Gt(e){let t=e.getBoundingClientRect(),n=S(e);if(Ie)return t;let r=n.getComputedStyle(e,`::before`),i=n.getComputedStyle(e,`::after`);if(r.content===`none`&&i.content===`none`)return t;let a=parseFloat(r.width)||0,o=parseFloat(r.height)||0,s=parseFloat(i.width)||0,c=parseFloat(i.height)||0,l=Math.max(t.width,a,s),u=Math.max(t.height,o,c),d=l-t.width,f=u-t.height;return{left:t.left-d/2,right:t.right+d/2,top:t.top-f/2,bottom:t.bottom+f/2}}var Kt=`data-popup-side`,qt=400,Jt={...Ee,...W,popupSide:e=>e?{[Kt]:e}:null,value:()=>null},Yt=Q.forwardRef(function(e,t){let{render:n,className:r,id:i,disabled:a=!1,nativeButton:o=!0,style:s,...c}=e,{setTouched:u,setFocused:d,validationMode:p,validation:m,state:g,disabled:_}=U(),{labelId:v}=H(),y=ht(),{readOnly:b,required:x,disabled:S}=gt(),C=_||S||a,w=y.useState(`open`),E=y.useState(`mounted`),D=y.useState(`value`),O=y.useState(`triggerProps`),j=y.useState(`positionerElement`),M=y.useState(`listElement`),P=y.useState(`popupSide`),F=y.useState(`id`),L=y.useState(`labelId`),z=y.useState(`hasSelectedValue`),B=E&&j?P:null,ee=i??F,te=Ht(v,L);re({id:i});let ne=l(j),W=Q.useRef(null),{getButtonProps:G,buttonRef:ie}=T({disabled:C,native:o}),ae=y.useStateSetter(`triggerElement`),K=V(),oe=V(),se=V();Q.useEffect(()=>{if(w)return se.start(qt,()=>{y.context.selectionRef.current.allowUnselectedMouseUp=!0,y.context.selectionRef.current.allowSelectedMouseUp=!0}),()=>{se.clear()};y.context.selectionRef.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},oe.clear()},[w,y,oe,se]);let ce=f(O,{id:ee,role:`combobox`,"aria-expanded":w,"aria-haspopup":`listbox`,"aria-controls":w?M?.id??Se(j)?.id:void 0,"aria-labelledby":te,"aria-readonly":b||void 0,"aria-required":x||void 0,tabIndex:C?-1:0,onFocus(e){d(!0),w&&y.context.alignItemWithTriggerActiveRef.current&&y.context.setOpen(!1,R(N,e.nativeEvent)),K.start(0,()=>{y.set(`forceMount`,!0)})},onBlur(e){A(j,e.relatedTarget)||(u(!0),d(!1),p===`onBlur`&&m.commit(D))},onMouseDown(e){if(w)return;let t=k(e.currentTarget);function n(e){if(!W.current)return;let t=e.target;A(W.current,t)||A(ne.current,t)||Wt(e,W.current)||y.context.setOpen(!1,R(I,e))}oe.start(0,()=>{t.addEventListener(`mouseup`,n,{once:!0})})}},c,G),q=m.getValidationProps(C,ce);q.role=`combobox`;let J={...g,open:w,disabled:C,value:D,readOnly:b,popupSide:B,placeholder:!z};return h(`button`,e,{ref:[t,W,ie,ae],state:J,stateAttributesMapping:Jt,props:q})}),Xt={value:()=>null},Zt=Q.forwardRef(function(e,t){let{className:n,render:r,children:i,placeholder:a,style:o,...s}=e,c=ht(),l=c.useState(`value`),u=c.useState(`items`),d=c.useState(`itemToStringLabel`),f=c.useState(`hasSelectedValue`),p=!f&&a!=null&&i==null,m=c.useState(`hasNullItemLabel`,p),g={value:l,placeholder:!f},_=null;return _=typeof i==`function`?i(l):i??(p&&!m?a:Array.isArray(l)?It(l,u,d):Ft(l,u,d)),h(`span`,e,{state:g,ref:[t,c.context.valueRef],props:[{children:_},s],stateAttributesMapping:Xt})}),Qt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o={open:ht().useState(`open`)};return h(`span`,e,{state:o,ref:t,props:[{"aria-hidden":!0,children:`▼`},a],stateAttributesMapping:Pe})}),$t=Q.forwardRef(function(e,t){let n=ht(),r=n.useState(`mounted`),i=n.useState(`forceMount`);return r||i?(0,$.jsx)(le,{ref:t,...e}):null}),en=Q.createContext(void 0);function tn(){let e=Q.useContext(en);if(!e)throw Error(_(59));return e}function nn(e,t){e&&Object.assign(e.style,t)}var rn={position:`relative`,maxHeight:`100%`,overflowX:`hidden`,overflowY:`auto`},an=20;function on(e,t,n,r){let[i,a]=Q.useState(!1);w(()=>{if(!e||!t||n==null){a(!1);return}let r=k(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-an)},[e,t,n]),Ne(e&&(!t||i),r)}var sn={position:`fixed`},cn=Q.forwardRef(function(e,t){let{anchor:n,className:r,render:i,positionMethod:a,side:o,align:s,sideOffset:c,alignOffset:l,collisionBoundary:u=`clipping-ancestors`,collisionPadding:d,arrowPadding:f,sticky:p,disableAnchorTracking:m,alignItemWithTrigger:h=!0,collisionAvoidance:g=ce,style:_,...v}=e,y=ht(),b=_t(),x=y.useState(`open`),S=y.useState(`mounted`),C=y.useState(`modal`),T=y.useState(`value`),D=y.useState(`openMethod`),O=y.useState(`positionerElement`),k=y.useState(`triggerElement`),A=y.useState(`isItemEqualToValue`),j=y.useState(`transitionStatus`),M=Q.useRef(null),P=Q.useRef(null),[F,I]=Q.useState(h),L=S&&F&&D!==`touch`;!S&&F!==h&&I(h),Q.useImperativeHandle(y.context.alignItemWithTriggerActiveRef,()=>L),on((L||C)&&x,D===`touch`,O,k);let z=Ve({anchor:n,floatingRootContext:b,positionMethod:a,mounted:S,side:o,sideOffset:c,align:s,alignOffset:l,arrowPadding:f,collisionBoundary:u,collisionPadding:d,sticky:p,disableAnchorTracking:m??L,collisionAvoidance:g,keepMounted:!0}),B=L?`none`:z.side,ee=L?sn:z.positionerStyles,V={open:x,side:B,align:z.align,anchorHidden:z.anchorHidden};w(()=>{y.set(`popupSide`,z.side)},[y,z.side]);let te=y.useStateSetter(`positionerElement`),H=He(e,V,{styles:ee,transitionStatus:j,props:v,refs:[t,te],hidden:!S,inert:!x}),ne=Q.useRef(0),U=E(e=>{if(y.context.valuesRef.current.length===0)return;let t=ne.current;ne.current=e.size;let n=R(N);if(t!==0&&!y.state.multiple&&T!==null&&Ct(y.context.valuesRef.current,T,A)===-1){let e=y.context.initialValueRef.current,t=e!=null&&Ct(y.context.valuesRef.current,e,A)!==-1?e:null;y.context.setValue(t,n),t===null&&(y.set(`selectedIndex`,null),y.context.selectedItemTextRef.current=null)}if(t!==0&&y.state.multiple&&Array.isArray(T)){let e=T.filter(e=>Ct(y.context.valuesRef.current,e,A)!==-1);e.length!==T.length&&(y.context.setValue(e,n),e.length===0&&(y.set(`selectedIndex`,null),y.context.selectedItemTextRef.current=null))}if(x&&L){y.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});let e={height:``};nn(O,e),nn(y.context.popupRef.current,e)}}),re=Q.useMemo(()=>({...z,side:B,alignItemWithTriggerActive:L,setControlledAlignItemWithTrigger:I,scrollUpArrowRef:M,scrollDownArrowRef:P}),[z,B,L,I]);return(0,$.jsx)(Ge,{elementsRef:y.context.listRef,labelsRef:y.context.labelsRef,onMapChange:U,children:(0,$.jsxs)(en.Provider,{value:re,children:[S&&C&&(0,$.jsx)(Oe,{inert:je(!x),cutout:k}),H]})})}),ln=`base-ui-disable-scrollbar`,un={className:ln,getElement(e){return(0,$.jsx)(`style`,{nonce:e,href:ln,precedence:`base-ui:low`,children:`.${ln}{scrollbar-width:none}.${ln}::-webkit-scrollbar{display:none}`})}},dn=Q.createContext(void 0);function fn(e){let t=Q.useContext(dn);if(t===void 0&&!e)throw Error(_(69));return t}var pn=Q.createContext(void 0),mn={disableStyleElements:!1};function hn(){return Q.useContext(pn)??mn}var gn=`--transform-origin`,_n={...Me,...o},vn=Q.forwardRef(function(e,t){let{render:n,className:r,style:o,finalFocus:c,...l}=e,u=ht(),{multiple:d,readOnly:f,highlightItemOnHover:p}=gt(),m=_t(),{side:g,align:_,alignItemWithTriggerActive:v,isPositioned:y,setControlledAlignItemWithTrigger:b}=tn(),x=fn(!0)!=null,C=We(),{nonce:T,disableStyleElements:D}=hn(),O=u.useState(`id`),A=u.useState(`open`),j=u.useState(`openMethod`),N=u.useState(`mounted`),P=u.useState(`popupProps`),F=u.useState(`transitionStatus`),I=u.useState(`triggerElement`),L=u.useState(`positionerElement`),z=u.useState(`listElement`),B=Q.useRef(!1),ee=Q.useRef(!1),V=Q.useRef({}),te=i(),H=E(e=>{if(!L||!u.context.popupRef.current||!ee.current)return;let t=L.style.top===`0px`,n=L.style.bottom===`0px`;if(B.current||!v||!t&&!n){u.context.handleScrollArrowVisibility(e);return}let r=xn(L),i=Sn(L.getBoundingClientRect().height,`y`,r),a=k(L),o=S(L),s=o.getComputedStyle(L),c=parseFloat(s.marginTop),l=parseFloat(s.marginBottom),d=yn(o.getComputedStyle(u.context.popupRef.current)),f=Math.min(a.documentElement.clientHeight-c-l,d),p=e.scrollTop,m=bn(e),h=null,g=e=>{L.style.height=`${e}px`},_=t?m-p:p,y=Math.min(i+_,f);if(_<=1){let n=Rt(_,0,f-i);n>0&&g(i+n),e.scrollTop=t?m:0,f-(i+n)<=1&&(B.current=!0),u.context.handleScrollArrowVisibility(e);return}f-y>1?h=t?1/0:0:n&&p1&&(e.scrollTop=t)}b>=f-1&&(B.current=!0),u.context.handleScrollArrowVisibility(e)});Q.useImperativeHandle(u.context.scrollHandlerRef,()=>H,[H]),a({open:A,ref:u.context.popupRef,onComplete(){A&&u.context.onOpenChangeComplete(!0)}});let ne={open:A,transitionStatus:F,side:g,align:_};w(()=>{L&&u.context.popupRef.current&&!Object.keys(V.current).length&&(V.current={top:L.style.top||`0`,left:L.style.left||`0`,right:L.style.right,height:L.style.height,bottom:L.style.bottom,minHeight:L.style.minHeight,maxHeight:L.style.maxHeight,marginTop:L.style.marginTop,marginBottom:L.style.marginBottom})},[u,L]),w(()=>{A||v||(ee.current=!1,B.current=!1,nn(L,V.current))},[A,v,L]),w(()=>{let e=u.context.popupRef.current;if(!A||!I||!L||!e||v&&!y||u.state.transitionStatus===`ending`)return;if(ee.current=!0,e.style.removeProperty(gn),!v){te.request(()=>u.context.handleScrollArrowVisibility(z||e));return}let t=Tn(e);try{let t=u.context.selectedItemTextRef.current;t?.isConnected||(t=!u.select(`hasSelectedValue`)&&u.context.firstItemTextRef.current?.isConnected?u.context.firstItemTextRef.current:null);let n=u.context.valueRef.current,r=S(L),i=r.getComputedStyle(L),a=r.getComputedStyle(e),o=k(I),s=xn(I),c=Cn(I.getBoundingClientRect(),s),l=Cn(L.getBoundingClientRect(),s),d=c.height,f=z||e,m=f.scrollHeight,h=parseFloat(a.borderBottomWidth),g=parseFloat(i.marginTop)||10,_=parseFloat(i.marginBottom)||10,v=parseFloat(i.minHeight)||100,y=yn(a),x=o.documentElement.clientHeight-g-_,w=o.documentElement.clientWidth,T=x-c.bottom+d,E,D=C===`rtl`?c.right-l.width:c.left,O=0;if(t&&n){let e=Cn(n.getBoundingClientRect(),s);E=Cn(t.getBoundingClientRect(),s),D=l.left+(C===`rtl`?e.right-E.right:e.left-E.left);let r=e.top-c.top+e.height/2;O=E.top-l.top+E.height/2-r}let A=T+O+_+h,j=Math.min(x,A),M=x-g-_,N=A-j,P=w-5;L.style.left=`${Rt(D,5,P-l.width)}px`,L.style.height=`${j}px`,L.style.maxHeight=`none`,L.style.marginTop=`${g}px`,L.style.marginBottom=`${_}px`,e.style.height=`100%`;let F=bn(f),R=N>=F-1;R&&(j=Math.min(x,l.height)-(N-F));let ee=c.top<20||c.bottom>x-20||Math.ceil(j)+1=M?`0`:`${e}px`,L.style.height=`${j}px`,f.scrollTop=bn(f)}else L.style.bottom=`0`,f.scrollTop=N;if(E){let t=l.top,n=l.height,r=E.top+E.height/2,i=Rt(n>0?(r-t)/n*100:50,0,100);e.style.setProperty(gn,`50% ${i}%`)}(H===x||j>=y)&&(B.current=!0),u.context.handleScrollArrowVisibility(f),p&&u.state.selectedIndex===null&&u.state.activeIndex===null&&u.context.listRef.current[0]!=null&&u.set(`activeIndex`,0)}finally{t()}},[u,A,L,I,v,b,te,z,p,C,y]),Q.useEffect(()=>{if(!v||!L||!A)return;let e=S(L);function t(e){u.context.setOpen(!1,R(M,e))}return s(e,`resize`,t)},[u,v,L,A]);let U={...z?{role:`presentation`}:{role:`listbox`,"aria-multiselectable":d||void 0,"aria-readonly":f||void 0,id:`${O}-list`},onKeyDown(e){x&&xe.has(e.key)&&e.stopPropagation()},onScroll(e){z||H(e.currentTarget)},...v&&{style:z?{height:`100%`}:rn},className:!z&&v?un.className:void 0},re=h(`div`,e,{ref:[t,u.context.popupRef],state:ne,stateAttributesMapping:_n,props:[P,U,Be(F),l]});return(0,$.jsxs)(Q.Fragment,{children:[!D&&un.getElement(T),(0,$.jsx)(ie,{context:m,modal:!1,disabled:!N,openInteractionType:j,returnFocus:c,restoreFocus:!0,children:re})]})});function yn(e){let t=e.maxHeight;return t.endsWith(`px`)&&parseFloat(t)||1/0}function bn(e){return zt(e.scrollHeight,e.clientHeight)}function xn(e){return ze.getScale(e)}function Sn(e,t,n){return e/n[t]}function Cn(e,t){return Re({x:Sn(e.x,`x`,t),y:Sn(e.y,`y`,t),width:Sn(e.width,`x`,t),height:Sn(e.height,`y`,t)})}var wn=[[`transform`,`none`],[`scale`,`1`],[`translate`,`0 0`]];function Tn(e){let{style:t}=e,n={};for(let[e,r]of wn)n[e]=t.getPropertyValue(e),t.setProperty(e,r,`important`);return()=>{for(let[e]of wn){let r=n[e];r?t.setProperty(e,r):t.removeProperty(e)}}}var En=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=ht(),{multiple:s,readOnly:c}=gt(),{alignItemWithTriggerActive:l}=tn(),u=o.useState(`hasScrollArrows`),d=o.useState(`openMethod`),f={id:`${o.useState(`id`)}-list`,role:`listbox`,"aria-multiselectable":s||void 0,"aria-readonly":c||void 0,onScroll(e){o.context.scrollHandlerRef.current?.(e.currentTarget)},...l&&{style:rn},className:u&&d!==`touch`?un.className:void 0},p=o.useStateSetter(`listElement`);return h(`div`,e,{ref:[t,p],props:[f,a]})}),Dn=Q.createContext(void 0);function On(){let e=Q.useContext(Dn);if(!e)throw Error(_(57));return e}var kn=Q.memo(Q.forwardRef(function(e,t){let{render:n,className:r,style:i,value:a=null,label:o,disabled:s=!1,nativeButton:c=!1,...l}=e,u=Q.useRef(null),d=qe({guess:!0,label:o,textRef:u}),f=ht(),{itemProps:p,multiple:m,disabled:g,readOnly:_}=gt(),v=g||s,y=f.useState(`isActive`,d.index),b=f.useState(`open`),x=f.useState(`isSelected`,a),S=f.useState(`isSelectedByFocus`,d.index),C=f.useState(`isItemEqualToValue`),E=d.index,D=Q.useRef(null);w(()=>{let e=f.context.valuesRef.current;return e[E]=a,()=>{delete e[E]}},[E,a,f]),w(()=>{let e=f.state.value,t=f.state.selectedIndex,n=t,r;m&&Array.isArray(e)?(n=Et(E,a,f.context.valuesRef.current,e,C,t),r=n===E,E===t&&!r&&(f.context.selectedItemTextRef.current=null)):(r=e!==void 0&&bt(a,e,C),r&&(n=E)),f.set(`selectedIndex`,n),r&&u.current&&(f.context.selectedItemTextRef.current=u.current)},[E,m,C,f,a]);let O=Q.useRef(`mouse`),k=Q.useRef(!1),{getButtonProps:A,buttonRef:j}=T({disabled:v,focusableWhenDisabled:!0,native:c,composite:!0}),M={disabled:v,selected:x,highlighted:y};function N(e){if(g||_)return;let t=f.state.value;if(m){let n=Array.isArray(t)?t:[],r=x?Dt(n,a,C):[...n,a];f.context.setValue(r,R(F,e))}else f.context.setValue(a,R(F,e)),f.context.setOpen(!1,R(F,e))}function P(){f.context.selectionRef.current.dragY=0}let I={role:`option`,"aria-selected":x,tabIndex:b&&y?0:-1,onKeyDown(e){f.set(`activeIndex`,E),e.key===` `&&f.context.typingRef.current&&e.preventDefault()},onClick(e){let t=O.current!==`touch`,n=e.nativeEvent.pointerType,r=t&&ge(e.nativeEvent)&&(n!==void 0||y),i=t&&!r&&!k.current;k.current=!1,!(v||i)&&N(e.nativeEvent)},onPointerEnter(e){O.current=e.pointerType},onPointerMove(e){if(e.pointerType===`mouse`&&e.buttons===1){let t=f.context.selectionRef.current;t.dragY+=e.movementY,t.dragY**2>=64&&(t.allowUnselectedMouseUp=!0)}},onPointerDown(e){O.current=e.pointerType,k.current=!0,P()},onMouseUp(){if(P(),v||O.current===`touch`||k.current)return;let e=!f.context.selectionRef.current.allowSelectedMouseUp&&x,t=!f.context.selectionRef.current.allowUnselectedMouseUp&&!x;e||t||(k.current=!0,D.current?.click(),k.current=!1)}},L=h(`div`,e,{ref:[j,t,d.ref,D],state:M,props:[p,I,l,A]}),z=Q.useMemo(()=>({selected:x,index:E,textRef:u,selectedByFocus:S}),[x,E,u,S]);return(0,$.jsx)(Dn.Provider,{value:z,children:L})})),An=Q.forwardRef(function(e,t){let{selected:n}=On();return e.keepMounted||n?(0,$.jsx)(jn,{...e,ref:t}):null}),jn=Q.memo(Q.forwardRef((e,t)=>{let{render:n,className:r,style:i,keepMounted:s,...l}=e,{selected:u}=On(),d=Q.useRef(null),{transitionStatus:f,setMounted:p}=c(u),m=h(`span`,e,{ref:[t,d],state:{selected:u,transitionStatus:f},props:[{"aria-hidden":!0,children:`✔️`},l],stateAttributesMapping:o});return a({batch:!0,enabled:!u,open:u,ref:d,onComplete(){u||p(!1)}}),m})),Mn=Q.memo(Q.forwardRef(function(e,t){let{index:n,textRef:r,selectedByFocus:i}=On(),a=ht(),{render:o,className:s,style:c,...l}=e,u=Q.useCallback(e=>{e&&(n===0&&(a.context.firstItemTextRef.current=e),i&&(a.context.selectedItemTextRef.current=e))},[a,n,i]);return h(`div`,e,{ref:[u,t,r],props:l})})),Nn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,direction:s,keepMounted:l,...u}=e,d=s===`up`,f=ht(),{side:p,scrollDownArrowRef:m,scrollUpArrowRef:g}=tn(),_=d?`scrollUpArrowVisible`:`scrollDownArrowVisible`,v=f.useState(_),y=f.useState(`openMethod`),b=v&&y!==`touch`,x=V(),S=d?g:m,{mounted:C,transitionStatus:T,setMounted:E}=c(b);w(()=>(f.context.scrollArrowsMountedCountRef.current+=1,f.set(`hasScrollArrows`,!0),()=>{f.context.scrollArrowsMountedCountRef.current=Math.max(0,f.context.scrollArrowsMountedCountRef.current-1),f.context.scrollArrowsMountedCountRef.current===0&&f.set(`hasScrollArrows`,!1)}),[f]),a({open:b,ref:S,onComplete(){b||E(!1)}});let D=h(`div`,e,{ref:[t,S],state:{direction:s,visible:b,side:p,transitionStatus:T},props:[{"aria-hidden":!0,children:d?`▲`:`▼`,style:{position:`absolute`},onMouseMove(e){if(e.movementX===0&&e.movementY===0||x.isStarted())return;f.set(`activeIndex`,null);function t(){let e=f.state.listElement??f.context.popupRef.current;if(!e)return;f.set(`activeIndex`,null),f.context.handleScrollArrowVisibility(e);let n=zt(e.scrollHeight,e.clientHeight),r=Bt(e.scrollTop,n),i=r===(d?0:n),a=f.context.listRef.current;if(r!==e.scrollTop&&(e.scrollTop=r),i){x.clear();return}if(a.length>0){let t=S.current?.offsetHeight||0;e.scrollTop=Pn(a,d,r,e.clientHeight,t,n)}x.start(40,t)}x.start(40,t)},onMouseLeave(){x.clear()}},u],stateAttributesMapping:o});return C||l?D:null});function Pn(e,t,n,r,i,a){if(t){let t=0,r=n+i-1;for(let n=0;n=r){t=n;break}}let o=Math.max(0,t-1),s=e[o];return os){o=Math.max(0,t-1);break}}let c=Math.min(e.length-1,o+1),l=e[c];return c>o&&l?Bt(l.offsetTop+l.offsetHeight-r+i,a):a}var Fn=Q.forwardRef(function(e,t){return(0,$.jsx)(Nn,{...e,ref:t,direction:`down`})}),In=Q.forwardRef(function(e,t){return(0,$.jsx)(Nn,{...e,ref:t,direction:`up`})}),Ln=Q.createContext(void 0);function Rn(){let e=Q.useContext(Ln);if(e===void 0)throw Error(_(56));return e}var zn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,[o,s]=Q.useState(),c=Q.useMemo(()=>({labelId:o,setLabelId:s}),[o,s]),l=h(`div`,e,{ref:t,props:[{role:`group`,"aria-labelledby":o},a]});return(0,$.jsx)(Ln.Provider,{value:c,children:l})}),Bn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,{setLabelId:s}=Rn(),c=B(a);return w(()=>(s(c),()=>{s(e=>e===c?void 0:e)}),[c,s]),h(`div`,e,{ref:t,props:[{id:c,"aria-hidden":!0},o]})}),Vn=Q.forwardRef(function(e,t){let{className:n,render:r,orientation:i=`horizontal`,style:a,...o}=e;return h(`div`,e,{state:{orientation:i},ref:t,props:[{role:`presentation`},o]})}),Hn=r(),Un=Vt;function Wn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`scroll-my-1 p-1`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(zn,{className:i,"data-slot":`select-group`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Gn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`flex flex-1 text-left`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Zt,{className:i,"data-slot":`select-value`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Kn(e){let t=(0,Hn.c)(15),n,r,i,a,o;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5]):({className:r,size:o,id:i,children:n,...a}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o);let s=o===void 0?`default`:o,c;t[6]===r?c=t[7]:(c=v(`flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,r),t[6]=r,t[7]=c);let l;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,$.jsx)(Qt,{render:(0,$.jsx)(x,{className:`pointer-events-none size-3.5 text-muted-foreground`})}),t[8]=l):l=t[8];let u;return t[9]!==n||t[10]!==i||t[11]!==a||t[12]!==s||t[13]!==c?(u=(0,$.jsxs)(Yt,{className:c,"data-size":s,"data-slot":`select-trigger`,id:i,...a,children:[n,l]}),t[9]=n,t[10]=i,t[11]=a,t[12]=s,t[13]=c,t[14]=u):u=t[14],u}function qn(e){let t=(0,Hn.c)(26),n,r,i,a,o,s,c,l;t[0]===e?(n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8]):({className:r,children:n,side:a,sideOffset:o,align:s,alignOffset:c,alignItemWithTrigger:l,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=c,t[8]=l);let u=a===void 0?`bottom`:a,d=o===void 0?4:o,f=s===void 0?`center`:s,p=c===void 0?0:c,m=l===void 0||l,h;t[9]===r?h=t[10]:(h=v(`data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-open:animate-in relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100`,r),t[9]=r,t[10]=h);let g;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,$.jsx)(Zn,{}),t[11]=g):g=t[11];let _;t[12]===n?_=t[13]:(_=(0,$.jsx)(En,{children:n}),t[12]=n,t[13]=_);let y;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,$.jsx)(Qn,{}),t[14]=y):y=t[14];let b;t[15]!==i||t[16]!==h||t[17]!==_?(b=(0,$.jsxs)(vn,{className:h,"data-slot":`select-content`,...i,children:[g,_,y]}),t[15]=i,t[16]=h,t[17]=_,t[18]=b):b=t[18];let x;return t[19]!==f||t[20]!==m||t[21]!==p||t[22]!==u||t[23]!==d||t[24]!==b?(x=(0,$.jsx)($t,{children:(0,$.jsx)(cn,{align:f,alignItemWithTrigger:m,alignOffset:p,className:`isolate z-50`,side:u,sideOffset:d,children:b})}),t[19]=f,t[20]=m,t[21]=p,t[22]=u,t[23]=d,t[24]=b,t[25]=x):x=t[25],x}function Jn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`px-2 py-1.5 text-xs text-muted-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Bn,{className:i,"data-slot":`select-label`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Yn(e){let t=(0,Hn.c)(13),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:r,children:n,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let a;t[4]===r?a=t[5]:(a=v(`relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,r),t[4]=r,t[5]=a);let o;t[6]===n?o=t[7]:(o=(0,$.jsx)(Mn,{className:`flex flex-1 shrink-0 gap-2 whitespace-nowrap`,children:n}),t[6]=n,t[7]=o);let s;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,$.jsx)(An,{render:(0,$.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`}),children:(0,$.jsx)(b,{className:`pointer-events-none`})}),t[8]=s):s=t[8];let c;return t[9]!==i||t[10]!==a||t[11]!==o?(c=(0,$.jsxs)(kn,{className:a,"data-slot":`select-item`,...i,children:[o,s]}),t[9]=i,t[10]=a,t[11]=o,t[12]=c):c=t[12],c}function Xn(e){let t=(0,Hn.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`pointer-events-none -mx-1 my-1 h-px bg-border/50`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,$.jsx)(Vn,{className:i,"data-slot":`select-separator`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function Zn(e){let t=(0,Hn.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5`,n),t[3]=n,t[4]=i);let a;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(Ye,{}),t[5]=a):a=t[5];let o;return t[6]!==r||t[7]!==i?(o=(0,$.jsx)(In,{className:i,"data-slot":`select-scroll-up-button`,...r,children:a}),t[6]=r,t[7]=i,t[8]=o):o=t[8],o}function Qn(e){let t=(0,Hn.c)(9),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=v(`bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5`,n),t[3]=n,t[4]=i);let a;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(x,{}),t[5]=a):a=t[5];let o;return t[6]!==r||t[7]!==i?(o=(0,$.jsx)(Fn,{className:i,"data-slot":`select-scroll-down-button`,...r,children:a}),t[6]=r,t[7]=i,t[8]=o):o=t[8],o}export{Jn as a,Gn as c,Yn as i,qn as n,Xn as o,Wn as r,Kn as s,Un as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator-B3CHPrlt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator--2CKf90h.js similarity index 86% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator-B3CHPrlt.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator--2CKf90h.js index c0f30c54e..cbbe5e8b2 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator-B3CHPrlt.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/separator--2CKf90h.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{n as i}from"./dist-BKgR2qk6.js";import{tn as a}from"./cluster-config-xw_Q7X1e.js";var o=t(n(),1).forwardRef(function(e,t){let{className:n,render:r,orientation:a=`horizontal`,style:o,...s}=e;return i(`div`,e,{state:{orientation:a},ref:t,props:[{role:`separator`,"aria-orientation":a},s]})}),s=r(),c=e();function l(e){let t=(0,s.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,orientation:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let l=i===void 0?`horizontal`:i,u;t[4]===n?u=t[5]:(u=a(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch`,n),t[4]=n,t[5]=u);let d;return t[6]!==l||t[7]!==r||t[8]!==u?(d=(0,c.jsx)(o,{className:u,"data-slot":`separator`,orientation:l,...r}),t[6]=l,t[7]=r,t[8]=u,t[9]=d):d=t[9],d}export{l as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{n as i}from"./dist-DeC3TnAR.js";import{nn as a}from"./cluster-config-DkOiY8HH.js";var o=t(n(),1).forwardRef(function(e,t){let{className:n,render:r,orientation:a=`horizontal`,style:o,...s}=e;return i(`div`,e,{state:{orientation:a},ref:t,props:[{role:`separator`,"aria-orientation":a},s]})}),s=r(),c=e();function l(e){let t=(0,s.c)(10),n,r,i;t[0]===e?(n=t[1],r=t[2],i=t[3]):({className:n,orientation:i,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i);let l=i===void 0?`horizontal`:i,u;t[4]===n?u=t[5]:(u=a(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch`,n),t[4]=n,t[5]=u);let d;return t[6]!==l||t[7]!==r||t[8]!==u?(d=(0,c.jsx)(o,{className:u,"data-slot":`separator`,orientation:l,...r}),t[6]=l,t[7]=r,t[8]=u,t[9]=d):d=t[9],d}export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-C6gBIZci.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-BTAb6rAK.js similarity index 97% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-C6gBIZci.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-BTAb6rAK.js index b2b967005..285d647ac 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-C6gBIZci.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/service-metrics-BTAb6rAK.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{n as r}from"./redirect-B4OxYbs2.js";import{n as i}from"./admin-context-CXmiyIcc.js";import{t as a}from"./page-heading-vksh_67w.js";import{t as o}from"./badge-B_ExXcw2.js";import{o as s,r as c,s as l,t as u}from"./card-BXl0Qff8.js";import{a as d}from"./admin-BUkrFIlI.js";var f=t(),p=e();function m(){let e=(0,f.c)(43),{isAdmin:t}=i(),m;e[0]===t?m=e[1]:(m={...d,enabled:t,refetchInterval:5e3},e[0]=t,e[1]=m);let{data:v}=n(m);if(!t)throw r({to:`/`});let b=v?.encoding,x;e[2]===v?.meta_nodes?x=e[3]:(x=v?.meta_nodes??[],e[2]=v?.meta_nodes,e[3]=x);let S=x,C;e[4]===v?.blob_nodes?C=e[5]:(C=v?.blob_nodes??[],e[4]=v?.blob_nodes,e[5]=C);let w=C,T;e[6]===S?T=e[7]:(T=h(S),e[6]=S,e[7]=T);let E=T,D;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,p.jsx)(a,{title:`Service Metrics`}),e[8]=D):D=e[8];let O;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Predastore (S3) Overview`})}),e[9]=O):O=e[9];let k;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Encoding`}),e[10]=k):k=e[10];let A;e[11]===b?A=e[12]:(A=(0,p.jsxs)(`div`,{children:[k,(0,p.jsx)(`div`,{className:`mt-1`,children:b?(0,p.jsxs)(o,{variant:`outline`,children:[b.type,` RS(`,b.data_shards,`,`,b.parity_shards,`)`]}):(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})})]}),e[11]=b,e[12]=A);let j;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Meta Nodes`}),e[13]=j):j=e[13];let M;e[14]===S.length?M=e[15]:(M=(0,p.jsxs)(`div`,{children:[j,(0,p.jsx)(`div`,{className:`mt-1 font-mono font-medium`,children:S.length})]}),e[14]=S.length,e[15]=M);let N;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Blob Nodes`}),e[16]=N):N=e[16];let P;e[17]===w.length?P=e[18]:(P=(0,p.jsxs)(`div`,{children:[N,(0,p.jsx)(`div`,{className:`mt-1 font-mono font-medium`,children:w.length})]}),e[17]=w.length,e[18]=P);let F;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Cluster Health`}),e[19]=F):F=e[19];let I;e[20]!==S.length||e[21]!==E?(I=(0,p.jsxs)(`div`,{children:[F,(0,p.jsx)(`div`,{className:`mt-1`,children:(0,p.jsx)(g,{nodeCount:S.length,quorumHealthy:E})})]}),e[20]=S.length,e[21]=E,e[22]=I):I=e[22];let L;e[23]!==P||e[24]!==I||e[25]!==A||e[26]!==M?(L=(0,p.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 text-xs md:grid-cols-4`,children:[A,M,P,I]}),e[23]=P,e[24]=I,e[25]=A,e[26]=M,e[27]=L):L=e[27];let R;e[28]===b?R=e[29]:(R=b&&(0,p.jsxs)(`p`,{className:`mt-3 text-[0.625rem] text-muted-foreground`,children:[`Reed-Solomon erasure coding: `,b.data_shards,` data shards + `,b.parity_shards,` parity`,` `,b.parity_shards===1?`shard`:`shards`,`. Can tolerate `,b.parity_shards,` shard`,` `,b.parity_shards===1?`failure`:`failures`,` without data loss.`]}),e[28]=b,e[29]=R);let z;e[30]!==L||e[31]!==R?(z=(0,p.jsxs)(u,{children:[O,(0,p.jsxs)(c,{children:[L,R]})]}),e[30]=L,e[31]=R,e[32]=z):z=e[32];let B;e[33]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Meta Consensus Nodes (Raft)`})}),e[33]=B):B=e[33];let V;e[34]===S?V=e[35]:(V=(0,p.jsxs)(u,{children:[B,(0,p.jsx)(c,{children:S.length===0?(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,p.jsx)(_,{nodes:S})})]}),e[34]=S,e[35]=V);let H;e[36]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Object Storage Blob Nodes`})}),e[36]=H):H=e[36];let U;e[37]===w?U=e[38]:(U=(0,p.jsxs)(u,{children:[H,(0,p.jsx)(c,{children:w.length===0?(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,p.jsx)(y,{nodes:w})})]}),e[37]=w,e[38]=U);let W;return e[39]!==z||e[40]!==V||e[41]!==U?(W=(0,p.jsxs)(p.Fragment,{children:[D,(0,p.jsxs)(`div`,{className:`space-y-6`,children:[z,V,U]})]}),e[39]=z,e[40]=V,e[41]=U,e[42]=W):W=e[42],W}function h(e){if(e.length===0)return!1;let t=e[0]?.leader;return t?e.every(e=>e.healthy&&e.leader===t):!1}function g(e){let t=(0,f.c)(3),{nodeCount:n,quorumHealthy:r}=e;if(n===0){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,p.jsx)(o,{variant:`secondary`,children:`Unknown`}),t[0]=e):e=t[0],e}if(r){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,p.jsx)(o,{variant:`default`,children:`Healthy`}),t[1]=e):e=t[1],e}let i;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,p.jsx)(o,{variant:`destructive`,children:`Degraded`}),t[2]=i):i=t[2],i}function _(e){let t=(0,f.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Host`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Port`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Health`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`State`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Leader`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Term`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Commit Index`}),(0,p.jsx)(`th`,{className:`pb-1 font-medium`,children:`Applied Index`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(v),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,p.jsx)(`div`,{className:`overflow-x-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,p.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function v(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.id}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.port}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,p.jsx)(o,{variant:e.healthy?`default`:`destructive`,className:`text-[0.625rem]`,children:e.healthy?`Healthy`:`Unreachable`})}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.state?(0,p.jsx)(o,{variant:e.state===`Leader`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.state}):(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.leader??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.term??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.commit_index??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 font-mono`,children:e.applied_index??`-`})]},e.id)}function y(e){let t=(0,f.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Host`}),(0,p.jsx)(`th`,{className:`pb-1 font-medium`,children:`Port`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(b),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,p.jsx)(`div`,{className:`overflow-x-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,p.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function b(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.id}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,p.jsx)(`td`,{className:`py-1.5 font-mono`,children:e.port})]},e.id)}var x=m;export{x as component}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./useQuery-2EKf7AyV.js";import{n as r}from"./redirect-B4OxYbs2.js";import{n as i}from"./admin-context-C7nTf-ee.js";import{t as a}from"./page-heading-vksh_67w.js";import{t as o}from"./badge-6vbuGFqk.js";import{o as s,r as c,s as l,t as u}from"./card-xPs7xSYh.js";import{a as d}from"./admin-JuLSsFKq.js";var f=t(),p=e();function m(){let e=(0,f.c)(43),{isAdmin:t}=i(),m;e[0]===t?m=e[1]:(m={...d,enabled:t,refetchInterval:5e3},e[0]=t,e[1]=m);let{data:v}=n(m);if(!t)throw r({to:`/`});let b=v?.encoding,x;e[2]===v?.meta_nodes?x=e[3]:(x=v?.meta_nodes??[],e[2]=v?.meta_nodes,e[3]=x);let S=x,C;e[4]===v?.blob_nodes?C=e[5]:(C=v?.blob_nodes??[],e[4]=v?.blob_nodes,e[5]=C);let w=C,T;e[6]===S?T=e[7]:(T=h(S),e[6]=S,e[7]=T);let E=T,D;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,p.jsx)(a,{title:`Service Metrics`}),e[8]=D):D=e[8];let O;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Predastore (S3) Overview`})}),e[9]=O):O=e[9];let k;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Encoding`}),e[10]=k):k=e[10];let A;e[11]===b?A=e[12]:(A=(0,p.jsxs)(`div`,{children:[k,(0,p.jsx)(`div`,{className:`mt-1`,children:b?(0,p.jsxs)(o,{variant:`outline`,children:[b.type,` RS(`,b.data_shards,`,`,b.parity_shards,`)`]}):(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})})]}),e[11]=b,e[12]=A);let j;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Meta Nodes`}),e[13]=j):j=e[13];let M;e[14]===S.length?M=e[15]:(M=(0,p.jsxs)(`div`,{children:[j,(0,p.jsx)(`div`,{className:`mt-1 font-mono font-medium`,children:S.length})]}),e[14]=S.length,e[15]=M);let N;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Blob Nodes`}),e[16]=N):N=e[16];let P;e[17]===w.length?P=e[18]:(P=(0,p.jsxs)(`div`,{children:[N,(0,p.jsx)(`div`,{className:`mt-1 font-mono font-medium`,children:w.length})]}),e[17]=w.length,e[18]=P);let F;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`Cluster Health`}),e[19]=F):F=e[19];let I;e[20]!==S.length||e[21]!==E?(I=(0,p.jsxs)(`div`,{children:[F,(0,p.jsx)(`div`,{className:`mt-1`,children:(0,p.jsx)(g,{nodeCount:S.length,quorumHealthy:E})})]}),e[20]=S.length,e[21]=E,e[22]=I):I=e[22];let L;e[23]!==P||e[24]!==I||e[25]!==A||e[26]!==M?(L=(0,p.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 text-xs md:grid-cols-4`,children:[A,M,P,I]}),e[23]=P,e[24]=I,e[25]=A,e[26]=M,e[27]=L):L=e[27];let R;e[28]===b?R=e[29]:(R=b&&(0,p.jsxs)(`p`,{className:`mt-3 text-[0.625rem] text-muted-foreground`,children:[`Reed-Solomon erasure coding: `,b.data_shards,` data shards + `,b.parity_shards,` parity`,` `,b.parity_shards===1?`shard`:`shards`,`. Can tolerate `,b.parity_shards,` shard`,` `,b.parity_shards===1?`failure`:`failures`,` without data loss.`]}),e[28]=b,e[29]=R);let z;e[30]!==L||e[31]!==R?(z=(0,p.jsxs)(u,{children:[O,(0,p.jsxs)(c,{children:[L,R]})]}),e[30]=L,e[31]=R,e[32]=z):z=e[32];let B;e[33]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Meta Consensus Nodes (Raft)`})}),e[33]=B):B=e[33];let V;e[34]===S?V=e[35]:(V=(0,p.jsxs)(u,{children:[B,(0,p.jsx)(c,{children:S.length===0?(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,p.jsx)(_,{nodes:S})})]}),e[34]=S,e[35]=V);let H;e[36]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,p.jsx)(s,{children:(0,p.jsx)(l,{className:`text-sm`,children:`Object Storage Blob Nodes`})}),e[36]=H):H=e[36];let U;e[37]===w?U=e[38]:(U=(0,p.jsxs)(u,{children:[H,(0,p.jsx)(c,{children:w.length===0?(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No data`}):(0,p.jsx)(y,{nodes:w})})]}),e[37]=w,e[38]=U);let W;return e[39]!==z||e[40]!==V||e[41]!==U?(W=(0,p.jsxs)(p.Fragment,{children:[D,(0,p.jsxs)(`div`,{className:`space-y-6`,children:[z,V,U]})]}),e[39]=z,e[40]=V,e[41]=U,e[42]=W):W=e[42],W}function h(e){if(e.length===0)return!1;let t=e[0]?.leader;return t?e.every(e=>e.healthy&&e.leader===t):!1}function g(e){let t=(0,f.c)(3),{nodeCount:n,quorumHealthy:r}=e;if(n===0){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,p.jsx)(o,{variant:`secondary`,children:`Unknown`}),t[0]=e):e=t[0],e}if(r){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,p.jsx)(o,{variant:`default`,children:`Healthy`}),t[1]=e):e=t[1],e}let i;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,p.jsx)(o,{variant:`destructive`,children:`Degraded`}),t[2]=i):i=t[2],i}function _(e){let t=(0,f.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Host`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Port`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Health`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`State`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Leader`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Term`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Commit Index`}),(0,p.jsx)(`th`,{className:`pb-1 font-medium`,children:`Applied Index`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(v),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,p.jsx)(`div`,{className:`overflow-x-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,p.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function v(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.id}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.port}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4`,children:(0,p.jsx)(o,{variant:e.healthy?`default`:`destructive`,className:`text-[0.625rem]`,children:e.healthy?`Healthy`:`Unreachable`})}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4`,children:e.state?(0,p.jsx)(o,{variant:e.state===`Leader`?`default`:`secondary`,className:`text-[0.625rem]`,children:e.state}):(0,p.jsx)(`span`,{className:`text-muted-foreground`,children:`-`})}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.leader??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.term??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.commit_index??`-`}),(0,p.jsx)(`td`,{className:`py-1.5 font-mono`,children:e.applied_index??`-`})]},e.id)}function y(e){let t=(0,f.c)(5),{nodes:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,p.jsx)(`thead`,{children:(0,p.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Node`}),(0,p.jsx)(`th`,{className:`pr-4 pb-1 font-medium`,children:`Host`}),(0,p.jsx)(`th`,{className:`pb-1 font-medium`,children:`Port`})]})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i=n.map(b),t[1]=n,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,p.jsx)(`div`,{className:`overflow-x-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs`,children:[r,(0,p.jsx)(`tbody`,{children:i})]})}),t[3]=i,t[4]=a),a}function b(e){return(0,p.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono font-medium`,children:e.id}),(0,p.jsx)(`td`,{className:`py-1.5 pr-4 font-mono`,children:e.host}),(0,p.jsx)(`td`,{className:`py-1.5 font-mono`,children:e.port})]},e.id)}var x=m;export{x as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-B-FFW93q.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-B-FFW93q.js deleted file mode 100644 index 505ffc6f5..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-B-FFW93q.js +++ /dev/null @@ -1 +0,0 @@ -import{O as e,Qt as t,g as n,m as r,t as i}from"./cluster-config-xw_Q7X1e.js";var a=typeof Buffer<`u`&&Buffer.from?function(e){return Buffer.from(e,`utf8`)}:e=>new TextEncoder().encode(e);function o(e){return e instanceof Uint8Array?e:typeof e==`string`?a(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(e)}function s(e){return typeof e==`string`?e.length===0:e.byteLength===0}var c={name:`SHA-256`},l={name:`HMAC`,hash:c},u=new Uint8Array([227,176,196,66,152,252,28,20,154,251,244,200,153,111,185,36,39,174,65,228,100,155,147,76,164,149,153,27,120,82,184,85]),d={};function f(){return typeof window<`u`?window:typeof self<`u`?self:d}var p=function(){function e(e){this.toHash=new Uint8Array,this.secret=e,this.reset()}return e.prototype.update=function(e){if(!s(e)){var t=o(e),n=new Uint8Array(this.toHash.byteLength+t.byteLength);n.set(this.toHash,0),n.set(t,this.toHash.byteLength),this.toHash=n}},e.prototype.digest=function(){var e=this;return this.key?this.key.then(function(t){return f().crypto.subtle.sign(l,t,e.toHash).then(function(e){return new Uint8Array(e)})}):s(this.toHash)?Promise.resolve(u):Promise.resolve().then(function(){return f().crypto.subtle.digest(c,e.toHash)}).then(function(e){return Promise.resolve(new Uint8Array(e))})},e.prototype.reset=function(){var e=this;this.toHash=new Uint8Array,this.secret&&this.secret!==void 0&&(this.key=new Promise(function(t,n){f().crypto.subtle.importKey(`raw`,o(e.secret),l,!1,[`sign`]).then(t,n)}),this.key.catch(function(){}))},e}();function m(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function h(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},r,i,a,o=Object.create((typeof Iterator==`function`?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),typeof Symbol==`function`&&(o[Symbol.iterator]=function(){return this}),o;function s(e){return function(t){return c([e,t])}}function c(s){if(r)throw TypeError(`Generator is already executing.`);for(;o&&(o=0,s[0]&&(n=0)),n;)try{if(r=1,i&&(a=s[0]&2?i.return:s[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,s[1])).done)return a;switch(i=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return n.label++,{value:s[1],done:!1};case 5:n.label++,i=s[1],s=[0];continue;case 7:s=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]v)throw Error(`Cannot hash more than 2^53 - 1 bits`);for(;n>0;)this.buffer[this.bufferLength++]=e[t++],n--,this.bufferLength===64&&(this.hashBuffer(),this.bufferLength=0)},e.prototype.digest=function(){if(!this.finished){var e=this.bytesHashed*8,t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=this.bufferLength;if(t.setUint8(this.bufferLength++,128),n%64>=56){for(var r=this.bufferLength;r<64;r++)t.setUint8(r,0);this.hashBuffer(),this.bufferLength=0}for(var r=this.bufferLength;r<56;r++)t.setUint8(r,0);t.setUint32(56,Math.floor(e/4294967296),!0),t.setUint32(60,e),this.hashBuffer(),this.finished=!0}for(var i=new Uint8Array(32),r=0;r<8;r++)i[r*4]=this.state[r]>>>24&255,i[r*4+1]=this.state[r]>>>16&255,i[r*4+2]=this.state[r]>>>8&255,i[r*4+3]=this.state[r]>>>0&255;return i},e.prototype.hashBuffer=function(){for(var e=this,t=e.buffer,n=e.state,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7],d=0;d<64;d++){if(d<16)this.temp[d]=(t[d*4]&255)<<24|(t[d*4+1]&255)<<16|(t[d*4+2]&255)<<8|t[d*4+3]&255;else{var f=this.temp[d-2],p=(f>>>17|f<<15)^(f>>>19|f<<13)^f>>>10;f=this.temp[d-15];var m=(f>>>7|f<<25)^(f>>>18|f<<14)^f>>>3;this.temp[d]=(p+this.temp[d-7]|0)+(m+this.temp[d-16]|0)}var h=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&c^~s&l)|0)+(u+(g[d]+this.temp[d]|0)|0)|0,_=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&i^r&a^i&a)|0;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+_|0}n[0]+=r,n[1]+=i,n[2]+=a,n[3]+=o,n[4]+=s,n[5]+=c,n[6]+=l,n[7]+=u},e}(),b=function(){function e(e){this.secret=e,this.hash=new y,this.reset()}return e.prototype.update=function(e){if(!(s(e)||this.error))try{this.hash.update(o(e))}catch(e){this.error=e}},e.prototype.digestSync=function(){if(this.error)throw this.error;return this.outer?(this.outer.finished||this.outer.update(this.hash.digest()),this.outer.digest()):this.hash.digest()},e.prototype.digest=function(){return m(this,void 0,void 0,function(){return h(this,function(e){return[2,this.digestSync()]})})},e.prototype.reset=function(){if(this.hash=new y,this.secret){this.outer=new y;var e=x(this.secret),t=new Uint8Array(64);t.set(e);for(var n=0;n<64;n++)e[n]^=54,t[n]^=92;this.hash.update(e),this.outer.update(t);for(var n=0;n64){var n=new y;n.update(t),t=n.digest()}var r=new Uint8Array(64);return r.set(t),r}var S=[`decrypt`,`digest`,`encrypt`,`exportKey`,`generateKey`,`importKey`,`sign`,`verify`];function C(e){if(w(e)&&typeof e.crypto.subtle==`object`){var t=e.crypto.subtle;return T(t)}return!1}function w(e){return typeof e==`object`&&typeof e.crypto==`object`&&typeof e.crypto.getRandomValues==`function`}function T(e){return e&&S.every(function(t){return typeof e[t]==`function`})}var E=function(){function e(e){this.hash=C(f())?new p(e):new b(e)}return e.prototype.update=function(e,t){this.hash.update(o(e))},e.prototype.digest=function(){return this.hash.digest()},e.prototype.reset=function(){this.hash.reset()},e}(),D=9999,O=`application/x-www-form-urlencoded`,k=`application/x-amz-json-1.1`,A=class extends Error{status;constructor(e,t,n){super(e),this.name=t,this.status=n}};function j(e,t){let n=`<${t}>`,r=``,i=e.indexOf(n);if(i===-1)return null;let a=e.indexOf(r,i+n.length);return a===-1?null:e.slice(i+n.length,a)}var M=r({message:n().optional(),Message:n().optional()});function N(e){try{let t=M.safeParse(JSON.parse(e));if(t.success)return t.data.message??t.data.Message??null}catch{}return null}function P(e,t,n){let r=j(n,`Code`),i=j(n,`Message`)??N(n)??n;return new A(`${e} failed: ${t}${i?` - ${i}`:``}`,r??`SignedFetchError`,t)}async function F({label:n,credentials:r,service:a,contentType:o,body:s,target:c}){let l=window.location.protocol.replace(`:`,``),u={host:`localhost:${D}`,"content-type":o},d=c?{...u,"x-amz-target":c}:u,f=new t({method:`POST`,protocol:l,hostname:`localhost`,port:D,path:`/`,headers:d,body:s}),p={...(await new e({credentials:{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,sessionToken:r.sessionToken},region:i(),service:a,sha256:E}).sign(f)).headers},m=`${window.location.protocol}//${window.location.host}/proxy/awsgw/`,h=await fetch(m,{method:`POST`,headers:p,body:s});if(!h.ok){let e=await h.text().catch(()=>``);throw P(n,h.status,e)}return await h.json()}async function I({action:e,credentials:t,service:n=`spinifex`,params:r}){return await F({label:e,credentials:t,service:n,contentType:O,body:`Action=${e}${r?`&${new URLSearchParams(r).toString()}`:``}`})}var L=`application/json`,R=r({error:r({code:n().optional(),message:n().optional()}).optional(),requestId:n().optional()});function z(e,t,n){let r,i;try{let e=R.safeParse(JSON.parse(n));e.success&&(r=e.data.error?.code,i=e.data.error?.message)}catch{}return new A(`${e} failed: ${t}${i?` - ${i}`:``}`,r??`SignedFetchError`,t)}async function B({method:n,credentials:r,body:a}){let o=window.location.protocol.replace(`:`,``),s=`/admin/${n}`,c=JSON.stringify(a??{}),l=new t({method:`POST`,protocol:o,hostname:`localhost`,port:D,path:s,headers:{host:`localhost:${D}`,"content-type":L},body:c}),u={...(await new e({credentials:{accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,sessionToken:r.sessionToken},region:i(),service:`spinifex`,sha256:E}).sign(l)).headers},d=`${window.location.protocol}//${window.location.host}/proxy/awsgw${s}`,f=await fetch(d,{method:`POST`,headers:u,body:c});if(!f.ok){let e=await f.text().catch(()=>``);throw z(n,f.status,e)}return await f.json()}export{F as i,B as n,I as r,k as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-C_pG4AOx.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-C_pG4AOx.js new file mode 100644 index 000000000..c96a22c7b --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/signed-fetch-C_pG4AOx.js @@ -0,0 +1 @@ +import{_ as e,h as t,i as n,k as r,t as i}from"./cluster-config-DkOiY8HH.js";var a=typeof Buffer<`u`&&Buffer.from?function(e){return Buffer.from(e,`utf8`)}:e=>new TextEncoder().encode(e);function o(e){return e instanceof Uint8Array?e:typeof e==`string`?a(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(e)}function s(e){return typeof e==`string`?e.length===0:e.byteLength===0}var c={name:`SHA-256`},l={name:`HMAC`,hash:c},u=new Uint8Array([227,176,196,66,152,252,28,20,154,251,244,200,153,111,185,36,39,174,65,228,100,155,147,76,164,149,153,27,120,82,184,85]),d={};function f(){return typeof window<`u`?window:typeof self<`u`?self:d}var p=function(){function e(e){this.toHash=new Uint8Array,this.secret=e,this.reset()}return e.prototype.update=function(e){if(!s(e)){var t=o(e),n=new Uint8Array(this.toHash.byteLength+t.byteLength);n.set(this.toHash,0),n.set(t,this.toHash.byteLength),this.toHash=n}},e.prototype.digest=function(){var e=this;return this.key?this.key.then(function(t){return f().crypto.subtle.sign(l,t,e.toHash).then(function(e){return new Uint8Array(e)})}):s(this.toHash)?Promise.resolve(u):Promise.resolve().then(function(){return f().crypto.subtle.digest(c,e.toHash)}).then(function(e){return Promise.resolve(new Uint8Array(e))})},e.prototype.reset=function(){var e=this;this.toHash=new Uint8Array,this.secret&&this.secret!==void 0&&(this.key=new Promise(function(t,n){f().crypto.subtle.importKey(`raw`,o(e.secret),l,!1,[`sign`]).then(t,n)}),this.key.catch(function(){}))},e}();function m(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function h(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},r,i,a,o=Object.create((typeof Iterator==`function`?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),typeof Symbol==`function`&&(o[Symbol.iterator]=function(){return this}),o;function s(e){return function(t){return c([e,t])}}function c(s){if(r)throw TypeError(`Generator is already executing.`);for(;o&&(o=0,s[0]&&(n=0)),n;)try{if(r=1,i&&(a=s[0]&2?i.return:s[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,s[1])).done)return a;switch(i=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return n.label++,{value:s[1],done:!1};case 5:n.label++,i=s[1],s=[0];continue;case 7:s=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]v)throw Error(`Cannot hash more than 2^53 - 1 bits`);for(;n>0;)this.buffer[this.bufferLength++]=e[t++],n--,this.bufferLength===64&&(this.hashBuffer(),this.bufferLength=0)},e.prototype.digest=function(){if(!this.finished){var e=this.bytesHashed*8,t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=this.bufferLength;if(t.setUint8(this.bufferLength++,128),n%64>=56){for(var r=this.bufferLength;r<64;r++)t.setUint8(r,0);this.hashBuffer(),this.bufferLength=0}for(var r=this.bufferLength;r<56;r++)t.setUint8(r,0);t.setUint32(56,Math.floor(e/4294967296),!0),t.setUint32(60,e),this.hashBuffer(),this.finished=!0}for(var i=new Uint8Array(32),r=0;r<8;r++)i[r*4]=this.state[r]>>>24&255,i[r*4+1]=this.state[r]>>>16&255,i[r*4+2]=this.state[r]>>>8&255,i[r*4+3]=this.state[r]>>>0&255;return i},e.prototype.hashBuffer=function(){for(var e=this,t=e.buffer,n=e.state,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7],d=0;d<64;d++){if(d<16)this.temp[d]=(t[d*4]&255)<<24|(t[d*4+1]&255)<<16|(t[d*4+2]&255)<<8|t[d*4+3]&255;else{var f=this.temp[d-2],p=(f>>>17|f<<15)^(f>>>19|f<<13)^f>>>10;f=this.temp[d-15];var m=(f>>>7|f<<25)^(f>>>18|f<<14)^f>>>3;this.temp[d]=(p+this.temp[d-7]|0)+(m+this.temp[d-16]|0)}var h=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&c^~s&l)|0)+(u+(g[d]+this.temp[d]|0)|0)|0,_=((r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10))+(r&i^r&a^i&a)|0;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+_|0}n[0]+=r,n[1]+=i,n[2]+=a,n[3]+=o,n[4]+=s,n[5]+=c,n[6]+=l,n[7]+=u},e}(),b=function(){function e(e){this.secret=e,this.hash=new y,this.reset()}return e.prototype.update=function(e){if(!(s(e)||this.error))try{this.hash.update(o(e))}catch(e){this.error=e}},e.prototype.digestSync=function(){if(this.error)throw this.error;return this.outer?(this.outer.finished||this.outer.update(this.hash.digest()),this.outer.digest()):this.hash.digest()},e.prototype.digest=function(){return m(this,void 0,void 0,function(){return h(this,function(e){return[2,this.digestSync()]})})},e.prototype.reset=function(){if(this.hash=new y,this.secret){this.outer=new y;var e=x(this.secret),t=new Uint8Array(64);t.set(e);for(var n=0;n<64;n++)e[n]^=54,t[n]^=92;this.hash.update(e),this.outer.update(t);for(var n=0;n64){var n=new y;n.update(t),t=n.digest()}var r=new Uint8Array(64);return r.set(t),r}var S=[`decrypt`,`digest`,`encrypt`,`exportKey`,`generateKey`,`importKey`,`sign`,`verify`];function C(e){if(w(e)&&typeof e.crypto.subtle==`object`){var t=e.crypto.subtle;return T(t)}return!1}function w(e){return typeof e==`object`&&typeof e.crypto==`object`&&typeof e.crypto.getRandomValues==`function`}function T(e){return e&&S.every(function(t){return typeof e[t]==`function`})}var E=function(){function e(e){this.hash=C(f())?new p(e):new b(e)}return e.prototype.update=function(e,t){this.hash.update(o(e))},e.prototype.digest=function(){return this.hash.digest()},e.prototype.reset=function(){this.hash.reset()},e}(),D=9999,O=`application/x-www-form-urlencoded`,k=`application/x-amz-json-1.1`,A=class extends Error{status;constructor(e,t,n){super(e),this.name=t,this.status=n}};function j(e,t){let n=`<${t}>`,r=``,i=e.indexOf(n);if(i===-1)return null;let a=e.indexOf(r,i+n.length);return a===-1?null:e.slice(i+n.length,a)}var M=t({message:e().optional(),Message:e().optional()});function N(e){try{let t=M.safeParse(JSON.parse(e));if(t.success)return t.data.message??t.data.Message??null}catch{}return null}function P(e,t,n){let r=j(n,`Code`),i=j(n,`Message`)??N(n)??n;return new A(`${e} failed: ${t}${i?` - ${i}`:``}`,r??`SignedFetchError`,t)}async function F({label:e,credentials:t,service:a,contentType:o,body:s,target:c}){let l=window.location.protocol.replace(`:`,``),u={host:`localhost:${D}`,"content-type":o},d=c?{...u,"x-amz-target":c}:u,f=new n({method:`POST`,protocol:l,hostname:`localhost`,port:D,path:`/`,headers:d,body:s}),p={...(await new r({credentials:{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,sessionToken:t.sessionToken},region:i(),service:a,sha256:E}).sign(f)).headers},m=`${window.location.protocol}//${window.location.host}/proxy/awsgw/`,h=await fetch(m,{method:`POST`,headers:p,body:s});if(!h.ok){let t=await h.text().catch(()=>``);throw P(e,h.status,t)}return await h.json()}async function I({action:e,credentials:t,service:n=`spinifex`,params:r}){return await F({label:e,credentials:t,service:n,contentType:O,body:`Action=${e}${r?`&${new URLSearchParams(r).toString()}`:``}`})}var L=`application/json`,R=t({error:t({code:e().optional(),message:e().optional()}).optional(),requestId:e().optional()});function z(e,t,n){let r,i;try{let e=R.safeParse(JSON.parse(n));e.success&&(r=e.data.error?.code,i=e.data.error?.message)}catch{}return new A(`${e} failed: ${t}${i?` - ${i}`:``}`,r??`SignedFetchError`,t)}async function B({method:e,credentials:t,body:a}){let o=window.location.protocol.replace(`:`,``),s=`/admin/${e}`,c=JSON.stringify(a??{}),l=new n({method:`POST`,protocol:o,hostname:`localhost`,port:D,path:s,headers:{host:`localhost:${D}`,"content-type":L},body:c}),u={...(await new r({credentials:{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,sessionToken:t.sessionToken},region:i(),service:`spinifex`,sha256:E}).sign(l)).headers},d=`${window.location.protocol}//${window.location.host}/proxy/awsgw${s}`,f=await fetch(d,{method:`POST`,headers:u,body:c});if(!f.ok){let t=await f.text().catch(()=>``);throw z(e,f.status,t)}return await f.json()}export{F as i,B as n,I as r,k as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-D1Z6q_OA.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-pn00UE1d.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-D1Z6q_OA.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-pn00UE1d.js index f7b66fc91..9799ab1db 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-D1Z6q_OA.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/state-badge-pn00UE1d.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";var r=t(),i=e(),a=new Set([`running`,`available`,`completed`,`Complete`,`Active`]),o=new Set([`stopped`,`error`,`failed`]),s=new Set([`pending`,`shutting-down`,`stopping`,`creating`,`modifying`,`backing-up`,`rebooting`,`starting`,`recovering`,`deleting`]);function c(e){return e&&a.has(e)?`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100`:e&&o.has(e)?`bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100`:e&&s.has(e)?`bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100`:e===`terminated`?`bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400`:`bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-100`}function l(e){let t=(0,r.c)(5),{state:a}=e,o;t[0]===a?o=t[1]:(o=n(`rounded-full px-2 py-1 text-xs`,c(a)),t[0]=a,t[1]=o);let s;return t[2]!==a||t[3]!==o?(s=(0,i.jsx)(`div`,{className:o,children:a}),t[2]=a,t[3]=o,t[4]=s):s=t[4],s}export{l as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";var r=t(),i=e(),a=new Set([`running`,`available`,`completed`,`Complete`,`Active`]),o=new Set([`stopped`,`error`,`failed`]),s=new Set([`pending`,`shutting-down`,`stopping`,`creating`,`modifying`,`backing-up`,`rebooting`,`starting`,`recovering`,`deleting`]);function c(e){return e&&a.has(e)?`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100`:e&&o.has(e)?`bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100`:e&&s.has(e)?`bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100`:e===`terminated`?`bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400`:`bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-100`}function l(e){let t=(0,r.c)(5),{state:a}=e,o;t[0]===a?o=t[1]:(o=n(`rounded-full px-2 py-1 text-xs`,c(a)),t[0]=a,t[1]=o);let s;return t[2]!==a||t[3]!==o?(s=(0,i.jsx)(`div`,{className:o,children:a}),t[2]=a,t[3]=o,t[4]=s):s=t[4],s}export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-B5ZEON3v.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-e2q_c_HI.js similarity index 53% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-B5ZEON3v.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-e2q_c_HI.js index 102f5d02d..61c6f28e7 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-B5ZEON3v.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/sts-e2q_c_HI.js @@ -1 +1 @@ -import{$ as e,$t as t,A as n,Bt as r,Ct as i,D as a,E as o,Et as s,F as c,Ft as l,I as u,It as d,J as f,K as ee,Kt as te,L as ne,Lt as re,M as ie,N as ae,P as oe,Pt as se,Q as ce,Qt as le,R as ue,Rt as de,St as fe,T as pe,U as me,Vt as he,W as ge,Wt as _e,X as ve,Xt as p,Y as ye,Yt as be,_t as xe,bt as Se,et as Ce,it as we,j as Te,k as Ee,mt as De,nt as Oe,o as ke,q as Ae,qt as je,rt as Me,t as Ne,v as Pe,vt as Fe,xt as Ie,y as Le,yt as Re,z as ze,zt as m}from"./cluster-config-xw_Q7X1e.js";import{a as h,i as Be,r as Ve}from"./hex-encoding-B19xAT_7.js";var He=class{async sign(e,t,n){return e}},g=`ref`,_=-1,v=!0,y=`isSet`,b=`PartitionResult`,x=`booleanEquals`,S=`stringEquals`,C=`getAttr`,w=`us-east-1`,T=`sigv4`,E=`sts`,D=`https://sts.{Region}.{PartitionResult#dnsSuffix}`,O={[g]:`Endpoint`},k={[g]:`Region`},A={[g]:b},j={},M=[k],N={conditions:[[y,[O]],[y,M],[`aws.partition`,M,b],[x,[{[g]:`UseFIPS`},v]],[x,[{[g]:`UseDualStack`},v]],[S,[k,`aws-global`]],[x,[{[g]:`UseGlobalEndpoint`},v]],[S,[k,`eu-central-1`]],[x,[{fn:C,argv:[A,`supportsDualStack`]},v]],[x,[{fn:C,argv:[A,`supportsFIPS`]},v]],[S,[k,`ap-south-1`]],[S,[k,`eu-north-1`]],[S,[k,`eu-west-1`]],[S,[k,`eu-west-2`]],[S,[k,`eu-west-3`]],[S,[k,`sa-east-1`]],[S,[k,w]],[S,[k,`us-east-2`]],[S,[k,`us-west-2`]],[S,[k,`us-west-1`]],[S,[k,`ca-central-1`]],[S,[k,`ap-southeast-1`]],[S,[k,`ap-northeast-1`]],[S,[k,`ap-southeast-2`]],[S,[{fn:C,argv:[A,`name`]},`aws-us-gov`]]],results:[[_],[`https://sts.amazonaws.com`,{authSchemes:[{name:T,signingName:E,signingRegion:w}]}],[D,{authSchemes:[{name:T,signingName:E,signingRegion:`{Region}`}]}],[_,`Invalid Configuration: FIPS and custom endpoint are not supported`],[_,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[O,j],[`https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,j],[_,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://sts.{Region}.amazonaws.com`,j],[`https://sts-fips.{Region}.{PartitionResult#dnsSuffix}`,j],[_,`FIPS is enabled but this partition does not support FIPS`],[`https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}`,j],[_,`DualStack is enabled but this partition does not support DualStack`],[D,j],[_,`Invalid Configuration: Missing Region`]]},Ue=2,We=new Int32Array([-1,1,-1,0,30,3,1,4,100000014,2,5,100000014,3,25,6,4,24,7,5,100000001,8,6,9,100000013,7,100000001,10,10,100000001,11,11,100000001,12,12,100000001,13,13,100000001,14,14,100000001,15,15,100000001,16,16,100000001,17,17,100000001,18,18,100000001,19,19,100000001,20,20,100000001,21,21,100000001,22,22,100000001,23,23,100000001,100000002,8,100000011,100000012,4,28,26,9,27,100000010,24,100000008,100000009,8,29,100000007,9,100000006,100000007,3,100000003,31,4,100000004,100000005]),Ge=fe.from(We,Ue,N.conditions,N.results),Ke=new Ie({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`,`UseGlobalEndpoint`]}),P=(e,t={})=>Ke.get(e,()=>Re(Ge,{endpointParams:e,logger:t.logger}));Se.aws=u;var qe=(e=>async(n,r,a)=>{if(!a)throw Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");let o=await e(n,r,a),s=t(r)?.commandInstance?.constructor?.getEndpointParameterInstructions;if(!s)throw Error(`getEndpointParameterInstructions() is not defined on '${r.commandName}'`);let c=await i(a,{getEndpointParameterInstructions:s},n);return Object.assign(o,c)})(async(e,n,r)=>({operation:t(n).operation,region:await p(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));function F(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`sts`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function I(e){return{schemeId:`aws.auth#sigv4a`,signingProperties:{name:`sts`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function L(e){return{schemeId:`smithy.api#noAuth`}}var Je=((e,t,n)=>r=>{let i=e(r).properties?.authSchemes;if(!i)return t(r);let a=[];for(let e of i){let{name:t,properties:s={},...c}=e,l=t.toLowerCase();t!==l&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${t}' to '${l}'`);let u;if(l===`sigv4a`){u=`aws.auth#sigv4a`;let e=i.find(e=>{let t=e.name.toLowerCase();return t!==`sigv4a`&&t.startsWith(`sigv4`)});if(o.sigv4aDependency()===`none`&&e)continue}else if(l.startsWith(`sigv4`))u=`aws.auth#sigv4`;else throw Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${l}'`);let d=n[u];if(!d)throw Error(`Could not find HttpAuthOption create function for '${u}'`);let f=d(r);f.schemeId=u,f.signingProperties={...f.signingProperties||{},...c,...s},a.push(f)}return a})(P,e=>{let t=[];switch(e.operation){case`AssumeRoleWithSAML`:t.push(L(e)),t.push(I(e));break;case`AssumeRoleWithWebIdentity`:t.push(L(e)),t.push(I(e));break;default:t.push(F(e)),t.push(I(e))}return t},{"aws.auth#sigv4":F,"aws.auth#sigv4a":I,"smithy.api#noAuth":L}),Ye=e=>{let t=a(e),n=Ee(t);return Object.assign(n,{authSchemePreference:p(e.authSchemePreference??[])})},Xe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,useGlobalEndpoint:e.useGlobalEndpoint??!1,defaultSigningName:`sts`}),Ze={UseGlobalEndpoint:{type:`builtInParams`,name:`useGlobalEndpoint`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Qe={name:`@aws-sdk/client-sts`,version:`3.1135.0`,description:`AWS SDK for JavaScript Sts Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sts`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-sts`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.0`,"@aws-sdk/credential-provider-node":`^3.972.83`,"@aws-sdk/signature-v4-multi-region":`^3.996.46`,"@aws-sdk/types":`^3.974.5`,"@smithy/core":`^3.33.3`,"@smithy/fetch-http-handler":`^5.7.2`,"@smithy/node-http-handler":`^4.11.3`,"@smithy/types":`^4.17.2`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},R=class e extends he{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},$e=class e extends R{name=`ExpiredTokenException`;$fault=`client`;constructor(t){super({name:`ExpiredTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},et=class e extends R{name=`MalformedPolicyDocumentException`;$fault=`client`;constructor(t){super({name:`MalformedPolicyDocumentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tt=class e extends R{name=`PackedPolicyTooLargeException`;$fault=`client`;constructor(t){super({name:`PackedPolicyTooLargeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nt=class e extends R{name=`RegionDisabledException`;$fault=`client`;constructor(t){super({name:`RegionDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rt=class e extends R{name=`IDPRejectedClaimException`;$fault=`client`;constructor(t){super({name:`IDPRejectedClaimException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},it=class e extends R{name=`InvalidIdentityTokenException`;$fault=`client`;constructor(t){super({name:`InvalidIdentityTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},at=class e extends R{name=`IDPCommunicationErrorException`;$fault=`client`;$retryable={};constructor(t){super({name:`IDPCommunicationErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ot=class e extends R{name=`InvalidAuthorizationMessageException`;$fault=`client`;constructor(t){super({name:`InvalidAuthorizationMessageException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},st=class e extends R{name=`ExpiredTradeInTokenException`;$fault=`client`;constructor(t){super({name:`ExpiredTradeInTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ct=class e extends R{name=`JWTPayloadSizeExceededException`;$fault=`client`;constructor(t){super({name:`JWTPayloadSizeExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lt=class e extends R{name=`OutboundWebIdentityFederationDisabledException`;$fault=`client`;constructor(t){super({name:`OutboundWebIdentityFederationDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ut=class e extends R{name=`SessionDurationEscalationException`;$fault=`client`;constructor(t){super({name:`SessionDurationEscalationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dt=`Arn`,ft=`AccessKeyId`,pt=`Account`,z=`Credentials`,mt=`DurationSeconds`,ht=`Expiration`,gt=`ExpiredTokenException`,_t=`ExpiredTradeInTokenException`,vt=`GetCallerIdentity`,yt=`GetCallerIdentityRequest`,bt=`GetCallerIdentityResponse`,xt=`GetSessionToken`,St=`GetSessionTokenRequest`,Ct=`GetSessionTokenResponse`,wt=`InvalidAuthorizationMessageException`,Tt=`IDPCommunicationErrorException`,Et=`IDPRejectedClaimException`,Dt=`InvalidIdentityTokenException`,Ot=`JWTPayloadSizeExceededException`,kt=`MalformedPolicyDocumentException`,At=`MinimumSessionTokenSize`,jt=`OutboundWebIdentityFederationDisabledException`,Mt=`PackedPolicyTooLargeException`,Nt=`RegionDisabledException`,Pt=`SecretAccessKey`,Ft=`SessionDurationEscalationException`,It=`SerialNumber`,Lt=`SessionTokenSize`,Rt=`SessionTokenUtilization`,zt=`SessionToken`,Bt=`TokenCode`,Vt=`UserId`,Ht=`accessKeySecretType`,B=`awsQueryError`,V=`client`,H=`error`,U=`httpError`,W=`message`,G=`smithy.ts.sdk.synthetic.com.amazonaws.sts`,K=`com.amazonaws.sts`,q=h.for(G),Ut=[-3,G,`STSServiceException`,0,[],[]];q.registerError(Ut,R);var J=h.for(K),Wt=[-3,K,gt,{[B]:[`ExpiredTokenException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Wt,$e);var Gt=[-3,K,_t,{[B]:[`ExpiredTradeInTokenException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Gt,st);var Kt=[-3,K,Tt,{[B]:[`IDPCommunicationError`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Kt,at);var qt=[-3,K,Et,{[B]:[`IDPRejectedClaim`,403],[H]:V,[U]:403},[W],[0]];J.registerError(qt,rt);var Jt=[-3,K,wt,{[B]:[`InvalidAuthorizationMessageException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Jt,ot);var Yt=[-3,K,Dt,{[B]:[`InvalidIdentityToken`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Yt,it);var Xt=[-3,K,Ot,{[B]:[`JWTPayloadSizeExceededException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Xt,ct);var Zt=[-3,K,kt,{[B]:[`MalformedPolicyDocument`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Zt,et);var Qt=[-3,K,jt,{[B]:[`OutboundWebIdentityFederationDisabledException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(Qt,lt);var $t=[-3,K,Mt,{[B]:[`PackedPolicyTooLarge`,400],[H]:V,[U]:400},[W],[0]];J.registerError($t,tt);var en=[-3,K,Nt,{[B]:[`RegionDisabledException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(en,nt);var tn=[-3,K,Ft,{[B]:[`SessionDurationEscalationException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(tn,ut);var nn=[q,J],rn=[0,K,Ht,8,0],an=[3,K,z,0,[ft,Pt,zt,ht],[0,[()=>rn,0],0,4],4],on=[3,K,yt,0,[],[]],sn=[3,K,bt,0,[Vt,pt,dt],[0,0,0]],cn=[3,K,St,0,[mt,It,Bt,At],[1,0,0,1]],ln=[3,K,Ct,0,[z,Rt,Lt],[[()=>an,0],1,1]],un=[9,K,vt,0,()=>on,()=>sn],dn=[9,K,xt,0,()=>cn,()=>ln],fn=e=>({apiVersion:`2011-06-15`,base64Decoder:e?.base64Decoder??l,base64Encoder:e?.base64Encoder??se,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??P,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Je,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new Te},{schemeId:`aws.auth#sigv4a`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4a`),signer:new n},{schemeId:`smithy.api#noAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#noAuth`)||(async()=>({})),signer:new He}],logger:e?.logger??new re,protocol:e?.protocol??Le,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.sts`,errorTypeRegistries:nn,xmlNamespace:`https://sts.amazonaws.com/doc/2011-06-15/`,version:`2011-06-15`,serviceTarget:`AWSSecurityTokenServiceV20110615`},serviceId:e?.serviceId??`STS`,sha256:e?.sha256??Pe,signerConstructor:e?.signerConstructor??o,urlParser:e?.urlParser??be,utf8Decoder:e?.utf8Decoder??Be,utf8Encoder:e?.utf8Encoder??Ve}),Y=e=>{let t=oe(e),n=()=>t().then(r),i=fn(e);return{...i,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??s,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ne({serviceId:i.serviceId,clientVersion:Qe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??je(`Region is missing`),requestHandler:pe.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||Ce),streamCollector:e?.streamCollector??De,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},pn=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},mn=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),hn=(e,t)=>{let n=Object.assign(ie(e),de(e),Me(e),pn(e));return t.forEach(e=>e.configure(n)),Object.assign(e,ae(n),m(n),we(n),mn(n))},gn=class extends te{config;constructor(...[t]){let n=Y(t||{});super(n),this.initConfig=n;let r=Xe(n),i=ze(r),a=e(i),o=c(a),s=ve(o),l=hn(Ye(Fe(s)),t?.extensions||[]);this.config=l,this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(ue(this.config)),this.middlewareStack.use(ce(this.config)),this.middlewareStack.use(Oe(this.config)),this.middlewareStack.use(ye(this.config)),this.middlewareStack.use(f(this.config)),this.middlewareStack.use(Ae(this.config)),this.middlewareStack.use(ee(this.config,{httpAuthSchemeParametersProvider:qe,identityProviderConfigProvider:async e=>new me({"aws.auth#sigv4":e.credentials,"aws.auth#sigv4a":e.credentials})})),this.middlewareStack.use(ge(this.config))}destroy(){super.destroy()}},X=d(Ze,`AWSSecurityTokenServiceV20110615`,`STSClient`,xe),Z={},Q=(e,t,n,r)=>[],_n=class extends X(Z,Q,`GetSessionToken`,dn){},vn=`${window.location.protocol}//localhost:9999`,yn=43200;function bn(e){e.middlewareStack.add(e=>async t=>(le.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}function $(e){let t=new gn({endpoint:vn,region:Ne(),credentials:e});return bn(t),t}function xn(){let e=ke();if(!e)throw Error(`AWS credentials not configured`);return $({accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken})}async function Sn(e){let t=(await $(e).send(new _n({DurationSeconds:yn}))).Credentials;if(!t?.AccessKeyId||!t.SecretAccessKey||!t.SessionToken||!t.Expiration)throw Error(`GetSessionToken returned incomplete credentials`);return{accessKeyId:t.AccessKeyId,secretAccessKey:t.SecretAccessKey,sessionToken:t.SessionToken,expiration:t.Expiration.toISOString()}}export{X as a,Q as i,xn as n,un as o,Z as r,Sn as t}; \ No newline at end of file +import{$ as e,A as t,B as n,Bt as r,Ct as i,D as a,Dt as o,E as s,F as c,Ft as l,G as u,Gt as d,Ht as f,I as ee,It as te,J as ne,Jt as re,L as ie,Lt as ae,M as oe,N as se,O as ce,P as le,R as ue,Rt as de,St as fe,Vt as pe,W as me,X as he,Xt as ge,Y as _e,Z as ve,Zt as p,at as ye,b as be,bt as xe,en as m,et as Se,ht as Ce,i as we,it as Te,j as Ee,q as De,qt as Oe,rt as ke,s as Ae,t as je,tt as Me,vt as Ne,wt as Pe,xt as Fe,y as Ie,yt as Le,z as Re,zt as ze}from"./cluster-config-DkOiY8HH.js";import{a as h,i as Be,r as Ve}from"./hex-encoding-CVnQo5PF.js";var He=class{async sign(e,t,n){return e}},g=`ref`,_=-1,v=!0,y=`isSet`,b=`PartitionResult`,x=`booleanEquals`,S=`stringEquals`,C=`getAttr`,w=`us-east-1`,T=`sigv4`,E=`sts`,D=`https://sts.{Region}.{PartitionResult#dnsSuffix}`,O={[g]:`Endpoint`},k={[g]:`Region`},A={[g]:b},j={},M=[k],N={conditions:[[y,[O]],[y,M],[`aws.partition`,M,b],[x,[{[g]:`UseFIPS`},v]],[x,[{[g]:`UseDualStack`},v]],[S,[k,`aws-global`]],[x,[{[g]:`UseGlobalEndpoint`},v]],[S,[k,`eu-central-1`]],[x,[{fn:C,argv:[A,`supportsDualStack`]},v]],[x,[{fn:C,argv:[A,`supportsFIPS`]},v]],[S,[k,`ap-south-1`]],[S,[k,`eu-north-1`]],[S,[k,`eu-west-1`]],[S,[k,`eu-west-2`]],[S,[k,`eu-west-3`]],[S,[k,`sa-east-1`]],[S,[k,w]],[S,[k,`us-east-2`]],[S,[k,`us-west-2`]],[S,[k,`us-west-1`]],[S,[k,`ca-central-1`]],[S,[k,`ap-southeast-1`]],[S,[k,`ap-northeast-1`]],[S,[k,`ap-southeast-2`]],[S,[{fn:C,argv:[A,`name`]},`aws-us-gov`]]],results:[[_],[`https://sts.amazonaws.com`,{authSchemes:[{name:T,signingName:E,signingRegion:w}]}],[D,{authSchemes:[{name:T,signingName:E,signingRegion:`{Region}`}]}],[_,`Invalid Configuration: FIPS and custom endpoint are not supported`],[_,`Invalid Configuration: Dualstack and custom endpoint are not supported`],[O,j],[`https://sts-fips.{Region}.{PartitionResult#dualStackDnsSuffix}`,j],[_,`FIPS and DualStack are enabled, but this partition does not support one or both`],[`https://sts.{Region}.amazonaws.com`,j],[`https://sts-fips.{Region}.{PartitionResult#dnsSuffix}`,j],[_,`FIPS is enabled but this partition does not support FIPS`],[`https://sts.{Region}.{PartitionResult#dualStackDnsSuffix}`,j],[_,`DualStack is enabled but this partition does not support DualStack`],[D,j],[_,`Invalid Configuration: Missing Region`]]},Ue=2,We=new Int32Array([-1,1,-1,0,30,3,1,4,100000014,2,5,100000014,3,25,6,4,24,7,5,100000001,8,6,9,100000013,7,100000001,10,10,100000001,11,11,100000001,12,12,100000001,13,13,100000001,14,14,100000001,15,15,100000001,16,16,100000001,17,17,100000001,18,18,100000001,19,19,100000001,20,20,100000001,21,21,100000001,22,22,100000001,23,23,100000001,100000002,8,100000011,100000012,4,28,26,9,27,100000010,24,100000008,100000009,8,29,100000007,9,100000006,100000007,3,100000003,31,4,100000004,100000005]),Ge=i.from(We,Ue,N.conditions,N.results),Ke=new fe({size:50,params:[`Endpoint`,`Region`,`UseDualStack`,`UseFIPS`,`UseGlobalEndpoint`]}),P=(e,t={})=>Ke.get(e,()=>xe(Ge,{endpointParams:e,logger:t.logger}));Fe.aws=ie;var qe=(e=>async(t,n,r)=>{if(!r)throw Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");let i=await e(t,n,r),a=m(n)?.commandInstance?.constructor?.getEndpointParameterInstructions;if(!a)throw Error(`getEndpointParameterInstructions() is not defined on '${n.commandName}'`);let o=await Pe(r,{getEndpointParameterInstructions:a},t);return Object.assign(i,o)})(async(e,t,n)=>({operation:m(t).operation,region:await p(e.region)()||(()=>{throw Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));function F(e){return{schemeId:`aws.auth#sigv4`,signingProperties:{name:`sts`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function I(e){return{schemeId:`aws.auth#sigv4a`,signingProperties:{name:`sts`,region:e.region},propertiesExtractor:(e,t)=>({signingProperties:{config:e,context:t}})}}function L(e){return{schemeId:`smithy.api#noAuth`}}var Je=((e,t,n)=>r=>{let i=e(r).properties?.authSchemes;if(!i)return t(r);let o=[];for(let e of i){let{name:t,properties:s={},...c}=e,l=t.toLowerCase();t!==l&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${t}' to '${l}'`);let u;if(l===`sigv4a`){u=`aws.auth#sigv4a`;let e=i.find(e=>{let t=e.name.toLowerCase();return t!==`sigv4a`&&t.startsWith(`sigv4`)});if(a.sigv4aDependency()===`none`&&e)continue}else if(l.startsWith(`sigv4`))u=`aws.auth#sigv4`;else throw Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${l}'`);let d=n[u];if(!d)throw Error(`Could not find HttpAuthOption create function for '${u}'`);let f=d(r);f.schemeId=u,f.signingProperties={...f.signingProperties||{},...c,...s},o.push(f)}return o})(P,e=>{let t=[];switch(e.operation){case`AssumeRoleWithSAML`:t.push(L(e)),t.push(I(e));break;case`AssumeRoleWithWebIdentity`:t.push(L(e)),t.push(I(e));break;default:t.push(F(e)),t.push(I(e))}return t},{"aws.auth#sigv4":F,"aws.auth#sigv4a":I,"smithy.api#noAuth":L}),Ye=e=>{let n=ce(e),r=t(n);return Object.assign(r,{authSchemePreference:p(e.authSchemePreference??[])})},Xe=e=>Object.assign(e,{useDualstackEndpoint:e.useDualstackEndpoint??!1,useFipsEndpoint:e.useFipsEndpoint??!1,useGlobalEndpoint:e.useGlobalEndpoint??!1,defaultSigningName:`sts`}),Ze={UseGlobalEndpoint:{type:`builtInParams`,name:`useGlobalEndpoint`},UseFIPS:{type:`builtInParams`,name:`useFipsEndpoint`},Endpoint:{type:`builtInParams`,name:`endpoint`},Region:{type:`builtInParams`,name:`region`},UseDualStack:{type:`builtInParams`,name:`useDualstackEndpoint`}},Qe={name:`@aws-sdk/client-sts`,version:`3.1144.0`,description:`AWS SDK for JavaScript Sts Client for Node.js, Browser and React Native`,homepage:`https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-sts`,license:`Apache-2.0`,author:{name:`AWS SDK for JavaScript Team`,url:`https://aws.amazon.com/sdk-for-javascript/`},repository:{type:`git`,url:`https://github.com/aws/aws-sdk-js-v3.git`,directory:`clients/client-sts`},files:[`dist-*/**`],sideEffects:!1,main:`./dist-cjs/index.js`,module:`./dist-es/index.js`,browser:{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.browser`},types:`./dist-types/index.d.ts`,typesVersions:{"<4.5":{"dist-types/*":[`dist-types/ts3.4/*`]}},"react-native":{"./dist-es/runtimeConfig":`./dist-es/runtimeConfig.native`},scripts:{build:`concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs`,"build:cjs":`node ../../scripts/compilation/inline`,"build:es":`premove dist-es && tsc -p tsconfig.es.json`,"build:include:deps":`yarn g:turbo run build -F="$npm_package_name"`,"build:types":`premove dist-types && tsc -p tsconfig.types.json`,"build:types:downlevel":`downlevel-dts dist-types dist-types/ts3.4`,clean:`premove dist-cjs dist-es dist-types`,"extract:docs":`api-extractor run --local`,"generate:client":`node ../../scripts/generate-clients/single-service`,test:`yarn g:vitest run --passWithNoTests`,"test:watch":`yarn g:vitest watch --passWithNoTests`,"test:integration":`yarn g:vitest run --passWithNoTests -c vitest.config.integ.mts`,"test:integration:watch":`yarn g:vitest watch --passWithNoTests -c vitest.config.integ.mts`,"test:e2e":`yarn g:vitest run -c vitest.config.e2e.mts`,"test:e2e:watch":`yarn g:vitest watch -c vitest.config.e2e.mts`,"test:index":`tsc -p tsconfig.test.json && node ./test/index-objects.spec.mjs`},dependencies:{"@aws-sdk/core":`^3.978.1`,"@aws-sdk/credential-provider-node":`^3.972.84`,"@aws-sdk/signature-v4-multi-region":`^3.996.47`,"@aws-sdk/types":`^3.974.6`,"@smithy/core":`^3.35.0`,"@smithy/fetch-http-handler":`^5.8.0`,"@smithy/node-http-handler":`^4.12.1`,"@smithy/types":`^4.19.0`,tslib:`^2.6.2`},devDependencies:{"@smithy/snapshot-testing":`^2.3.2`,"@tsconfig/node20":`20.1.8`,"@types/node":`^20.14.8`,concurrently:`7.0.0`,"downlevel-dts":`0.10.1`,premove:`4.0.0`,typescript:`~7.0.2`,vitest:`^4.0.17`},engines:{node:`>=20.0.0`}},R=class e extends f{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},$e=class e extends R{name=`ExpiredTokenException`;$fault=`client`;constructor(t){super({name:`ExpiredTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},et=class e extends R{name=`MalformedPolicyDocumentException`;$fault=`client`;constructor(t){super({name:`MalformedPolicyDocumentException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},tt=class e extends R{name=`PackedPolicyTooLargeException`;$fault=`client`;constructor(t){super({name:`PackedPolicyTooLargeException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},nt=class e extends R{name=`RegionDisabledException`;$fault=`client`;constructor(t){super({name:`RegionDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},rt=class e extends R{name=`IDPRejectedClaimException`;$fault=`client`;constructor(t){super({name:`IDPRejectedClaimException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},it=class e extends R{name=`InvalidIdentityTokenException`;$fault=`client`;constructor(t){super({name:`InvalidIdentityTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},at=class e extends R{name=`IDPCommunicationErrorException`;$fault=`client`;$retryable={};constructor(t){super({name:`IDPCommunicationErrorException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ot=class e extends R{name=`InvalidAuthorizationMessageException`;$fault=`client`;constructor(t){super({name:`InvalidAuthorizationMessageException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},st=class e extends R{name=`ExpiredTradeInTokenException`;$fault=`client`;constructor(t){super({name:`ExpiredTradeInTokenException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ct=class e extends R{name=`JWTPayloadSizeExceededException`;$fault=`client`;constructor(t){super({name:`JWTPayloadSizeExceededException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},lt=class e extends R{name=`OutboundWebIdentityFederationDisabledException`;$fault=`client`;constructor(t){super({name:`OutboundWebIdentityFederationDisabledException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},ut=class e extends R{name=`SessionDurationEscalationException`;$fault=`client`;constructor(t){super({name:`SessionDurationEscalationException`,$fault:`client`,...t}),Object.setPrototypeOf(this,e.prototype)}},dt=`Arn`,ft=`AccessKeyId`,pt=`Account`,z=`Credentials`,mt=`DurationSeconds`,ht=`Expiration`,gt=`ExpiredTokenException`,_t=`ExpiredTradeInTokenException`,vt=`GetCallerIdentity`,yt=`GetCallerIdentityRequest`,bt=`GetCallerIdentityResponse`,xt=`GetSessionToken`,St=`GetSessionTokenRequest`,Ct=`GetSessionTokenResponse`,wt=`InvalidAuthorizationMessageException`,Tt=`IDPCommunicationErrorException`,Et=`IDPRejectedClaimException`,Dt=`InvalidIdentityTokenException`,Ot=`JWTPayloadSizeExceededException`,kt=`MalformedPolicyDocumentException`,At=`MinimumSessionTokenSize`,jt=`OutboundWebIdentityFederationDisabledException`,Mt=`PackedPolicyTooLargeException`,Nt=`RegionDisabledException`,Pt=`SecretAccessKey`,Ft=`SessionDurationEscalationException`,It=`SerialNumber`,Lt=`SessionTokenSize`,Rt=`SessionTokenUtilization`,zt=`SessionToken`,Bt=`TokenCode`,Vt=`UserId`,Ht=`accessKeySecretType`,B=`awsQueryError`,V=`client`,H=`error`,U=`httpError`,W=`message`,G=`smithy.ts.sdk.synthetic.com.amazonaws.sts`,K=`com.amazonaws.sts`,q=new h(G),Ut=[-3,G,`STSServiceException`,0,[],[]];q.registerError(Ut,R);var J=new h(K),Wt=[-3,K,gt,{[B]:[`ExpiredTokenException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Wt,$e);var Gt=[-3,K,_t,{[B]:[`ExpiredTradeInTokenException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Gt,st);var Kt=[-3,K,Tt,{[B]:[`IDPCommunicationError`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Kt,at);var qt=[-3,K,Et,{[B]:[`IDPRejectedClaim`,403],[H]:V,[U]:403},[W],[0]];J.registerError(qt,rt);var Jt=[-3,K,wt,{[B]:[`InvalidAuthorizationMessageException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Jt,ot);var Yt=[-3,K,Dt,{[B]:[`InvalidIdentityToken`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Yt,it);var Xt=[-3,K,Ot,{[B]:[`JWTPayloadSizeExceededException`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Xt,ct);var Zt=[-3,K,kt,{[B]:[`MalformedPolicyDocument`,400],[H]:V,[U]:400},[W],[0]];J.registerError(Zt,et);var Qt=[-3,K,jt,{[B]:[`OutboundWebIdentityFederationDisabledException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(Qt,lt);var $t=[-3,K,Mt,{[B]:[`PackedPolicyTooLarge`,400],[H]:V,[U]:400},[W],[0]];J.registerError($t,tt);var en=[-3,K,Nt,{[B]:[`RegionDisabledException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(en,nt);var tn=[-3,K,Ft,{[B]:[`SessionDurationEscalationException`,403],[H]:V,[U]:403},[W],[0]];J.registerError(tn,ut);var nn=[q,J],rn=[0,K,Ht,8,0],an=[3,K,z,0,[ft,Pt,zt,ht],[0,[()=>rn,0],0,4],4],on=[3,K,yt,0,[],[]],sn=[3,K,bt,0,[Vt,pt,dt],[0,0,0]],cn=[3,K,St,0,[mt,It,Bt,At],[1,0,0,1]],ln=[3,K,Ct,0,[z,Rt,Lt],[[()=>an,0],1,1]],un=[9,K,vt,0,()=>on,()=>sn],dn=[9,K,xt,0,()=>cn,()=>ln],fn=e=>({apiVersion:`2011-06-15`,base64Decoder:e?.base64Decoder??te,base64Encoder:e?.base64Encoder??l,disableHostPrefix:e?.disableHostPrefix??!1,endpointProvider:e?.endpointProvider??P,extensions:e?.extensions??[],httpAuthSchemeProvider:e?.httpAuthSchemeProvider??Je,httpAuthSchemes:e?.httpAuthSchemes??[{schemeId:`aws.auth#sigv4`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4`),signer:new oe},{schemeId:`aws.auth#sigv4a`,identityProvider:e=>e.getIdentityProvider(`aws.auth#sigv4a`),signer:new Ee},{schemeId:`smithy.api#noAuth`,identityProvider:e=>e.getIdentityProvider(`smithy.api#noAuth`)||(async()=>({})),signer:new He}],logger:e?.logger??new de,protocol:e?.protocol??be,protocolSettings:e?.protocolSettings??{defaultNamespace:`com.amazonaws.sts`,errorTypeRegistries:nn,xmlNamespace:`https://sts.amazonaws.com/doc/2011-06-15/`,version:`2011-06-15`,serviceTarget:`AWSSecurityTokenServiceV20110615`},serviceId:e?.serviceId??`STS`,sha256:e?.sha256??Ie,signerConstructor:e?.signerConstructor??a,urlParser:e?.urlParser??ge,utf8Decoder:e?.utf8Decoder??Be,utf8Encoder:e?.utf8Encoder??Ve}),Y=e=>{let t=c(e),n=()=>t().then(pe),r=fn(e);return{...r,...e,runtime:`browser`,defaultsMode:t,bodyLengthChecker:e?.bodyLengthChecker??o,credentialDefaultProvider:e?.credentialDefaultProvider??(e=>()=>Promise.reject(Error(`Credential is missing`))),defaultUserAgentProvider:e?.defaultUserAgentProvider??ue({serviceId:r.serviceId,clientVersion:Qe.version}),maxAttempts:e?.maxAttempts??3,region:e?.region??re(`Region is missing`),requestHandler:s.create(e?.requestHandler??n),retryMode:e?.retryMode??(async()=>(await n()).retryMode||Me),streamCollector:e?.streamCollector??Ce,useDualstackEndpoint:e?.useDualstackEndpoint??(()=>Promise.resolve(!1)),useFipsEndpoint:e?.useFipsEndpoint??(()=>Promise.resolve(!1))}},pn=e=>{let t=e.httpAuthSchemes,n=e.httpAuthSchemeProvider,r=e.credentials;return{setHttpAuthScheme(e){let n=t.findIndex(t=>t.schemeId===e.schemeId);n===-1?t.push(e):t.splice(n,1,e)},httpAuthSchemes(){return t},setHttpAuthSchemeProvider(e){n=e},httpAuthSchemeProvider(){return n},setCredentials(e){r=e},credentials(){return r}}},mn=e=>({httpAuthSchemes:e.httpAuthSchemes(),httpAuthSchemeProvider:e.httpAuthSchemeProvider(),credentials:e.credentials()}),hn=(e,t)=>{let n=Object.assign(se(e),ze(e),Te(e),pn(e));return t.forEach(e=>e.configure(n)),Object.assign(e,le(n),r(n),ye(n),mn(n))},gn=class extends Oe{config;constructor(...[t]){let r=Y(t||{});super(r),this.initConfig=r;let i=Xe(r),a=n(i),o=Se(a),s=ee(o),c=ve(s),l=hn(Ye(Le(c)),t?.extensions||[]);this.config=l,this.middlewareStack.use(d(this.config)),this.middlewareStack.use(Re(this.config)),this.middlewareStack.use(e(this.config)),this.middlewareStack.use(ke(this.config)),this.middlewareStack.use(he(this.config)),this.middlewareStack.use(_e(this.config)),this.middlewareStack.use(ne(this.config)),this.middlewareStack.use(De(this.config,{httpAuthSchemeParametersProvider:qe,identityProviderConfigProvider:async e=>new me({"aws.auth#sigv4":e.credentials,"aws.auth#sigv4a":e.credentials})})),this.middlewareStack.use(u(this.config))}destroy(){super.destroy()}},X=ae(Ze,`AWSSecurityTokenServiceV20110615`,`STSClient`,Ne),Z={},Q=(e,t,n,r)=>[],_n=class extends X(Z,Q,`GetSessionToken`,dn){},vn=`${window.location.protocol}//localhost:9999`,yn=43200;function bn(e){e.middlewareStack.add(e=>async t=>(we.isInstance(t.request)&&(t.request.hostname=window.location.hostname,t.request.port=Number(window.location.port)||443,t.request.path=`/proxy/awsgw${t.request.path}`),await e(t)),{step:`finalizeRequest`,name:`proxyRewrite`,override:!0})}function $(e){let t=new gn({endpoint:vn,region:je(),credentials:e});return bn(t),t}function xn(){let e=Ae();if(!e)throw Error(`AWS credentials not configured`);return $({accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey,sessionToken:e.sessionToken})}async function Sn(e){let t=(await $(e).send(new _n({DurationSeconds:yn}))).Credentials;if(!t?.AccessKeyId||!t.SecretAccessKey||!t.SessionToken||!t.Expiration)throw Error(`GetSessionToken returned incomplete credentials`);return{accessKeyId:t.AccessKeyId,secretAccessKey:t.SecretAccessKey,sessionToken:t.SessionToken,expiration:t.Expiration.toISOString()}}export{X as a,Q as i,xn as n,un as o,Z as r,Sn as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-PXuPdEKF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-D20bojgG.js similarity index 93% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-PXuPdEKF.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-D20bojgG.js index 7d0a77b2d..a4b9ee14e 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-PXuPdEKF.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/system-image-required-D20bojgG.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";import{t as r}from"./check-BO7W8OSs.js";import{t as i}from"./copy-CamWo-pg.js";import{t as a}from"./rotate-cw-FTUcK_f-.js";import{t as o}from"./triangle-alert-DcjzeKLg.js";import{t as s}from"./button-BarTr35m.js";import{t as c}from"./use-copy-to-clipboard-DjiD3qo6.js";var l=t(),u=e();function d(e){let t=(0,l.c)(38),{title:d,description:f,importCommand:p,isRechecking:m,onRecheck:h,className:g}=e,{copied:_,copy:v}=c(),y;t[0]===g?y=t[1]:(y=n(`max-w-2xl rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-6`,g),t[0]=g,t[1]=y);let b;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,u.jsx)(o,{className:`mt-0.5 size-5 shrink-0 text-tactical-amber`}),t[2]=b):b=t[2];let x;t[3]===d?x=t[4]:(x=(0,u.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:d}),t[3]=d,t[4]=x);let S;t[5]===f?S=t[6]:(S=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:f}),t[5]=f,t[6]=S);let C;t[7]!==x||t[8]!==S?(C=(0,u.jsxs)(`div`,{className:`space-y-1`,children:[x,S]}),t[7]=x,t[8]=S,t[9]=C):C=t[9];let w;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,u.jsx)(`span`,{className:`text-muted-foreground select-none`,children:`$`}),t[10]=w):w=t[10];let T;t[11]===p?T=t[12]:(T=(0,u.jsx)(`span`,{className:`flex-1 text-foreground`,children:p}),t[11]=p,t[12]=T);let E;t[13]!==v||t[14]!==p?(E=()=>{v(p)},t[13]=v,t[14]=p,t[15]=E):E=t[15];let D;t[16]===_?D=t[17]:(D=_?(0,u.jsx)(r,{className:`size-3.5 text-tactical-green`}):(0,u.jsx)(i,{className:`size-3.5`}),t[16]=_,t[17]=D);let O;t[18]!==E||t[19]!==D?(O=(0,u.jsx)(`button`,{"aria-label":`Copy command`,className:`text-muted-foreground transition-colors hover:text-foreground`,onClick:E,type:`button`,children:D}),t[18]=E,t[19]=D,t[20]=O):O=t[20];let k;t[21]!==O||t[22]!==T?(k=(0,u.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-border bg-background px-3 py-2 font-mono text-xs`,children:[w,T,O]}),t[21]=O,t[22]=T,t[23]=k):k=t[23];let A;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Run from any authenticated spx CLI host. The command downloads and registers the published node image, then click Recheck.`}),t[24]=A):A=t[24];let j=m?`size-4 animate-spin`:`size-4`,M;t[25]===j?M=t[26]:(M=(0,u.jsx)(a,{className:j}),t[25]=j,t[26]=M);let N;t[27]!==m||t[28]!==h||t[29]!==M?(N=(0,u.jsxs)(s,{disabled:m,onClick:h,size:`sm`,variant:`outline`,children:[M,`Recheck`]}),t[27]=m,t[28]=h,t[29]=M,t[30]=N):N=t[30];let P;t[31]!==k||t[32]!==N||t[33]!==C?(P=(0,u.jsxs)(`div`,{className:`flex items-start gap-3`,children:[b,(0,u.jsxs)(`div`,{className:`space-y-4`,children:[C,k,A,N]})]}),t[31]=k,t[32]=N,t[33]=C,t[34]=P):P=t[34];let F;return t[35]!==y||t[36]!==P?(F=(0,u.jsx)(`div`,{className:y,children:P}),t[35]=y,t[36]=P,t[37]=F):F=t[37],F}export{d as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";import{t as r}from"./check-BO7W8OSs.js";import{t as i}from"./copy-CamWo-pg.js";import{t as a}from"./rotate-cw-FTUcK_f-.js";import{t as o}from"./triangle-alert-DcjzeKLg.js";import{t as s}from"./button-qf9lLJ2x.js";import{t as c}from"./use-copy-to-clipboard-DjiD3qo6.js";var l=t(),u=e();function d(e){let t=(0,l.c)(38),{title:d,description:f,importCommand:p,isRechecking:m,onRecheck:h,className:g}=e,{copied:_,copy:v}=c(),y;t[0]===g?y=t[1]:(y=n(`max-w-2xl rounded-md border border-tactical-amber/40 bg-tactical-amber/5 p-6`,g),t[0]=g,t[1]=y);let b;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,u.jsx)(o,{className:`mt-0.5 size-5 shrink-0 text-tactical-amber`}),t[2]=b):b=t[2];let x;t[3]===d?x=t[4]:(x=(0,u.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:d}),t[3]=d,t[4]=x);let S;t[5]===f?S=t[6]:(S=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:f}),t[5]=f,t[6]=S);let C;t[7]!==x||t[8]!==S?(C=(0,u.jsxs)(`div`,{className:`space-y-1`,children:[x,S]}),t[7]=x,t[8]=S,t[9]=C):C=t[9];let w;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,u.jsx)(`span`,{className:`text-muted-foreground select-none`,children:`$`}),t[10]=w):w=t[10];let T;t[11]===p?T=t[12]:(T=(0,u.jsx)(`span`,{className:`flex-1 text-foreground`,children:p}),t[11]=p,t[12]=T);let E;t[13]!==v||t[14]!==p?(E=()=>{v(p)},t[13]=v,t[14]=p,t[15]=E):E=t[15];let D;t[16]===_?D=t[17]:(D=_?(0,u.jsx)(r,{className:`size-3.5 text-tactical-green`}):(0,u.jsx)(i,{className:`size-3.5`}),t[16]=_,t[17]=D);let O;t[18]!==E||t[19]!==D?(O=(0,u.jsx)(`button`,{"aria-label":`Copy command`,className:`text-muted-foreground transition-colors hover:text-foreground`,onClick:E,type:`button`,children:D}),t[18]=E,t[19]=D,t[20]=O):O=t[20];let k;t[21]!==O||t[22]!==T?(k=(0,u.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-border bg-background px-3 py-2 font-mono text-xs`,children:[w,T,O]}),t[21]=O,t[22]=T,t[23]=k):k=t[23];let A;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,u.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Run from any authenticated spx CLI host. The command downloads and registers the published node image, then click Recheck.`}),t[24]=A):A=t[24];let j=m?`size-4 animate-spin`:`size-4`,M;t[25]===j?M=t[26]:(M=(0,u.jsx)(a,{className:j}),t[25]=j,t[26]=M);let N;t[27]!==m||t[28]!==h||t[29]!==M?(N=(0,u.jsxs)(s,{disabled:m,onClick:h,size:`sm`,variant:`outline`,children:[M,`Recheck`]}),t[27]=m,t[28]=h,t[29]=M,t[30]=N):N=t[30];let P;t[31]!==k||t[32]!==N||t[33]!==C?(P=(0,u.jsxs)(`div`,{className:`flex items-start gap-3`,children:[b,(0,u.jsxs)(`div`,{className:`space-y-4`,children:[C,k,A,N]})]}),t[31]=k,t[32]=N,t[33]=C,t[34]=P):P=t[34];let F;return t[35]!==y||t[36]!==P?(F=(0,u.jsx)(`div`,{className:y,children:P}),t[35]=y,t[36]=P,t[37]=F):F=t[37],F}export{d as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-t6sDAEVZ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-BMSqRmVw.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-t6sDAEVZ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-BMSqRmVw.js index 3bf2b3177..09f3fc779 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-t6sDAEVZ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tabs-BMSqRmVw.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{i,l as a,r as o}from"./useValueAsRef-F56m8WbP.js";import{a as s,c,i as l,n as u,u as d}from"./dist-BKgR2qk6.js";import{tn as f}from"./cluster-config-xw_Q7X1e.js";import{a as p,i as m,o as h,r as g,s as _}from"./button-BarTr35m.js";import{C as v,E as y,S as b,c as x,d as S,f as C,i as w,t as T,w as E,x as D}from"./createBaseUIEventDetails-DL-8egB9.js";import{G as O,J as k,U as A,W as j,a as M,c as N,d as P,f as F,i as I,o as L,q as R,r as z,s as B,u as V}from"./useScrollLock-NX6x9Pv8.js";import{t as H}from"./useControlled-DwxdYHYK.js";import{t as U}from"./DirectionContext-C9rdm8xn.js";import{n as W,r as G,t as K}from"./useCompositeListItem-CEsaEeXb.js";var q=t(n(),1),J=q.createContext(void 0);function Y(){let e=q.useContext(J);if(e===void 0)throw Error(d(64));return e}var X=`data-activation-direction`,Z={tabActivationDirection:e=>({[X]:e})},Q=e(),ee=q.forwardRef(function(e,t){let{className:n,defaultValue:r=0,onValueChange:i,orientation:a=`horizontal`,render:o,value:s,style:c,...l}=e,d=e.defaultValue!==void 0,f=q.useRef([]),[p,m]=q.useState(()=>new Map),[g,v]=H({controlled:s,default:r,name:`Tabs`,state:`value`}),y=s!==void 0,[b,C]=q.useState(()=>new Map),E=q.useRef(void 0),D=q.useCallback(e=>te(b,e),[b]),[O,k]=q.useState(()=>({previousValue:g,tabActivationDirection:`none`})),{previousValue:A,tabActivationDirection:j}=O,M=j,N=!1;A!==g&&(M=ne(A,g,a,b),N=A!=null&&g!=null&&D(g)==null);let P=N?A:g,F=A!==P||j!==M;h(()=>{F&&k({previousValue:P,tabActivationDirection:M})},[P,F,M]);let I=_((e,t)=>{t.activationDirection=ne(g,e,a,b),i?.(e,t),!t.isCanceled&&v(e)}),L=_((e,t)=>{i?.(e,T(t,void 0,void 0,{activationDirection:`none`}))}),R=_((e,t)=>(m(n=>{let r=new Map(n);return r.set(e,t),r}),()=>{m(n=>{if(n.get(e)!==t)return n;let r=new Map(n);return r.delete(e),r})})),z=q.useCallback(e=>p.get(e),[p]),B=q.useCallback(e=>{for(let t of b.values())if(e===t.value)return t.id},[b]),V=q.useMemo(()=>({getTabElementBySelectedValue:D,getTabIdByPanelValue:B,getTabPanelIdByValue:z,onValueChange:I,orientation:a,registerMountedTabPanel:R,setTabMap:C,tabActivationDirection:M,value:g}),[D,B,z,I,a,R,C,M,g]),U=q.useMemo(()=>{for(let e of b.values())if(e.value===g)return e},[b,g]),G=q.useMemo(()=>{for(let e of b.values())if(!e.disabled)return e.value},[b]),K=q.useRef(!d),Y=q.useRef(r),X=q.useRef(d),ee=q.useRef(!1);h(()=>{if(y)return;function e(e,t){v(e),k({previousValue:e,tabActivationDirection:`none`}),L(e,t),K.current=!1}if(b.size===0){ee.current&&g!==null&&!E.current?.isConnected&&e(null,S);return}ee.current=!0,E.current=b.keys().next().value;let t=U?.disabled,n=U==null&&g!==null;if(!t&&g===Y.current&&(X.current=!1),X.current&&t&&g===Y.current)return;let r=K.current;if(t||n){let n=G??null;if(g===n){K.current=!1;return}let i=S;r?i=x:t&&(i=w),e(n,i);return}r&&U!=null&&(L(g,x),K.current=!1)},[G,y,L,U,v,b,g]);let re=u(`div`,e,{state:{orientation:a,tabActivationDirection:M},ref:t,props:l,stateAttributesMapping:Z});return(0,Q.jsx)(J.Provider,{value:V,children:(0,Q.jsx)(W,{elementsRef:f,children:re})})});function te(e,t){for(let[n,r]of e.entries())if(t===r.value)return n;return null}function ne(e,t,n,r){if(e==null||t==null)return`none`;let[i,a,o]=n===`horizontal`?[`left`,`left`,`right`]:[`top`,`up`,`down`],s=te(r,e),c=te(r,t);if(s==null||c==null)return s!==c&&(typeof e==`number`||typeof e==`string`)&&typeof e==typeof t?t>e?o:a:`none`;let l=s.getBoundingClientRect()[i],u=c.getBoundingClientRect()[i];return ul?o:`none`}var re=`data-composite-item-active`;function ie(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=p(),{ref:i,index:a}=K(e),o=n===a,s=q.useRef(null),l=c(i,s);return{compositeProps:{tabIndex:o?0:-1,onFocus(){r(a)},onMouseMove(){let e=s.current;if(!t||!e)return;let n=e.hasAttribute(`disabled`)||e.ariaDisabled===`true`;!o&&!n&&e.focus()}},compositeRef:l,index:a}}var ae=q.createContext(void 0);function oe(){let e=q.useContext(ae);if(e===void 0)throw Error(d(65));return e}var se=q.forwardRef(function(e,t){let{className:n,disabled:r=!1,render:i,value:a,id:o,nativeButton:s=!0,style:c,...l}=e,{value:d,getTabPanelIdByValue:f,onValueChange:m,orientation:v,tabActivationDirection:x}=Y(),{activateOnFocus:S,registerTabResizeObserverElement:w,tabsListElement:O}=oe(),{highlightedIndex:k,onHighlightedIndexChange:A}=p(),j=E(o),{compositeProps:M,compositeRef:N,index:P}=ie({metadata:q.useMemo(()=>({disabled:r,id:j,value:a}),[r,j,a])}),F=a===d,I=q.useRef(!1),L=q.useRef(null),R=_(e=>{L.current?.(),L.current=e?w(e):null});h(()=>{if(I.current){I.current=!1;return}if(!(F&&P>-1&&k!==P))return;let e=O;if(e!=null){let t=D(y(e));if(t&&b(e,t))return}r||A(P)},[F,P,k,A,r,O]);let{getButtonProps:z,buttonRef:B}=g({disabled:r,native:s,focusableWhenDisabled:!0}),V=f(a),H=q.useRef(!1),U=q.useRef(!1);function W(e){m(a,T(C,e.nativeEvent,void 0,{activationDirection:`none`}))}function G(e){F||r||W(e)}function K(e){F||r||S&&(!H.current||U.current)&&W(e)}function J(e){if(F||r)return;H.current=!0,U.current=e.button===0;let t=y(e.currentTarget);function n(){H.current=!1,U.current=!1,t.removeEventListener(`pointerup`,n),t.removeEventListener(`pointercancel`,n)}t.addEventListener(`pointerup`,n),t.addEventListener(`pointercancel`,n)}return u(`button`,e,{state:{disabled:r,active:F,orientation:v,tabActivationDirection:x},ref:[t,B,N,R],props:[M,{role:`tab`,"aria-controls":V,"aria-selected":F,id:j,onClick:G,onFocus:K,onPointerDown:J,[re]:F?``:void 0,onKeyDownCapture(){I.current=!0}},l,z],stateAttributesMapping:Z})}),ce=`data-index`,le={...Z,...a},ue=q.forwardRef(function(e,t){let{className:n,value:r,render:a,keepMounted:s=!1,style:c,...l}=e,{value:d,getTabIdByPanelValue:f,orientation:p,tabActivationDirection:m,registerMountedTabPanel:g}=Y(),_=E(),{ref:v,index:y}=K(),b=r===d,{mounted:x,transitionStatus:S,setMounted:C}=o(b),w=!x,T=f(r),D={hidden:w,orientation:p,tabActivationDirection:m,transitionStatus:S},O=q.useRef(null),k=u(`div`,e,{state:D,ref:[t,v,O],props:[{"aria-labelledby":T,hidden:w,id:_,role:`tabpanel`,tabIndex:b?0:-1,inert:z(!b),[ce]:y},l],stateAttributesMapping:le});return i({open:b,ref:O,onComplete(){b||C(!1)}}),h(()=>{if(!(_==null||w&&!s))return g(r,_)},[w,s,r,_,g]),s||x?k:null});function de(e){let{loopFocus:t=!0,orientation:n=`both`,grid:r,onLoop:i,direction:a,highlightedIndex:o,onHighlightedIndexChange:s,rootRef:u,enableHomeAndEndKeys:d=!1,stopEventPropagation:f,disabledIndices:p,modifierKeys:m=l}=e,[g,y]=q.useState(0),b=r!=null,x=q.useRef(null),S=c(x,u),C=q.useRef([]),w=q.useRef(!1),T=q.useRef(null),E=o??g,D=_((e,t=!1)=>{if(T.current=C.current[e]??null,(s??y)(e),t){let t=C.current[e];F(x.current,t,a,n)}}),z=_(e=>{if(e.size===0)return;if(w.current){let e=C.current,t=e.indexOf(T.current);if(t===-1){let t=e[E];!t||k(e,E,p)?D(fe(e,p)):T.current=t}else t!==E&&D(t);return}w.current=!0;let t=Array.from(e.keys()),r=t.find(e=>e?.hasAttribute(`data-composite-item-active`))??null,i=r?e.get(r)?.index??-1:-1;if(i!==-1)D(i);else if(k(t,E,p)){let e=A(t,{disabledIndices:p});R(t,e)||D(e)}F(x.current,r,a,n)});h(()=>{if(p==null||o!=null||!w.current)return;let e=C.current;if(k(e,E,p)){let t=A(e,{disabledIndices:p});R(e,t)||D(t)}},[p,o,E,C,D]);let V=_((e,t,n)=>i?i(e,t,n,C):n),H=_(e=>{let o=e.key===`Home`||e.key===`End`;if(!N.has(e.key)||!d&&o||pe(e,m)||!x.current)return;let s=a===`rtl`,c=s?M:L,l=s?L:M,u=n===`vertical`?I:c,h=n===`vertical`?B:l,g=v(e.nativeEvent);if(g!=null&&P(g)&&!G(g)){let t=g.selectionStart,n=g.selectionEnd,r=g.value;if(t==null||e.shiftKey||t!==n||e.key!==h&&t0)return}let _=E,y=O(C,p),S=j(C,p);r!=null&&(_=r({disabledIndices:p,elementsRef:C,event:e,highlightedIndex:E,loopFocus:t,maxIndex:S,minIndex:y,onLoop:V,orientation:n,rtl:s}));let w=n!==`vertical`&&e.key===c||n!==`horizontal`&&e.key===`ArrowDown`,T=n!==`vertical`&&e.key===l||n!==`horizontal`&&e.key===`ArrowUp`;d&&(e.key===`Home`?_=y:e.key===`End`&&(_=S)),_===E&&(w||T)&&(t&&_===S&&w?(_=y,i&&(_=i(e,E,_,C))):t&&_===y&&T?(_=S,i&&(_=i(e,E,_,C))):_=A(C.current,{startingIndex:_,decrement:T,disabledIndices:p})),_!==E&&!R(C.current,_)&&(f&&e.stopPropagation(),(b||o||w||T)&&e.preventDefault(),D(_,!0),queueMicrotask(()=>{C.current[_]?.focus()}))});return{props:{ref:S,onFocus(e){let t=x.current,n=v(e.nativeEvent);t&&n!=null&&P(n)&&n.setSelectionRange(0,n.value.length)},onKeyDown:H},highlightedIndex:E,onHighlightedIndexChange:D,elementsRef:C,onMapChange:z,relayKeyboardEvent:H}}function fe(e,t){let n=-1;for(let r=0;r({highlightedIndex:O,onHighlightedIndexChange:k,highlightItemOnHover:w,relayKeyboardEvent:M}),[O,k,w,M]);return(0,Q.jsx)(m.Provider,{value:P,children:(0,Q.jsx)(W,{elementsRef:A,onMapChange:e=>{y?.(e),j(e)},children:N})})}var he=q.forwardRef(function(e,t){let{activateOnFocus:n=!1,className:r,loopFocus:i=!0,render:a,style:o,...s}=e,{orientation:c,setTabMap:u,tabActivationDirection:d}=Y(),[f,p]=q.useState(0),[m,g]=q.useState(null),v=q.useRef(new Set),y=q.useRef(new Set),b=q.useRef(null);h(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>{v.current.forEach(e=>{e()})});return b.current=e,m&&e.observe(m),y.current.forEach(t=>{e.observe(t)}),()=>{e.disconnect(),b.current=null}},[m]);let x=_(e=>(v.current.add(e),()=>{v.current.delete(e)})),S=_(e=>(y.current.add(e),b.current?.observe(e),()=>{y.current.delete(e),b.current?.unobserve(e)})),C={orientation:c,tabActivationDirection:d},w={"aria-orientation":c===`vertical`?`vertical`:void 0,role:`tablist`},T=q.useMemo(()=>({activateOnFocus:n,registerIndicatorUpdateListener:x,registerTabResizeObserverElement:S,tabsListElement:m}),[n,x,S,m]);return(0,Q.jsx)(ae.Provider,{value:T,children:(0,Q.jsx)(me,{render:a,className:r,style:o,state:C,refs:[t,g],props:[w,s],stateAttributesMapping:Z,highlightedIndex:f,enableHomeAndEndKeys:!0,loopFocus:i,orientation:c,onHighlightedIndexChange:p,onMapChange:u,disabledIndices:l})})}),$=r();function ge(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`flex flex-col gap-4`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(ee,{className:i,"data-slot":`tabs`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function _e(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`inline-flex items-center gap-1 border-b`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(he,{className:i,"data-slot":`tabs-list`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ve(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`inline-flex items-center justify-center border-b-2 border-transparent px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-selected:border-primary data-selected:text-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(se,{className:i,"data-slot":`tabs-tab`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ye(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`focus-visible:outline-none`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(ue,{className:i,"data-slot":`tabs-panel`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}export{ve as i,_e as n,ye as r,ge as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{i,l as a,r as o}from"./useValueAsRef-hoe2gsyn.js";import{a as s,c,i as l,n as u,u as d}from"./dist-DeC3TnAR.js";import{nn as f}from"./cluster-config-DkOiY8HH.js";import{a as p,i as m,o as h,r as g,s as _}from"./button-qf9lLJ2x.js";import{C as v,E as y,S as b,c as x,d as S,f as C,i as w,t as T,w as E,x as D}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{G as O,J as k,U as A,W as j,a as M,c as N,d as P,f as F,i as I,o as L,q as R,r as z,s as B,u as V}from"./useScrollLock-UqEMT494.js";import{t as H}from"./useControlled-DwxdYHYK.js";import{t as U}from"./DirectionContext-C9rdm8xn.js";import{n as W,r as G,t as K}from"./useCompositeListItem-Puv6a8xb.js";var q=t(n(),1),J=q.createContext(void 0);function Y(){let e=q.useContext(J);if(e===void 0)throw Error(d(64));return e}var X=`data-activation-direction`,Z={tabActivationDirection:e=>({[X]:e})},Q=e(),ee=q.forwardRef(function(e,t){let{className:n,defaultValue:r=0,onValueChange:i,orientation:a=`horizontal`,render:o,value:s,style:c,...l}=e,d=e.defaultValue!==void 0,f=q.useRef([]),[p,m]=q.useState(()=>new Map),[g,v]=H({controlled:s,default:r,name:`Tabs`,state:`value`}),y=s!==void 0,[b,C]=q.useState(()=>new Map),E=q.useRef(void 0),D=q.useCallback(e=>te(b,e),[b]),[O,k]=q.useState(()=>({previousValue:g,tabActivationDirection:`none`})),{previousValue:A,tabActivationDirection:j}=O,M=j,N=!1;A!==g&&(M=ne(A,g,a,b),N=A!=null&&g!=null&&D(g)==null);let P=N?A:g,F=A!==P||j!==M;h(()=>{F&&k({previousValue:P,tabActivationDirection:M})},[P,F,M]);let I=_((e,t)=>{t.activationDirection=ne(g,e,a,b),i?.(e,t),!t.isCanceled&&v(e)}),L=_((e,t)=>{i?.(e,T(t,void 0,void 0,{activationDirection:`none`}))}),R=_((e,t)=>(m(n=>{let r=new Map(n);return r.set(e,t),r}),()=>{m(n=>{if(n.get(e)!==t)return n;let r=new Map(n);return r.delete(e),r})})),z=q.useCallback(e=>p.get(e),[p]),B=q.useCallback(e=>{for(let t of b.values())if(e===t.value)return t.id},[b]),V=q.useMemo(()=>({getTabElementBySelectedValue:D,getTabIdByPanelValue:B,getTabPanelIdByValue:z,onValueChange:I,orientation:a,registerMountedTabPanel:R,setTabMap:C,tabActivationDirection:M,value:g}),[D,B,z,I,a,R,C,M,g]),U=q.useMemo(()=>{for(let e of b.values())if(e.value===g)return e},[b,g]),G=q.useMemo(()=>{for(let e of b.values())if(!e.disabled)return e.value},[b]),K=q.useRef(!d),Y=q.useRef(r),X=q.useRef(d),ee=q.useRef(!1);h(()=>{if(y)return;function e(e,t){v(e),k({previousValue:e,tabActivationDirection:`none`}),L(e,t),K.current=!1}if(b.size===0){ee.current&&g!==null&&!E.current?.isConnected&&e(null,S);return}ee.current=!0,E.current=b.keys().next().value;let t=U?.disabled,n=U==null&&g!==null;if(!t&&g===Y.current&&(X.current=!1),X.current&&t&&g===Y.current)return;let r=K.current;if(t||n){let n=G??null;if(g===n){K.current=!1;return}let i=S;r?i=x:t&&(i=w),e(n,i);return}r&&U!=null&&(L(g,x),K.current=!1)},[G,y,L,U,v,b,g]);let re=u(`div`,e,{state:{orientation:a,tabActivationDirection:M},ref:t,props:l,stateAttributesMapping:Z});return(0,Q.jsx)(J.Provider,{value:V,children:(0,Q.jsx)(W,{elementsRef:f,children:re})})});function te(e,t){for(let[n,r]of e.entries())if(t===r.value)return n;return null}function ne(e,t,n,r){if(e==null||t==null)return`none`;let[i,a,o]=n===`horizontal`?[`left`,`left`,`right`]:[`top`,`up`,`down`],s=te(r,e),c=te(r,t);if(s==null||c==null)return s!==c&&(typeof e==`number`||typeof e==`string`)&&typeof e==typeof t?t>e?o:a:`none`;let l=s.getBoundingClientRect()[i],u=c.getBoundingClientRect()[i];return ul?o:`none`}var re=`data-composite-item-active`;function ie(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=p(),{ref:i,index:a}=K(e),o=n===a,s=q.useRef(null),l=c(i,s);return{compositeProps:{tabIndex:o?0:-1,onFocus(){r(a)},onMouseMove(){let e=s.current;if(!t||!e)return;let n=e.hasAttribute(`disabled`)||e.ariaDisabled===`true`;!o&&!n&&e.focus()}},compositeRef:l,index:a}}var ae=q.createContext(void 0);function oe(){let e=q.useContext(ae);if(e===void 0)throw Error(d(65));return e}var se=q.forwardRef(function(e,t){let{className:n,disabled:r=!1,render:i,value:a,id:o,nativeButton:s=!0,style:c,...l}=e,{value:d,getTabPanelIdByValue:f,onValueChange:m,orientation:v,tabActivationDirection:x}=Y(),{activateOnFocus:S,registerTabResizeObserverElement:w,tabsListElement:O}=oe(),{highlightedIndex:k,onHighlightedIndexChange:A}=p(),j=E(o),{compositeProps:M,compositeRef:N,index:P}=ie({metadata:q.useMemo(()=>({disabled:r,id:j,value:a}),[r,j,a])}),F=a===d,I=q.useRef(!1),L=q.useRef(null),R=_(e=>{L.current?.(),L.current=e?w(e):null});h(()=>{if(I.current){I.current=!1;return}if(!(F&&P>-1&&k!==P))return;let e=O;if(e!=null){let t=D(y(e));if(t&&b(e,t))return}r||A(P)},[F,P,k,A,r,O]);let{getButtonProps:z,buttonRef:B}=g({disabled:r,native:s,focusableWhenDisabled:!0}),V=f(a),H=q.useRef(!1),U=q.useRef(!1);function W(e){m(a,T(C,e.nativeEvent,void 0,{activationDirection:`none`}))}function G(e){F||r||W(e)}function K(e){F||r||S&&(!H.current||U.current)&&W(e)}function J(e){if(F||r)return;H.current=!0,U.current=e.button===0;let t=y(e.currentTarget);function n(){H.current=!1,U.current=!1,t.removeEventListener(`pointerup`,n),t.removeEventListener(`pointercancel`,n)}t.addEventListener(`pointerup`,n),t.addEventListener(`pointercancel`,n)}return u(`button`,e,{state:{disabled:r,active:F,orientation:v,tabActivationDirection:x},ref:[t,B,N,R],props:[M,{role:`tab`,"aria-controls":V,"aria-selected":F,id:j,onClick:G,onFocus:K,onPointerDown:J,[re]:F?``:void 0,onKeyDownCapture(){I.current=!0}},l,z],stateAttributesMapping:Z})}),ce=`data-index`,le={...Z,...a},ue=q.forwardRef(function(e,t){let{className:n,value:r,render:a,keepMounted:s=!1,style:c,...l}=e,{value:d,getTabIdByPanelValue:f,orientation:p,tabActivationDirection:m,registerMountedTabPanel:g}=Y(),_=E(),{ref:v,index:y}=K(),b=r===d,{mounted:x,transitionStatus:S,setMounted:C}=o(b),w=!x,T=f(r),D={hidden:w,orientation:p,tabActivationDirection:m,transitionStatus:S},O=q.useRef(null),k=u(`div`,e,{state:D,ref:[t,v,O],props:[{"aria-labelledby":T,hidden:w,id:_,role:`tabpanel`,tabIndex:b?0:-1,inert:z(!b),[ce]:y},l],stateAttributesMapping:le});return i({open:b,ref:O,onComplete(){b||C(!1)}}),h(()=>{if(!(_==null||w&&!s))return g(r,_)},[w,s,r,_,g]),s||x?k:null});function de(e){let{loopFocus:t=!0,orientation:n=`both`,grid:r,onLoop:i,direction:a,highlightedIndex:o,onHighlightedIndexChange:s,rootRef:u,enableHomeAndEndKeys:d=!1,stopEventPropagation:f,disabledIndices:p,modifierKeys:m=l}=e,[g,y]=q.useState(0),b=r!=null,x=q.useRef(null),S=c(x,u),C=q.useRef([]),w=q.useRef(!1),T=q.useRef(null),E=o??g,D=_((e,t=!1)=>{if(T.current=C.current[e]??null,(s??y)(e),t){let t=C.current[e];F(x.current,t,a,n)}}),z=_(e=>{if(e.size===0)return;if(w.current){let e=C.current,t=e.indexOf(T.current);if(t===-1){let t=e[E];!t||k(e,E,p)?D(fe(e,p)):T.current=t}else t!==E&&D(t);return}w.current=!0;let t=Array.from(e.keys()),r=t.find(e=>e?.hasAttribute(`data-composite-item-active`))??null,i=r?e.get(r)?.index??-1:-1;if(i!==-1)D(i);else if(k(t,E,p)){let e=A(t,{disabledIndices:p});R(t,e)||D(e)}F(x.current,r,a,n)});h(()=>{if(p==null||o!=null||!w.current)return;let e=C.current;if(k(e,E,p)){let t=A(e,{disabledIndices:p});R(e,t)||D(t)}},[p,o,E,C,D]);let V=_((e,t,n)=>i?i(e,t,n,C):n),H=_(e=>{let o=e.key===`Home`||e.key===`End`;if(!N.has(e.key)||!d&&o||pe(e,m)||!x.current)return;let s=a===`rtl`,c=s?M:L,l=s?L:M,u=n===`vertical`?I:c,h=n===`vertical`?B:l,g=v(e.nativeEvent);if(g!=null&&P(g)&&!G(g)){let t=g.selectionStart,n=g.selectionEnd,r=g.value;if(t==null||e.shiftKey||t!==n||e.key!==h&&t0)return}let _=E,y=O(C,p),S=j(C,p);r!=null&&(_=r({disabledIndices:p,elementsRef:C,event:e,highlightedIndex:E,loopFocus:t,maxIndex:S,minIndex:y,onLoop:V,orientation:n,rtl:s}));let w=n!==`vertical`&&e.key===c||n!==`horizontal`&&e.key===`ArrowDown`,T=n!==`vertical`&&e.key===l||n!==`horizontal`&&e.key===`ArrowUp`;d&&(e.key===`Home`?_=y:e.key===`End`&&(_=S)),_===E&&(w||T)&&(t&&_===S&&w?(_=y,i&&(_=i(e,E,_,C))):t&&_===y&&T?(_=S,i&&(_=i(e,E,_,C))):_=A(C.current,{startingIndex:_,decrement:T,disabledIndices:p})),_!==E&&!R(C.current,_)&&(f&&e.stopPropagation(),(b||o||w||T)&&e.preventDefault(),D(_,!0),queueMicrotask(()=>{C.current[_]?.focus()}))});return{props:{ref:S,onFocus(e){let t=x.current,n=v(e.nativeEvent);t&&n!=null&&P(n)&&n.setSelectionRange(0,n.value.length)},onKeyDown:H},highlightedIndex:E,onHighlightedIndexChange:D,elementsRef:C,onMapChange:z,relayKeyboardEvent:H}}function fe(e,t){let n=-1;for(let r=0;r({highlightedIndex:O,onHighlightedIndexChange:k,highlightItemOnHover:w,relayKeyboardEvent:M}),[O,k,w,M]);return(0,Q.jsx)(m.Provider,{value:P,children:(0,Q.jsx)(W,{elementsRef:A,onMapChange:e=>{y?.(e),j(e)},children:N})})}var he=q.forwardRef(function(e,t){let{activateOnFocus:n=!1,className:r,loopFocus:i=!0,render:a,style:o,...s}=e,{orientation:c,setTabMap:u,tabActivationDirection:d}=Y(),[f,p]=q.useState(0),[m,g]=q.useState(null),v=q.useRef(new Set),y=q.useRef(new Set),b=q.useRef(null);h(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>{v.current.forEach(e=>{e()})});return b.current=e,m&&e.observe(m),y.current.forEach(t=>{e.observe(t)}),()=>{e.disconnect(),b.current=null}},[m]);let x=_(e=>(v.current.add(e),()=>{v.current.delete(e)})),S=_(e=>(y.current.add(e),b.current?.observe(e),()=>{y.current.delete(e),b.current?.unobserve(e)})),C={orientation:c,tabActivationDirection:d},w={"aria-orientation":c===`vertical`?`vertical`:void 0,role:`tablist`},T=q.useMemo(()=>({activateOnFocus:n,registerIndicatorUpdateListener:x,registerTabResizeObserverElement:S,tabsListElement:m}),[n,x,S,m]);return(0,Q.jsx)(ae.Provider,{value:T,children:(0,Q.jsx)(me,{render:a,className:r,style:o,state:C,refs:[t,g],props:[w,s],stateAttributesMapping:Z,highlightedIndex:f,enableHomeAndEndKeys:!0,loopFocus:i,orientation:c,onHighlightedIndexChange:p,onMapChange:u,disabledIndices:l})})}),$=r();function ge(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`flex flex-col gap-4`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(ee,{className:i,"data-slot":`tabs`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function _e(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`inline-flex items-center gap-1 border-b`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(he,{className:i,"data-slot":`tabs-list`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ve(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`inline-flex items-center justify-center border-b-2 border-transparent px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-selected:border-primary data-selected:text-foreground`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(se,{className:i,"data-slot":`tabs-tab`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ye(e){let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=f(`focus-visible:outline-none`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,Q.jsx)(ue,{className:i,"data-slot":`tabs-panel`,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}export{ve as i,_e as n,ye as r,ge as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-BxxtIXTE.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-1LzJEWry.js similarity index 97% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-BxxtIXTE.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-1LzJEWry.js index 71cf2dfda..e9a6d51c8 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-BxxtIXTE.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-editor-1LzJEWry.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./plus-BodhJT2v.js";import{t as te}from"./trash-DVab4pEz.js";import{t as i}from"./button-BarTr35m.js";import{t as a}from"./input-6kdUb_DH.js";var ne=r(),o=t(n(),1),s=e();function re(e){return e.map((e,t)=>({id:t,key:e.Key??``,value:e.Value??``}))}function c(e){return e.map(e=>({key:e.key.trim(),value:e.value})).filter(e=>e.key.length>0)}function l(e){let t=(0,ne.c)(66),{tags:n,onSubmit:r,isPending:l,error:d,isSuccess:f}=e,p;t[0]===n?p=t[1]:(p=re(n),t[0]=n,t[1]=p);let m=p,[h,g]=(0,o.useState)(m),[_,oe]=(0,o.useState)(m.length),v;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(v=(e,t)=>{g(n=>n.map(n=>n.id===e?{...n,...t}:n))},t[2]=v):v=t[2];let y=v,b;t[3]===_?b=t[4]:(b=()=>{g(e=>[...e,{id:_,key:``,value:``}]),oe(ae)},t[3]=_,t[4]=b);let x=b,S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>{g(t=>t.filter(t=>t.id!==e))},t[5]=S):S=t[5];let C=S,w;t[6]===m?w=t[7]:(w=()=>{g(m)},t[6]=m,t[7]=w);let T=w,E;t[8]===h?E=t[9]:(E=h.some(u),t[8]=h,t[9]=E);let D=E,O,k,A,j;if(t[10]!==D||t[11]!==h){A=c(h);let e=A.map(ie);O=new Set(e).size!==e.length,k=D||O,j=JSON.stringify(A),t[10]=D,t[11]=h,t[12]=O,t[13]=k,t[14]=A,t[15]=j}else O=t[12],k=t[13],A=t[14],j=t[15];let M;t[16]===m?M=t[17]:(M=JSON.stringify(c(m)),t[16]=m,t[17]=M);let N=j!==M,P;t[18]!==N||t[19]!==k||t[20]!==A||t[21]!==r?(P=e=>{e.preventDefault(),!k&&N&&r(A)},t[18]=N,t[19]=k,t[20]=A,t[21]=r,t[22]=P):P=t[22];let F;t[23]===d?F=t[24]:(F=d&&(0,s.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:d.message||`Failed to save tags`}),t[23]=d,t[24]=F);let I;t[25]!==N||t[26]!==f?(I=f&&!N&&(0,s.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Tags saved.`}),t[25]=N,t[26]=f,t[27]=I):I=t[27];let L;t[28]===h.length?L=t[29]:(L=h.length===0&&(0,s.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No tags.`}),t[28]=h.length,t[29]=L);let R;if(t[30]!==h){let e;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(e=e=>(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,s.jsx)(a,{"aria-label":`Tag key`,onChange:t=>{y(e.id,{key:t.target.value})},placeholder:`Key`,value:e.key}),(0,s.jsx)(a,{"aria-label":`Tag value`,onChange:t=>{y(e.id,{value:t.target.value})},placeholder:`Value`,value:e.value}),(0,s.jsx)(i,{"aria-label":`Remove tag`,onClick:()=>{C(e.id)},size:`icon`,type:`button`,variant:`ghost`,children:(0,s.jsx)(te,{className:`size-4`})})]},e.id),t[32]=e):e=t[32],R=h.map(e),t[30]=h,t[31]=R}else R=t[31];let z;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,s.jsx)(ee,{className:`size-4`}),t[33]=z):z=t[33];let B;t[34]===x?B=t[35]:(B=(0,s.jsx)(`div`,{children:(0,s.jsxs)(i,{onClick:x,size:`sm`,type:`button`,variant:`secondary`,children:[z,` Add tag`]})}),t[34]=x,t[35]=B);let V;t[36]===D?V=t[37]:(V=D&&(0,s.jsx)(`p`,{className:`text-xs text-destructive`,children:`Every tag with a value needs a key.`}),t[36]=D,t[37]=V);let H;t[38]===O?H=t[39]:(H=O&&(0,s.jsx)(`p`,{className:`text-xs text-destructive`,children:`Tag keys must be unique.`}),t[38]=O,t[39]=H);let U;t[40]!==L||t[41]!==R||t[42]!==B||t[43]!==V||t[44]!==H?(U=(0,s.jsxs)(`div`,{className:`flex flex-col gap-2 p-4`,children:[L,R,B,V,H]}),t[40]=L,t[41]=R,t[42]=B,t[43]=V,t[44]=H,t[45]=U):U=t[45];let W=N?`Unsaved changes`:`No changes`,G;t[46]===W?G=t[47]:(G=(0,s.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:W}),t[46]=W,t[47]=G);let K=l||!N,q;t[48]!==T||t[49]!==K?(q=(0,s.jsx)(i,{disabled:K,onClick:T,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[48]=T,t[49]=K,t[50]=q):q=t[50];let J=l||k||!N,Y=l?`Saving…`:`Save changes`,X;t[51]!==J||t[52]!==Y?(X=(0,s.jsx)(i,{disabled:J,size:`sm`,type:`submit`,children:Y}),t[51]=J,t[52]=Y,t[53]=X):X=t[53];let Z;t[54]!==G||t[55]!==q||t[56]!==X?(Z=(0,s.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[G,q,X]}),t[54]=G,t[55]=q,t[56]=X,t[57]=Z):Z=t[57];let Q;t[58]!==U||t[59]!==Z?(Q=(0,s.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[U,Z]}),t[58]=U,t[59]=Z,t[60]=Q):Q=t[60];let $;return t[61]!==F||t[62]!==I||t[63]!==Q||t[64]!==P?($=(0,s.jsxs)(`form`,{onSubmit:P,children:[F,I,Q]}),t[61]=F,t[62]=I,t[63]=Q,t[64]=P,t[65]=$):$=t[65],$}function ie(e){return e.key}function u(e){return e.key.trim().length===0&&e.value.length>0}function ae(e){return e+1}export{l as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as ee}from"./plus-BodhJT2v.js";import{t as te}from"./trash-DVab4pEz.js";import{t as i}from"./button-qf9lLJ2x.js";import{t as a}from"./input-D3aUBtS6.js";var ne=r(),o=t(n(),1),s=e();function re(e){return e.map((e,t)=>({id:t,key:e.Key??``,value:e.Value??``}))}function c(e){return e.map(e=>({key:e.key.trim(),value:e.value})).filter(e=>e.key.length>0)}function l(e){let t=(0,ne.c)(66),{tags:n,onSubmit:r,isPending:l,error:d,isSuccess:f}=e,p;t[0]===n?p=t[1]:(p=re(n),t[0]=n,t[1]=p);let m=p,[h,g]=(0,o.useState)(m),[_,oe]=(0,o.useState)(m.length),v;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(v=(e,t)=>{g(n=>n.map(n=>n.id===e?{...n,...t}:n))},t[2]=v):v=t[2];let y=v,b;t[3]===_?b=t[4]:(b=()=>{g(e=>[...e,{id:_,key:``,value:``}]),oe(ae)},t[3]=_,t[4]=b);let x=b,S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S=e=>{g(t=>t.filter(t=>t.id!==e))},t[5]=S):S=t[5];let C=S,w;t[6]===m?w=t[7]:(w=()=>{g(m)},t[6]=m,t[7]=w);let T=w,E;t[8]===h?E=t[9]:(E=h.some(u),t[8]=h,t[9]=E);let D=E,O,k,A,j;if(t[10]!==D||t[11]!==h){A=c(h);let e=A.map(ie);O=new Set(e).size!==e.length,k=D||O,j=JSON.stringify(A),t[10]=D,t[11]=h,t[12]=O,t[13]=k,t[14]=A,t[15]=j}else O=t[12],k=t[13],A=t[14],j=t[15];let M;t[16]===m?M=t[17]:(M=JSON.stringify(c(m)),t[16]=m,t[17]=M);let N=j!==M,P;t[18]!==N||t[19]!==k||t[20]!==A||t[21]!==r?(P=e=>{e.preventDefault(),!k&&N&&r(A)},t[18]=N,t[19]=k,t[20]=A,t[21]=r,t[22]=P):P=t[22];let F;t[23]===d?F=t[24]:(F=d&&(0,s.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:d.message||`Failed to save tags`}),t[23]=d,t[24]=F);let I;t[25]!==N||t[26]!==f?(I=f&&!N&&(0,s.jsx)(`output`,{className:`mb-4 block rounded-md border border-emerald-500 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400`,children:`Tags saved.`}),t[25]=N,t[26]=f,t[27]=I):I=t[27];let L;t[28]===h.length?L=t[29]:(L=h.length===0&&(0,s.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No tags.`}),t[28]=h.length,t[29]=L);let R;if(t[30]!==h){let e;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(e=e=>(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,s.jsx)(a,{"aria-label":`Tag key`,onChange:t=>{y(e.id,{key:t.target.value})},placeholder:`Key`,value:e.key}),(0,s.jsx)(a,{"aria-label":`Tag value`,onChange:t=>{y(e.id,{value:t.target.value})},placeholder:`Value`,value:e.value}),(0,s.jsx)(i,{"aria-label":`Remove tag`,onClick:()=>{C(e.id)},size:`icon`,type:`button`,variant:`ghost`,children:(0,s.jsx)(te,{className:`size-4`})})]},e.id),t[32]=e):e=t[32],R=h.map(e),t[30]=h,t[31]=R}else R=t[31];let z;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,s.jsx)(ee,{className:`size-4`}),t[33]=z):z=t[33];let B;t[34]===x?B=t[35]:(B=(0,s.jsx)(`div`,{children:(0,s.jsxs)(i,{onClick:x,size:`sm`,type:`button`,variant:`secondary`,children:[z,` Add tag`]})}),t[34]=x,t[35]=B);let V;t[36]===D?V=t[37]:(V=D&&(0,s.jsx)(`p`,{className:`text-xs text-destructive`,children:`Every tag with a value needs a key.`}),t[36]=D,t[37]=V);let H;t[38]===O?H=t[39]:(H=O&&(0,s.jsx)(`p`,{className:`text-xs text-destructive`,children:`Tag keys must be unique.`}),t[38]=O,t[39]=H);let U;t[40]!==L||t[41]!==R||t[42]!==B||t[43]!==V||t[44]!==H?(U=(0,s.jsxs)(`div`,{className:`flex flex-col gap-2 p-4`,children:[L,R,B,V,H]}),t[40]=L,t[41]=R,t[42]=B,t[43]=V,t[44]=H,t[45]=U):U=t[45];let W=N?`Unsaved changes`:`No changes`,G;t[46]===W?G=t[47]:(G=(0,s.jsx)(`span`,{className:`mr-auto text-xs text-muted-foreground`,children:W}),t[46]=W,t[47]=G);let K=l||!N,q;t[48]!==T||t[49]!==K?(q=(0,s.jsx)(i,{disabled:K,onClick:T,size:`sm`,type:`button`,variant:`secondary`,children:`Reset`}),t[48]=T,t[49]=K,t[50]=q):q=t[50];let J=l||k||!N,Y=l?`Saving…`:`Save changes`,X;t[51]!==J||t[52]!==Y?(X=(0,s.jsx)(i,{disabled:J,size:`sm`,type:`submit`,children:Y}),t[51]=J,t[52]=Y,t[53]=X):X=t[53];let Z;t[54]!==G||t[55]!==q||t[56]!==X?(Z=(0,s.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t p-4`,children:[G,q,X]}),t[54]=G,t[55]=q,t[56]=X,t[57]=Z):Z=t[57];let Q;t[58]!==U||t[59]!==Z?(Q=(0,s.jsxs)(`div`,{className:`rounded-lg border bg-card`,children:[U,Z]}),t[58]=U,t[59]=Z,t[60]=Q):Q=t[60];let $;return t[61]!==F||t[62]!==I||t[63]!==Q||t[64]!==P?($=(0,s.jsxs)(`form`,{onSubmit:P,children:[F,I,Q]}),t[61]=F,t[62]=I,t[63]=Q,t[64]=P,t[65]=$):$=t[65],$}function ie(e){return e.key}function u(e){return e.key.trim().length===0&&e.value.length>0}function ae(e){return e+1}export{l as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Dk9nPDzt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Bjg8Nmui.js similarity index 90% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Dk9nPDzt.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Bjg8Nmui.js index a650ddafb..8953f9a2d 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Dk9nPDzt.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/tags-field-array-Bjg8Nmui.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./plus-BodhJT2v.js";import{t as r}from"./trash-DVab4pEz.js";import{t as i}from"./button-BarTr35m.js";import{t as a}from"./input-6kdUb_DH.js";import{n as o,r as s}from"./zod-DF_n2ejy.js";import{r as c,s as l,t as u}from"./field-c7GHI5st.js";var d=t(),f=e();function p(e){let t=(0,d.c)(21),{control:a,name:c}=e,p;t[0]!==a||t[1]!==c?(p={control:a,name:c},t[0]=a,t[1]=c,t[2]=p):p=t[2];let{fields:g,append:_,remove:v}=s(p),y;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,f.jsx)(l,{children:`Tags`}),t[3]=y):y=t[3];let b;if(t[4]!==a||t[5]!==g||t[6]!==c||t[7]!==v){let e;t[9]!==a||t[10]!==c||t[11]!==v?(e=(e,t)=>(0,f.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,f.jsx)(o,{control:a,name:`${c}.${t}.key`,render:h}),(0,f.jsx)(o,{control:a,name:`${c}.${t}.value`,render:m}),(0,f.jsx)(i,{"aria-label":`Remove tag ${t+1}`,onClick:()=>{v(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,f.jsx)(r,{className:`size-3.5`})})]},e.id),t[9]=a,t[10]=c,t[11]=v,t[12]=e):e=t[12],b=g.map(e),t[4]=a,t[5]=g,t[6]=c,t[7]=v,t[8]=b}else b=t[8];let x;t[13]===_?x=t[14]:(x=()=>{_({key:``,value:``})},t[13]=_,t[14]=x);let S;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,f.jsx)(n,{className:`size-3.5`}),t[15]=S):S=t[15];let C;t[16]===x?C=t[17]:(C=(0,f.jsxs)(i,{onClick:x,size:`sm`,type:`button`,variant:`outline`,children:[S,`Add Tag`]}),t[16]=x,t[17]=C);let w;return t[18]!==b||t[19]!==C?(w=(0,f.jsxs)(u,{children:[y,(0,f.jsxs)(`div`,{className:`space-y-2`,children:[b,C]})]}),t[18]=b,t[19]=C,t[20]=w):w=t[20],w}function m(e){let{field:t,fieldState:n}=e;return(0,f.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(a,{"aria-invalid":!!n.error,placeholder:`Value`,...t}),(0,f.jsx)(c,{errors:[n.error]})]})}function h(e){let{field:t,fieldState:n}=e;return(0,f.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(a,{"aria-invalid":!!n.error,placeholder:`Key`,...t}),(0,f.jsx)(c,{errors:[n.error]})]})}export{p as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{t as n}from"./plus-BodhJT2v.js";import{t as r}from"./trash-DVab4pEz.js";import{t as i}from"./button-qf9lLJ2x.js";import{t as a}from"./input-D3aUBtS6.js";import{n as o,r as s}from"./zod-A4qtKH_p.js";import{r as c,s as l,t as u}from"./field-CS-ql6du.js";var d=t(),f=e();function p(e){let t=(0,d.c)(21),{control:a,name:c}=e,p;t[0]!==a||t[1]!==c?(p={control:a,name:c},t[0]=a,t[1]=c,t[2]=p):p=t[2];let{fields:g,append:_,remove:v}=s(p),y;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,f.jsx)(l,{children:`Tags`}),t[3]=y):y=t[3];let b;if(t[4]!==a||t[5]!==g||t[6]!==c||t[7]!==v){let e;t[9]!==a||t[10]!==c||t[11]!==v?(e=(e,t)=>(0,f.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,f.jsx)(o,{control:a,name:`${c}.${t}.key`,render:h}),(0,f.jsx)(o,{control:a,name:`${c}.${t}.value`,render:m}),(0,f.jsx)(i,{"aria-label":`Remove tag ${t+1}`,onClick:()=>{v(t)},size:`icon`,type:`button`,variant:`ghost`,children:(0,f.jsx)(r,{className:`size-3.5`})})]},e.id),t[9]=a,t[10]=c,t[11]=v,t[12]=e):e=t[12],b=g.map(e),t[4]=a,t[5]=g,t[6]=c,t[7]=v,t[8]=b}else b=t[8];let x;t[13]===_?x=t[14]:(x=()=>{_({key:``,value:``})},t[13]=_,t[14]=x);let S;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,f.jsx)(n,{className:`size-3.5`}),t[15]=S):S=t[15];let C;t[16]===x?C=t[17]:(C=(0,f.jsxs)(i,{onClick:x,size:`sm`,type:`button`,variant:`outline`,children:[S,`Add Tag`]}),t[16]=x,t[17]=C);let w;return t[18]!==b||t[19]!==C?(w=(0,f.jsxs)(u,{children:[y,(0,f.jsxs)(`div`,{className:`space-y-2`,children:[b,C]})]}),t[18]=b,t[19]=C,t[20]=w):w=t[20],w}function m(e){let{field:t,fieldState:n}=e;return(0,f.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(a,{"aria-invalid":!!n.error,placeholder:`Value`,...t}),(0,f.jsx)(c,{errors:[n.error]})]})}function h(e){let{field:t,fieldState:n}=e;return(0,f.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(a,{"aria-invalid":!!n.error,placeholder:`Key`,...t}),(0,f.jsx)(c,{errors:[n.error]})]})}export{p as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-DvZOw-26.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-WUXG3BOb.js similarity index 94% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-DvZOw-26.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-WUXG3BOb.js index b949f7217..c7b67d7b4 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-DvZOw-26.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/target-group-form-WUXG3BOb.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{sn as ee}from"./cluster-config-xw_Q7X1e.js";import{c as te,i as n,n as ne,s as re,t as ie}from"./select-B01jpDaX.js";import{t as r}from"./input-6kdUb_DH.js";import{a as ae,n as oe}from"./zod-DF_n2ejy.js";import{r as i,s as a,t as o}from"./field-c7GHI5st.js";import{t as se}from"./tags-field-array-Dk9nPDzt.js";import{n as ce,r as le,t as ue}from"./collapsible-k5LqEmTn.js";var de=t(),s=e(),fe=[`HTTP`,`HTTPS`,`TCP`,`UDP`,`TLS`,`TCP_UDP`];function pe(e){let t=(0,de.c)(126),{form:ee,vpcs:n,allowedProtocols:pe}=e,ge=pe===void 0?fe:pe,{control:c,register:l,setValue:u,formState:_e}=ee,{errors:d}=_e,ve;t[0]===c?ve=t[1]:(ve={control:c,name:`protocol`},t[0]=c,t[1]=ve);let ye=ae(ve),f=ye===`HTTP`||ye===`HTTPS`,be;t[2]===u?be=t[3]:(be=e=>{e&&(u(`protocol`,e),u(`healthCheck.protocol`,e===`HTTP`||e===`HTTPS`?`HTTP`:`TCP`))},t[2]=u,t[3]=be);let xe=be,Se;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-name`,children:`Name`})}),t[4]=Se):Se=t[4];let Ce=!!d.name,p;t[5]===l?p=t[6]:(p=l(`name`),t[5]=l,t[6]=p);let m;t[7]!==Ce||t[8]!==p?(m=(0,s.jsx)(r,{"aria-invalid":Ce,id:`tg-name`,placeholder:`my-target-group`,...p}),t[7]=Ce,t[8]=p,t[9]=m):m=t[9];let h;t[10]===d.name?h=t[11]:(h=(0,s.jsx)(i,{errors:[d.name]}),t[10]=d.name,t[11]=h);let g;t[12]!==m||t[13]!==h?(g=(0,s.jsxs)(o,{children:[Se,m,h]}),t[12]=m,t[13]=h,t[14]=g):g=t[14];let we;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-protocol`,children:`Protocol`})}),t[15]=we):we=t[15];let _;t[16]!==ge||t[17]!==xe?(_=e=>{let{field:t}=e;return(0,s.jsxs)(ie,{onValueChange:xe,value:t.value,children:[(0,s.jsx)(re,{className:`w-full`,id:`tg-protocol`,children:(0,s.jsx)(te,{})}),(0,s.jsx)(ne,{children:ge.map(he)})]})},t[16]=ge,t[17]=xe,t[18]=_):_=t[18];let v;t[19]!==c||t[20]!==_?(v=(0,s.jsxs)(o,{children:[we,(0,s.jsx)(oe,{control:c,name:`protocol`,render:_})]}),t[19]=c,t[20]=_,t[21]=v):v=t[21];let Te;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-port`,children:`Port`})}),t[22]=Te):Te=t[22];let Ee=!!d.port,y;t[23]===l?y=t[24]:(y=l(`port`,{valueAsNumber:!0}),t[23]=l,t[24]=y);let b;t[25]!==Ee||t[26]!==y?(b=(0,s.jsx)(r,{"aria-invalid":Ee,id:`tg-port`,inputMode:`numeric`,placeholder:`80`,type:`number`,...y}),t[25]=Ee,t[26]=y,t[27]=b):b=t[27];let x;t[28]===d.port?x=t[29]:(x=(0,s.jsx)(i,{errors:[d.port]}),t[28]=d.port,t[29]=x);let S;t[30]!==b||t[31]!==x?(S=(0,s.jsxs)(o,{children:[Te,b,x]}),t[30]=b,t[31]=x,t[32]=S):S=t[32];let De;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(De=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-vpc`,children:`VPC`})}),t[33]=De):De=t[33];let C;t[34]!==d.vpcId||t[35]!==n?(C=e=>{let{field:t}=e;return(0,s.jsxs)(ie,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,s.jsx)(re,{"aria-invalid":!!d.vpcId,className:`w-full`,id:`tg-vpc`,children:(0,s.jsx)(te,{placeholder:`Select VPC`})}),(0,s.jsx)(ne,{children:n.map(me)})]})},t[34]=d.vpcId,t[35]=n,t[36]=C):C=t[36];let w;t[37]!==c||t[38]!==C?(w=(0,s.jsx)(oe,{control:c,name:`vpcId`,render:C}),t[37]=c,t[38]=C,t[39]=w):w=t[39];let T;t[40]===d.vpcId?T=t[41]:(T=(0,s.jsx)(i,{errors:[d.vpcId]}),t[40]=d.vpcId,t[41]=T);let E;t[42]!==w||t[43]!==T?(E=(0,s.jsxs)(o,{children:[De,w,T]}),t[42]=w,t[43]=T,t[44]=E):E=t[44];let D;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,s.jsx)(le,{className:`text-left text-sm font-medium text-muted-foreground hover:text-foreground`,render:(0,s.jsx)(`button`,{"aria-label":`Health check settings`,type:`button`}),children:`Health check settings`}),t[45]=D):D=t[45];let O;t[46]!==d.healthCheck?.path||t[47]!==f||t[48]!==l?(O=f&&(0,s.jsxs)(o,{children:[(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-path`,children:`Path`})}),(0,s.jsx)(r,{"aria-invalid":!!d.healthCheck?.path,id:`hc-path`,placeholder:`/`,...l(`healthCheck.path`)}),(0,s.jsx)(i,{errors:[d.healthCheck?.path]})]}),t[46]=d.healthCheck?.path,t[47]=f,t[48]=l,t[49]=O):O=t[49];let k;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-port`,children:`Port`})}),t[50]=k):k=t[50];let Oe=!!d.healthCheck?.port,A;t[51]===l?A=t[52]:(A=l(`healthCheck.port`),t[51]=l,t[52]=A);let j;t[53]!==Oe||t[54]!==A?(j=(0,s.jsx)(r,{"aria-invalid":Oe,id:`hc-port`,placeholder:`traffic-port or numeric`,...A}),t[53]=Oe,t[54]=A,t[55]=j):j=t[55];let ke=d.healthCheck?.port,M;t[56]===ke?M=t[57]:(M=(0,s.jsx)(i,{errors:[ke]}),t[56]=ke,t[57]=M);let N;t[58]!==j||t[59]!==M?(N=(0,s.jsxs)(o,{children:[k,j,M]}),t[58]=j,t[59]=M,t[60]=N):N=t[60];let Ae;t[61]===Symbol.for(`react.memo_cache_sentinel`)?(Ae=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-interval`,children:`Interval (seconds)`})}),t[61]=Ae):Ae=t[61];let je=!!d.healthCheck?.intervalSeconds,P;t[62]===l?P=t[63]:(P=l(`healthCheck.intervalSeconds`,{valueAsNumber:!0}),t[62]=l,t[63]=P);let F;t[64]!==je||t[65]!==P?(F=(0,s.jsx)(r,{"aria-invalid":je,id:`hc-interval`,inputMode:`numeric`,type:`number`,...P}),t[64]=je,t[65]=P,t[66]=F):F=t[66];let Me=d.healthCheck?.intervalSeconds,I;t[67]===Me?I=t[68]:(I=(0,s.jsx)(i,{errors:[Me]}),t[67]=Me,t[68]=I);let L;t[69]!==F||t[70]!==I?(L=(0,s.jsxs)(o,{children:[Ae,F,I]}),t[69]=F,t[70]=I,t[71]=L):L=t[71];let Ne;t[72]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-timeout`,children:`Timeout (seconds)`})}),t[72]=Ne):Ne=t[72];let Pe=!!d.healthCheck?.timeoutSeconds,R;t[73]===l?R=t[74]:(R=l(`healthCheck.timeoutSeconds`,{valueAsNumber:!0}),t[73]=l,t[74]=R);let z;t[75]!==Pe||t[76]!==R?(z=(0,s.jsx)(r,{"aria-invalid":Pe,id:`hc-timeout`,inputMode:`numeric`,type:`number`,...R}),t[75]=Pe,t[76]=R,t[77]=z):z=t[77];let Fe=d.healthCheck?.timeoutSeconds,B;t[78]===Fe?B=t[79]:(B=(0,s.jsx)(i,{errors:[Fe]}),t[78]=Fe,t[79]=B);let V;t[80]!==z||t[81]!==B?(V=(0,s.jsxs)(o,{children:[Ne,z,B]}),t[80]=z,t[81]=B,t[82]=V):V=t[82];let Ie;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-healthy`,children:`Healthy threshold`})}),t[83]=Ie):Ie=t[83];let Le=!!d.healthCheck?.healthyThresholdCount,H;t[84]===l?H=t[85]:(H=l(`healthCheck.healthyThresholdCount`,{valueAsNumber:!0}),t[84]=l,t[85]=H);let U;t[86]!==Le||t[87]!==H?(U=(0,s.jsx)(r,{"aria-invalid":Le,id:`hc-healthy`,inputMode:`numeric`,type:`number`,...H}),t[86]=Le,t[87]=H,t[88]=U):U=t[88];let Re=d.healthCheck?.healthyThresholdCount,W;t[89]===Re?W=t[90]:(W=(0,s.jsx)(i,{errors:[Re]}),t[89]=Re,t[90]=W);let G;t[91]!==U||t[92]!==W?(G=(0,s.jsxs)(o,{children:[Ie,U,W]}),t[91]=U,t[92]=W,t[93]=G):G=t[93];let ze;t[94]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-unhealthy`,children:`Unhealthy threshold`})}),t[94]=ze):ze=t[94];let Be=!!d.healthCheck?.unhealthyThresholdCount,K;t[95]===l?K=t[96]:(K=l(`healthCheck.unhealthyThresholdCount`,{valueAsNumber:!0}),t[95]=l,t[96]=K);let q;t[97]!==Be||t[98]!==K?(q=(0,s.jsx)(r,{"aria-invalid":Be,id:`hc-unhealthy`,inputMode:`numeric`,type:`number`,...K}),t[97]=Be,t[98]=K,t[99]=q):q=t[99];let Ve=d.healthCheck?.unhealthyThresholdCount,J;t[100]===Ve?J=t[101]:(J=(0,s.jsx)(i,{errors:[Ve]}),t[100]=Ve,t[101]=J);let Y;t[102]!==q||t[103]!==J?(Y=(0,s.jsxs)(o,{children:[ze,q,J]}),t[102]=q,t[103]=J,t[104]=Y):Y=t[104];let X;t[105]!==d.healthCheck?.matcher||t[106]!==f||t[107]!==l?(X=f&&(0,s.jsxs)(o,{children:[(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-matcher`,children:`Matcher (HTTP codes)`})}),(0,s.jsx)(r,{"aria-invalid":!!d.healthCheck?.matcher,id:`hc-matcher`,placeholder:`200 or 200-299 or 200,201`,...l(`healthCheck.matcher`)}),(0,s.jsx)(i,{errors:[d.healthCheck?.matcher]})]}),t[105]=d.healthCheck?.matcher,t[106]=f,t[107]=l,t[108]=X):X=t[108];let Z;t[109]!==O||t[110]!==N||t[111]!==L||t[112]!==V||t[113]!==G||t[114]!==Y||t[115]!==X?(Z=(0,s.jsxs)(ue,{children:[D,(0,s.jsxs)(ce,{className:`mt-3 space-y-4 border-l-2 border-muted pl-4`,children:[O,N,L,V,G,Y,X]})]}),t[109]=O,t[110]=N,t[111]=L,t[112]=V,t[113]=G,t[114]=Y,t[115]=X,t[116]=Z):Z=t[116];let Q;t[117]===c?Q=t[118]:(Q=(0,s.jsx)(se,{control:c,name:`tags`}),t[117]=c,t[118]=Q);let $;return t[119]!==g||t[120]!==v||t[121]!==S||t[122]!==E||t[123]!==Z||t[124]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[g,v,S,E,Z,Q]}),t[119]=g,t[120]=v,t[121]=S,t[122]=E,t[123]=Z,t[124]=Q,t[125]=$):$=t[125],$}function me(e){let t=ee(e.Tags);return(0,s.jsx)(n,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function he(e){return(0,s.jsx)(n,{value:e,children:e},e)}export{pe as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{cn as ee}from"./cluster-config-DkOiY8HH.js";import{c as te,i as n,n as ne,s as re,t as ie}from"./select-Cn66OoPn.js";import{t as r}from"./input-D3aUBtS6.js";import{a as ae,n as oe}from"./zod-A4qtKH_p.js";import{r as i,s as a,t as o}from"./field-CS-ql6du.js";import{t as se}from"./tags-field-array-Bjg8Nmui.js";import{n as ce,r as le,t as ue}from"./collapsible-Sj-k2ZCd.js";var de=t(),s=e(),fe=[`HTTP`,`HTTPS`,`TCP`,`UDP`,`TLS`,`TCP_UDP`];function pe(e){let t=(0,de.c)(126),{form:ee,vpcs:n,allowedProtocols:pe}=e,ge=pe===void 0?fe:pe,{control:c,register:l,setValue:u,formState:_e}=ee,{errors:d}=_e,ve;t[0]===c?ve=t[1]:(ve={control:c,name:`protocol`},t[0]=c,t[1]=ve);let ye=ae(ve),f=ye===`HTTP`||ye===`HTTPS`,be;t[2]===u?be=t[3]:(be=e=>{e&&(u(`protocol`,e),u(`healthCheck.protocol`,e===`HTTP`||e===`HTTPS`?`HTTP`:`TCP`))},t[2]=u,t[3]=be);let xe=be,Se;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-name`,children:`Name`})}),t[4]=Se):Se=t[4];let Ce=!!d.name,p;t[5]===l?p=t[6]:(p=l(`name`),t[5]=l,t[6]=p);let m;t[7]!==Ce||t[8]!==p?(m=(0,s.jsx)(r,{"aria-invalid":Ce,id:`tg-name`,placeholder:`my-target-group`,...p}),t[7]=Ce,t[8]=p,t[9]=m):m=t[9];let h;t[10]===d.name?h=t[11]:(h=(0,s.jsx)(i,{errors:[d.name]}),t[10]=d.name,t[11]=h);let g;t[12]!==m||t[13]!==h?(g=(0,s.jsxs)(o,{children:[Se,m,h]}),t[12]=m,t[13]=h,t[14]=g):g=t[14];let we;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-protocol`,children:`Protocol`})}),t[15]=we):we=t[15];let _;t[16]!==ge||t[17]!==xe?(_=e=>{let{field:t}=e;return(0,s.jsxs)(ie,{onValueChange:xe,value:t.value,children:[(0,s.jsx)(re,{className:`w-full`,id:`tg-protocol`,children:(0,s.jsx)(te,{})}),(0,s.jsx)(ne,{children:ge.map(he)})]})},t[16]=ge,t[17]=xe,t[18]=_):_=t[18];let v;t[19]!==c||t[20]!==_?(v=(0,s.jsxs)(o,{children:[we,(0,s.jsx)(oe,{control:c,name:`protocol`,render:_})]}),t[19]=c,t[20]=_,t[21]=v):v=t[21];let Te;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-port`,children:`Port`})}),t[22]=Te):Te=t[22];let Ee=!!d.port,y;t[23]===l?y=t[24]:(y=l(`port`,{valueAsNumber:!0}),t[23]=l,t[24]=y);let b;t[25]!==Ee||t[26]!==y?(b=(0,s.jsx)(r,{"aria-invalid":Ee,id:`tg-port`,inputMode:`numeric`,placeholder:`80`,type:`number`,...y}),t[25]=Ee,t[26]=y,t[27]=b):b=t[27];let x;t[28]===d.port?x=t[29]:(x=(0,s.jsx)(i,{errors:[d.port]}),t[28]=d.port,t[29]=x);let S;t[30]!==b||t[31]!==x?(S=(0,s.jsxs)(o,{children:[Te,b,x]}),t[30]=b,t[31]=x,t[32]=S):S=t[32];let De;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(De=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`tg-vpc`,children:`VPC`})}),t[33]=De):De=t[33];let C;t[34]!==d.vpcId||t[35]!==n?(C=e=>{let{field:t}=e;return(0,s.jsxs)(ie,{onValueChange:e=>{t.onChange(e)},value:t.value??``,children:[(0,s.jsx)(re,{"aria-invalid":!!d.vpcId,className:`w-full`,id:`tg-vpc`,children:(0,s.jsx)(te,{placeholder:`Select VPC`})}),(0,s.jsx)(ne,{children:n.map(me)})]})},t[34]=d.vpcId,t[35]=n,t[36]=C):C=t[36];let w;t[37]!==c||t[38]!==C?(w=(0,s.jsx)(oe,{control:c,name:`vpcId`,render:C}),t[37]=c,t[38]=C,t[39]=w):w=t[39];let T;t[40]===d.vpcId?T=t[41]:(T=(0,s.jsx)(i,{errors:[d.vpcId]}),t[40]=d.vpcId,t[41]=T);let E;t[42]!==w||t[43]!==T?(E=(0,s.jsxs)(o,{children:[De,w,T]}),t[42]=w,t[43]=T,t[44]=E):E=t[44];let D;t[45]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,s.jsx)(le,{className:`text-left text-sm font-medium text-muted-foreground hover:text-foreground`,render:(0,s.jsx)(`button`,{"aria-label":`Health check settings`,type:`button`}),children:`Health check settings`}),t[45]=D):D=t[45];let O;t[46]!==d.healthCheck?.path||t[47]!==f||t[48]!==l?(O=f&&(0,s.jsxs)(o,{children:[(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-path`,children:`Path`})}),(0,s.jsx)(r,{"aria-invalid":!!d.healthCheck?.path,id:`hc-path`,placeholder:`/`,...l(`healthCheck.path`)}),(0,s.jsx)(i,{errors:[d.healthCheck?.path]})]}),t[46]=d.healthCheck?.path,t[47]=f,t[48]=l,t[49]=O):O=t[49];let k;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(k=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-port`,children:`Port`})}),t[50]=k):k=t[50];let Oe=!!d.healthCheck?.port,A;t[51]===l?A=t[52]:(A=l(`healthCheck.port`),t[51]=l,t[52]=A);let j;t[53]!==Oe||t[54]!==A?(j=(0,s.jsx)(r,{"aria-invalid":Oe,id:`hc-port`,placeholder:`traffic-port or numeric`,...A}),t[53]=Oe,t[54]=A,t[55]=j):j=t[55];let ke=d.healthCheck?.port,M;t[56]===ke?M=t[57]:(M=(0,s.jsx)(i,{errors:[ke]}),t[56]=ke,t[57]=M);let N;t[58]!==j||t[59]!==M?(N=(0,s.jsxs)(o,{children:[k,j,M]}),t[58]=j,t[59]=M,t[60]=N):N=t[60];let Ae;t[61]===Symbol.for(`react.memo_cache_sentinel`)?(Ae=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-interval`,children:`Interval (seconds)`})}),t[61]=Ae):Ae=t[61];let je=!!d.healthCheck?.intervalSeconds,P;t[62]===l?P=t[63]:(P=l(`healthCheck.intervalSeconds`,{valueAsNumber:!0}),t[62]=l,t[63]=P);let F;t[64]!==je||t[65]!==P?(F=(0,s.jsx)(r,{"aria-invalid":je,id:`hc-interval`,inputMode:`numeric`,type:`number`,...P}),t[64]=je,t[65]=P,t[66]=F):F=t[66];let Me=d.healthCheck?.intervalSeconds,I;t[67]===Me?I=t[68]:(I=(0,s.jsx)(i,{errors:[Me]}),t[67]=Me,t[68]=I);let L;t[69]!==F||t[70]!==I?(L=(0,s.jsxs)(o,{children:[Ae,F,I]}),t[69]=F,t[70]=I,t[71]=L):L=t[71];let Ne;t[72]===Symbol.for(`react.memo_cache_sentinel`)?(Ne=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-timeout`,children:`Timeout (seconds)`})}),t[72]=Ne):Ne=t[72];let Pe=!!d.healthCheck?.timeoutSeconds,R;t[73]===l?R=t[74]:(R=l(`healthCheck.timeoutSeconds`,{valueAsNumber:!0}),t[73]=l,t[74]=R);let z;t[75]!==Pe||t[76]!==R?(z=(0,s.jsx)(r,{"aria-invalid":Pe,id:`hc-timeout`,inputMode:`numeric`,type:`number`,...R}),t[75]=Pe,t[76]=R,t[77]=z):z=t[77];let Fe=d.healthCheck?.timeoutSeconds,B;t[78]===Fe?B=t[79]:(B=(0,s.jsx)(i,{errors:[Fe]}),t[78]=Fe,t[79]=B);let V;t[80]!==z||t[81]!==B?(V=(0,s.jsxs)(o,{children:[Ne,z,B]}),t[80]=z,t[81]=B,t[82]=V):V=t[82];let Ie;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-healthy`,children:`Healthy threshold`})}),t[83]=Ie):Ie=t[83];let Le=!!d.healthCheck?.healthyThresholdCount,H;t[84]===l?H=t[85]:(H=l(`healthCheck.healthyThresholdCount`,{valueAsNumber:!0}),t[84]=l,t[85]=H);let U;t[86]!==Le||t[87]!==H?(U=(0,s.jsx)(r,{"aria-invalid":Le,id:`hc-healthy`,inputMode:`numeric`,type:`number`,...H}),t[86]=Le,t[87]=H,t[88]=U):U=t[88];let Re=d.healthCheck?.healthyThresholdCount,W;t[89]===Re?W=t[90]:(W=(0,s.jsx)(i,{errors:[Re]}),t[89]=Re,t[90]=W);let G;t[91]!==U||t[92]!==W?(G=(0,s.jsxs)(o,{children:[Ie,U,W]}),t[91]=U,t[92]=W,t[93]=G):G=t[93];let ze;t[94]===Symbol.for(`react.memo_cache_sentinel`)?(ze=(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-unhealthy`,children:`Unhealthy threshold`})}),t[94]=ze):ze=t[94];let Be=!!d.healthCheck?.unhealthyThresholdCount,K;t[95]===l?K=t[96]:(K=l(`healthCheck.unhealthyThresholdCount`,{valueAsNumber:!0}),t[95]=l,t[96]=K);let q;t[97]!==Be||t[98]!==K?(q=(0,s.jsx)(r,{"aria-invalid":Be,id:`hc-unhealthy`,inputMode:`numeric`,type:`number`,...K}),t[97]=Be,t[98]=K,t[99]=q):q=t[99];let Ve=d.healthCheck?.unhealthyThresholdCount,J;t[100]===Ve?J=t[101]:(J=(0,s.jsx)(i,{errors:[Ve]}),t[100]=Ve,t[101]=J);let Y;t[102]!==q||t[103]!==J?(Y=(0,s.jsxs)(o,{children:[ze,q,J]}),t[102]=q,t[103]=J,t[104]=Y):Y=t[104];let X;t[105]!==d.healthCheck?.matcher||t[106]!==f||t[107]!==l?(X=f&&(0,s.jsxs)(o,{children:[(0,s.jsx)(a,{children:(0,s.jsx)(`label`,{htmlFor:`hc-matcher`,children:`Matcher (HTTP codes)`})}),(0,s.jsx)(r,{"aria-invalid":!!d.healthCheck?.matcher,id:`hc-matcher`,placeholder:`200 or 200-299 or 200,201`,...l(`healthCheck.matcher`)}),(0,s.jsx)(i,{errors:[d.healthCheck?.matcher]})]}),t[105]=d.healthCheck?.matcher,t[106]=f,t[107]=l,t[108]=X):X=t[108];let Z;t[109]!==O||t[110]!==N||t[111]!==L||t[112]!==V||t[113]!==G||t[114]!==Y||t[115]!==X?(Z=(0,s.jsxs)(ue,{children:[D,(0,s.jsxs)(ce,{className:`mt-3 space-y-4 border-l-2 border-muted pl-4`,children:[O,N,L,V,G,Y,X]})]}),t[109]=O,t[110]=N,t[111]=L,t[112]=V,t[113]=G,t[114]=Y,t[115]=X,t[116]=Z):Z=t[116];let Q;t[117]===c?Q=t[118]:(Q=(0,s.jsx)(se,{control:c,name:`tags`}),t[117]=c,t[118]=Q);let $;return t[119]!==g||t[120]!==v||t[121]!==S||t[122]!==E||t[123]!==Z||t[124]!==Q?($=(0,s.jsxs)(s.Fragment,{children:[g,v,S,E,Z,Q]}),t[119]=g,t[120]=v,t[121]=S,t[122]=E,t[123]=Z,t[124]=Q,t[125]=$):$=t[125],$}function me(e){let t=ee(e.Tags);return(0,s.jsx)(n,{value:e.VpcId??``,children:t?`${e.VpcId} (${t})`:`${e.VpcId} (${e.CidrBlock})`},e.VpcId)}function he(e){return(0,s.jsx)(n,{value:e,children:e},e)}export{pe as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-qkfdMMhk.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-CUmhuZtU.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-qkfdMMhk.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-CUmhuZtU.js index 6a0cf4f7a..c87d1469a 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-qkfdMMhk.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/task-definitions-CUmhuZtU.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-Dhy4xOXd.js";import{t as o}from"./button-BarTr35m.js";import{o as s}from"./ecs-gqt7DXoF.js";import{a as c}from"./ecs-8RzYyUs4.js";import{t as l}from"./page-heading-vksh_67w.js";import{t as u}from"./error-banner-DeOeVBKS.js";import{t as d}from"./delete-confirmation-dialog-SdDN4LiF.js";import{t as f}from"./ecs-section-nav-CU0acTSl.js";var p=r(),m=t(n(),1),h=e();function g(e){return e.split(`/`).at(-1)??e}function _(e){let t=(0,p.c)(24),{clusterName:n}=e,{data:r}=i(s),l=c(),[f,_]=(0,m.useState)(null),v;t[0]!==l||t[1]!==f?(v=function(){f&&l.mutate(f,{onSuccess:()=>{_(null)}})},t[0]=l,t[1]=f,t[2]=v):v=t[2];let y=v,b=n??``,x;t[3]===b?x=t[4]:(x={cluster:b},t[3]=b,t[4]=x);let S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,h.jsx)(o,{size:`sm`,children:`Register task definition`}),t[5]=S):S=t[5];let C;t[6]===x?C=t[7]:(C=(0,h.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,h.jsx)(a,{search:x,to:`/ecs/register-task-definition`,children:S})}),t[6]=x,t[7]=C);let w;t[8]!==l.error||t[9]!==l.isError?(w=l.isError&&(0,h.jsx)(u,{error:l.error instanceof Error?l.error:void 0,msg:`Failed to deregister task definition.`}),t[8]=l.error,t[9]=l.isError,t[10]=w):w=t[10];let T;t[11]===r?T=t[12]:(T=r.length===0?(0,h.jsx)(`p`,{className:`text-muted-foreground`,children:`No task definitions found.`}):(0,h.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,h.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,h.jsx)(`thead`,{children:(0,h.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,h.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Family : Revision`}),(0,h.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,h.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,h.jsx)(`tbody`,{children:r.map(e=>{let t=g(e);return(0,h.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,h.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t}),(0,h.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,h.jsx)(o,{onClick:()=>{_(t)},size:`sm`,variant:`destructive`,children:`Deregister`})})]},e)})})]})}),t[11]=r,t[12]=T);let E=`This marks task definition "${f}" INACTIVE. Existing tasks keep running; no new tasks can use it.`,D;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(D=e=>{e||_(null)},t[13]=D):D=t[13];let O=f!==null,k;t[14]!==l.isPending||t[15]!==y||t[16]!==O||t[17]!==E?(k=(0,h.jsx)(d,{confirmLabel:`Deregister`,description:E,isPending:l.isPending,onConfirm:y,onOpenChange:D,open:O,pendingLabel:`Deregistering…`,title:`Deregister task definition`}),t[14]=l.isPending,t[15]=y,t[16]=O,t[17]=E,t[18]=k):k=t[18];let A;return t[19]!==k||t[20]!==C||t[21]!==w||t[22]!==T?(A=(0,h.jsxs)(h.Fragment,{children:[C,w,T,k]}),t[19]=k,t[20]=C,t[21]=w,t[22]=T,t[23]=A):A=t[23],A}function v(){let e=(0,p.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l,{title:`Task definitions`}),(0,h.jsx)(f,{}),(0,h.jsx)(_,{})]}),e[0]=t):t=e[0],t}var y=v;export{y as component}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./useSuspenseQuery-Bc7E1P-f.js";import{t as a}from"./link-BokOReHc.js";import{t as o}from"./button-qf9lLJ2x.js";import{o as s}from"./ecs-BmKTMTV2.js";import{a as c}from"./ecs-Bz1Yh-WL.js";import{t as l}from"./page-heading-vksh_67w.js";import{t as u}from"./error-banner-DeOeVBKS.js";import{t as d}from"./delete-confirmation-dialog-BYHqotoI.js";import{t as f}from"./ecs-section-nav-CSH8MVoU.js";var p=r(),m=t(n(),1),h=e();function g(e){return e.split(`/`).at(-1)??e}function _(e){let t=(0,p.c)(24),{clusterName:n}=e,{data:r}=i(s),l=c(),[f,_]=(0,m.useState)(null),v;t[0]!==l||t[1]!==f?(v=function(){f&&l.mutate(f,{onSuccess:()=>{_(null)}})},t[0]=l,t[1]=f,t[2]=v):v=t[2];let y=v,b=n??``,x;t[3]===b?x=t[4]:(x={cluster:b},t[3]=b,t[4]=x);let S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,h.jsx)(o,{size:`sm`,children:`Register task definition`}),t[5]=S):S=t[5];let C;t[6]===x?C=t[7]:(C=(0,h.jsx)(`div`,{className:`mb-4 flex justify-end`,children:(0,h.jsx)(a,{search:x,to:`/ecs/register-task-definition`,children:S})}),t[6]=x,t[7]=C);let w;t[8]!==l.error||t[9]!==l.isError?(w=l.isError&&(0,h.jsx)(u,{error:l.error instanceof Error?l.error:void 0,msg:`Failed to deregister task definition.`}),t[8]=l.error,t[9]=l.isError,t[10]=w):w=t[10];let T;t[11]===r?T=t[12]:(T=r.length===0?(0,h.jsx)(`p`,{className:`text-muted-foreground`,children:`No task definitions found.`}):(0,h.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-card`,children:(0,h.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,h.jsx)(`thead`,{children:(0,h.jsxs)(`tr`,{className:`border-b text-left text-muted-foreground`,children:[(0,h.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:`Family : Revision`}),(0,h.jsx)(`th`,{className:`px-4 py-2 font-medium`,children:(0,h.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,h.jsx)(`tbody`,{children:r.map(e=>{let t=g(e);return(0,h.jsxs)(`tr`,{className:`border-b last:border-0`,children:[(0,h.jsx)(`td`,{className:`px-4 py-2 font-mono text-xs`,children:t}),(0,h.jsx)(`td`,{className:`px-4 py-2 text-right`,children:(0,h.jsx)(o,{onClick:()=>{_(t)},size:`sm`,variant:`destructive`,children:`Deregister`})})]},e)})})]})}),t[11]=r,t[12]=T);let E=`This marks task definition "${f}" INACTIVE. Existing tasks keep running; no new tasks can use it.`,D;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(D=e=>{e||_(null)},t[13]=D):D=t[13];let O=f!==null,k;t[14]!==l.isPending||t[15]!==y||t[16]!==O||t[17]!==E?(k=(0,h.jsx)(d,{confirmLabel:`Deregister`,description:E,isPending:l.isPending,onConfirm:y,onOpenChange:D,open:O,pendingLabel:`Deregistering…`,title:`Deregister task definition`}),t[14]=l.isPending,t[15]=y,t[16]=O,t[17]=E,t[18]=k):k=t[18];let A;return t[19]!==k||t[20]!==C||t[21]!==w||t[22]!==T?(A=(0,h.jsxs)(h.Fragment,{children:[C,w,T,k]}),t[19]=k,t[20]=C,t[21]=w,t[22]=T,t[23]=A):A=t[23],A}function v(){let e=(0,p.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l,{title:`Task definitions`}),(0,h.jsx)(f,{}),(0,h.jsx)(_,{})]}),e[0]=t):t=e[0],t}var y=v;export{y as component}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-n04EavUm.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-DV1UO8hv.js similarity index 87% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-n04EavUm.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-DV1UO8hv.js index 823bba493..a01b07bca 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-n04EavUm.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/textarea-DV1UO8hv.js @@ -1 +1 @@ -import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{tn as n}from"./cluster-config-xw_Q7X1e.js";var r=t(),i=e();function a(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`flex field-sizing-content min-h-16 w-full resize-none rounded-md border border-input bg-input/20 px-2 py-2 text-sm transition-colors outline-none placeholder:text-muted-foreground autofill:[-webkit-text-fill-color:var(--color-foreground)] autofill:[transition:background-color_9999s_ease-in-out_0s] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`textarea`,{className:s,"data-slot":`textarea`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}export{a as t}; \ No newline at end of file +import{n as e,t}from"./compiler-runtime-D_vZfn79.js";import{nn as n}from"./cluster-config-DkOiY8HH.js";var r=t(),i=e();function a(e){let t=(0,r.c)(8),a,o;t[0]===e?(a=t[1],o=t[2]):({className:a,...o}=e,t[0]=e,t[1]=a,t[2]=o);let s;t[3]===a?s=t[4]:(s=n(`flex field-sizing-content min-h-16 w-full resize-none rounded-md border border-input bg-input/20 px-2 py-2 text-sm transition-colors outline-none placeholder:text-muted-foreground autofill:[-webkit-text-fill-color:var(--color-foreground)] autofill:[transition:background-color_9999s_ease-in-out_0s] focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,a),t[3]=a,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,i.jsx)(`textarea`,{className:s,"data-slot":`textarea`,...o}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}export{a as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-BZcdmGoQ.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-D1_Hb-WX.js similarity index 89% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-BZcdmGoQ.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-D1_Hb-WX.js index 652555122..71335a4be 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-BZcdmGoQ.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/upload-button-D1_Hb-WX.js @@ -1 +1 @@ -import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./link-Dhy4xOXd.js";import{an as a,in as o}from"./cluster-config-xw_Q7X1e.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./download-B-6MA128.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-BarTr35m.js";import{E as d,L as f,R as p,b as m,m as h}from"./awsClient-b0hcP1Iz.js";import{n as g}from"./s3-DaPUyf7s.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-SdDN4LiF.js";var y={name:`file`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]};y.node;var b=s(y),x={name:`folder`,size:24,node:[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]};x.node;var S=s(x),C={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};C.node;var w=s(C),T=class extends p(d,f,`GetObject`,m){},E=r(),D=e();function O(e){let t=(0,E.c)(9),{folderName:n,fullPrefix:r,bucketName:a}=e,o;t[0]!==a||t[1]!==r?(o={bucket:a,_splat:r},t[0]=a,t[1]=r,t[2]=o):o=t[2];let s;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,D.jsx)(S,{className:`size-5 text-muted-foreground`}),t[3]=s):s=t[3];let c;t[4]===n?c=t[5]:(c=(0,D.jsx)(`span`,{className:`font-medium`,children:n}),t[4]=n,t[5]=c);let l;return t[6]!==o||t[7]!==c?(l=(0,D.jsxs)(i,{className:`flex items-center gap-3 rounded-lg border bg-card p-4 transition-colors hover:bg-accent`,params:o,to:`/s3/ls/$bucket/$`,children:[s,c]}),t[6]=o,t[7]=c,t[8]=l):l=t[8],l}var k=t(n(),1);function A({object:e,bucketName:t,displayName:n,fullKey:r}){let[i,s]=(0,k.useState)(!1),[u,d]=(0,k.useState)(null),f=g();async function p(){d(null);try{let e=new T({Bucket:t,Key:r}),i=await h().send(e);if(i.Body){let e=await i.Body.transformToByteArray(),t=URL.createObjectURL(new Blob([e])),r=document.createElement(`a`);r.href=t,r.download=n,document.body.append(r),r.click(),r.remove(),URL.revokeObjectURL(t)}}catch(e){d(Error(`Failed to download object`,{cause:e}))}}async function m(){try{await f.mutateAsync({bucket:t,key:r})}finally{s(!1)}}return(0,D.jsxs)(`div`,{children:[f.error&&(0,D.jsx)(_,{error:f.error,msg:`Failed to delete object`}),u&&(0,D.jsx)(_,{error:u,msg:`Failed to download object`}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border bg-card p-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(b,{className:`size-5 text-muted-foreground`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h3`,{className:`font-medium`,children:n}),e.LastModified&&(0,D.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Last Modified: `,o(e.LastModified)]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:a(e.Size??0)}),(0,D.jsx)(`button`,{"aria-label":`Download ${n}`,className:`rounded-md p-2 transition-colors hover:bg-accent`,onClick:p,type:`button`,children:(0,D.jsx)(c,{className:`size-4`})}),(0,D.jsx)(`button`,{"aria-label":`Delete ${n}`,className:`rounded-md p-2 text-destructive transition-colors hover:bg-accent`,onClick:()=>{s(!0)},type:`button`,children:(0,D.jsx)(l,{className:`size-4`})})]}),(0,D.jsx)(v,{description:(0,D.jsxs)(D.Fragment,{children:[`Are you sure you want to delete `,(0,D.jsx)(`strong`,{children:n}),`? This action cannot be undone.`]}),isPending:f.isPending,onConfirm:m,onOpenChange:s,open:i,title:`Delete Object`})]})]},e.Key)}function j({bucket:e,prefix:t=``,isPending:n,onUpload:r}){let i=(0,k.useRef)(null);async function a(n){let{files:a}=n.target;if(a&&a.length!==0)try{await Promise.all([...a].map(async n=>await r({bucket:e,key:`${t}${n.name}`,file:n})))}finally{i.current&&(i.current.value=``)}}return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`input`,{accept:`*/*`,"aria-label":`Choose files to upload`,className:`hidden`,multiple:!0,onChange:a,ref:i,type:`file`}),(0,D.jsxs)(u,{disabled:n,onClick:()=>i.current?.click(),size:`sm`,children:[(0,D.jsx)(w,{className:`mr-2 size-4`}),n?`Uploading…`:`Upload Files`]})]})}export{A as n,O as r,j as t}; \ No newline at end of file +import{n as e,o as t,r as n,t as r}from"./compiler-runtime-D_vZfn79.js";import{t as i}from"./link-BokOReHc.js";import{an as a,on as o}from"./cluster-config-DkOiY8HH.js";import{t as s}from"./createLucideIcon-BQgzNCBR.js";import{t as c}from"./download-B-6MA128.js";import{t as l}from"./trash-DVab4pEz.js";import{t as u}from"./button-qf9lLJ2x.js";import{E as d,L as f,R as p,b as m,m as h}from"./awsClient-Cqp6x3OY.js";import{n as g}from"./s3-D7lLgKWv.js";import{t as _}from"./error-banner-DeOeVBKS.js";import{t as v}from"./delete-confirmation-dialog-BYHqotoI.js";var y={name:`file`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]};y.node;var b=s(y),x={name:`folder`,size:24,node:[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]};x.node;var S=s(x),C={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};C.node;var w=s(C),T=class extends p(d,f,`GetObject`,m){},E=r(),D=e();function O(e){let t=(0,E.c)(9),{folderName:n,fullPrefix:r,bucketName:a}=e,o;t[0]!==a||t[1]!==r?(o={bucket:a,_splat:r},t[0]=a,t[1]=r,t[2]=o):o=t[2];let s;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,D.jsx)(S,{className:`size-5 text-muted-foreground`}),t[3]=s):s=t[3];let c;t[4]===n?c=t[5]:(c=(0,D.jsx)(`span`,{className:`font-medium`,children:n}),t[4]=n,t[5]=c);let l;return t[6]!==o||t[7]!==c?(l=(0,D.jsxs)(i,{className:`flex items-center gap-3 rounded-lg border bg-card p-4 transition-colors hover:bg-accent`,params:o,to:`/s3/ls/$bucket/$`,children:[s,c]}),t[6]=o,t[7]=c,t[8]=l):l=t[8],l}var k=t(n(),1);function A({object:e,bucketName:t,displayName:n,fullKey:r}){let[i,s]=(0,k.useState)(!1),[u,d]=(0,k.useState)(null),f=g();async function p(){d(null);try{let e=new T({Bucket:t,Key:r}),i=await h().send(e);if(i.Body){let e=await i.Body.transformToByteArray(),t=URL.createObjectURL(new Blob([e])),r=document.createElement(`a`);r.href=t,r.download=n,document.body.append(r),r.click(),r.remove(),URL.revokeObjectURL(t)}}catch(e){d(Error(`Failed to download object`,{cause:e}))}}async function m(){try{await f.mutateAsync({bucket:t,key:r})}finally{s(!1)}}return(0,D.jsxs)(`div`,{children:[f.error&&(0,D.jsx)(_,{error:f.error,msg:`Failed to delete object`}),u&&(0,D.jsx)(_,{error:u,msg:`Failed to download object`}),(0,D.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border bg-card p-4`,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(b,{className:`size-5 text-muted-foreground`}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`h3`,{className:`font-medium`,children:n}),e.LastModified&&(0,D.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Last Modified: `,a(e.LastModified)]})]})]}),(0,D.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,D.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:o(e.Size??0)}),(0,D.jsx)(`button`,{"aria-label":`Download ${n}`,className:`rounded-md p-2 transition-colors hover:bg-accent`,onClick:p,type:`button`,children:(0,D.jsx)(c,{className:`size-4`})}),(0,D.jsx)(`button`,{"aria-label":`Delete ${n}`,className:`rounded-md p-2 text-destructive transition-colors hover:bg-accent`,onClick:()=>{s(!0)},type:`button`,children:(0,D.jsx)(l,{className:`size-4`})})]}),(0,D.jsx)(v,{description:(0,D.jsxs)(D.Fragment,{children:[`Are you sure you want to delete `,(0,D.jsx)(`strong`,{children:n}),`? This action cannot be undone.`]}),isPending:f.isPending,onConfirm:m,onOpenChange:s,open:i,title:`Delete Object`})]})]},e.Key)}function j({bucket:e,prefix:t=``,isPending:n,onUpload:r}){let i=(0,k.useRef)(null);async function a(n){let{files:a}=n.target;if(a&&a.length!==0)try{await Promise.all([...a].map(async n=>await r({bucket:e,key:`${t}${n.name}`,file:n})))}finally{i.current&&(i.current.value=``)}}return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`input`,{accept:`*/*`,"aria-label":`Choose files to upload`,className:`hidden`,multiple:!0,onChange:a,ref:i,type:`file`}),(0,D.jsxs)(u,{disabled:n,onClick:()=>i.current?.click(),size:`sm`,children:[(0,D.jsx)(w,{className:`mr-2 size-4`}),n?`Uploading…`:`Upload Files`]})]})}export{A as n,O as r,j as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-CEsaEeXb.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-Puv6a8xb.js similarity index 96% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-CEsaEeXb.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-Puv6a8xb.js index 1c0d5499f..906ff7233 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-CEsaEeXb.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useCompositeListItem-Puv6a8xb.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{l as r}from"./dist-BKgR2qk6.js";import{o as i,s as a}from"./button-BarTr35m.js";function o(e){return e==null||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`}var s=t(n(),1),c=s.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function l(){return s.useContext(c)}var u=e();function d(e){let{children:t,elementsRef:n,labelsRef:o,onMapChange:l}=e,d=a(l),[,v]=s.useState(!1),y=r(p).current,b=r(f).current,x=s.useRef(0),S=s.useRef(!0),C=s.useRef(null),w=s.useRef(null),T=a(()=>{S.current||(S.current=!0,v(e=>!e))}),E=a((e,t)=>{b.set(e,t),T()}),D=a(e=>{b.delete(e),T()}),O=a(e=>{let t=new Map;return n.current.length=0,o&&(o.current.length=0),e.forEach(e=>{t.set(e.element,{...e.registration.metadata??{},index:e.index}),n.current[e.index]=e.element,o&&(o.current[e.index]=e.registration.label===void 0?e.registration.textRef?.current?.textContent??e.element.textContent:e.registration.label)}),x.current=n.current.length,t});function k(e){if(w.current?.disconnect(),w.current=null,typeof MutationObserver!=`function`||e.length<2)return;let t=new MutationObserver(n=>{if(!g(n))return;let r=null;for(let n of e)if(n.isConnected){if(r&&_(r,n)>0){t.disconnect(),T();return}r=n}});w.current=t;let n=new Set;for(let t=1;tt.observe(e,{childList:!0}))}let A=a(()=>{let[e,t]=m(b),n=O(e),r=C.current,i=!r||r.length!==e.length||e.some((e,t)=>{let n=r[t];return e.index!==n.index||e.element!==n.element||e.registration.index!==n.registration.index||e.registration.metadata!==n.registration.metadata});k(t),C.current=e,S.current=!1,i&&(y.forEach(e=>e(n)),d(n))});i(()=>(!S.current&&C.current&&O(C.current),()=>{n.current=[],o&&(o.current=[])}),[n,o,O]),i(()=>{S.current&&A()}),i(()=>()=>{w.current?.disconnect(),S.current=!0},[]);let j=a(e=>(y.add(e),()=>{y.delete(e)})),M=s.useMemo(()=>({register:E,unregister:D,subscribeMapChange:j,nextIndexRef:x}),[E,D,j,x]);return(0,u.jsx)(c.Provider,{value:M,children:t})}function f(){return new Map}function p(){return new Set}function m(e){let t=new Set,n=[],r=[];e.forEach((e,i)=>{if(!i.isConnected)return;let a=e.index,o={index:a??-1,element:i,registration:e};a===null?r.push(o):a>=0&&(t.add(a),n.push(o))});let i=0;return r.sort((e,t)=>_(e.element,t.element)),r.forEach(e=>{for(;t.has(i);)i+=1;e.index=i,n.push(e),i+=1}),t.size>0&&n.sort((e,t)=>e.index-t.index),[n,r.map(e=>e.element)]}function h(e,t){let n=e.parentElement;for(;n&&!n.contains(t);)n=n.parentElement;return n}function g(e){for(let t of e)for(let e=0;e{if(p.current===-1){let e=f.current;f.current+=1,p.current=e}return p.current}:-1),g=o??m,_=s.useRef(null),v=s.useCallback(e=>{let t=_.current;t&&u(t),_.current=e,e&&c(e,{metadata:r??null,index:o??null,label:n,textRef:a})},[o,c,u,r,n,a]);return i(()=>{if(o==null)return d(e=>{let t=_.current?e.get(_.current)?.index:null;t!=null&&h(t)})},[o,d]),{ref:v,index:g}}export{d as n,o as r,v as t}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{l as r}from"./dist-DeC3TnAR.js";import{o as i,s as a}from"./button-qf9lLJ2x.js";function o(e){return e==null||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`}var s=t(n(),1),c=s.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function l(){return s.useContext(c)}var u=e();function d(e){let{children:t,elementsRef:n,labelsRef:o,onMapChange:l}=e,d=a(l),[,v]=s.useState(!1),y=r(p).current,b=r(f).current,x=s.useRef(0),S=s.useRef(!0),C=s.useRef(null),w=s.useRef(null),T=a(()=>{S.current||(S.current=!0,v(e=>!e))}),E=a((e,t)=>{b.set(e,t),T()}),D=a(e=>{b.delete(e),T()}),O=a(e=>{let t=new Map;return n.current.length=0,o&&(o.current.length=0),e.forEach(e=>{t.set(e.element,{...e.registration.metadata??{},index:e.index}),n.current[e.index]=e.element,o&&(o.current[e.index]=e.registration.label===void 0?e.registration.textRef?.current?.textContent??e.element.textContent:e.registration.label)}),x.current=n.current.length,t});function k(e){if(w.current?.disconnect(),w.current=null,typeof MutationObserver!=`function`||e.length<2)return;let t=new MutationObserver(n=>{if(!g(n))return;let r=null;for(let n of e)if(n.isConnected){if(r&&_(r,n)>0){t.disconnect(),T();return}r=n}});w.current=t;let n=new Set;for(let t=1;tt.observe(e,{childList:!0}))}let A=a(()=>{let[e,t]=m(b),n=O(e),r=C.current,i=!r||r.length!==e.length||e.some((e,t)=>{let n=r[t];return e.index!==n.index||e.element!==n.element||e.registration.index!==n.registration.index||e.registration.metadata!==n.registration.metadata});k(t),C.current=e,S.current=!1,i&&(y.forEach(e=>e(n)),d(n))});i(()=>(!S.current&&C.current&&O(C.current),()=>{n.current=[],o&&(o.current=[])}),[n,o,O]),i(()=>{S.current&&A()}),i(()=>()=>{w.current?.disconnect(),S.current=!0},[]);let j=a(e=>(y.add(e),()=>{y.delete(e)})),M=s.useMemo(()=>({register:E,unregister:D,subscribeMapChange:j,nextIndexRef:x}),[E,D,j,x]);return(0,u.jsx)(c.Provider,{value:M,children:t})}function f(){return new Map}function p(){return new Set}function m(e){let t=new Set,n=[],r=[];e.forEach((e,i)=>{if(!i.isConnected)return;let a=e.index,o={index:a??-1,element:i,registration:e};a===null?r.push(o):a>=0&&(t.add(a),n.push(o))});let i=0;return r.sort((e,t)=>_(e.element,t.element)),r.forEach(e=>{for(;t.has(i);)i+=1;e.index=i,n.push(e),i+=1}),t.size>0&&n.sort((e,t)=>e.index-t.index),[n,r.map(e=>e.element)]}function h(e,t){let n=e.parentElement;for(;n&&!n.contains(t);)n=n.parentElement;return n}function g(e){for(let t of e)for(let e=0;e{if(p.current===-1){let e=f.current;f.current+=1,p.current=e}return p.current}:-1),g=o??m,_=s.useRef(null),v=s.useCallback(e=>{let t=_.current;t&&u(t),_.current=e,e&&c(e,{metadata:r??null,index:o??null,label:n,textRef:a})},[o,c,u,r,n,a]);return i(()=>{if(o==null)return d(e=>{let t=_.current?e.get(_.current)?.index:null;t!=null&&h(t)})},[o,d]),{ref:v,index:g}}export{d as n,o as r,v as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-BH3pQKLF.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-CTe_-BZA.js similarity index 72% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-BH3pQKLF.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-CTe_-BZA.js index 0bdb4a24a..ed09f26f2 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-BH3pQKLF.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useNavigate-CTe_-BZA.js @@ -1 +1 @@ -import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./useSelector-CRh8wCTv.js";var r=e(t(),1);function i(e){let t=n();return r.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}export{i as t}; \ No newline at end of file +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{n}from"./useSelector-C6_B_5v6.js";var r=e(t(),1);function i(e){let t=n();return r.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}export{i as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-DUsvphCt.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-BZ4WwVxL.js similarity index 98% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-DUsvphCt.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-BZ4WwVxL.js index 5f076bcd2..337bb4b99 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-DUsvphCt.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/usePositioner-BZ4WwVxL.js @@ -1 +1 @@ -import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{f as n,t as r}from"./useValueAsRef-F56m8WbP.js";import{a as i,n as a}from"./dist-BKgR2qk6.js";import{C as o,D as s,E as c,T as l,_ as u,b as d,d as f,f as p,g as m,h,l as g,m as _,o as v,p as y,s as b,u as x,v as S,x as C,y as w}from"./button-BarTr35m.js";import{E as T}from"./createBaseUIEventDetails-DL-8egB9.js";import{F as E,M as D,st as O}from"./useScrollLock-NX6x9Pv8.js";import{t as k}from"./DirectionContext-C9rdm8xn.js";var A=e(t(),1),j=Math.min,M=Math.max,N=Math.round,P=Math.floor,F=e=>({x:e,y:e}),ee={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function te(e,t,n){return M(e,j(t,n))}function I(e,t){return typeof e==`function`?e(t):e}function L(e){return e.split(`-`)[0]}function R(e){return e.split(`-`)[1]}function ne(e){return e===`x`?`y`:`x`}function z(e){return e===`y`?`height`:`width`}function B(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function re(e){return ne(B(e))}function V(e,t,n){n===void 0&&(n=!1);let r=R(e),i=re(e),a=z(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=U(o)),[o,U(o)]}function ie(e){let t=U(e);return[ae(e),t,ae(t)]}function ae(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var H=[`left`,`right`],oe=[`right`,`left`],se=[`top`,`bottom`],ce=[`bottom`,`top`];function le(e,t,n){switch(e){case`top`:case`bottom`:return n?t?oe:H:t?H:oe;case`left`:case`right`:return t?se:ce;default:return[]}}function ue(e,t,n,r){let i=R(e),a=le(L(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(ae)))),a}function U(e){let t=L(e);return ee[t]+e.slice(t.length)}function de(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function fe(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:de(e)}function W(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function pe(e,t,n){let{reference:r,floating:i}=e,a=B(t),o=re(t),s=z(o),c=L(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=R(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function G(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=I(t,e),p=fe(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=W(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=W(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var me=50,he=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:G},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=pe(l,r,c),f=r,p=0,m={};for(let n=0;ne<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===B(t)||T.every(e=>B(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=B(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}},_e=new Set([`left`,`top`]);async function ve(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=L(n),s=R(n),c=B(n)===`y`,l=_e.has(o)?-1:1,u=a&&c?-1:1,d=I(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var K=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await ve(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},q=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=I(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=B(i),p=ne(f),m=u[p],h=u[f],g=(e,t)=>te(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},ye=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=I(e,t),u={x:n,y:r},d=B(i),f=ne(d),p=u[f],m=u[d],h=I(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:h.mainAxis??0,crossAxis:h.crossAxis??0};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=_e.has(L(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},be=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=I(e,t),c=await i.detectOverflow(t,s),l=L(n),u=R(n),d=B(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=j(p-c[m],g),y=j(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*M(c.left,c.right):S=p-2*M(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function J(e){let t=g(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=d(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=N(n)!==a||N(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Y(e){return w(e)?e:e.contextElement}function X(e){let t=Y(e);if(!d(t))return F(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=J(t),o=(a?N(n.width):n.width)/r,s=(a?N(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var xe=F(0);function Z(e){let t=u(e);return!s()||!t.visualViewport?xe:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Se(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===u(e)}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Y(e),o=F(1);t&&(r?w(r)&&(o=X(r)):o=X(e));let s=Se(a,n,r)?Z(a):F(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,d=i.width/o.x,f=i.height/o.y;if(a&&r){let e=u(a),t=w(r)?u(r):r,n=e,i=p(n);for(;i&&t!==n;){let e=X(i),t=i.getBoundingClientRect(),r=g(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,d*=e.x,f*=e.y,c+=a,l+=o,n=u(i),i=p(n)}}return W({width:d,height:f,x:c,y:l})}function Ce(e,t){let n=_(e).scrollLeft;return t?t.left+n:Q(f(e)).left+n}function we(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Ce(e,n),y:n.top+t.scrollTop}}function Te(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,s=f(r),l=t?c(t.floating):!1;if(r===s||l&&a)return n;let u={scrollLeft:0,scrollTop:0},p=F(1),m=F(0),h=d(r);if((h||!a)&&((y(r)!==`body`||o(s))&&(u=_(r)),h)){let e=Q(r);p=X(r),m.x=e.x+r.clientLeft,m.y=e.y+r.clientTop}let g=s&&!h&&!a?we(s,u):F(0);return{width:n.width*p.x,height:n.height*p.y,x:n.x*p.x-u.scrollLeft*p.x+m.x+g.x,y:n.y*p.y-u.scrollTop*p.y+m.y+g.y}}function Ee(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function $(e){let t=_(e),n=e.ownerDocument.body,r=M(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=M(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+Ce(e),o=-t.scrollTop;return g(n).direction===`rtl`&&(a+=M(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var De=25;function Oe(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=u(e),a=f(e),o=i.visualViewport,c=a.clientWidth,l=a.clientHeight,d=0,p=0;if(o){let e=!s()||t===`fixed`;r?e||(d=-o.offsetLeft,p=-o.offsetTop):(c=o.width,l=o.height,e&&(d=o.offsetLeft,p=o.offsetTop))}if(Ce(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=De&&(c-=o)}return{width:c,height:l,x:d,y:p}}function ke(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=X(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Ae(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=Oe(e,n,t);else if(t===`document`)r=$(f(e));else if(w(t))r=ke(t,n);else{let n=Z(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return W(r)}function je(e,t){let n=t.get(e);if(n)return n;let r=h(e,[],!1).filter(e=>w(e)&&y(e)!==`body`),i=null,a=g(e).position===`fixed`,o=a?m(e):e;for(;w(o)&&!C(o);){let e=g(o),t=S(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=m(o)}return t.set(e,r),r}function Me(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?c(t)?[]:je(t,this._c):[].concat(n),r],o=Ae(t,a[0],i),s=o.top,l=o.right,u=o.bottom,d=o.left;for(let e=1;e{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=u(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function Ue(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Y(e),u=i||a?[...l?h(l):[],...t?h(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?He(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,g=c?Q(e):null;c&&_();function _(){let t=Q(e);g&&!Ve(g,t)&&n(),g=t,m=requestAnimationFrame(_)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var We=K,Ge=q,Ke=ge,qe=be,Je=ye,Ye=(e,t,n)=>{let r=new Map,i=n??{},a={...Be,...i.platform,_c:r};return he(e,t,{...i,platform:a})},Xe=e(n(),1),Ze=typeof document<`u`?A.useLayoutEffect:function(){};function Qe(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Qe(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!Qe(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function $e(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function et(e,t){let n=$e(e);return Math.round(t*n)/n}function tt(e){let t=A.useRef(e);return Ze(()=>{t.current=e}),t}function nt(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[u,d]=A.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=A.useState(r);Qe(f,r)||p(r);let[m,h]=A.useState(null),[g,_]=A.useState(null),v=A.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),y=A.useCallback(e=>{e!==C.current&&(C.current=e,_(e))},[]),b=a||m,x=o||g,S=A.useRef(null),C=A.useRef(null),w=A.useRef(u),T=c!=null,E=tt(c),D=tt(i),O=tt(l),k=A.useCallback(()=>{if(!S.current||!C.current)return;let e={placement:t,strategy:n,middleware:f};D.current&&(e.platform=D.current),Ye(S.current,C.current,e).then(e=>{let t={...e,isPositioned:O.current!==!1};j.current&&!Qe(w.current,t)&&(w.current=t,Xe.flushSync(()=>{d(t)}))})},[f,t,n,D,O]);Ze(()=>{l===!1&&w.current.isPositioned&&(w.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let j=A.useRef(!1);Ze(()=>(j.current=!0,()=>{j.current=!1}),[]),Ze(()=>{if(b&&(S.current=b),x&&(C.current=x),b&&x){if(E.current)return E.current(b,x,k);k()}},[b,x,k,E,T]);let M=A.useMemo(()=>({reference:S,floating:C,setReference:v,setFloating:y}),[v,y]),N=A.useMemo(()=>({reference:b,floating:x}),[b,x]),P=A.useMemo(()=>{let e={position:n,left:0,top:0};if(!N.floating)return e;let t=et(N.floating,u.x),r=et(N.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...$e(N.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,N.floating,u.x,u.y]);return A.useMemo(()=>({...u,update:k,refs:M,elements:N,floatingStyles:P}),[u,k,M,N,P])}var rt=(e,t)=>{let n=We(e);return{name:n.name,fn:n.fn,options:[e,t]}},it=(e,t)=>{let n=Ge(e);return{name:n.name,fn:n.fn,options:[e,t]}},at=(e,t)=>({fn:Je(e).fn,options:[e,t]}),ot=(e,t)=>{let n=Ke(e);return{name:n.name,fn:n.fn,options:[e,t]}},st=(e,t)=>{let n=qe(e);return{name:n.name,fn:n.fn,options:[e,t]}};function ct(e){return lt(e,e.rootContext)}function lt(e,t){let{nodeId:n,externalTree:r}=e,i=t.useState(`referenceElement`),a=t.useState(`floatingElement`),o=t.useState(`domReferenceElement`),s=t.useState(`open`),c=t.useState(`floatingId`),[l,u]=A.useState(null),[d,f]=A.useState(void 0),[p,m]=A.useState(void 0),h=A.useRef(null),g=D(r),_=A.useMemo(()=>({reference:i,floating:a,domReference:o}),[i,a,o]),y=nt({...e,elements:{..._,...l&&{reference:l}}}),b=w(d)?d:null,x=p===void 0?t.state.floatingElement:p;t.useSyncedValue(`referenceElement`,d??null),t.useSyncedValue(`domReferenceElement`,d===void 0?o:b),t.useSyncedValue(`floatingElement`,x);let S=A.useCallback(e=>{let t=w(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),y.refs.setReference(t)},[y.refs]),C=A.useCallback(e=>{(w(e)||e===null)&&(h.current=e,f(e)),(w(y.refs.reference.current)||y.refs.reference.current===null||e!==null&&!w(e))&&y.refs.setReference(e)},[y.refs,f]),T=A.useCallback(e=>{m(e),y.refs.setFloating(e)},[y.refs]),E=A.useMemo(()=>({...y.refs,setReference:C,setFloating:T,setPositionReference:S,domReference:h}),[y.refs,C,T,S]),O=A.useMemo(()=>({...y.elements,domReference:o}),[y.elements,o]),k=A.useMemo(()=>({...y,dataRef:t.context.dataRef,open:s,onOpenChange:t.setOpen,events:t.context.events,floatingId:c,refs:E,elements:O,nodeId:n,rootStore:t}),[y,E,O,n,t,s,c]);return v(()=>{o&&(h.current=o)},[o]),v(()=>{t.context.dataRef.current.floatingContext=k;let e=g?.nodesRef.current.find(e=>e.id===n);e&&(e.context=k)}),A.useMemo(()=>({...y,context:k,refs:E,elements:O,rootStore:t}),[y,E,O,k,t])}var ut=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0,offsetParent:d=`real`}=I(e,t)||{};if(l==null)return{};let f=fe(u),p={x:n,y:r},m=re(i),h=z(m),g=await o.getDimensions(l),_=m===`y`,v=_?`top`:`left`,y=_?`bottom`:`right`,b=_?`clientHeight`:`clientWidth`,x=a.reference[h]+a.reference[m]-p[m]-a.floating[h],S=p[m]-a.reference[m],C=d===`real`?await o.getOffsetParent?.(l):s.floating,w=s.floating[b]||a.floating[h];(!w||!await o.isElement?.(C))&&(w=s.floating[b]||a.floating[h]);let T=x/2-S/2,E=w/2-g[h]/2-1,D=Math.min(f[v],E),O=Math.min(f[y],E),k=D,A=w-g[h]-O,j=w/2-g[h]/2+T,M=te(k,j,A),N=!c.arrow&&R(i)!=null&&j!==M&&a.reference[h]/2-(j{let{name:n,fn:r}=ut(e);return{name:n,fn:r,options:[e,t]}},ft={name:`hide`,async fn(e){let{width:t,height:n,x:r,y:i}=e.rects.reference,a=t===0&&n===0&&r===0&&i===0,o=await e.platform.detectOverflow(e,{elementContext:`reference`});return{data:{referenceHidden:o.top-n>=0||o.right-t>=0||o.bottom-n>=0||o.left-t>=0||a}}}},pt={sideX:`left`,sideY:`top`},mt=`--available-width`,ht=`--available-height`,gt=`--anchor-width`,_t=`--anchor-height`,vt=`--transform-origin`,yt=mt,bt=ht;function xt(e,t,n){let r=e===`inline-start`||e===`inline-end`;return{top:`top`,right:r?n?`inline-start`:`inline-end`:`right`,bottom:`bottom`,left:r?n?`inline-end`:`inline-start`:`left`}[t]}function St(e,t,n){let{rects:r,placement:i}=e;return{side:xt(t,L(i),n),align:R(i)||`center`,anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function Ct(e){return wt(e,ct)}function wt(e,t){let{anchor:n,positionMethod:i=`absolute`,side:a=`bottom`,sideOffset:o=0,align:s=`center`,alignOffset:c=0,collisionBoundary:l,collisionPadding:d=5,sticky:f=!1,arrowPadding:p=5,disableAnchorTracking:m=!1,inline:h,keepMounted:g=!1,floatingRootContext:_,mounted:y,collisionAvoidance:x,shift:S,nodeId:C,adaptiveOrigin:w,lazyFlip:E=!1,externalTree:D}=e,[O,j]=A.useState(null);!y&&O!==null&&j(null);let M=x.side||`flip`,N=x.align||`flip`,P=x.fallbackAxisSide||`end`,F=S?.crossAxis??!1,ee=S?.rootBoundary,te=typeof n==`function`?n:void 0,I=b(te),ne=te?I:n,z=r(n),re=r(y),V=k()===`rtl`,ie=O||{top:`top`,right:`right`,bottom:`bottom`,left:`left`,"inline-end":V?`left`:`right`,"inline-start":V?`right`:`left`}[a],ae=s===`center`?ie:`${ie}-${s}`,H=d;typeof H==`number`?H={top:H,right:H,bottom:H,left:H}:H&&={top:H.top||0,right:H.right||0,bottom:H.bottom||0,left:H.left||0};let oe=+(a===`bottom`),se=+(a===`top`),ce=+(a===`right`),le=+(a===`left`),ue={boundary:l===`clipping-ancestors`?`clippingAncestors`:l,padding:H},U=A.useRef(null),de=r(o),fe=r(c),W=typeof o==`function`?0:o,pe=typeof c==`function`?0:c,G=[];h&&G.push(h),G.push(rt(e=>{let t=St(e,a,V),n=typeof de.current==`function`?de.current(t):de.current,r=typeof fe.current==`function`?fe.current(t):fe.current;return{mainAxis:n,crossAxis:r,alignmentAxis:r}},[W,pe,V,a]));let me=N===`none`&&M!==`shift`,he=!me&&(f||F||M===`shift`),ge=M===`none`?null:ot({...ue,padding:{top:H.top+1+oe,right:H.right+1+le,bottom:H.bottom+1+se,left:H.left+1+ce},mainAxis:!F&&M===`flip`,crossAxis:N===`flip`&&`alignment`,fallbackAxisSideDirection:P}),_e=me?null:it({...ue,rootBoundary:ee,mainAxis:N!==`none`,crossAxis:he,limiter:f||F?void 0:at(e=>{if(!U.current)return{};let{width:t,height:n}=U.current.getBoundingClientRect(),r=B(L(e.placement)),i=r===`y`?t:n,a=r===`y`?H.left+H.right:H.top+H.bottom;return{offset:i/2+a/2}})},[ue,f,F,ee,H,N]);M===`shift`||N===`shift`||s===`center`?G.push(_e,ge):G.push(ge,_e),G.push(st({...ue,apply({elements:{floating:e},availableWidth:t,availableHeight:n,rects:r}){if(!re.current)return;let i=e.style;i.setProperty(yt,`${t}px`),i.setProperty(bt,`${n}px`);let a=u(e).devicePixelRatio||1,{x:o,y:s,width:c,height:l}=r.reference,d=(Math.round((o+c)*a)-Math.round(o*a))/a,f=(Math.round((s+l)*a)-Math.round(s*a))/a;i.setProperty(gt,`${d}px`),i.setProperty(_t,`${f}px`)}}),dt(e=>({element:U.current||T(e.elements.floating).createElement(`div`),padding:U.current?p:0,offsetParent:`floating`}),[p]),{name:`transformOrigin`,fn(e){let{elements:{floating:t},middlewareData:n,placement:r,platform:i,rects:s,y:c}=e,l=L(r),u=R(r),d=B(l)===`y`,f=U.current,p=typeof o==`function`?o(St(e,a,V)):o,m;m=!f&&u&&Math.abs(d?n.shift?.x||0:n.shift?.y||0)<=1?u===`start`===(d&&i.isRTL?.(t)===!0)?`100%`:`0%`:`${(d?n.arrow?.x||0:n.arrow?.y||0)+(d?f?.clientWidth||0:f?.clientHeight||0)/2}px`;let h=l===`top`||l===`left`?`calc(100% + ${p}px)`:`${-p}px`;return he&&d&&Math.abs(n.shift?.y||0)>p&&(h=`${s.reference.y+s.reference.height/2-c}px`),t.style.setProperty(vt,d?`${m} ${h}`:`${h} ${m}`),{}}},ft,w),v(()=>{!y&&_&&_.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[y,_]);let ve=A.useMemo(()=>({ancestorScroll:!m,elementResize:!m&&typeof ResizeObserver<`u`,layoutShift:!m&&typeof IntersectionObserver<`u`}),[m]),{refs:K,elements:q,x:ye,y:be,middlewareData:J,update:Y,placement:X,context:xe,isPositioned:Z,floatingStyles:Se}=t({rootContext:_,open:g?y:void 0,placement:ae,middleware:G,strategy:i,whileElementsMounted:g?void 0:(...e)=>Ue(...e,ve),nodeId:C,externalTree:D}),{sideX:Q,sideY:Ce}=J.adaptiveOrigin||pt,we=Z?i:`fixed`,Te=A.useMemo(()=>{let e;return e=Z?w?{position:we,[Q]:ye,[Ce]:be}:{...Se,position:we}:{position:we,top:0,left:0},e[yt]=`100vw`,e[bt]=`100vh`,Z||(e.opacity=0),e},[w,we,Q,ye,Ce,be,Se,Z]),Ee=A.useRef(null);v(()=>{if(!y)return;let e=z.current,t=typeof e==`function`?e():e,n=(Tt(t)?t.current:t)||null;n!==Ee.current&&(K.setPositionReference(n),Ee.current=n)},[y,K,ne,z]),A.useEffect(()=>{if(!y)return;let e=z.current;typeof e!=`function`&&Tt(e)&&e.current!==Ee.current&&(K.setPositionReference(e.current),Ee.current=e.current)},[y,K,ne,z]),A.useEffect(()=>{if(g&&y&&q.reference&&q.floating)return Ue(q.reference,q.floating,Y,ve)},[g,y,q,Y,ve]);let $=L(X),De=xt(a,$,V),Oe=R(X)||`center`,ke=!!J.hide?.referenceHidden;v(()=>{E&&y&&Z&&$!==ie&&j($)},[E,y,Z,$,ie]);let Ae=A.useMemo(()=>({position:`absolute`,top:J.arrow?.y,left:J.arrow?.x}),[J.arrow]),je=J.arrow?.centerOffset!==0;return A.useMemo(()=>({positionerStyles:Te,arrowStyles:Ae,arrowRef:U,arrowUncentered:je,side:De,align:Oe,physicalSide:$,anchorHidden:ke,refs:K,context:xe,isPositioned:Z,update:Y}),[Te,Ae,U,je,De,Oe,$,ke,K,xe,Z,Y])}function Tt(e){return e!=null&&`current`in e}function Et(e){return e===`starting`?E:i}function Dt(e,t,{styles:n,transitionStatus:r,props:i,refs:o,hidden:s,inert:c=!1}){let l={...n};return c&&(l.pointerEvents=`none`),a(`div`,e,{state:t,ref:o,props:[{role:`presentation`,hidden:s,style:l},Et(r),i],stateAttributesMapping:O})}export{W as a,Be as i,Et as n,Ct as r,Dt as t}; \ No newline at end of file +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{f as n,t as r}from"./useValueAsRef-hoe2gsyn.js";import{a as i,n as a}from"./dist-DeC3TnAR.js";import{C as o,D as s,E as c,T as l,_ as u,b as d,d as f,f as p,g as m,h,l as g,m as _,o as v,p as y,s as b,u as x,v as S,x as C,y as w}from"./button-qf9lLJ2x.js";import{E as T}from"./createBaseUIEventDetails-CJZ8g-R_.js";import{F as E,M as D,st as O}from"./useScrollLock-UqEMT494.js";import{t as k}from"./DirectionContext-C9rdm8xn.js";var A=e(t(),1),j=Math.min,M=Math.max,N=Math.round,P=Math.floor,F=e=>({x:e,y:e}),ee={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function te(e,t,n){return M(e,j(t,n))}function I(e,t){return typeof e==`function`?e(t):e}function L(e){return e.split(`-`)[0]}function R(e){return e.split(`-`)[1]}function ne(e){return e===`x`?`y`:`x`}function z(e){return e===`y`?`height`:`width`}function B(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function re(e){return ne(B(e))}function V(e,t,n){n===void 0&&(n=!1);let r=R(e),i=re(e),a=z(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=U(o)),[o,U(o)]}function ie(e){let t=U(e);return[ae(e),t,ae(t)]}function ae(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var H=[`left`,`right`],oe=[`right`,`left`],se=[`top`,`bottom`],ce=[`bottom`,`top`];function le(e,t,n){switch(e){case`top`:case`bottom`:return n?t?oe:H:t?H:oe;case`left`:case`right`:return t?se:ce;default:return[]}}function ue(e,t,n,r){let i=R(e),a=le(L(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(ae)))),a}function U(e){let t=L(e);return ee[t]+e.slice(t.length)}function de(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function fe(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:de(e)}function W(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function pe(e,t,n){let{reference:r,floating:i}=e,a=B(t),o=re(t),s=z(o),c=L(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=R(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function G(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=I(t,e),p=fe(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=W(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=W(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var me=50,he=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:G},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=pe(l,r,c),f=r,p=0,m={};for(let n=0;ne<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===B(t)||T.every(e=>B(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=B(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}},_e=new Set([`left`,`top`]);async function ve(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=L(n),s=R(n),c=B(n)===`y`,l=_e.has(o)?-1:1,u=a&&c?-1:1,d=I(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var K=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await ve(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},q=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=I(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=B(i),p=ne(f),m=u[p],h=u[f],g=(e,t)=>te(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},ye=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=I(e,t),u={x:n,y:r},d=B(i),f=ne(d),p=u[f],m=u[d],h=I(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:h.mainAxis??0,crossAxis:h.crossAxis??0};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=_e.has(L(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},be=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=I(e,t),c=await i.detectOverflow(t,s),l=L(n),u=R(n),d=B(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=j(p-c[m],g),y=j(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*M(c.left,c.right):S=p-2*M(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function J(e){let t=g(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=d(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=N(n)!==a||N(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Y(e){return w(e)?e:e.contextElement}function X(e){let t=Y(e);if(!d(t))return F(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=J(t),o=(a?N(n.width):n.width)/r,s=(a?N(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var xe=F(0);function Z(e){let t=u(e);return!s()||!t.visualViewport?xe:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Se(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===u(e)}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Y(e),o=F(1);t&&(r?w(r)&&(o=X(r)):o=X(e));let s=Se(a,n,r)?Z(a):F(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,d=i.width/o.x,f=i.height/o.y;if(a&&r){let e=u(a),t=w(r)?u(r):r,n=e,i=p(n);for(;i&&t!==n;){let e=X(i),t=i.getBoundingClientRect(),r=g(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,d*=e.x,f*=e.y,c+=a,l+=o,n=u(i),i=p(n)}}return W({width:d,height:f,x:c,y:l})}function Ce(e,t){let n=_(e).scrollLeft;return t?t.left+n:Q(f(e)).left+n}function we(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Ce(e,n),y:n.top+t.scrollTop}}function Te(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,s=f(r),l=t?c(t.floating):!1;if(r===s||l&&a)return n;let u={scrollLeft:0,scrollTop:0},p=F(1),m=F(0),h=d(r);if((h||!a)&&((y(r)!==`body`||o(s))&&(u=_(r)),h)){let e=Q(r);p=X(r),m.x=e.x+r.clientLeft,m.y=e.y+r.clientTop}let g=s&&!h&&!a?we(s,u):F(0);return{width:n.width*p.x,height:n.height*p.y,x:n.x*p.x-u.scrollLeft*p.x+m.x+g.x,y:n.y*p.y-u.scrollTop*p.y+m.y+g.y}}function Ee(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function $(e){let t=_(e),n=e.ownerDocument.body,r=M(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=M(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+Ce(e),o=-t.scrollTop;return g(n).direction===`rtl`&&(a+=M(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var De=25;function Oe(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=u(e),a=f(e),o=i.visualViewport,c=a.clientWidth,l=a.clientHeight,d=0,p=0;if(o){let e=!s()||t===`fixed`;r?e||(d=-o.offsetLeft,p=-o.offsetTop):(c=o.width,l=o.height,e&&(d=o.offsetLeft,p=o.offsetTop))}if(Ce(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=De&&(c-=o)}return{width:c,height:l,x:d,y:p}}function ke(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=X(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Ae(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=Oe(e,n,t);else if(t===`document`)r=$(f(e));else if(w(t))r=ke(t,n);else{let n=Z(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return W(r)}function je(e,t){let n=t.get(e);if(n)return n;let r=h(e,[],!1).filter(e=>w(e)&&y(e)!==`body`),i=null,a=g(e).position===`fixed`,o=a?m(e):e;for(;w(o)&&!C(o);){let e=g(o),t=S(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=m(o)}return t.set(e,r),r}function Me(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?c(t)?[]:je(t,this._c):[].concat(n),r],o=Ae(t,a[0],i),s=o.top,l=o.right,u=o.bottom,d=o.left;for(let e=1;e{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=u(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function Ue(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Y(e),u=i||a?[...l?h(l):[],...t?h(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?He(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,g=c?Q(e):null;c&&_();function _(){let t=Q(e);g&&!Ve(g,t)&&n(),g=t,m=requestAnimationFrame(_)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var We=K,Ge=q,Ke=ge,qe=be,Je=ye,Ye=(e,t,n)=>{let r=new Map,i=n??{},a={...Be,...i.platform,_c:r};return he(e,t,{...i,platform:a})},Xe=e(n(),1),Ze=typeof document<`u`?A.useLayoutEffect:function(){};function Qe(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Qe(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!Qe(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function $e(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function et(e,t){let n=$e(e);return Math.round(t*n)/n}function tt(e){let t=A.useRef(e);return Ze(()=>{t.current=e}),t}function nt(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[u,d]=A.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=A.useState(r);Qe(f,r)||p(r);let[m,h]=A.useState(null),[g,_]=A.useState(null),v=A.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),y=A.useCallback(e=>{e!==C.current&&(C.current=e,_(e))},[]),b=a||m,x=o||g,S=A.useRef(null),C=A.useRef(null),w=A.useRef(u),T=c!=null,E=tt(c),D=tt(i),O=tt(l),k=A.useCallback(()=>{if(!S.current||!C.current)return;let e={placement:t,strategy:n,middleware:f};D.current&&(e.platform=D.current),Ye(S.current,C.current,e).then(e=>{let t={...e,isPositioned:O.current!==!1};j.current&&!Qe(w.current,t)&&(w.current=t,Xe.flushSync(()=>{d(t)}))})},[f,t,n,D,O]);Ze(()=>{l===!1&&w.current.isPositioned&&(w.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let j=A.useRef(!1);Ze(()=>(j.current=!0,()=>{j.current=!1}),[]),Ze(()=>{if(b&&(S.current=b),x&&(C.current=x),b&&x){if(E.current)return E.current(b,x,k);k()}},[b,x,k,E,T]);let M=A.useMemo(()=>({reference:S,floating:C,setReference:v,setFloating:y}),[v,y]),N=A.useMemo(()=>({reference:b,floating:x}),[b,x]),P=A.useMemo(()=>{let e={position:n,left:0,top:0};if(!N.floating)return e;let t=et(N.floating,u.x),r=et(N.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...$e(N.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,N.floating,u.x,u.y]);return A.useMemo(()=>({...u,update:k,refs:M,elements:N,floatingStyles:P}),[u,k,M,N,P])}var rt=(e,t)=>{let n=We(e);return{name:n.name,fn:n.fn,options:[e,t]}},it=(e,t)=>{let n=Ge(e);return{name:n.name,fn:n.fn,options:[e,t]}},at=(e,t)=>({fn:Je(e).fn,options:[e,t]}),ot=(e,t)=>{let n=Ke(e);return{name:n.name,fn:n.fn,options:[e,t]}},st=(e,t)=>{let n=qe(e);return{name:n.name,fn:n.fn,options:[e,t]}};function ct(e){return lt(e,e.rootContext)}function lt(e,t){let{nodeId:n,externalTree:r}=e,i=t.useState(`referenceElement`),a=t.useState(`floatingElement`),o=t.useState(`domReferenceElement`),s=t.useState(`open`),c=t.useState(`floatingId`),[l,u]=A.useState(null),[d,f]=A.useState(void 0),[p,m]=A.useState(void 0),h=A.useRef(null),g=D(r),_=A.useMemo(()=>({reference:i,floating:a,domReference:o}),[i,a,o]),y=nt({...e,elements:{..._,...l&&{reference:l}}}),b=w(d)?d:null,x=p===void 0?t.state.floatingElement:p;t.useSyncedValue(`referenceElement`,d??null),t.useSyncedValue(`domReferenceElement`,d===void 0?o:b),t.useSyncedValue(`floatingElement`,x);let S=A.useCallback(e=>{let t=w(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),y.refs.setReference(t)},[y.refs]),C=A.useCallback(e=>{(w(e)||e===null)&&(h.current=e,f(e)),(w(y.refs.reference.current)||y.refs.reference.current===null||e!==null&&!w(e))&&y.refs.setReference(e)},[y.refs,f]),T=A.useCallback(e=>{m(e),y.refs.setFloating(e)},[y.refs]),E=A.useMemo(()=>({...y.refs,setReference:C,setFloating:T,setPositionReference:S,domReference:h}),[y.refs,C,T,S]),O=A.useMemo(()=>({...y.elements,domReference:o}),[y.elements,o]),k=A.useMemo(()=>({...y,dataRef:t.context.dataRef,open:s,onOpenChange:t.setOpen,events:t.context.events,floatingId:c,refs:E,elements:O,nodeId:n,rootStore:t}),[y,E,O,n,t,s,c]);return v(()=>{o&&(h.current=o)},[o]),v(()=>{t.context.dataRef.current.floatingContext=k;let e=g?.nodesRef.current.find(e=>e.id===n);e&&(e.context=k)}),A.useMemo(()=>({...y,context:k,refs:E,elements:O,rootStore:t}),[y,E,O,k,t])}var ut=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0,offsetParent:d=`real`}=I(e,t)||{};if(l==null)return{};let f=fe(u),p={x:n,y:r},m=re(i),h=z(m),g=await o.getDimensions(l),_=m===`y`,v=_?`top`:`left`,y=_?`bottom`:`right`,b=_?`clientHeight`:`clientWidth`,x=a.reference[h]+a.reference[m]-p[m]-a.floating[h],S=p[m]-a.reference[m],C=d===`real`?await o.getOffsetParent?.(l):s.floating,w=s.floating[b]||a.floating[h];(!w||!await o.isElement?.(C))&&(w=s.floating[b]||a.floating[h]);let T=x/2-S/2,E=w/2-g[h]/2-1,D=Math.min(f[v],E),O=Math.min(f[y],E),k=D,A=w-g[h]-O,j=w/2-g[h]/2+T,M=te(k,j,A),N=!c.arrow&&R(i)!=null&&j!==M&&a.reference[h]/2-(j{let{name:n,fn:r}=ut(e);return{name:n,fn:r,options:[e,t]}},ft={name:`hide`,async fn(e){let{width:t,height:n,x:r,y:i}=e.rects.reference,a=t===0&&n===0&&r===0&&i===0,o=await e.platform.detectOverflow(e,{elementContext:`reference`});return{data:{referenceHidden:o.top-n>=0||o.right-t>=0||o.bottom-n>=0||o.left-t>=0||a}}}},pt={sideX:`left`,sideY:`top`},mt=`--available-width`,ht=`--available-height`,gt=`--anchor-width`,_t=`--anchor-height`,vt=`--transform-origin`,yt=mt,bt=ht;function xt(e,t,n){let r=e===`inline-start`||e===`inline-end`;return{top:`top`,right:r?n?`inline-start`:`inline-end`:`right`,bottom:`bottom`,left:r?n?`inline-end`:`inline-start`:`left`}[t]}function St(e,t,n){let{rects:r,placement:i}=e;return{side:xt(t,L(i),n),align:R(i)||`center`,anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function Ct(e){return wt(e,ct)}function wt(e,t){let{anchor:n,positionMethod:i=`absolute`,side:a=`bottom`,sideOffset:o=0,align:s=`center`,alignOffset:c=0,collisionBoundary:l,collisionPadding:d=5,sticky:f=!1,arrowPadding:p=5,disableAnchorTracking:m=!1,inline:h,keepMounted:g=!1,floatingRootContext:_,mounted:y,collisionAvoidance:x,shift:S,nodeId:C,adaptiveOrigin:w,lazyFlip:E=!1,externalTree:D}=e,[O,j]=A.useState(null);!y&&O!==null&&j(null);let M=x.side||`flip`,N=x.align||`flip`,P=x.fallbackAxisSide||`end`,F=S?.crossAxis??!1,ee=S?.rootBoundary,te=typeof n==`function`?n:void 0,I=b(te),ne=te?I:n,z=r(n),re=r(y),V=k()===`rtl`,ie=O||{top:`top`,right:`right`,bottom:`bottom`,left:`left`,"inline-end":V?`left`:`right`,"inline-start":V?`right`:`left`}[a],ae=s===`center`?ie:`${ie}-${s}`,H=d;typeof H==`number`?H={top:H,right:H,bottom:H,left:H}:H&&={top:H.top||0,right:H.right||0,bottom:H.bottom||0,left:H.left||0};let oe=+(a===`bottom`),se=+(a===`top`),ce=+(a===`right`),le=+(a===`left`),ue={boundary:l===`clipping-ancestors`?`clippingAncestors`:l,padding:H},U=A.useRef(null),de=r(o),fe=r(c),W=typeof o==`function`?0:o,pe=typeof c==`function`?0:c,G=[];h&&G.push(h),G.push(rt(e=>{let t=St(e,a,V),n=typeof de.current==`function`?de.current(t):de.current,r=typeof fe.current==`function`?fe.current(t):fe.current;return{mainAxis:n,crossAxis:r,alignmentAxis:r}},[W,pe,V,a]));let me=N===`none`&&M!==`shift`,he=!me&&(f||F||M===`shift`),ge=M===`none`?null:ot({...ue,padding:{top:H.top+1+oe,right:H.right+1+le,bottom:H.bottom+1+se,left:H.left+1+ce},mainAxis:!F&&M===`flip`,crossAxis:N===`flip`&&`alignment`,fallbackAxisSideDirection:P}),_e=me?null:it({...ue,rootBoundary:ee,mainAxis:N!==`none`,crossAxis:he,limiter:f||F?void 0:at(e=>{if(!U.current)return{};let{width:t,height:n}=U.current.getBoundingClientRect(),r=B(L(e.placement)),i=r===`y`?t:n,a=r===`y`?H.left+H.right:H.top+H.bottom;return{offset:i/2+a/2}})},[ue,f,F,ee,H,N]);M===`shift`||N===`shift`||s===`center`?G.push(_e,ge):G.push(ge,_e),G.push(st({...ue,apply({elements:{floating:e},availableWidth:t,availableHeight:n,rects:r}){if(!re.current)return;let i=e.style;i.setProperty(yt,`${t}px`),i.setProperty(bt,`${n}px`);let a=u(e).devicePixelRatio||1,{x:o,y:s,width:c,height:l}=r.reference,d=(Math.round((o+c)*a)-Math.round(o*a))/a,f=(Math.round((s+l)*a)-Math.round(s*a))/a;i.setProperty(gt,`${d}px`),i.setProperty(_t,`${f}px`)}}),dt(e=>({element:U.current||T(e.elements.floating).createElement(`div`),padding:U.current?p:0,offsetParent:`floating`}),[p]),{name:`transformOrigin`,fn(e){let{elements:{floating:t},middlewareData:n,placement:r,platform:i,rects:s,y:c}=e,l=L(r),u=R(r),d=B(l)===`y`,f=U.current,p=typeof o==`function`?o(St(e,a,V)):o,m;m=!f&&u&&Math.abs(d?n.shift?.x||0:n.shift?.y||0)<=1?u===`start`===(d&&i.isRTL?.(t)===!0)?`100%`:`0%`:`${(d?n.arrow?.x||0:n.arrow?.y||0)+(d?f?.clientWidth||0:f?.clientHeight||0)/2}px`;let h=l===`top`||l===`left`?`calc(100% + ${p}px)`:`${-p}px`;return he&&d&&Math.abs(n.shift?.y||0)>p&&(h=`${s.reference.y+s.reference.height/2-c}px`),t.style.setProperty(vt,d?`${m} ${h}`:`${h} ${m}`),{}}},ft,w),v(()=>{!y&&_&&_.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[y,_]);let ve=A.useMemo(()=>({ancestorScroll:!m,elementResize:!m&&typeof ResizeObserver<`u`,layoutShift:!m&&typeof IntersectionObserver<`u`}),[m]),{refs:K,elements:q,x:ye,y:be,middlewareData:J,update:Y,placement:X,context:xe,isPositioned:Z,floatingStyles:Se}=t({rootContext:_,open:g?y:void 0,placement:ae,middleware:G,strategy:i,whileElementsMounted:g?void 0:(...e)=>Ue(...e,ve),nodeId:C,externalTree:D}),{sideX:Q,sideY:Ce}=J.adaptiveOrigin||pt,we=Z?i:`fixed`,Te=A.useMemo(()=>{let e;return e=Z?w?{position:we,[Q]:ye,[Ce]:be}:{...Se,position:we}:{position:we,top:0,left:0},e[yt]=`100vw`,e[bt]=`100vh`,Z||(e.opacity=0),e},[w,we,Q,ye,Ce,be,Se,Z]),Ee=A.useRef(null);v(()=>{if(!y)return;let e=z.current,t=typeof e==`function`?e():e,n=(Tt(t)?t.current:t)||null;n!==Ee.current&&(K.setPositionReference(n),Ee.current=n)},[y,K,ne,z]),A.useEffect(()=>{if(!y)return;let e=z.current;typeof e!=`function`&&Tt(e)&&e.current!==Ee.current&&(K.setPositionReference(e.current),Ee.current=e.current)},[y,K,ne,z]),A.useEffect(()=>{if(g&&y&&q.reference&&q.floating)return Ue(q.reference,q.floating,Y,ve)},[g,y,q,Y,ve]);let $=L(X),De=xt(a,$,V),Oe=R(X)||`center`,ke=!!J.hide?.referenceHidden;v(()=>{E&&y&&Z&&$!==ie&&j($)},[E,y,Z,$,ie]);let Ae=A.useMemo(()=>({position:`absolute`,top:J.arrow?.y,left:J.arrow?.x}),[J.arrow]),je=J.arrow?.centerOffset!==0;return A.useMemo(()=>({positionerStyles:Te,arrowStyles:Ae,arrowRef:U,arrowUncentered:je,side:De,align:Oe,physicalSide:$,anchorHidden:ke,refs:K,context:xe,isPositioned:Z,update:Y}),[Te,Ae,U,je,De,Oe,$,ke,K,xe,Z,Y])}function Tt(e){return e!=null&&`current`in e}function Et(e){return e===`starting`?E:i}function Dt(e,t,{styles:n,transitionStatus:r,props:i,refs:o,hidden:s,inert:c=!1}){let l={...n};return c&&(l.pointerEvents=`none`),a(`div`,e,{state:t,ref:o,props:[{role:`presentation`,hidden:s,style:l},Et(r),i],stateAttributesMapping:O})}export{W as a,Be as i,Et as n,Ct as r,Dt as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-2pqPQOAE.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-2pqPQOAE.js deleted file mode 100644 index 563b144d0..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-2pqPQOAE.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e}from"./dist-BKgR2qk6.js";function t(t){return e(t.defaultTagName??`div`,t,t)}export{t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-C4GZPWLS.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-C4GZPWLS.js new file mode 100644 index 000000000..fe53b0856 --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useRender-C4GZPWLS.js @@ -0,0 +1 @@ +import{n as e}from"./dist-DeC3TnAR.js";function t(t){return e(t.defaultTagName??`div`,t,t)}export{t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-NX6x9Pv8.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-UqEMT494.js similarity index 99% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-NX6x9Pv8.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-UqEMT494.js index 52ca04b56..491d6ee80 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-NX6x9Pv8.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useScrollLock-UqEMT494.js @@ -1 +1 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{n as r,t as i}from"./with-selector-DrM041uv.js";import{c as a,d as o,f as s,i as c,l,n as u,o as d,r as f,s as p,t as m,u as h}from"./useValueAsRef-F56m8WbP.js";import{a as g,c as _,l as v,n as y,o as b,s as x}from"./dist-BKgR2qk6.js";import{C as S,S as C,_ as w,b as T,g as ee,l as E,o as D,p as O,s as k,w as te,x as A,y as ne}from"./button-BarTr35m.js";import{C as re,E as j,S as M,T as N,a as P,f as F,g as I,h as L,o as ie,p as R,t as ae,v as z,x as B,y as V}from"./createBaseUIEventDetails-DL-8egB9.js";function oe(){return typeof navigator>`u`?{userAgent:``,platform:``,maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??``,maxTouchPoints:navigator.maxTouchPoints??0}}var{userAgent:H,platform:U,maxTouchPoints:W}=oe(),G=H.toLowerCase(),K=U.toLowerCase(),q=/^i(os$|p)/.test(K)||K===`macintel`&&W>1,se=`android`,J=K===se||G.includes(se),ce=!q&&K.startsWith(`mac`);K.startsWith(`win`),!J&&/^(linux|chrome os)/.test(K);var le=ce||q,ue=typeof CSS<`u`&&!!CSS.supports?.(`-webkit-backdrop-filter:none`);!ue&&G.includes(`firefox`),!ue&&G.includes(`chrom`);var de=le,Y=/jsdom|happydom/.test(G),X=t(n(),1),Z=e(),Q=`data-base-ui-focusable`,$=`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`,fe=`ArrowLeft`,pe=`ArrowRight`,me=`ArrowUp`,he=`ArrowDown`,ge=`data-open`,_e=`data-closed`,ve=o,ye=h,be=`data-anchor-hidden`,xe=`data-popup-open`,Se=`data-pressed`,Ce={[xe]:``},we={[xe]:``,[Se]:``},Te={[ge]:``},Ee={[_e]:``},De={[be]:``},Oe={open(e){return e?Ce:null}},ke={open(e){return e?we:null}},Ae={open(e){return e?Te:Ee},anchorHidden(e){return e?De:null}},je={...Ae,...l},Me=`data-trigger-disabled`;function Ne(e,t){if(!ne(e))return!1;let n=e;if(t.hasElement(n))return!n.hasAttribute(Me);for(let[,e]of t.entries())if(M(e,n))return!e.hasAttribute(Me);return!1}function Pe(e,t){if(t==null)return!1;if(`composedPath`in e)return e.composedPath().includes(t);let n=e;return n.target!=null&&t.contains(n.target)}function Fe(e){return e.matches(`html,body`)}function Ie(e){return T(e)&&e.matches(`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`)}function Le(e){return e?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${$}`)!=null}function Re(e){return e?e.getAttribute(`role`)===`combobox`&&Ie(e):!1}function ze(e){if(!e||Y)return!0;try{return e.matches(`:focus-visible`)}catch{return!0}}function Be(e){return e?e.hasAttribute(`data-base-ui-focusable`)?e:e.querySelector(`[data-base-ui-focusable]`)||e:null}function Ve(e,t,n=!0){return e.filter(e=>e.parentId===t).flatMap(t=>[...!n||t.context?.open?[t]:[],...Ve(e,t.id,n)])}function He(e,t){let n=[],r=e.find(e=>e.id===t)?.parentId;for(;r;){let t=e.find(e=>e.id===r);r=t?.parentId,t&&(n=n.concat(t))}return n}function Ue(e){e.preventDefault(),e.stopPropagation()}function We(e){return`nativeEvent`in e}function Ge(e){return e.pointerType===``&&e.isTrusted?!0:J&&e.pointerType?e.type===`click`&&e.buttons===1:e.detail===0&&!e.pointerType}function Ke(e){return Y?!1:!J&&e.width===0&&e.height===0||J&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType===`mouse`||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType===`touch`}function qe(e,t){let n=[`mouse`,`pen`];return t||n.push(``,void 0),n.includes(e)}function Je(e){let t=e.type;return t===`click`||t===`mousedown`||t===`keydown`||t===`keyup`}function Ye(e,t){return t<0||t>=e.length}function Xe(e,t){return Qe(e.current,{disabledIndices:t})}function Ze(e,t){return Qe(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function Qe(e,{startingIndex:t=-1,decrement:n=!1,disabledIndices:r,amount:i=1}={}){let a=t;do a+=n?-i:i;while(a>=0&&a<=e.length-1&&$e(e,a,r));return a}function $e(e,t,n){if(typeof n==`function`?n(t):n?.includes(t)??!1)return!0;let r=e[t];return r?!tt(r)||r.matches(`:disabled`)?!0:!n&&(r.hasAttribute(`disabled`)||r.getAttribute(`aria-disabled`)===`true`):!1}function et(e){return e.visibility===`hidden`||e.visibility===`collapse`}function tt(e,t=e?E(e):null){return!e||!e.isConnected||!t||et(t)?!1:typeof e.checkVisibility==`function`?e.checkVisibility():t.display!==`none`&&t.display!==`contents`}var nt=`a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]`;function rt(e){let t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;let n=e.getRootNode();return te(n)?n.host:null}function it(e){for(let t of Array.from(e.children))if(O(t)===`summary`)return t;return null}function at(e,t){let n=it(t);return!!n&&(e===n||M(n,e))}function ot(e){let t=e?O(e):``;return e!=null&&e.matches(nt)&&(t!==`summary`||e.parentElement!=null&&O(e.parentElement)===`details`&&it(e.parentElement)===e)&&(t!==`details`||it(e)==null)&&(t!==`input`||e.type!==`hidden`)}function st(e){if(!ot(e)||!e.isConnected||e.matches(`:disabled`))return!1;for(let t=e;t;t=rt(t)){let n=t!==e,r=O(t)===`slot`;if(t.hasAttribute(`inert`)||n&&O(t)===`details`&&!t.open&&!at(e,t)||t.hasAttribute(`hidden`)||!r&&!ct(t,n))return!1}return!0}function ct(e,t){let n=E(e);return t?n.display!==`none`:tt(e,n)}function lt(e){let t=e.tabIndex;if(t<0){let t=O(e);if(t===`details`||t===`audio`||t===`video`||T(e)&&e.isContentEditable)return 0}return t}function ut(e){if(O(e)!==`input`)return null;let t=e;return t.type===`radio`&&t.name!==``?t:null}function dt(e,t){let n=ut(e);if(!n)return!0;let r=t.find(e=>{let t=ut(e);return t?.name===n.name&&t.form===n.form&&t.checked});return r?r===n:t.find(e=>{let t=ut(e);return t?.name===n.name&&t.form===n.form})===n}function ft(e){if(T(e)&&O(e)===`slot`){let t=e.assignedElements({flatten:!0});if(t.length>0)return t}return T(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function pt(e,t){ft(e).forEach(e=>{ot(e)&&t.push(e),pt(e,t)})}function mt(e,t,n){ft(e).forEach(e=>{T(e)&&e.matches(t)&&n.push(e),mt(e,t,n)})}function ht(e){return st(e)&<(e)>=0}function gt(e){let t=[];return pt(e,t),t.filter(st)}function _t(e){let t=gt(e);return t.filter(e=>lt(e)>=0&&dt(e,t))}function vt(e,t){let n=_t(e),r=n.length;if(r===0)return;let i=B(j(e)),a=n.indexOf(i);return n[a===-1?t===1?0:r-1:a+t]}function yt(e){return vt(j(e).body,1)||e}function bt(e){return vt(j(e).body,-1)||e}function xt(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!M(n,r)}function St(e){_t(e).forEach(e=>{e.dataset.tabindex=e.getAttribute(`tabindex`)||``,e.setAttribute(`tabindex`,`-1`)})}function Ct(e){let t=[];mt(e,`[data-tabindex]`,t),t.forEach(e=>{let t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute(`tabindex`,t):e.removeAttribute(`tabindex`)})}function wt(...e){return()=>{for(let t=0;t{de&&ue&&r(`button`)},[]);let i={tabIndex:0,role:n};return(0,Z.jsx)(`span`,{...e,ref:t,style:Et,"aria-hidden":!n||void 0,...i,"data-base-ui-focus-guard":``})});function kt(e){return`data-base-ui-${e}`}var At=0;function jt(e,t={}){let{preventScroll:n=!1,sync:r=!1,shouldFocus:i}=t;cancelAnimationFrame(At);function a(){(!i||i())&&e?.focus({preventScroll:n})}if(r)return a(),b;let o=requestAnimationFrame(a);return At=o,()=>{At===o&&(cancelAnimationFrame(o),At=0)}}var Mt={inert:new WeakMap,"aria-hidden":new WeakMap},Nt=`data-base-ui-inert`,Pt={inert:new WeakSet,"aria-hidden":new WeakSet},Ft=new WeakMap,It=0;function Lt(e){return Pt[e]}function Rt(e){return e?te(e)?e.host:Rt(e.parentNode):null}var zt=(e,t)=>t.map(t=>{if(e.contains(t))return t;let n=Rt(t);return e.contains(n)?n:null}).filter(e=>e!=null),Bt=e=>{let t=new Set;return e.forEach(e=>{let n=e;for(;n&&!t.has(n);)t.add(n),n=n.parentNode}),t},Vt=(e,t,n)=>{let r=[],i=e=>{e&&!n.has(e)&&Array.from(e.children).forEach(e=>{O(e)!==`script`&&(t.has(e)?i(e):r.push(e))})};return i(e),r};function Ht(e,t,n,r,{mark:i=!0}){let a=null;r?a=`inert`:n&&(a=`aria-hidden`);let o=null,s=null,c=zt(t,e),l=i?Vt(t,Bt(c),new Set(c)):[],u=[],d=[];if(a){let e=Mt[a],n=Lt(a);s=n,o=e;let r=zt(t,Array.from(t.querySelectorAll(`[aria-live]`))),i=c.concat(r);Vt(t,Bt(i),new Set(i)).forEach(t=>{let r=t.getAttribute(a),i=r!==null&&r!==`false`,o=(e.get(t)||0)+1;e.set(t,o),u.push(t),o===1&&i&&n.add(t),i||t.setAttribute(a,a===`inert`?``:`true`)})}return i&&l.forEach(e=>{let t=(Ft.get(e)||0)+1;Ft.set(e,t),d.push(e),t===1&&e.setAttribute(Nt,``)}),It+=1,()=>{o&&u.forEach(e=>{let t=(o.get(e)||0)-1;o.set(e,t),t||(!s?.has(e)&&a&&e.removeAttribute(a),s?.delete(e))}),i&&d.forEach(e=>{let t=(Ft.get(e)||0)-1;Ft.set(e,t),t||e.removeAttribute(Nt)}),--It,It||(Mt.inert=new WeakMap,Mt[`aria-hidden`]=new WeakMap,Pt.inert=new WeakSet,Pt[`aria-hidden`]=new WeakSet,Ft=new WeakMap)}}function Ut(e,t={}){let{ariaHidden:n=!1,inert:r=!1,mark:i=!0}=t,a=j(e[0]).body;return Ht(e,a,n,r,{mark:i})}var Wt=t(s(),1),Gt={style:{transition:`none`}},Kt={fallbackAxisSide:`none`},qt={fallbackAxisSide:`end`},Jt={clipPath:`inset(50%)`,position:`fixed`,top:0,left:0},Yt=X.createContext(null),Xt=()=>X.useContext(Yt),Zt=kt(`portal`);function Qt(e={}){let{ref:t,container:n,componentProps:r=g,elementProps:i}=e,a=N(),o=Xt()?.portalNode,[s,c]=X.useState(null),[l,u]=X.useState(null),d=k(e=>{e!==null&&u(e)}),f=X.useRef(null);D(()=>{if(n===null){f.current&&(f.current=null,u(null),c(null));return}let e=(n&&(C(n)?n:n.current))??o??document.body;if(e==null){f.current&&(f.current=null,u(null),c(null));return}f.current!==e&&(f.current=e,u(null),c(e))},[n,o]);let p=y(`div`,r,{ref:[t,d],props:[{id:a,[Zt]:``},i]}),m=s&&p?Wt.createPortal(p,s):null;return{node:l,nodeId:X.isValidElement(p)?p.props.id:void 0,subtree:m}}var $t=X.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,container:o,portalOwnerRole:s,...c}=e,{node:l,nodeId:d,subtree:f}=Qt({container:o,ref:t,componentProps:e,elementProps:c}),p=X.useRef(null),m=X.useRef(null),h=X.useRef(null),g=X.useRef(null),[_,v]=X.useState(null),y=X.useRef(!1),b=_?.modal,x=_?.open,S=!!_&&!_.modal&&_.open&&!!l;X.useEffect(()=>{if(!l||b)return;function e(e){l&&e.relatedTarget&&xt(e)&&(e.type===`focusin`?y.current&&=(Ct(l),!1):(St(l),y.current=!0))}return wt(u(l,`focusin`,e,!0),u(l,`focusout`,e,!0))},[l,b]),D(()=>{l&&x===!0&&y.current&&(Ct(l),y.current=!1)},[x,l]);let C=X.useMemo(()=>({beforeOutsideRef:p,afterOutsideRef:m,beforeInsideRef:h,afterInsideRef:g,portalNode:l,setFocusManagerState:v}),[l]);return(0,Z.jsxs)(X.Fragment,{children:[f,(0,Z.jsxs)(Yt.Provider,{value:C,children:[S&&l&&(0,Z.jsx)(Ot,{"data-type":`outside`,ref:p,onFocus:e=>{xt(e,l)?h.current?.focus():bt(_?_.domReference:null)?.focus()}}),S&&l&&(0,Z.jsx)(`span`,{role:s,"aria-owns":d,style:Jt}),l&&Wt.createPortal(a,l),S&&l&&(0,Z.jsx)(Ot,{"data-type":`outside`,ref:m,onFocus:e=>{xt(e,l)?g.current?.focus():(yt(_?_.domReference:null)?.focus(),_?.closeOnFocusOut&&_?.onOpenChange(!1,ae(`focus-out`,e.nativeEvent)))}})]})]})}),en=r(),tn=i();function nn(){let e=new Map;return{emit(t,n){e.get(t)?.forEach(e=>e(n))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){e.get(t)?.delete(n)}}}var rn=X.createContext(null),an=X.createContext(null),on=()=>X.useContext(rn)?.id||null,sn=e=>{let t=X.useContext(an);return e??t};function cn(e,t){let n=w(re(e));return e instanceof n.KeyboardEvent?`keyboard`:e instanceof n.FocusEvent?t||`keyboard`:`pointerType`in e?e.pointerType||`keyboard`:`touches`in e?`touch`:e instanceof n.MouseEvent?t||(e.detail===0?`keyboard`:`mouse`):``}var ln=20,un=[];function dn(){un=un.filter(e=>e.deref()?.isConnected)}function fn(e){dn(),e&&O(e)!==`body`&&(un.push(new WeakRef(e)),un.length>ln&&(un=un.slice(-20)))}function pn(){return dn(),un[un.length-1]?.deref()}function mn(e){return e?ht(e)?e:_t(e)[0]||e:null}function hn(e){if(e.hasAttribute(`tabindex`)&&!e.hasAttribute(`data-tabindex`)||!e.getAttribute(`role`)?.includes(`dialog`))return;let t=gt(e).filter(e=>{let t=e.getAttribute(`data-tabindex`)||``;return ht(e)||e.hasAttribute(`data-tabindex`)&&!t.startsWith(`-`)}),n=e.getAttribute(`tabindex`);t.length===0?n!==`0`&&(e.setAttribute(`tabindex`,`0`),e.setAttribute(`data-tabindex`,`0`)):(n!==`-1`||e.hasAttribute(`data-tabindex`)&&e.getAttribute(`data-tabindex`)!==`-1`)&&(e.setAttribute(`tabindex`,`-1`),e.setAttribute(`data-tabindex`,`-1`))}function gn(e){let{context:t,children:n,disabled:r=!1,initialFocus:i=!0,returnFocus:o=!0,restoreFocus:s=!1,modal:c=!0,closeOnFocusOut:l=!0,openInteractionType:f=``,nextFocusableElement:p,previousFocusableElement:h,beforeContentFocusGuardRef:g,externalTree:v,getInsideElements:y}=e,b=`rootStore`in t?t.rootStore:t,x=b.useState(`open`),S=b.useState(`domReferenceElement`),C=b.useState(`floatingElement`),{events:w,dataRef:ee}=b.context,E=k(()=>ee.current.floatingContext?.nodeId),te=i===!1,A=Re(S)&&te,ne=m(i),N=m(o),P=m(f),F=m(x),I=sn(v),L=Xt(),R=X.useRef(!1),z=X.useRef(!1),oe=X.useRef(!1),H=X.useRef(null),U=X.useRef(``),W=X.useRef(``),G=X.useRef(null),K=X.useRef(null),q=_(G,g,L?.beforeInsideRef),se=_(K,L?.afterInsideRef),J=V(),ce=V(),le=a(),de=L!=null,Y=Be(C),Q=k((e=Y)=>e?_t(e):[]),$=k(()=>y?.().filter(e=>e!=null)??[]);X.useEffect(()=>{if(r||!c)return;function e(e){e.key===`Tab`&&M(Y,B(j(Y)))&&Q().length===0&&!A&&Ue(e)}let t=j(Y);return u(t,`keydown`,e)},[r,Y,c,A,Q]),X.useEffect(()=>{if(r||!x)return;let e=j(Y);function t(){oe.current=!1}function n(e){let t=re(e),n=$(),r=M(C,t)||M(S,t)||M(L?.portalNode,t)||n.some(e=>e===t||M(e,t));oe.current=!r,W.current=e.pointerType||`keyboard`,t?.closest(`[data-base-ui-click-trigger]`)&&(z.current=!0,ce.start(0,()=>{z.current=!1}))}function i(){W.current=`keyboard`}return wt(u(e,`pointerdown`,n,!0),u(e,`pointerup`,t,!0),u(e,`pointercancel`,t,!0),u(e,`keydown`,i,!0),t)},[r,C,S,Y,x,L,ce,$]),X.useEffect(()=>{if(r||!l)return;let e=j(Y);function t(){z.current=!0,ce.start(0,()=>{z.current=!1})}function n(e){let t=re(e);ht(t)&&(H.current=t)}function i(t){let n=t.relatedTarget,r=t.currentTarget,i=re(t);c&&n==null&&i!=null&&M(C,i)&&fn(i),queueMicrotask(()=>{let a=E(),o=b.context.triggerElements,l=$(),u=n?.hasAttribute(kt(`focus-guard`))&&[G.current,K.current,L?.beforeInsideRef.current,L?.afterInsideRef.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,d(h),d(p)].includes(n),f=!(M(S,n)||M(C,n)||M(n,C)||M(L?.portalNode,n)||l.some(e=>e===n||M(e,n))||o.hasMatchingElement(e=>M(e,n))||u||I&&(Ve(I.nodesRef.current,a).find(e=>M(e.context?.elements.floating,n)||M(e.context?.elements.domReference,n))||He(I.nodesRef.current,a).find(e=>[e.context?.elements.floating,Be(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(r===S&&Y&&hn(Y),s&&r!==S&&!tt(i)&&B(e)===e.body){if(T(Y)&&(Y.focus(),s===`popup`)){le.request(()=>{Y.focus()});return}let e=Q(),t=H.current,n=(t&&e.includes(t)?t:null)||e[e.length-1]||Y;T(n)&&n.focus()}if(ee.current.insideReactTree){ee.current.insideReactTree=!1;return}(A||!c)&&n&&f&&!z.current&&(A||n!==pn())&&(R.current=!0,b.setOpen(!1,ae(ie,t)))})}function a(){oe.current||(ee.current.insideReactTree=!0,J.start(0,()=>{ee.current.insideReactTree=!1}))}let o=T(S)?S:null;if(C||o)return wt(o&&u(o,`focusout`,i),o&&u(o,`pointerdown`,t),C&&u(C,`focusin`,n),C&&u(C,`focusout`,i),C&&L&&u(C,`focusout`,a,!0))},[r,S,C,Y,c,I,L,b,l,s,Q,A,E,ee,J,ce,le,p,h,$]),X.useEffect(()=>{if(r||!C||!x)return;let e=Array.from(L?.portalNode?.querySelectorAll(`[${kt(`portal`)}]`)||[]),t=(I?He(I.nodesRef.current,E()):[]).find(e=>Re(e.context?.elements.domReference||null))?.context?.elements.domReference,n=Ut([C,...e,G.current,K.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,...$(),t,d(h),d(p),A?S:null].filter(e=>e!=null),{ariaHidden:c||A,mark:!1}),i=Ut([C,...e].filter(e=>e!=null));return()=>{i(),n()}},[x,r,S,C,c,L,A,I,E,p,h,$]),D(()=>{if(!x||r||!T(Y))return;U.current=``,W.current=``;let e=j(Y),t=B(e);queueMicrotask(()=>{let n=ne.current,r=typeof n==`function`?n(P.current||``):n;if(r===void 0||r===!1||M(Y,t))return;let i=null,a=()=>(i??=Q(Y),i[0]||Y),o;o=r===!0||r===null?a():d(r),o||=a();let s=M(Y,B(e));jt(o,{preventScroll:o===Y,shouldFocus(){if(!F.current)return!1;if(s)return!0;let t=B(e);return!(t!==o&&M(Y,t))}})})},[r,x,Y,Q,ne,P,F]),D(()=>{if(r||!Y)return;let e=j(Y),t=B(e),n=P.current==null;fn(t);function i(e){if(e.open||(U.current=cn(e.nativeEvent,W.current)),e.reason===`trigger-hover`&&e.nativeEvent.type===`mouseleave`&&(R.current=!0),e.reason===`outside-press`){if(e.nested)R.current=!1;else if(Ge(e.nativeEvent)||Ke(e.nativeEvent))R.current=!1;else{let e=!1;j(Y).createElement(`div`).focus({get preventScroll(){return e=!0,!1}}),e?R.current=!1:R.current=!0}}}w.on(`openchange`,i);function a(e){let r=N.current,i=typeof r==`function`?r(e):r;if(i===void 0||i===!1)return null;i===null&&(i=!0);let a=S?.isConnected?S:null,o=t?.isConnected&&O(t)!==`body`?t:null,s=n?o||a:a||o;return s||=pn()||null,typeof i==`boolean`?s:d(i)||s||null}return()=>{w.off(`openchange`,i);let t=B(e),n=$(),r=M(C,t)||n.some(e=>e===t||M(e,t))||I&&Ve(I.nodesRef.current,E(),!1).some(e=>M(e.context?.elements.floating,t)),o=N.current,s=U.current,c=a(s);queueMicrotask(()=>{let n=mn(c),i=typeof o!=`boolean`;if(o&&!R.current&&T(n)&&(i||n===t||t===e.body||r)){let e={preventScroll:!0};s===`keyboard`&&(e.focusVisible=!0),n.focus(e)}R.current=!1})}},[r,C,Y,N,P,w,I,S,E,$]),D(()=>{if(!ue||x||!C)return;let e=B(j(C));T(e)&&Ie(e)&&M(C,e)&&e.blur()},[x,C]),D(()=>{if(!r&&L)return L.setFocusManagerState({modal:c,closeOnFocusOut:l,open:x,onOpenChange:b.setOpen,domReference:S}),()=>{L.setFocusManagerState(null)}},[r,L,c,x,b,l,S]),D(()=>{if(!r&&Y)return hn(Y),()=>{queueMicrotask(dn)}},[r,Y]);let fe=!r&&(!c||!A)&&(de||c);return(0,Z.jsxs)(X.Fragment,{children:[fe&&(0,Z.jsx)(Ot,{"data-type":`inside`,ref:q,onFocus:e=>{if(c){let e=Q();jt(e[e.length-1])}else L?.portalNode&&(R.current=!1,xt(e,L.portalNode)?yt(S)?.focus():d(h??L.beforeOutsideRef)?.focus())}}),n,fe&&(0,Z.jsx)(Ot,{"data-type":`inside`,ref:se,onFocus:e=>{c?jt(Q()[0]):L?.portalNode&&(l&&(R.current=!0),xt(e,L.portalNode)?bt(S)?.focus():d(p??L.afterOutsideRef)?.focus())}})]})}function _n(){return!1}function vn(e){return{escapeKey:typeof e==`boolean`?e:e?.escapeKey??!1,outsidePress:typeof e==`boolean`?e:e?.outsidePress??!0}}function yn(e,t={}){let{enabled:n=!0,escapeKey:r=!0,outsidePress:i=!0,outsidePressEvent:a=`sloppy`,referencePress:o=_n,bubbles:s,externalTree:c}=t,l=`rootStore`in e?e.rootStore:e,d=l.useState(`open`),f=l.useState(`floatingElement`),{dataRef:p,events:m}=l.context,h=sn(c),g=k(typeof i==`function`?i:()=>!1),_=typeof i==`function`?g:i,v=_!==!1,y=k(()=>a),{escapeKey:b,outsidePress:x}=vn(s),S=X.useRef(!1),C=X.useRef(!1),w=X.useRef(!1),D=X.useRef(!1),O=X.useRef(!1),N=X.useRef(``),F=X.useRef(null),L=V(),ie=V(),B=k(()=>{ie.clear(),p.current.insideReactTree=!1}),oe=k(e=>{let t=p.current.floatingContext?.nodeId;return(h?Ve(h.nodesRef.current,t):[]).some(t=>t.context?.open&&!t.context.dataRef.current[e])}),H=k(e=>Pe(e,l.select(`floatingElement`))||Pe(e,l.select(`domReferenceElement`))),U=k(e=>{o()&&l.setOpen(!1,ae(I,e.nativeEvent))}),W=k(e=>{if(!d||!n||!r||e.key!==`Escape`||O.current||!b&&oe(`__escapeKeyBubbles`))return;let t=We(e)?e.nativeEvent:e,i=ae(P,t);l.setOpen(!1,i),i.isCanceled||e.preventDefault(),!b&&!i.isPropagationAllowed&&e.stopPropagation()}),G=k(()=>{p.current.insideReactTree=!0,ie.start(0,B)}),K=k(e=>{if(!d||!n||e.button!==0)return;let t=re(e.nativeEvent);M(l.select(`floatingElement`),t)&&(S.current||(S.current=!0,C.current=!1))}),q=k(e=>{d&&n&&(e.defaultPrevented||e.nativeEvent.defaultPrevented)&&S.current&&(C.current=!0)});X.useEffect(()=>{function e(e){e.open||(D.current=!1)}return m.on(`openchange`,e),()=>{m.off(`openchange`,e)}},[m]),X.useEffect(()=>{if(!d||!n)return d||(D.current=!1),B;p.current.__escapeKeyBubbles=b,p.current.__outsidePressBubbles=x;let e=new z,t=new z,i=j(f);function a(){e.clear(),O.current=!0}function o(){e.start(ue?5:0,()=>{O.current=!1})}function s(){w.current=!0,t.start(0,()=>{w.current=!1})}function c(){S.current=!1,C.current=!1}function m(){let e=N.current,t=e===`pen`||!e?`mouse`:e,n=y(),r=typeof n==`function`?n():n;return typeof r==`string`?r:r[t]}function g(e){let t=m();return t===`intentional`&&e.type!==`click`||t===`sloppy`&&e.type===`click`}function k(e){let t=p.current.floatingContext?.nodeId,n=h&&Ve(h.nodesRef.current,t).some(t=>Pe(e,t.context?.elements.floating));return H(e)||n}function P(e){if(g(e)){e.type!==`click`&&!H(e)&&(t.clear(),w.current=!1),B();return}if(p.current.insideReactTree){B();return}let n=re(e),r=`[${kt(`inert`)}]`,i=ne(n)?n.getRootNode():null,a=Array.from((te(i)?i:j(l.select(`floatingElement`))).querySelectorAll(r)),o=l.context.triggerElements;if(n&&(o.hasElement(n)||o.hasMatchingElement(e=>M(e,n))))return;let s=ne(n)?n:null;for(;s&&!A(s);){let e=ee(s);if(A(e)||!ne(e))break;s=e}if(!(a.length&&ne(n)&&!Fe(n)&&!M(n,l.select(`floatingElement`))&&a.every(e=>!M(s,e)))){if(T(n)&&!(`touches`in e)){let t=A(n),r=E(n),i=/auto|scroll/,a=t||i.test(r.overflowX),o=t||i.test(r.overflowY),s=a&&n.clientWidth>0&&n.scrollWidth>n.clientWidth,c=o&&n.clientHeight>0&&n.scrollHeight>n.clientHeight,l=r.direction===`rtl`,u=c&&(l?e.offsetX<=n.offsetWidth-n.clientWidth:e.offsetX>n.clientWidth),d=s&&e.offsetY>n.clientHeight;if(u||d)return}if(!k(e)){if(m()===`intentional`){if(e.detail!==0&&!Ge(e)&&!D.current)return;if(w.current){t.clear(),w.current=!1;return}}(typeof _!=`function`||_(e))&&(oe(`__outsidePressBubbles`)||(l.setOpen(!1,ae(R,e)),B()))}}}function I(e){m()===`sloppy`&&e.pointerType!==`touch`&&l.select(`open`)&&n&&!H(e)&&P(e)}function ie(e){if(m()!==`sloppy`||!l.select(`open`)||!n||H(e))return;let t=e.touches[0];t&&(F.current={startTime:Date.now(),startX:t.clientX,startY:t.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},L.start(1e3,()=>{F.current&&(F.current.dismissOnTouchEnd=!1,F.current.dismissOnMouseDown=!1)}))}function V(e,t){let n=re(e);if(!n)return;let r=u(n,e.type,()=>{t(e),r()})}function U(e){N.current=`touch`,V(e,ie)}function G(e){L.clear(),e.type===`pointerdown`&&(e.button===0&&(D.current=!0),N.current=e.pointerType),(e.type!==`mousedown`||!F.current||F.current.dismissOnMouseDown)&&V(e,e=>{e.type===`pointerdown`?I(e):P(e)})}function K(e){if(e.type===`pointercancel`&&(D.current=!1),!S.current)return;let n=C.current;if(c(),m()===`intentional`){if(e.type===`pointercancel`){n&&s();return}if(!k(e)){if(n){s();return}(typeof _!=`function`||_(e))&&(t.clear(),w.current=!0,B())}}}function q(e){if(m()!==`sloppy`||!F.current||H(e))return;let t=e.touches[0];if(!t)return;let n=Math.abs(t.clientX-F.current.startX),r=Math.abs(t.clientY-F.current.startY),i=Math.sqrt(n*n+r*r);i>5&&(F.current.dismissOnTouchEnd=!0),i>10&&(P(e),L.clear(),F.current=null)}function se(e){V(e,q)}function J(e){m()===`sloppy`&&F.current&&!H(e)&&(F.current.dismissOnTouchEnd&&P(e),L.clear(),F.current=null)}function ce(e){V(e,J)}let le=wt(r&&wt(u(i,`keydown`,W),u(i,`compositionstart`,a),u(i,`compositionend`,o)),v&&wt(u(i,`click`,G,!0),u(i,`pointerdown`,G,!0),u(i,`pointerup`,K,!0),u(i,`pointercancel`,K,!0),u(i,`mousedown`,G,!0),u(i,`mouseup`,K,!0),u(i,`touchstart`,U,{capture:!0,passive:!0}),u(i,`touchmove`,se,{capture:!0,passive:!0}),u(i,`touchend`,ce,{capture:!0,passive:!0})));return()=>{le(),e.clear(),t.clear(),c(),w.current=!1,B()}},[p,f,r,v,_,d,n,b,x,W,B,y,oe,H,h,l,L]);let se=X.useMemo(()=>({onKeyDown:W,onPointerDown:U,onClick:U}),[W,U]),J=X.useMemo(()=>({onKeyDown:W,onPointerDown:q,onMouseDown:q,onClickCapture:G,onMouseDownCapture(e){G(),K(e)},onPointerDownCapture(e){G(),K(e)},onMouseUpCapture:G,onTouchEndCapture:G,onTouchMoveCapture:G}),[W,G,K,q]);return X.useMemo(()=>n?{reference:se,floating:J,trigger:se}:{},[n,se,J])}var bn=[],xn=void 0;function Sn(){return xn}function Cn(e){bn.push(e)}function wn(e){let t=(t,n)=>{let r=v(En).current,i;try{xn=r;for(let e of bn)e.before(r);i=e(t,n);for(let e of bn)e.after(r);r.didInitialize=!0}finally{xn=void 0}return i};return t.displayName=e.displayName||e.name,t}function Tn(e){return X.forwardRef(wn(e))}function En(){return{didInitialize:!1}}var Dn=x(19)?An:jn;function On(e,t,n,r,i){return Dn(e,t,n,r,i)}function kn(e,t,n,r,i){let a=X.useCallback(()=>t(e.getSnapshot(),n,r,i),[e,t,n,r,i]);return(0,en.useSyncExternalStore)(e.subscribe,a,a)}Cn({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let n=0;n0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{let n=new Set;for(let t of e.syncHooks)n.add(t.store);let r=[];for(let e of n)r.push(e.subscribe(t));return()=>{for(let e of r)e()}}),(0,en.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot))}});function An(e,t,n,r,i){let a=Sn();if(!a)return kn(e,t,n,r,i);let o=a.syncIndex;a.syncIndex+=1;let s;return a.didInitialize?(s=a.syncHooks[o],(s.store!==e||s.selector!==t||!Object.is(s.a1,n)||!Object.is(s.a2,r)||!Object.is(s.a3,i))&&(s.store!==e&&(a.didChangeStore=!0),s.store=e,s.selector=t,s.a1=n,s.a2=r,s.a3=i,s.value=t(e.getSnapshot(),n,r,i))):(s={store:e,selector:t,a1:n,a2:r,a3:i,value:t(e.getSnapshot(),n,r,i)},a.syncHooks.push(s)),s.value}function jn(e,t,n,r,i){return(0,tn.useSyncExternalStoreWithSelector)(e.subscribe,e.getSnapshot,e.getSnapshot,e=>t(e,n,r,i))}var Mn=class{static create(e){return new this(e)}constructor(e){this.state=e,this.listeners=new Set,this.updateTick=0}subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});getSnapshot=()=>this.state;setState(e){if(this.state===e)return;this.state=e,this.updateTick+=1;let t=this.updateTick;for(let n of this.listeners){if(t!==this.updateTick)return;n(e)}}update(e){for(let t in e)if(!Object.is(this.state[t],e[t])){this.setState({...this.state,...e});return}}set(e,t){Object.is(this.state[e],t)||this.setState({...this.state,[e]:t})}notifyAll(){let e={...this.state};this.setState(e)}use(e,t,n,r){return On(this,e,t,n,r)}},Nn=class extends Mn{constructor(e,t={},n){super(e),this.context=t,this.selectors=n}useSyncedValue(e,t){X.useDebugValue(e);let n=this;D(()=>{n.state[e]!==t&&n.set(e,t)},[n,e,t])}useSyncedValueWithCleanup(e,t){let n=this;D(()=>(n.state[e]!==t&&n.set(e,t),()=>{n.set(e,void 0)}),[n,e,t])}useSyncedValues(e){let t=this,n=Object.values(e);D(()=>{t.update(e)},[t,...n])}useControlledProp(e,t){X.useDebugValue(e);let n=this,r=t!==void 0;D(()=>{r&&!Object.is(n.state[e],t)&&n.setState({...n.state,[e]:t})},[n,e,t,r])}select(e,t,n,r){let i=this.selectors[e];return i(this.state,t,n,r)}useState(e,t,n,r){return X.useDebugValue(e),On(this,this.selectors[e],t,n,r)}useContextCallback(e,t){X.useDebugValue(e);let n=k(t??b);this.context[e]=n}useStateSetter(e){let t=X.useRef(void 0);return t.current===void 0&&(t.current=t=>{this.set(e,t)}),t.current}observe(e,t){let n;n=typeof e==`function`?e:this.selectors[e];let r=n(this.state);return t(r,r,this),this.subscribe(e=>{let i=n(e);if(!Object.is(r,i)){let e=r;r=i,t(i,e,this)}})}},Pn={open:e=>e.open,transitionStatus:e=>e.transitionStatus,domReferenceElement:e=>e.domReferenceElement,referenceElement:e=>e.positionReference??e.referenceElement,floatingElement:e=>e.floatingElement,floatingId:e=>e.floatingId},Fn=class extends Nn{constructor(e){let{syncOnly:t,nested:n,onOpenChange:r,triggerElements:i,...a}=e;super({...a,positionReference:a.referenceElement,domReferenceElement:a.referenceElement},{onOpenChange:r,dataRef:{current:{}},events:nn(),nested:n,triggerElements:i},Pn),this.syncOnly=t}syncOpenEvent=(e,t)=>{(!e||!this.state.open||t!=null&&Je(t))&&(this.context.dataRef.current.openEvent=e?t:void 0)};dispatchOpenChange=(e,t)=>{this.syncOpenEvent(e,t.event);let n={open:e,reason:t.reason,nativeEvent:t.event,nested:this.context.nested,triggerElement:t.trigger};this.context.events.emit(`openchange`,n)};setOpen=(e,t)=>{if(this.syncOnly){this.context.onOpenChange?.(e,t);return}this.dispatchOpenChange(e,t),this.context.onOpenChange?.(e,t)}};function In(e){let{popupStore:t,treatPopupAsFloatingElement:n=!1,floatingRootContext:r,floatingId:i,nested:a,onOpenChange:o}=e,s=t.useState(`open`),c=t.useState(`activeTriggerElement`),l=t.useState(n?`popupElement`:`positionerElement`),u=t.context.triggerElements,d=o,f=X.useRef(null);r===void 0&&f.current===null&&(f.current=new Fn({open:s,transitionStatus:void 0,referenceElement:c,floatingElement:l,triggerElements:u,onOpenChange:d,floatingId:i,syncOnly:!0,nested:a}));let p=r??f.current;return t.useSyncedValue(`floatingId`,i),D(()=>{let e={open:s,floatingId:i,referenceElement:c,floatingElement:l};ne(c)&&(e.domReferenceElement=c),p.state.positionReference===p.state.referenceElement&&(e.positionReference=c),p.update(e)},[s,i,c,l,p]),p.context.onOpenChange=d,p.context.nested=a,p}var Ln={tabIndex:-1,[Q]:``};function Rn(e){return t=>t!==`touch`||e.current}function zn(e,t=!1){let n=N(),r=on()!=null,i=v(()=>e(n,r)).current;return In({popupStore:i,treatPopupAsFloatingElement:t,floatingRootContext:i.state.floatingRootContext,floatingId:n,nested:r,onOpenChange:i.setOpen}),i}function Bn({handle:e,store:t}){return D(()=>e.attachStore(t),[e,t]),null}function Vn(e){let t=e.context.triggerElements.size;e.select(`open`)&&e.state.triggerCount!==t&&e.set(`triggerCount`,t)}function Hn(e,t){let n=X.useRef(null);return k(r=>{let i=n.current;if(i!==null){if(i.element===r&&i.store===t&&i.id===e)return;n.current=null;let a=i.store;a.context.triggerElements.getById(i.id)===i.element&&(a.context.triggerElements.delete(i.id),Vn(a))}r!==null&&e!==void 0&&(n.current={store:t,id:e,element:r},t.context.triggerElements.add(e,r),Vn(t))})}function Un(e,t,n,r=!1){let i=e.preventUnmountingOnClose;t?i=!1:r&&(i=!0);let a=n?.id??null,o=e.activeTriggerId,s=e.activeTriggerElement;return(a||t)&&(o=a,s=n??null),{open:t,preventUnmountingOnClose:i,activeTriggerId:o,activeTriggerElement:s}}function Wn(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function Gn(e,t,n,r={}){let i=n.reason,a=i===L,o=t&&i===`trigger-focus`,s=!t&&(i===`trigger-press`||i===`escape-key`),c=Wn(n);if(e.context.onOpenChange?.(t,n),n.isCanceled)return;r.onBeforeDispatch?.(),e.state.floatingRootContext.dispatchOpenChange(t,n);let l=()=>{let i=Un(e.state,t,n.trigger,c()),l={...r.extraState,...i};o?l.instantType=`focus`:s?l.instantType=`dismiss`:a&&(l.instantType=void 0),e.update(l)};a?Wt.flushSync(l):l()}function Kn(e,t,n,r){let i=n.useState(`isMountedByTrigger`,e),a=Hn(e,n),o=k(t=>{let i=n.select(`open`),a=n.select(`activeTriggerId`);if(a===e){let e={activeTriggerElement:t,...i?r:null};n.update(e);return}if(a==null&&i){let i={activeTriggerId:e??null,activeTriggerElement:t,...r};n.update(i)}}),s=k(e=>{a(e),e&&o(e)});return D(()=>(s(t.current),()=>s(null)),[s,t,n,e]),D(()=>{if(i){let e={activeTriggerElement:t.current,...r};n.update(e)}},[i,n,t,...Object.values(r)]),{registerTrigger:s,isMountedByThisTrigger:i}}function qn(e,t={}){let{closeOnActiveTriggerUnmount:n=!1}=t,r=X.useRef(null),i=e.useState(`open`),a=e.useState(`triggerCount`),o=e.useState(`activeTriggerId`),s=e.useState(`activeTriggerElement`);D(()=>{if(!i){r.current=null,e.state.triggerCount!==0&&e.set(`triggerCount`,0);return}let t=e.context.triggerElements.size,a={};e.state.triggerCount!==t&&(a.triggerCount=t);let o=e.select(`activeTriggerId`),s=null;if(o){let t=e.context.triggerElements.getById(o);if(t)r.current=o,t!==e.state.activeTriggerElement&&(a.activeTriggerElement=t);else{for(let[t,n]of e.context.triggerElements.entries())if(n===e.state.activeTriggerElement){a.activeTriggerId=t,a.activeTriggerElement=n,r.current=t;break}a.activeTriggerId===void 0&&(r.current===o?s=o:r.current=null)}}else r.current=null;if(!s&&!o&&t===1){let t=e.context.triggerElements.entries().next();if(!t.done){let[e,n]=t.value;a.activeTriggerId=e,a.activeTriggerElement=n,r.current=e}}(a.triggerCount!==void 0||a.activeTriggerId!==void 0||a.activeTriggerElement!==void 0)&&e.update(a),s&&n&&queueMicrotask(()=>{if(e.select(`open`)&&e.select(`activeTriggerId`)===s&&!e.context.triggerElements.getById(s)){let t=ae(F);e.setOpen(!1,t),t.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[i,e,a,o,s,n])}function Jn(e,t,n,r){let{mounted:i,setMounted:a,transitionStatus:o}=f(e,!1,!1,r),s=t.useState(`preventUnmountingOnClose`),l=!e&&s;t.useSyncedValues({mounted:i,transitionStatus:o,preventUnmountingOnClose:l});let u=k(()=>{a(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),n?.(),t.context.onOpenChangeComplete?.(!1)});return c({enabled:i&&!e&&!l,open:e,ref:t.context.popupRef,onComplete(){e||u()}}),{forceUnmount:u,transitionStatus:o}}function Yn(e,t){e.useSyncedValues(t),D(()=>()=>{e.update({activeTriggerProps:g,inactiveTriggerProps:g,popupProps:g})},[e])}function Xn(e,t){D(()=>{!t&&e.state.openMethod!==null&&e.set(`openMethod`,null)},[t,e]),D(()=>()=>{e.state.openMethod!==null&&e.set(`openMethod`,null)},[e])}var Zn=class{constructor(){this.idMap=new Map}add(e,t){this.idMap.set(e,t)}delete(e){this.idMap.delete(e)}hasElement(e){for(let t of this.idMap.values())if(t===e)return!0;return!1}hasMatchingElement(e){for(let t of this.idMap.values())if(e(t))return!0;return!1}getById(e){return this.idMap.get(e)}entries(){return this.idMap.entries()}elements(){return this.idMap.values()}get size(){return this.idMap.size}},Qn=`ArrowUp`,$n=`ArrowDown`,er=`ArrowLeft`,tr=`ArrowRight`,nr=`Home`,rr=new Set([Qn,$n,er,tr,nr,`End`]),ir=[`Shift`,`Control`,`Alt`,`Meta`];function ar(e){return T(e)&&e.tagName===`INPUT`}function or(e){return!!(ar(e)&&e.selectionStart!=null||T(e)&&e.tagName===`TEXTAREA`)}function sr(e,t,n,r){if(!e||!t||!t.scrollTo)return;let i=e.scrollLeft,a=e.scrollTop,o=e.clientWidthe.scrollLeft+e.clientWidth-a.scrollPaddingRight?i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight:r-o.scrollMarginLefte.scrollLeft+e.clientWidth-a.scrollPaddingRight&&(i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight))}if(s&&r!==`horizontal`){let n=cr(e,t,`top`),r=lr(e),i=lr(t);n-i.scrollMarginTope.scrollTop+e.clientHeight-r.scrollPaddingBottom&&(a=n+t.offsetHeight+i.scrollMarginBottom-e.clientHeight+r.scrollPaddingBottom)}e.scrollTo({left:i,top:a,behavior:`auto`})}function cr(e,t,n){let r=n===`left`?`offsetLeft`:`offsetTop`,i=0;for(;t.offsetParent&&(i+=t[r],t.offsetParent!==e);)t=t.offsetParent;return i}function lr(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}function ur(e){return x(19)?e:e?`true`:void 0}var dr=X.forwardRef(function(e,t){let{cutout:n,...r}=e,i;if(n){let e=n.getBoundingClientRect();i=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${e.left}px ${e.top}px,${e.left}px ${e.bottom}px,${e.right}px ${e.bottom}px,${e.right}px ${e.top}px,${e.left}px ${e.top}px)`}return(0,Z.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),fr={},pr={},mr=``;function hr(e,t){return S(e)?e:t}function gr(e,t,n){return/hidden|clip/.test(e.getComputedStyle(hr(t,n)).overflowY)}function _r(e){if(typeof document>`u`)return!1;let t=j(e);return w(t).innerWidth-t.documentElement.clientWidth>0}function vr(e){if(!(typeof CSS<`u`&&CSS.supports&&CSS.supports(`scrollbar-gutter`,`stable`))||typeof document>`u`)return!1;let t=j(e),n=t.documentElement,r=t.body,i=hr(n,r),a=i.style.overflowY,o=n.style.scrollbarGutter;n.style.scrollbarGutter=`stable`,i.style.overflowY=`scroll`;let s=i.offsetWidth;i.style.overflowY=`hidden`;let c=i.offsetWidth;return i.style.overflowY=a,n.style.scrollbarGutter=o,s===c}function yr(e){let t=j(e),n=t.documentElement,r=t.body,i=hr(n,r),a={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:`hidden`,overflowX:`hidden`}),()=>{Object.assign(i.style,a)}}function br(e){let t=j(e),n=t.documentElement,r=t.body,i=w(n),a=0,o=0,s=!1,c=p.create();if(ue&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let t=i.getComputedStyle(n),c=i.getComputedStyle(r),l=(t.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,fr={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},mr=n.style.scrollBehavior,pr={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let u=n.scrollHeight>n.clientHeight,d=n.scrollWidth>n.clientWidth,f=t.overflowY===`scroll`||c.overflowY===`scroll`,p=t.overflowX===`scroll`||c.overflowX===`scroll`,m=Math.max(0,i.innerWidth-r.clientWidth),h=Math.max(0,i.innerHeight-r.clientHeight),g=parseFloat(c.marginTop)+parseFloat(c.marginBottom),_=parseFloat(c.marginLeft)+parseFloat(c.marginRight),v=hr(n,r);if(s=vr(e),s){n.style.scrollbarGutter=l,v.style.overflowY=`hidden`,v.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:l,overflowY:`hidden`,overflowX:`hidden`}),(u||f)&&(n.style.overflowY=`scroll`),(d||p)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:g||h?`calc(100dvh - ${g+h}px)`:`100dvh`,width:_||m?`calc(100vw - ${_+m}px)`:`100vw`,boxSizing:`border-box`,overflowY:`hidden`,overflowX:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function d(){Object.assign(n.style,fr),Object.assign(r.style,pr),s||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=mr)}function f(){d(),c.request(l)}l();let m=u(i,`resize`,f);return()=>{c.cancel(),d(),typeof i.removeEventListener==`function`&&m()}}var xr=new class{lockCount=0;restore=null;timeoutLock=z.create();timeoutUnlock=z.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=j(e),n=t.documentElement,r=t.body,i=w(n);if(gr(i,n,r)){let t=new i.MutationObserver(()=>{gr(i,n,r)||(t.disconnect(),this.restore=null,this.lock(e))}),a={attributes:!0};t.observe(n,a),t.observe(r,a),this.restore=()=>t.disconnect();return}let a=q||!_r(e);this.restore=a?yr(e):br(e)}};function Sr(e=!0,t=null){D(()=>{if(e)return xr.acquire(t)},[e,t])}export{Ve as $,gn as A,Et as B,Xn as C,q as Ct,wn as D,Nn as E,Gt as F,Xe as G,wt as H,Kt as I,$e as J,tt as K,qt as L,sn as M,$t as N,Tn as O,Qt as P,Ue as Q,jt as R,zn as S,ue as St,Fn as T,Qe as U,Dt as V,Ze as W,Ge as X,qe as Y,Ke as Z,Rn as _,he as _t,er as a,ze as at,Jn as b,me as bt,rr as c,je as ct,or as d,xe as dt,Be as et,sr as f,Se as ft,Gn as g,ve as gt,Bn as h,ge as ht,$n as i,Ie as it,on as j,yn as k,nr as l,ke as lt,Ln as m,ye as mt,dr as n,Ne as nt,tr as o,Me as ot,Zn as p,_e as pt,Ye as q,ur as r,Re as rt,Qn as s,Ae as st,Sr as t,Le as tt,ir as u,Oe as ut,Un as v,fe as vt,Kn as w,ce as wt,Yn as x,Y as xt,qn as y,pe as yt,kt as z}; \ No newline at end of file +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{n as r,t as i}from"./with-selector-DrM041uv.js";import{c as a,d as o,f as s,i as c,l,n as u,o as d,r as f,s as p,t as m,u as h}from"./useValueAsRef-hoe2gsyn.js";import{a as g,c as _,l as v,n as y,o as b,s as x}from"./dist-DeC3TnAR.js";import{C as S,S as C,_ as w,b as T,g as ee,l as E,o as D,p as O,s as k,w as te,x as A,y as ne}from"./button-qf9lLJ2x.js";import{C as re,E as j,S as M,T as N,a as P,f as F,g as I,h as L,o as ie,p as R,t as ae,v as z,x as B,y as V}from"./createBaseUIEventDetails-CJZ8g-R_.js";function oe(){return typeof navigator>`u`?{userAgent:``,platform:``,maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??``,maxTouchPoints:navigator.maxTouchPoints??0}}var{userAgent:H,platform:U,maxTouchPoints:W}=oe(),G=H.toLowerCase(),K=U.toLowerCase(),q=/^i(os$|p)/.test(K)||K===`macintel`&&W>1,se=`android`,J=K===se||G.includes(se),ce=!q&&K.startsWith(`mac`);K.startsWith(`win`),!J&&/^(linux|chrome os)/.test(K);var le=ce||q,ue=typeof CSS<`u`&&!!CSS.supports?.(`-webkit-backdrop-filter:none`);!ue&&G.includes(`firefox`),!ue&&G.includes(`chrom`);var de=le,Y=/jsdom|happydom/.test(G),X=t(n(),1),Z=e(),Q=`data-base-ui-focusable`,$=`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`,fe=`ArrowLeft`,pe=`ArrowRight`,me=`ArrowUp`,he=`ArrowDown`,ge=`data-open`,_e=`data-closed`,ve=o,ye=h,be=`data-anchor-hidden`,xe=`data-popup-open`,Se=`data-pressed`,Ce={[xe]:``},we={[xe]:``,[Se]:``},Te={[ge]:``},Ee={[_e]:``},De={[be]:``},Oe={open(e){return e?Ce:null}},ke={open(e){return e?we:null}},Ae={open(e){return e?Te:Ee},anchorHidden(e){return e?De:null}},je={...Ae,...l},Me=`data-trigger-disabled`;function Ne(e,t){if(!ne(e))return!1;let n=e;if(t.hasElement(n))return!n.hasAttribute(Me);for(let[,e]of t.entries())if(M(e,n))return!e.hasAttribute(Me);return!1}function Pe(e,t){if(t==null)return!1;if(`composedPath`in e)return e.composedPath().includes(t);let n=e;return n.target!=null&&t.contains(n.target)}function Fe(e){return e.matches(`html,body`)}function Ie(e){return T(e)&&e.matches(`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`)}function Le(e){return e?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${$}`)!=null}function Re(e){return e?e.getAttribute(`role`)===`combobox`&&Ie(e):!1}function ze(e){if(!e||Y)return!0;try{return e.matches(`:focus-visible`)}catch{return!0}}function Be(e){return e?e.hasAttribute(`data-base-ui-focusable`)?e:e.querySelector(`[data-base-ui-focusable]`)||e:null}function Ve(e,t,n=!0){return e.filter(e=>e.parentId===t).flatMap(t=>[...!n||t.context?.open?[t]:[],...Ve(e,t.id,n)])}function He(e,t){let n=[],r=e.find(e=>e.id===t)?.parentId;for(;r;){let t=e.find(e=>e.id===r);r=t?.parentId,t&&(n=n.concat(t))}return n}function Ue(e){e.preventDefault(),e.stopPropagation()}function We(e){return`nativeEvent`in e}function Ge(e){return e.pointerType===``&&e.isTrusted?!0:J&&e.pointerType?e.type===`click`&&e.buttons===1:e.detail===0&&!e.pointerType}function Ke(e){return Y?!1:!J&&e.width===0&&e.height===0||J&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType===`mouse`||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType===`touch`}function qe(e,t){let n=[`mouse`,`pen`];return t||n.push(``,void 0),n.includes(e)}function Je(e){let t=e.type;return t===`click`||t===`mousedown`||t===`keydown`||t===`keyup`}function Ye(e,t){return t<0||t>=e.length}function Xe(e,t){return Qe(e.current,{disabledIndices:t})}function Ze(e,t){return Qe(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function Qe(e,{startingIndex:t=-1,decrement:n=!1,disabledIndices:r,amount:i=1}={}){let a=t;do a+=n?-i:i;while(a>=0&&a<=e.length-1&&$e(e,a,r));return a}function $e(e,t,n){if(typeof n==`function`?n(t):n?.includes(t)??!1)return!0;let r=e[t];return r?!tt(r)||r.matches(`:disabled`)?!0:!n&&(r.hasAttribute(`disabled`)||r.getAttribute(`aria-disabled`)===`true`):!1}function et(e){return e.visibility===`hidden`||e.visibility===`collapse`}function tt(e,t=e?E(e):null){return!e||!e.isConnected||!t||et(t)?!1:typeof e.checkVisibility==`function`?e.checkVisibility():t.display!==`none`&&t.display!==`contents`}var nt=`a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]`;function rt(e){let t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;let n=e.getRootNode();return te(n)?n.host:null}function it(e){for(let t of Array.from(e.children))if(O(t)===`summary`)return t;return null}function at(e,t){let n=it(t);return!!n&&(e===n||M(n,e))}function ot(e){let t=e?O(e):``;return e!=null&&e.matches(nt)&&(t!==`summary`||e.parentElement!=null&&O(e.parentElement)===`details`&&it(e.parentElement)===e)&&(t!==`details`||it(e)==null)&&(t!==`input`||e.type!==`hidden`)}function st(e){if(!ot(e)||!e.isConnected||e.matches(`:disabled`))return!1;for(let t=e;t;t=rt(t)){let n=t!==e,r=O(t)===`slot`;if(t.hasAttribute(`inert`)||n&&O(t)===`details`&&!t.open&&!at(e,t)||t.hasAttribute(`hidden`)||!r&&!ct(t,n))return!1}return!0}function ct(e,t){let n=E(e);return t?n.display!==`none`:tt(e,n)}function lt(e){let t=e.tabIndex;if(t<0){let t=O(e);if(t===`details`||t===`audio`||t===`video`||T(e)&&e.isContentEditable)return 0}return t}function ut(e){if(O(e)!==`input`)return null;let t=e;return t.type===`radio`&&t.name!==``?t:null}function dt(e,t){let n=ut(e);if(!n)return!0;let r=t.find(e=>{let t=ut(e);return t?.name===n.name&&t.form===n.form&&t.checked});return r?r===n:t.find(e=>{let t=ut(e);return t?.name===n.name&&t.form===n.form})===n}function ft(e){if(T(e)&&O(e)===`slot`){let t=e.assignedElements({flatten:!0});if(t.length>0)return t}return T(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function pt(e,t){ft(e).forEach(e=>{ot(e)&&t.push(e),pt(e,t)})}function mt(e,t,n){ft(e).forEach(e=>{T(e)&&e.matches(t)&&n.push(e),mt(e,t,n)})}function ht(e){return st(e)&<(e)>=0}function gt(e){let t=[];return pt(e,t),t.filter(st)}function _t(e){let t=gt(e);return t.filter(e=>lt(e)>=0&&dt(e,t))}function vt(e,t){let n=_t(e),r=n.length;if(r===0)return;let i=B(j(e)),a=n.indexOf(i);return n[a===-1?t===1?0:r-1:a+t]}function yt(e){return vt(j(e).body,1)||e}function bt(e){return vt(j(e).body,-1)||e}function xt(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!M(n,r)}function St(e){_t(e).forEach(e=>{e.dataset.tabindex=e.getAttribute(`tabindex`)||``,e.setAttribute(`tabindex`,`-1`)})}function Ct(e){let t=[];mt(e,`[data-tabindex]`,t),t.forEach(e=>{let t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute(`tabindex`,t):e.removeAttribute(`tabindex`)})}function wt(...e){return()=>{for(let t=0;t{de&&ue&&r(`button`)},[]);let i={tabIndex:0,role:n};return(0,Z.jsx)(`span`,{...e,ref:t,style:Et,"aria-hidden":!n||void 0,...i,"data-base-ui-focus-guard":``})});function kt(e){return`data-base-ui-${e}`}var At=0;function jt(e,t={}){let{preventScroll:n=!1,sync:r=!1,shouldFocus:i}=t;cancelAnimationFrame(At);function a(){(!i||i())&&e?.focus({preventScroll:n})}if(r)return a(),b;let o=requestAnimationFrame(a);return At=o,()=>{At===o&&(cancelAnimationFrame(o),At=0)}}var Mt={inert:new WeakMap,"aria-hidden":new WeakMap},Nt=`data-base-ui-inert`,Pt={inert:new WeakSet,"aria-hidden":new WeakSet},Ft=new WeakMap,It=0;function Lt(e){return Pt[e]}function Rt(e){return e?te(e)?e.host:Rt(e.parentNode):null}var zt=(e,t)=>t.map(t=>{if(e.contains(t))return t;let n=Rt(t);return e.contains(n)?n:null}).filter(e=>e!=null),Bt=e=>{let t=new Set;return e.forEach(e=>{let n=e;for(;n&&!t.has(n);)t.add(n),n=n.parentNode}),t},Vt=(e,t,n)=>{let r=[],i=e=>{e&&!n.has(e)&&Array.from(e.children).forEach(e=>{O(e)!==`script`&&(t.has(e)?i(e):r.push(e))})};return i(e),r};function Ht(e,t,n,r,{mark:i=!0}){let a=null;r?a=`inert`:n&&(a=`aria-hidden`);let o=null,s=null,c=zt(t,e),l=i?Vt(t,Bt(c),new Set(c)):[],u=[],d=[];if(a){let e=Mt[a],n=Lt(a);s=n,o=e;let r=zt(t,Array.from(t.querySelectorAll(`[aria-live]`))),i=c.concat(r);Vt(t,Bt(i),new Set(i)).forEach(t=>{let r=t.getAttribute(a),i=r!==null&&r!==`false`,o=(e.get(t)||0)+1;e.set(t,o),u.push(t),o===1&&i&&n.add(t),i||t.setAttribute(a,a===`inert`?``:`true`)})}return i&&l.forEach(e=>{let t=(Ft.get(e)||0)+1;Ft.set(e,t),d.push(e),t===1&&e.setAttribute(Nt,``)}),It+=1,()=>{o&&u.forEach(e=>{let t=(o.get(e)||0)-1;o.set(e,t),t||(!s?.has(e)&&a&&e.removeAttribute(a),s?.delete(e))}),i&&d.forEach(e=>{let t=(Ft.get(e)||0)-1;Ft.set(e,t),t||e.removeAttribute(Nt)}),--It,It||(Mt.inert=new WeakMap,Mt[`aria-hidden`]=new WeakMap,Pt.inert=new WeakSet,Pt[`aria-hidden`]=new WeakSet,Ft=new WeakMap)}}function Ut(e,t={}){let{ariaHidden:n=!1,inert:r=!1,mark:i=!0}=t,a=j(e[0]).body;return Ht(e,a,n,r,{mark:i})}var Wt=t(s(),1),Gt={style:{transition:`none`}},Kt={fallbackAxisSide:`none`},qt={fallbackAxisSide:`end`},Jt={clipPath:`inset(50%)`,position:`fixed`,top:0,left:0},Yt=X.createContext(null),Xt=()=>X.useContext(Yt),Zt=kt(`portal`);function Qt(e={}){let{ref:t,container:n,componentProps:r=g,elementProps:i}=e,a=N(),o=Xt()?.portalNode,[s,c]=X.useState(null),[l,u]=X.useState(null),d=k(e=>{e!==null&&u(e)}),f=X.useRef(null);D(()=>{if(n===null){f.current&&(f.current=null,u(null),c(null));return}let e=(n&&(C(n)?n:n.current))??o??document.body;if(e==null){f.current&&(f.current=null,u(null),c(null));return}f.current!==e&&(f.current=e,u(null),c(e))},[n,o]);let p=y(`div`,r,{ref:[t,d],props:[{id:a,[Zt]:``},i]}),m=s&&p?Wt.createPortal(p,s):null;return{node:l,nodeId:X.isValidElement(p)?p.props.id:void 0,subtree:m}}var $t=X.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,container:o,portalOwnerRole:s,...c}=e,{node:l,nodeId:d,subtree:f}=Qt({container:o,ref:t,componentProps:e,elementProps:c}),p=X.useRef(null),m=X.useRef(null),h=X.useRef(null),g=X.useRef(null),[_,v]=X.useState(null),y=X.useRef(!1),b=_?.modal,x=_?.open,S=!!_&&!_.modal&&_.open&&!!l;X.useEffect(()=>{if(!l||b)return;function e(e){l&&e.relatedTarget&&xt(e)&&(e.type===`focusin`?y.current&&=(Ct(l),!1):(St(l),y.current=!0))}return wt(u(l,`focusin`,e,!0),u(l,`focusout`,e,!0))},[l,b]),D(()=>{l&&x===!0&&y.current&&(Ct(l),y.current=!1)},[x,l]);let C=X.useMemo(()=>({beforeOutsideRef:p,afterOutsideRef:m,beforeInsideRef:h,afterInsideRef:g,portalNode:l,setFocusManagerState:v}),[l]);return(0,Z.jsxs)(X.Fragment,{children:[f,(0,Z.jsxs)(Yt.Provider,{value:C,children:[S&&l&&(0,Z.jsx)(Ot,{"data-type":`outside`,ref:p,onFocus:e=>{xt(e,l)?h.current?.focus():bt(_?_.domReference:null)?.focus()}}),S&&l&&(0,Z.jsx)(`span`,{role:s,"aria-owns":d,style:Jt}),l&&Wt.createPortal(a,l),S&&l&&(0,Z.jsx)(Ot,{"data-type":`outside`,ref:m,onFocus:e=>{xt(e,l)?g.current?.focus():(yt(_?_.domReference:null)?.focus(),_?.closeOnFocusOut&&_?.onOpenChange(!1,ae(`focus-out`,e.nativeEvent)))}})]})]})}),en=r(),tn=i();function nn(){let e=new Map;return{emit(t,n){e.get(t)?.forEach(e=>e(n))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){e.get(t)?.delete(n)}}}var rn=X.createContext(null),an=X.createContext(null),on=()=>X.useContext(rn)?.id||null,sn=e=>{let t=X.useContext(an);return e??t};function cn(e,t){let n=w(re(e));return e instanceof n.KeyboardEvent?`keyboard`:e instanceof n.FocusEvent?t||`keyboard`:`pointerType`in e?e.pointerType||`keyboard`:`touches`in e?`touch`:e instanceof n.MouseEvent?t||(e.detail===0?`keyboard`:`mouse`):``}var ln=20,un=[];function dn(){un=un.filter(e=>e.deref()?.isConnected)}function fn(e){dn(),e&&O(e)!==`body`&&(un.push(new WeakRef(e)),un.length>ln&&(un=un.slice(-20)))}function pn(){return dn(),un[un.length-1]?.deref()}function mn(e){return e?ht(e)?e:_t(e)[0]||e:null}function hn(e){if(e.hasAttribute(`tabindex`)&&!e.hasAttribute(`data-tabindex`)||!e.getAttribute(`role`)?.includes(`dialog`))return;let t=gt(e).filter(e=>{let t=e.getAttribute(`data-tabindex`)||``;return ht(e)||e.hasAttribute(`data-tabindex`)&&!t.startsWith(`-`)}),n=e.getAttribute(`tabindex`);t.length===0?n!==`0`&&(e.setAttribute(`tabindex`,`0`),e.setAttribute(`data-tabindex`,`0`)):(n!==`-1`||e.hasAttribute(`data-tabindex`)&&e.getAttribute(`data-tabindex`)!==`-1`)&&(e.setAttribute(`tabindex`,`-1`),e.setAttribute(`data-tabindex`,`-1`))}function gn(e){let{context:t,children:n,disabled:r=!1,initialFocus:i=!0,returnFocus:o=!0,restoreFocus:s=!1,modal:c=!0,closeOnFocusOut:l=!0,openInteractionType:f=``,nextFocusableElement:p,previousFocusableElement:h,beforeContentFocusGuardRef:g,externalTree:v,getInsideElements:y}=e,b=`rootStore`in t?t.rootStore:t,x=b.useState(`open`),S=b.useState(`domReferenceElement`),C=b.useState(`floatingElement`),{events:w,dataRef:ee}=b.context,E=k(()=>ee.current.floatingContext?.nodeId),te=i===!1,A=Re(S)&&te,ne=m(i),N=m(o),P=m(f),F=m(x),I=sn(v),L=Xt(),R=X.useRef(!1),z=X.useRef(!1),oe=X.useRef(!1),H=X.useRef(null),U=X.useRef(``),W=X.useRef(``),G=X.useRef(null),K=X.useRef(null),q=_(G,g,L?.beforeInsideRef),se=_(K,L?.afterInsideRef),J=V(),ce=V(),le=a(),de=L!=null,Y=Be(C),Q=k((e=Y)=>e?_t(e):[]),$=k(()=>y?.().filter(e=>e!=null)??[]);X.useEffect(()=>{if(r||!c)return;function e(e){e.key===`Tab`&&M(Y,B(j(Y)))&&Q().length===0&&!A&&Ue(e)}let t=j(Y);return u(t,`keydown`,e)},[r,Y,c,A,Q]),X.useEffect(()=>{if(r||!x)return;let e=j(Y);function t(){oe.current=!1}function n(e){let t=re(e),n=$(),r=M(C,t)||M(S,t)||M(L?.portalNode,t)||n.some(e=>e===t||M(e,t));oe.current=!r,W.current=e.pointerType||`keyboard`,t?.closest(`[data-base-ui-click-trigger]`)&&(z.current=!0,ce.start(0,()=>{z.current=!1}))}function i(){W.current=`keyboard`}return wt(u(e,`pointerdown`,n,!0),u(e,`pointerup`,t,!0),u(e,`pointercancel`,t,!0),u(e,`keydown`,i,!0),t)},[r,C,S,Y,x,L,ce,$]),X.useEffect(()=>{if(r||!l)return;let e=j(Y);function t(){z.current=!0,ce.start(0,()=>{z.current=!1})}function n(e){let t=re(e);ht(t)&&(H.current=t)}function i(t){let n=t.relatedTarget,r=t.currentTarget,i=re(t);c&&n==null&&i!=null&&M(C,i)&&fn(i),queueMicrotask(()=>{let a=E(),o=b.context.triggerElements,l=$(),u=n?.hasAttribute(kt(`focus-guard`))&&[G.current,K.current,L?.beforeInsideRef.current,L?.afterInsideRef.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,d(h),d(p)].includes(n),f=!(M(S,n)||M(C,n)||M(n,C)||M(L?.portalNode,n)||l.some(e=>e===n||M(e,n))||o.hasMatchingElement(e=>M(e,n))||u||I&&(Ve(I.nodesRef.current,a).find(e=>M(e.context?.elements.floating,n)||M(e.context?.elements.domReference,n))||He(I.nodesRef.current,a).find(e=>[e.context?.elements.floating,Be(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(r===S&&Y&&hn(Y),s&&r!==S&&!tt(i)&&B(e)===e.body){if(T(Y)&&(Y.focus(),s===`popup`)){le.request(()=>{Y.focus()});return}let e=Q(),t=H.current,n=(t&&e.includes(t)?t:null)||e[e.length-1]||Y;T(n)&&n.focus()}if(ee.current.insideReactTree){ee.current.insideReactTree=!1;return}(A||!c)&&n&&f&&!z.current&&(A||n!==pn())&&(R.current=!0,b.setOpen(!1,ae(ie,t)))})}function a(){oe.current||(ee.current.insideReactTree=!0,J.start(0,()=>{ee.current.insideReactTree=!1}))}let o=T(S)?S:null;if(C||o)return wt(o&&u(o,`focusout`,i),o&&u(o,`pointerdown`,t),C&&u(C,`focusin`,n),C&&u(C,`focusout`,i),C&&L&&u(C,`focusout`,a,!0))},[r,S,C,Y,c,I,L,b,l,s,Q,A,E,ee,J,ce,le,p,h,$]),X.useEffect(()=>{if(r||!C||!x)return;let e=Array.from(L?.portalNode?.querySelectorAll(`[${kt(`portal`)}]`)||[]),t=(I?He(I.nodesRef.current,E()):[]).find(e=>Re(e.context?.elements.domReference||null))?.context?.elements.domReference,n=Ut([C,...e,G.current,K.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,...$(),t,d(h),d(p),A?S:null].filter(e=>e!=null),{ariaHidden:c||A,mark:!1}),i=Ut([C,...e].filter(e=>e!=null));return()=>{i(),n()}},[x,r,S,C,c,L,A,I,E,p,h,$]),D(()=>{if(!x||r||!T(Y))return;U.current=``,W.current=``;let e=j(Y),t=B(e);queueMicrotask(()=>{let n=ne.current,r=typeof n==`function`?n(P.current||``):n;if(r===void 0||r===!1||M(Y,t))return;let i=null,a=()=>(i??=Q(Y),i[0]||Y),o;o=r===!0||r===null?a():d(r),o||=a();let s=M(Y,B(e));jt(o,{preventScroll:o===Y,shouldFocus(){if(!F.current)return!1;if(s)return!0;let t=B(e);return!(t!==o&&M(Y,t))}})})},[r,x,Y,Q,ne,P,F]),D(()=>{if(r||!Y)return;let e=j(Y),t=B(e),n=P.current==null;fn(t);function i(e){if(e.open||(U.current=cn(e.nativeEvent,W.current)),e.reason===`trigger-hover`&&e.nativeEvent.type===`mouseleave`&&(R.current=!0),e.reason===`outside-press`){if(e.nested)R.current=!1;else if(Ge(e.nativeEvent)||Ke(e.nativeEvent))R.current=!1;else{let e=!1;j(Y).createElement(`div`).focus({get preventScroll(){return e=!0,!1}}),e?R.current=!1:R.current=!0}}}w.on(`openchange`,i);function a(e){let r=N.current,i=typeof r==`function`?r(e):r;if(i===void 0||i===!1)return null;i===null&&(i=!0);let a=S?.isConnected?S:null,o=t?.isConnected&&O(t)!==`body`?t:null,s=n?o||a:a||o;return s||=pn()||null,typeof i==`boolean`?s:d(i)||s||null}return()=>{w.off(`openchange`,i);let t=B(e),n=$(),r=M(C,t)||n.some(e=>e===t||M(e,t))||I&&Ve(I.nodesRef.current,E(),!1).some(e=>M(e.context?.elements.floating,t)),o=N.current,s=U.current,c=a(s);queueMicrotask(()=>{let n=mn(c),i=typeof o!=`boolean`;if(o&&!R.current&&T(n)&&(i||n===t||t===e.body||r)){let e={preventScroll:!0};s===`keyboard`&&(e.focusVisible=!0),n.focus(e)}R.current=!1})}},[r,C,Y,N,P,w,I,S,E,$]),D(()=>{if(!ue||x||!C)return;let e=B(j(C));T(e)&&Ie(e)&&M(C,e)&&e.blur()},[x,C]),D(()=>{if(!r&&L)return L.setFocusManagerState({modal:c,closeOnFocusOut:l,open:x,onOpenChange:b.setOpen,domReference:S}),()=>{L.setFocusManagerState(null)}},[r,L,c,x,b,l,S]),D(()=>{if(!r&&Y)return hn(Y),()=>{queueMicrotask(dn)}},[r,Y]);let fe=!r&&(!c||!A)&&(de||c);return(0,Z.jsxs)(X.Fragment,{children:[fe&&(0,Z.jsx)(Ot,{"data-type":`inside`,ref:q,onFocus:e=>{if(c){let e=Q();jt(e[e.length-1])}else L?.portalNode&&(R.current=!1,xt(e,L.portalNode)?yt(S)?.focus():d(h??L.beforeOutsideRef)?.focus())}}),n,fe&&(0,Z.jsx)(Ot,{"data-type":`inside`,ref:se,onFocus:e=>{c?jt(Q()[0]):L?.portalNode&&(l&&(R.current=!0),xt(e,L.portalNode)?bt(S)?.focus():d(p??L.afterOutsideRef)?.focus())}})]})}function _n(){return!1}function vn(e){return{escapeKey:typeof e==`boolean`?e:e?.escapeKey??!1,outsidePress:typeof e==`boolean`?e:e?.outsidePress??!0}}function yn(e,t={}){let{enabled:n=!0,escapeKey:r=!0,outsidePress:i=!0,outsidePressEvent:a=`sloppy`,referencePress:o=_n,bubbles:s,externalTree:c}=t,l=`rootStore`in e?e.rootStore:e,d=l.useState(`open`),f=l.useState(`floatingElement`),{dataRef:p,events:m}=l.context,h=sn(c),g=k(typeof i==`function`?i:()=>!1),_=typeof i==`function`?g:i,v=_!==!1,y=k(()=>a),{escapeKey:b,outsidePress:x}=vn(s),S=X.useRef(!1),C=X.useRef(!1),w=X.useRef(!1),D=X.useRef(!1),O=X.useRef(!1),N=X.useRef(``),F=X.useRef(null),L=V(),ie=V(),B=k(()=>{ie.clear(),p.current.insideReactTree=!1}),oe=k(e=>{let t=p.current.floatingContext?.nodeId;return(h?Ve(h.nodesRef.current,t):[]).some(t=>t.context?.open&&!t.context.dataRef.current[e])}),H=k(e=>Pe(e,l.select(`floatingElement`))||Pe(e,l.select(`domReferenceElement`))),U=k(e=>{o()&&l.setOpen(!1,ae(I,e.nativeEvent))}),W=k(e=>{if(!d||!n||!r||e.key!==`Escape`||O.current||!b&&oe(`__escapeKeyBubbles`))return;let t=We(e)?e.nativeEvent:e,i=ae(P,t);l.setOpen(!1,i),i.isCanceled||e.preventDefault(),!b&&!i.isPropagationAllowed&&e.stopPropagation()}),G=k(()=>{p.current.insideReactTree=!0,ie.start(0,B)}),K=k(e=>{if(!d||!n||e.button!==0)return;let t=re(e.nativeEvent);M(l.select(`floatingElement`),t)&&(S.current||(S.current=!0,C.current=!1))}),q=k(e=>{d&&n&&(e.defaultPrevented||e.nativeEvent.defaultPrevented)&&S.current&&(C.current=!0)});X.useEffect(()=>{function e(e){e.open||(D.current=!1)}return m.on(`openchange`,e),()=>{m.off(`openchange`,e)}},[m]),X.useEffect(()=>{if(!d||!n)return d||(D.current=!1),B;p.current.__escapeKeyBubbles=b,p.current.__outsidePressBubbles=x;let e=new z,t=new z,i=j(f);function a(){e.clear(),O.current=!0}function o(){e.start(ue?5:0,()=>{O.current=!1})}function s(){w.current=!0,t.start(0,()=>{w.current=!1})}function c(){S.current=!1,C.current=!1}function m(){let e=N.current,t=e===`pen`||!e?`mouse`:e,n=y(),r=typeof n==`function`?n():n;return typeof r==`string`?r:r[t]}function g(e){let t=m();return t===`intentional`&&e.type!==`click`||t===`sloppy`&&e.type===`click`}function k(e){let t=p.current.floatingContext?.nodeId,n=h&&Ve(h.nodesRef.current,t).some(t=>Pe(e,t.context?.elements.floating));return H(e)||n}function P(e){if(g(e)){e.type!==`click`&&!H(e)&&(t.clear(),w.current=!1),B();return}if(p.current.insideReactTree){B();return}let n=re(e),r=`[${kt(`inert`)}]`,i=ne(n)?n.getRootNode():null,a=Array.from((te(i)?i:j(l.select(`floatingElement`))).querySelectorAll(r)),o=l.context.triggerElements;if(n&&(o.hasElement(n)||o.hasMatchingElement(e=>M(e,n))))return;let s=ne(n)?n:null;for(;s&&!A(s);){let e=ee(s);if(A(e)||!ne(e))break;s=e}if(!(a.length&&ne(n)&&!Fe(n)&&!M(n,l.select(`floatingElement`))&&a.every(e=>!M(s,e)))){if(T(n)&&!(`touches`in e)){let t=A(n),r=E(n),i=/auto|scroll/,a=t||i.test(r.overflowX),o=t||i.test(r.overflowY),s=a&&n.clientWidth>0&&n.scrollWidth>n.clientWidth,c=o&&n.clientHeight>0&&n.scrollHeight>n.clientHeight,l=r.direction===`rtl`,u=c&&(l?e.offsetX<=n.offsetWidth-n.clientWidth:e.offsetX>n.clientWidth),d=s&&e.offsetY>n.clientHeight;if(u||d)return}if(!k(e)){if(m()===`intentional`){if(e.detail!==0&&!Ge(e)&&!D.current)return;if(w.current){t.clear(),w.current=!1;return}}(typeof _!=`function`||_(e))&&(oe(`__outsidePressBubbles`)||(l.setOpen(!1,ae(R,e)),B()))}}}function I(e){m()===`sloppy`&&e.pointerType!==`touch`&&l.select(`open`)&&n&&!H(e)&&P(e)}function ie(e){if(m()!==`sloppy`||!l.select(`open`)||!n||H(e))return;let t=e.touches[0];t&&(F.current={startTime:Date.now(),startX:t.clientX,startY:t.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},L.start(1e3,()=>{F.current&&(F.current.dismissOnTouchEnd=!1,F.current.dismissOnMouseDown=!1)}))}function V(e,t){let n=re(e);if(!n)return;let r=u(n,e.type,()=>{t(e),r()})}function U(e){N.current=`touch`,V(e,ie)}function G(e){L.clear(),e.type===`pointerdown`&&(e.button===0&&(D.current=!0),N.current=e.pointerType),(e.type!==`mousedown`||!F.current||F.current.dismissOnMouseDown)&&V(e,e=>{e.type===`pointerdown`?I(e):P(e)})}function K(e){if(e.type===`pointercancel`&&(D.current=!1),!S.current)return;let n=C.current;if(c(),m()===`intentional`){if(e.type===`pointercancel`){n&&s();return}if(!k(e)){if(n){s();return}(typeof _!=`function`||_(e))&&(t.clear(),w.current=!0,B())}}}function q(e){if(m()!==`sloppy`||!F.current||H(e))return;let t=e.touches[0];if(!t)return;let n=Math.abs(t.clientX-F.current.startX),r=Math.abs(t.clientY-F.current.startY),i=Math.sqrt(n*n+r*r);i>5&&(F.current.dismissOnTouchEnd=!0),i>10&&(P(e),L.clear(),F.current=null)}function se(e){V(e,q)}function J(e){m()===`sloppy`&&F.current&&!H(e)&&(F.current.dismissOnTouchEnd&&P(e),L.clear(),F.current=null)}function ce(e){V(e,J)}let le=wt(r&&wt(u(i,`keydown`,W),u(i,`compositionstart`,a),u(i,`compositionend`,o)),v&&wt(u(i,`click`,G,!0),u(i,`pointerdown`,G,!0),u(i,`pointerup`,K,!0),u(i,`pointercancel`,K,!0),u(i,`mousedown`,G,!0),u(i,`mouseup`,K,!0),u(i,`touchstart`,U,{capture:!0,passive:!0}),u(i,`touchmove`,se,{capture:!0,passive:!0}),u(i,`touchend`,ce,{capture:!0,passive:!0})));return()=>{le(),e.clear(),t.clear(),c(),w.current=!1,B()}},[p,f,r,v,_,d,n,b,x,W,B,y,oe,H,h,l,L]);let se=X.useMemo(()=>({onKeyDown:W,onPointerDown:U,onClick:U}),[W,U]),J=X.useMemo(()=>({onKeyDown:W,onPointerDown:q,onMouseDown:q,onClickCapture:G,onMouseDownCapture(e){G(),K(e)},onPointerDownCapture(e){G(),K(e)},onMouseUpCapture:G,onTouchEndCapture:G,onTouchMoveCapture:G}),[W,G,K,q]);return X.useMemo(()=>n?{reference:se,floating:J,trigger:se}:{},[n,se,J])}var bn=[],xn=void 0;function Sn(){return xn}function Cn(e){bn.push(e)}function wn(e){let t=(t,n)=>{let r=v(En).current,i;try{xn=r;for(let e of bn)e.before(r);i=e(t,n);for(let e of bn)e.after(r);r.didInitialize=!0}finally{xn=void 0}return i};return t.displayName=e.displayName||e.name,t}function Tn(e){return X.forwardRef(wn(e))}function En(){return{didInitialize:!1}}var Dn=x(19)?An:jn;function On(e,t,n,r,i){return Dn(e,t,n,r,i)}function kn(e,t,n,r,i){let a=X.useCallback(()=>t(e.getSnapshot(),n,r,i),[e,t,n,r,i]);return(0,en.useSyncExternalStore)(e.subscribe,a,a)}Cn({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let n=0;n0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{let n=new Set;for(let t of e.syncHooks)n.add(t.store);let r=[];for(let e of n)r.push(e.subscribe(t));return()=>{for(let e of r)e()}}),(0,en.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot))}});function An(e,t,n,r,i){let a=Sn();if(!a)return kn(e,t,n,r,i);let o=a.syncIndex;a.syncIndex+=1;let s;return a.didInitialize?(s=a.syncHooks[o],(s.store!==e||s.selector!==t||!Object.is(s.a1,n)||!Object.is(s.a2,r)||!Object.is(s.a3,i))&&(s.store!==e&&(a.didChangeStore=!0),s.store=e,s.selector=t,s.a1=n,s.a2=r,s.a3=i,s.value=t(e.getSnapshot(),n,r,i))):(s={store:e,selector:t,a1:n,a2:r,a3:i,value:t(e.getSnapshot(),n,r,i)},a.syncHooks.push(s)),s.value}function jn(e,t,n,r,i){return(0,tn.useSyncExternalStoreWithSelector)(e.subscribe,e.getSnapshot,e.getSnapshot,e=>t(e,n,r,i))}var Mn=class{static create(e){return new this(e)}constructor(e){this.state=e,this.listeners=new Set,this.updateTick=0}subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});getSnapshot=()=>this.state;setState(e){if(this.state===e)return;this.state=e,this.updateTick+=1;let t=this.updateTick;for(let n of this.listeners){if(t!==this.updateTick)return;n(e)}}update(e){for(let t in e)if(!Object.is(this.state[t],e[t])){this.setState({...this.state,...e});return}}set(e,t){Object.is(this.state[e],t)||this.setState({...this.state,[e]:t})}notifyAll(){let e={...this.state};this.setState(e)}use(e,t,n,r){return On(this,e,t,n,r)}},Nn=class extends Mn{constructor(e,t={},n){super(e),this.context=t,this.selectors=n}useSyncedValue(e,t){X.useDebugValue(e);let n=this;D(()=>{n.state[e]!==t&&n.set(e,t)},[n,e,t])}useSyncedValueWithCleanup(e,t){let n=this;D(()=>(n.state[e]!==t&&n.set(e,t),()=>{n.set(e,void 0)}),[n,e,t])}useSyncedValues(e){let t=this,n=Object.values(e);D(()=>{t.update(e)},[t,...n])}useControlledProp(e,t){X.useDebugValue(e);let n=this,r=t!==void 0;D(()=>{r&&!Object.is(n.state[e],t)&&n.setState({...n.state,[e]:t})},[n,e,t,r])}select(e,t,n,r){let i=this.selectors[e];return i(this.state,t,n,r)}useState(e,t,n,r){return X.useDebugValue(e),On(this,this.selectors[e],t,n,r)}useContextCallback(e,t){X.useDebugValue(e);let n=k(t??b);this.context[e]=n}useStateSetter(e){let t=X.useRef(void 0);return t.current===void 0&&(t.current=t=>{this.set(e,t)}),t.current}observe(e,t){let n;n=typeof e==`function`?e:this.selectors[e];let r=n(this.state);return t(r,r,this),this.subscribe(e=>{let i=n(e);if(!Object.is(r,i)){let e=r;r=i,t(i,e,this)}})}},Pn={open:e=>e.open,transitionStatus:e=>e.transitionStatus,domReferenceElement:e=>e.domReferenceElement,referenceElement:e=>e.positionReference??e.referenceElement,floatingElement:e=>e.floatingElement,floatingId:e=>e.floatingId},Fn=class extends Nn{constructor(e){let{syncOnly:t,nested:n,onOpenChange:r,triggerElements:i,...a}=e;super({...a,positionReference:a.referenceElement,domReferenceElement:a.referenceElement},{onOpenChange:r,dataRef:{current:{}},events:nn(),nested:n,triggerElements:i},Pn),this.syncOnly=t}syncOpenEvent=(e,t)=>{(!e||!this.state.open||t!=null&&Je(t))&&(this.context.dataRef.current.openEvent=e?t:void 0)};dispatchOpenChange=(e,t)=>{this.syncOpenEvent(e,t.event);let n={open:e,reason:t.reason,nativeEvent:t.event,nested:this.context.nested,triggerElement:t.trigger};this.context.events.emit(`openchange`,n)};setOpen=(e,t)=>{if(this.syncOnly){this.context.onOpenChange?.(e,t);return}this.dispatchOpenChange(e,t),this.context.onOpenChange?.(e,t)}};function In(e){let{popupStore:t,treatPopupAsFloatingElement:n=!1,floatingRootContext:r,floatingId:i,nested:a,onOpenChange:o}=e,s=t.useState(`open`),c=t.useState(`activeTriggerElement`),l=t.useState(n?`popupElement`:`positionerElement`),u=t.context.triggerElements,d=o,f=X.useRef(null);r===void 0&&f.current===null&&(f.current=new Fn({open:s,transitionStatus:void 0,referenceElement:c,floatingElement:l,triggerElements:u,onOpenChange:d,floatingId:i,syncOnly:!0,nested:a}));let p=r??f.current;return t.useSyncedValue(`floatingId`,i),D(()=>{let e={open:s,floatingId:i,referenceElement:c,floatingElement:l};ne(c)&&(e.domReferenceElement=c),p.state.positionReference===p.state.referenceElement&&(e.positionReference=c),p.update(e)},[s,i,c,l,p]),p.context.onOpenChange=d,p.context.nested=a,p}var Ln={tabIndex:-1,[Q]:``};function Rn(e){return t=>t!==`touch`||e.current}function zn(e,t=!1){let n=N(),r=on()!=null,i=v(()=>e(n,r)).current;return In({popupStore:i,treatPopupAsFloatingElement:t,floatingRootContext:i.state.floatingRootContext,floatingId:n,nested:r,onOpenChange:i.setOpen}),i}function Bn({handle:e,store:t}){return D(()=>e.attachStore(t),[e,t]),null}function Vn(e){let t=e.context.triggerElements.size;e.select(`open`)&&e.state.triggerCount!==t&&e.set(`triggerCount`,t)}function Hn(e,t){let n=X.useRef(null);return k(r=>{let i=n.current;if(i!==null){if(i.element===r&&i.store===t&&i.id===e)return;n.current=null;let a=i.store;a.context.triggerElements.getById(i.id)===i.element&&(a.context.triggerElements.delete(i.id),Vn(a))}r!==null&&e!==void 0&&(n.current={store:t,id:e,element:r},t.context.triggerElements.add(e,r),Vn(t))})}function Un(e,t,n,r=!1){let i=e.preventUnmountingOnClose;t?i=!1:r&&(i=!0);let a=n?.id??null,o=e.activeTriggerId,s=e.activeTriggerElement;return(a||t)&&(o=a,s=n??null),{open:t,preventUnmountingOnClose:i,activeTriggerId:o,activeTriggerElement:s}}function Wn(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function Gn(e,t,n,r={}){let i=n.reason,a=i===L,o=t&&i===`trigger-focus`,s=!t&&(i===`trigger-press`||i===`escape-key`),c=Wn(n);if(e.context.onOpenChange?.(t,n),n.isCanceled)return;r.onBeforeDispatch?.(),e.state.floatingRootContext.dispatchOpenChange(t,n);let l=()=>{let i=Un(e.state,t,n.trigger,c()),l={...r.extraState,...i};o?l.instantType=`focus`:s?l.instantType=`dismiss`:a&&(l.instantType=void 0),e.update(l)};a?Wt.flushSync(l):l()}function Kn(e,t,n,r){let i=n.useState(`isMountedByTrigger`,e),a=Hn(e,n),o=k(t=>{let i=n.select(`open`),a=n.select(`activeTriggerId`);if(a===e){let e={activeTriggerElement:t,...i?r:null};n.update(e);return}if(a==null&&i){let i={activeTriggerId:e??null,activeTriggerElement:t,...r};n.update(i)}}),s=k(e=>{a(e),e&&o(e)});return D(()=>(s(t.current),()=>s(null)),[s,t,n,e]),D(()=>{if(i){let e={activeTriggerElement:t.current,...r};n.update(e)}},[i,n,t,...Object.values(r)]),{registerTrigger:s,isMountedByThisTrigger:i}}function qn(e,t={}){let{closeOnActiveTriggerUnmount:n=!1}=t,r=X.useRef(null),i=e.useState(`open`),a=e.useState(`triggerCount`),o=e.useState(`activeTriggerId`),s=e.useState(`activeTriggerElement`);D(()=>{if(!i){r.current=null,e.state.triggerCount!==0&&e.set(`triggerCount`,0);return}let t=e.context.triggerElements.size,a={};e.state.triggerCount!==t&&(a.triggerCount=t);let o=e.select(`activeTriggerId`),s=null;if(o){let t=e.context.triggerElements.getById(o);if(t)r.current=o,t!==e.state.activeTriggerElement&&(a.activeTriggerElement=t);else{for(let[t,n]of e.context.triggerElements.entries())if(n===e.state.activeTriggerElement){a.activeTriggerId=t,a.activeTriggerElement=n,r.current=t;break}a.activeTriggerId===void 0&&(r.current===o?s=o:r.current=null)}}else r.current=null;if(!s&&!o&&t===1){let t=e.context.triggerElements.entries().next();if(!t.done){let[e,n]=t.value;a.activeTriggerId=e,a.activeTriggerElement=n,r.current=e}}(a.triggerCount!==void 0||a.activeTriggerId!==void 0||a.activeTriggerElement!==void 0)&&e.update(a),s&&n&&queueMicrotask(()=>{if(e.select(`open`)&&e.select(`activeTriggerId`)===s&&!e.context.triggerElements.getById(s)){let t=ae(F);e.setOpen(!1,t),t.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[i,e,a,o,s,n])}function Jn(e,t,n,r){let{mounted:i,setMounted:a,transitionStatus:o}=f(e,!1,!1,r),s=t.useState(`preventUnmountingOnClose`),l=!e&&s;t.useSyncedValues({mounted:i,transitionStatus:o,preventUnmountingOnClose:l});let u=k(()=>{a(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),n?.(),t.context.onOpenChangeComplete?.(!1)});return c({enabled:i&&!e&&!l,open:e,ref:t.context.popupRef,onComplete(){e||u()}}),{forceUnmount:u,transitionStatus:o}}function Yn(e,t){e.useSyncedValues(t),D(()=>()=>{e.update({activeTriggerProps:g,inactiveTriggerProps:g,popupProps:g})},[e])}function Xn(e,t){D(()=>{!t&&e.state.openMethod!==null&&e.set(`openMethod`,null)},[t,e]),D(()=>()=>{e.state.openMethod!==null&&e.set(`openMethod`,null)},[e])}var Zn=class{constructor(){this.idMap=new Map}add(e,t){this.idMap.set(e,t)}delete(e){this.idMap.delete(e)}hasElement(e){for(let t of this.idMap.values())if(t===e)return!0;return!1}hasMatchingElement(e){for(let t of this.idMap.values())if(e(t))return!0;return!1}getById(e){return this.idMap.get(e)}entries(){return this.idMap.entries()}elements(){return this.idMap.values()}get size(){return this.idMap.size}},Qn=`ArrowUp`,$n=`ArrowDown`,er=`ArrowLeft`,tr=`ArrowRight`,nr=`Home`,rr=new Set([Qn,$n,er,tr,nr,`End`]),ir=[`Shift`,`Control`,`Alt`,`Meta`];function ar(e){return T(e)&&e.tagName===`INPUT`}function or(e){return!!(ar(e)&&e.selectionStart!=null||T(e)&&e.tagName===`TEXTAREA`)}function sr(e,t,n,r){if(!e||!t||!t.scrollTo)return;let i=e.scrollLeft,a=e.scrollTop,o=e.clientWidthe.scrollLeft+e.clientWidth-a.scrollPaddingRight?i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight:r-o.scrollMarginLefte.scrollLeft+e.clientWidth-a.scrollPaddingRight&&(i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight))}if(s&&r!==`horizontal`){let n=cr(e,t,`top`),r=lr(e),i=lr(t);n-i.scrollMarginTope.scrollTop+e.clientHeight-r.scrollPaddingBottom&&(a=n+t.offsetHeight+i.scrollMarginBottom-e.clientHeight+r.scrollPaddingBottom)}e.scrollTo({left:i,top:a,behavior:`auto`})}function cr(e,t,n){let r=n===`left`?`offsetLeft`:`offsetTop`,i=0;for(;t.offsetParent&&(i+=t[r],t.offsetParent!==e);)t=t.offsetParent;return i}function lr(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}function ur(e){return x(19)?e:e?`true`:void 0}var dr=X.forwardRef(function(e,t){let{cutout:n,...r}=e,i;if(n){let e=n.getBoundingClientRect();i=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${e.left}px ${e.top}px,${e.left}px ${e.bottom}px,${e.right}px ${e.bottom}px,${e.right}px ${e.top}px,${e.left}px ${e.top}px)`}return(0,Z.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),fr={},pr={},mr=``;function hr(e,t){return S(e)?e:t}function gr(e,t,n){return/hidden|clip/.test(e.getComputedStyle(hr(t,n)).overflowY)}function _r(e){if(typeof document>`u`)return!1;let t=j(e);return w(t).innerWidth-t.documentElement.clientWidth>0}function vr(e){if(!(typeof CSS<`u`&&CSS.supports&&CSS.supports(`scrollbar-gutter`,`stable`))||typeof document>`u`)return!1;let t=j(e),n=t.documentElement,r=t.body,i=hr(n,r),a=i.style.overflowY,o=n.style.scrollbarGutter;n.style.scrollbarGutter=`stable`,i.style.overflowY=`scroll`;let s=i.offsetWidth;i.style.overflowY=`hidden`;let c=i.offsetWidth;return i.style.overflowY=a,n.style.scrollbarGutter=o,s===c}function yr(e){let t=j(e),n=t.documentElement,r=t.body,i=hr(n,r),a={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:`hidden`,overflowX:`hidden`}),()=>{Object.assign(i.style,a)}}function br(e){let t=j(e),n=t.documentElement,r=t.body,i=w(n),a=0,o=0,s=!1,c=p.create();if(ue&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let t=i.getComputedStyle(n),c=i.getComputedStyle(r),l=(t.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,fr={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},mr=n.style.scrollBehavior,pr={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let u=n.scrollHeight>n.clientHeight,d=n.scrollWidth>n.clientWidth,f=t.overflowY===`scroll`||c.overflowY===`scroll`,p=t.overflowX===`scroll`||c.overflowX===`scroll`,m=Math.max(0,i.innerWidth-r.clientWidth),h=Math.max(0,i.innerHeight-r.clientHeight),g=parseFloat(c.marginTop)+parseFloat(c.marginBottom),_=parseFloat(c.marginLeft)+parseFloat(c.marginRight),v=hr(n,r);if(s=vr(e),s){n.style.scrollbarGutter=l,v.style.overflowY=`hidden`,v.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:l,overflowY:`hidden`,overflowX:`hidden`}),(u||f)&&(n.style.overflowY=`scroll`),(d||p)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:g||h?`calc(100dvh - ${g+h}px)`:`100dvh`,width:_||m?`calc(100vw - ${_+m}px)`:`100vw`,boxSizing:`border-box`,overflowY:`hidden`,overflowX:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function d(){Object.assign(n.style,fr),Object.assign(r.style,pr),s||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=mr)}function f(){d(),c.request(l)}l();let m=u(i,`resize`,f);return()=>{c.cancel(),d(),typeof i.removeEventListener==`function`&&m()}}var xr=new class{lockCount=0;restore=null;timeoutLock=z.create();timeoutUnlock=z.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=j(e),n=t.documentElement,r=t.body,i=w(n);if(gr(i,n,r)){let t=new i.MutationObserver(()=>{gr(i,n,r)||(t.disconnect(),this.restore=null,this.lock(e))}),a={attributes:!0};t.observe(n,a),t.observe(r,a),this.restore=()=>t.disconnect();return}let a=q||!_r(e);this.restore=a?yr(e):br(e)}};function Sr(e=!0,t=null){D(()=>{if(e)return xr.acquire(t)},[e,t])}export{Ve as $,gn as A,Et as B,Xn as C,q as Ct,wn as D,Nn as E,Gt as F,Xe as G,wt as H,Kt as I,$e as J,tt as K,qt as L,sn as M,$t as N,Tn as O,Qt as P,Ue as Q,jt as R,zn as S,ue as St,Fn as T,Qe as U,Dt as V,Ze as W,Ge as X,qe as Y,Ke as Z,Rn as _,he as _t,er as a,ze as at,Jn as b,me as bt,rr as c,je as ct,or as d,xe as dt,Be as et,sr as f,Se as ft,Gn as g,ve as gt,Bn as h,ge as ht,$n as i,Ie as it,on as j,yn as k,nr as l,ke as lt,Ln as m,ye as mt,dr as n,Ne as nt,tr as o,Me as ot,Zn as p,_e as pt,Ye as q,ur as r,Re as rt,Qn as s,Ae as st,Sr as t,Le as tt,ir as u,Oe as ut,Un as v,fe as vt,Kn as w,ce as wt,Yn as x,Y as xt,qn as y,pe as yt,kt as z}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-C6_B_5v6.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-C6_B_5v6.js new file mode 100644 index 000000000..ce2dd1f9a --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-C6_B_5v6.js @@ -0,0 +1 @@ +import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./with-selector-DrM041uv.js";var i=t(n(),1),a=e(),o=()=>!0,s=()=>!1;function c({children:e,fallback:t=null}){return(0,a.jsx)(i.Fragment,{children:l()?e:t})}function l(e=!0){return i.useSyncExternalStore(u,o,e?s:o)}function u(){return()=>{}}var d=i.createContext(null);function f(e){return i.useContext(d)}var p=r();function m(e,t){return e===t}function h(e,t=e=>e,n){let r=n?.compare??m,a=(0,i.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),o=(0,i.useCallback)(()=>e.get(),[e]);return(0,p.useSyncExternalStoreWithSelector)(a,o,o,t,r)}export{l as a,c as i,f as n,d as r,h as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-CRh8wCTv.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-CRh8wCTv.js deleted file mode 100644 index c008f17f7..000000000 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useSelector-CRh8wCTv.js +++ /dev/null @@ -1 +0,0 @@ -import{n as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{t as r}from"./with-selector-DrM041uv.js";var i=t(n(),1),a=e(),o=()=>!0,s=()=>!1;function c({children:e,fallback:t=null}){return(0,a.jsx)(i.Fragment,{children:l()?e:t})}function l(){return i.useSyncExternalStore(u,o,s)}function u(){return()=>{}}var d=i.createContext(null);function f(e){return i.useContext(d)}var p=r();function m(e,t){return e===t}function h(e,t=e=>e,n){let r=n?.compare??m,a=(0,i.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),o=(0,i.useCallback)(()=>e.get(),[e]);return(0,p.useSyncExternalStoreWithSelector)(a,o,o,t,r)}export{l as a,c as i,f as n,d as r,h as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-F56m8WbP.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-hoe2gsyn.js similarity index 50% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-F56m8WbP.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-hoe2gsyn.js index c695e0004..0c8401822 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-F56m8WbP.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueAsRef-hoe2gsyn.js @@ -1 +1 @@ -import{i as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{l as r}from"./dist-BKgR2qk6.js";import{o as i,s as a}from"./button-BarTr35m.js";import{b as o}from"./createBaseUIEventDetails-DL-8egB9.js";var s=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=s()})),l=`data-starting-style`,u=`data-ending-style`,d={[l]:``},f={[u]:``},p={transitionStatus(e){return e===`starting`?d:e===`ending`?f:null}},m=t(n(),1),h=t(c(),1),g=null;globalThis.requestAnimationFrame;var _=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let t=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let n=0;n=this.callbacks.length||this.callbacks[t]!==null&&(this.callbacks[t]=null,--this.callbacksCount)}},v=class e{static create(){return new e}static request(e){return _.request(e)}static cancel(e){return _.cancel(e)}currentId=g;request(e){this.cancel(),this.currentId=_.request(()=>{this.currentId=g,e()})}cancel=()=>{this.currentId!==g&&(_.cancel(this.currentId),this.currentId=g)};disposeEffect=()=>this.cancel};function y(){let e=r(v.create).current;return o(e.disposeEffect),e}function b(e){return e==null?e:`current`in e?e.current:e}var x=null;function S(e){if(!x){let e=[];x=e,queueMicrotask(()=>{x=null,h.flushSync(()=>{for(let t of e)t()})})}x.push(e)}function C(e,t=!1,n=!1){let r=y();return a((i,a=null)=>{r.cancel();let o=b(e);if(o==null)return;let s=o,c=()=>{if(!n){h.flushSync(i);return}S(()=>{a?.aborted||i()})};if(typeof s.getAnimations!=`function`||globalThis.BASE_UI_ANIMATIONS_DISABLED){i();return}function u(){Promise.all(s.getAnimations().map(e=>e.finished)).then(()=>{a?.aborted||c()},()=>{if(!a?.aborted){if(s.getAnimations().some(e=>e.pending||e.playState!==`finished`)){u();return}c()}})}if(t){let e=l;if(!s.hasAttribute(e)){r.request(u);return}let t=new MutationObserver(()=>{s.hasAttribute(e)||(t.disconnect(),u())});t.observe(s,{attributes:!0,attributeFilter:[e]}),a?.addEventListener(`abort`,()=>t.disconnect(),{once:!0});return}r.request(u)})}function w(e){let{enabled:t=!0,open:n,ref:r,batch:i=!1,onComplete:o}=e,s=a(o),c=C(r,n,i);m.useEffect(()=>{if(!t)return;let e=new AbortController;return c(s,e.signal),()=>{e.abort()}},[t,n,s,c])}function T(e,t=!1,n=!1,r=!1){let[a,o]=m.useState(e&&t?`idle`:void 0),[s,c]=m.useState(e&&!r);return e&&!s&&(c(!0),o(`starting`)),!e&&s&&a!==`ending`&&!n&&o(`ending`),!e&&!s&&a===`ending`&&o(void 0),i(()=>{if(!e&&s&&a!==`ending`&&n){let e=v.request(()=>{o(`ending`)});return()=>{v.cancel(e)}}},[e,s,a,n]),i(()=>{if(!e||t)return;let n=v.request(()=>{o(void 0)});return()=>{v.cancel(n)}},[t,e]),i(()=>{if(!e||!t)return;e&&s&&a!==`idle`&&o(`starting`);let n=v.request(()=>{o(`idle`)});return()=>{v.cancel(n)}},[t,e,s,a]),{mounted:s,setMounted:c,transitionStatus:a}}function E(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function D(e){let t=r(O,e).current;return t.next=e,i(t.effect),t}function O(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}export{C as a,y as c,l as d,c as f,w as i,p as l,E as n,b as o,T as r,v as s,D as t,u}; \ No newline at end of file +import{i as e,o as t,r as n}from"./compiler-runtime-D_vZfn79.js";import{l as r}from"./dist-DeC3TnAR.js";import{o as i,s as a}from"./button-qf9lLJ2x.js";import{b as o}from"./createBaseUIEventDetails-CJZ8g-R_.js";var s=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=s()})),l=`data-starting-style`,u=`data-ending-style`,d={[l]:``},f={[u]:``},p={transitionStatus(e){return e===`starting`?d:e===`ending`?f:null}},m=t(n(),1),h=t(c(),1),g=null;globalThis.requestAnimationFrame;var _=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let t=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let n=0;n=this.callbacks.length||this.callbacks[t]!==null&&(this.callbacks[t]=null,--this.callbacksCount)}},v=class e{static create(){return new e}static request(e){return _.request(e)}static cancel(e){return _.cancel(e)}currentId=g;request(e){this.cancel(),this.currentId=_.request(()=>{this.currentId=g,e()})}cancel=()=>{this.currentId!==g&&(_.cancel(this.currentId),this.currentId=g)};disposeEffect=()=>this.cancel};function y(){let e=r(v.create).current;return o(e.disposeEffect),e}function b(e){return e==null?e:`current`in e?e.current:e}var x=null;function S(e){if(!x){let e=[];x=e,queueMicrotask(()=>{x=null,h.flushSync(()=>{for(let t of e)t()})})}x.push(e)}function C(e,t=!1,n=!1){let r=y();return a((i,a=null)=>{r.cancel();let o=b(e);if(o==null)return;let s=o,c=()=>{if(!n){h.flushSync(i);return}S(()=>{a?.aborted||i()})};if(typeof s.getAnimations!=`function`||globalThis.BASE_UI_ANIMATIONS_DISABLED){i();return}function u(){Promise.all(s.getAnimations().map(e=>e.finished)).then(()=>{a?.aborted||c()},()=>{if(!a?.aborted){if(s.getAnimations().some(e=>e.pending||e.playState!==`finished`)){u();return}c()}})}if(t){let e=l;if(!s.hasAttribute(e)){r.request(u);return}let t=new MutationObserver(()=>{s.hasAttribute(e)||(t.disconnect(),u())});t.observe(s,{attributes:!0,attributeFilter:[e]}),a?.addEventListener(`abort`,()=>t.disconnect(),{once:!0});return}r.request(u)})}function w(e){let{enabled:t=!0,open:n,ref:r,batch:i=!1,onComplete:o}=e,s=a(o),c=C(r,n,i);m.useEffect(()=>{if(!t)return;let e=new AbortController;return c(s,e.signal),()=>{e.abort()}},[t,n,s,c])}function T(e,t=!1,n=!1,r=!1){let[a,o]=m.useState(e&&t?`idle`:void 0),[s,c]=m.useState(e&&!r);return e&&!s&&(c(!0),o(`starting`)),!e&&s&&a!==`ending`&&!n&&o(`ending`),!e&&!s&&a===`ending`&&o(void 0),i(()=>{if(!e&&s&&a!==`ending`&&n){let e=v.request(()=>{o(`ending`)});return()=>{v.cancel(e)}}},[e,s,a,n]),i(()=>{if(!e||t)return;let n=v.request(()=>{o(void 0)});return()=>{v.cancel(n)}},[t,e]),i(()=>{if(!e||!t)return;e&&s&&a!==`idle`&&o(`starting`);let n=v.request(()=>{o(`idle`)});return()=>{v.cancel(n)}},[t,e,s,a]),{mounted:s,setMounted:c,transitionStatus:a}}function E(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function D(e){let t=r(O,e).current;return t.next=e,i(t.effect),t}function O(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}export{C as a,y as c,l as d,c as f,w as i,p as l,E as n,b as o,T as r,v as s,D as t,u}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-B2TUO8IO.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-ZoIoM_Qs.js similarity index 91% rename from spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-B2TUO8IO.js rename to spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-ZoIoM_Qs.js index c17e0dea0..506d47172 100644 --- a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-B2TUO8IO.js +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/useValueChanged-ZoIoM_Qs.js @@ -1 +1 @@ -import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{a as n,l as r,o as i,u as a}from"./dist-BKgR2qk6.js";import{o,s}from"./button-BarTr35m.js";import{w as c}from"./createBaseUIEventDetails-DL-8egB9.js";var l=e(t(),1),u=`data-valid`,d=`data-invalid`,f={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},p={disabled:!1,valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},m={valid(e){return e===null?null:e?{[u]:``}:{[d]:``}}},h={invalid:void 0,name:void 0,validityData:{state:f,errors:[],error:``,value:``,initialValue:null},setValidityData:i,disabled:void 0,setTouched:i,setDirty:i,setFilled:i,setFocused:i,validationMode:`onSubmit`,shouldValidateOnChange:()=>!1,state:p,registerFieldControl:i,validation:{getValidationProps:(e,t=n)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:i,getInputControl:()=>null,commit:async()=>{},change:i}},g=l.createContext(h);function _(e=!0){let t=l.useContext(g);if(t.setValidityData===i&&!e)throw Error(a(28));return t}var v=l.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:i,validationMode:`onSubmit`,submitCountRef:{current:0}});function y(){return l.useContext(v)}var b=l.createContext({controlId:void 0,registerControlId:i,resetControlId:i,labelId:void 0,setLabelId:i,messageIds:[],setMessageIds:i,getDescriptionProps:e=>e});function x(){return l.useContext(b)}function S(e={}){let{id:t,enabled:n=!0}=e,{controlId:a,registerControlId:u,resetControlId:d}=x(),f=c(),p=r(()=>Symbol()),m=l.useRef(!1),h=l.useRef(!1),g=s(()=>{m.current&&u!==i&&(m.current=!1,u(p.current,void 0))});return o(()=>{if(!n||u===i){g();return}let e;if(t!==void 0)h.current=!0,e=t;else if(h.current)e=f;else{d();return}if(e===void 0){g();return}m.current=!0,u(p.current,e)},[t,n,u,d,f,p,g]),o(()=>g,[g]),(n?a:void 0)??t??f}function C(e,t,n,i,a=!0,s){let{registerFieldControl:c}=_(),l=r(()=>Symbol());o(()=>{let r=l.current;if(!a){c(r,void 0);return}c(r,{controlRef:e,getValue:i,id:t,name:s,value:n})},[e,a,i,t,s,c,l,n]),o(()=>{let e=l.current;return()=>{c(e,void 0)}},[c,l])}function w(e,t){let n=l.useRef(e),r=s(t);o(()=>{n.current!==e&&r(n.current),n.current=e},[e,r])}export{y as a,x as i,C as n,_ as o,S as r,m as s,w as t}; \ No newline at end of file +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";import{a as n,l as r,o as i,u as a}from"./dist-DeC3TnAR.js";import{o,s}from"./button-qf9lLJ2x.js";import{w as c}from"./createBaseUIEventDetails-CJZ8g-R_.js";var l=e(t(),1),u=`data-valid`,d=`data-invalid`,f={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},p={disabled:!1,valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},m={valid(e){return e===null?null:e?{[u]:``}:{[d]:``}}},h={invalid:void 0,name:void 0,validityData:{state:f,errors:[],error:``,value:``,initialValue:null},setValidityData:i,disabled:void 0,setTouched:i,setDirty:i,setFilled:i,setFocused:i,validationMode:`onSubmit`,shouldValidateOnChange:()=>!1,state:p,registerFieldControl:i,validation:{getValidationProps:(e,t=n)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:i,getInputControl:()=>null,commit:async()=>{},change:i}},g=l.createContext(h);function _(e=!0){let t=l.useContext(g);if(t.setValidityData===i&&!e)throw Error(a(28));return t}var v=l.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:i,validationMode:`onSubmit`,submitCountRef:{current:0}});function y(){return l.useContext(v)}var b=l.createContext({controlId:void 0,registerControlId:i,resetControlId:i,labelId:void 0,setLabelId:i,messageIds:[],setMessageIds:i,getDescriptionProps:e=>e});function x(){return l.useContext(b)}function S(e={}){let{id:t,enabled:n=!0}=e,{controlId:a,registerControlId:u,resetControlId:d}=x(),f=c(),p=r(()=>Symbol()),m=l.useRef(!1),h=l.useRef(!1),g=s(()=>{m.current&&u!==i&&(m.current=!1,u(p.current,void 0))});return o(()=>{if(!n||u===i){g();return}let e;if(t!==void 0)h.current=!0,e=t;else if(h.current)e=f;else{d();return}if(e===void 0){g();return}m.current=!0,u(p.current,e)},[t,n,u,d,f,p,g]),o(()=>g,[g]),(n?a:void 0)??t??f}function C(e,t,n,i,a=!0,s){let{registerFieldControl:c}=_(),l=r(()=>Symbol());o(()=>{let r=l.current;if(!a){c(r,void 0);return}c(r,{controlRef:e,getValue:i,id:t,name:s,value:n})},[e,a,i,t,s,c,l,n]),o(()=>{let e=l.current;return()=>{c(e,void 0)}},[c,l])}function w(e,t){let n=l.useRef(e),r=s(t);o(()=>{n.current!==e&&r(n.current),n.current=e},[e,r])}export{y as a,x as i,C as n,_ as o,S as r,m as s,w as t}; \ No newline at end of file diff --git a/spinifex/runtime/roles/spinifexui/frontend/dist/assets/zod-A4qtKH_p.js b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/zod-A4qtKH_p.js new file mode 100644 index 000000000..3479b6a0b --- /dev/null +++ b/spinifex/runtime/roles/spinifexui/frontend/dist/assets/zod-A4qtKH_p.js @@ -0,0 +1 @@ +import{o as e,r as t}from"./compiler-runtime-D_vZfn79.js";var n=e(t(),1),r=e=>e.type===`checkbox`,i=e=>e.type===`file`,a=e=>e instanceof Date,o=e=>e==null,s=e=>typeof e==`object`,c=e=>!o(e)&&!Array.isArray(e)&&s(e)&&!a(e),l=e=>c(e)&&e.target?r(e.target)?e.target.checked:i(e.target)?e.target.files:e.target.value:e,u=/[.[\]'"]/,d=e=>e.split(u).filter(Boolean);function f(e,t){let n=d(t),r=e._formValues,i=e._defaultValues;for(let e=0;et.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),m=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function h(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e);let t=typeof Blob<`u`&&e instanceof Blob,n=typeof FileList<`u`&&e instanceof FileList;if(m&&(t||n))return e;let r=Array.isArray(e);if(!r&&e.constructor!==Object)return e;let i=r?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(i[t]=h(e[t]));return i}var g={BLUR:`blur`,FOCUS_OUT:`focusout`,CHANGE:`change`,SUBMIT:`submit`,TRIGGER:`trigger`,VALID:`valid`},_={onBlur:`onBlur`,onChange:`onChange`,onSubmit:`onSubmit`,onTouched:`onTouched`,all:`all`},v={max:`max`,min:`min`,maxLength:`maxLength`,minLength:`minLength`,pattern:`pattern`,required:`required`,validate:`validate`},y=[v.required,v.min,v.max,v.minLength,v.maxLength,v.pattern,v.validate],b=`form`,x=`root`,S=[`__proto__`,`constructor`,`prototype`],C=/^\w*$/,w=e=>C.test(e),T=e=>e===void 0,E=(e,t,n)=>{if(!t||!c(e))return n;let r=w(t)?[t]:d(t);if(r.some(e=>S.includes(e)))return n;let i=r.reduce((e,t)=>o(e)?void 0:e[t],e);return T(i)||i===e?T(e[t])?n:e[t]:i},D=e=>typeof e==`boolean`,O=e=>typeof e==`function`,k=(e,t,n)=>{let r=-1,i=w(t)?[t]:d(t),a=i.length,o=a-1;for(;++rn.useContext(A),M=(e,t,n,r=!0)=>{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==_.all&&(t._proxyFormState[i]=!r||_.all),n&&(n[i]=!0),e[i]}});return i},N=m?n.useLayoutEffect:n.useEffect,ee=e=>{let t=e.constructor&&e.constructor.prototype;return c(t)&&t.hasOwnProperty(`isPrototypeOf`)},te=e=>o(e)||!s(e),P=(e,t)=>t.length===0&&!Array.isArray(e)&&!ee(e);function F(e,t,n=new WeakMap){if(e===t)return!0;if(te(e)||te(t))return Object.is(e,t);if(a(e)&&a(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(P(e,r)||P(t,i))return Object.is(e,t);if(!r.length&&Array.isArray(e)!==Array.isArray(t))return!1;let o=n.get(e);if(o&&o.has(t))return!0;if(o)o.add(t);else{let r=new WeakSet;r.add(t),n.set(e,r)}for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(a(r)&&a(e)||(c(r)||Array.isArray(r))&&(c(e)||Array.isArray(e))?!F(r,e,n):!Object.is(r,e))return!1}}return!0}function I(e){let t=n.useRef(!1),r=n.useRef(!1),i=n.useRef(void 0),a=n.useRef(0);return a.current++,!r.current&&e&&(r.current=!0,i.current=h(e())),{resyncIfNeeded:n.useCallback((e,n,o)=>{if(e&&(t.current||r.current&&a.current>1)){let e=n();F(i.current,e)||o(e)}t.current=!0},[]),snapshot:n.useCallback((e,t)=>{e&&(i.current=h(t()))},[])}}function L(e){let t=j(),{control:r=t,disabled:i,name:a,exact:o}=e||{},s=()=>({...r._formState,defaultValues:r._defaultValues}),[c,l]=n.useState(s),u=n.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1}),{resyncIfNeeded:d,snapshot:f}=I(s);return N(()=>{d(!i,s,l);let e=r._subscribe({name:a,formState:u.current,exact:o,callback:e=>{!i&&l({...r._formState,...e,defaultValues:r._defaultValues})}});return()=>{e(),f(!i,s)}},[r,a,i,o,d,f]),n.useEffect(()=>{u.current.isValid&&r._setValid(!0)},[r]),n.useMemo(()=>M(c,r,u.current,!1),[c,r])}var R=e=>typeof e==`string`,ne=(e,t,n,r,i)=>R(e)?(r&&t.watch.add(e),E(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),E(n,e,E(i,e)))):(r&&(t.watchAll=!0),n);function z(e){let t=j(),{control:r=t,name:i,defaultValue:a,disabled:o,exact:s,compute:c}=e||{},l=n.useRef(a),u=n.useRef(c),d=n.useRef(r),f=n.useRef(i);u.current=c;let p=()=>{let e=r._getWatch(i,l.current);return u.current?u.current(e):e},[m,h]=n.useState(p),g=n.useRef(m),_=n.useCallback(e=>{let t=ne(i,r._names,e||r._formValues,!1,l.current);return u.current?u.current(t):t},[r._formValues,r._names,i]),v=n.useCallback(e=>{if(!o){let t=ne(i,r._names,e||r._formValues,!1,l.current);if(u.current){let e=u.current(t);F(e,g.current)||(h(e),g.current=e)}else h(t)}},[r._formValues,r._names,o,i]),{resyncIfNeeded:y,snapshot:b}=I(p),x=n.useRef(v);x.current=v;let S=n.useRef(_);S.current=_,N(()=>{d.current!==r||!F(f.current,i)?(d.current=r,f.current=i,x.current()):y(!o,()=>S.current(),e=>{h(e),g.current=e});let e=r._subscribe({name:i,formState:{values:!0},exact:s,callback:e=>{x.current(e.values)}});return()=>{e(),b(!o,()=>S.current())}},[r,s,i,o,y,b]),n.useEffect(()=>r._removeUnmounted());let C=d.current!==r,w=f.current;return n.useMemo(()=>{if(o)return!1;let e=!C&&!F(w,i);return C||e},[o,C,i,w])?_():m}function re(e){let t=j(),{name:r,disabled:i,control:a=t,shouldUnregister:o,defaultValue:s,exact:c=!0}=e,u=p(a._names.array,r),d=z({control:a,name:r,defaultValue:n.useMemo(()=>{let e=E(a._formValues,r,E(a._defaultValues,r,s));return T(e)?f(a,r):e},[a,r,s]),exact:c}),m=L({control:a,name:r,exact:c}),_=n.useRef(e),v=n.useRef(null),y=n.useRef(a.register(r,{...e.rules,value:d,...D(e.disabled)?{disabled:e.disabled}:{}}));_.current=e;let b=n.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!E(m.errors,r)},isDirty:{enumerable:!0,get:()=>!!E(m.dirtyFields,r)},isTouched:{enumerable:!0,get:()=>!!E(m.touchedFields,r)},isValidating:{enumerable:!0,get:()=>!!E(m.validatingFields,r)},error:{enumerable:!0,get:()=>E(m.errors,r)}}),[m,r]),x=n.useCallback(e=>{let t=l(e);return E(a._fields,r)||(y.current=a.register(r,{..._.current.rules,value:t})),y.current.onChange({target:{value:l(e),name:r},type:g.CHANGE})},[r,a]),S=n.useCallback(()=>y.current.onBlur({target:{value:E(a._formValues,r),name:r},type:g.BLUR}),[r,a._formValues]),C=n.useCallback(e=>{e&&(v.current={focus:()=>O(e.focus)&&e.focus(),select:()=>O(e.select)&&e.select(),setCustomValidity:t=>O(e.setCustomValidity)&&e.setCustomValidity(t),reportValidity:()=>O(e.reportValidity)&&e.reportValidity()});let t=E(a._fields,r);t&&t._f&&e&&(t._f.ref=v.current,t._f._c=!0)},[a._fields,r]),w=n.useMemo(()=>({name:r,value:d,...D(i)||m.disabled?{disabled:m.disabled||i}:{},onChange:x,onBlur:S,ref:C}),[r,i,m.disabled,x,S,C,d]);return n.useEffect(()=>{let e=a._options.shouldUnregister||o;y.current=a.register(r,{..._.current.rules,...D(_.current.disabled)?{disabled:_.current.disabled}:{}});let t=(e,t)=>{let n=E(a._fields,e);n&&n._f&&(n._f.mount=t,n._f._c=t)};if(t(r,!0),e){let e=h(E(o?a._defaultValues:a._options.values||a._defaultValues,r,E(a._options.defaultValues,r,_.current.defaultValue)));k(a._defaultValues,r,e),T(E(a._formValues,r))&&k(a._formValues,r,e)}if(!u&&a.register(r,{..._.current.rules,...D(_.current.disabled)?{disabled:_.current.disabled}:{}}),v.current){let e=E(a._fields,r);e&&e._f&&(e._f.ref=v.current)}return()=>{(u?e&&!a._state.action:e)?a.unregister(r):t(r,!1)}},[r,a,u,o]),n.useEffect(()=>{a._setDisabledField({disabled:i,name:r})},[i,r,a]),n.useMemo(()=>({field:w,formState:m,fieldState:b}),[w,m,b])}var B=e=>e.render(re(e)),V=()=>typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)}),ie=(e,t,n={})=>n.shouldFocus||T(n.shouldFocus)?n.focusName||`${e}.${T(n.focusIndex)?t:n.focusIndex}.`:``,ae=e=>({isOnSubmit:!e||e===_.onSubmit,isOnBlur:e===_.onBlur,isOnChange:e===_.onChange,isOnAll:e===_.all,isOnTouch:e===_.onTouched}),oe=(e,t,n)=>{if(n)return!1;if(t.watchAll||t.watch.has(e))return!0;for(let n of t.watch)if(e.startsWith(n)&&e.charAt(n.length)===`.`)return!0;return!1},se=(e,t,n)=>{for(let r of n||Object.keys(e)){if(r===`_f`)continue;let i=n?E(e,r):e[r];if(i){let{_f:e}=i;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],e.name)||e.ref&&t(e.ref,e.name)||se(i,t))return!0}else if((c(i)||Array.isArray(i))&&se(i,t))return!0}}},ce=(e,t,n)=>{let r=E(e,n),i=Array.isArray(r)?r:[];return k(i,x,t[n]),k(e,n,i),e},H=e=>c(e)&&!Object.keys(e).length,le=e=>{if(!m)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},U=e=>e.type===`radio`,W=e=>e instanceof RegExp,G=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},K={value:!1,isValid:!1},ue={value:!0,isValid:!0},de=e=>{if(!Array.isArray(e))return K;if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}let t=e[0];return!t||!t.checked||t.disabled?K:!t.attributes||!(`value`in t.attributes)||T(t.value)||t.value===``?ue:{value:t.value,isValid:!0}},fe={isValid:!1,value:null},pe=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,fe):fe;function me(e,t,n=`validate`){if(R(e)||Array.isArray(e)&&e.every(R)||D(e)&&!e)return{type:n,message:R(e)?e:``,ref:t}}var q=e=>c(e)&&!W(e)?e:{value:e,message:``},he=async(e,t,n,s,l,u)=>{let{ref:d,refs:f,required:p,maxLength:m,minLength:h,min:g,max:_,pattern:y,validate:b,name:x,valueAsNumber:S,mount:C,_c:w}=e._f,k=E(n,x);if(!C||t.has(x))return{};let A=f?f[0]:d,j=e=>{if(l&&A.reportValidity){let t=D(e)?``:e||``;f?f.forEach(e=>O(e.setCustomValidity)&&e.setCustomValidity(t)):A.setCustomValidity(t),A.reportValidity()}},M={},N=U(d),ee=r(d),te=N||ee,P=(S||i(d))&&T(d.value)&&T(k)||le(d)&&d.value===``&&!w||k===``||Array.isArray(k)&&!k.length,F=G.bind(null,x,s,M),I=(e,t,n,r=v.maxLength,i=v.minLength)=>{let a=e?t:n;M[x]={type:e?r:i,message:a,ref:d,...F(e?r:i,a)}};if(u?!Array.isArray(k)||!k.length:p&&(!te&&(P||o(k))||D(k)&&!k||ee&&!de(f).isValid||N&&!pe(f).isValid)){let{value:e,message:t}=R(p)?{value:!!p,message:p}:q(p);if(e&&(M[x]={type:v.required,message:t,ref:A,...F(v.required,t)},!s))return j(t),M}if(!P&&(!o(g)||!o(_))){let e,t,n=q(_),r=q(g);if(!o(k)&&!a(k)&&!isNaN(k)){let i=d.valueAsNumber||k&&+k;o(n.value)||(e=i>n.value),o(r.value)||(t=inew Date(new Date().toDateString()+` `+e),o=d.type==`time`,s=d.type==`week`;R(n.value)&&k&&(e=o?a(k)>a(n.value):s?k>n.value:i>new Date(n.value)),R(r.value)&&k&&(t=o?a(k)+e.value,r=!o(t.value)&&k.length<+t.value;if((n||r)&&(I(n,e.message,t.message),!s))return j(M[x].message),M}if(y&&!P&&R(k)){let{value:e,message:t}=q(y);if(W(e)&&!k.match(e)&&(M[x]={type:v.pattern,message:t,ref:d,...F(v.pattern,t)},!s))return j(t),M}if(b){if(O(b)){let e=me(await b(k,n),A);if(e&&(M[x]={...e,...F(v.validate,e.message)},!s))return j(e.message),M}else if(c(b)){let e={};for(let t in b){if(!H(e)&&!s)break;let r=me(await b[t](k,n),A,t);r&&(e={...r,...F(t,r.message)},s||j(r.message),s&&(M[x]=e))}if(!H(e)&&(M[x]={ref:A,...e},!s))return M}}let L=M[x];return j(!L||L.message),M},J=e=>Array.isArray(e)?e:[e],ge=(e,t)=>[...e,...J(t)],_e=e=>Array.isArray(e)?e.map(()=>void 0):void 0;function ve(e,t,n){return[...e.slice(0,t),...J(n),...e.slice(t)]}var Y=(e,t,n)=>Array.isArray(e)?(T(e[n])&&(e[n]=void 0),e.splice(n,0,e.splice(t,1)[0]),e):[],ye=(e,t)=>[...J(t),...J(e)],be=e=>Array.isArray(e)?e.filter(Boolean):[];function xe(e,t){let n=0,r=[...e];for(let e of t)r.splice(e-n,1),n++;return be(r).length?r:[]}var X=(e,t)=>T(t)?[]:xe(e,J(t).sort((e,t)=>e-t)),Se=(e,t,n)=>{[e[t],e[n]]=[e[n],e[t]]};function Z(e,t){let n=t.length-1,r=0;for(;rS.includes(String(e))))return e;let r=n.length===1?e:Z(e,n),i=n.length-1,a=n[i];return r&&delete r[a],i!==0&&(c(r)&&H(r)||Array.isArray(r)&&Ce(r))&&Q(e,n.slice(0,-1)),e}var we=(e,t,n)=>(e[t]=n,e);function Te(e){let t=j(),{control:r=t,name:i,keyName:a=`id`,disabled:o,shouldUnregister:s,rules:l}=e,u=()=>r._getFieldArray(i),[d,f]=n.useState(u),p=n.useRef(r._getFieldArray(i).map(V)),m=n.useRef(!1),{resyncIfNeeded:g,snapshot:v}=I(u),y=n.useRef(r),b=n.useRef(i);o||r._names.array.add(i),n.useMemo(()=>!o&&l&&d.length>=0&&r.register(i,l),[r,i,d.length,l,o]),N(()=>{if(o)return;if(y.current===r&&b.current===i)g(!0,u,e=>{f(e),p.current=e.map(V)});else{y.current=r,b.current=i;let e=u();F(d,e)||(f(e),p.current=e.map(V)),v(!0,u)}let e=r._subjects.array.subscribe({next:({values:e,name:t})=>{if(t===i||!t){let n=E(e,i);Array.isArray(n)?(f(n),p.current=n.map(V)):t||(f([]),p.current=[])}}}).unsubscribe;return()=>{e(),v(!0,u)}},[r,i,o,g,v]);let S=n.useCallback(e=>{m.current=!0,r._setFieldArray(i,e)},[r,i]);return n.useEffect(()=>{if(o){r._state.actionArrayLengths.delete(i);return}r._state.action=!1,r._state.actionArrayLengths.delete(i),oe(i,r._names)&&r._subjects.state.next({...r._formState});let e=ae(r._options.mode);if(m.current&&(!e.isOnSubmit||r._formState.isSubmitted)&&!ae(r._options.reValidateMode).isOnSubmit&&!e.isOnBlur){if(r._options.resolver)r._runSchema([i]).then(e=>{r._updateIsValidating([i]);let t=E(e.errors,i),n=E(r._formState.errors,i),a=n&&(n.type||n.root?.type),o=n&&(n.message||n.root?.message);(n?!t&&a||t&&(a!==t.type||o!==t.message):t&&t.type)&&(t?c(t)&&!Object.keys(t).some(e=>!Number.isNaN(+e))?ce(r._formState.errors,{[i]:t},i):k(r._formState.errors,i,t):Q(r._formState.errors,i),r._subjects.state.next({errors:r._formState.errors}))});else{let e=E(r._fields,i);e&&e._f&&he(e,r._names.disabled,r._formValues,r._options.criteriaMode===_.all,r._options.shouldUseNativeValidation,!0).then(e=>{if(!H(e))r._subjects.state.next({errors:ce(r._formState.errors,e,i)});else{let e=E(r._formState.errors,i);e&&e[x]&&(Q(r._formState.errors,`${i}.${x}`),r._subjects.state.next({errors:r._formState.errors}))}})}}m.current&&r._subjects.state.next({name:i,values:h(r._formValues)}),r._names.focus&&se(r._fields,(e,t)=>{if(r._names.focus&&t.startsWith(r._names.focus)&&e.focus)return e.focus(),1}),r._names.focus=``,r._setValid(),m.current=!1},[d,i,r,o]),n.useEffect(()=>(o||T(E(r._formValues,i))&&r._setFieldArray(i),()=>{if(r._state.actionArrayLengths.delete(i),o)return;let e=!(r._options.shouldUnregister||s);m.current&&e&&r._subjects.state.next({name:i,values:h(r._formValues)}),e?((e,t)=>{let n=E(r._fields,e);n&&n._f&&(n._f.mount=t)})(i,!1):r.unregister(i)}),[i,r,a,s,o]),{swap:n.useCallback((e,t)=>{if(o)return;let n=r._getFieldArray(i);Se(n,e,t),Se(p.current,e,t),S(n),f(n),r._setFieldArray(i,n,Se,{argA:e,argB:t},!1)},[S,i,r,o]),move:n.useCallback((e,t)=>{if(o)return;let n=r._getFieldArray(i);Y(n,e,t),Y(p.current,e,t),S(n),f(n),r._setFieldArray(i,n,Y,{argA:e,argB:t},!1)},[S,i,r,o]),prepend:n.useCallback((e,t)=>{if(o)return;let n=J(h(e)),a=ye(r._getFieldArray(i),n);r._names.focus=ie(i,0,t),p.current=ye(p.current,n.map(V)),S(a),f(a),r._setFieldArray(i,a,ye,{argA:_e(e)})},[S,i,r,o]),append:n.useCallback((e,t)=>{if(o)return;let n=J(h(e)),a=ge(r._getFieldArray(i),n);r._names.focus=ie(i,a.length-1,t),p.current=ge(p.current,n.map(V)),S(a),f(a),r._setFieldArray(i,a,ge,{argA:_e(e)})},[S,i,r,o]),remove:n.useCallback(e=>{if(o)return;let t=X(r._getFieldArray(i),e);p.current=X(p.current,e),S(t),f(t),!Array.isArray(E(r._fields,i))&&k(r._fields,i,void 0),r._setFieldArray(i,t,X,{argA:e})},[S,i,r,o]),insert:n.useCallback((e,t,n)=>{if(o)return;let a=J(h(t)),s=ve(r._getFieldArray(i),e,a);r._names.focus=ie(i,e,n),p.current=ve(p.current,e,a.map(V)),S(s),f(s),r._setFieldArray(i,s,ve,{argA:e,argB:_e(t)})},[S,i,r,o]),update:n.useCallback((e,t)=>{if(o)return;let n=h(t),a=we(r._getFieldArray(i),e,n);p.current=[...a].map((t,n)=>!t||n===e?V():p.current[n]),S(a),f([...a]),r._setFieldArray(i,a,we,{argA:e,argB:_e(t)})},[S,i,r,o]),replace:n.useCallback(e=>{if(o)return;let t=J(h(e));p.current=t.map(V),S([...t]),f([...t]),r._setFieldArray(i,[...t],e=>Array.isArray(e)?e.slice(0,t.length):e,{})},[S,i,r,o]),fields:n.useMemo(()=>d.map((e,t)=>({...e,...D(o)?{disabled:o}:{},[a]:p.current[t]||V()})),[d,a,o])}}var Ee=n.createContext(null);Ee.displayName=`HookFormContext`;var De=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function Oe(e,t){let n=Array.isArray(e)?[]:{};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];i&&(c(i)||Array.isArray(i))&&a?n[r]=Oe(i,a):e[r]&&(n[r]=a)}return n}var ke=(e,t)=>e!==null&&s(e)&&Object.prototype.hasOwnProperty.call(e,t),Ae=(e,t)=>{if(!t)return!1;let n=e;for(let r of w(t)?[t]:d(t)){if(!ke(n,r))return ke(e,t);n=n[r]}return!0},je=e=>e.type===`select-multiple`,Me=e=>U(e)||r(e),Ne=e=>le(e)&&e.isConnected;function Pe(e){return Array.isArray(e)||c(e)}function Fe(e,t,n=``,r=[]){for(let i in e){let a=n?`${n}.${i}`:i,o=e[i];Pe(o)&&Pe(E(t,a))?Fe(o,t,a,r):r.push(a)}return r}var Ie=e=>{for(let t in e)if(O(e[t]))return!0;return!1};function Le(e){return Array.isArray(e)||c(e)&&!Ie(e)}function Re(e){return!!(e&&`_f`in e)}function ze(e){return Array.isArray(e)?!e.some(e=>!T(e)):!Object.keys(e).length}function Be(e,t){Array.isArray(e)?e[t]=void 0:delete e[t]}function Ve(e,t={},n){for(let r in e){let i=e[r],a=n&&n[r];Le(i)&&(!Array.isArray(i)||!Re(a))?(t[r]=Array.isArray(i)?[]:{},Ve(i,t[r],a),ze(t[r])&&Be(t,r)):T(i)||(t[r]=!0)}return t}function $(e,t,n,r){n||=Ve(t,{},r);for(let i in e){let a=e[i],s=r&&r[i];Le(a)&&(!Array.isArray(a)||!Re(s))?(T(t)||te(n[i])?n[i]=Ve(a,Array.isArray(a)?[]:{},s):$(a,o(t)?{}:t[i],n[i],s),ze(n[i])&&Be(n,i)):F(a,t[i])?Be(n,i):n[i]=!0}return n}var He=(e,t)=>{let n=t.split(`.`),r=[],i=n[0];for(let t=1;tT(e)?e:t?e===``?NaN:e&&+e:n&&R(e)?new Date(e):r?r(e):e;function We(e){let t=e.ref;return i(t)?t.files:U(t)?pe(e.refs).value:je(t)?[...t.selectedOptions].map(({value:e})=>e):r(t)?de(e.refs).value:Ue(t.value,e)}var Ge=(e,t,n,r)=>{let i={};for(let n of e){let e=E(t,n);e&&k(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},Ke=e=>T(e)?e:W(e)?e.source:c(e)?W(e.value)?e.value.source:e.value:e,qe=`AsyncFunction`,Je=e=>{if(!e||!e.validate)return!1;if(O(e.validate))return e.validate.constructor.name===qe;if(c(e.validate)){for(let t in e.validate)if(e.validate[t].constructor.name===qe)return!0}return!1},Ye=e=>e.mount&&(e.required||!T(e.required)&&e.required!==!1||!T(e.min)||!T(e.max)||!T(e.maxLength)||!T(e.minLength)||e.pattern||e.validate);function Xe(e,t,n){let r=E(e,n);if(r?.type||r?.message||Array.isArray(r))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=E(t,r),o=E(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var Ze=(e,t,n,r)=>{n(e);let i=Object.keys(e).filter(e=>e!==`name`);return!i.length||r&&i.length>=Object.keys(t).length||i.find(e=>t[e]===(!r||_.all))},Qe=(e,t,n)=>!e||!t||e===t||J(e).some(e=>e&&(n?e===t||e.startsWith(t+`.`):e.startsWith(t)||t.startsWith(e))),$e=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:!(n?r.isOnChange:i.isOnChange)||e,et=(e,t)=>{let n=E(e,t);!be(n).length&&!(n!=null&&n.root)&&Q(e,t)},tt={mode:_.onSubmit,reValidateMode:_.onChange,shouldFocusError:!0},nt=(e,t)=>{for(let n in e)n in t||delete e[n];Object.assign(e,t)},rt={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function it(e={}){let t={...tt,...e},n={...h(rt),isLoading:O(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},s={},u=(c(t.defaultValues)||c(t.values))&&h(t.defaultValues||t.values)||{},f=t.shouldUnregister?{}:h(u),S={action:!1,actionArrayLengths:new Map,mount:!1,watch:!1,keepIsValid:!1},C={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},A={},j={},M=0,N=ae(t.mode),ee=ae(t.reValidateMode),te={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},P={...te},I={...P},L=(...e)=>e.some(e=>P[e]||I[e]),z={array:De(),state:De()},re=0,B=0,V=t.criteriaMode===_.all,ie=(e,t)=>n=>{clearTimeout(j[e]),j[e]=setTimeout(t,n)},U=e=>{clearTimeout(j[e]),delete j[e],delete A[e]},W=e=>{U(e);let t=`${e}.`;for(let e of Object.keys(A))e.startsWith(t)&&U(e)},G=async e=>{if(!S.keepIsValid&&!t.disabled&&(L(`isValid`)||e)){let e=++re,r;t.resolver?(r=H((await Y()).errors),e===re&&K()):r=await X({fields:s,onlyCheckValid:!0,eventType:g.VALID}),e===re&&r!==n.isValid&&z.state.next({isValid:r})}},K=(e,r)=>{!t.disabled&&L(`isValidating`,`validatingFields`)&&((e||C.mount).forEach(e=>{e&&(r?k(n.validatingFields,e,r):Q(n.validatingFields,e))}),z.state.next({validatingFields:n.validatingFields,isValidating:!H(n.validatingFields)}))},ue=()=>{n.dirtyFields=$(u,f,void 0,s)},de=(e,r=[],i,a,o=!0,c=!0)=>{if(a&&i&&!t.disabled){S.action=!0;let t=E(s,e);if(S.actionArrayLengths.has(e)||S.actionArrayLengths.set(e,Array.isArray(t)?t.length:0),c&&Array.isArray(t)){let n=i(t,a.argA,a.argB);o&&k(s,e,n)}let l=E(n.errors,e);if(c&&Array.isArray(l)){let t=l.root,r=i(l,a.argA,a.argB)||l;t&&(r.root=t),o&&k(n.errors,e,r),et(n.errors,e)}let u=E(n.touchedFields,e),d=c&&Array.isArray(u);if(d){let t=i(u,a.argA,a.argB);o&&k(n.touchedFields,e,t)}let f=E(n.dirtyFields,e);if(c&&Array.isArray(f)){let t=i(f,a.argA,a.argB)||f;o&&k(n.dirtyFields,e,t)}L(`dirtyFields`)&&ue(),z.state.next({name:e,isDirty:Z(e,r),dirtyFields:n.dirtyFields,...d&&{touchedFields:n.touchedFields},errors:n.errors,isValid:n.isValid})}else k(f,e,r)},fe=(e,t)=>{k(n.errors,e,t),n.errors={...n.errors},z.state.next({errors:n.errors})},pe=e=>{Object.keys(A).forEach(U);let t=!H(e);n.errors=e,z.state.next({errors:n.errors,...t?{isValid:!1}:{}}),!t&&S.mount&&G()},me=e=>{let t=w(e)?[e]:d(e),n=f,r=u;for(let e=0;e{if(!S.actionArrayLengths.size)return!1;let t=w(e)?[e]:d(e),n=f,r=``,i=-1,a=0;for(let e=0;e=n.length)return i===-1?!1:e!==i||+si&&+t[i]{let c=E(s,r);if(c){if(me(r)||q(r))return;let s=T(E(f,r)),l=E(f,r,T(a)?E(u,r):a);T(l)||o&&o.defaultChecked||i?k(f,r,i?l:We(c._f)):Te(r,l),S.mount&&!S.action&&(t.resolver&&L(`isValidating`,`validatingFields`)?Promise.resolve().then(()=>G()):G(),s&&n.isDirty&&L(`isDirty`)&&(Z()||(n.isDirty=!1,z.state.next({...n}))),e.shouldUnregister&&s&&!T(E(f,r))&&oe(r,C)&&(S.watch=!0))}},_e=(e,r,i,a,o)=>{let c=!1,l=!1,d={name:e};if(!t.disabled||a===!0){if(!i||a){let t=F(E(u,e),r);L(`isDirty`)&&(l=n.isDirty,n.isDirty=d.isDirty=!t||Z(),c=l!==d.isDirty),l=!!E(n.dirtyFields,e),t===n.isDirty?t?Q(n.dirtyFields,e):k(n.dirtyFields,e,!0):nt(n.dirtyFields,$(u,f,void 0,s)),d.dirtyFields=n.dirtyFields,c||=L(`dirtyFields`)&&l!==!t}if(i){let t=E(n.touchedFields,e);t||(k(n.touchedFields,e,i),d.touchedFields=n.touchedFields,c||=L(`touchedFields`)&&t!==i)}c&&o&&z.state.next(d)}return c?d:{}},ve=(e,r,i,a)=>{let o=E(n.errors,e),s=L(`isValid`)&&D(r)&&n.isValid!==r;if(t.delayError&&i?(A[e]=ie(e,()=>fe(e,i)),A[e](t.delayError)):(U(e),i?k(n.errors,e,i):Q(n.errors,e),n.errors={...n.errors}),(i?!F(o,i):o)||!H(a)||s){let t={...a,...s&&D(r)?{isValid:r}:{},errors:n.errors,name:e};z.state.next(t)}},Y=async e=>(K(e,!0),await t.resolver(f,t.context,Ge(e||C.mount,s,t.criteriaMode,t.shouldUseNativeValidation))),ye=async e=>{let t=B,{errors:r}=await Y(e);if(t!==B)return r;if(K(e),e){for(let t of e){let e=E(r,t);W(t);let i=C.array.has(t)&&c(e)&&!Object.keys(e).some(e=>!Number.isNaN(Number(e))),a=E(s,t),o=c(a)&&Object.keys(a).some(e=>e!==`_f`);i?ce(n.errors,{[t]:e},t):e?.type||e?.message||Array.isArray(e)||c(e)&&o?k(n.errors,t,e):Q(n.errors,t)}n.errors={...n.errors}}else Object.keys(A).forEach(U),n.errors=r;return r},xe=async({name:e,eventType:r})=>{if(t.validate){let i=B,a=await t.validate({formValues:f,formState:n,name:e,eventType:r});if(i!==B)return!0;if(c(a)){let e=!0;it(b);for(let t in a){let n=a[t];n&&(e=!1,at(`${b}.${t}`,{message:R(n.message)?n.message:``,type:n.type||v.validate}))}return e}return R(a)||!a?(at(b,{message:a||``,type:v.validate}),!1):(it(b),!0)}return!0},X=async({fields:r,onlyCheckValid:i,name:a,eventType:o,context:s={valid:!0,runRootValidation:!1}})=>{let c=B;if(t.validate&&!s.runRootValidation&&(s.runRootValidation=!0,!await xe({name:a,eventType:o})&&(s.valid=!1,i)))return s.valid;for(let a in r){let l=r[a];if(l){let{_f:r,...u}=l;if(r){let a=C.array.has(r.name),o=l._f&&Je(l._f),u=L(`isValidating`,`validatingFields`);o&&u&&K([r.name],!0);let d=await he(l,C.disabled,f,V,t.shouldUseNativeValidation&&!i,a);if(c!==B)return s.valid;if(o&&u&&K([r.name]),d[r.name]&&(s.valid=!1,i)||(i||(U(r.name),E(d,r.name)?a?ce(n.errors,d,r.name):k(n.errors,r.name,d[r.name]):Q(n.errors,r.name)),e.shouldUseNativeValidation&&d[r.name]))break}!H(u)&&await X({context:s,onlyCheckValid:i,fields:u,name:a,eventType:o})}}return s.valid},Se=()=>{for(let e of C.unMount){let t=E(s,e);t&&(t._f.refs?t._f.refs.every(e=>!Ne(e)):!Ne(t._f.ref))&<(e)}C.unMount=new Set},Z=(e,t)=>(e&&t&&k(f,e,t),!F(S.mount?f:u,u)),Ce=(e,t,n)=>ne(e,C,{...S.mount?f:T(t)||R(e)?u:t},n,t),we=e=>be(E(S.mount?f:u,e,t.shouldUnregister?E(u,e,[]):[])),Te=(e,t,n={},a=!1,c=!1,l=!1)=>{let u=E(s,e),d=t;if(u){let n=u._f;n&&(!n.disabled&&k(f,e,Ue(t,n)),d=le(n.ref)&&o(t)?``:t,je(n.ref)?[...n.ref.options].forEach(e=>e.selected=d.includes(e.value)):n.refs?r(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(e.checked=Array.isArray(d)?!!d.find(t=>t===e.value):d===e.value||!!d)}):n.refs.forEach(e=>e.checked=e.value===d):i(n.ref)?n.ref.value=``:(n.ref.value=d,!n.ref.type&&!c&&!l&&z.state.next({name:e,values:a?f:h(f)})))}(n.shouldDirty||n.shouldTouch)&&_e(e,u&&u._f&&!u._f.disabled&&(u._f.valueAsNumber||u._f.valueAsDate||u._f.setValueAs)?Ue(t,u._f):d,n.shouldTouch,n.shouldDirty,!c),n.shouldValidate&&ze(e,{delayError:n.delayError}),n.shouldValidate&&u&&u._f&&u._f.deps&&(!Array.isArray(u._f.deps)||u._f.deps.length>0)&&ze(u._f.deps)},Ee=(e,t,n,r=!1,i=!1,o=!1)=>{C.array.has(e)&&z.array.next({name:e,values:r?f:h(f)});for(let l in t){if(!t.hasOwnProperty(l))continue;let u=t[l],d=e+`.`+l,f=E(s,d);(C.array.has(e)||c(u)||f&&!f._f)&&!a(u)?Ee(d,u,n,r,i,o):Te(d,u,n,r,i,o)}},ke=(e,t,r,i,a=!1)=>{let c=E(s,e),l=C.array.has(e),u=i?t:h(t),d=F(E(f,e),u);if(d||k(f,e,u),l)z.array.next({name:e,values:i?f:h(f)}),L(`isDirty`,`dirtyFields`)&&r.shouldDirty&&(ue(),a||z.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:Z(e,u)})),r.shouldValidate&&ze(e,{delayError:r.delayError});else{let t=Array.isArray(u)&&!u.length||H(u),n=!d&&!a;!c||c._f||o(u)||t?Te(e,u,r,i,a,n):Ee(e,u,r,i,a,n)}if(!d&&!a){let t=oe(e,C),r=i?f:h(f);if(z.state.next({...t&&n,name:S.mount||t?e:void 0,values:r}),!l)for(let t of He(C.array,e))z.state.next({name:t,values:r})}},Pe=(e,t,n={})=>ke(e,t,n,!1),Ie=(e,t={})=>{let r=O(e)?e(f):e;if(!F(f,r)){f={...f,...r};for(let e of C.mount)Ae(r,e)&&ke(e,E(r,e),t,!0,!0);z.state.next({...n,name:void 0,type:void 0,...M?{values:f}:{}}),t.shouldValidate&&G()}},Le=async e=>{S.mount=!0;let r=e.target,i=r.name,o=!0,c=E(s,i),u=e=>{o=Number.isNaN(e)||a(e)&&isNaN(e.getTime())||F(e,E(f,i,e))};if(c){let a,d,p=r.type?We(c._f):l(e),m=e.type===g.BLUR||e.type===g.FOCUS_OUT,_=!Ye(c._f)&&!t.validate&&!t.resolver&&!E(n.errors,i)&&!c._f.deps,v=_||$e(m,E(n.touchedFields,i),n.isSubmitted,ee,N),y=oe(i,C,m);if(k(f,i,h(p)),m){if(!r||!r.readOnly){c._f.onBlur&&c._f.onBlur(e);let t=A[i];t&&t(0)}}else c._f.onChange&&c._f.onChange(e);let b=_e(i,p,m),x=!H(b)||y;if(!m&&z.state.next({name:i,type:e.type,...M?{values:h(f)}:{}}),v)return(!_||!n.isValid)&&L(`isValid`)&&(t.mode===`onBlur`?m&&G():m||G()),x&&z.state.next({name:i,...y?{}:b});if(!t.resolver&&t.validate&&await xe({name:i,eventType:e.type}),!m&&y&&z.state.next({...n}),t.resolver){let e=B,{errors:t}=await Y([i]);if(e!==B)return;if(K([i]),u(p),!o){!H(b)&&z.state.next(b);return}let r=Xe(n.errors,s,i),c=Xe(t,s,r.name||i);a=c.error,i=c.name,d=H(t)}else{let n=B;if(K([i],!0),a=(await he(c,C.disabled,f,V,t.shouldUseNativeValidation))[i],n!==B)return;if(K([i]),u(p),o){if(a)d=!1;else if(L(`isValid`)&&(d=await X({fields:s,onlyCheckValid:!0,name:i,eventType:e.type}),n!==B))return}}o&&(c._f.deps&&(!Array.isArray(c._f.deps)||c._f.deps.length>0)&&ze(c._f.deps),ve(i,d,a,b))}},Re=(e,t)=>{if(E(n.errors,t)&&e.focus)return e.focus(),1},ze=async(e,r={})=>{let i,a,o=J(e);if(t.resolver){let t=B,n=await ye(T(e)?e:o);if(i=H(n),a=e?!o.some(e=>E(n,e)):i,t!==B)return a}else e?(a=(await Promise.all(o.map(async e=>{let t=E(s,e);return await X({fields:t&&t._f?{[e]:t}:t,eventType:g.TRIGGER})}))).every(Boolean),(a||n.isValid)&&G()):a=i=await X({fields:s,name:e,eventType:g.TRIGGER});if(r.delayError&&t.delayError&&R(e)){let r=E(n.errors,e);r?(Q(n.errors,e),A[e]=ie(e,()=>fe(e,r)),A[e](t.delayError)):U(e)}if(r.shouldTouch)for(let t of e?o:C.mount)!C.array.has(t)&&k(n.touchedFields,t,!0);return z.state.next({...!R(e)||L(`isValid`)&&i!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:i}:{},...r.shouldTouch&&L(`touchedFields`)?{touchedFields:n.touchedFields}:{},errors:n.errors}),r.shouldFocus&&!a&&se(s,Re,e?o:C.mount),a},Be=(e,t)=>{let r={...S.mount?f:u};return t&&(r=Oe(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),T(e)?r:R(e)?E(r,e):e.map(e=>E(r,e))},Ve=e=>T(e)?{...n.errors}:R(e)?E(n.errors,e):e.map(e=>E(n.errors,e)),qe=(e,t)=>{let r=t||n,i=E(r.errors,e);return{invalid:!!i,isDirty:!!E(r.dirtyFields,e),error:i,isValidating:!!E(r.validatingFields,e),isTouched:!!E(r.touchedFields,e)}},it=e=>{let t=e?J(e):void 0;t?t.forEach(e=>{W(e),Q(n.errors,e),z.state.next({name:e,errors:n.errors})}):(Object.keys(A).forEach(U),n.errors={},z.state.next({errors:n.errors}))},at=(e,t,r)=>{W(e);let i=(E(s,e,{_f:{}})._f||{}).ref,{ref:a,message:o,type:c,types:l,...u}=E(n.errors,e)||{};k(n.errors,e,{...u,...t,ref:i}),z.state.next({name:e,errors:n.errors,isValid:!1}),r&&r.shouldFocus&&i&&i.focus&&i.focus()},ot=(e,t)=>{if(O(e)){M++;let{unsubscribe:n}=z.state.subscribe({next:n=>`values`in n&&e(n.values||Ce(void 0,t),n)}),r=!1;return{unsubscribe:()=>{r||(r=!0,M--,n())}}}return Ce(e,t,!0)},st=e=>{let t=!!e.formState?.values;t&&M++;let{unsubscribe:r}=z.state.subscribe({next:t=>{if(Qe(e.name,t.name,e.exact)&&Ze(t,e.formState||P,yt,e.reRenderRoot)){let r={...f};e.callback({values:r,...n,...t,defaultValues:u})}}});if(!t)return r;let i=!1;return()=>{i||(i=!0,M--,r())}},ct=e=>(S.mount=!0,I={...I,...e.formState},st({...e,formState:{...te,...e.formState}})),lt=(e,r={})=>{for(let i of e?J(e):C.mount)C.mount.delete(i),C.array.delete(i),C.disabled.delete(i),r.keepValue||(Q(s,i),Q(f,i)),r.keepError||(W(i),Q(n.errors,i)),!r.keepDirty&&Q(n.dirtyFields,i),!r.keepTouched&&Q(n.touchedFields,i),!r.keepIsValidating&&Q(n.validatingFields,i),!t.shouldUnregister&&!r.keepDefaultValue&&Q(u,i);M&&z.state.next({values:h(f)}),z.state.next({...n,...r.keepDirty?{}:{isDirty:Z()},...r.keepIsValidating?{}:{isValidating:!H(n.validatingFields)}}),!r.keepIsValid&&G()},ut=({disabled:e,name:t})=>{if(D(e)&&S.mount||e||C.disabled.has(t)){let n=C.disabled.has(t)!==!!e;e?C.disabled.add(t):C.disabled.delete(t),n&&S.mount&&!S.action&&G()}},dt=(e,n={})=>{let r=E(s,e),i=D(n.disabled)||D(t.disabled),a=!C.registerName.has(e)&&r&&r._f&&!r._f.mount;if(k(s,e,{...r||{},_f:{...r&&r._f?r._f:{ref:{name:e}},name:e,mount:!0,...n}}),C.mount.add(e),r&&r._f){let t=E(s,e);for(let e of y)e in n||delete t._f[e]}return r&&!a?ut({disabled:D(n.disabled)?n.disabled:t.disabled,name:e}):ge(e,!0,n.value),{...i?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:Ke(n.min),max:Ke(n.max),minLength:Ke(n.minLength),maxLength:Ke(n.maxLength),pattern:Ke(n.pattern)}:{},name:e,onChange:Le,onBlur:Le,ref:i=>{if(i){C.registerName.add(e),dt(e,n),C.registerName.delete(e),r=E(s,e);let t=T(i.value)&&i.querySelectorAll&&i.querySelectorAll(`input,select,textarea`)[0]||i,a=Me(t),o=r._f.refs||[];if(a?o.find(e=>e===t):t===r._f.ref)return;let c={...r._f};a?(c.refs=[...o.filter(Ne),t,...Array.isArray(E(u,e))?[{}]:[]],c.ref={type:t.type,name:e}):(c.ref=t,delete c.refs),k(s,e,{_f:c}),ge(e,!1,void 0,t)}else r=E(s,e,{}),r._f&&(r._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(p(C.array,e)&&S.action)&&C.unMount.add(e)}}},ft=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&se(s,Re,C.mount),pt=e=>{D(e)&&(z.state.next({disabled:e}),se(s,(t,n)=>{let r=E(s,n);r&&(t.disabled=r._f.disabled||e,Array.isArray(r._f.refs)&&r._f.refs.forEach(t=>{t.disabled=r._f.disabled||e}))},0))},mt=(e,r)=>async i=>{let a,o;i&&(i.preventDefault&&i.preventDefault(),i.persist&&i.persist());let c=h(f);if(z.state.next({isSubmitting:!0}),t.resolver){let e=B,{errors:t,values:r}=await Y();if(e!==B)return;K(),Object.keys(A).forEach(U),n.errors=t,c=h(r)}else{let e=B;if(await X({fields:s,eventType:g.SUBMIT}),e!==B)return;Q(n.errors,x)}if(C.disabled.size)for(let e of C.disabled)Q(c,e);if(H(n.errors)){z.state.next({errors:{}});try{a=await e(c,i)}catch(e){o=e}}else r&&await r({...n.errors},i),ft(),setTimeout(ft);if(z.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:H(n.errors)&&!o,submitCount:n.submitCount+1,errors:n.errors}),o)throw o;return a},ht=(e,t={})=>{E(s,e)&&(Q(n.validatingFields,e),T(t.defaultValue)?Pe(e,h(E(u,e))):(Pe(e,t.defaultValue),k(u,e,h(t.defaultValue))),t.keepTouched||Q(n.touchedFields,e),t.keepDirty||(Q(n.dirtyFields,e),n.isDirty=t.defaultValue?Z(e,h(E(u,e))):Z()),t.keepError||(W(e),Q(n.errors,e),G()),z.state.next({...n,isValidating:!H(n.validatingFields)}))},gt=(e,r={})=>{B++;let i=e?h(e):u,a=h(i),o=H(e),c=a,l=s;if(Object.keys(A).forEach(U),r.keepDefaultValues||(u=i),!r.keepValues){if(r.keepDirtyValues){let e=new Set([...C.mount,...Fe($(u,f,void 0,l),n.dirtyFields)]);for(let t of e){let e=E(n.dirtyFields,t),r=E(f,t),i=E(c,t);e&&!T(r)?k(c,t,r):!e&&!T(i)&&Pe(t,i)}}else{if(m&&T(e))for(let e of C.mount){let t=E(s,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(le(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(r.keepFieldsRef)for(let e of C.mount)Pe(e,E(c,e));else s={}}if(t.shouldUnregister){if(f=r.keepDefaultValues?h(u):{},r.keepFieldsRef)for(let e of C.mount)k(f,e,E(c,e))}else f=h(c);z.array.next({values:{...c}}),z.state.next({name:void 0,type:void 0,values:{...c}})}C={mount:r.keepDirtyValues?C.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},S.mount=!P.isValid||!!r.keepIsValid||!!r.keepDirtyValues||!t.shouldUnregister&&!H(c),S.watch=!!t.shouldUnregister,S.keepIsValid=!!r.keepIsValid,S.action=!1,S.actionArrayLengths.clear(),r.keepErrors||(n.errors={}),z.state.next({submitCount:r.keepSubmitCount?n.submitCount:0,isDirty:o?!1:r.keepDirty?n.isDirty:r.keepValues?Z():!(!r.keepDefaultValues||F(e,u)),isSubmitted:r.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:o?{}:r.keepDirtyValues?r.keepDefaultValues&&f?$(u,f,void 0,l):n.dirtyFields:r.keepDefaultValues&&e?$(u,e,void 0,l):r.keepDirty?n.dirtyFields:r.keepValues?$(u,f,void 0,l):{},touchedFields:r.keepTouched?n.touchedFields:{},...!r.keepIsValidating&&(n.isValidating||!H(n.validatingFields))?{validatingFields:{},isValidating:!1}:null,errors:r.keepErrors?n.errors:{},isSubmitSuccessful:r.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:u})},_t=(e,n)=>gt(O(e)?e(f):e,{...t.resetOptions,...n}),vt=(e,t={})=>{let n=E(s,e),r=n&&n._f;if(r){let e=r.refs?r.refs[0]:r.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&O(e.select)&&e.select()})}},yt=e=>{let{name:t,type:r,values:i,...a}=e;n={...n,...a}};z.state.subscribe({next:yt});let bt={control:{register:dt,unregister:lt,getFieldState:qe,handleSubmit:mt,setError:at,_subscribe:st,_runSchema:Y,_updateIsValidating:K,_focusError:ft,_getWatch:Ce,_getDirty:Z,_setValid:G,_setFieldArray:de,_setDisabledField:ut,_setErrors:pe,_getFieldArray:we,_reset:gt,_resetDefaultValues:()=>O(t.defaultValues)&&t.defaultValues().then(e=>{_t(e,t.resetOptions),z.state.next({isLoading:!1})}),_removeUnmounted:Se,_disableForm:pt,_subjects:z,_proxyFormState:P,get _fields(){return s},get _formValues(){return f},get _state(){return S},set _state(e){S=e},get _defaultValues(){return u},get _names(){return C},set _names(e){C=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e},N=ae(t.mode),ee=ae(t.reValidateMode),V=t.criteriaMode===_.all}},subscribe:ct,trigger:ze,register:dt,handleSubmit:mt,watch:ot,setValue:Pe,setValues:Ie,getValues:Be,getErrors:Ve,reset:_t,resetField:ht,resetDefaultValues:(e,t={})=>{if(u=h(e),!t.keepDirty){let e=$(u,f,void 0,s);n.dirtyFields=e,n.isDirty=!H(e)}t.keepIsValid||G(),z.state.next({...n,defaultValues:u})},clearErrors:it,unregister:lt,setError:at,setFocus:vt,getFieldState:qe};return{...bt,formControl:bt}}function at(e={}){let t=n.useRef(void 0),r=n.useRef(void 0),i=n.useRef(e.formControl),a=n.useRef(!!e.validate),[o,s]=n.useState(()=>({...h(rt),isLoading:O(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:O(e.defaultValues)?void 0:e.defaultValues}));if(!t.current||e.formControl&&i.current!==e.formControl){if(i.current=e.formControl,e.formControl)t.current={...e.formControl,formState:o},e.defaultValues&&!O(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...r}=it(e);t.current={...r,formState:o}}}let c=t.current.control;c._options={...e,validate:e.validate};let l=()=>({...c._formState,defaultValues:c._defaultValues}),{resyncIfNeeded:u,snapshot:d}=I(l);return N(()=>{u(!0,l,s);let e=c._subscribe({formState:c._proxyFormState,callback:()=>s({...c._formState,defaultValues:c._defaultValues}),reRenderRoot:!0});return s(e=>({...e,isReady:!0})),c._formState.isReady=!0,()=>{e(),d(!0,l)}},[c,u,d]),n.useEffect(()=>c._disableForm(e.disabled),[c,e.disabled]),n.useEffect(()=>{e.mode&&(c._options.mode=e.mode),e.reValidateMode&&(c._options.reValidateMode=e.reValidateMode)},[c,e.mode,e.reValidateMode]),n.useEffect(()=>{e.errors&&(c._setErrors(e.errors),c._focusError())},[c,e.errors]),n.useEffect(()=>{var n;a.current&&!e.validate&&((n=t.current)==null||n.clearErrors(b)),a.current=!!e.validate},[e.validate]),n.useEffect(()=>{e.shouldUnregister&&c._subjects.state.next({values:c._getWatch()})},[c,e.shouldUnregister]),n.useEffect(()=>{if(c._proxyFormState.isDirty){let e=c._getDirty();e!==o.isDirty&&c._subjects.state.next({isDirty:e})}},[c,o.isDirty]),n.useEffect(()=>{e.values&&!F(e.values,r.current)?(c._reset(e.values,{keepFieldsRef:!0,...c._options.resetOptions}),c._options.resetOptions?.keepIsValid||c._setValid(),r.current=e.values,s(e=>({...e}))):c._resetDefaultValues()},[c,e.values]),n.useEffect(()=>{c._state.mount||(c._setValid(),c._state.mount=!0),c._state.watch&&(c._state.watch=!1,c._subjects.state.next({...c._formState})),c._removeUnmounted()}),t.current.formState=n.useMemo(()=>M(o,c),[c,o]),t.current}var ot=(e,t,n)=>{if(e&&`reportValidity`in e){let r=E(n,t);e.setCustomValidity(r&&r.message||``),e.reportValidity()}},st=(e,t)=>{for(let n in t.fields){let r=t.fields[n];r&&r.ref&&`reportValidity`in r.ref?ot(r.ref,n,e):r&&r.refs&&r.refs.forEach(t=>ot(t,n,e))}},ct=(e,t)=>{t.shouldUseNativeValidation&&st(e,t);let n={};for(let r in e){let i=E(t.fields,r),a=Object.assign(e[r]||{},{ref:i&&i.refs?i.refs[0]:i&&i.ref});if(lt(t.names||Object.keys(e),r)){let e=Object.assign({},E(n,r));k(e,`root`,a),k(n,r,e)}else k(n,r,a)}return n},lt=(e,t)=>{let n=ut(t).replace(/[.*+?^${}()|\\]/g,`\\$&`);return e.some(e=>ut(e).match(`^${n}\\.\\d+`))};function ut(e){return e.replace(/\[(\d+)]/g,`.$1`).replace(/[[\]]/g,``)}function dt(){return dt=Object.assign?Object.assign.bind():function(e){for(var t=1;t0){var s=r.errors.reduce(function(e,t){return t.lengthe.type===`checkbox`,i=e=>e.type===`file`,a=e=>e instanceof Date,o=e=>e==null,s=e=>typeof e==`object`,c=e=>!o(e)&&!Array.isArray(e)&&s(e)&&!a(e),l=e=>c(e)&&e.target?r(e.target)?e.target.checked:i(e.target)?e.target.files:e.target.value:e,u=/[.[\]'"]/,d=e=>e.split(u).filter(Boolean);function f(e,t){let n=d(t),r=e._formValues,i=e._defaultValues;for(let e=0;et.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),m=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function h(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e);let t=typeof Blob<`u`&&e instanceof Blob,n=typeof FileList<`u`&&e instanceof FileList;if(m&&(t||n))return e;let r=Array.isArray(e);if(!r&&e.constructor!==Object)return e;let i=r?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(i[t]=h(e[t]));return i}var g={BLUR:`blur`,FOCUS_OUT:`focusout`,CHANGE:`change`,SUBMIT:`submit`,TRIGGER:`trigger`,VALID:`valid`},_={onBlur:`onBlur`,onChange:`onChange`,onSubmit:`onSubmit`,onTouched:`onTouched`,all:`all`},v={max:`max`,min:`min`,maxLength:`maxLength`,minLength:`minLength`,pattern:`pattern`,required:`required`,validate:`validate`},y=`root`,b=[`__proto__`,`constructor`,`prototype`],x=/^\w*$/,S=e=>x.test(e),C=e=>e===void 0,w=(e,t,n)=>{if(!t||!c(e))return n;let r=S(t)?[t]:d(t);if(r.some(e=>b.includes(e)))return n;let i=r.reduce((e,t)=>o(e)?void 0:e[t],e);return C(i)||i===e?C(e[t])?n:e[t]:i},T=e=>typeof e==`boolean`,E=e=>typeof e==`function`,D=(e,t,n)=>{let r=-1,i=S(t)?[t]:d(t),a=i.length,o=a-1;for(;++rn.useContext(O),A=(e,t,n,r=!0)=>{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==_.all&&(t._proxyFormState[i]=!r||_.all),n&&(n[i]=!0),e[i]}});return i},j=m?n.useLayoutEffect:n.useEffect,ee=e=>{let t=e.constructor&&e.constructor.prototype;return c(t)&&t.hasOwnProperty(`isPrototypeOf`)},M=e=>o(e)||!s(e),N=(e,t)=>t.length===0&&!Array.isArray(e)&&!ee(e);function P(e,t,n=new WeakMap){if(e===t)return!0;if(M(e)||M(t))return Object.is(e,t);if(a(e)&&a(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(N(e,r)||N(t,i))return Object.is(e,t);if(!r.length&&Array.isArray(e)!==Array.isArray(t))return!1;let o=n.get(e);if(o&&o.has(t))return!0;if(o)o.add(t);else{let r=new WeakSet;r.add(t),n.set(e,r)}for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(a(r)&&a(e)||(c(r)||Array.isArray(r))&&(c(e)||Array.isArray(e))?!P(r,e,n):!Object.is(r,e))return!1}}return!0}function F(e){let t=n.useRef(!1),r=n.useRef(!1),i=n.useRef(void 0),a=n.useRef(0);return a.current++,!r.current&&e&&(r.current=!0,i.current=h(e())),{resyncIfNeeded:n.useCallback((e,n,o)=>{if(e&&(t.current||r.current&&a.current>1)){let e=n();P(i.current,e)||o(e)}t.current=!0},[]),snapshot:n.useCallback((e,t)=>{e&&(i.current=h(t()))},[])}}function I(e){let t=k(),{control:r=t,disabled:i,name:a,exact:o}=e||{},s=()=>({...r._formState,defaultValues:r._defaultValues}),[c,l]=n.useState(s),u=n.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1}),{resyncIfNeeded:d,snapshot:f}=F(s);return j(()=>{d(!i,s,l);let e=r._subscribe({name:a,formState:u.current,exact:o,callback:e=>{!i&&l({...r._formState,...e,defaultValues:r._defaultValues})}});return()=>{e(),f(!i,s)}},[r,a,i,o,d,f]),n.useEffect(()=>{u.current.isValid&&r._setValid(!0)},[r]),n.useMemo(()=>A(c,r,u.current,!1),[c,r])}var L=e=>typeof e==`string`,te=(e,t,n,r,i)=>L(e)?(r&&t.watch.add(e),w(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),w(n,e,w(i,e)))):(r&&(t.watchAll=!0),n);function R(e){let t=k(),{control:r=t,name:i,defaultValue:a,disabled:o,exact:s,compute:c}=e||{},l=n.useRef(a),u=n.useRef(c),d=n.useRef(r),f=n.useRef(i);u.current=c;let p=()=>{let e=r._getWatch(i,l.current);return u.current?u.current(e):e},[m,h]=n.useState(p),g=n.useRef(m),_=n.useCallback(e=>{let t=te(i,r._names,e||r._formValues,!1,l.current);return u.current?u.current(t):t},[r._formValues,r._names,i]),v=n.useCallback(e=>{if(!o){let t=te(i,r._names,e||r._formValues,!1,l.current);if(u.current){let e=u.current(t);P(e,g.current)||(h(e),g.current=e)}else h(t)}},[r._formValues,r._names,o,i]),{resyncIfNeeded:y,snapshot:b}=F(p),x=n.useRef(v);x.current=v;let S=n.useRef(_);S.current=_,j(()=>{d.current!==r||!P(f.current,i)?(d.current=r,f.current=i,x.current()):y(!o,()=>S.current(),e=>{h(e),g.current=e});let e=r._subscribe({name:i,formState:{values:!0},exact:s,callback:e=>{x.current(e.values)}});return()=>{e(),b(!o,()=>S.current())}},[r,s,i,o,y,b]),n.useEffect(()=>r._removeUnmounted());let C=d.current!==r,w=f.current;return n.useMemo(()=>{if(o)return!1;let e=!C&&!P(w,i);return C||e},[o,C,i,w])?_():m}function ne(e){let t=k(),{name:r,disabled:i,control:a=t,shouldUnregister:o,defaultValue:s,exact:c=!0}=e,u=p(a._names.array,r),d=R({control:a,name:r,defaultValue:n.useMemo(()=>{let e=w(a._formValues,r,w(a._defaultValues,r,s));return C(e)?f(a,r):e},[a,r,s]),exact:c}),m=I({control:a,name:r,exact:c}),_=n.useRef(e),v=n.useRef(null),y=n.useRef(a.register(r,{...e.rules,value:d,...T(e.disabled)?{disabled:e.disabled}:{}}));_.current=e;let b=n.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!w(m.errors,r)},isDirty:{enumerable:!0,get:()=>!!w(m.dirtyFields,r)},isTouched:{enumerable:!0,get:()=>!!w(m.touchedFields,r)},isValidating:{enumerable:!0,get:()=>!!w(m.validatingFields,r)},error:{enumerable:!0,get:()=>w(m.errors,r)}}),[m,r]),x=n.useCallback(e=>{let t=l(e);return w(a._fields,r)||(y.current=a.register(r,{..._.current.rules,value:t})),y.current.onChange({target:{value:l(e),name:r},type:g.CHANGE})},[r,a]),S=n.useCallback(()=>y.current.onBlur({target:{value:w(a._formValues,r),name:r},type:g.BLUR}),[r,a._formValues]),O=n.useCallback(e=>{e&&(v.current={focus:()=>E(e.focus)&&e.focus(),select:()=>E(e.select)&&e.select(),setCustomValidity:t=>E(e.setCustomValidity)&&e.setCustomValidity(t),reportValidity:()=>E(e.reportValidity)&&e.reportValidity()});let t=w(a._fields,r);t&&t._f&&e&&(t._f.ref=v.current)},[a._fields,r]),A=n.useMemo(()=>({name:r,value:d,...T(i)||m.disabled?{disabled:m.disabled||i}:{},onChange:x,onBlur:S,ref:O}),[r,i,m.disabled,x,S,O,d]);return n.useEffect(()=>{let e=a._options.shouldUnregister||o;y.current=a.register(r,{..._.current.rules,...T(_.current.disabled)?{disabled:_.current.disabled}:{}});let t=(e,t)=>{let n=w(a._fields,e);n&&n._f&&(n._f.mount=t)};if(t(r,!0),e){let e=h(w(o?a._defaultValues:a._options.values||a._defaultValues,r,w(a._options.defaultValues,r,_.current.defaultValue)));D(a._defaultValues,r,e),C(w(a._formValues,r))&&D(a._formValues,r,e)}if(!u&&a.register(r),v.current){let e=w(a._fields,r);e&&e._f&&(e._f.ref=v.current)}return()=>{(u?e&&!a._state.action:e)?a.unregister(r):t(r,!1)}},[r,a,u,o]),n.useEffect(()=>{a._setDisabledField({disabled:i,name:r})},[i,r,a]),n.useMemo(()=>({field:A,formState:m,fieldState:b}),[A,m,b])}var z=e=>e.render(ne(e)),B=()=>typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)}),re=(e,t,n={})=>n.shouldFocus||C(n.shouldFocus)?n.focusName||`${e}.${C(n.focusIndex)?t:n.focusIndex}.`:``,ie=e=>({isOnSubmit:!e||e===_.onSubmit,isOnBlur:e===_.onBlur,isOnChange:e===_.onChange,isOnAll:e===_.all,isOnTouch:e===_.onTouched}),ae=(e,t,n)=>{if(n)return!1;if(t.watchAll||t.watch.has(e))return!0;for(let n of t.watch)if(e.startsWith(n)&&e.charAt(n.length)===`.`)return!0;return!1},oe=(e,t,n)=>{for(let r of n||Object.keys(e)){if(r===`_f`)continue;let i=n?w(e,r):e[r];if(i){let{_f:e}=i;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],e.name)||e.ref&&t(e.ref,e.name)||oe(i,t))return!0}else if((c(i)||Array.isArray(i))&&oe(i,t))return!0}}},se=(e,t,n)=>{let r=w(e,n),i=Array.isArray(r)?r:[];return D(i,y,t[n]),D(e,n,i),e},V=e=>c(e)&&!Object.keys(e).length,ce=e=>{if(!m)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},H=e=>e.type===`radio`,le=e=>e instanceof RegExp,U=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},W={value:!1,isValid:!1},ue={value:!0,isValid:!0},de=e=>{if(!Array.isArray(e))return W;if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}let t=e[0];return!t||!t.checked||t.disabled?W:!t.attributes||!(`value`in t.attributes)||C(t.value)||t.value===``?ue:{value:t.value,isValid:!0}},fe={isValid:!1,value:null},pe=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,fe):fe;function me(e,t,n=`validate`){if(L(e)||Array.isArray(e)&&e.every(L)||T(e)&&!e)return{type:n,message:L(e)?e:``,ref:t}}var G=e=>c(e)&&!le(e)?e:{value:e,message:``},he=async(e,t,n,s,l,u)=>{let{ref:d,refs:f,required:p,maxLength:m,minLength:h,min:g,max:_,pattern:y,validate:b,name:x,valueAsNumber:S,mount:D}=e._f,O=w(n,x);if(!D||t.has(x))return{};let k=f?f[0]:d,A=e=>{if(l&&k.reportValidity){let t=T(e)?``:e||``;f?f.forEach(e=>e.setCustomValidity(t)):k.setCustomValidity(t),k.reportValidity()}},j={},ee=H(d),M=r(d),N=ee||M,P=(S||i(d))&&C(d.value)&&C(O)||ce(d)&&d.value===``||O===``||Array.isArray(O)&&!O.length,F=U.bind(null,x,s,j),I=(e,t,n,r=v.maxLength,i=v.minLength)=>{let a=e?t:n;j[x]={type:e?r:i,message:a,ref:d,...F(e?r:i,a)}};if(u?!Array.isArray(O)||!O.length:p&&(!N&&(P||o(O))||T(O)&&!O||M&&!de(f).isValid||ee&&!pe(f).isValid)){let{value:e,message:t}=L(p)?{value:!!p,message:p}:G(p);if(e&&(j[x]={type:v.required,message:t,ref:k,...F(v.required,t)},!s))return A(t),j}if(!P&&(!o(g)||!o(_))){let e,t,n=G(_),r=G(g);if(!o(O)&&!a(O)&&!isNaN(O)){let i=d.valueAsNumber||O&&+O;o(n.value)||(e=i>n.value),o(r.value)||(t=inew Date(new Date().toDateString()+` `+e),o=d.type==`time`,s=d.type==`week`;L(n.value)&&O&&(e=o?a(O)>a(n.value):s?O>n.value:i>new Date(n.value)),L(r.value)&&O&&(t=o?a(O)+e.value,r=!o(t.value)&&O.length<+t.value;if((n||r)&&(I(n,e.message,t.message),!s))return A(j[x].message),j}if(y&&!P&&L(O)){let{value:e,message:t}=G(y);if(le(e)&&!O.match(e)&&(j[x]={type:v.pattern,message:t,ref:d,...F(v.pattern,t)},!s))return A(t),j}if(b){if(E(b)){let e=me(await b(O,n),k);if(e&&(j[x]={...e,...F(v.validate,e.message)},!s))return A(e.message),j}else if(c(b)){let e={};for(let t in b){if(!V(e)&&!s)break;let r=me(await b[t](O,n),k,t);r&&(e={...r,...F(t,r.message)},s||A(r.message),s&&(j[x]=e))}if(!V(e)&&(j[x]={ref:k,...e},!s))return j}}let te=j[x];return A(!te||te.message),j},K=e=>Array.isArray(e)?e:[e],ge=(e,t)=>[...e,...K(t)],q=e=>Array.isArray(e)?e.map(()=>void 0):void 0;function _e(e,t,n){return[...e.slice(0,t),...K(n),...e.slice(t)]}var J=(e,t,n)=>Array.isArray(e)?(C(e[n])&&(e[n]=void 0),e.splice(n,0,e.splice(t,1)[0]),e):[],ve=(e,t)=>[...K(t),...K(e)],ye=e=>Array.isArray(e)?e.filter(Boolean):[];function be(e,t){let n=0,r=[...e];for(let e of t)r.splice(e-n,1),n++;return ye(r).length?r:[]}var Y=(e,t)=>C(t)?[]:be(e,K(t).sort((e,t)=>e-t)),xe=(e,t,n)=>{[e[t],e[n]]=[e[n],e[t]]};function X(e,t){let n=t.length-1,r=0;for(;rb.includes(String(e))))return e;let r=n.length===1?e:X(e,n),i=n.length-1,a=n[i];return r&&delete r[a],i!==0&&(c(r)&&V(r)||Array.isArray(r)&&Se(r))&&Z(e,n.slice(0,-1)),e}var Ce=(e,t,n)=>(e[t]=n,e);function we(e){let t=k(),{control:r=t,name:i,keyName:a=`id`,disabled:o,shouldUnregister:s,rules:l}=e,u=()=>r._getFieldArray(i),[d,f]=n.useState(u),p=n.useRef(r._getFieldArray(i).map(B)),m=n.useRef(!1),{resyncIfNeeded:g,snapshot:v}=F(u),y=n.useRef(r),b=n.useRef(i);o||r._names.array.add(i),n.useMemo(()=>!o&&l&&d.length>=0&&r.register(i,l),[r,i,d.length,l,o]),j(()=>{if(o)return;if(y.current===r&&b.current===i)g(!0,u,e=>{f(e),p.current=e.map(B)});else{y.current=r,b.current=i;let e=u();P(d,e)||(f(e),p.current=e.map(B)),v(!0,u)}let e=r._subjects.array.subscribe({next:({values:e,name:t})=>{if(t===i||!t){let n=w(e,i);Array.isArray(n)?(f(n),p.current=n.map(B)):t||(f([]),p.current=[])}}}).unsubscribe;return()=>{e(),v(!0,u)}},[r,i,o,g,v]);let x=n.useCallback(e=>{m.current=!0,r._setFieldArray(i,e)},[r,i]);return n.useEffect(()=>{if(o){r._state.actionArrayLengths.delete(i);return}r._state.action=!1,r._state.actionArrayLengths.delete(i),ae(i,r._names)&&r._subjects.state.next({...r._formState});let e=ie(r._options.mode);if(m.current&&(!e.isOnSubmit||r._formState.isSubmitted)&&!ie(r._options.reValidateMode).isOnSubmit&&!e.isOnBlur){if(r._options.resolver)r._runSchema([i]).then(e=>{r._updateIsValidating([i]);let t=w(e.errors,i),n=w(r._formState.errors,i),a=n&&(n.type||n.root?.type),o=n&&(n.message||n.root?.message);(n?!t&&a||t&&(a!==t.type||o!==t.message):t&&t.type)&&(t?c(t)&&!Object.keys(t).some(e=>!Number.isNaN(+e))?se(r._formState.errors,{[i]:t},i):D(r._formState.errors,i,t):Z(r._formState.errors,i),r._subjects.state.next({errors:r._formState.errors}))});else{let e=w(r._fields,i);e&&e._f&&he(e,r._names.disabled,r._formValues,r._options.criteriaMode===_.all,r._options.shouldUseNativeValidation,!0).then(e=>!V(e)&&r._subjects.state.next({errors:se(r._formState.errors,e,i)}))}}m.current&&r._subjects.state.next({name:i,values:h(r._formValues)}),r._names.focus&&oe(r._fields,(e,t)=>{if(r._names.focus&&t.startsWith(r._names.focus)&&e.focus)return e.focus(),1}),r._names.focus=``,r._setValid(),m.current=!1},[d,i,r,o]),n.useEffect(()=>(o||!w(r._formValues,i)&&r._setFieldArray(i),()=>{if(r._state.actionArrayLengths.delete(i),o)return;let e=!(r._options.shouldUnregister||s);m.current&&e&&r._subjects.state.next({name:i,values:h(r._formValues)}),e?((e,t)=>{let n=w(r._fields,e);n&&n._f&&(n._f.mount=t)})(i,!1):r.unregister(i)}),[i,r,a,s,o]),{swap:n.useCallback((e,t)=>{if(o)return;let n=r._getFieldArray(i);xe(n,e,t),xe(p.current,e,t),x(n),f(n),r._setFieldArray(i,n,xe,{argA:e,argB:t},!1)},[x,i,r,o]),move:n.useCallback((e,t)=>{if(o)return;let n=r._getFieldArray(i);J(n,e,t),J(p.current,e,t),x(n),f(n),r._setFieldArray(i,n,J,{argA:e,argB:t},!1)},[x,i,r,o]),prepend:n.useCallback((e,t)=>{if(o)return;let n=K(h(e)),a=ve(r._getFieldArray(i),n);r._names.focus=re(i,0,t),p.current=ve(p.current,n.map(B)),x(a),f(a),r._setFieldArray(i,a,ve,{argA:q(e)})},[x,i,r,o]),append:n.useCallback((e,t)=>{if(o)return;let n=K(h(e)),a=ge(r._getFieldArray(i),n);r._names.focus=re(i,a.length-1,t),p.current=ge(p.current,n.map(B)),x(a),f(a),r._setFieldArray(i,a,ge,{argA:q(e)})},[x,i,r,o]),remove:n.useCallback(e=>{if(o)return;let t=Y(r._getFieldArray(i),e);p.current=Y(p.current,e),x(t),f(t),!Array.isArray(w(r._fields,i))&&D(r._fields,i,void 0),r._setFieldArray(i,t,Y,{argA:e})},[x,i,r,o]),insert:n.useCallback((e,t,n)=>{if(o)return;let a=K(h(t)),s=_e(r._getFieldArray(i),e,a);r._names.focus=re(i,e,n),p.current=_e(p.current,e,a.map(B)),x(s),f(s),r._setFieldArray(i,s,_e,{argA:e,argB:q(t)})},[x,i,r,o]),update:n.useCallback((e,t)=>{if(o)return;let n=h(t),a=Ce(r._getFieldArray(i),e,n);p.current=[...a].map((t,n)=>!t||n===e?B():p.current[n]),x(a),f([...a]),r._setFieldArray(i,a,Ce,{argA:e,argB:q(t)})},[x,i,r,o]),replace:n.useCallback(e=>{if(o)return;let t=K(h(e));p.current=t.map(B),x([...t]),f([...t]),r._setFieldArray(i,[...t],e=>Array.isArray(e)?e.slice(0,t.length):e,{})},[x,i,r,o]),fields:n.useMemo(()=>d.map((e,t)=>({...e,...T(o)?{disabled:o}:{},[a]:p.current[t]||B()})),[d,a,o])}}var Te=n.createContext(null);Te.displayName=`HookFormContext`;var Ee=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function De(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&c(i)&&a){let e=De(i,a);c(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var Oe=(e,t)=>e!==null&&s(e)&&Object.prototype.hasOwnProperty.call(e,t),ke=(e,t)=>{if(!t)return!1;let n=e;for(let r of S(t)?[t]:d(t)){if(!Oe(n,r))return Oe(e,t);n=n[r]}return!0},Ae=e=>e.type===`select-multiple`,je=e=>H(e)||r(e),Me=e=>ce(e)&&e.isConnected;function Q(e){return Array.isArray(e)||c(e)}function Ne(e,t,n=``,r=[]){for(let i in e){let a=n?`${n}.${i}`:i,o=e[i];Q(o)&&Q(w(t,a))?Ne(o,t,a,r):r.push(a)}return r}var Pe=e=>{for(let t in e)if(E(e[t]))return!0;return!1};function Fe(e){return Array.isArray(e)||c(e)&&!Pe(e)}function Ie(e){return!!(e&&`_f`in e)}function Le(e){return Array.isArray(e)?!e.some(e=>!C(e)):!Object.keys(e).length}function Re(e,t){Array.isArray(e)?e[t]=void 0:delete e[t]}function ze(e,t={},n){for(let r in e){let i=e[r],a=n&&n[r];Fe(i)&&(!Array.isArray(i)||!Ie(a))?(t[r]=Array.isArray(i)?[]:{},ze(i,t[r],a),Le(t[r])&&Re(t,r)):C(i)||(t[r]=!0)}return t}function $(e,t,n,r){n||=ze(t,{},r);for(let i in e){let a=e[i],s=r&&r[i];Fe(a)&&(!Array.isArray(a)||!Ie(s))?(C(t)||M(n[i])?n[i]=ze(a,Array.isArray(a)?[]:{},s):$(a,o(t)?{}:t[i],n[i],s),Le(n[i])&&Re(n,i)):P(a,t[i])?Re(n,i):n[i]=!0}return n}var Be=(e,t)=>{let n=t.split(`.`),r=[],i=n[0];for(let t=1;tC(e)?e:t?e===``?NaN:e&&+e:n&&L(e)?new Date(e):r?r(e):e;function He(e){let t=e.ref;return i(t)?t.files:H(t)?pe(e.refs).value:Ae(t)?[...t.selectedOptions].map(({value:e})=>e):r(t)?de(e.refs).value:Ve(t.value,e)}var Ue=(e,t,n,r)=>{let i={};for(let n of e){let e=w(t,n);e&&D(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},We=e=>C(e)?e:le(e)?e.source:c(e)?le(e.value)?e.value.source:e.value:e,Ge=`AsyncFunction`,Ke=e=>{if(!e||!e.validate)return!1;if(E(e.validate))return e.validate.constructor.name===Ge;if(c(e.validate)){for(let t in e.validate)if(e.validate[t].constructor.name===Ge)return!0}return!1},qe=e=>e.mount&&(e.required||!C(e.required)&&e.required!==!1||!C(e.min)||!C(e.max)||!C(e.maxLength)||!C(e.minLength)||e.pattern||e.validate);function Je(e,t,n){let r=w(e,n);if(r?.type||r?.message||Array.isArray(r))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=w(t,r),o=w(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var Ye=(e,t,n,r)=>{n(e);let i=Object.keys(e).filter(e=>e!==`name`);return!i.length||r&&i.length>=Object.keys(t).length||i.find(e=>t[e]===(!r||_.all))},Xe=(e,t,n)=>!e||!t||e===t||K(e).some(e=>e&&(n?e===t||e.startsWith(t+`.`):e.startsWith(t)||t.startsWith(e))),Ze=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:!(n?r.isOnChange:i.isOnChange)||e,Qe=(e,t)=>{let n=w(e,t);!ye(n).length&&!(n!=null&&n.root)&&Z(e,t)},$e={mode:_.onSubmit,reValidateMode:_.onChange,shouldFocusError:!0},et=`form`,tt=(e,t)=>{for(let n in e)n in t||delete e[n];Object.assign(e,t)},nt={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function rt(e={}){let t={...$e,...e},n={...h(nt),isLoading:E(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},s={},u=(c(t.defaultValues)||c(t.values))&&h(t.defaultValues||t.values)||{},f=t.shouldUnregister?{}:h(u),b={action:!1,actionArrayLengths:new Map,mount:!1,watch:!1,keepIsValid:!1},x={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},O={},k={},A=0,j=ie(t.mode),ee=ie(t.reValidateMode),M={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},N={...M},F={...N},I=(...e)=>e.some(e=>N[e]||F[e]),R={array:Ee(),state:Ee()},ne=0,z=0,B=t.criteriaMode===_.all,re=(e,t)=>n=>{clearTimeout(k[e]),k[e]=setTimeout(t,n)},H=e=>{clearTimeout(k[e]),delete k[e],delete O[e]},le=e=>{H(e);let t=`${e}.`;for(let e of Object.keys(O))e.startsWith(t)&&H(e)},U=async e=>{if(!b.keepIsValid&&!t.disabled&&(I(`isValid`)||e)){let e=++ne,r;t.resolver?(r=V((await J()).errors),e===ne&&W()):r=await Y({fields:s,onlyCheckValid:!0,eventType:g.VALID}),e===ne&&r!==n.isValid&&R.state.next({isValid:r})}},W=(e,r)=>{!t.disabled&&I(`isValidating`,`validatingFields`)&&((e||x.mount).forEach(e=>{e&&(r?D(n.validatingFields,e,r):Z(n.validatingFields,e))}),R.state.next({validatingFields:n.validatingFields,isValidating:!V(n.validatingFields)}))},ue=()=>{n.dirtyFields=$(u,f,void 0,s)},de=(e,r=[],i,a,o=!0,c=!0)=>{if(a&&i&&!t.disabled){b.action=!0;let t=w(s,e);if(b.actionArrayLengths.has(e)||b.actionArrayLengths.set(e,Array.isArray(t)?t.length:0),c&&Array.isArray(t)){let n=i(t,a.argA,a.argB);o&&D(s,e,n)}let l=w(n.errors,e);if(c&&Array.isArray(l)){let t=l.root,r=i(l,a.argA,a.argB)||l;t&&(r.root=t),o&&D(n.errors,e,r),Qe(n.errors,e)}let u=w(n.touchedFields,e);if(I(`touchedFields`)&&c&&Array.isArray(u)){let t=i(u,a.argA,a.argB);o&&D(n.touchedFields,e,t)}I(`dirtyFields`)&&ue(),R.state.next({name:e,isDirty:X(e,r),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else D(f,e,r)},fe=(e,t)=>{D(n.errors,e,t),n.errors={...n.errors},R.state.next({errors:n.errors})},pe=e=>{Object.keys(O).forEach(H),n.errors=e,R.state.next({errors:n.errors,isValid:!1})},me=e=>{let t=S(e)?[e]:d(e),n=f,r=u;for(let e=0;e{if(!b.actionArrayLengths.size)return!1;let t=S(e)?[e]:d(e),n=f,r=``,i=-1,a=0;for(let e=0;e=n.length)return i===-1?!1:e!==i||+si&&+t[i]{let o=w(s,t);if(o){if(me(t)||G(t))return;let s=C(w(f,t)),c=w(f,t,C(i)?w(u,t):i);C(c)||a&&a.defaultChecked||r?D(f,t,r?c:He(o._f)):we(t,c),b.mount&&!b.action&&(U(),s&&n.isDirty&&I(`isDirty`)&&(X()||(n.isDirty=!1,R.state.next({...n}))),e.shouldUnregister&&s&&!C(w(f,t))&&ae(t,x)&&(b.watch=!0))}},q=(e,r,i,a,o)=>{let c=!1,l=!1,d={name:e};if(!t.disabled||a===!0){if(!i||a){let t=P(w(u,e),r);I(`isDirty`)&&(l=n.isDirty,n.isDirty=d.isDirty=!t||X(),c=l!==d.isDirty),l=!!w(n.dirtyFields,e),t===n.isDirty?t?Z(n.dirtyFields,e):D(n.dirtyFields,e,!0):tt(n.dirtyFields,$(u,f,void 0,s)),d.dirtyFields=n.dirtyFields,c||=I(`dirtyFields`)&&l!==!t}if(i){let t=w(n.touchedFields,e);t||(D(n.touchedFields,e,i),d.touchedFields=n.touchedFields,c||=I(`touchedFields`)&&t!==i)}c&&o&&R.state.next(d)}return c?d:{}},_e=(e,r,i,a)=>{let o=w(n.errors,e),s=I(`isValid`)&&T(r)&&n.isValid!==r;if(t.delayError&&i?(O[e]=re(e,()=>fe(e,i)),O[e](t.delayError)):(H(e),i?D(n.errors,e,i):Z(n.errors,e),n.errors={...n.errors}),(i?!P(o,i):o)||!V(a)||s){let t={...a,...s&&T(r)?{isValid:r}:{},errors:n.errors,name:e};R.state.next(t)}},J=async e=>(W(e,!0),await t.resolver(f,t.context,Ue(e||x.mount,s,t.criteriaMode,t.shouldUseNativeValidation))),ve=async e=>{let t=z,{errors:r}=await J(e);if(t!==z)return r;if(W(e),e){for(let t of e){let e=w(r,t);H(t);let i=x.array.has(t)&&c(e)&&!Object.keys(e).some(e=>!Number.isNaN(Number(e))),a=w(s,t),o=c(a)&&Object.keys(a).some(e=>e!==`_f`);i?se(n.errors,{[t]:e},t):e?.type||e?.message||Array.isArray(e)||c(e)&&o?D(n.errors,t,e):Z(n.errors,t)}n.errors={...n.errors}}else Object.keys(O).forEach(H),n.errors=r;return r},be=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:f,formState:n,name:t,eventType:r});if(c(i))for(let e in i){let t=i[e];t&&it(`${et}.${e}`,{message:L(t.message)?t.message:``,type:t.type||v.validate})}else L(i)||!i?it(et,{message:i||``,type:v.validate}):rt(et);return i}return!0},Y=async({fields:r,onlyCheckValid:i,name:a,eventType:o,context:s={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(s.runRootValidation=!0,!await be({name:a,eventType:o})&&(s.valid=!1,i)))return s.valid;for(let a in r){let c=r[a];if(c){let{_f:r,...l}=c;if(r){let a=x.array.has(r.name),o=c._f&&Ke(c._f),l=I(`isValidating`,`validatingFields`);o&&l&&W([r.name],!0);let u=await he(c,x.disabled,f,B,t.shouldUseNativeValidation&&!i,a);if(o&&l&&W([r.name]),u[r.name]&&(s.valid=!1,i)||(i||(H(r.name),w(u,r.name)?a?se(n.errors,u,r.name):D(n.errors,r.name,u[r.name]):Z(n.errors,r.name)),e.shouldUseNativeValidation&&u[r.name]))break}!V(l)&&await Y({context:s,onlyCheckValid:i,fields:l,name:a,eventType:o})}}return s.valid},xe=()=>{for(let e of x.unMount){let t=w(s,e);t&&(t._f.refs?t._f.refs.every(e=>!Me(e)):!Me(t._f.ref))&&ct(e)}x.unMount=new Set},X=(e,t)=>(e&&t&&D(f,e,t),!P(b.mount?f:u,u)),Se=(e,t,n)=>te(e,x,{...b.mount?f:C(t)||L(e)?u:t},n,t),Ce=e=>ye(w(b.mount?f:u,e,t.shouldUnregister?w(u,e,[]):[])),we=(e,t,n={},a=!1,c=!1,l=!1)=>{let u=w(s,e),d=t;if(u){let n=u._f;n&&(!n.disabled&&D(f,e,Ve(t,n)),d=ce(n.ref)&&o(t)?``:t,Ae(n.ref)?[...n.ref.options].forEach(e=>e.selected=d.includes(e.value)):n.refs?r(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(e.checked=Array.isArray(d)?!!d.find(t=>t===e.value):d===e.value||!!d)}):n.refs.forEach(e=>e.checked=e.value===d):i(n.ref)?n.ref.value=``:(n.ref.value=d,!n.ref.type&&!c&&!l&&R.state.next({name:e,values:a?f:h(f)})))}(n.shouldDirty||n.shouldTouch)&&q(e,u&&u._f&&!u._f.disabled&&(u._f.valueAsNumber||u._f.valueAsDate||u._f.setValueAs)?Ve(t,u._f):d,n.shouldTouch,n.shouldDirty,!c),n.shouldValidate&&Le(e,{delayError:n.delayError})},Te=(e,t,n,r=!1,i=!1,o=!1)=>{x.array.has(e)&&R.array.next({name:e,values:r?f:h(f)});for(let l in t){if(!t.hasOwnProperty(l))continue;let u=t[l],d=e+`.`+l,f=w(s,d);(x.array.has(e)||c(u)||f&&!f._f)&&!a(u)?Te(d,u,n,r,i,o):we(d,u,n,r,i,o)}},Oe=(e,t,r,i,a=!1)=>{let c=w(s,e),l=x.array.has(e),u=i?t:h(t),d=P(w(f,e),u);if(d||D(f,e,u),l)R.array.next({name:e,values:i?f:h(f)}),I(`isDirty`,`dirtyFields`)&&r.shouldDirty&&(ue(),a||R.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:X(e,u)}));else{let t=Array.isArray(u)&&!u.length||V(u),n=!d&&!a;!c||c._f||o(u)||t?we(e,u,r,i,a,n):Te(e,u,r,i,a,n)}if(!d&&!a){let t=ae(e,x),r=i?f:h(f);if(R.state.next({...t&&n,name:b.mount||t?e:void 0,values:r}),!l)for(let t of Be(x.array,e))R.state.next({name:t,values:r})}},Q=(e,t,n={})=>Oe(e,t,n,!1),Pe=(e,t={})=>{let r=E(e)?e(f):e;if(!P(f,r)){f={...f,...r};for(let e of x.mount)ke(r,e)&&Oe(e,w(r,e),t,!0,!0);R.state.next({...n,name:void 0,type:void 0,...A?{values:f}:{}}),t.shouldValidate&&U()}},Fe=async r=>{b.mount=!0;let i=r.target,o=i.name,c=!0,u=w(s,o),d=e=>{c=Number.isNaN(e)||a(e)&&isNaN(e.getTime())||P(e,w(f,o,e))};if(u){let a,p,m=i.type?He(u._f):l(r),_=r.type===g.BLUR||r.type===g.FOCUS_OUT,v=!qe(u._f)&&!e.validate&&!t.resolver&&!w(n.errors,o)&&!u._f.deps,y=v||Ze(_,w(n.touchedFields,o),n.isSubmitted,ee,j),b=ae(o,x,_);if(D(f,o,h(m)),_){if(!i||!i.readOnly){u._f.onBlur&&u._f.onBlur(r);let e=O[o];e&&e(0)}}else u._f.onChange&&u._f.onChange(r);let S=q(o,m,_),C=!V(S)||b;if(!_&&R.state.next({name:o,type:r.type,...A?{values:h(f)}:{}}),y)return(!v||!n.isValid)&&I(`isValid`)&&(t.mode===`onBlur`?_&&U():_||U()),C&&R.state.next({name:o,...b?{}:S});if(!t.resolver&&e.validate&&await be({name:o,eventType:r.type}),!_&&b&&R.state.next({...n}),t.resolver){let{errors:e}=await J([o]);if(W([o]),d(m),!c){!V(S)&&R.state.next(S);return}let t=Je(n.errors,s,o),r=Je(e,s,t.name||o);a=r.error,o=r.name,p=V(e)}else W([o],!0),a=(await he(u,x.disabled,f,B,t.shouldUseNativeValidation))[o],W([o]),d(m),c&&(a?p=!1:I(`isValid`)&&(p=await Y({fields:s,onlyCheckValid:!0,name:o,eventType:r.type})));c&&(u._f.deps&&(!Array.isArray(u._f.deps)||u._f.deps.length>0)&&Le(u._f.deps),_e(o,p,a,S))}},Ie=(e,t)=>{if(w(n.errors,t)&&e.focus)return e.focus(),1},Le=async(e,r={})=>{let i,a,o=K(e);if(t.resolver){let t=z,n=await ve(C(e)?e:o);if(i=V(n),a=e?!o.some(e=>w(n,e)):i,t!==z)return a}else e?(a=(await Promise.all(o.map(async e=>{let t=w(s,e);return await Y({fields:t&&t._f?{[e]:t}:t,eventType:g.TRIGGER})}))).every(Boolean),(a||n.isValid)&&U()):a=i=await Y({fields:s,name:e,eventType:g.TRIGGER});if(r.delayError&&t.delayError&&L(e)){let r=w(n.errors,e);r?(Z(n.errors,e),O[e]=re(e,()=>fe(e,r)),O[e](t.delayError)):H(e)}if(r.shouldTouch)for(let t of e?o:x.mount)!x.array.has(t)&&D(n.touchedFields,t,!0);return R.state.next({...!L(e)||I(`isValid`)&&i!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:i}:{},...r.shouldTouch&&I(`touchedFields`)?{touchedFields:n.touchedFields}:{},errors:n.errors}),r.shouldFocus&&!a&&oe(s,Ie,e?o:x.mount),a},Re=(e,t)=>{let r={...b.mount?f:u};return t&&(r=De(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),C(e)?r:L(e)?w(r,e):e.map(e=>w(r,e))},ze=e=>C(e)?{...n.errors}:L(e)?w(n.errors,e):e.map(e=>w(n.errors,e)),Ge=(e,t)=>{let r=t||n,i=w(r.errors,e);return{invalid:!!i,isDirty:!!w(r.dirtyFields,e),error:i,isValidating:!!w(r.validatingFields,e),isTouched:!!w(r.touchedFields,e)}},rt=e=>{let t=e?K(e):void 0;t?t.forEach(e=>{le(e),Z(n.errors,e),R.state.next({name:e,errors:n.errors})}):(Object.keys(O).forEach(H),n.errors={},R.state.next({errors:n.errors}))},it=(e,t,r)=>{H(e);let i=(w(s,e,{_f:{}})._f||{}).ref,{ref:a,message:o,type:c,types:l,...u}=w(n.errors,e)||{};D(n.errors,e,{...u,...t,ref:i}),R.state.next({name:e,errors:n.errors,isValid:!1}),r&&r.shouldFocus&&i&&i.focus&&i.focus()},at=(e,t)=>{if(E(e)){A++;let{unsubscribe:n}=R.state.subscribe({next:n=>`values`in n&&e(n.values||Se(void 0,t),n)}),r=!1;return{unsubscribe:()=>{r||(r=!0,A--,n())}}}return Se(e,t,!0)},ot=e=>{let t=!!e.formState?.values;t&&A++;let{unsubscribe:r}=R.state.subscribe({next:t=>{if(Xe(e.name,t.name,e.exact)&&Ye(t,e.formState||N,vt,e.reRenderRoot)){let r={...f};e.callback({values:r,...n,...t,defaultValues:u})}}});if(!t)return r;let i=!1;return()=>{i||(i=!0,A--,r())}},st=e=>(b.mount=!0,F={...F,...e.formState},ot({...e,formState:{...M,...e.formState}})),ct=(e,r={})=>{for(let i of e?K(e):x.mount)x.mount.delete(i),x.array.delete(i),x.disabled.delete(i),r.keepValue||(Z(s,i),Z(f,i)),r.keepError||(le(i),Z(n.errors,i)),!r.keepDirty&&Z(n.dirtyFields,i),!r.keepTouched&&Z(n.touchedFields,i),!r.keepIsValidating&&Z(n.validatingFields,i),!t.shouldUnregister&&!r.keepDefaultValue&&Z(u,i);A&&R.state.next({values:h(f)}),R.state.next({...n,...r.keepDirty?{}:{isDirty:X()},...r.keepIsValidating?{}:{isValidating:!V(n.validatingFields)}}),!r.keepIsValid&&U()},lt=({disabled:e,name:t})=>{if(T(e)&&b.mount||e||x.disabled.has(t)){let n=x.disabled.has(t)!==!!e;e?x.disabled.add(t):x.disabled.delete(t),n&&b.mount&&!b.action&&U()}},ut=(e,n={})=>{let r=w(s,e),i=T(n.disabled)||T(t.disabled),a=!x.registerName.has(e)&&r&&r._f&&!r._f.mount;return D(s,e,{...r||{},_f:{...r&&r._f?r._f:{ref:{name:e}},name:e,mount:!0,...n}}),x.mount.add(e),r&&!a?lt({disabled:T(n.disabled)?n.disabled:t.disabled,name:e}):ge(e,!0,n.value),{...i?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:We(n.min),max:We(n.max),minLength:We(n.minLength),maxLength:We(n.maxLength),pattern:We(n.pattern)}:{},name:e,onChange:Fe,onBlur:Fe,ref:i=>{if(i){x.registerName.add(e),ut(e,n),x.registerName.delete(e),r=w(s,e);let t=C(i.value)&&i.querySelectorAll&&i.querySelectorAll(`input,select,textarea`)[0]||i,a=je(t),o=r._f.refs||[];if(a?o.find(e=>e===t):t===r._f.ref)return;let c={...r._f};a?(c.refs=[...o.filter(Me),t,...Array.isArray(w(u,e))?[{}]:[]],c.ref={type:t.type,name:e}):(c.ref=t,delete c.refs),D(s,e,{_f:c}),ge(e,!1,void 0,t)}else r=w(s,e,{}),r._f&&(r._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(p(x.array,e)&&b.action)&&x.unMount.add(e)}}},dt=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&oe(s,Ie,x.mount),ft=e=>{T(e)&&(R.state.next({disabled:e}),oe(s,(t,n)=>{let r=w(s,n);r&&(t.disabled=r._f.disabled||e,Array.isArray(r._f.refs)&&r._f.refs.forEach(t=>{t.disabled=r._f.disabled||e}))},0))},pt=(e,r)=>async i=>{let a,o;i&&(i.preventDefault&&i.preventDefault(),i.persist&&i.persist());let c=h(f);if(R.state.next({isSubmitting:!0}),t.resolver){let e=z,{errors:t,values:r}=await J();if(e!==z)return;W(),Object.keys(O).forEach(H),n.errors=t,c=h(r)}else await Y({fields:s,eventType:g.SUBMIT}),Z(n.errors,y);if(x.disabled.size)for(let e of x.disabled)Z(c,e);if(V(n.errors)){R.state.next({errors:{}});try{a=await e(c,i)}catch(e){o=e}}else r&&await r({...n.errors},i),dt(),setTimeout(dt);if(R.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:V(n.errors)&&!o,submitCount:n.submitCount+1,errors:n.errors}),o)throw o;return a},mt=(e,t={})=>{w(s,e)&&(Z(n.validatingFields,e),C(t.defaultValue)?Q(e,h(w(u,e))):(Q(e,t.defaultValue),D(u,e,h(t.defaultValue))),t.keepTouched||Z(n.touchedFields,e),t.keepDirty||(Z(n.dirtyFields,e),n.isDirty=t.defaultValue?X(e,h(w(u,e))):X()),t.keepError||(H(e),Z(n.errors,e),U()),R.state.next({...n,isValidating:!V(n.validatingFields)}))},ht=(e,r={})=>{z++;let i=e?h(e):u,a=h(i),o=V(e),c=a,l=s;if(Object.keys(O).forEach(H),r.keepDefaultValues||(u=i),!r.keepValues){if(r.keepDirtyValues){let e=new Set([...x.mount,...Ne($(u,f,void 0,l),n.dirtyFields)]);for(let t of e){let e=w(n.dirtyFields,t),r=w(f,t),i=w(c,t);e&&!C(r)?D(c,t,r):!e&&!C(i)&&Q(t,i)}}else{if(m&&C(e))for(let e of x.mount){let t=w(s,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(ce(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(r.keepFieldsRef)for(let e of x.mount)Q(e,w(c,e));else s={}}if(t.shouldUnregister){if(f=r.keepDefaultValues?h(u):{},r.keepFieldsRef)for(let e of x.mount)D(f,e,w(c,e))}else f=h(c);R.array.next({values:{...c}}),R.state.next({name:void 0,type:void 0,values:{...c}})}x={mount:r.keepDirtyValues?x.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},b.mount=!N.isValid||!!r.keepIsValid||!!r.keepDirtyValues||!t.shouldUnregister&&!V(c),b.watch=!!t.shouldUnregister,b.keepIsValid=!!r.keepIsValid,b.action=!1,b.actionArrayLengths.clear(),r.keepErrors||(n.errors={}),R.state.next({submitCount:r.keepSubmitCount?n.submitCount:0,isDirty:o?!1:r.keepDirty?n.isDirty:r.keepValues?X():!(!r.keepDefaultValues||P(e,u)),isSubmitted:r.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:o?{}:r.keepDirtyValues?r.keepDefaultValues&&f?$(u,f,void 0,l):n.dirtyFields:r.keepDefaultValues&&e?$(u,e,void 0,l):r.keepDirty?n.dirtyFields:r.keepValues?$(u,f,void 0,l):{},touchedFields:r.keepTouched?n.touchedFields:{},...!r.keepIsValidating&&(n.isValidating||!V(n.validatingFields))?{validatingFields:{},isValidating:!1}:null,errors:r.keepErrors?n.errors:{},isSubmitSuccessful:r.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:u})},gt=(e,n)=>ht(E(e)?e(f):e,{...t.resetOptions,...n}),_t=(e,t={})=>{let n=w(s,e),r=n&&n._f;if(r){let e=r.refs?r.refs[0]:r.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&E(e.select)&&e.select()})}},vt=e=>{let{name:t,type:r,values:i,...a}=e;n={...n,...a}};R.state.subscribe({next:vt});let yt={control:{register:ut,unregister:ct,getFieldState:Ge,handleSubmit:pt,setError:it,_subscribe:ot,_runSchema:J,_updateIsValidating:W,_focusError:dt,_getWatch:Se,_getDirty:X,_setValid:U,_setFieldArray:de,_setDisabledField:lt,_setErrors:pe,_getFieldArray:Ce,_reset:ht,_resetDefaultValues:()=>E(t.defaultValues)&&t.defaultValues().then(e=>{gt(e,t.resetOptions),R.state.next({isLoading:!1})}),_removeUnmounted:xe,_disableForm:ft,_subjects:R,_proxyFormState:N,get _fields(){return s},get _formValues(){return f},get _state(){return b},set _state(e){b=e},get _defaultValues(){return u},get _names(){return x},set _names(e){x=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e},j=ie(t.mode),ee=ie(t.reValidateMode),B=t.criteriaMode===_.all}},subscribe:st,trigger:Le,register:ut,handleSubmit:pt,watch:at,setValue:Q,setValues:Pe,getValues:Re,getErrors:ze,reset:gt,resetField:mt,resetDefaultValues:(e,t={})=>{if(u=h(e),!t.keepDirty){let e=$(u,f,void 0,s);n.dirtyFields=e,n.isDirty=!V(e)}t.keepIsValid||U(),R.state.next({...n,defaultValues:u})},clearErrors:rt,unregister:ct,setError:it,setFocus:_t,getFieldState:Ge};return{...yt,formControl:yt}}function it(e={}){let t=n.useRef(void 0),r=n.useRef(void 0),i=n.useRef(e.formControl),[a,o]=n.useState(()=>({...h(nt),isLoading:E(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:E(e.defaultValues)?void 0:e.defaultValues}));if(!t.current||e.formControl&&i.current!==e.formControl){if(i.current=e.formControl,e.formControl)t.current={...e.formControl,formState:a},e.defaultValues&&!E(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...r}=rt(e);t.current={...r,formState:a}}}let s=t.current.control;s._options=e;let c=()=>({...s._formState,defaultValues:s._defaultValues}),{resyncIfNeeded:l,snapshot:u}=F(c);return j(()=>{l(!0,c,o);let e=s._subscribe({formState:s._proxyFormState,callback:()=>o({...s._formState,defaultValues:s._defaultValues}),reRenderRoot:!0});return o(e=>({...e,isReady:!0})),s._formState.isReady=!0,()=>{e(),u(!0,c)}},[s,l,u]),n.useEffect(()=>s._disableForm(e.disabled),[s,e.disabled]),n.useEffect(()=>{e.mode&&(s._options.mode=e.mode),e.reValidateMode&&(s._options.reValidateMode=e.reValidateMode)},[s,e.mode,e.reValidateMode]),n.useEffect(()=>{e.errors&&(s._setErrors(e.errors),s._focusError())},[s,e.errors]),n.useEffect(()=>{e.shouldUnregister&&s._subjects.state.next({values:s._getWatch()})},[s,e.shouldUnregister]),n.useEffect(()=>{if(s._proxyFormState.isDirty){let e=s._getDirty();e!==a.isDirty&&s._subjects.state.next({isDirty:e})}},[s,a.isDirty]),n.useEffect(()=>{e.values&&!P(e.values,r.current)?(s._reset(e.values,{keepFieldsRef:!0,...s._options.resetOptions}),s._options.resetOptions?.keepIsValid||s._setValid(),r.current=e.values,o(e=>({...e}))):s._resetDefaultValues()},[s,e.values]),n.useEffect(()=>{s._state.mount||(s._setValid(),s._state.mount=!0),s._state.watch&&(s._state.watch=!1,s._subjects.state.next({...s._formState})),s._removeUnmounted()}),t.current.formState=n.useMemo(()=>A(a,s),[s,a]),t.current}var at=(e,t,n)=>{if(e&&`reportValidity`in e){let r=w(n,t);e.setCustomValidity(r&&r.message||``),e.reportValidity()}},ot=(e,t)=>{for(let n in t.fields){let r=t.fields[n];r&&r.ref&&`reportValidity`in r.ref?at(r.ref,n,e):r&&r.refs&&r.refs.forEach(t=>at(t,n,e))}},st=(e,t)=>{t.shouldUseNativeValidation&&ot(e,t);let n={};for(let r in e){let i=w(t.fields,r),a=Object.assign(e[r]||{},{ref:i&&i.refs?i.refs[0]:i&&i.ref});if(ct(t.names||Object.keys(e),r)){let e=Object.assign({},w(n,r));D(e,`root`,a),D(n,r,e)}else D(n,r,a)}return n},ct=(e,t)=>{let n=lt(t).replace(/[.*+?^${}()|\\]/g,`\\$&`);return e.some(e=>lt(e).match(`^${n}\\.\\d+`))};function lt(e){return e.replace(/\[(\d+)]/g,`.$1`).replace(/[[\]]/g,``)}function ut(){return ut=Object.assign?Object.assign.bind():function(e){for(var t=1;t0){var s=r.errors.reduce(function(e,t){return t.length